mejora el stock picking batch de odoo desde OCA/stock_logistics_workflow
This commit is contained in:
parent
8a755662d7
commit
448f889f12
41 changed files with 6541 additions and 0 deletions
2
stock_picking_batch_extended/report/__init__.py
Normal file
2
stock_picking_batch_extended/report/__init__.py
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
from . import batch_report
|
||||
96
stock_picking_batch_extended/report/batch_report.py
Normal file
96
stock_picking_batch_extended/report/batch_report.py
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
# Copyright 2018 Tecnativa - Carlos Dauden
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
import logging
|
||||
|
||||
from odoo import api, fields, models
|
||||
from odoo.tools import float_is_zero
|
||||
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ReportPrintBatchPicking(models.AbstractModel):
|
||||
_name = 'report.stock_picking_batch_extended.report_batch_picking'
|
||||
_description = 'Report for Batch Picking'
|
||||
|
||||
@api.model
|
||||
def key_level_0(self, operation):
|
||||
return operation.location_id.id, operation.location_dest_id.id
|
||||
|
||||
@api.model
|
||||
def key_level_1(self, operation):
|
||||
return operation.product_id.id
|
||||
|
||||
@api.model
|
||||
def new_level_0(self, operation):
|
||||
level_0_name = '{} \u21E8 {}'.format(
|
||||
operation.location_id.name_get()[0][1],
|
||||
operation.location_dest_id.name_get()[0][1])
|
||||
return {
|
||||
'name': level_0_name,
|
||||
'location': operation.location_id,
|
||||
'location_dest': operation.location_dest_id,
|
||||
'l1_items': {},
|
||||
}
|
||||
|
||||
@api.model
|
||||
def _get_operation_qty(self, operation):
|
||||
return float_is_zero(
|
||||
operation.product_qty,
|
||||
precision_rounding=operation.product_uom_id.rounding
|
||||
) and operation.qty_done or operation.product_qty
|
||||
|
||||
@api.model
|
||||
def new_level_1(self, operation):
|
||||
return {
|
||||
'product': operation.product_id,
|
||||
'product_qty': self._get_operation_qty(operation),
|
||||
'operations': operation,
|
||||
}
|
||||
|
||||
@api.model
|
||||
def update_level_1(self, group_dict, operation):
|
||||
group_dict['product_qty'] += self._get_operation_qty(operation)
|
||||
group_dict['operations'] += operation
|
||||
|
||||
@api.model
|
||||
def sort_level_0(self, rec_list):
|
||||
return sorted(rec_list, key=lambda rec: (
|
||||
rec['location'].posx, rec['location'].posy, rec['location'].posz,
|
||||
rec['location'].name))
|
||||
|
||||
@api.model
|
||||
def sort_level_1(self, rec_list):
|
||||
return sorted(rec_list, key=lambda rec: (
|
||||
rec['product'].default_code or '', rec['product'].id))
|
||||
|
||||
@api.model
|
||||
def _get_grouped_data(self, batch):
|
||||
grouped_data = {}
|
||||
for op in batch.move_line_ids:
|
||||
l0_key = self.key_level_0(op)
|
||||
if l0_key not in grouped_data:
|
||||
grouped_data[l0_key] = self.new_level_0(op)
|
||||
l1_key = self.key_level_1(op)
|
||||
if l1_key in grouped_data[l0_key]['l1_items']:
|
||||
self.update_level_1(
|
||||
grouped_data[l0_key]['l1_items'][l1_key], op)
|
||||
else:
|
||||
grouped_data[l0_key]['l1_items'][l1_key] = self.new_level_1(op)
|
||||
for l0_key in grouped_data.keys():
|
||||
grouped_data[l0_key]['l1_items'] = self.sort_level_1(
|
||||
grouped_data[l0_key]['l1_items'].values())
|
||||
return self.sort_level_0(grouped_data.values())
|
||||
|
||||
@api.model
|
||||
def _get_report_values(self, docids, data=None):
|
||||
model = 'stock.picking.batch'
|
||||
docs = self.env[model].browse(docids)
|
||||
return {
|
||||
'doc_ids': docids,
|
||||
'doc_model': model,
|
||||
'data': data,
|
||||
'docs': docs,
|
||||
'get_grouped_data': self._get_grouped_data,
|
||||
'now': fields.Datetime.now,
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue