diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2024-02-06 14:08:16 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2024-02-06 14:08:16 +0700 |
| commit | bc28a47b83eb481f52c89b0f0fa5a13a851fbc21 (patch) | |
| tree | d0052e938d5e1f83dde679275dcfee4a18372b76 | |
| parent | 98f44d62a1e818875911a29cb7a119907e5e2af1 (diff) | |
new table sync purchasing job and fix bug duplicate product
| -rw-r--r-- | indoteknik_custom/models/automatic_purchase.py | 67 | ||||
| -rwxr-xr-x | indoteknik_custom/security/ir.model.access.csv | 3 | ||||
| -rw-r--r-- | indoteknik_custom/views/automatic_purchase.xml | 20 |
3 files changed, 68 insertions, 22 deletions
diff --git a/indoteknik_custom/models/automatic_purchase.py b/indoteknik_custom/models/automatic_purchase.py index 4051c093..4161d895 100644 --- a/indoteknik_custom/models/automatic_purchase.py +++ b/indoteknik_custom/models/automatic_purchase.py @@ -26,6 +26,7 @@ class AutomaticPurchase(models.Model): ('reordering', 'Reordering Rule'), ], string='Type', tracking=3) sales_match = fields.One2many('automatic.purchase.sales.match', 'automatic_purchase_id', string='SO Matches', auto_join=True) + purchasing_job_match = fields.One2many('sync.purchasing.job', 'automatic_purchase_id', string='Purchasing Job Matches', auto_join=True) total_qty_line = fields.Float(string='Total Qty Line', compute='_compute_total_qty') total_qty_so = fields.Float(string='Total Qty SO', compute='_compute_total_qty') @@ -283,7 +284,7 @@ class AutomaticPurchase(models.Model): purchase_pricelist = self.env['purchase.pricelist'].search(domain, order=orderby, limit=1) vendor_id = purchase_pricelist.vendor_id - price = self._get_vaokelid_purchase_price(purchase_pricelist) + price = self._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([{ @@ -302,6 +303,7 @@ class AutomaticPurchase(models.Model): _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) print(1) def _create_sales_matching(self): @@ -311,24 +313,47 @@ class AutomaticPurchase(models.Model): ] sales = self.env['v.sales.outstanding'].search(domain) for sale in sales: - 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) + existing_match = self.env['automatic.purchase.sales.match'].search([ + ('automatic_purchase_id', '=', self.id), + ('sale_id', '=', sale.sale_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) + + def _create_sync_purchasing_job(self, jobs): + date = datetime.utcnow() + for line in jobs: + self.env['sync.purchasing.job'].create([{ + 'automatic_purchase_id': self.id, + 'brand': line.brand, + 'item_code': line.item_code, + 'product_id': line.product_id.id, + 'onhand': line.onhand, + 'incoming': line.incoming, + 'outgoing': line.outgoing, + 'action': line.action, + 'date': date + }]) def generate_automatic_purchase(self): # for reordering rule only @@ -464,8 +489,7 @@ class AutomaticPurchaseSalesMatch(models.Model): class SyncPurchasingJob(models.Model): _name = 'sync.purchasing.job' - _auto = False - _rec_name = 'product_id' + _order = 'automatic_purchase_id, id' automatic_purchase_id = fields.Many2one('automatic.purchase', string='Ref', required=True, ondelete='cascade', index=True, copy=False) product_id = fields.Many2one('product.product', string="Product") @@ -476,3 +500,4 @@ class SyncPurchasingJob(models.Model): incoming = fields.Float(string="Incoming") outgoing = fields.Float(string="Outgoing") action = fields.Char(string="Status") + date = fields.Datetime(string="Date Sync") diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv index ad266bd7..dae13a5d 100755 --- a/indoteknik_custom/security/ir.model.access.csv +++ b/indoteknik_custom/security/ir.model.access.csv @@ -91,4 +91,5 @@ access_automatic_purchase_sales_match,access.automatic.purchase.sales.match,mode access_v_sales_outstanding,access.v.sales.outstanding,model_v_sales_outstanding,,1,1,1,1 access_purchase_order_sales_match,access.purchase.order.sales.match,model_purchase_order_sales_match,,1,1,1,1 access_sales_order_purchase_match,access.sale.order.purchase.match,model_sales_order_purchase_match,,1,1,1,1 -access_sale_monitoring_detail_v2,access.sale.monitoring.detail.v2,model_sale_monitoring_detail_v2,,1,1,1,1
\ No newline at end of file +access_sale_monitoring_detail_v2,access.sale.monitoring.detail.v2,model_sale_monitoring_detail_v2,,1,1,1,1 +access_sync_purchasing_job,access.sync.purchasing.job,model_sync_purchasing_job,,1,1,1,1
\ No newline at end of file diff --git a/indoteknik_custom/views/automatic_purchase.xml b/indoteknik_custom/views/automatic_purchase.xml index 21b4b1f2..edf966d9 100644 --- a/indoteknik_custom/views/automatic_purchase.xml +++ b/indoteknik_custom/views/automatic_purchase.xml @@ -56,6 +56,23 @@ </field> </record> + <record id="sync_purchasing_job_tree" model="ir.ui.view"> + <field name="name">sync.purchasing.job.tree</field> + <field name="model">sync.purchasing.job</field> + <field name="arch" type="xml"> + <tree> + <field name="product_id" readonly="1"/> + <field name="brand" readonly="1" optional="hide"/> + <field name="item_code" readonly="1" optional="hide"/> + <field name="onhand" readonly="1" optional="hide"/> + <field name="incoming" readonly="1"/> + <field name="outgoing" readonly="1"/> + <field name="action" readonly="1"/> + <field name="date" readonly="1"/> + </tree> + </field> + </record> + <record id="automatic_purchase_match_tree" model="ir.ui.view"> <field name="name">automatic.purchase.match.tree</field> <field name="model">automatic.purchase.match</field> @@ -118,6 +135,9 @@ <page string="Matches PO"> <field name="purchase_match"/> </page> + <page string="Matches Purchasing"> + <field name="purchasing_job_match"/> + </page> <page string="Info" name="automatic_purchase_info"> <group> <field name="notification" readonly="1"/> |
