summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/automatic_purchase.py
diff options
context:
space:
mode:
Diffstat (limited to 'indoteknik_custom/models/automatic_purchase.py')
-rw-r--r--indoteknik_custom/models/automatic_purchase.py93
1 files changed, 40 insertions, 53 deletions
diff --git a/indoteknik_custom/models/automatic_purchase.py b/indoteknik_custom/models/automatic_purchase.py
index 4ea43a23..108dcf58 100644
--- a/indoteknik_custom/models/automatic_purchase.py
+++ b/indoteknik_custom/models/automatic_purchase.py
@@ -174,10 +174,11 @@ class AutomaticPurchase(models.Model):
for line in po.order_line:
qty_pj += line.product_qty + lines.qty_purchase
qty_outgoing_pj += line.qty_outgoing
+ id_po = []
+ if qty_pj > qty_outgoing_pj:
+ id_po.append(po.name)
- id_po = []
if qty_pj > qty_outgoing_pj:
- id_po.append(po.name)
raise UserError('Qty yang anda beli lebih dari qty outgoing. %s' %id_po)
def create_po_by_vendor(self, vendor_id):
@@ -313,28 +314,18 @@ class AutomaticPurchase(models.Model):
sales_order_purchase_match = self.env['sales.order.purchase.match'].create([matches_po_line])
- def generate_regular_purchase(self):
- po = self.env['purchase.order'].search([
- ('state', '=', 'draft')
- ])
- if po:
- raise UserError('Ada PO yang statusnya draft, proses dulu')
- if self.apo_type == 'reordering':
- raise UserError('Tombol ini hanya untuk Regular Fulfill SO')
- if self.vendor_id:
- raise UserError('Vendor tidak dapat diisi jika Regular Fulfill SO')
- if self.purchase_lines:
- raise UserError('Sudah digenerate sebelumnya, hapus line terlebih dahulu')
-
- self.responsible_id = self.env.user.id
- self.date_doc = datetime.utcnow()
+ def generate_regular_purchase(self, jobs):
+ current_time = datetime.utcnow()
+ automatic_purchase = self.env['automatic.purchase'].create([{
+ 'apo_type': 'regular',
+ 'date_doc': current_time,
+ }])
+ automatic_purchase.responsible_id = self.env.user.id
+ automatic_purchase.date_doc = datetime.utcnow()
#TODO must add order by for fifo mechanism
#change the view of v.purchasing.job and use order by in query
- query = [
- ('action', '=', 'kurang')
- ]
- jobs = self.env['v.purchasing.job'].search(query)
+
count = 0
for job in jobs:
qty_purchase = job.outgoing - (job.onhand + job.incoming)
@@ -347,11 +338,11 @@ class AutomaticPurchase(models.Model):
purchase_pricelist = self.env['purchase.pricelist'].search(domain, order=orderby, limit=1)
vendor_id = purchase_pricelist.vendor_id
- price, taxes = self._get_valid_purchase_price(purchase_pricelist)
+ price, taxes = automatic_purchase._get_valid_purchase_price(purchase_pricelist)
last_po_line = self.env['purchase.order.line'].search([('product_id', '=', job.product_id.id), ('order_id.state', '=', 'done')], order='id desc', limit=1)
self.env['automatic.purchase.line'].create([{
- 'automatic_purchase_id': self.id,
+ 'automatic_purchase_id': automatic_purchase.id,
'product_id': job.product_id.id,
'qty_purchase': qty_purchase,
'qty_available': qty_available,
@@ -365,9 +356,9 @@ class AutomaticPurchase(models.Model):
}])
count += 1
_logger.info('Create Automatic Purchase Line %s' % job.product_id.name)
- self.notification = "Automatic PO Created %s Lines" % count
- self._create_sales_matching()
- self._create_sync_purchasing_job(jobs)
+ automatic_purchase.notification = "Automatic PO Created %s Lines" % count
+ automatic_purchase._create_sales_matching()
+ automatic_purchase._create_sync_purchasing_job(jobs)
print(1)
def _create_sales_matching(self):
@@ -375,34 +366,30 @@ class AutomaticPurchase(models.Model):
domain = [
('product_id', '=', line.product_id.id)
]
- sales = self.env['v.sales.outstanding'].search(domain)
- for sale in sales:
- existing_match = self.env['automatic.purchase.sales.match'].search([
- ('automatic_purchase_id', '=', self.id),
- ('sale_id', '=', sale.sale_id.id),
- ])
+ sale = self.env['v.sales.outstanding'].search(domain, limit=1)
+
+ existing_match = self.env['automatic.purchase.sales.match'].search([
+ ('automatic_purchase_id', '=', self.id),
+ ('sale_id', '=', sale.sale_id.id),
+ ('product_id', '=', sale.product_id.id),
+ ])
- if not existing_match:
- if line.qty_purchase > sale.outgoing:
- qty_po = sale.outgoing
- else:
- qty_po = line.qty_purchase
-
- self.env['automatic.purchase.sales.match'].create([{
- 'automatic_purchase_id': self.id,
- 'sale_id': sale.sale_id.id,
- 'sale_line_id': sale.sale_line_id.id,
- 'picking_id': sale.picking_id.id,
- 'move_id': sale.move_id.id,
- 'partner_id': sale.partner_id.id,
- 'partner_invoice_id': sale.partner_invoice_id.id,
- 'salesperson_id': sale.salesperson_id.id,
- 'product_id': sale.product_id.id,
- 'qty_so': sale.outgoing,
- 'qty_po': qty_po,
- }])
-
- print(1)
+ if existing_match:
+ continue
+
+ self.env['automatic.purchase.sales.match'].create([{
+ 'automatic_purchase_id': self.id,
+ 'sale_id': sale.sale_id.id,
+ 'sale_line_id': sale.sale_line_id.id,
+ 'picking_id': sale.picking_id.id,
+ 'move_id': sale.move_id.id,
+ 'partner_id': sale.partner_id.id,
+ 'partner_invoice_id': sale.partner_invoice_id.id,
+ 'salesperson_id': sale.salesperson_id.id,
+ 'product_id': sale.product_id.id,
+ 'qty_so': sale.outgoing,
+ 'qty_po': line.qty_purchase,
+ }])
def _create_sync_purchasing_job(self, jobs):
date = datetime.utcnow()