summaryrefslogtreecommitdiff
path: root/indoteknik_api
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2025-07-31 08:33:22 +0700
committerit-fixcomart <it@fixcomart.co.id>2025-07-31 08:33:22 +0700
commit8d1af98bb7dab812f91d7d275b4004c4e5b0ff75 (patch)
treebab2e7e3740f295ecfd088624af5c06aa948b604 /indoteknik_api
parent6b2872ba3025c8876cb0885fa05757389bc4d6d2 (diff)
<hafid> repeat order fix
Diffstat (limited to 'indoteknik_api')
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py52
-rw-r--r--indoteknik_api/models/sale_order.py45
2 files changed, 58 insertions, 39 deletions
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py
index 3ecaff57..f116f189 100644
--- a/indoteknik_api/controllers/api_v1/sale_order.py
+++ b/indoteknik_api/controllers/api_v1/sale_order.py
@@ -145,26 +145,14 @@ class SaleOrder(controller.Controller):
elif status == 'cancel':
domain += [('state', '=', 'cancel')]
- elif status == 'diterima':
+ elif status == 'diproses':
domain += [
('state', '=', 'draft'),
('approval_status', 'in', ['pengajuan1', 'pengajuan2']),
]
- elif status == 'dikirim':
- domain += [
- ('state', '=', 'sale'),
- ('picking_ids.state', 'in', ['done'])
- ]
-
- elif status == 'diproses':
- domain += [
- ('state', '=', 'sale'),
- ('picking_ids.state', 'in', ['draft', 'waiting', 'confirmed', 'assigned'])
- ]
-
- elif status == 'selesai':
- domain += [('state', '=', 'done')]
+ elif status in ['dikemas', 'dikirim', 'selesai', 'partial']:
+ domain += [('state', '=', 'sale')]
elif status == 'all':
domain += []
@@ -191,11 +179,39 @@ class SaleOrder(controller.Controller):
sale_orders = request.env['sale.order'].search(
- domain, offset=offset, limit=limit, order=order)
+ domain, order=order)
+ status = params['value'].get('status')
+ 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
+ ]
+ 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.driver_arrival_date]
+ done_without_driver = [p for p in done_pickings if not p.driver_arrival_date]
+
+ if status == 'dikemas' and len(done_pickings) == 0:
+ filtered_orders.append(sale_order)
+ elif status == 'dikirim' and len(done_pickings) == total and len(done_pickings) > 0 and len(done_without_driver) == total:
+ filtered_orders.append(sale_order)
+ elif status == 'selesai' and len(done_pickings) == total and len(done_pickings) > 0 and len(done_with_driver) == total:
+ filtered_orders.append(sale_order)
+ elif status == 'partial' and (
+ len(done_pickings) != total or
+ (done_with_driver and done_without_driver)
+ ):
+ filtered_orders.append(sale_order)
+ else:
+ filtered_orders = sale_orders
+
+ filtered_orders_paginated = filtered_orders[offset: offset + 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]
+ 'sale_order_total': len(filtered_orders),
+ 'sale_orders': [request.env['sale.order'].api_v1_single_response(x) for x in filtered_orders_paginated]
}
return self.response(data)
diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py
index 5427ed07..54b4a6dc 100644
--- a/indoteknik_api/models/sale_order.py
+++ b/indoteknik_api/models/sale_order.py
@@ -51,29 +51,32 @@ class SaleOrder(models.Model):
})
if sale_order.state == 'cancel':
data['status'] = 'cancel'
- if sale_order.state in ['draft', 'sent']:
+ if sale_order.state == 'draft' and sale_order.approval_status == False:
data['status'] = 'draft'
- if sale_order.is_continue_transaction:
- data['status'] = 'waiting'
- if sale_order.approval_status in ['pengajuan1', 'pengajuan2']:
- data['status'] = 'waiting'
- if sale_order.state == 'sale':
- data['status'] = 'sale'
- picking_count = {
- 'assigned': 0,
- 'done': 0,
- }
- for picking in sale_order.picking_ids:
- if picking.state in ['confirmed', 'assigned']:
- picking_count['assigned'] += 1
- if picking.state == 'done':
- picking_count['done'] += 1
- if picking_count['done'] > 0:
+ if sale_order.state == 'draft' and sale_order.approval_status in ['pengajuan1', 'pengajuan2']:
+ data['status'] = 'waiting'
+
+
+ if sale_order.state == 'sale':
+ bu_pickings = [
+ p for p in sale_order.picking_ids
+ if p.picking_type_id and p.picking_type_id.id == 29
+ ]
+
+ # Hitung status masing-masing picking
+ 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.driver_arrival_date]
+ done_without_driver = [p for p in done_pickings if not p.driver_arrival_date]
+
+ if len(done_pickings) == 0:
+ data['status'] = 'sale'
+ elif len(done_pickings) == total and len(done_pickings) > 0 and len(done_with_driver) == total:
+ data['status'] = 'done'
+ elif len(done_pickings) == total and len(done_pickings) > 0 and len(done_without_driver) == total:
data['status'] = 'shipping'
- if picking_count['assigned'] > 0:
- data['status'] = 'partial_shipping'
- if sale_order.state == 'done':
- data['status'] = 'done'
+ else:
+ data['status'] = 'partial_shipping'
res_users = self.env['res.users']
if context: