summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2025-01-25 10:34:13 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2025-01-25 10:34:13 +0700
commitea81f5a5b5eedfffcfa15a3f752ccc81df6eed04 (patch)
tree91cabb809f969a8abadacb953bd5d43e62340433
parent43f0f79f96233e0b7b31b643e27d50887266a527 (diff)
CR automatic purchase brand stihl and mikasa
-rw-r--r--indoteknik_custom/models/automatic_purchase.py141
1 files changed, 73 insertions, 68 deletions
diff --git a/indoteknik_custom/models/automatic_purchase.py b/indoteknik_custom/models/automatic_purchase.py
index 09d283eb..fbdf8dae 100644
--- a/indoteknik_custom/models/automatic_purchase.py
+++ b/indoteknik_custom/models/automatic_purchase.py
@@ -183,89 +183,94 @@ class AutomaticPurchase(models.Model):
def create_po_by_vendor(self, vendor_id):
current_time = datetime.now()
- if not self.apo_type =='reordering':
- name = "/PJ/"
- else:
- name = "/A/"
+ name = "/PJ/" if not self.apo_type == 'reordering' else "/A/"
PRODUCT_PER_PO = 20
-
auto_purchase_line = self.env['automatic.purchase.line']
- last_po = self.env['purchase.order'].search([
- ('partner_id', '=', vendor_id),
- ('state', '=', 'done'),
- ], order='id desc', limit=1)
-
- param_header = {
- 'partner_id': vendor_id,
- 'currency_id': 12,
- 'user_id': self.env.user.id,
- 'company_id': 1, # indoteknik dotcom gemilang
- 'picking_type_id': 28, # indoteknik bandengan receipts
- 'date_order': current_time,
- 'from_apo': True,
- 'note_description': 'Automatic PO'
- }
-
+ # Domain untuk semua baris dengan vendor_id tertentu
domain = [
('automatic_purchase_id', '=', self.id),
('partner_id', '=', vendor_id),
('qty_purchase', '>', 0)
]
- products_len = auto_purchase_line.search_count(domain)
- page = math.ceil(products_len / PRODUCT_PER_PO)
-
- # i start from zero (0)
- for i in range(page):
- new_po = self.env['purchase.order'].create([param_header])
- new_po.payment_term_id = new_po.partner_id.property_supplier_payment_term_id
- new_po.name = new_po.name + name + str(i + 1)
+ # Tambahkan domain khusus untuk brand_id 22 dan 564
+ special_brand_domain = domain + [('brand_id', 'in', [22, 564])]
+ regular_domain = domain + [('brand_id', 'not in', [22, 564])]
+
+ # Fungsi untuk membuat PO berdasarkan domain tertentu
+ def create_po_for_domain(domain, special_payment_term=False):
+ products_len = auto_purchase_line.search_count(domain)
+ page = math.ceil(products_len / PRODUCT_PER_PO)
+
+ for i in range(page):
+ # Buat PO baru
+ param_header = {
+ 'partner_id': vendor_id,
+ 'currency_id': 12,
+ 'user_id': self.env.user.id,
+ 'company_id': 1, # indoteknik dotcom gemilang
+ 'picking_type_id': 28, # indoteknik bandengan receipts
+ 'date_order': current_time,
+ 'from_apo': True,
+ 'note_description': 'Automatic PO'
+ }
- self.env['automatic.purchase.match'].create([{
- 'automatic_purchase_id': self.id,
- 'order_id': new_po.id
- }])
+ new_po = self.env['purchase.order'].create([param_header])
- lines = auto_purchase_line.search(
- domain,
- offset=i * PRODUCT_PER_PO,
- limit=PRODUCT_PER_PO
- )
+ # Set payment_term_id khusus jika diperlukan
+ if special_payment_term:
+ new_po.payment_term_id = 29
+ else:
+ new_po.payment_term_id = new_po.partner_id.property_supplier_payment_term_id
- lines = auto_purchase_line.search(
- domain,
- offset=i * PRODUCT_PER_PO,
- limit=PRODUCT_PER_PO
- )
+ new_po.name = new_po.name + name + str(i + 1)
+ self.env['automatic.purchase.match'].create([{
+ 'automatic_purchase_id': self.id,
+ 'order_id': new_po.id
+ }])
+
+ # Ambil baris sesuai halaman
+ lines = auto_purchase_line.search(
+ domain,
+ offset=i * PRODUCT_PER_PO,
+ limit=PRODUCT_PER_PO
+ )
+
+ for line in lines:
+ product = line.product_id
+ sales_match = self.env['automatic.purchase.sales.match'].search([
+ ('automatic_purchase_id', '=', self.id),
+ ('product_id', '=', product.id),
+ ])
+ param_line = {
+ 'order_id': new_po.id,
+ 'product_id': product.id,
+ 'product_qty': line.qty_purchase,
+ 'qty_available_store': product.qty_available_bandengan,
+ 'suggest': product._get_po_suggest(line.qty_purchase),
+ 'product_uom_qty': line.qty_purchase,
+ 'price_unit': line.last_price,
+ 'ending_price': line.last_price,
+ 'taxes_id': [line.taxes_id.id] if line.taxes_id else None,
+ 'so_line_id': sales_match[0].sale_line_id.id if sales_match else None,
+ 'so_id': sales_match[0].sale_id.id if sales_match else None
+ }
+ new_po_line = self.env['purchase.order.line'].create([param_line])
+ line.current_po_id = new_po.id
+ line.current_po_line_id = new_po_line.id
+
+ self.create_purchase_order_sales_match(new_po)
+
+ # Buat PO untuk special brand
+ if vendor_id == 23:
+ create_po_for_domain(special_brand_domain, special_payment_term=True)
+
+ # Buat PO untuk regular domain
+ create_po_for_domain(regular_domain, "")
- for line in lines:
- product = line.product_id
- sales_match = self.env['automatic.purchase.sales.match'].search([
- ('automatic_purchase_id', '=', self.id),
- ('product_id', '=', product.id),
- ])
- param_line = {
- 'order_id': new_po.id,
- 'product_id': product.id,
- 'product_qty': line.qty_purchase,
- 'qty_available_store': product.qty_available_bandengan,
- 'suggest': product._get_po_suggest(line.qty_purchase),
- 'product_uom_qty': line.qty_purchase,
- 'price_unit': line.last_price,
- 'ending_price': line.last_price,
- 'taxes_id': [line.taxes_id.id] if line.taxes_id else None,
- 'so_line_id': sales_match[0].sale_line_id.id if sales_match else None,
- 'so_id': sales_match[0].sale_id.id if sales_match else None
- }
- new_po_line = self.env['purchase.order.line'].create([param_line])
- line.current_po_id = new_po.id
- line.current_po_line_id = new_po_line.id
- # self.update_purchase_price_so_line(line)
-
- self.create_purchase_order_sales_match(new_po)
def update_purchase_price_so_line(self, apo):
sales_match = self.env['automatic.purchase.sales.match'].search([