diff options
| -rw-r--r-- | indoteknik_custom/models/vendor_sla.py | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/indoteknik_custom/models/vendor_sla.py b/indoteknik_custom/models/vendor_sla.py index 67b6ffc3..852baa7a 100644 --- a/indoteknik_custom/models/vendor_sla.py +++ b/indoteknik_custom/models/vendor_sla.py @@ -20,33 +20,36 @@ class VendorSLA(models.Model): # kedua, pada setiap Purchase order pada group by vendor tersebut, lakukan penghitungan penjumlahan setiap nilai datetime field date_planed dikurangi date_approve purchase order # dibagi jumlah data dari setiap Purchase order pada group by vendor tersebut. hasilnya lalu di gunakan untuk mengset nilai duration def generate_vendor_id_sla(self): - # Step 1: Group purchase orders by vendor (partner_id) - po_env = self.env['purchase.order'] - pos = po_env.read_group( - domain=[('state', '=', 'done')], - fields=['partner_id', 'date_planned', 'date_approve'], + # Step 1: Group stock pickings by vendor based on operation type + stock_picking_env = self.env['stock.picking'] + stock_moves = stock_picking_env.read_group( + domain=[ + ('state', '=', 'done'), + ('location_id', '=', 4), # Partner Locations/Vendors + ('location_dest_id', '=', 57) # BU/Stock + ], + fields=['partner_id', 'date_done', 'scheduled_date'], groupby=['partner_id'], lazy=False ) - for group in pos: + for group in stock_moves: partner_id = group['partner_id'][0] total_duration = 0 count = 0 # Step 2: Calculate the average duration for each vendor - pos_for_vendor = po_env.search([ + pos_for_vendor = stock_picking_env.search([ ('partner_id', '=', partner_id), ('state', '=', 'done'), - ('date_planned', '>=', '2023-01-01') ]) for po in pos_for_vendor: - if po.date_planned and po.date_approve: - date_planned = fields.Datetime.to_datetime(po.date_planned) - date_approve = fields.Datetime.to_datetime(po.date_approve) - if date_planned < date_approve: continue - duration = (date_planned - date_approve).total_seconds() / 3600 # Convert to hours + if po.date_done and po.purchase_id.date_approve: + date_of_transfer = fields.Datetime.to_datetime(po.date_done) + po_confirmation_date = fields.Datetime.to_datetime(po.purchase_id.date_approve) + if date_of_transfer < po_confirmation_date: continue + duration = (date_of_transfer - po_confirmation_date).total_seconds() / 3600 # Convert to hours total_duration += duration count += 1 |
