summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2024-04-18 11:36:39 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2024-04-18 11:36:39 +0700
commit71a3d1e9c253c995a6f7cca564fd171254e9a0e6 (patch)
treec4093a52ea79541ab368c4837e9d6cad60cc2cb8
parentfa1f56ebf9a00221477ec782e68db5009ba60f82 (diff)
margin po
-rw-r--r--indoteknik_custom/models/automatic_purchase.py93
-rwxr-xr-xindoteknik_custom/models/purchase_order.py4
-rw-r--r--indoteknik_custom/models/purchasing_job.py2
-rw-r--r--indoteknik_custom/models/purchasing_job_multi_update.py2
4 files changed, 44 insertions, 57 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()
diff --git a/indoteknik_custom/models/purchase_order.py b/indoteknik_custom/models/purchase_order.py
index a1c9f134..caad90d3 100755
--- a/indoteknik_custom/models/purchase_order.py
+++ b/indoteknik_custom/models/purchase_order.py
@@ -498,7 +498,7 @@ class PurchaseOrder(models.Model):
('order_id', '=', line.sale_id.id)
], limit=1, order='price_reduce_taxexcl')
- sum_so_margin += sale_order_line.item_margin
+ sum_so_margin += line.qty_po / line.qty_so * sale_order_line.item_margin
# sales_price = sale_order_line.price_reduce_taxexcl * sale_order_line.product_uom_qty
sales_price = sale_order_line.price_reduce_taxexcl * po_line.product_qty
if sale_order_line.order_id.shipping_cost_covered == 'indoteknik':
@@ -508,7 +508,7 @@ class PurchaseOrder(models.Model):
sum_sales_price += sales_price
purchase_price = po_line.price_subtotal
if line.purchase_order_id.delivery_amount > 0:
- purchase_price += line.delivery_amt_line
+ purchase_price += po_line.delivery_amt_line
real_item_margin = sales_price - purchase_price
sum_margin += real_item_margin
diff --git a/indoteknik_custom/models/purchasing_job.py b/indoteknik_custom/models/purchasing_job.py
index 5fba0a95..deec88d7 100644
--- a/indoteknik_custom/models/purchasing_job.py
+++ b/indoteknik_custom/models/purchasing_job.py
@@ -162,7 +162,7 @@ class PurchasingJob(models.Model):
class OutstandingSales(models.Model):
_name = 'v.sales.outstanding'
- _auto = False
+ _auto = False
_rec_name = 'move_id'
id = fields.Integer()
diff --git a/indoteknik_custom/models/purchasing_job_multi_update.py b/indoteknik_custom/models/purchasing_job_multi_update.py
index f3d07597..65feba71 100644
--- a/indoteknik_custom/models/purchasing_job_multi_update.py
+++ b/indoteknik_custom/models/purchasing_job_multi_update.py
@@ -20,7 +20,7 @@ class PurchasingJobMultiUpdate(models.TransientModel):
'status_apo': 'apo',
})
- apo = products.generate_request_po()
+ apo = self.env['automatic.purchase'].generate_regular_purchase(products)
return {
'name': _('Automatic Purchase'),
'view_mode': 'tree,form',