10 changed files with 178 additions and 348 deletions
			
			
		| @ -0,0 +1,36 @@ | |||
| # -*- coding: utf-8 -*- | |||
| 
 | |||
| ############################################################################## | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2018-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: LINTO C T(<https://www.cybrosys.com>) | |||
| #    you can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | |||
| #    If not, see <https://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################## | |||
| from odoo import models | |||
| 
 | |||
| class PosOrderExtended(models.Model): | |||
|     _inherit = 'pos.order' | |||
| 
 | |||
|     def _prepare_invoice_line(self, order_line): | |||
|         return { | |||
|             'product_id': order_line.product_id.id, | |||
|             'quantity': order_line.qty if self.amount_total >= 0 else -order_line.qty, | |||
|             'discount': order_line.discount, | |||
|             'price_unit': order_line.price_unit, | |||
|             'name': order_line.product_id.display_name, | |||
|             'tax_ids': [(6, 0, order_line.tax_ids_after_fiscal_position.ids)], | |||
|             'product_uom_id': order_line.uom_id.id, | |||
|         } | |||
| @ -0,0 +1,110 @@ | |||
| # -*- coding: utf-8 -*- | |||
| 
 | |||
| ############################################################################## | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2018-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: LINTO C T(<https://www.cybrosys.com>) | |||
| #    you can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | |||
| #    If not, see <https://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################## | |||
| from odoo import models | |||
| from itertools import groupby | |||
| 
 | |||
| 
 | |||
| class StockPicking(models.Model): | |||
|     _inherit = 'stock.picking' | |||
| 
 | |||
|     def _prepare_stock_move_vals(self, first_line, order_lines): | |||
|         return { | |||
|             'name': first_line.name, | |||
|             'product_uom': first_line.uom_id.id, | |||
|             'picking_id': self.id, | |||
|             'picking_type_id': self.picking_type_id.id, | |||
|             'product_id': first_line.product_id.id, | |||
|             'product_uom_qty': abs(sum(order_lines.mapped('qty'))), | |||
|             'state': 'draft', | |||
|             'location_id': self.location_id.id, | |||
|             'location_dest_id': self.location_dest_id.id, | |||
|             'company_id': self.company_id.id, | |||
|    } | |||
| 
 | |||
