summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2025-08-20 15:24:58 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2025-08-20 15:24:58 +0700
commitaf483feb734c1e135a779008ca3fa32a721d59ff (patch)
tree42450b0ce182c4d698a6c54a549eb2ff51ea07c5
parentfcef24bcce3d9e1d916bef3ff74429c990edf3b7 (diff)
fix bug percent pie
-rwxr-xr-xindoteknik_custom/models/sale_order.py35
-rw-r--r--indoteknik_custom/models/sale_order_line.py23
2 files changed, 35 insertions, 23 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 53be999f..5787c6ea 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -431,21 +431,27 @@ class SaleOrder(models.Model):
continue
for move in line.move_ids:
- if move.state != 'done':
- # reserve qty (draft/assigned)
- if move.picking_type_id.code == 'internal':
+ if move.picking_type_id.code == 'internal':
+ if move.state != 'done':
+ # PICK belum done → qty reserved
reserved_qty += move.reserved_availability or 0.0
- continue
-
- # sudah done → cek alur lokasi
- if move.location_dest_id.usage == 'customer':
- # barang keluar → delivered
- delivered_qty += move.quantity_done
- elif move.location_id.usage == 'customer':
- # barang balik (return) → kurangi delivered
- delivered_qty -= move.quantity_done
-
- # clamp biar ga minus
+ else:
+ # PICK done → qty_done masih dianggap reserved (masuk BU/OUT)
+ reserved_qty += move.quantity_done or 0.0
+
+ elif move.state == 'done':
+ # OUT done (customer terima) → delivered
+ if move.location_dest_id.usage == 'customer':
+ delivered_qty += move.quantity_done
+ # sekaligus kurangi reserved (karena udah terkirim)
+ reserved_qty -= move.quantity_done
+ # Return dari customer
+ elif move.location_id.usage == 'customer':
+ delivered_qty -= move.quantity_done
+ reserved_qty += move.quantity_done # balik ke reserved
+
+ # clamp jangan sampai minus
+ reserved_qty = max(reserved_qty, 0)
delivered_qty = max(delivered_qty, 0)
order.reserved_percent = (reserved_qty / total_qty) * 100
@@ -455,6 +461,7 @@ class SaleOrder(models.Model):
order.reserved_percent = order.delivered_percent = order.unreserved_percent = 0
+
def _has_ccm(self):
if self.id:
self.ccm_id = self.env['tukar.guling'].search([('origin', 'ilike', self.name)], limit=1)
diff --git a/indoteknik_custom/models/sale_order_line.py b/indoteknik_custom/models/sale_order_line.py
index 2406995d..a20f93ef 100644
--- a/indoteknik_custom/models/sale_order_line.py
+++ b/indoteknik_custom/models/sale_order_line.py
@@ -66,21 +66,29 @@ class SaleOrderLine(models.Model):
if order_qty > 0:
for move in line.move_ids:
+ # --- CASE 1: Picking belum done ---
if move.state != 'done':
- # Reserve qty (hanya dari picking internal yang belum selesai)
if move.picking_type_id.code == 'internal':
reserved_qty += move.reserved_availability or 0.0
continue
- # Kalau sudah done → cek lokasi
- if move.location_dest_id.usage == 'customer':
- # Barang keluar → tambah delivered
+ # --- CASE 2: Picking sudah done ---
+ if move.picking_type_id.code == 'internal':
+ # PICK done → qty_done tetap dianggap reserved (masih nunggu OUT)
+ reserved_qty += move.quantity_done or 0.0
+
+ elif move.location_dest_id.usage == 'customer':
+ # OUT done (barang nyampe customer)
delivered_qty += move.quantity_done
+ reserved_qty -= move.quantity_done
+
elif move.location_id.usage == 'customer':
- # Barang balik dari customer (retur) → kurangi delivered
+ # Retur dari customer
delivered_qty -= move.quantity_done
+ reserved_qty += move.quantity_done
- # Jangan sampai delivered minus
+ # clamp supaya gak minus
+ reserved_qty = max(reserved_qty, 0)
delivered_qty = max(delivered_qty, 0)
# Hitung persentase
@@ -88,9 +96,6 @@ class SaleOrderLine(models.Model):
line.delivered_percent = (delivered_qty / order_qty) * 100 if order_qty else 0
line.unreserved_percent = 100 - line.reserved_percent - line.delivered_percent
-
-
-
def _get_outgoing_incoming_moves(self):
outgoing_moves = self.env['stock.move']
incoming_moves = self.env['stock.move']