summaryrefslogtreecommitdiff
path: root/indoteknik_api
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2025-08-30 09:25:35 +0700
committerit-fixcomart <it@fixcomart.co.id>2025-08-30 09:25:35 +0700
commit5ef97855847141eaa705be36a2aae17cdf928258 (patch)
tree449d86549d69024e92032b2246f8481bf081302a /indoteknik_api
parent0298605049e29ef436a5e6984b743f89fed712b3 (diff)
parent63426e9de8700daff0c0f7cf0389d2be55e982fb (diff)
<hafid> fix conflict merge
Diffstat (limited to 'indoteknik_api')
-rw-r--r--indoteknik_api/controllers/api_v1/partner.py69
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py68
-rw-r--r--indoteknik_api/controllers/api_v1/user.py31
3 files changed, 131 insertions, 37 deletions
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()
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,
diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py
index b5b7e055..dde30fec 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/<id>', auth='public', methods=['PUT', 'OPTIONS'], csrf=False)
+ @http.route(prefix + 'user/<id>', 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/<id>/switch', auth='public', methods=['PUT', 'OPTIONS'], csrf=False)
+ @http.route(prefix + 'user/<id>/switch', auth='public', methods=['POST', 'OPTIONS'], csrf=False)
@controller.Controller.must_authorized()
def switch_account(self, **kw):
id = int(kw.get('id'))
@@ -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:
@@ -674,11 +674,11 @@ 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/<id>/switch_progres', auth='public', methods=['GET', 'OPTIONS'], csrf=False)
- # @controller.Controller.must_authorized()
+ @http.route(prefix + 'user/<id>/switch_progres', auth='public', methods=['GET', 'OPTIONS'])
+ @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)
@@ -691,15 +691,28 @@ 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)
+ # @http.route(prefix + 'user/<id>/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),