diff options
| author | it-fixcomart <it@fixcomart.co.id> | 2025-07-31 08:33:22 +0700 |
|---|---|---|
| committer | it-fixcomart <it@fixcomart.co.id> | 2025-07-31 08:33:22 +0700 |
| commit | 8d1af98bb7dab812f91d7d275b4004c4e5b0ff75 (patch) | |
| tree | bab2e7e3740f295ecfd088624af5c06aa948b604 /indoteknik_api | |
| parent | 6b2872ba3025c8876cb0885fa05757389bc4d6d2 (diff) | |
<hafid> repeat order fix
Diffstat (limited to 'indoteknik_api')
| -rw-r--r-- | indoteknik_api/controllers/api_v1/sale_order.py | 52 | ||||
| -rw-r--r-- | indoteknik_api/models/sale_order.py | 45 |
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: |
