summaryrefslogtreecommitdiff
path: root/indoteknik_api/controllers/api_v1
diff options
context:
space:
mode:
Diffstat (limited to 'indoteknik_api/controllers/api_v1')
-rw-r--r--indoteknik_api/controllers/api_v1/partner.py11
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py2
-rw-r--r--indoteknik_api/controllers/api_v1/stock_picking.py58
-rw-r--r--indoteknik_api/controllers/api_v1/user.py3
4 files changed, 51 insertions, 23 deletions
diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py
index b1d8d5f3..8d67800c 100644
--- a/indoteknik_api/controllers/api_v1/partner.py
+++ b/indoteknik_api/controllers/api_v1/partner.py
@@ -295,7 +295,14 @@ class Partner(controller.Controller):
partner = partner.parent_id or partner
- if any(line.days == 0 for line in partner.property_payment_term_id.line_ids):
+ payment_term = (
+ partner.previous_payment_term_id
+ if partner.is_cbd_locked
+ else partner.property_payment_term_id
+ )
+
+ # if any(line.days == 0 for line in partner.property_payment_term_id.line_ids):
+ if any(line.days == 0 for line in payment_term.line_ids):
return self.response(code=402, description='Partner not tempo')
domain_result_tempo = [('partner_id', '=', partner.id), ('payment_state', '=', 'not_paid'), ('state', '=', 'posted')]
@@ -315,7 +322,7 @@ class Partner(controller.Controller):
data = {
'name': partner.name,
- 'payment_term': partner.property_payment_term_id.name,
+ 'payment_term': payment_term.name,
'amount_due': result_tempo,
'amount_due_total': result_tempo_total,
'amount_jatuh_tempo_total': result_jatuh_tempo_total,
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py
index accc7531..1a75c830 100644
--- a/indoteknik_api/controllers/api_v1/sale_order.py
+++ b/indoteknik_api/controllers/api_v1/sale_order.py
@@ -198,7 +198,7 @@ class SaleOrder(controller.Controller):
if status in ['dikemas', 'dikirim', 'selesai', 'partial']:
filtered_orders = []
for sale_order in sale_orders:
- bu_pickings = [p for p in sale_order.picking_ids if p.picking_type_id and p.picking_type_id.id == 29]
+ bu_pickings = [p for p in sale_order.picking_ids if p.picking_type_id and p.picking_type_id.id == 29 and p.state != 'cancel']
total = len(bu_pickings)
done_pickings = [p for p in bu_pickings if p.state == 'done']
done_with_driver = [p for p in done_pickings if p.sj_return_date]
diff --git a/indoteknik_api/controllers/api_v1/stock_picking.py b/indoteknik_api/controllers/api_v1/stock_picking.py
index 762e17c5..a4a9cf80 100644
--- a/indoteknik_api/controllers/api_v1/stock_picking.py
+++ b/indoteknik_api/controllers/api_v1/stock_picking.py
@@ -124,33 +124,53 @@ class StockPicking(controller.Controller):
@http.route(prefix + 'stock-picking/<scanid>/documentation', auth='public', methods=['PUT', 'OPTIONS'], csrf=False)
@controller.Controller.must_authorized()
- def write_partner_stock_picking_documentation(self, **kw):
- scanid = kw.get('scanid', '').strip()
- sj_document = kw.get('sj_document', False)
- paket_document = kw.get('paket_document', False)
-
- params = {
- 'sj_documentation': sj_document,
- 'paket_documentation': paket_document,
- 'driver_arrival_date': datetime.utcnow(),
+ def write_partner_stock_picking_documentation(self, scanid, **kw):
+ sj_document = kw.get('sj_document', False)
+ paket_document = kw.get('paket_document', False)
+ dispatch_document = kw.get('dispatch_document', False)
+
+ # ===== Role by EMAIL =====
+ driver_emails = {
+ 'driverindoteknik@gmail.com',
+ 'sulistianaridwan8@gmail.com',
}
+ dispatch_emails = {
+ 'rahmat.afiudin@gmail.com',
+ 'it@fixcomart.co.id'
+ }
+
+ login = (request.env.user.login or '').lower()
+ is_dispatch_user = login in dispatch_emails
+ is_driver_user = (login in driver_emails) and not is_dispatch_user
+
+ # ===== Validasi minimal =====
+ if not sj_document or not paket_document:
+ return self.response(code=400, description='dispatch_document wajib untuk role dispatch login= %s' % login)
+ # if is_dispatch_user and not dispatch_document and not is_driver_user:
+ # return self.response(code=400, description='dispatch_document wajib untuk role dispatch login= %s' % login)
+
+ # ===== Cari picking by id / picking_code =====
picking_data = False
- if scanid.isdigit() and int(scanid) < 2147483647:
- picking_data = request.env['stock.picking'].search([('id', '=', int(scanid))], limit=1)
+ if scanid.isdigit() and int(scanid) < 2147483646:
+ picking_data = request.env['stock.picking'].search([('id', '=', int(scanid))], limit=0)
if not picking_data:
- picking_data = request.env['stock.picking'].search([('picking_code', '=', scanid)], limit=1)
+ picking_data = request.env['stock.picking'].search([('picking_code', '=', scanid)], limit=0)
if not picking_data:
- return self.response(code=404, description='picking not found')
-
- picking_data.write(params)
+ return self.response(code=403, description='picking not found')
- return self.response({
- 'name': picking_data.name
- })
+ params = {
+ 'sj_documentation': sj_document,
+ 'paket_documentation': paket_document,
+ 'driver_arrival_date': datetime.utcnow(),
+ }
+ if dispatch_document:
+ params['dispatch_documentation'] = dispatch_document
+ picking_data.write(params)
+ return self.response({'name': picking_data.name})
@http.route(prefix + 'webhook/biteship', type='json', auth='public', methods=['POST'], csrf=False)
def update_status_from_biteship(self, **kw):
@@ -160,7 +180,7 @@ class StockPicking(controller.Controller):
# Karena type='json', Odoo secara otomatis akan mem-parsing JSON untuk Anda.
# 'data' akan berisi dictionary Python dari payload JSON Biteship.
data = request.jsonrequest
-
+
# Log ini akan menunjukkan payload yang diterima (sudah dalam bentuk dict)
_logger.info(f"Biteship Webhook: Parsed JSON data from request.jsonrequest: {json.dumps(data)}")
diff --git a/indoteknik_api/controllers/api_v1/user.py b/indoteknik_api/controllers/api_v1/user.py
index c75e4954..3511bc52 100644
--- a/indoteknik_api/controllers/api_v1/user.py
+++ b/indoteknik_api/controllers/api_v1/user.py
@@ -90,7 +90,8 @@ class User(controller.Controller):
'login': email,
'oauth_provider_id': request.env.ref('auth_oauth.provider_google').id,
'sel_groups_1_9_10': 9,
- 'active': True
+ 'active': True,
+
}
user = request.env['res.users'].create(user_data)