summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/sale_order.py
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-08-21 16:19:50 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-08-21 16:19:50 +0700
commit1043e2f2b9630b8b622a9bc5070bf167d17e08d7 (patch)
tree8fe136db08053e3b05e187d820d1b4802fb19c31 /indoteknik_custom/models/sale_order.py
parent0e4e1eaf30f79afb2b9885c897b8a8a2044f8509 (diff)
parentfc6f0a00ab98a72ad3d08f1d5ad6f8120e21814a (diff)
Merge branch 'odoo-backup' of https://bitbucket.org/altafixco/indoteknik-addons into block_manual_input_stock_picking
Diffstat (limited to 'indoteknik_custom/models/sale_order.py')
-rwxr-xr-xindoteknik_custom/models/sale_order.py39
1 files changed, 23 insertions, 16 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 53be999f..9a6f314d 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -391,9 +391,9 @@ class SaleOrder(models.Model):
payment_state_custom = fields.Selection([
('unpaid', 'Unpaid'),
('partial', 'Partially Paid'),
- ('paid', 'Paid'),
+ ('paid', 'Full Paid'),
('no_invoice', 'No Invoice'),
- ], string="Payment Status", compute="_compute_payment_state_custom", store=False)
+ ], string="Payment Status Invoice", compute="_compute_payment_state_custom", store=False)
@api.depends('invoice_ids.payment_state', 'invoice_ids.amount_total', 'invoice_ids.amount_residual')
def _compute_payment_state_custom(self):
@@ -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)