@ -0,0 +1,41 @@ |
|||
======================== |
|||
POS Product Multiple UOM |
|||
======================== |
|||
|
|||
Added option to update the uom of products in pos. |
|||
|
|||
Installation |
|||
============ |
|||
|
|||
Just select it from available modules to install it, there is no need to extra installations. |
|||
|
|||
Usage |
|||
===== |
|||
|
|||
After installation, go to Inventory -> Settings |
|||
and enable the multiple uom option under the 'Products' section. |
|||
|
|||
Known issues / Roadmap |
|||
====================== |
|||
|
|||
* ... |
|||
|
|||
Bug Tracker |
|||
=========== |
|||
|
|||
Contact odoo@cybrosys.com |
|||
|
|||
Contributors |
|||
------------ |
|||
|
|||
* Version 10: Linto CT <linto@cybrosys.in> |
|||
* Version 10: Shereef PT <shereef@cybrosys.in> |
|||
* Version 12: Mehjabin Farsana <mehjabin@cybrosys.in> |
|||
* Version 13: Mehjabin Farsana <mehjabin@cybrosys.in> |
|||
|
|||
Maintainer |
|||
---------- |
|||
|
|||
This module is maintained by Cybrosys Technologies. |
|||
|
|||
For support and more information, please visit https://www.cybrosys.com. |
@ -0,0 +1,23 @@ |
|||
# -*- 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 . import models |
@ -0,0 +1,44 @@ |
|||
# -*- 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/>. |
|||
# |
|||
############################################################################## |
|||
{ |
|||
'name': 'POS Product Multiple UOM', |
|||
'version': '13.0.1.0.0', |
|||
'category': 'Point of Sale', |
|||
'summary': 'Multiple UOM for Products', |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'maintainer': 'Cybrosys Techno Solutions', |
|||
'website': 'https://www.cybrosys.com', |
|||
'depends': ['point_of_sale', 'stock'], |
|||
'data': [ |
|||
'views/pos_template.xml', |
|||
'views/pos_view_extended.xml', |
|||
], |
|||
'demo': [], |
|||
'qweb': ['static/src/xml/pos.xml'], |
|||
'images': ['static/description/banner.png', |
|||
'static/description/icon.png'], |
|||
'license': 'LGPL-3', |
|||
'installable': True, |
|||
'application': False, |
|||
'auto_install': False, |
|||
} |
@ -0,0 +1,10 @@ |
|||
## Module <product_multi_uom_pos> |
|||
|
|||
#### 15.02.2020 |
|||
#### Version 13.0.1.0.0 |
|||
#### Migration |
|||
Migration Of POS Product Multiple UOM |
|||
|
|||
|
|||
|
|||
|
@ -0,0 +1,23 @@ |
|||
# -*- 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 . import pos_orderline |
@ -0,0 +1,133 @@ |
|||
# -*- 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 _ |
|||
from odoo.tools import float_is_zero |
|||
from odoo import models, fields, api |
|||
|
|||
|
|||
class PosOrderLinesExtended(models.Model): |
|||
_inherit = 'pos.order.line' |
|||
|
|||
uom_id = fields.Many2one('uom.uom', string="UOM") |
|||
|
|||
@api.model |
|||
def create(self, values): |
|||
"""updating uom to orderlines""" |
|||
try: |
|||
if values.get('uom_id'): |
|||
values['uom_id'] = values['uom_id'][0] |
|||
except Exception: |
|||
values['uom_id'] = None |
|||
pass |
|||
res = super(PosOrderLinesExtended, self).create(values) |
|||
return res |
|||
|
|||
|
|||
class PosOrderExtended(models.Model): |
|||
_inherit = 'pos.order' |
|||
|
|||
# overwriting this function because, we need to set the uom id based on the unit |
|||
# in the orderline instead of product uom, at the time of creating the stock moves |
|||
def create_picking(self): |
|||
"""Create a picking for each order and validate it.""" |
|||
Picking = self.env['stock.picking'] |
|||
Move = self.env['stock.move'] |
|||
StockWarehouse = self.env['stock.warehouse'] |
|||
for order in self: |
|||
if not order.lines.filtered(lambda l: l.product_id.type in ['product', 'consu']): |
|||
continue |
|||
address = order.partner_id.address_get(['delivery']) or {} |
|||
picking_type = order.picking_type_id |
|||
return_pick_type = order.picking_type_id.return_picking_type_id or order.picking_type_id |
|||
order_picking = Picking |
|||
return_picking = Picking |
|||
moves = Move |
|||
source_loc = picking_type.default_location_src_id |
|||
location_id = order.location_id.id |
|||
if order.partner_id: |
|||
destination_id = order.partner_id.property_stock_customer.id |
|||
else: |
|||
if (not picking_type) or (not picking_type.default_location_dest_id): |
|||
customerloc, supplierloc = StockWarehouse._get_partner_locations() |
|||
destination_id = customerloc.id |
|||
else: |
|||
destination_id = picking_type.default_location_dest_id.id |
|||
|
|||
if picking_type: |
|||
message = _("This transfer has been created from the point of sale session: <a href=# data-oe-model=pos.order data-oe-id=%d>%s</a>") % (order.id, order.name) |
|||
picking_vals = { |
|||
'origin': order.name, |
|||
'partner_id': address.get('delivery', False), |
|||
'date_done': order.date_order, |
|||
'picking_type_id': picking_type.id, |
|||
'company_id': order.company_id.id, |
|||
'move_type': 'direct', |
|||
'note': order.note or "", |
|||
'location_id': source_loc.id, |
|||
'location_dest_id': destination_id, |
|||
} |
|||
pos_qty = any([x.qty > 0 for x in order.lines if x.product_id.type in ['product', 'consu']]) |
|||
if pos_qty: |
|||
order_picking = Picking.create(picking_vals.copy()) |
|||
order_picking.message_post(body=message) |
|||
neg_qty = any([x.qty < 0 for x in order.lines if x.product_id.type in ['product', 'consu']]) |
|||
if neg_qty: |
|||
return_vals = picking_vals.copy() |
|||
return_vals.update({ |
|||
'location_id': source_loc.id, |
|||
'location_dest_id': return_pick_type != picking_type and return_pick_type.default_location_dest_id.id or source_loc.id, |
|||
'picking_type_id': return_pick_type.id |
|||
}) |
|||
return_picking = Picking.create(return_vals) |
|||
return_picking.message_post(body=message) |
|||
|
|||
for line in order.lines.filtered(lambda l: l.product_id.type in ['product', 'consu'] and not float_is_zero(l.qty, precision_rounding=l.product_id.uom_id.rounding)): |
|||
moves |= Move.create({ |
|||
'name': line.name, |
|||
'product_uom': line.uom_id.id if line.uom_id.id else line.product_id.uom_id.id, |
|||
'picking_id': order_picking.id if line.qty >= 0 else return_picking.id, |
|||
'picking_type_id': picking_type.id if line.qty >= 0 else return_pick_type.id, |
|||
'product_id': line.product_id.id, |
|||
'product_uom_qty': abs(line.qty), |
|||
'state': 'draft', |
|||
'location_id': source_loc.id if line.qty >= 0 else destination_id, |
|||
'location_dest_id': destination_id if line.qty >= 0 else return_pick_type != picking_type and return_pick_type.default_location_dest_id.id or source_loc.id, |
|||
}) |
|||
# prefer associating the regular order picking, not the return |
|||
order.write({'picking_id': order_picking.id or return_picking.id}) |
|||
|
|||
if return_picking: |
|||
order._force_picking_done(return_picking) |
|||
if order_picking: |
|||
order._force_picking_done(order_picking) |
|||
|
|||
# when the pos.config has no picking_type_id set only the moves will be created |
|||
if moves and not return_picking and not order_picking: |
|||
tracked_moves = moves.filtered(lambda move: move.product_id.tracking != 'none') |
|||
untracked_moves = moves - tracked_moves |
|||
tracked_moves.action_confirm() |
|||
untracked_moves.action_assign() |
|||
moves.filtered(lambda m: m.state in ['confirmed', 'waiting']).force_assign() |
|||
moves.filtered(lambda m: m.product_id.tracking == 'none').action_done() |
|||
|
|||
return True |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 69 KiB |
After Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 136 KiB |
After Width: | Height: | Size: 129 KiB |
After Width: | Height: | Size: 90 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 130 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 68 KiB |
@ -0,0 +1,304 @@ |
|||
<div class="row" style="margin: 0;position: relative;color: #000;background-position: center;background: #ffffff;border-bottom: 1px solid #e4e4e4;text-align: center; margin: auto; display: flex;justify-content: center;"> <a href="https://www.cybrosys.com/" target="_blank"><img src="images/cybrosys.png" style=" width: 293px; padding: 1rem 0rem; margin: auto" alt="cybrosys-logo"></a> </div> |
|||
<div class="row" style="margin:75px 0;position: relative;color: #000;background-position: center;background: #ffffff;border-bottom: 1px solid #e4e4e4; padding-bottom: 30px;"> |
|||
<div class="col-md-7 col-sm-12 col-xs-12" style="padding: 0px"> |
|||
<div style=" margin: 0 0 0px;padding: 20px 0 10;font-size: 23px;line-height: 35px;font-weight: 400;color: #000;border-top: 1px solid rgba(255,255,255,0.1);border-bottom: 1px solid rgba(255,255,255,0.11);text-align: left;"> |
|||
<h1 style="font-size: 39px;font-weight: 600;margin: 0px !important;">POS Product Multiple UOM</h1> |
|||
<h3 style="font-size: 21px;margin-top: 8px;position: relative;">Update Product Unit Of Measure</h3> |
|||
</div> |
|||
<h2 style="font-weight: 600;font-size: 1.8rem;margin-top: 15px;">Key Highlights</h2> |
|||
<ul style=" padding: 0 1px; list-style: none; "> |
|||
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">Multiple UOM for products in POS.</li> |
|||
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">Select Unit of measure popup.</li> |
|||
<li style="display: flex;align-items: center;padding: 8px 0;font-size: 18px;"><img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">Updated UOM to order lines.</li> |
|||
</ul> |
|||
</div> |
|||
<div class="col-md-5 col-sm-12 col-xs-12"> <img src="images/product_uom.png" class="img-responsive" alt=""> </div> |
|||
</div> |
|||
<div> |
|||
<section class="oe_container" style="padding: 1rem 0rem 1rem; background-color: #ffffff !important;"> |
|||
<div class="row py-4 px-3"> |
|||
<div class="w-100" style="padding-top:30px;padding-bottom:45px;border-radius: 10px;"> |
|||
<ul role="tablist" class="nav nav-pills justify-content-center" data-tabs="tabs" id="pills-tab" style="border: none;background: unset;"> |
|||
<li class="nav-item mr-1 mb-3" style="font-size: 1.05rem;font-weight: 400;transition: all .15s ease;color: #d31c22;background-color: #d31c22;box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);border: 0;font-family: 'Open Sans',sans-serif;width: 140px;border-radius: 0.30rem;"> <a id="pills-home-tab" data-toggle="pill" href="#pills-home" role="tab" aria-controls="pills-home" aria-selected="true" class="nav-link active show" style="color: #000000;line-height: 33px;border: 0;border-radius: .25rem;font-weight: 400;text-align: center; |
|||
color: #fff;">Overview </a> </li> |
|||
<li class="nav-item mr-1 mb-3" style="font-size: 1.05rem;font-weight: 400;transition: all .15s ease;color: #d31c22;background-color: #d31c22;box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);border: 0;font-family: 'Open Sans',sans-serif;width: 140px;border-radius: 0.30rem;"> <a id="pills-home-tab" data-toggle="pill" href="#pills-home1" role="tab" aria-controls="pills-home" aria-selected="true" class="nav-link " style="color: #000000;line-height: 33px;border: 0;border-radius: .25rem;font-weight: 400; text-align: center; |
|||
color: #fff;" >Features </a> </li> |
|||
<li class="nav-item mr-1 mb-3" style="font-size: 1.05rem;font-weight: 400;transition: all .15s ease;color: #ffffff;background-color: #d31c22;box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);border: 0;font-family: 'Open Sans',sans-serif;width: 140px;border-radius: 0.30rem;"> <a class="nav-link" id="pills-profile-tab" data-toggle="pill" href="#pills-profile" role="tab" aria-controls="pills-profile" aria-selected="false" style="color: #000000;line-height: 33px;border: 0;border-radius: .25rem;font-weight: 400; text-align: center; |
|||
color: #fff;">Screenshots </a> </li> |
|||
</ul> |
|||
<div class="tab-content" id="pills-tabContent" |
|||
style="padding-top: 30px; padding-bottom: 30px; padding: 30px;"> |
|||
<div class="px-3 pt-1 tab-pane fade active show" id="pills-home" role="tabpanel" aria-labelledby=" |
|||
pills-home-tab"> |
|||
<!-- Overview--> |
|||
<h2 style="font-weight: 600;text-align: center;width: 100%;">Overview</h2> |
|||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;"> |
|||
<h3 class="oe_slogan" style="text-align: center;font-size: 19px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 31px;font-weight: 400;letter-spacing: .5px;margin-bottom: 21px;"> |
|||
By default, Odoo does not provide the option to update the unit of measure of the products we selected in the Point of Sale. The Products can only be sold in its default unit. This module provides an option to update the UOM of the products in the Point of Sale. The stock will also be updated in the new UOM. |
|||
</h3> |
|||
</div> |
|||
<div class="px-3 pt-1 tab-pane fade " id="pills-home1" role="tabpanel" aria-labelledby=" |
|||
pills-home-tab"> |
|||
<!-- feature tab--> |
|||
<h2 style="font-weight: 600;text-align: center;width: 100%;">POS Product Multiple UOM</h2> |
|||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;"> |
|||
<ul> |
|||
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;"> |
|||
<img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">Multiple UOM for products in POS. |
|||
</li> |
|||
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;"> |
|||
<img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">Select Unit of measure popup. |
|||
</li> |
|||
<li class="mb8" style="font-family: Roboto;color: #000;list-style-type: square;font-size: 19px;line-height: 50px; background-color: #3a34380d;padding-left: 20px;border-radius: 7px;list-style: none;"> |
|||
<img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">Updated uom to orderlines. |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
<!-- Screenshot tab--> |
|||
<div class="px-3 tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-tab" > |
|||
<div class="tab-pane"> |
|||
<h2 style="font-weight: 600;text-align: center;width: 100%;">Screenshots</h2> |
|||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;"> |
|||
<div> |
|||
<section class="oe_container"> |
|||
<div id="demo" class="row carousel slide mb32" data-ride="carousel"> |
|||
<div class="carousel-inner"> |
|||
<div class="carousel-item active" style="min-height: 0px;"> |
|||
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16" style="float: left;"> |
|||
<h3 class="alert" style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;"> <img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check">Modify Unit of Measure Button in POS.</h3> |
|||
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/modify_uom.png"> </div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="carousel-item" style="min-height: 0px;"> |
|||
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16" style="float: left;"> |
|||
<h3 class="alert" style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;"> <img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check"> This button will open a wizard which will show all the UOMs associated with the selected product.</h3> |
|||
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/available_uoms.png"> </div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="carousel-item" style="min-height: 0px;"> |
|||
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16" style="float: left;"> |
|||
<h3 class="alert" style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px;"> <img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check"> UOMs available for this product can be selected and updated.</h3> |
|||
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/uom_updated.png"> </div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="carousel-item" style="min-height: 0px;"> |
|||
<div class="col-xs-12 col-sm-12 col-md-12 mb16 mt16" style="float: left;"> |
|||
<h3 class="mb32 alert" style="font-weight:400;color: #091E42;background: #fff;text-align: left;border-radius: 0; font-size: 18px; "> <img src="images/checked.png" style=" width: 22px; margin-right: 6px; " alt="check"> Updated Unit of Measure in POS Orderlines.</h3> |
|||
<div style=""> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/orderline.png"> </div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<a class="carousel-control-prev" href="#demo" data-slide="prev" style="left:-25px;width: 35px;color: #000;"> <span class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span> </a> <a class="carousel-control-next" href="#demo" data-slide="next" style="right:-25px;width: 35px;color: #000;"> <span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span> </a> |
|||
</div> |
|||
</section> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="px-3 pt-1 tab-pane fade" id="pills-video" role="tabpanel" aria-labelledby=" |
|||
pills-home-tab"> |
|||
|
|||
<!-- faq tab--> |
|||
<div class="px-2 px-lg-4 pt-3 tab-pane fade" id="pills-contact" role="tabpanel" aria-labelledby="pills-contact-tab"> |
|||
<ul class="list-unstyled"> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="padding: 2rem 3rem 1rem;"> |
|||
<h2 style="font-weight: 600;text-align: center;margin-bottom: 25px;width: 100%;">Suggested Products</h2> |
|||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;"> |
|||
<div id="demo1" class="row carousel slide" data-ride="carousel"> |
|||
<!-- The slideshow --> |
|||
<div class="carousel-inner"> |
|||
<div class="carousel-item active" style="min-height: 0px;"> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;"> |
|||
<a href="https://apps.odoo.com/apps/modules/13.0/product_return_pos/" target="_blank"> |
|||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/banner_product_return.png"> </div> |
|||
</a> |
|||
</div> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;"> |
|||
<a href="https://apps.odoo.com/apps/modules/13.0/vouchers_pos/" target="_blank"> |
|||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/banner_vouchers_pos.png"> </div> |
|||
</a> |
|||
</div> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;"> |
|||
<a href="https://apps.odoo.com/apps/modules/13.0/pos_order_line_image/" target="_blank"> |
|||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/banner_orderline_images.png"> </div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="carousel-item" style="min-height: 0px;"> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;"> |
|||
<a href="https://apps.odoo.com/apps/modules/13.0/discount_limit/" target="_blank"> |
|||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/banner_discount_limit.png"> </div> |
|||
</a> |
|||
</div> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;"> |
|||
<a href="https://apps.odoo.com/apps/modules/13.0/pos_traceability_validation/" target="_blank"> |
|||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/banner_traceability.jpg"> </div> |
|||
</a> |
|||
</div> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;"> |
|||
<a href="https://apps.odoo.com/apps/modules/13.0/pos_product_creation/" target="_blank"> |
|||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;"> <img class="img img-responsive center-block" style="border-top-left-radius: 10px;border-top-right-radius: 10px;" src="images/banner_product_creation.png"> </div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- Left and right controls --> |
|||
<a class="carousel-control-prev" href="#demo1" data-slide="prev" style="left:-25px;width: 35px;color: #000;"> <span class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span> </a> <a class="carousel-control-next" href="#demo1" data-slide="next" style="right:-25px;width: 35px;color: #000;"> <span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span> </a> |
|||
</div> |
|||
</section> |
|||
<section class="row" style="padding: 2rem 3rem 1rem;margin:0px"> |
|||
<h2 style="font-weight: 600;margin-bottom: 20px;text-align: center;width: 100%;">Our Service</h2> |
|||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;"> |
|||
<div class="row" style=" display: flex; justify-content: center; flex-wrap: wrap;width: 100%; "> |
|||
<!-- <div style="display:flex;padding-top: 20px;justify-content: space-between;"> --> |
|||
<div class="col-md-2 col-sm-6 col-xs-12"> |
|||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> <a href="https://www.cybrosys.com/odoo-customization-and-installation/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-customization.png" style="width: 100%;border-radius: 100%;"/> </a> </div> |
|||
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> <a href="https://www.cybrosys.com/odoo-customization-and-installation/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Odoo Customization </a> </h3> |
|||
</div> |
|||
<div class="col-md-2 col-sm-6 col-xs-12"> |
|||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> <a href="https://www.cybrosys.com/odoo-erp-implementation/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-erp-implementation.png" style="width: 100%;border-radius: 100%;"/> </a> </div> |
|||
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> <a href="https://www.cybrosys.com/odoo-erp-implementation/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Odoo Implementation </a> </h3> |
|||
</div> |
|||
<div class="col-md-2 col-sm-6 col-xs-12"> |
|||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> <a href="https://www.cybrosys.com/odoo-erp-integration/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-erp-integration.png" style="width: 100%;border-radius: 100%;"/> </a> </div> |
|||
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> <a href="https://www.cybrosys.com/odoo-erp-integration/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Odoo Integration </a> </h3> |
|||
</div> |
|||
<div class="col-md-2 col-sm-6 col-xs-12"> |
|||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> <a href="https://www.cybrosys.com/odoo-erp-support/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-erp-support.png" style="width: 100%;border-radius: 100%;"/> </a> </div> |
|||
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> <a href="https://www.cybrosys.com/odoo-erp-support/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Odoo Support</a> </h3> |
|||
</div> |
|||
<div class="col-md-2 col-sm-6 col-xs-12"> |
|||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> <a href="https://www.cybrosys.com/hire-odoo-developer/" target="_blank"> <img src="https://www.cybrosys.com/images/hire-odoo-developer.png" style="width: 100%;border-radius: 100%;"/> </a> </div> |
|||
<h3 class="oe_slogan" style="font-weight: 800;text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> <a href="https://www.cybrosys.com/hire-odoo-developer/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Hire Odoo Developers</a> </h3> |
|||
</a> |
|||
</div> |
|||
<!-- </div> --> |
|||
</div> |
|||
</section> |
|||
<section class="row" style="padding: 2rem 3rem 1rem;margin:0px"> |
|||
<div class="row" style="margin: 0"> |
|||
<h2 style="font-weight: 600;margin-bottom: 20px;text-align: center;width: 100%;">Our Industries</h2> |
|||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;"> |
|||
<!-- <div style="display:flex;justify-content: space-between;flex-wrap:wrap;"> --> |
|||
<div class="row" style="width: 100%"> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/best-trading-erp/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-1.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;"> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/best-trading-erp/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;"> Trading </a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;"> Easily procure and sell your products. </h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/manufacturing-erp-software/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-2.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;" style=" margin-bottom: 10px; "> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/manufacturing-erp-software/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;"> Manufacturing</a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;font-family: 'Montserrat',sans-serif;"> Plan, track and schedule your operations. </h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/restaurant-management/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-3.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;"> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/restaurant-management/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;"> Restaurant</a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;font-family: 'Montserrat',sans-serif;"> Run your bar or restaurant methodical. </h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/pos/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-4.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;"> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/pos/" target="_blank" style="list-style: none; color:#000; text-decoration: none;font-family: 'Montserrat',sans-serif;"> POS</a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;font-family: 'Montserrat',sans-serif;"> Easy configuring and convivial selling. </h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/ecommerce-website/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-5.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;"> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 0px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/ecommerce-website/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> E-commerce & Website</a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;"> Mobile friendly, awe-inspiring product pages. </h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/hotel-management-erp/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-6.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;"> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/hotel-management-erp/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Hotel Management</a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;"> An all-inclusive hotel management application. </h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/education-erp-software/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-7.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;"> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/education-erp-software/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Education</a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;"> A Collaborative platform for educational management. </h3> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 col-xs-12" style=" margin-bottom: 10px; "> |
|||
<div > |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> <a href="https://www.cybrosys.com/odoo/industries/service-management/" target="_blank"> <img src="https://www.cybrosys.com/images/odoo-index-industry-8.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> </a> </div> |
|||
</div> |
|||
<div style="width:70%;float:left;"> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:800;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> <a href="https://www.cybrosys.com/odoo/industries/service-management/" target="_blank" style="list-style: none; color:#000; text-decoration: none; font-family: 'Montserrat',sans-serif;"> Service Management</a> </h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 12px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px; font-family: 'Montserrat',sans-serif;"> Keep track of services and invoice accordingly. </h3> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="padding: 0% 0% 6% 0%;"> |
|||
<center> |
|||
<div class="col-md-12" style="margin: auto !important; |
|||
width: 70%; |
|||
padding: 30px;"> |
|||
<h2 style="font-weight: 600;text-align: center;width: 100%;">Need Any Help?</h2> |
|||
<hr style="margin-top: 0px;margin-bottom: 2%;border: 0;text-align: center;border-top: 3px solid #d21c22;width: 5%;"> |
|||
<h4 style="font-size:16px;"> If you have anything to share with us based on your use of this module, please let us know. We are ready to offer our support. </h4> |
|||
<div class="col-md-6" style="float:left; padding:20px;"> |
|||
<h4><i class="fa fa-envelope"></i>Email us </h4> |
|||
<p>odoo@cybrosys.com / info@cybrosys.com</p> |
|||
</div> |
|||
<div class="col-md-6" style="float:left; padding:20px;"> |
|||
<h4><i class="fa fa-phone"></i> Contact Us </h4> |
|||
<a href="https://www.cybrosys.com/contact/" target="_blank"> www.cybrosys.com</a> |
|||
</div> |
|||
</div> |
|||
</center> |
|||
</section> |
|||
<section class="oe_container" style="padding: 0% 0% 6% 0%;"> |
|||
<div class="oe_slogan" style="margin-bottom: 0px;"> |
|||
<div style=" display: flex; justify-content: center; flex-wrap: wrap; "> |
|||
</div> |
|||
<br> |
|||
<img src="https://www.cybrosys.com/images/logo.png" style="width: 190px; margin-bottom: 25px;margin-top: 30px;" class="center-block"> |
|||
<div style=" display: flex; justify-content: center; flex-wrap: wrap; "> <a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></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;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></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; height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></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;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a> |
|||
</td> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
</div> |
@ -0,0 +1,22 @@ |
|||
.button-multi-uom{ |
|||
width: 100%; |
|||
height: 32px; |
|||
font-size: 16px; |
|||
text-align: center; |
|||
border-radius: 5px; |
|||
} |
|||
.multi-uom-span { |
|||
width: 50%; |
|||
border: 1px solid; |
|||
/* vertical-align: middle; */ |
|||
align-self: center; |
|||
padding: 5px 10px; |
|||
background-color: #6EC89B; |
|||
color: #fff; |
|||
LINE-HEIGHT: 2.5; |
|||
transition: all 150ms linear; |
|||
} |
|||
|
|||
.popup-product-creation{ |
|||
height: 50% !important; |
|||
} |
@ -0,0 +1,267 @@ |
|||
odoo.define('product_multi_uom_pos.multi_uom',function(require) { |
|||
"use strict"; |
|||
|
|||
var gui = require('point_of_sale.gui'); |
|||
var PosBaseWidget = require('point_of_sale.BaseWidget'); |
|||
var core = require('web.core'); |
|||
var models = require('point_of_sale.models'); |
|||
var OrderlineSuper = models.Orderline; |
|||
var pos_screens = require('point_of_sale.screens'); |
|||
var field_utils = require('web.field_utils'); |
|||
|
|||
var utils = require('web.utils'); |
|||
|
|||
var round_pr = utils.round_precision; |
|||
|
|||
var MultiUomWidget = PosBaseWidget.extend({ |
|||
template: 'MultiUomWidget', |
|||
init: function(parent, args) { |
|||
this._super(parent, args); |
|||
this.options = {}; |
|||
this.uom_list = []; |
|||
}, |
|||
events: { |
|||
'click .button.cancel': 'click_cancel', |
|||
'click .button.confirm': 'click_confirm', |
|||
}, |
|||
/*function returns all the uom s in the specified category*/ |
|||
get_units_by_category: function(uom_list, categ_id){ |
|||
var uom_by_categ = [] |
|||
for (var uom in uom_list){ |
|||
if(uom_list[uom].category_id[0] == categ_id[0]){ |
|||
uom_by_categ.push(uom_list[uom]); |
|||
} |
|||
} |
|||
return uom_by_categ; |
|||
}, |
|||
/*Find the base price(price of the product for reference unit)*/ |
|||
find_reference_unit_price: function(product, product_uom){ |
|||
if(product_uom.uom_type == 'reference'){ |
|||
return product.lst_price; |
|||
} |
|||
else if(product_uom.uom_type == 'smaller'){ |
|||
return (product.lst_price * product_uom.factor); |
|||
} |
|||
else if(product_uom.uom_type == 'bigger'){ |
|||
return (product.lst_price / product_uom.factor_inv); |
|||
} |
|||
}, |
|||
/*finds the latest price for the product based on the new uom selected*/ |
|||
get_latest_price: function(uom, product){ |
|||
var uom_by_category = this.get_units_by_category(this.pos.units_by_id, uom.category_id); |
|||
var product_uom = this.pos.units_by_id[product.uom_id[0]]; |
|||
var ref_price = this.find_reference_unit_price(product, product_uom); |
|||
var ref_price = product.lst_price; |
|||
var ref_unit = null; |
|||
for (var i in uom_by_category){ |
|||
if(uom_by_category[i].uom_type == 'reference'){ |
|||
ref_unit = uom_by_category[i]; |
|||
break; |
|||
} |
|||
} |
|||
if(ref_unit){ |
|||
if(uom.uom_type == 'bigger'){ |
|||
console.log("bigggg"); |
|||
console.log("ref_price * uom.factor_inv",ref_price * uom.factor_inv); |
|||
|
|||
return (ref_price * uom.factor_inv); |
|||
} |
|||
else if(uom.uom_type == 'smaller'){ |
|||
console.log("smalll"); |
|||
console.log("small",(ref_price / uom.factor_inv)); |
|||
|
|||
return (ref_price / uom.factor); |
|||
} |
|||
else if(uom.uom_type == 'reference'){ |
|||
console.log("refernce"); |
|||
console.log("ref_price",ref_price); |
|||
return ref_price; |
|||
} |
|||
} |
|||
return product.lst_price; |
|||
}, |
|||
/*Rendering the wizard*/ |
|||
show: function(options){ |
|||
options = options || {}; |
|||
var current_uom = this.pos.units_by_id[options.uom_list[0]]; |
|||
var uom_list = this.pos.units_by_id; |
|||
var uom_by_category = this.get_units_by_category(uom_list, current_uom.category_id); |
|||
this.uom_list = uom_by_category; |
|||
this.current_uom = options.uom_list[0]; |
|||
this.renderElement(); |
|||
}, |
|||
close: function(){ |
|||
if (this.pos.barcode_reader) { |
|||
this.pos.barcode_reader.restore_callbacks(); |
|||
} |
|||
}, |
|||
click_confirm: function(){ |
|||
var self = this; |
|||
var uom = parseInt(this.$('.uom').val()); |
|||
var order = self.pos.get_order(); |
|||
var orderline = order.get_selected_orderline(); |
|||
var selected_uom = this.pos.units_by_id[uom]; |
|||
orderline.uom_id = []; |
|||
orderline.uom_id[0] = uom; |
|||
orderline.uom_id[1] = selected_uom.display_name; |
|||
|
|||
/*Updating the orderlines*/ |
|||
order.remove_orderline(orderline); |
|||
order.add_orderline(orderline); |
|||
var latest_price = this.get_latest_price(selected_uom, orderline.product); |
|||
order.get_selected_orderline().set_unit_price(latest_price); |
|||
orderline.lst_price = latest_price; |
|||
|
|||
this.gui.close_popup(); |
|||
return; |
|||
|
|||
}, |
|||
click_cancel: function(){ |
|||
this.gui.close_popup(); |
|||
}, |
|||
}); |
|||
gui.define_popup({name:'multi_uom_screen', widget: MultiUomWidget}); |
|||
|
|||
|
|||
|
|||
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(); |
|||
} |
|||
} |
|||
}, |
|||
}); |
|||
|
|||
|
|||
|
|||
|
|||
models.Orderline = models.Orderline.extend({ |
|||
/*Adding uom_id to orderline*/ |
|||
initialize: function(attr,options){ |
|||
OrderlineSuper.prototype.initialize.call(this, attr, options); |
|||
this.uom_id = this ? this.product.uom_id: []; |
|||
}, |
|||
export_as_JSON: function() { |
|||
var result = OrderlineSuper.prototype.export_as_JSON.call(this); |
|||
console.log("result",result); |
|||
result.uom_id = this.uom_id; |
|||
return result; |
|||
}, |
|||
/*this function now will return the uom_id of the orderline , |
|||
instead of the default uom_id of the product*/ |
|||
get_unit: function(){ |
|||
var res = OrderlineSuper.prototype.get_unit.call(this); |
|||
|
|||
|
|||
var unit_id = this.uom_id; |
|||
|
|||
if(!unit_id){ |
|||
return res; |
|||
} |
|||
unit_id = unit_id[0]; |
|||
if(!this.pos){ |
|||
return undefined; |
|||
} |
|||
return this.pos.units_by_id[unit_id]; |
|||
}, |
|||
|
|||
set_quantity: function(quantity, keep_price) { |
|||
OrderlineSuper.prototype.set_quantity.call(this, quantity, keep_price); |
|||
this.order.assert_editable(); |
|||
if(quantity === 'remove'){ |
|||
this.order.remove_orderline(this); |
|||
return; |
|||
}else{ |
|||
var quant = parseFloat(quantity) || 0; |
|||
var unit = this.get_unit(); |
|||
if(unit){ |
|||
if (unit.rounding) { |
|||
var decimals = this.pos.dp['Product Unit of Measure']; |
|||
var rounding = Math.max(unit.rounding, Math.pow(10, -decimals)); |
|||
this.quantity = round_pr(quant, rounding); |
|||
this.quantityStr = field_utils.format.float(this.quantity, {digits: [69, decimals]}); |
|||
} else { |
|||
this.quantity = round_pr(quant, 1); |
|||
this.quantityStr = this.quantity.toFixed(0); |
|||
} |
|||
}else{ |
|||
this.quantity = quant; |
|||
this.quantityStr = '' + this.quantity; |
|||
} |
|||
} |
|||
// just like in sale.order changing the quantity will recompute the unit price
|
|||
if(! keep_price && ! this.price_manually_set){ |
|||
var self = this; |
|||
var order = self.pos.get_order(); |
|||
var orderline = order.get_selected_orderline(); |
|||
if (orderline){ |
|||
var uom = orderline.uom_id[0]; |
|||
var lst_uom = this.pos.units_by_id[uom]; |
|||
var ref_qty = orderline.quantity; |
|||
var ref_price = orderline.product.lst_price; |
|||
if (lst_uom.uom_type == 'bigger') { |
|||
this.set_unit_price(ref_price * lst_uom.factor_inv); |
|||
this.order.fix_tax_included_price(this); |
|||
} |
|||
else if (lst_uom.uom_type == 'smaller') { |
|||
this.set_unit_price(ref_price / lst_uom.factor); |
|||
this.order.fix_tax_included_price(this); |
|||
} |
|||
else { |
|||
this.set_unit_price(ref_price); |
|||
this.order.fix_tax_included_price(this); |
|||
} |
|||
|
|||
} |
|||
else{ |
|||
this.set_unit_price(this.product.get_price(this.order.pricelist, this.get_quantity())); |
|||
this.order.fix_tax_included_price(this); |
|||
} |
|||
|
|||
} |
|||
this.trigger('change', this); |
|||
}, |
|||
|
|||
}); |
|||
|
|||
pos_screens.ActionpadWidget.include({ |
|||
/*opening the wizard on button click*/ |
|||
renderElement: function() { |
|||
this._super(); |
|||
var self = this; |
|||
this.$('.multi-uom-span').click(function(){ |
|||
var orderline = self.pos.get_order().get_selected_orderline(); |
|||
var options = { |
|||
'uom_list': orderline.product.uom_id |
|||
}; |
|||
self.gui.show_popup('multi_uom_screen', options); |
|||
}); |
|||
} |
|||
}); |
|||
|
|||
}); |
@ -0,0 +1,39 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<templates id="template" xml:space="preserve"> |
|||
<t t-extend="ActionpadWidget"> |
|||
<t t-jquery="div.actionpad" t-operation="before"> |
|||
<div class="button-multi-uom"> |
|||
<span class="multi-uom-span"> |
|||
Modify Unit of Measure |
|||
</span> |
|||
</div> |
|||
</t> |
|||
</t> |
|||
|
|||
<t t-name="MultiUomWidget"> |
|||
<div class="modal-dialog multi-uom"> |
|||
<div class="popup popup-product-creation"> |
|||
<p class="title">Select Unit of Measure</p> |
|||
<div> |
|||
<select class="uom" style="width:35%;height:30px;border-radius:5px;"> |
|||
<t t-foreach='widget.uom_list' t-as='uom'> |
|||
<option t-att-value='uom.id' |
|||
t-att-selected="((uom.id == widget.current_uom) ? true:undefined)" > |
|||
<t t-esc='uom.display_name'/> |
|||
</option> |
|||
</t> |
|||
</select> |
|||
</div> |
|||
<div class="footer"> |
|||
<div class="button confirm"> |
|||
Ok |
|||
</div> |
|||
<div class="button cancel"> |
|||
Cancel |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</t> |
|||
|
|||
</templates> |
@ -0,0 +1,14 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
<template id="assets" inherit_id="point_of_sale.assets"> |
|||
<xpath expr="." position="inside"> |
|||
<script type="text/javascript" src="/product_multi_uom_pos/static/src/js/multi_uom.js"></script> |
|||
</xpath> |
|||
<xpath expr="//link[@id='pos-stylesheet']" position="after"> |
|||
<link rel="stylesheet" href="/product_multi_uom_pos/static/src/css/style.css"/> |
|||
</xpath> |
|||
</template> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,16 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<data> |
|||
<!--Adding uom id to lines--> |
|||
<record id="pos_order_line_uom" model="ir.ui.view"> |
|||
<field name="name">UOM for Order-line</field> |
|||
<field name="model">pos.order</field> |
|||
<field name="inherit_id" ref="point_of_sale.view_pos_pos_form" /> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//field[@name='lines']/tree/field[@name='qty']" position="after"> |
|||
<field name="uom_id"/> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
</data> |
|||
</odoo> |