diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2023-12-19 09:32:09 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2023-12-19 09:32:09 +0700 |
| commit | e2086bc4f96391260fb3430537feddbc25bdde40 (patch) | |
| tree | 4a516ec9ae025723c0d2bd311fd9cbbcf561dcba | |
| parent | 7099c4615aa3435273839c49ceee121306fec84d (diff) | |
over to nathan
| -rw-r--r-- | indoteknik_custom/models/automatic_purchase.py | 51 | ||||
| -rw-r--r-- | indoteknik_custom/models/purchasing_job.py | 47 | ||||
| -rw-r--r-- | indoteknik_custom/models/purchasing_job_multi_update.py | 2 | ||||
| -rwxr-xr-x | indoteknik_custom/security/ir.model.access.csv | 3 | ||||
| -rw-r--r-- | indoteknik_custom/views/automatic_purchase.xml | 9 |
5 files changed, 106 insertions, 6 deletions
diff --git a/indoteknik_custom/models/automatic_purchase.py b/indoteknik_custom/models/automatic_purchase.py index 438d365f..a7b24b4f 100644 --- a/indoteknik_custom/models/automatic_purchase.py +++ b/indoteknik_custom/models/automatic_purchase.py @@ -26,6 +26,18 @@ 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) + 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') + + def _compute_total_qty(self): + for data in self: + qty_line = qty_so = 0 + for line in self.purchase_lines: + qty_line = qty_line + line.qty_purchase + for line in self.sales_match: + qty_so = qty_so + line.qty_so + data.total_qty_line = qty_line + data.total_qty_so = qty_so @api.model def create(self, vals): @@ -140,6 +152,33 @@ 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() + print(1) + + def _create_sales_matching(self): + for line in self.purchase_lines: + domain = [ + ('product_id', '=', line.product_id.id) + ] + 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) def generate_automatic_purchase(self): @@ -261,8 +300,14 @@ class AutomaticPurchaseSalesMatch(models.Model): _order = 'automatic_purchase_id, id' automatic_purchase_id = fields.Many2one('automatic.purchase', string='Ref', required=True, ondelete='cascade', index=True, copy=False) + automatic_purchase_line_id = fields.Many2one('automatic.purchase.line', string='Automatic Line') sale_id = fields.Many2one('sale.order', string='SO') - partner_id = fields.Many2one('res.partner', string='Customer') - salesperson_id = fields.Many2one('res.user', string='Sales') + sale_line_id = fields.Many2one('sale.order.line', string='SO Line') + picking_id = fields.Many2one('stock.picking', string='Picking') + move_id = fields.Many2one('stock.move', string='Move') + partner_id = fields.Many2one('res.partner', string='Partner') + partner_invoice_id = fields.Many2one('res.partner', string='Invoice Partner') + salesperson_id = fields.Many2one('res.users', string='Sales') product_id = fields.Many2one('product.product', string='Product') - qty_so = fields.Float(string='Qty') + qty_so = fields.Float(string='Qty SO') + qty_po = fields.Float(string='Qty PO') diff --git a/indoteknik_custom/models/purchasing_job.py b/indoteknik_custom/models/purchasing_job.py index 18235d47..43da2458 100644 --- a/indoteknik_custom/models/purchasing_job.py +++ b/indoteknik_custom/models/purchasing_job.py @@ -38,5 +38,52 @@ class PurchasingJob(models.Model): def generate_request_po(self): # print(1) + # TODO create document automatic purchase for job in self: print(job.product_id.name) + + +class OutstandingSales(models.Model): + _name = 'v.sales.outstanding' + _auto = False + _rec_name = 'move_id' + + id = fields.Integer() + move_id = fields.Many2one('stock.move', string='Move') + picking_id = fields.Many2one('stock.picking', string='Picking') + product_id = fields.Many2one('product.product', string='Product') + sale_id = fields.Many2one('sale.order', string='Sale') + sale_line_id = fields.Many2one('sale.order.line', string='Sale Line') + partner_id = fields.Many2one('res.partner', string='Partner') + partner_invoice_id = fields.Many2one('res.partner', string='Invoice Partner') + salesperson_id = fields.Many2one('res.users', string='Salesperson') + origin = fields.Char(string='Origin') + salesperson = fields.Char(string='Sales Name') + item_code = fields.Char(string='Item Code') + product = fields.Char(string='Product') + outgoing = fields.Float(string='Outgoing') + brand = fields.Char(string='Brand') + invoice_partner = fields.Char(string='Invoice Partner') + + def init(self): + tools.drop_view_if_exists(self.env.cr, self._table) + self.env.cr.execute(""" + CREATE OR REPLACE VIEW v_sales_outstanding AS ( + select sm.id, sm.id as move_id, sp.id as picking_id, sm.product_id, so.id as sale_id, + sol.id as sale_line_id, rp.id as partner_id, so.user_id as salesperson_id, so.partner_invoice_id, + sp.origin, rp2.name as salesperson, coalesce(pp.default_code, pt.default_code) as item_code, pt.name as product, + sm.product_uom_qty as outgoing, xm.x_name as brand, rp.name as invoice_partner + from stock_move sm + join stock_picking sp on sp.id = sm.picking_id + join sale_order_line sol on sol.id = sm.sale_line_id + join sale_order so on so.id = sol.order_id + join res_partner rp on rp.id = so.partner_invoice_id + join res_users ru on ru.id = so.user_id + join res_partner rp2 on rp2.id = ru.partner_id + join product_product pp on pp.id = sm.product_id + join product_template pt on pt.id = pp.product_tmpl_id + left join x_manufactures xm on xm.id = pt.x_manufacture + where sp.state in ('draft', 'waiting', 'confirmed', 'assigned') + and sp.name like '%OUT%' + ) + """) diff --git a/indoteknik_custom/models/purchasing_job_multi_update.py b/indoteknik_custom/models/purchasing_job_multi_update.py index c880980a..a1b79907 100644 --- a/indoteknik_custom/models/purchasing_job_multi_update.py +++ b/indoteknik_custom/models/purchasing_job_multi_update.py @@ -16,7 +16,7 @@ class PurchasingJobMultiUpdate(models.TransientModel): 'tag': 'display_notification', 'params': { 'title': 'Notification', - 'message': 'Invoice Status berhasil diubah', + 'message': 'Berhasil membuat Automatic Purchase', 'next': {'type': 'ir.actions.act_window_close'}, } }
\ No newline at end of file diff --git a/indoteknik_custom/security/ir.model.access.csv b/indoteknik_custom/security/ir.model.access.csv index 09801dbc..e4535561 100755 --- a/indoteknik_custom/security/ir.model.access.csv +++ b/indoteknik_custom/security/ir.model.access.csv @@ -87,4 +87,5 @@ access_wati_history_line,access.wati.history.line,model_wati_history_line,,1,1,1 access_v_purchasing_job,access.v.purchasing.job,model_v_purchasing_job,,1,1,1,1 access_sale_advance_payment_inv,access.sale.advance.payment.inv,model_sale_advance_payment_inv,,1,1,1,1 access_purchasing_job_multi_update,access.purchasing.job.multi.update,model_purchasing_job_multi_update,,1,1,1,1 -access_automatic_purchase_sales_match,access.automatic.purchase.sales.match,model_automatic_purchase_sales_match,,1,1,1,1
\ No newline at end of file +access_automatic_purchase_sales_match,access.automatic.purchase.sales.match,model_automatic_purchase_sales_match,,1,1,1,1 +access_v_sales_outstanding,access.v.sales.outstanding,model_v_sales_outstanding,,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 58184d63..21b4b1f2 100644 --- a/indoteknik_custom/views/automatic_purchase.xml +++ b/indoteknik_custom/views/automatic_purchase.xml @@ -43,10 +43,15 @@ <field name="arch" type="xml"> <tree> <field name="sale_id" readonly="1"/> - <field name="partner_id" readonly="1"/> + <field name="sale_line_id" readonly="1" optional="hide"/> + <field name="picking_id" readonly="1" optional="hide"/> + <field name="move_id" readonly="1" optional="hide"/> + <field name="partner_id" readonly="1" optional="hide"/> + <field name="partner_invoice_id" readonly="1"/> <field name="salesperson_id" readonly="1"/> <field name="product_id" readonly="1"/> <field name="qty_so" readonly="1"/> + <field name="qty_po" readonly="1"/> </tree> </field> </record> @@ -116,6 +121,8 @@ <page string="Info" name="automatic_purchase_info"> <group> <field name="notification" readonly="1"/> + <field name="total_qty_line"/> + <field name="total_qty_so"/> </group> </page> </notebook> |
