From cdd05cb369aec9bbaded9fe2e33124b336f1ab74 Mon Sep 17 00:00:00 2001 From: devCbssolutionsRo Date: Sat, 18 Jan 2020 22:31:11 +0200 Subject: [PATCH 1/4] fitler posible locations and stock.picking only is stockable products --- invoice_stock_move/models/invoice_stock.py | 36 ++++++++++++++----- .../views/invoice_stock_move_view.xml | 6 ++-- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/invoice_stock_move/models/invoice_stock.py b/invoice_stock_move/models/invoice_stock.py index 632592c8c..a61ad021e 100644 --- a/invoice_stock_move/models/invoice_stock.py +++ b/invoice_stock_move/models/invoice_stock.py @@ -21,11 +21,20 @@ ############################################################################# from odoo.exceptions import UserError from odoo import models, fields, api, _ +from odoo.doc._extensions.pyjsparser.parser import false class InvoiceStockMove(models.Model): _inherit = 'account.move' + @api.onchange('type') + def onchange_invoice_type(self): + if self.type in ['out_invoice','out_receipt']: + domain="[('code','=','incoming')]" + else: + domain="[('code','=','outgoing')]" + return {'domain': {'picking_type_id': domain}} + @api.model def _default_picking_receive(self): type_obj = self.env['stock.picking.type'] @@ -44,14 +53,14 @@ class InvoiceStockMove(models.Model): types = type_obj.search([('code', '=', 'outgoing'), ('warehouse_id', '=', False)]) return types[:4] - picking_count = fields.Integer(string="Count") - invoice_picking_id = fields.Many2one('stock.picking', string="Picking Id") + picking_count = fields.Integer(string="Count",copy=False) + invoice_picking_id = fields.Many2one('stock.picking', string="Picking Id",copy=False) picking_type_id = fields.Many2one('stock.picking.type', 'Picking Type', required=True, default=_default_picking_receive, - help="This will determine picking type of incoming shipment") + help="This will determine picking type of incoming shipment",copy=False) picking_transfer_id = fields.Many2one('stock.picking.type', 'Deliver To', required=True, default=_default_picking_transfer, - help="This will determine picking type of outgoing shipment") + help="This will determine picking type of outgoing shipment",copy=False) state = fields.Selection([ ('draft', 'Draft'), ('proforma', 'Pro-forma'), @@ -64,21 +73,32 @@ class InvoiceStockMove(models.Model): track_visibility='onchange', copy=False) def action_stock_move(self): - for order in self: - if not self.invoice_picking_id: + "will be executed at the pressing of transfer button" + for order in self: # order is account.move meaning also invoice + exist_stockable_products = False + for line in order.invoice_line_ids: + if line.product_id: + if line.product_id.type == 'product': + exist_stockable_products = True + break + if exist_stockable_products and not self.invoice_picking_id: pick = { 'picking_type_id': self.picking_type_id.id, 'partner_id': self.partner_id.id, - 'origin': self.name, + 'origin': self.type+self.name, 'location_dest_id': self.picking_type_id.default_location_dest_id.id, 'location_id': self.partner_id.property_stock_supplier.id } picking = self.env['stock.picking'].create(pick) self.invoice_picking_id = picking.id self.picking_count = len(picking) - moves = order.invoice_line_ids.filtered(lambda r: r.product_id.type in ['product', 'consu'])._create_stock_moves(picking) + moves = order.invoice_line_ids.filtered(lambda r: r.product_id.type in ['product'])._create_stock_moves(picking) + #, 'consu' move_ids = moves._action_confirm() move_ids._action_assign() + else: + self.invoice_picking_id = false + self.picking_count = 0 def action_view_picking(self): action = self.env.ref('stock.action_picking_tree_ready') diff --git a/invoice_stock_move/views/invoice_stock_move_view.xml b/invoice_stock_move/views/invoice_stock_move_view.xml index 3beea0ebd..c70639435 100644 --- a/invoice_stock_move/views/invoice_stock_move_view.xml +++ b/invoice_stock_move/views/invoice_stock_move_view.xml @@ -8,11 +8,11 @@ + From 00061fd18874d5dd26cbcf234b6770bd26e4914e Mon Sep 17 00:00:00 2001 From: devCbssolutionsRo Date: Mon, 20 Jan 2020 02:21:03 +0200 Subject: [PATCH 4/4] ok now also tranfer for customer invoice --- invoice_stock_move/models/invoice_stock.py | 25 ++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/invoice_stock_move/models/invoice_stock.py b/invoice_stock_move/models/invoice_stock.py index f665e7524..de242e7a2 100644 --- a/invoice_stock_move/models/invoice_stock.py +++ b/invoice_stock_move/models/invoice_stock.py @@ -21,6 +21,10 @@ ############################################################################# from odoo.exceptions import UserError from odoo import models, fields, api, _ +import logging + +_logger = logging.getLogger(__name__) + class InvoiceStockMove(models.Model): @@ -70,12 +74,23 @@ class InvoiceStockMove(models.Model): "will be executed at the pressing of transfer button" for order in self: # order is account.move meaning also invoice if not self.invoice_picking_id: + if self.type in ['out_invoice','out_receipt']: + location_dest_id = self.partner_id.property_stock_customer.id + location_id = self.picking_type_id.default_location_src_id.id + elif self.type in ['in_invoice','in_receipt']: + location_dest_id = self.picking_type_id.default_location_dest_id.id + location_id = self.partner_id.property_stock_supplier.id + else: + _logger.error(f'is something wrong, transfer should exist only for invoices self={self}') + self.transfer_state = 'nothing_to_transfer' + return + pick = { 'picking_type_id': self.picking_type_id.id, 'partner_id': self.partner_id.id, 'origin': self.type+self.name, - 'location_dest_id': self.picking_type_id.default_location_dest_id.id, - 'location_id': self.partner_id.property_stock_supplier.id + 'location_dest_id': location_dest_id, + 'location_id': location_id } picking = self.env['stock.picking'].create(pick) self.invoice_picking_id = picking.id @@ -111,8 +126,10 @@ class SupplierInvoiceLine(models.Model): 'name': line.name or '', 'product_id': line.product_id.id, 'product_uom': line.product_uom_id.id, - 'location_id': line.move_id.partner_id.property_stock_supplier.id, - 'location_dest_id': picking.picking_type_id.default_location_dest_id.id, +# 'location_id': line.move_id.partner_id.property_stock_supplier.id, +# 'location_dest_id': picking.picking_type_id.default_location_dest_id.id, + 'location_id': picking.location_id.id, + 'location_dest_id': picking.location_dest_id.id, 'picking_id': picking.id, # 'move_dest_id': False, 'state': 'draft',