summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/automatic_purchase.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2023-12-14 17:13:46 +0700
committerstephanchrst <stephanchrst@gmail.com>2023-12-14 17:13:46 +0700
commit07e8a51fc023025d2cbde83ab0333e5e53e2ad12 (patch)
tree7ac48357e77e90aa709d45189a157bf98c5be5a3 /indoteknik_custom/models/automatic_purchase.py
parent1a68a5e600e2f7f90bee44144557f6af2f35618c (diff)
generate automatic purchase line from purchasing job
Diffstat (limited to 'indoteknik_custom/models/automatic_purchase.py')
-rw-r--r--indoteknik_custom/models/automatic_purchase.py71
1 files changed, 68 insertions, 3 deletions
diff --git a/indoteknik_custom/models/automatic_purchase.py b/indoteknik_custom/models/automatic_purchase.py
index 63eefb93..438d365f 100644
--- a/indoteknik_custom/models/automatic_purchase.py
+++ b/indoteknik_custom/models/automatic_purchase.py
@@ -18,13 +18,14 @@ class AutomaticPurchase(models.Model):
purchase_lines = fields.One2many('automatic.purchase.line', 'automatic_purchase_id', string='Lines', auto_join=True)
notification = fields.Char(string='Notification')
is_po = fields.Boolean(string='Is PO')
- purchase_match = fields.One2many('automatic.purchase.match', 'automatic_purchase_id', string='Matches', auto_join=True)
+ purchase_match = fields.One2many('automatic.purchase.match', 'automatic_purchase_id', string='PO Matches', auto_join=True)
vendor_id = fields.Many2one('res.partner', string='Vendor', help='boleh kosong, jika diisi, maka hanya keluar data untuk vendor tersebut')
responsible_id = fields.Many2one('res.users', string='Responsible', required=True)
apo_type = fields.Selection([
('regular', 'Regular Fulfill SO'),
('reordering', 'Reordering Rule'),
- ], string='Type')
+ ], string='Type', tracking=3)
+ sales_match = fields.One2many('automatic.purchase.sales.match', 'automatic_purchase_id', string='SO Matches', auto_join=True)
@api.model
def create(self, vals):
@@ -95,9 +96,56 @@ class AutomaticPurchase(models.Model):
_logger.info('Automatic Create PO Line %s' % product.product_id.name)
self.notification = self.notification + ' %s' % new_po.name
self.is_po = True
-
+
+ def generate_regular_purchase(self):
+ 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')
+ #TODO must add order by for fifo mechanism
+ #change the view of v.purchasing.job and use order by in query
+ query = [
+ ('action', '=', 'kurang beli')
+ ]
+ jobs = self.env['v.purchasing.job'].search(query)
+ count = 0
+ for job in jobs:
+ qty_purchase = job.outgoing - job.onhand + job.incoming
+ qty_available = job.onhand + job.incoming - job.outgoing
+
+ domain = [
+ ('product_id.id', '=', job.product_id.id),
+ ]
+ orderby = 'count_trx_po desc, count_trx_po_vendor desc'
+ purchase_pricelist = self.env['purchase.pricelist'].search(domain, order=orderby, limit=1)
+
+ vendor_id = purchase_pricelist.vendor_id
+ 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([{
+ 'automatic_purchase_id': self.id,
+ 'product_id': job.product_id.id,
+ 'qty_purchase': qty_purchase,
+ 'qty_available': qty_available,
+ 'partner_id': vendor_id.id,
+ 'last_price': price,
+ 'subtotal': qty_purchase * price,
+ 'last_order_id': last_po_line.order_id.id,
+ 'last_orderline_id': last_po_line.id,
+ 'brand_id': job.product_id.product_tmpl_id.x_manufacture.id
+ }])
+ count += 1
+ _logger.info('Create Automatic Purchase Line %s' % job.product_id.name)
+ self.notification = "Automatic PO Created %s Lines" % count
+ print(1)
+
def generate_automatic_purchase(self):
# for reordering rule only
+ if self.apo_type == 'regular':
+ raise UserError('Tombol ini hanya untuk Reordering Rule')
if self.purchase_lines:
raise UserError('Sudah digenerate sebelumnya, hapus line terlebih dahulu')
@@ -187,6 +235,11 @@ class AutomaticPurchaseLine(models.Model):
current_po_line_id = fields.Many2one('purchase.order.line', string='Current Line')
brand_id = fields.Many2one('x_manufactures', string='Brand')
+ @api.onchange('last_price', 'qty_purchase')
+ def _calculate_subtotal(self):
+ for line in self:
+ line.subtotal = line.qty_purchase * line.last_price
+
class AutomaticPurchaseMatch(models.Model):
_name = 'automatic.purchase.match'
@@ -201,3 +254,15 @@ class AutomaticPurchaseMatch(models.Model):
for match in self:
match.vendor = match.order_id.partner_id.name
match.total = match.order_id.amount_total
+
+
+class AutomaticPurchaseSalesMatch(models.Model):
+ _name = 'automatic.purchase.sales.match'
+ _order = 'automatic_purchase_id, id'
+
+ automatic_purchase_id = fields.Many2one('automatic.purchase', string='Ref', required=True, ondelete='cascade', index=True, copy=False)
+ sale_id = fields.Many2one('sale.order', string='SO')
+ partner_id = fields.Many2one('res.partner', string='Customer')
+ salesperson_id = fields.Many2one('res.user', string='Sales')
+ product_id = fields.Many2one('product.product', string='Product')
+ qty_so = fields.Float(string='Qty')