diff options
Diffstat (limited to 'indoteknik_custom/models/automatic_purchase.py')
| -rw-r--r-- | indoteknik_custom/models/automatic_purchase.py | 93 |
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() |
