From 043ce9731360bdaffdacc7ee8188ec33ce649d96 Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Wed, 13 Aug 2025 09:14:43 +0700 Subject: (andri) fix API User --- indoteknik_api/controllers/api_v1/user.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py index b5b7e055..3cfad141 100644 --- a/indoteknik_api/controllers/api_v1/user.py +++ b/indoteknik_api/controllers/api_v1/user.py @@ -396,7 +396,7 @@ class User(controller.Controller): 'user': request.env['res.users'].api_single_response(user) }) - @http.route(prefix + 'user/', auth='public', methods=['PUT', 'OPTIONS'], csrf=False) + @http.route(prefix + 'user/', auth='public', methods=['POST', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized() def update_user(self, **kw): id = kw.get('id') @@ -446,7 +446,7 @@ class User(controller.Controller): return self.response(address) - @http.route(prefix + 'user//switch', auth='public', methods=['PUT', 'OPTIONS'], csrf=False) + @http.route(prefix + 'user//switch', auth='public', methods=['POST', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized() def switch_account(self, **kw): id = int(kw.get('id')) -- cgit v1.2.3 From 48acecc8e8b1f77b9b9ea7d71e3d0ff72bed1f3f Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Wed, 13 Aug 2025 13:23:50 +0700 Subject: (andri) fix --- indoteknik_api/controllers/api_v1/user.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py index 3cfad141..50ea8c98 100644 --- a/indoteknik_api/controllers/api_v1/user.py +++ b/indoteknik_api/controllers/api_v1/user.py @@ -489,7 +489,7 @@ class User(controller.Controller): if type_acc == 'business': parameter = [ - ('company_type', '=', 'company'), + ('is_company', '=', True), ('name', 'ilike', business_name) ] if parent_id: -- cgit v1.2.3 From b5a88d98b019c5a561864e56b8d73aaec4f4896a Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Wed, 13 Aug 2025 14:06:54 +0700 Subject: (andri) try fix user company request via switchaccount --- indoteknik_api/controllers/api_v1/user.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py index 50ea8c98..9044e69c 100644 --- a/indoteknik_api/controllers/api_v1/user.py +++ b/indoteknik_api/controllers/api_v1/user.py @@ -691,11 +691,10 @@ class User(controller.Controller): new_company_request = request.env['user.company.request'].search(parameter, limit=1) is_approve = '' if new_company_request: - # Mengambil nilai is_approve - if new_company_request.is_approve == False: + if not new_company_request.is_approve: # None atau '' response['status'] = 'pending' else: - response['status'] = new_company_request.is_approve + response['status'] = new_company_request.is_approve # 'approved' atau 'rejected' else: response['status'] = False return self.response(response) -- cgit v1.2.3 From c9111bcf2c71a5dac6f13dc5aceb55956127a055 Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Fri, 15 Aug 2025 13:59:36 +0700 Subject: (andri) fix --- indoteknik_api/controllers/api_v1/user.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py index 9044e69c..d134fc5a 100644 --- a/indoteknik_api/controllers/api_v1/user.py +++ b/indoteknik_api/controllers/api_v1/user.py @@ -674,7 +674,7 @@ class User(controller.Controller): # request_company.send_company_request_mail_switch() request_company.send_company_request_mail_switch() - response['switch'] = 'Pending' + response['switch'] = 'pending' return self.response(response) @http.route(prefix + 'user//switch_progres', auth='public', methods=['GET', 'OPTIONS'], csrf=False) @@ -699,6 +699,20 @@ class User(controller.Controller): response['status'] = False return self.response(response) + # @http.route(prefix + 'user//parent_status', auth='public', methods=['GET', 'OPTIONS'], csrf=False) + # # @controller.Controller.must_authorized() + # def parent_status(self, **kw): + # id = int(kw.get('id')) + # response = { + # 'parentId': None, + # 'parentName': None + # } + # partner = request.env['res.partner'].sudo().search([('id', '=', id)], limit=1) + # if partner and partner.parent_id: + # response['parentId'] = partner.parent_id.id + # response['parentName'] = partner.parent_id.name + # return self.response(response) + def get_user_by_email(self, email): return request.env['res.users'].search([ ('login', '=', email), -- cgit v1.2.3 From b6da6f96857b87f6433c9550085d86adf9319d08 Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Fri, 15 Aug 2025 18:04:51 +0700 Subject: (andri) fix api --- indoteknik_api/controllers/api_v1/user.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py index b5b7e055..1d35e01f 100644 --- a/indoteknik_api/controllers/api_v1/user.py +++ b/indoteknik_api/controllers/api_v1/user.py @@ -678,7 +678,7 @@ class User(controller.Controller): return self.response(response) @http.route(prefix + 'user//switch_progres', auth='public', methods=['GET', 'OPTIONS'], csrf=False) - # @controller.Controller.must_authorized() + @controller.Controller.must_authorized() def switch_account_progres(self, **kw): id = int(kw.get('id')) # user = request.env['res.partner'].search([('id', '=', id)], limit=1) -- cgit v1.2.3 From e534cd541152921e9f041176ab18b86172367fa9 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Sat, 16 Aug 2025 13:01:54 +0700 Subject: Partner Map API --- indoteknik_api/controllers/api_v1/partner.py | 69 +++++++++++++++++----------- 1 file changed, 43 insertions(+), 26 deletions(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index acec19f7..b1d8d5f3 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -65,44 +65,61 @@ class Partner(controller.Controller): @controller.Controller.must_authorized() def write_partner_address_by_id(self, id, **kw): headers = { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', - 'Access-Control-Allow-Headers': '*' - } + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', + 'Access-Control-Allow-Headers': '*' + } if request.httprequest.method == 'OPTIONS': return Response(status=200, headers=headers) + try: params = self.get_request_params(request.jsonrequest, { - 'id': ['required', 'number'], - 'type': ['default:other'], - 'name': ['required'], - 'email': ['required'], - 'mobile': ['required'], - 'phone': [''], - 'street': ['required'], - 'state_id': ['required', 'alias:state_id'], - 'city_id': ['required', 'alias:kota_id'], - 'district_id': ['alias:kecamatan_id'], - 'sub_district_id': ['alias:kelurahan_id', 'exclude_if_null'], - 'zip': ['required'], - 'longtitude': '', - 'latitude': '', - 'address_map': [], - 'alamat_lengkap_text': [] - }) + 'id': ['required', 'number'], + 'type': ['default:other'], + 'name': ['required'], + 'email': ['required'], + 'mobile': ['required'], + 'phone': [''], + 'street': ['required'], + 'state_id': ['required', 'alias:state_id'], + 'city_id': ['required', 'alias:kota_id'], + 'district_id': ['alias:kecamatan_id'], + 'sub_district_id': ['alias:kelurahan_id', 'exclude_if_null'], + 'zip': ['required'], + 'longtitude': '', + 'latitude': '', + 'address_map': [], + + 'alamat_lengkap_text': [] + }) if not params['valid']: - return {'headers' : headers,'code': 400, 'description': params} + return {'headers': headers, 'code': 400, 'description': params} partner = request.env['res.partner'].sudo().search([('id', '=', id)], limit=1) if not partner: - return {'headers' : headers,'code': 404, 'description': 'User not found'} + return {'headers': headers, 'code': 404, 'description': 'User not found'} + vals = dict(params['value']) + vals.pop('id', None) + use_pin = bool(request.jsonrequest.get('use_pin')) + + if not use_pin: + vals.pop('address_map', None) + vals.pop('latitude', None) + vals.pop('longtitude', None) + else: + lat = vals.get('latitude') + lng = vals.get('longtitude') + if not lat or not lng or float(lat) == 0.0 or float(lng) == 0.0: + vals.pop('latitude', None) + vals.pop('longtitude', None) + + partner.write(vals) - partner.write(params['value']) - return {'id': partner.id, 'headers' : headers} + return {'id': partner.id, 'headers': headers} except Exception as e: - return {'headers' : headers,'code': 500, 'description': f'Internal Error: {str(e)}'} + return {'headers': headers, 'code': 500, 'description': f'Internal Error: {str(e)}'} @http.route(prefix + 'partner/address', auth='public', methods=['POST', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized() -- cgit v1.2.3 From fc1527eda174b290dee393abec15574cf1bac780 Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Sat, 16 Aug 2025 14:52:40 +0700 Subject: fix --- indoteknik_api/controllers/api_v1/user.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py index 28ac8a5e..dde30fec 100644 --- a/indoteknik_api/controllers/api_v1/user.py +++ b/indoteknik_api/controllers/api_v1/user.py @@ -677,7 +677,7 @@ class User(controller.Controller): response['switch'] = 'pending' return self.response(response) - @http.route(prefix + 'user//switch_progres', auth='public', methods=['GET', 'OPTIONS'], csrf=False) + @http.route(prefix + 'user//switch_progres', auth='public', methods=['GET', 'OPTIONS']) @controller.Controller.must_authorized() def switch_account_progres(self, **kw): id = int(kw.get('id')) -- cgit v1.2.3 From 463101a734c8b64cfca4b7cbff5d060295e841ef Mon Sep 17 00:00:00 2001 From: Miqdad Date: Mon, 18 Aug 2025 14:08:33 +0700 Subject: accept context from quotation website --- indoteknik_api/controllers/api_v1/sale_order.py | 68 ++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 2 deletions(-) (limited to 'indoteknik_api/controllers/api_v1') diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index d199cd84..374b49a2 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -544,13 +544,76 @@ class SaleOrder(controller.Controller): main_partner = partner_invoice.get_main_parent() _logger.info( f"Partner Info - Sales: {sales_partner.id}, Invoice: {partner_invoice.id}, Main: {main_partner.id}") - + + def _get_request_context(params, kw): + # 1) kw (querystring di route) + ctx = kw.get('context') + if ctx: + return str(ctx).strip().lower() + + # 2) querystring langsung + ctx = request.httprequest.args.get('context') + if ctx: + return str(ctx).strip().lower() + + # 3) form-encoded body + ctx = request.httprequest.form.get('context') + if ctx: + return str(ctx).strip().lower() + + # 4) JSON body (kalau ada) + try: + js = request.httprequest.get_json(force=False, silent=True) or {} + ctx = js.get('context') + if ctx: + return str(ctx).strip().lower() + except Exception: + pass + + # 5) fallback: dari hasil get_request_params kalau kamu tambahkan 'context' di mapping + try: + return str((params.get('value', {}) or {}).get('context') or '').strip().lower() + except Exception: + return '' + + ctx = _get_request_context(params, kw) + _logger.info(f"[checkout] context sources -> kw={repr(kw.get('context'))}, " + f"args={repr(request.httprequest.args.get('context'))}, " + f"form={repr(request.httprequest.form.get('context'))}, " + f"json={(request.httprequest.get_json(force=False, silent=True) or {}).get('context') if hasattr(request.httprequest,'get_json') else None}, " + f"normalized={ctx}") + + payment_term_id_value = 26 + + ctx = str((kw.get('context') or '')) + if ctx == 'quotation': + try: + creator_user_id = params['value'].get('user_id') or request.env.user.id + user = request.env['res.users'].sudo().browse(int(creator_user_id)) + + term_name = None + if user and user.exists() and user.partner_id: + prop = getattr(user.partner_id, 'property_payment_term_id', False) + # Kalau Many2one -> pakai .name, kalau string/selection -> cast ke str + if prop: + term_name = getattr(prop, 'name', False) or str(prop).strip() + + if term_name: + term = request.env['account.payment.term'].sudo().search( + [('name', 'ilike', term_name)], + limit=1 + ) + if term: + payment_term_id_value = term.id + except Exception as e: + _logger.warning(f"Gagal resolve payment term dari user: {e}") + parameters = { 'warehouse_id': 8, 'carrier_id': 1, 'sales_tax_id': 23, 'pricelist_id': user_pricelist or product_pricelist_default_discount_id, - 'payment_term_id': 26, + 'payment_term_id':payment_term_id_value, 'team_id': 2, 'company_id': 1, 'currency_id': 12, @@ -633,6 +696,7 @@ class SaleOrder(controller.Controller): _logger.info(f"Final is_has_disc: {is_has_disc}") + order_line = request.env['sale.order.line'].create({ 'company_id': 1, 'order_id': sale_order.id, -- cgit v1.2.3