diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2023-12-14 17:13:46 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2023-12-14 17:13:46 +0700 |
| commit | 07e8a51fc023025d2cbde83ab0333e5e53e2ad12 (patch) | |
| tree | 7ac48357e77e90aa709d45189a157bf98c5be5a3 /indoteknik_custom/models | |
| parent | 1a68a5e600e2f7f90bee44144557f6af2f35618c (diff) | |
generate automatic purchase line from purchasing job
Diffstat (limited to 'indoteknik_custom/models')
| -rw-r--r-- | indoteknik_custom/models/automatic_purchase.py | 71 |
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') |
