summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2023-10-25 15:56:56 +0700
committerstephanchrst <stephanchrst@gmail.com>2023-10-25 15:56:56 +0700
commit9292b2e0865500077281e2c410d264011b9a65da (patch)
tree0409b626510d8a4ed86a8b2eeb7b7b8284d494f6
parentc35137e5a43afeb6a45b7f213f9ab40afb75fb4c (diff)
add date if all line in delivery order reserved
-rwxr-xr-xindoteknik_custom/models/sale_order.py38
-rw-r--r--indoteknik_custom/models/stock_picking.py6
-rw-r--r--indoteknik_custom/views/stock_picking.xml1
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"