summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indoteknik_custom/models/vendor_sla.py29
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