diff options
| author | Rafi Zadanly <zadanlyr@gmail.com> | 2024-03-05 16:05:41 +0700 |
|---|---|---|
| committer | Rafi Zadanly <zadanlyr@gmail.com> | 2024-03-05 16:05:41 +0700 |
| commit | f53312f3f2c78d50d838c249a8d0eb1ed1e5b7f2 (patch) | |
| tree | ca6703e819719d702546c50c7dd3dade2df0991e /indoteknik_api | |
| parent | 388ea472f3913accd9e962f7f5c592860be98488 (diff) | |
Add web sale approval feature
Diffstat (limited to 'indoteknik_api')
| -rw-r--r-- | indoteknik_api/controllers/api_v1/sale_order.py | 74 | ||||
| -rw-r--r-- | indoteknik_api/models/__init__.py | 1 | ||||
| -rw-r--r-- | indoteknik_api/models/res_partner.py | 14 | ||||
| -rw-r--r-- | indoteknik_api/models/res_users.py | 21 |
4 files changed, 95 insertions, 15 deletions
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 62f20ed8..53a9b127 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -79,12 +79,14 @@ class SaleOrder(controller.Controller): ('name', 'ilike', '%' + name + '%'), ('partner_purchase_order_name', 'ilike', '%' + name + '%') ] + 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_PARTNER + 'sale_order/<id>', auth='public', method=['GET', 'OPTIONS']) @@ -102,8 +104,7 @@ class SaleOrder(controller.Controller): data = {} sale_order = request.env['sale.order'].search(domain) if sale_order: - data = request.env['sale.order'].api_v1_single_response( - sale_order, context='with_detail') + data = request.env['sale.order'].api_v1_single_response(sale_order, context='with_detail') return self.response(data) @@ -117,8 +118,7 @@ class SaleOrder(controller.Controller): if not params['valid']: return self.response(code=400, description=params) - partner_child_ids = self.get_partner_child_ids( - params['value']['partner_id']) + partner_child_ids = self.get_partner_child_ids(params['value']['partner_id']) domain = [ ('id', '=', params['value']['id']), ('partner_id', 'in', partner_child_ids) @@ -131,6 +131,72 @@ class SaleOrder(controller.Controller): sale_order, context='with_detail') return self.response(data) + + @http.route(PREFIX_PARTNER + 'sale_order/<id>/approve', auth='public', method=['POST', 'OPTIONS'], csrf=False) + @controller.Controller.must_authorized(private=True, private_key='partner_id') + def partner_approve_sale_order_by_id(self, **kw): + params = self.get_request_params(kw, { + 'partner_id': ['number'], + 'id': ['number'] + }) + + if not params['valid']: + return self.response(code=400, description=params) + + value = params['value'] + partner_child_ids = self.get_partner_child_ids(value['partner_id']) + + sale_order = request.env['sale.order'].search([ + ('id', '=', value['id']), + ('partner_id', 'in', partner_child_ids) + ]) + if not sale_order: + return self.response(code=404, description='Sale Order not found') + + partner = request.env['res.partner'].browse(value['partner_id']) + if not partner.web_role: + return self.response(code=400, description='Unauthorized') + + if partner.web_role: + sale_order.web_approval = 'cust_%s' % partner.web_role + + if sale_order.web_approval == 'cust_director': + sale_order.approval_status = 'pengajuan1' + + return self.response('success') + + @http.route(PREFIX_PARTNER + 'sale_order/<id>/reject', auth='public', method=['POST', 'OPTIONS'], csrf=False) + @controller.Controller.must_authorized(private=True, private_key='partner_id') + def partner_reject_sale_order_by_id(self, **kw): + params = self.get_request_params(kw, { + 'partner_id': ['number'], + 'id': ['number'] + }) + + if not params['valid']: + return self.response(code=400, description=params) + + value = params['value'] + partner_child_ids = self.get_partner_child_ids(value['partner_id']) + + sale_order = request.env['sale.order'].search([ + ('id', '=', value['id']), + ('partner_id', 'in', partner_child_ids) + ]) + if not sale_order: + return self.response(code=404, description='Sale Order not found') + + partner = request.env['res.partner'].browse(value['partner_id']) + if not partner.web_role: + return self.response(code=400, description='Unauthorized') + + if partner.web_role: + sale_order.web_approval = 'cust_%s' % partner.web_role + + sale_order.state = 'cancel' + sale_order.approval_status = False + + return self.response('success') @http.route(PREFIX_PARTNER + 'sale_order/<id>/upload_po', auth='public', method=['POST', 'OPTIONS'], csrf=False) def partner_upload_po_sale_order(self, **kw): diff --git a/indoteknik_api/models/__init__.py b/indoteknik_api/models/__init__.py index 892d2657..8c85938c 100644 --- a/indoteknik_api/models/__init__.py +++ b/indoteknik_api/models/__init__.py @@ -9,3 +9,4 @@ from . import sale_order from . import x_manufactures from . import website_content from . import coupon_program +from . import res_partner diff --git a/indoteknik_api/models/res_partner.py b/indoteknik_api/models/res_partner.py new file mode 100644 index 00000000..57200ac1 --- /dev/null +++ b/indoteknik_api/models/res_partner.py @@ -0,0 +1,14 @@ +from odoo import models + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + def get_main_parent(self): + partner = self + + while partner.parent_id: + partner = partner.parent_id + + return partner +
\ No newline at end of file diff --git a/indoteknik_api/models/res_users.py b/indoteknik_api/models/res_users.py index f331321f..eecab6ef 100644 --- a/indoteknik_api/models/res_users.py +++ b/indoteknik_api/models/res_users.py @@ -6,27 +6,26 @@ class ResUsers(models.Model): def api_single_response(self, res_user, with_detail=''): config = self.env['ir.config_parameter'] - - user_pricelist = res_user.property_product_pricelist - pricelist_tier = user_pricelist.sudo().get_tier_name() + + partner = res_user.partner_id.get_main_parent() data = { 'id': res_user.id, - 'parent_id': res_user.parent_id.id or False, - 'parent_name': res_user.parent_id.name or False, + 'parent_id': res_user.parent_id.id or None, + 'parent_name': res_user.parent_id.name or None, 'partner_id': res_user.partner_id.id, 'name': res_user.name, 'email': res_user.login, 'phone': res_user.phone or '', 'mobile': res_user.mobile or '', 'external': res_user.share, - 'company': res_user.company_type == 'company', - 'pricelist': pricelist_tier + 'company': partner.company_type == 'company', + 'pricelist': res_user.property_product_pricelist.sudo().get_tier_name(), + 'web_role': partner.web_role or None, + 'feature': { + 'so_approval': partner.use_so_approval + } } - - - if res_user.parent_id: - data.update({ 'company': res_user.parent_id.company_type == 'company' }) return data |
