From 9292b2e0865500077281e2c410d264011b9a65da Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Wed, 25 Oct 2023 15:56:56 +0700 Subject: add date if all line in delivery order reserved --- indoteknik_custom/models/sale_order.py | 38 ++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'indoteknik_custom/models/sale_order.py') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 9324930e..9da6d9fb 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -1,5 +1,6 @@ from odoo import fields, models, api, _ from odoo.exceptions import UserError +from datetime import datetime import logging, random, string, requests, math, json, re _logger = logging.getLogger(__name__) @@ -81,6 +82,16 @@ class SaleOrder(models.Model): email = fields.Char(string='Email') picking_iu_id = fields.Many2one('stock.picking', 'Picking IU') helper_by_id = fields.Many2one('res.users', 'Helper By') + picking_ids = fields.Many2many('stock.picking', string='Pickings', compute='_get_pickings', readonly=True, copy=False, search="_search_picking_ids") + + def _get_pickings(self): + state = ['assigned'] + for order in self: + pickings = self.env['stock.picking'].search([ + ('sale_id.id', '=', order.id), + ('state', 'in', state) + ]) + order.picking_ids = pickings @api.model def action_multi_update_state(self): @@ -193,8 +204,35 @@ class SaleOrder(models.Model): sale.so_status = 'sebagian' else: sale.so_status = 'menunggu' + + for picking in sale.picking_ids: + sum_qty_pick = sum(move_line.product_uom_qty for move_line in picking.move_ids_without_package) + sum_qty_reserved = sum(move_line.product_uom_qty for move_line in picking.move_line_ids_without_package) + if sum_qty_pick == sum_qty_reserved: + current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + picking.date_reserved = current_time + else: + picking.date_reserved = '' + _logger.info('Calculate SO Status %s' % sale.id) + def _search_picking_ids(self, operator, value): + if operator == 'in' and value: + self.env.cr.execute(""" + SELECT array_agg(so.sale_id) + FROM stock_picking so + WHERE + so.sale_id is not null and so.id = ANY(%s) + """, (list(value),)) + so_ids = self.env.cr.fetchone()[0] or [] + return [('id', 'in', so_ids)] + elif operator == '=' and not value: + order_ids = self._search([ + ('order_line.invoice_lines.move_id.move_type', 'in', ('out_invoice', 'out_refund')) + ]) + return [('id', 'not in', order_ids)] + return ['&', ('order_line.invoice_lines.move_id.move_type', 'in', ('out_invoice', 'out_refund')), ('order_line.invoice_lines.move_id', operator, value)] + @api.onchange('partner_shipping_id') def onchange_partner_shipping(self): self.real_shipping_id = self.partner_shipping_id -- cgit v1.2.3 From 556c95e1fe466448eee0e823adc6a5757638272d Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Thu, 26 Oct 2023 11:09:33 +0700 Subject: fix bug in sale order while compute date reserved --- indoteknik_custom/models/sale_order.py | 56 ++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 26 deletions(-) (limited to 'indoteknik_custom/models/sale_order.py') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 9da6d9fb..cc6941a9 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -82,16 +82,16 @@ class SaleOrder(models.Model): email = fields.Char(string='Email') picking_iu_id = fields.Many2one('stock.picking', 'Picking IU') helper_by_id = fields.Many2one('res.users', 'Helper By') - picking_ids = fields.Many2many('stock.picking', string='Pickings', compute='_get_pickings', readonly=True, copy=False, search="_search_picking_ids") + # picking_ids = fields.Many2many('stock.picking', string='Pickings', compute='_get_pickings', readonly=True, copy=False, search="_search_picking_ids") - def _get_pickings(self): - state = ['assigned'] - for order in self: - pickings = self.env['stock.picking'].search([ - ('sale_id.id', '=', order.id), - ('state', 'in', state) - ]) - order.picking_ids = pickings + # def _get_pickings(self): + # state = ['assigned'] + # for order in self: + # pickings = self.env['stock.picking'].search([ + # ('sale_id.id', '=', order.id), + # ('state', 'in', state) + # ]) + # order.picking_ids = pickings @api.model def action_multi_update_state(self): @@ -208,30 +208,34 @@ class SaleOrder(models.Model): for picking in sale.picking_ids: sum_qty_pick = sum(move_line.product_uom_qty for move_line in picking.move_ids_without_package) sum_qty_reserved = sum(move_line.product_uom_qty for move_line in picking.move_line_ids_without_package) - if sum_qty_pick == sum_qty_reserved: + if picking.state == 'done': + continue + elif sum_qty_pick == sum_qty_reserved and not picking.date_reserved:# baru ke reserved current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') picking.date_reserved = current_time + elif sum_qty_pick == sum_qty_reserved:# sudah ada data reserved + picking.date_reserved = picking.date_reserved else: picking.date_reserved = '' _logger.info('Calculate SO Status %s' % sale.id) - def _search_picking_ids(self, operator, value): - if operator == 'in' and value: - self.env.cr.execute(""" - SELECT array_agg(so.sale_id) - FROM stock_picking so - WHERE - so.sale_id is not null and so.id = ANY(%s) - """, (list(value),)) - so_ids = self.env.cr.fetchone()[0] or [] - return [('id', 'in', so_ids)] - elif operator == '=' and not value: - order_ids = self._search([ - ('order_line.invoice_lines.move_id.move_type', 'in', ('out_invoice', 'out_refund')) - ]) - return [('id', 'not in', order_ids)] - return ['&', ('order_line.invoice_lines.move_id.move_type', 'in', ('out_invoice', 'out_refund')), ('order_line.invoice_lines.move_id', operator, value)] + # def _search_picking_ids(self, operator, value): + # if operator == 'in' and value: + # self.env.cr.execute(""" + # SELECT array_agg(so.sale_id) + # FROM stock_picking so + # WHERE + # so.sale_id is not null and so.id = ANY(%s) + # """, (list(value),)) + # so_ids = self.env.cr.fetchone()[0] or [] + # return [('id', 'in', so_ids)] + # elif operator == '=' and not value: + # order_ids = self._search([ + # ('order_line.invoice_lines.move_id.move_type', 'in', ('out_invoice', 'out_refund')) + # ]) + # return [('id', 'not in', order_ids)] + # return ['&', ('order_line.invoice_lines.move_id.move_type', 'in', ('out_invoice', 'out_refund')), ('order_line.invoice_lines.move_id', operator, value)] @api.onchange('partner_shipping_id') def onchange_partner_shipping(self): -- cgit v1.2.3 From 27b2145a60fde081f7dd5555126e169d426904e9 Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 9 Nov 2023 09:21:45 +0700 Subject: mandatory source in sale order --- indoteknik_custom/models/sale_order.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indoteknik_custom/models/sale_order.py') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index cc6941a9..dbc4e863 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -77,7 +77,7 @@ class SaleOrder(models.Model): voucher_id = fields.Many2one(comodel_name='voucher', string='Voucher', copy=False) applied_voucher_id = fields.Many2one(comodel_name='voucher', string='Applied Voucher', copy=False) amount_voucher_disc = fields.Float(string='Voucher Discount') - source_id = fields.Many2one('utm.source', 'Source', domain="[('id', 'in', [32, 59, 60, 61])]") + source_id = fields.Many2one('utm.source', 'Source', domain="[('id', 'in', [32, 59, 60, 61])]", required=True) estimated_arrival_days = fields.Integer('Estimated Arrival Days', default=0) email = fields.Char(string='Email') picking_iu_id = fields.Many2one('stock.picking', 'Picking IU') -- cgit v1.2.3 From 14156f7d6f55eaa4e74310ee1aa4e5128aa17fff Mon Sep 17 00:00:00 2001 From: Azka Nathan Date: Thu, 9 Nov 2023 09:55:34 +0700 Subject: mandatory static npwp,sppkp,customer_type in sale order and fix log note journal entries --- indoteknik_custom/models/sale_order.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indoteknik_custom/models/sale_order.py') diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index dbc4e863..f9229bca 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -70,9 +70,9 @@ class SaleOrder(models.Model): customer_type = fields.Selection([ ('pkp', 'PKP'), ('nonpkp', 'Non PKP') - ]) - sppkp = fields.Char(string="SPPKP") - npwp = fields.Char(string="NPWP") + ], required=True) + sppkp = fields.Char(string="SPPKP", required=True) + npwp = fields.Char(string="NPWP", required=True) purchase_total = fields.Monetary(string='Purchase Total', compute='_compute_purchase_total') voucher_id = fields.Many2one(comodel_name='voucher', string='Voucher', copy=False) applied_voucher_id = fields.Many2one(comodel_name='voucher', string='Applied Voucher', copy=False) -- cgit v1.2.3