summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2024-02-06 14:08:16 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2024-02-06 14:08:16 +0700
commitbc28a47b83eb481f52c89b0f0fa5a13a851fbc21 (patch)
treed0052e938d5e1f83dde679275dcfee4a18372b76
parent98f44d62a1e818875911a29cb7a119907e5e2af1 (diff)
new table sync purchasing job and fix bug duplicate product
-rw-r--r--indoteknik_custom/models/automatic_purchase.py67
-rwxr-xr-xindoteknik_custom/security/ir.model.access.csv3
-rw-r--r--indoteknik_custom/views/automatic_purchase.xml20
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"/>