diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2023-10-25 15:56:56 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2023-10-25 15:56:56 +0700 |
| commit | 9292b2e0865500077281e2c410d264011b9a65da (patch) | |
| tree | 0409b626510d8a4ed86a8b2eeb7b7b8284d494f6 | |
| parent | c35137e5a43afeb6a45b7f213f9ab40afb75fb4c (diff) | |
add date if all line in delivery order reserved
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 38 | ||||
| -rw-r--r-- | indoteknik_custom/models/stock_picking.py | 6 | ||||
| -rw-r--r-- | indoteknik_custom/views/stock_picking.xml | 1 |
3 files changed, 45 insertions, 0 deletions
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 diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 626e842d..a5e533b1 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -1,6 +1,7 @@ from odoo import fields, models, api, _ from odoo.exceptions import AccessError, UserError, ValidationError from odoo.tools.float_utils import float_is_zero +from datetime import datetime from itertools import groupby import pytz, datetime @@ -74,6 +75,7 @@ class StockPicking(models.Model): purchase_representative_id = fields.Many2one('res.users', related='move_lines.purchase_line_id.order_id.user_id', string="Purchase Representative", readonly=True) carrier_id = fields.Many2one('delivery.carrier', string='Shipping Method') shipping_status = fields.Char(string='Shipping Status', compute="_compute_shipping_status") + date_reserved = fields.Datetime(string="Date Reserved", help='Tanggal ter-reserved semua barang nya') def _compute_shipping_status(self): for rec in self: @@ -309,6 +311,10 @@ class StockPicking(models.Model): if product: product.product_tmpl_id._create_solr_queue('_sync_product_stock_to_solr') + if not self.date_reserved: + current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + self.date_reserved = current_time + res = super(StockPicking, self).button_validate() self.calculate_line_no() return res diff --git a/indoteknik_custom/views/stock_picking.xml b/indoteknik_custom/views/stock_picking.xml index 3702dcf8..b0932d5a 100644 --- a/indoteknik_custom/views/stock_picking.xml +++ b/indoteknik_custom/views/stock_picking.xml @@ -72,6 +72,7 @@ /> </field> <field name="group_id" position="before"> + <field name="date_reserved"/> <field name="is_internal_use" string="Internal Use" type="object" |