|     def _create_move_from_pos_order_lines(self, lines): | |||
|         self.ensure_one() | |||
|         lines_by_product = groupby(sorted(lines, key=lambda l: l.product_id.id), | |||
|                                    key=lambda l: (l.product_id.id, l.uom_id.id)) | |||
|         for product, lines in lines_by_product: | |||
|             order_lines = self.env['pos.order.line'].concat(*lines) | |||
|             first_line = order_lines[0] | |||
|             current_move = self.env['stock.move'].create( | |||
|                 self._prepare_stock_move_vals(first_line, order_lines) | |||
|             ) | |||
|             confirmed_moves = current_move._action_confirm() | |||
|             for move in confirmed_moves: | |||
|                 if first_line.product_id == move.product_id and first_line.product_id.tracking != 'none': | |||
|                     if self.picking_type_id.use_existing_lots or self.picking_type_id.use_create_lots: | |||
|                         for line in order_lines: | |||
|                             sum_of_lots = 0 | |||
|                             for lot in line.pack_lot_ids.filtered(lambda l: l.lot_name): | |||
|                                 if line.product_id.tracking == 'serial': | |||
|                                     qty = 1 | |||
|                                 else: | |||
|                                     qty = abs(line.qty) | |||
|                                 ml_vals = move._prepare_move_line_vals() | |||
|                                 ml_vals.update({'qty_done': qty}) | |||
|                                 if self.picking_type_id.use_existing_lots: | |||
|                                     existing_lot = self.env['stock.production.lot'].search([ | |||
|                                         ('company_id', '=', self.company_id.id), | |||
|                                         ('product_id', '=', line.product_id.id), | |||
|                                         ('name', '=', lot.lot_name) | |||
|                                     ]) | |||
|                                     if not existing_lot and self.picking_type_id.use_create_lots: | |||
|                                         existing_lot = self.env['stock.production.lot'].create({ | |||
|                                             'company_id': self.company_id.id, | |||
|                                             'product_id': line.product_id.id, | |||
|                                             'name': lot.lot_name, | |||
|                                         }) | |||
|                                     ml_vals.update({ | |||
|                                         'lot_id': existing_lot.id, | |||
|                                     }) | |||
|                                 else: | |||
|                                     ml_vals.update({ | |||
|                                         'lot_name': lot.lot_name, | |||
|                                     }) | |||
|                                 self.env['stock.move.line'].create(ml_vals) | |||
|                                 sum_of_lots += qty | |||
|                             if abs(line.qty) != sum_of_lots: | |||
|                                 difference_qty = abs(line.qty) - sum_of_lots | |||
|                                 ml_vals = current_move._prepare_move_line_vals() | |||
|                                 if line.product_id.tracking == 'serial': | |||
|                                     ml_vals.update({'qty_done': 1}) | |||
|                                     for i in range(int(difference_qty)): | |||
|                                         self.env['stock.move.line'].create(ml_vals) | |||
|                                 else: | |||
|                                     ml_vals.update({'qty_done': difference_qty}) | |||
|                                     self.env['stock.move.line'].create(ml_vals) | |||
|                     else: | |||
|                         move._action_assign() | |||
|                         sum_of_lots = 0 | |||
|                         for move_line in move.move_line_ids: | |||
|                             move_line.qty_done = move_line.product_uom_qty | |||
|                             sum_of_lots += move_line.product_uom_qty | |||
|                         if float_compare(move.product_uom_qty, move.quantity_done, | |||
|                                          precision_rounding=move.product_uom.rounding) > 0: | |||
|                             remaining_qty = move.product_uom_qty - move.quantity_done | |||
|                             ml_vals = move._prepare_move_line_vals() | |||
|                             ml_vals.update({'qty_done': remaining_qty}) | |||
|                             self.env['stock.move.line'].create(ml_vals) | |||
|                 else: | |||
|                     move.quantity_done = move.product_uom_qty | |||
| @ -1,88 +0,0 @@ | |||
| odoo.define('product_multi_uom_pos.multi_uom',function(require) { | |||
| "use strict"; | |||
| 
 | |||
| console.log("multi_uom_main") | |||
| 
 | |||
| var gui = require('point_of_sale.gui'); | |||
| var core = require('web.core'); | |||
| var models = require('point_of_sale.models'); | |||
| var pos_screens = require('point_of_sale.screens'); | |||
| var field_utils = require('web.field_utils'); | |||
| var rpc = require('web.rpc'); | |||
| var QWeb = core.qweb; | |||
| var _t = core._t; | |||
| var utils = require('web.utils'); | |||
| var round_pr = utils.round_precision; | |||
| 
 | |||
| 
 | |||
| 
 | |||
| //pos_screens.OrderWidget.include({
 | |||
| // set_value: function(val) {
 | |||
| //                this._super();
 | |||
| //    	var order = this.pos.get_order();
 | |||
| //    	var orderline = order.get_selected_orderline();
 | |||
| //    	var uom = orderline.uom_id[0];
 | |||
| //    	var lst_uom = this.pos.units_by_id[uom];
 | |||
| //    	if (order.get_selected_orderline()) {
 | |||
| //
 | |||
| //
 | |||
| //            var orderline = order.get_selected_orderline();
 | |||
| //    	    var latestprice = orderline.lst_price;
 | |||
| //            var current_pricelist = this.pos.default_pricelist;
 | |||
| //    	    orderline.set_unit_price(latestprice);
 | |||
| //            var mode = this.numpad_state.get('mode');
 | |||
| //            if( mode === 'quantity'){
 | |||
| //            var selected_orderline = order.get_selected_orderline();
 | |||
| //                selected_orderline.set_unit_price(latestprice);
 | |||
| //                order.get_selected_orderline().set_quantity(val);
 | |||
| //            }else if( mode === 'discount'){
 | |||
| //                order.get_selected_orderline().set_discount(val);
 | |||
| //            }else if( mode === 'price'){
 | |||
| //                var selected_orderline = order.get_selected_orderline();
 | |||
| //                selected_orderline.price_manually_set = true;
 | |||
| //                selected_orderline.set_unit_price(val);
 | |||
| //            }
 | |||
| //            if (this.pos.config.iface_customer_facing_display) {
 | |||
| //                this.pos.send_current_order_to_customer_facing_display();
 | |||
| //            }
 | |||
| //    	}
 | |||
| //    },
 | |||
| //    });
 | |||
| //
 | |||
| //
 | |||
| //
 | |||
| //});
 | |||
| 
 | |||
| 
 | |||
| //    updatePricelist: function(newClient) {
 | |||
| //        let newClientPricelist, newClientFiscalPosition;
 | |||
| //        const defaultFiscalPosition = this.pos.fiscal_positions.find(
 | |||
| //            (position) => position.id === this.pos.config.default_fiscal_position_id[0]
 | |||
| //        );
 | |||
| //        if (newClient) {
 | |||
| //            newClientFiscalPosition = newClient.property_account_position_id
 | |||
| //                ? this.pos.fiscal_positions.find(
 | |||
| //                      (position) => position.id === newClient.property_account_position_id[0]
 | |||
| //                  )
 | |||
| //                : defaultFiscalPosition;
 | |||
| //            newClientPricelist =
 | |||
| //                this.pos.pricelists.find(
 | |||
| //                    (pricelist) => pricelist.id === newClient.property_product_pricelist[0]
 | |||
| //                ) || this.pos.default_pricelist;
 | |||
| //        } else {
 | |||
| //            newClientFiscalPosition = defaultFiscalPosition;
 | |||
| //            newClientPricelist = this.pos.default_pricelist;
 | |||
| //        }
 | |||
| //
 | |||
| //
 | |||
| //        if (this.selected_orderline.uom_id != this.selected_orderline.product.uom_id){
 | |||
| //            this.fiscal_position = newClientFiscalPosition;
 | |||
| //
 | |||
| //        }else{
 | |||
| //            this.fiscal_position = newClientFiscalPosition;
 | |||
| //            this.set_pricelist(newClientPricelist);
 | |||
| //
 | |||
| //        }
 | |||
| //
 | |||
| //
 | |||
| //    }
 | |||
					Loading…
					
					
				
		Reference in new issue