@ -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> |