From 6fc5033b8a1376ed684ed59f80d882a94b46c264 Mon Sep 17 00:00:00 2001 From: Oscar Date: Sat, 25 Sep 2021 00:02:37 -0500 Subject: [PATCH] Add lot compute --- shipment.py | 61 ++++++++++++++++++++++++++++++++++++++++ shipment.xml | 4 ++- stock.py | 27 ++++-------------- stock.xml | 7 +++-- tryton.cfg | 2 +- view/stock_lot_form.xml | 3 +- warehouse_detailed.fods | Bin 15683 -> 15636 bytes 7 files changed, 76 insertions(+), 28 deletions(-) diff --git a/shipment.py b/shipment.py index da984be..fa83757 100644 --- a/shipment.py +++ b/shipment.py @@ -4,6 +4,8 @@ from datetime import date from decimal import Decimal from operator import itemgetter from sql import Table +import copy + from trytond.modules.company import CompanyReport from trytond.pool import Pool, PoolMeta from trytond.wizard import Wizard, StateTransition, StateView, Button, StateReport @@ -62,6 +64,13 @@ class InternalShipment(metaclass=PoolMeta): super(InternalShipment, cls).wait(shipments) cls.set_employee(shipments, 'shipped_by') + @classmethod + @ModelView.button_action('stock.wizard_shipment_internal_assign') + def assign_wizard(cls, shipments): + super(InternalShipment, cls).assign_wizard(shipments) + for sh in shipments: + cls.assign_lots(sh) + @classmethod def done(cls, shipments): super(InternalShipment, cls).done(shipments) @@ -73,6 +82,58 @@ class InternalShipment(metaclass=PoolMeta): if employee_id: cls.write(shipments, {field: employee_id}) + @classmethod + def assign_lots(cls, shipment): + """ + Look for the oldest lot or the one closest to the expiration + date and try assign it to shipment moves + """ + Move = Pool().get('stock.move') + Lot = Pool().get('stock.lot') + + def _get_lots(product_id): + locations_ids = {'locations': [shipment.from_location.id]} + with Transaction().set_context(locations_ids): + dom = [ + ('product', '=', product_id), + ('active', '=', True), + ('quantity', '>', 0), + ] + lots = Lot.search(dom, order=[('create_date', 'ASC')]) + return lots + + for move in shipment.moves: + if move.product.lot_is_required: + lots_list = _get_lots(move.product.id) + balance_qty = move.quantity + print('lots_list... ', lots_list) + for lt in lots_list: + print('q... ', lt.number, lt.quantity) + + if lt.quantity >= balance_qty: + move.lot = lt.id + move.save() + break + else: + balance_qty = balance_qty - lt.quantity + move.quantity = lt.quantity + move.lot = lt.id + move.save() + if balance_qty: + print() + move, = Move.create([{ + 'quantity': balance_qty, + 'internal_quantity': balance_qty, + 'product': move.product.id, + 'lot': lt.id, + 'from_location': move.from_location.id, + 'to_location': move.to_location.id, + 'shipment': str(shipment), + 'uom': move.uom.id, + 'company': move.company.id, + 'state': move.state, + }]) + @classmethod def import_data(cls, fields_names, data): pool = Pool() diff --git a/shipment.xml b/shipment.xml index ad90ed6..bbfb5dd 100644 --- a/shipment.xml +++ b/shipment.xml @@ -3,7 +3,9 @@ this repository contains the full copyright notices and license terms. --> - + + stock_co.create_internal_shipment.start form diff --git a/stock.py b/stock.py index 55517dd..1db5119 100644 --- a/stock.py +++ b/stock.py @@ -32,25 +32,10 @@ class Move(metaclass=PoolMeta): current_stock = fields.Function(fields.Float('Current Stock', depends=['product']), 'on_change_with_current_stock') - def next_lot(self, product_id): - "Look for the oldest lot or the one closest to the expiration date." - Lot = Pool().get('stock.lot') - dom = [ - ('product', '=', product_id), - ('active', '=', True), - ('quantity', '>', 0), - ] - - lots = Lot.search(dom, order=[('create_date', 'ASC')]) - if lots: - return lots[0].id - - @fields.depends('current_stock', 'lot') + @fields.depends('current_stock') def on_change_product(self, name=None): super(Move, self).on_change_product() self.current_stock = self.on_change_with_current_stock() - if self.product: - self.lot = self.next_lot(self.product.id) @fields.depends('product', 'from_location', 'to_location') def on_change_with_current_stock(self, name=None): @@ -67,11 +52,11 @@ class Move(metaclass=PoolMeta): } with Transaction().set_context(context): res_dict = self.product._get_quantity( - [self.product], - 'quantity', - [location.id], - grouping_filter=([self.product.id],) - ) + [self.product], + 'quantity', + [location.id], + grouping_filter=([self.product.id],) + ) if res_dict.get(self.product.id): res += res_dict[self.product.id] return res diff --git a/stock.xml b/stock.xml index d409938..e51751d 100644 --- a/stock.xml +++ b/stock.xml @@ -3,12 +3,15 @@ this repository contains the full copyright notices and license terms. --> + stock.lot stock_lot_form + stock_co.print_move_by_product - - @@ -110,5 +110,6 @@ this repository contains the full copyright notices and license terms. --> + diff --git a/tryton.cfg b/tryton.cfg index 1c23269..153caa1 100644 --- a/tryton.cfg +++ b/tryton.cfg @@ -1,5 +1,5 @@ [tryton] -version=6.0.3 +version=6.0.5 depends: product stock diff --git a/view/stock_lot_form.xml b/view/stock_lot_form.xml index 0660b90..c9062d2 100644 --- a/view/stock_lot_form.xml +++ b/view/stock_lot_form.xml @@ -2,8 +2,7 @@ - + diff --git a/warehouse_detailed.fods b/warehouse_detailed.fods index feae8f672388f0d17e8e76135c7898fd6bb712f7..12f3cff16a551473c8c6294f0fb48e12d4fabca7 100644 GIT binary patch delta 12509 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 LQ$a;@{dM?XE8&f! delta 12511 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