@ -0,0 +1,30 @@ | 
				
			|||
======================= | 
				
			|||
MRP - Secondary UoM v10 | 
				
			|||
======================= | 
				
			|||
 | 
				
			|||
This module Manage the Manufacturing process with secondary UoM. | 
				
			|||
 | 
				
			|||
Installation | 
				
			|||
============ | 
				
			|||
 | 
				
			|||
Just select it from available modules to install it, there is no need to extra installations. | 
				
			|||
 | 
				
			|||
Configuration | 
				
			|||
============= | 
				
			|||
 | 
				
			|||
After installing this module, Go to Inventory->Configuration->Setting->Products->Unit of Measures-> | 
				
			|||
Enable the different units of measure for products (TICK on Some 'products may be sold/purchased in different unit of | 
				
			|||
measures'). | 
				
			|||
 | 
				
			|||
Features | 
				
			|||
======== | 
				
			|||
 | 
				
			|||
* Allows to manage MRP with Secondary UoM. | 
				
			|||
* Products to Produce With Secondary UoM. | 
				
			|||
* Produced Products With Secondary UoM. | 
				
			|||
 | 
				
			|||
Credits | 
				
			|||
======= | 
				
			|||
Developer: Nikhil krishnan @ cybrosys, nikhil@cybrosys.in | 
				
			|||
 | 
				
			|||
 | 
				
			|||
@ -0,0 +1,24 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
 | 
				
			|||
############################################################################## | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
#    Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | 
				
			|||
#    Author: Nikhil krishnan(<http://www.cybrosys.com>) | 
				
			|||
#    you can modify it under the terms of the GNU LESSER | 
				
			|||
#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			|||
#    of the Software or modified copies of the Software. | 
				
			|||
# | 
				
			|||
#    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 <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################## | 
				
			|||
import models | 
				
			|||
@ -0,0 +1,50 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
 | 
				
			|||
############################################################################## | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
#    Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | 
				
			|||
#    Author: Nikhil krishnan(<http://www.cybrosys.com>) | 
				
			|||
#    you can modify it under the terms of the GNU LESSER | 
				
			|||
#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			|||
#    of the Software or modified copies of the Software. | 
				
			|||
# | 
				
			|||
#    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 <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################## | 
				
			|||
 | 
				
			|||
{ | 
				
			|||
    'name': 'MRP - Secondary UoM', | 
				
			|||
    'version': '10.0.1.0', | 
				
			|||
    'category': 'Manufacturing', | 
				
			|||
    'summary': 'Secondary UoM in Manufacturing Order', | 
				
			|||
    'description': """ | 
				
			|||
Manage the Manufacturing process with secondary UoM | 
				
			|||
=================================================== | 
				
			|||
This module allows you to cover planning, ordering, stocks and the manufacturing with a Secondary UoM. It handles the | 
				
			|||
Products to Produce & Produced Products according to the production with Secondary UoM | 
				
			|||
----------------------------------------------------------------------------------------- | 
				
			|||
* Allows to manage MRP with Secondary UoM | 
				
			|||
* Products to Produce With Secondary UoM | 
				
			|||
* Produced Products With Secondary UoM | 
				
			|||
""", | 
				
			|||
    'author': 'Cybrosys Techno Solutions', | 
				
			|||
    'company': 'Cybrosys Techno Solutions', | 
				
			|||
    'website': "http://www.cybrosys.com", | 
				
			|||
    'depends': ['mrp'], | 
				
			|||
    'data': ['views/mrp_sec_uom.xml', | 
				
			|||
             'data/mrp_sec_uom_round.xml'], | 
				
			|||
    'images': ['static/description/banner.jpg'], | 
				
			|||
    'license': 'LGPL-3', | 
				
			|||
    'installable': True, | 
				
			|||
    'application': False, | 
				
			|||
} | 
				
			|||
@ -0,0 +1,9 @@ | 
				
			|||
<?xml version="1.0" encoding="utf-8"?> | 
				
			|||
<odoo> | 
				
			|||
    <data noupdate="1"> | 
				
			|||
        <record forcecreate="True" id="sec_uom_ratio_rounding" model="decimal.precision"> | 
				
			|||
                <field name="name">Secondary UoM Ratio</field> | 
				
			|||
                <field name="digits">10</field> | 
				
			|||
        </record> | 
				
			|||
    </data> | 
				
			|||
</odoo> | 
				
			|||
@ -0,0 +1,25 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
 | 
				
			|||
############################################################################## | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
#    Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | 
				
			|||
#    Author: Nikhil krishnan(<https://www.cybrosys.com>) | 
				
			|||
#    you can modify it under the terms of the GNU LESSER | 
				
			|||
#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			|||
#    of the Software or modified copies of the Software. | 
				
			|||
# | 
				
			|||
#    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 <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################### | 
				
			|||
import mrp_sec_uom | 
				
			|||
import change_production_qnty | 
				
			|||
@ -0,0 +1,121 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
 | 
				
			|||
############################################################################## | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
#    Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | 
				
			|||
#    Author: Nikhil krishnan(<https://www.cybrosys.com>) | 
				
			|||
#    you can modify it under the terms of the GNU LESSER | 
				
			|||
#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			|||
#    of the Software or modified copies of the Software. | 
				
			|||
# | 
				
			|||
#    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 <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################## | 
				
			|||
 | 
				
			|||
from odoo import api, fields, models, _ | 
				
			|||
from odoo.exceptions import UserError | 
				
			|||
import math | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class ChangeProductionQty(models.TransientModel): | 
				
			|||
    _inherit = 'change.production.qty' | 
				
			|||
 | 
				
			|||
    mrp_sec_qty = fields.Float(string='Product Secondary Qty') | 
				
			|||
    mrp_sec_uom = fields.Many2one('product.uom', string='Secondary Unit') | 
				
			|||
 | 
				
			|||
    @api.model | 
				
			|||
    def default_get(self, fields): | 
				
			|||
        res = super(ChangeProductionQty, self).default_get(fields) | 
				
			|||
        prod_obj = self.env['mrp.production'] | 
				
			|||
        prod = prod_obj.browse(self._context.get('active_id')) | 
				
			|||
        if 'product_qty' in fields: | 
				
			|||
            res.update({'product_qty': prod.product_qty}) | 
				
			|||
        if 'mrp_sec_qty' in fields: | 
				
			|||
            res.update({'mrp_sec_qty': prod.mrp_sec_qty}) | 
				
			|||
        if 'mrp_sec_uom' in fields: | 
				
			|||
            res.update({'mrp_sec_uom': prod.mrp_sec_uom.id}) | 
				
			|||
        return res | 
				
			|||
 | 
				
			|||
    @api.model | 
				
			|||
    def _update_product_to_produce(self, production, qty, ratio, sec_uom): | 
				
			|||
        production_move = production.move_finished_ids.filtered(lambda x:x.product_id.id == production.product_id.id and x.state not in ('done', 'cancel')) | 
				
			|||
 | 
				
			|||
        if production_move: | 
				
			|||
            production_move.write({ | 
				
			|||
                'product_uom_qty': qty, | 
				
			|||
                'stock_move_sec_uom': sec_uom.id, | 
				
			|||
                'ratio_sec_uom': ratio, | 
				
			|||
                                   }) | 
				
			|||
        else: | 
				
			|||
            production_move = production._generate_finished_moves() | 
				
			|||
            production_move = production.move_finished_ids.filtered(lambda x : x.state not in ('done', 'cancel') and production.product_id.id == x.product_id.id) | 
				
			|||
            production_move.write({ | 
				
			|||
                'product_uom_qty': qty, | 
				
			|||
                'stock_move_sec_uom': sec_uom.id, | 
				
			|||
                'ratio_sec_uom': ratio, | 
				
			|||
                                   }) | 
				
			|||
 | 
				
			|||
    @api.multi | 
				
			|||
    def change_prod_qty(self): | 
				
			|||
        for wizard in self: | 
				
			|||
            production = wizard.mo_id | 
				
			|||
            produced = sum(production.move_finished_ids.mapped('quantity_done')) | 
				
			|||
            if wizard.product_qty < produced: | 
				
			|||
                raise UserError(_("You have already processed %d. Please input a quantity higher than %d ")%(produced, produced)) | 
				
			|||
            ratio = wizard.mrp_sec_qty/wizard.product_qty | 
				
			|||
            production.write({'product_qty': wizard.product_qty, | 
				
			|||
                              'mrp_sec_qty':  wizard.mrp_sec_qty, | 
				
			|||
                              'mrp_sec_uom': wizard.mrp_sec_uom.id, | 
				
			|||
                              'mrp_ratio_sec_uom': ratio | 
				
			|||
                              }) | 
				
			|||
            factor = production.product_uom_id._compute_quantity(production.product_qty - production.qty_produced, production.bom_id.product_uom_id) / production.bom_id.product_qty | 
				
			|||
            boms, lines = production.bom_id.explode(production.product_id, factor, picking_type=production.bom_id.picking_type_id) | 
				
			|||
            for line, line_data in lines: | 
				
			|||
                production._update_raw_move(line, line_data) | 
				
			|||
            operation_bom_qty = {} | 
				
			|||
            for bom, bom_data in boms: | 
				
			|||
                for operation in bom.routing_id.operation_ids: | 
				
			|||
                    operation_bom_qty[operation.id] = bom_data['qty'] | 
				
			|||
 | 
				
			|||
            self._update_product_to_produce(production, production.product_qty - production.qty_produced, | 
				
			|||
                                            ratio, production.mrp_sec_uom) | 
				
			|||
            moves = production.move_raw_ids.filtered(lambda x: x.state not in ('done', 'cancel')) | 
				
			|||
            moves.do_unreserve() | 
				
			|||
            moves.action_assign() | 
				
			|||
            for wo in production.workorder_ids: | 
				
			|||
                operation = wo.operation_id | 
				
			|||
                if operation_bom_qty.get(operation.id): | 
				
			|||
                    cycle_number = math.ceil(operation_bom_qty[operation.id] / operation.workcenter_id.capacity)  # TODO: float_round UP | 
				
			|||
                    wo.duration_expected = (operation.workcenter_id.time_start + | 
				
			|||
                                 operation.workcenter_id.time_stop + | 
				
			|||
                                 cycle_number * operation.time_cycle * 100.0 / operation.workcenter_id.time_efficiency) | 
				
			|||
                if production.product_id.tracking == 'serial': | 
				
			|||
                    quantity = 1.0 | 
				
			|||
                else: | 
				
			|||
                    quantity = wo.qty_production - wo.qty_produced | 
				
			|||
                    quantity = quantity if (quantity > 0) else 0 | 
				
			|||
                wo.qty_producing = quantity | 
				
			|||
                if wo.qty_produced < wo.qty_production and wo.state == 'done': | 
				
			|||
                    wo.state = 'progress' | 
				
			|||
                # assign moves; last operation receive all unassigned moves | 
				
			|||
                # TODO: following could be put in a function as it is similar as code in _workorders_create | 
				
			|||
                # TODO: only needed when creating new moves | 
				
			|||
                moves_raw = production.move_raw_ids.filtered(lambda move: move.operation_id == operation and move.state not in ('done', 'cancel')) | 
				
			|||
                if wo == production.workorder_ids[-1]: | 
				
			|||
                    moves_raw |= production.move_raw_ids.filtered(lambda move: not move.operation_id) | 
				
			|||
                moves_finished = production.move_finished_ids.filtered(lambda move: move.operation_id == operation) #TODO: code does nothing, unless maybe by_products? | 
				
			|||
                moves_raw.mapped('move_lot_ids').write({'workorder_id': wo.id}) | 
				
			|||
                (moves_finished + moves_raw).write({'workorder_id': wo.id}) | 
				
			|||
                if wo.move_raw_ids.filtered(lambda x: x.product_id.tracking != 'none') and not wo.active_move_lot_ids: | 
				
			|||
                    wo._generate_lot_ids() | 
				
			|||
        return {} | 
				
			|||
@ -0,0 +1,113 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
# | 
				
			|||
############################################################################## | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
#    Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | 
				
			|||
#    Author: Nikhil krishnan(<https://www.cybrosys.com>) | 
				
			|||
#    you can modify it under the terms of the GNU LESSER | 
				
			|||
#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			|||
#    of the Software or modified copies of the Software. | 
				
			|||
# | 
				
			|||
#    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 <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################## | 
				
			|||
 | 
				
			|||
from odoo import models, fields, api | 
				
			|||
import odoo.addons.decimal_precision as dp | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class MRPSecUOM(models.Model): | 
				
			|||
    _inherit = 'mrp.production' | 
				
			|||
 | 
				
			|||
    mrp_sec_qty = fields.Float('Secondary Quantity', readonly=True) | 
				
			|||
    mrp_sec_uom = fields.Many2one('product.uom', 'Secondary Unit') | 
				
			|||
    mrp_ratio_sec_uom = fields.Float('Ratio 2ndry Quantity', digits=dp.get_precision('Secondary UoM Ratio')) | 
				
			|||
 | 
				
			|||
    # Over write this fuction for add the new line of code: 'ratio_sec_uom': self.mrp_ratio_sec_uom, | 
				
			|||
    def _generate_finished_moves(self): | 
				
			|||
        move = self.env['stock.move'].create({ | 
				
			|||
            'name': self.name, | 
				
			|||
            'date': self.date_planned_start, | 
				
			|||
            'date_expected': self.date_planned_start, | 
				
			|||
            'product_id': self.product_id.id, | 
				
			|||
            'product_uom': self.product_uom_id.id, | 
				
			|||
            'product_uom_qty': self.product_qty, | 
				
			|||
            'ratio_sec_uom': self.mrp_ratio_sec_uom, | 
				
			|||
            'stock_move_sec_uom': self.mrp_sec_uom.id, | 
				
			|||
            'location_id': self.product_id.property_stock_production.id, | 
				
			|||
            'location_dest_id': self.location_dest_id.id, | 
				
			|||
            'move_dest_id': self.procurement_ids and self.procurement_ids[0].move_dest_id.id or False, | 
				
			|||
            'procurement_id': self.procurement_ids and self.procurement_ids[0].id or False, | 
				
			|||
            'company_id': self.company_id.id, | 
				
			|||
            'production_id': self.id, | 
				
			|||
            'origin': self.name, | 
				
			|||
            'group_id': self.procurement_group_id.id, | 
				
			|||
        }) | 
				
			|||
        move.action_confirm() | 
				
			|||
        return move | 
				
			|||
 | 
				
			|||
    @api.model | 
				
			|||
    def create(self, vals): | 
				
			|||
        if vals.get('mrp_sec_qty'): | 
				
			|||
            if vals.get('product_qty'): | 
				
			|||
                vals['mrp_ratio_sec_uom'] = float(vals['mrp_sec_qty'])/float(vals['product_qty']) | 
				
			|||
        return super(MRPSecUOM, self).create(vals) | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class StockMoveSecUOM(models.Model): | 
				
			|||
    _inherit = 'stock.move' | 
				
			|||
 | 
				
			|||
    stock_move_sec_qty_to_produce = fields.Float(string='To Produce (2ndry)', | 
				
			|||
                                                 compute='compute_stock_move_sec_qty_to_produce') | 
				
			|||
    stock_move_sec_uom = fields.Many2one('product.uom', string='2ndry UoM') | 
				
			|||
    stock_move_sec_qty_produced = fields.Float(string='Produced (2ndry)', | 
				
			|||
                                               compute='compute_stock_move_sec_qty_produced') | 
				
			|||
    ratio_sec_uom = fields.Float(string='Ratio 2ndry Quantity', digits=dp.get_precision('Secondary UoM Ratio')) | 
				
			|||
 | 
				
			|||
    def compute_stock_move_sec_qty_to_produce(self): | 
				
			|||
        for rec in self: | 
				
			|||
            rec.stock_move_sec_qty_to_produce = rec.ratio_sec_uom * rec.product_uom_qty | 
				
			|||
 | 
				
			|||
    def compute_stock_move_sec_qty_produced(self): | 
				
			|||
        for rec in self: | 
				
			|||
            rec.stock_move_sec_qty_produced = rec.ratio_sec_uom * rec.quantity_done | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class MRPProductProduceSecUOM(models.TransientModel): | 
				
			|||
    _inherit = 'mrp.product.produce' | 
				
			|||
 | 
				
			|||
    product_produce_sec_qty = fields.Float(string='2ndry Quantity') | 
				
			|||
    ratio_sec_uom = fields.Float(string='Ratio 2ndry Quantity', digits=dp.get_precision('Secondary UoM Ratio')) | 
				
			|||
    product_produce_sec_uom = fields.Many2one('product.uom', string='2ndry UoM') | 
				
			|||
 | 
				
			|||
    @api.model | 
				
			|||
    def default_get(self, fields): | 
				
			|||
        res = super(MRPProductProduceSecUOM, self).default_get(fields) | 
				
			|||
        if self._context and self._context.get('active_id'): | 
				
			|||
            production = self.env['mrp.production'].browse(self._context['active_id']) | 
				
			|||
            serial_finished = (production.product_id.tracking == 'serial') | 
				
			|||
            if serial_finished: | 
				
			|||
                sec_qty = production.mrp_ratio_sec_uom | 
				
			|||
            else: | 
				
			|||
 | 
				
			|||
                sec_qty = res['product_qty'] * production.mrp_ratio_sec_uom | 
				
			|||
 | 
				
			|||
            res['product_produce_sec_qty'] = sec_qty | 
				
			|||
            res['product_produce_sec_uom'] = production.mrp_sec_uom.id | 
				
			|||
            res['ratio_sec_uom'] = production.mrp_ratio_sec_uom | 
				
			|||
        return res | 
				
			|||
 | 
				
			|||
    @api.onchange('product_qty', 'product_produce_sec_qty') | 
				
			|||
    def onchange_product_qty(self): | 
				
			|||
        sec_qty = self.product_qty * self.ratio_sec_uom | 
				
			|||
        self.product_produce_sec_qty = sec_qty | 
				
			|||
| 
		 After Width: | Height: | Size: 24 KiB  | 
| 
		 After Width: | Height: | Size: 56 KiB  | 
| 
		 After Width: | Height: | Size: 29 KiB  | 
| 
		 After Width: | Height: | Size: 83 KiB  | 
| 
		 After Width: | Height: | Size: 63 KiB  | 
| 
		 After Width: | Height: | Size: 12 KiB  | 
| 
		 After Width: | Height: | Size: 50 KiB  | 
| 
		 After Width: | Height: | Size: 12 KiB  | 
@ -0,0 +1,135 @@ | 
				
			|||
<section class="oe_container"> | 
				
			|||
    <div class="oe_row oe_spaced"> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
            <h2 class="oe_slogan">MRP - Secondary UoM</h2> | 
				
			|||
            <h3 class="oe_slogan"> Manage the Manufacturing process with secondary UoM </h3> | 
				
			|||
            <h4 class="oe_slogan"><a href="https://www.cybrosys.com">Cybrosys Technologies</a> </h4> | 
				
			|||
        </div> | 
				
			|||
        <div class="oe_row oe_spaced"> | 
				
			|||
            <h4><p style="margin-left: 42px;">Major Features:</p></h4> | 
				
			|||
            <ul> | 
				
			|||
               <li style="list-style:none !important;"><span style="color:green;"> ★</span>  Allows to manage MRP with Secondary UoM.</li> | 
				
			|||
                <li style="list-style:none !important;"><span style="color:green;"> ★</span>   Products to Produce With Secondary UoM.</li> | 
				
			|||
                <li style="list-style:none !important;"><span style="color:green;"> ★</span>   Produced Products With Secondary UoM.</li> | 
				
			|||
            </ul> | 
				
			|||
        </div> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
            <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
                <img src="MRP Order.png"> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
            <p class="oe_mt32"> | 
				
			|||
                <p>This module allows you to cover planning, ordering, stocks and the manufacturing with a Secondary | 
				
			|||
            UoM. It handles the Products to Produce & Produced Products according to the production with Secondary UoM.</p> | 
				
			|||
            </p> | 
				
			|||
 | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
<section class="oe_container oe_dark"> | 
				
			|||
    <div class="oe_row oe_spaced"> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
            <p class="oe_mt32"> | 
				
			|||
                <p>As shown here, When we create a MO with a Primary and Secondary Product Quantities and UOMs. | 
				
			|||
            After saving, Order is in 'Confirmed' state. Same time we can see a record | 
				
			|||
            created in 'Finished Products' with secondary UoM. </p> | 
				
			|||
            </p> | 
				
			|||
        </div> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
            <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
                <img src="Finished Products.png"> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
<section class="oe_container"> | 
				
			|||
    <div class="oe_row oe_spaced"> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
            <p class="oe_mt32"> | 
				
			|||
                <p>We can change the Primary Quantity, Secondary Quantity and Secondary UoM at any time. There | 
				
			|||
                    will be an 'Update' Button to handle the same.</p> | 
				
			|||
        </div> | 
				
			|||
        <div class="col-md-6"> | 
				
			|||
            <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
                <img src="update.png"> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
        <div class="col-md-1"> | 
				
			|||
            <i style="font-size: 66px;color: #d81212;padding-top: 45px;" class="fa fa-long-arrow-right" aria-hidden="true"></i> | 
				
			|||
        </div> | 
				
			|||
        <div class="col-md-5"> | 
				
			|||
            <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
                <img src="change.png"> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
<section class="oe_container oe_dark"> | 
				
			|||
    <div class="oe_row oe_spaced"> | 
				
			|||
        <div class="oe_span6"> | 
				
			|||
            <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
                <img src="5.png"> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
        <div class="oe_span6"> | 
				
			|||
            <p class="oe_mt32"> | 
				
			|||
                <p>When we click on the 'Produce' button, The same window is appear with Secondary | 
				
			|||
            Quantity and UoM.</p> | 
				
			|||
            <p>If we Produce Partially or completely, It automatically calculate the Secondary quantity with same ratio.</p> | 
				
			|||
            </p> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
<section class="oe_container"> | 
				
			|||
    <div class="oe_row oe_spaced"> | 
				
			|||
        <div class="oe_span6"> | 
				
			|||
            <p class="oe_mt32"> | 
				
			|||
                <p>Update the Produced Products records.</p> | 
				
			|||
            </p> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="oe_span6"> | 
				
			|||
            <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
                <img src="partial production.png"> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
<section class="oe_container oe_dark"> | 
				
			|||
        <h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> | 
				
			|||
        <div class="oe_slogan" style="margin-top:10px !important;"> | 
				
			|||
            <div> | 
				
			|||
                <a  class="btn btn-primary btn-lg mt8" | 
				
			|||
                style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com"><i | 
				
			|||
                class="fa fa-envelope"></i> Email </a> <a | 
				
			|||
                class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" | 
				
			|||
                href="https://www.cybrosys.com/contact/"><i | 
				
			|||
                class="fa fa-phone"></i> Contact Us </a> <a | 
				
			|||
                class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" | 
				
			|||
                href="https://www.cybrosys.com/odoo-customization-and-installation/"><i | 
				
			|||
                class="fa fa-check-square"></i> Request Customization </a> | 
				
			|||
            </div> | 
				
			|||
            <br> | 
				
			|||
            <img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> | 
				
			|||
            <div> | 
				
			|||
              <a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></td> | 
				
			|||
              <a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></td> | 
				
			|||
              <a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></td> | 
				
			|||
              <a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></i></a></td> | 
				
			|||
              <a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;padding-left: 3px;"></i></a></td> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
| 
		 After Width: | Height: | Size: 34 KiB  | 
| 
		 After Width: | Height: | Size: 27 KiB  | 
@ -0,0 +1,64 @@ | 
				
			|||
<?xml version="1.0" encoding="utf-8"?> | 
				
			|||
<odoo> | 
				
			|||
    <data> | 
				
			|||
        <record id="mrp_production_sec_uom_form_view" model="ir.ui.view"> | 
				
			|||
            <field name="name">mrp.production.uom.form</field> | 
				
			|||
            <field name="model">mrp.production</field> | 
				
			|||
            <field name="inherit_id" ref="mrp.mrp_production_form_view"/> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <!--*********************IN MO Form****************************************--> | 
				
			|||
                <xpath expr="//field[@name='bom_id']" position="before"> | 
				
			|||
                    <label for="mrp_sec_qty" string="Product Secondary Quantity"/> | 
				
			|||
                    <div class="o_row"> | 
				
			|||
                        <field name="mrp_sec_qty" attrs="{'readonly': [('has_moves', '=', True)]}" style="width:94px;"/> | 
				
			|||
                        <field name="mrp_sec_uom" attrs="{'readonly': [('has_moves', '=', True)]}" style="width:100px;" groups="product.group_uom"/> | 
				
			|||
                        <field name="mrp_ratio_sec_uom" invisible="1"/> | 
				
			|||
                    </div> | 
				
			|||
                </xpath> | 
				
			|||
                <!--*********************STOCK MOVES IN MO****************************************--> | 
				
			|||
                <xpath expr="//notebook/page[2]/field[@name='move_finished_ids']/tree/field[@name='product_uom_qty']" position="after"> | 
				
			|||
                    <field name="stock_move_sec_qty_to_produce"/> | 
				
			|||
                </xpath> | 
				
			|||
                <xpath expr="//notebook/page[2]/field[@name='move_finished_ids']/tree/field[@name='quantity_done']" position="after"> | 
				
			|||
                    <field name="stock_move_sec_qty_produced"/> | 
				
			|||
                    <field name="stock_move_sec_uom" groups="product.group_uom"/> | 
				
			|||
                    <field name="ratio_sec_uom" invisible="1" /> | 
				
			|||
                </xpath> | 
				
			|||
                <!--******************************************************************************--> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <!--*********************Update wizard****************************************--> | 
				
			|||
        <record id="view_mrp_product_produce_wizard_sec_uom" model="ir.ui.view"> | 
				
			|||
            <field name="name">MRP Product Produce</field> | 
				
			|||
            <field name="model">mrp.product.produce</field> | 
				
			|||
            <field name="inherit_id" ref="mrp.view_mrp_product_produce_wizard"/> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <xpath expr="//field[@name='product_tracking']" position="before"> | 
				
			|||
                    <!--<div class="o_row">--> | 
				
			|||
                        <!--<field name="product_qty" class="oe_inline" colspan="2"/>--> | 
				
			|||
                        <!--<field name="product_uom_id" style="width:94px;" readonly="1"  groups="product.group_uom"/>--> | 
				
			|||
                    <!--</div>--> | 
				
			|||
                    <field name="ratio_sec_uom" invisible="1"/> | 
				
			|||
                    <field name="product_produce_sec_qty" /> | 
				
			|||
                    <field name="product_produce_sec_uom" options='{"no_open":True}' readonly="1" groups="product.group_uom"/> | 
				
			|||
                </xpath> | 
				
			|||
                <!--******************************************************************************--> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        <!--*********************Change Product Quantity And Secondary UoM****************************************--> | 
				
			|||
        <record id="view_change_production_mrp_sec_qty_wizard" model="ir.ui.view"> | 
				
			|||
            <field name="name">Change Product Qty</field> | 
				
			|||
            <field name="model">change.production.qty</field> | 
				
			|||
            <field name="inherit_id" ref="mrp.view_change_production_qty_wizard"/> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <xpath expr="//field[@name='product_qty']" position="after"> | 
				
			|||
                     <field name="mrp_sec_qty"/> | 
				
			|||
                     <field name="mrp_sec_uom" style="width:96px;" groups="product.group_uom"/> | 
				
			|||
                </xpath> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
    </data> | 
				
			|||
</odoo> | 
				
			|||