summaryrefslogtreecommitdiff
path: root/indoteknik_api
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-01-21 08:21:31 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-01-21 08:21:31 +0700
commit33a366ae44bc045439087170ed69b86033cda2d8 (patch)
treeec2414c7bcbdb0548efc251a0fc792d4f93d66ab /indoteknik_api
parentac80b37ffeaefc9efeec732c167ba272bc1a984b (diff)
api sale order and user
Diffstat (limited to 'indoteknik_api')
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py58
-rw-r--r--indoteknik_api/controllers/controller.py8
-rw-r--r--indoteknik_api/models/__init__.py1
-rw-r--r--indoteknik_api/models/res_users.py19
-rw-r--r--indoteknik_api/models/sale_order.py14
5 files changed, 79 insertions, 21 deletions
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py
index a8c5bacc..dce72a76 100644
--- a/indoteknik_api/controllers/api_v1/sale_order.py
+++ b/indoteknik_api/controllers/api_v1/sale_order.py
@@ -6,6 +6,36 @@ import json
class SaleOrder(controller.Controller):
prefix = '/api/v1/'
+ @http.route(prefix + 'sale_order', auth='public', method=['GET', 'OPTIONS'])
+ def get_sale_order(self, **kw):
+ if not self.authenticate():
+ return self.response(code=401, description='Unauthorized')
+
+ params = self.get_request_params(kw, {
+ 'name': [],
+ 'partner_id': ['required', 'number'],
+ 'limit': ['default:0', 'number'],
+ 'offset': ['default:0', 'number'],
+ })
+ limit = params['value']['limit']
+ offset = params['value']['offset']
+
+ if not params['valid']:
+ return self.response(code=400, description=params)
+
+ parent_partner_id = request.env['res.partner'].search([('id', '=', params['value']['partner_id'])], limit=1).parent_id.id
+ partner_childs = request.env['res.partner'].search([('parent_id', '=', int(parent_partner_id))])
+ partner_child_ids = [v['id'] for v in partner_childs] + [params['value']['partner_id']]
+
+ domain = [('partner_id', 'in', partner_child_ids)]
+ sale_orders = request.env['sale.order'].search(domain, offset=offset, limit=limit)
+ data = {
+ 'sale_order_total': request.env['sale.order'].search_count(domain),
+ 'sale_orders': [request.env['sale.order'].api_v1_single_response(x) for x in sale_orders]
+ }
+
+ return self.response(data)
+
@http.route(prefix + 'sale_order/checkout', auth='public', method=['POST', 'OPTIONS'], csrf=False)
def create_sale_order(self, **kw):
if not self.authenticate():
@@ -13,10 +43,19 @@ class SaleOrder(controller.Controller):
product_pricelist_default_discount_id = request.env['ir.config_parameter'].get_param('product.pricelist.default_discount_id')
product_pricelist_default_discount_id = int(product_pricelist_default_discount_id)
+
+ params = self.get_request_params(kw, {
+ 'partner_id': ['required', 'number'],
+ 'partner_shipping_id': ['required', 'number'],
+ 'partner_invoice_id': ['required', 'number'],
+ 'order_line': ['required', 'default:[]'],
+ 'po_number': [],
+ 'po_file': [],
+ })
- partner_id = kw.get('partner_id')
- partner_shipping_id = kw.get('partner_shipping_id')
- partner_invoice_id = kw.get('partner_invoice_id')
+ if not params['valid']:
+ return self.response(code=400, description=params)
+
parameters = {
'warehouse_id': 8,
'carrier_id': 1,
@@ -28,15 +67,16 @@ class SaleOrder(controller.Controller):
'currency_id': 12,
'state': 'draft',
'picking_policy': 'direct',
- 'partner_id': partner_id,
- 'partner_shipping_id': partner_shipping_id,
- 'real_shipping_id': partner_shipping_id,
- 'partner_invoice_id': partner_invoice_id
+ 'partner_id': params['value']['partner_id'],
+ 'partner_shipping_id': params['value']['partner_shipping_id'],
+ 'real_shipping_id': params['value']['partner_shipping_id'],
+ 'partner_invoice_id': params['value']['partner_invoice_id'],
+ 'partner_purchase_order_name': params['value']['po_number'],
+ 'partner_purchase_order_file': params['value']['po_file']
}
sale_order = request.env['sale.order'].create([[parameters]])
- order_line = kw.get('order_line', "[]")
- order_line = json.loads(order_line)
+ order_line = json.loads(params['value']['order_line'])
parameters = []
for line in order_line:
price = request.env['product.pricelist'].compute_price(product_pricelist_default_discount_id, line['product_id'])
diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py
index a08d9fa4..18f54d71 100644
--- a/indoteknik_api/controllers/controller.py
+++ b/indoteknik_api/controllers/controller.py
@@ -68,19 +68,19 @@ class Controller(http.Controller):
elif rule == 'number' and value and not value.isdigit():
result['reason'].append(key + ' must be ' + rule)
+ result['query'][key] = value
if not value and default:
value = default
if is_number and value.isdigit():
value = int(value)
- if not value:
+ if not value and not default:
value = None
result['value'][alias] = value
- result['query'][key] = value
if len(result['reason']) > 0:
result['valid'] = False
- if not result['valid']:
- del result['value']
+ # if not result['valid']:
+ # del result['value']
return result
def time_to_str(self, object, format):
diff --git a/indoteknik_api/models/__init__.py b/indoteknik_api/models/__init__.py
index 4447c215..12a1f7fd 100644
--- a/indoteknik_api/models/__init__.py
+++ b/indoteknik_api/models/__init__.py
@@ -3,5 +3,6 @@ from . import product_pricelist
from . import product_product
from . import product_template
from . import res_users
+from . import sale_order
from . import x_manufactures
from . import website_content
diff --git a/indoteknik_api/models/res_users.py b/indoteknik_api/models/res_users.py
index 152e3017..99a3838d 100644
--- a/indoteknik_api/models/res_users.py
+++ b/indoteknik_api/models/res_users.py
@@ -12,24 +12,27 @@ class ResUsers(models.Model):
'email': res_user.login,
'phone': res_user.phone or '',
'mobile': res_user.mobile or '',
- 'external': res_user.share
+ 'external': res_user.share,
+ 'company': res_user.company_type == 'company'
}
+ if res_user.parent_id:
+ data.update({ 'company': res_user.parent_id.company_type == 'company' })
return data
def api_address_response(self, user):
data = {
'id': user.id,
- 'type': user.type,
- 'name': user.name,
- 'mobile': user.mobile,
- 'email': user.email,
- 'street': user.street,
- 'street2': user.street2,
+ 'type': user.type or '',
+ 'name': user.name or '',
+ 'mobile': user.mobile or '',
+ 'email': user.email or '',
+ 'street': user.street or '',
+ 'street2': user.street2 or '',
'city': None,
'district': None,
'sub_district': None,
- 'zip': user.zip
+ 'zip': user.zip or ''
}
if user.kota_id:
diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py
new file mode 100644
index 00000000..3359ee6a
--- /dev/null
+++ b/indoteknik_api/models/sale_order.py
@@ -0,0 +1,14 @@
+from odoo import models
+
+
+class SaleOrder(models.Model):
+ _inherit = 'sale.order'
+
+ def api_v1_single_response(self, sale_order):
+ data = {
+ 'id': sale_order.id,
+ 'name': sale_order.name,
+ 'sales': sale_order.user_id.name,
+ 'amount_total': sale_order.amount_total
+ }
+ return data