@ -0,0 +1,14 @@ |
|||
Cost Price as Code in Barcode v12 |
|||
================================= |
|||
|
|||
The module enables user to print customized product labels. |
|||
|
|||
Installation |
|||
============ |
|||
- www.odoo.com/documentation/12.0/setup/install.html |
|||
- Install our custom addon |
|||
|
|||
Credits |
|||
======= |
|||
Developer: Atul Ramesh Varma @ cybrosys, Contact: odoo@cybrosys.com |
|||
V13 : Sreenath. |
@ -0,0 +1,2 @@ |
|||
from . import report |
|||
from . import models |
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
{ |
|||
'name': 'Cost Price as Code in Barcode', |
|||
'version': '13.0.1.0.0', |
|||
'summary': """Print user defined product labels.""", |
|||
'description': """The module enables user to print customized product labels. |
|||
""", |
|||
'category': 'Tools', |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'maintainer': 'Cybrosys Techno Solutions', |
|||
'depends': ['base', 'web', 'product','account'], |
|||
'website': 'https://www.cybrosys.com', |
|||
'data': [ |
|||
'report/product_label_template.xml', |
|||
'views/barcode_generator_view.xml', |
|||
'security/ir.model.access.csv' |
|||
], |
|||
'qweb': [], |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'AGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': False, |
|||
} |
@ -0,0 +1,6 @@ |
|||
## Module <customized_barcode_generator> |
|||
|
|||
#### 01.01.2020 |
|||
#### Version 13.0.1.0.0 |
|||
##### ADD |
|||
- Initial commit for Customized Barcode Generator |
@ -0,0 +1 @@ |
|||
from . import barcode_generator |
@ -0,0 +1,113 @@ |
|||
from odoo import api, fields, models, _ |
|||
import datetime |
|||
from odoo.exceptions import UserError |
|||
|
|||
|
|||
class ResConfigSettings(models.TransientModel): |
|||
_inherit = 'res.config.settings' |
|||
|
|||
active_standard_price = fields.Boolean(string='Standard price as a code', |
|||
help="check this box to show cost on the product labels as code") |
|||
active_ref = fields.Boolean(string='Show product reference ', |
|||
help="check this box to show product reference as in product labels") |
|||
|
|||
@api.model |
|||
def get_values(self): |
|||
res = super(ResConfigSettings, self).get_values() |
|||
params = self.env['ir.config_parameter'].sudo() |
|||
active_standard_price = params.get_param('active_standard_price', default=False) |
|||
active_ref = params.get_param('active_ref', default=False) |
|||
res.update( |
|||
active_standard_price=bool(active_standard_price), |
|||
active_ref=bool(active_ref), |
|||
) |
|||
return res |
|||
|
|||
|
|||
def set_values(self): |
|||
super(ResConfigSettings, self).set_values() |
|||
self.env['ir.config_parameter'].sudo().set_param("active_standard_price", |
|||
self.active_standard_price) |
|||
self.env['ir.config_parameter'].sudo().set_param("active_ref", |
|||
self.active_ref) |
|||
|
|||
|
|||
class CustomizeBarcodeGenerator(models.Model): |
|||
_name = 'barcode.code' |
|||
name = fields.Char(default='Numeric Code') |
|||
code_for_zero = fields.Char(string=' 0 ', required=True, limit=1, size=1, |
|||
default='a', help="insert substitute code ") |
|||
code_for_one = fields.Char(string='1 ', required=True, limit=1, size=1, |
|||
default='b', help="insert substitute code ") |
|||
code_for_two = fields.Char(string='2 ', required=True, limit=1, size=1, |
|||
default='c', help="insert substitute code ") |
|||
code_for_three = fields.Char(string='3 ', required=True, limit=1, size=1, |
|||
default='d', help="insert substitute code ") |
|||
code_for_four = fields.Char(string='4 ', required=True, limit=1, size=1, |
|||
default='e', help="insert substitute code ") |
|||
code_for_five = fields.Char(string='5 ', required=True, limit=1, size=1, |
|||
default='f', help="insert substitute code ") |
|||
code_for_six = fields.Char(string='6 ', required=True, limit=1, size=1, |
|||
default='g', help="insert substitute code ") |
|||
code_for_seven = fields.Char(string='7 ', required=True, limit=1, size=1, |
|||
default='h', help="insert substitute code ") |
|||
code_for_eight = fields.Char(string='8 ', required=True, limit=1, size=1, |
|||
default='i', help="insert substitute code ") |
|||
code_for_nine = fields.Char(string='9 ', required=True, limit=1, size=1, |
|||
default='j', help="insert substitute code ") |
|||
active_check = fields.Boolean(string="Active", default=False) |
|||
date_check = fields.Datetime(default=datetime.datetime.today(), string="Date") |
|||
|
|||
|
|||
@api.onchange('active_check') |
|||
def onchange_active_check(self): |
|||
for i in self.search([]): |
|||
if i.active_check == self.active_check and self.active_check: |
|||
self.active_check = False |
|||
raise UserError(_("Only one rule for code can be active at a time")) |
|||
|
|||
|
|||
class CostToCode(models.Model): |
|||
_inherit = 'product.product' |
|||
cost_in_code = fields.Char(string='Cost in code', compute='get_cost_in_code') |
|||
|
|||
|
|||
def get_cost_in_code(self): |
|||
code = self.env['barcode.code'].sudo().search([('active_check', '=', True)]) |
|||
active_check = self.env['ir.config_parameter'].sudo().search([('key','=','active_standard_price'),('value','=',True)]) |
|||
if active_check: |
|||
if code: |
|||
real = str(self.standard_price).split('.')[0] |
|||
for i in real: |
|||
if i == '0': |
|||
real = real.replace('0', code.code_for_zero) |
|||
elif i == '1': |
|||
real = real.replace('1', code.code_for_one) |
|||
elif i == '2': |
|||
real = real.replace('2', code.code_for_two) |
|||
elif i == '3': |
|||
real = real.replace('3', code.code_for_three) |
|||
elif i == '4': |
|||
real = real.replace('4', code.code_for_four) |
|||
elif i == '5': |
|||
real = real.replace('5', code.code_for_five) |
|||
elif i == '6': |
|||
real = real.replace('6', code.code_for_six) |
|||
elif i == '7': |
|||
real = real.replace('7', code.code_for_seven) |
|||
elif i == '8': |
|||
real = real.replace('8', code.code_for_eight) |
|||
else: |
|||
real = real.replace('9', code.code_for_nine) |
|||
return real |
|||
else: |
|||
return " " |
|||
else: |
|||
return " " |
|||
|
|||
def get_product_ref(self): |
|||
active_check = self.env['ir.config_parameter'].sudo().search([('key','=','active_ref'),('value','=',True)]) |
|||
if active_check: |
|||
return self.default_code |
|||
else: |
|||
return " " |
@ -0,0 +1,43 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
<template id="report_template_inherit" inherit_id="product.report_simple_label"> |
|||
<xpath expr="//div" position="replace"> |
|||
<div style="width: 32%; display: inline-table; height:14rem;"> |
|||
<table class="table" style="border: 2px solid black;"> |
|||
<tr style="border:0;"> |
|||
<td colspan="2" class="text-center" style="border:0; margin:0;"> |
|||
<strong t-field="product.name"/> |
|||
</td> |
|||
</tr> |
|||
<tr style="border:0;"> |
|||
<td colspan="2" class="text-center align-middle" style="border:0; margin:0;"> |
|||
<t t-if="product.barcode"> |
|||
<img alt="Barcode" t-if="len(product.barcode) == 13" t-att-src="'/report/barcode/?type=%s&value=%s&width=%s&height=%s' % ('EAN13', product.barcode, 600, 150)" style="width:100%;height::4rem;"/> |
|||
<img alt="Barcode" t-elif="len(product.barcode) == 8" t-att-src="'/report/barcode/?type=%s&value=%s&width=%s&height=%s' % ('EAN8', product.barcode, 600, 150)" style="width:100%;height::4rem;"/> |
|||
<img alt="Barcode" t-else="" t-att-src="'/report/barcode/?type=%s&value=%s&width=%s&height=%s' % ('Code128', product.barcode, 600, 150)" style="width:100%;height::4rem;"/> |
|||
<span t-field="product.barcode"/> |
|||
</t> |
|||
<t t-else=""><span class="text-muted">No barcode available</span></t> |
|||
</td> |
|||
</tr> |
|||
<tr style="border:0;"> |
|||
<td style="border:0; margin:0; padding-left:35px; font-size:9px; text-align:left" > |
|||
<t t-esc="product.get_product_ref()" /> |
|||
</td> |
|||
<td style="border:0; margin:0; padding-right:35px; font-size:9px; text-align:right" > |
|||
<t t-esc="product.get_cost_in_code()"/> |
|||
</td> |
|||
</tr> |
|||
<tr style="border:0;"> |
|||
<td colspan="2" style="text-align:center; border:0; margin:0;" > |
|||
<strong>Price:</strong> |
|||
<strong t-field="product.lst_price" t-options="{'widget': 'monetary', 'display_currency': product.company_id.currency_id}"/> |
|||
</td> |
|||
</tr> |
|||
</table> |
|||
</div> |
|||
</xpath> |
|||
</template> |
|||
</data> |
|||
</odoo> |
|
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 21 KiB |
@ -0,0 +1,325 @@ |
|||
|
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-header-banner.png);background-repeat:no-repeat;background-size:100%;padding: 4% 0% 2% 15%;background-position-y: -107px;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="font-size: 35px;color: #fff;font-weight: 900;text-transform: uppercase;text-align: left;margin: 0;margin-bottom: 16px;"> |
|||
Customized Barcode Generator |
|||
</h2> |
|||
<h3 class="oe_slogan" style="font-size: 25px;color: #fff;font-weight: 600;text-align: left;opacity: 1;margin: 0 !important;"> |
|||
Print user defined product labels. |
|||
</h3> |
|||
<h5 class="oe_slogan" style="text-align: left;background: #fff;width: 293px;padding: 10px;color: #080808 !important;opacity: 1 !important;font-weight: 600;font-size: 20px;"> |
|||
<a style="color: #080808 !important;" href="https://www.cybrosys.com" target="_blank">Cybrosys Technologies</a> |
|||
</h5> |
|||
<a style="color: #080808 !important;" href="https://www.cybrosys.com" target="_blank"> |
|||
<div style="width: 215px;margin-left: 57%;text-align: center;background: #ffffff;height: 215px;border-radius: 100%;display: flex;justify-content: center;align-items: center;box-shadow: 0 0 12px 4px #00000059;"> |
|||
<img src="https://www.cybrosys.com/images/cybro-logo-oca.png" alt="cybrosys technologies" style="width: 136px;"/> </div> |
|||
</a> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container" style="padding: 1% 0% 3% 15%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Overview |
|||
</h2> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
The module enables user to print customized product labels. |
|||
</h3> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-banner1.png); background-repeat:no-repeat; background-size:cover;padding: 5% 0% 10% 15%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Features |
|||
</h2> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Create custom code for printing standard price on product labels. |
|||
</h3> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Show/hide product reference on product labels. |
|||
</h3> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Show/hide cost price as a code on product labels. |
|||
</h3> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Screenshots |
|||
</h2> |
|||
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Go to <b>Invoicing </b> --><b> Settings</b>.<br> |
|||
Select whether to show/hide <b>standard price as code</b> or <b>product reference</b> on product labels and click Save.<br> |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="customized-barcode-generator-settings-cybrosys.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Go to <b>Invoicing</b> --><b> Settings</b> --><b> Product Labels</b>. Click on <b>barcode code</b> to create a new rules.<br> |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="customized-barcode-generator-barcodecodetree-cybrosys.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
In the form view, you can set the code for each digit. Click on the active button to use this rule on the product label. |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="customized-barcode-generator-barcodecodeform-cybrosys.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Go to <b>Products view</b> select products and print product labels as shown below<br> |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="customized-barcode-generator-productlabelprint-cybrosys.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
You can see the standard price of products on the bottom right of product label as code using the active rule, and at the bottom left you can see the product reference. |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="customized-barcode-generator-productlabelpdf-cybrosys.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="padding: 7px 0% 0% 3%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<a style="color: #080808 !important;" href="https://apps.odoo.com/apps/modules/browse?search=cybrosys" target="_blank"><img src="https://www.cybrosys.com/images/view-more-apps.jpg" alt="cybrosys technologies" style="width: 100%;margin-bottom: 50px;"/></a> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container" style="padding: 0% 0% 0% 3%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Our Services |
|||
</h2> |
|||
<div style="display:flex;padding-top: 20px;justify-content: space-between;"> |
|||
<div style="flex-basis: 18%;"> |
|||
<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="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;"> |
|||
Odoo Customization |
|||
</h3> |
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
<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="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;"> |
|||
Odoo Implementation |
|||
</h3> |
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
<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="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;"> |
|||
Odoo Integration |
|||
</h3> |
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
<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="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;"> |
|||
Odoo Support |
|||
</h3> |
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
<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="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;"> |
|||
Hire Odoo Developers |
|||
</h3> |
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="padding: 7px 0% 0% 3%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Our Industries |
|||
</h2> |
|||
<div style="display:flex;justify-content: space-between;flex-wrap:wrap;"> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
<div style="width:30%; float:left;"> |
|||
<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:600;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;"> |
|||
Trading |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;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;"> |
|||
Easily procure and sell your products. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
<div style="width:30%; float:left;"> |
|||
<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;"> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;font-weight:600;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;"> |
|||
Manufacturing |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;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;"> |
|||
Plan, track and schedule your operations. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
<div style="width:30%; float:left;"> |
|||
<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:600;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;"> |
|||
Restaurant |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;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;"> |
|||
Run your bar or restaurant methodical. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
<div style="width:30%; float:left;"> |
|||
<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:600;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;"> |
|||
POS |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;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;"> |
|||
Easy configuring and convivial selling. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
<div style="width:30%; float:left;"> |
|||
<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:600;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;"> |
|||
E-commerce & Website |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;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;"> |
|||
Mobile friendly, awe-inspiring product pages. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
<div style="width:30%; float:left;"> |
|||
<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:600;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;"> |
|||
Hotel Management |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;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;"> |
|||
An all-inclusive hotel management application. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
<div style="width:30%; float:left;"> |
|||
<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:600;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;"> |
|||
Education |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;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;"> |
|||
A Collaborative platform for educational management. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
<div style="width:30%; float:left;"> |
|||
<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:600;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;"> |
|||
Service Management |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 14px;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;"> |
|||
Keep track of services and invoice accordingly. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-footer-bg.png); background-repeat:no-repeat; background-size:100%;padding: 13% 0% 6% 0%;"> |
|||
<div class="oe_slogan" style="margin-top:10px !important;margin-bottom: 0px;"> |
|||
<div> |
|||
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" 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 us </a> |
|||
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" 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 style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" 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="https://www.cybrosys.com/images/logo.png" style="width: 190px; margin-bottom: 25px;margin-top: 30px;" 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;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;padding-left: 3px;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://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;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;padding-left: 3px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
@ -0,0 +1,87 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
|
|||
<record model="ir.ui.view" id="barcode_code_form"> |
|||
<field name="name">barcode.code.form.view</field> |
|||
<field name="model">barcode.code</field> |
|||
<field name="type">form</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Barcode code" create="false" delete="false"> |
|||
<sheet> |
|||
<label for="active_check"/> |
|||
<field name="active_check"/> |
|||
<group> |
|||
<group> |
|||
<field name="code_for_zero"/> |
|||
<field name="code_for_one"/> |
|||
<field name="code_for_two"/> |
|||
<field name="code_for_three" /> |
|||
<field name="code_for_four"/> |
|||
<field name="code_for_five"/> |
|||
<field name="code_for_six"/> |
|||
<field name="code_for_seven"/> |
|||
<field name="code_for_eight"/> |
|||
<field name="code_for_nine"/> |
|||
</group> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
<record model="ir.ui.view" id="barcode_code_tree"> |
|||
<field name="name">barcode.code.tree.view</field> |
|||
<field name="model">barcode.code</field> |
|||
<field name="type">tree</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Barcode code"> |
|||
<field name="name"/> |
|||
<field name="date_check"/> |
|||
<field name="active_check"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record model="ir.actions.act_window" id="action_barcode_code_view"> |
|||
<field name="name">Barcode Code</field> |
|||
<field name="res_model">barcode.code</field> |
|||
<field name="view_mode">tree,form</field> |
|||
<field name="help" type="html"> |
|||
<p class="oe_view_nocontent_create">Create new code |
|||
</p> |
|||
</field> |
|||
</record> |
|||
<record id="res_config_settings_view_customize_barcode" model="ir.ui.view"> |
|||
<field name="name">res.config.settings.view.form.customize.barcode</field> |
|||
<field name="model">res.config.settings</field> |
|||
<field name="priority" eval="100"/> |
|||
<field name="inherit_id" ref="account.res_config_settings_view_form" /> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//field[@name='has_chart_of_accounts']" position="before"> |
|||
<h2>Product Labels</h2> |
|||
<div class="row mt16 o_settings_container"> |
|||
<div class="col-xs-12 col-md-6 o_setting_box"> |
|||
<div class="o_setting_left_pane"> |
|||
<field name="active_standard_price"/> |
|||
</div> |
|||
<div class="o_setting_right_pane"> |
|||
<label for="active_standard_price"/> |
|||
<div> |
|||
<button name="%(customized_barcode_generator.action_barcode_code_view)d" icon="fa-arrow-right" |
|||
type="action" string="Barcode code " class="btn-link" |
|||
attrs="{'invisible': [('active_standard_price', '=', False)]}"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-xs-12 col-md-6 o_setting_box"> |
|||
<div class="o_setting_left_pane"> |
|||
<field name="active_ref"/> |
|||
</div> |
|||
<div class="o_setting_right_pane"> |
|||
<label for="active_ref"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,13 @@ |
|||
POS Serial Number Validator v13 |
|||
=============================== |
|||
|
|||
Validate Serial number of a product by checking availability in stock |
|||
|
|||
Credits |
|||
======= |
|||
Cybrosys Techno Solutions |
|||
|
|||
Author |
|||
------ |
|||
* Akhilesh N S <odoo@cybrosys.com> |
|||
* V13 Sreenath |
@ -0,0 +1,22 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Akhilesh N S(<http://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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
from . import models |
@ -0,0 +1,40 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Akhilesh N S(<http://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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
{ |
|||
'name': 'POS Serial Number Validator', |
|||
'version': '13.0.1.0.0', |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'website': 'https://www.cybrosys.com', |
|||
'category': 'Point of Sale', |
|||
'summary': """Validate Serial number of a product by checking availability in stock""", |
|||
'description': """Validate Serial number of a product by checking availability in stock""", |
|||
'depends': ['point_of_sale'], |
|||
'data': [ |
|||
'static/src/xml/pos_templates.xml', |
|||
], |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'LGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
} |
|||
|
@ -0,0 +1,7 @@ |
|||
## Module <pos_traceability_validation> |
|||
|
|||
#### 01.01.2020 |
|||
#### Version 13.0.1.0.0 |
|||
#### ADD |
|||
|
|||
Initial Commit |
@ -0,0 +1,22 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Akhilesh N S(<http://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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
from . import traceability_validation |
@ -0,0 +1,46 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Akhilesh N S(<http://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 <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
from odoo import models, api |
|||
|
|||
|
|||
class ValidateLotNumber(models.Model): |
|||
_name = 'serial_no.validation' |
|||
|
|||
@api.model |
|||
def validate_lots(self, lots): |
|||
processed = [] |
|||
LotObj = self.env['stock.production.lot'] |
|||
for lot in lots: |
|||
lot_id = LotObj.search([('name', '=', lot)], limit=1) |
|||
try: |
|||
if lot_id.product_qty > 0 and lot not in processed: |
|||
processed.append(lot) |
|||
continue |
|||
else: |
|||
if lot in processed: |
|||
return ['duplicate', lot] |
|||
else: |
|||
return ['no_stock', lot] |
|||
except Exception: |
|||
return ['except', lot] |
|||
return True |
|||
|
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 129 KiB |
After Width: | Height: | Size: 16 KiB |
@ -0,0 +1,332 @@ |
|||
|
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-header-banner.png);background-repeat:no-repeat;background-size:100%;padding: 4% 0% 2% 15%;background-position-y: -107px;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="font-size: 35px;color: #fff;font-weight: 900;text-transform: uppercase;text-align: left;margin: 0;margin-bottom: 16px;"> |
|||
POS Serial Number Validator |
|||
</h2> |
|||
<h3 class="oe_slogan" style="font-size: 25px;color: #fff;font-weight: 600;text-align: left;opacity: 1;margin: 0 !important;"> |
|||
Validate the given Serial number of a product from stock |
|||
</h3> |
|||
<h5 class="oe_slogan" style="text-align: left;background: #fff;width: 293px;padding: 10px;color: #080808 !important;opacity: 1 !important;font-weight: 600;font-size: 20px;"> |
|||
<a style="color: #080808 !important;" href="https://www.cybrosys.com" target="_blank">Cybrosys Technologies</a> |
|||
</h5> |
|||
<a style="color: #080808 !important;" href="https://www.cybrosys.com" target="_blank"> |
|||
<div style="width: 215px;margin-left: 57%;text-align: center;background: #ffffff;height: 215px;border-radius: 100%;display: flex;justify-content: center;align-items: center;box-shadow: 0 0 12px 4px #00000059;"> |
|||
<img src="https://www.cybrosys.com/images/cybro-logo-oca.png" alt="cybrosys technologies" style="width: 180px;"/> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container" style="padding: 1% 0% 3% 15%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Overview |
|||
</h2> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
Currently in Odoo, Serial number validation at POS not available. This module validates given serial number is available in stock and prevent |
|||
duplicated entry for more than one quantity. |
|||
</h3> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-banner1.png); background-repeat:no-repeat; background-size:cover;padding: 10% 0% 25% 15%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Features |
|||
</h2> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Validates given serial number is available in stock |
|||
</h3> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Prevents duplicated entry for more than one quantity |
|||
</h3> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container" style="padding: 3% 0% 0% 15%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Screenshots |
|||
</h2> |
|||
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Warnings |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="pos-treacibility-cybrosys-1.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
</br> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="pos-treacibility-cybrosys-2.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container" style="padding: 7px 0% 0% 3%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<a style="color: #080808 !important;" href="https://apps.odoo.com/apps/modules/browse?search=cybrosys" target="_blank"><img src="https://www.cybrosys.com/images/view-more-apps.jpg" alt="cybrosys technologies" style="width: 100%;margin-bottom: 50px;"/></a> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="padding: 1% 0% 0% 3%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Our Services |
|||
</h2> |
|||
<div style="display:flex;padding-top: 20px;justify-content: space-between;"> |
|||
<div style="flex-basis: 18%;"> |
|||
|
|||
<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"> |
|||
Odoo Customization |
|||
</a> |
|||
</h3> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
|
|||
<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"> |
|||
Odoo Implementation </a> |
|||
</h3> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
|
|||
<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"> |
|||
Odoo Integration |
|||
</a> |
|||
</h3> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
|
|||
<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"> |
|||
Odoo Support</a> |
|||
</h3> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
|
|||
<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"> |
|||
Hire Odoo Developers</a> |
|||
</h3> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="padding: 1% 0% 0% 3%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Our Industries |
|||
</h2> |
|||
<div style="display:flex;justify-content: space-between;flex-wrap:wrap;"> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
Trading |
|||
</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Easily procure and sell your products. |
|||
</h3> |
|||
</div> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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;"> |
|||
<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"> |
|||
Manufacturing</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Plan, track and schedule your operations. |
|||
</h3> |
|||
</div> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
Restaurant</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Run your bar or restaurant methodical. |
|||
</h3> |
|||
</div> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
POS</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Easy configuring and convivial selling. |
|||
</h3> |
|||
</div> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
E-commerce & Website</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Mobile friendly, awe-inspiring product pages. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
Hotel Management</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
An all-inclusive hotel management application. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
Education</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
A Collaborative platform for educational management. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
Service Management</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Keep track of services and invoice accordingly. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-footer-bg.png); background-repeat:no-repeat; background-size:100%;padding: 13% 0% 6% 0%;"> |
|||
<div class="oe_slogan" style="margin-top:10px !important;margin-bottom: 0px;"> |
|||
<div> |
|||
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="mailto:odoo@cybrosys.com"><i class="fa fa-envelope"></i> Email us </a> |
|||
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" 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 style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com/contact/"><i class="fa fa-check-square"></i> Request Customization </a> |
|||
</div> |
|||
<br> |
|||
<img src="https://www.cybrosys.com/images/logo.png" style="width: 190px; margin-bottom: 25px;margin-top: 30px;" 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;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;padding-left: 3px;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://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;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;padding-left: 3px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td> |
|||
</div> |
|||
</div> |
|||
</section> |
After Width: | Height: | Size: 143 KiB |
After Width: | Height: | Size: 282 KiB |
After Width: | Height: | Size: 276 KiB |
@ -0,0 +1,91 @@ |
|||
odoo.define('pos_traceability_validation.models', function (require) { |
|||
"use strict"; |
|||
|
|||
|
|||
var PosModel = require('point_of_sale.models'); |
|||
var PosPopups = require('point_of_sale.popups'); |
|||
var gui = require('point_of_sale.gui'); |
|||
var rpc = require('web.rpc'); |
|||
var PackLotLinePopupWidget = PosPopups.extend({ |
|||
template: 'PackLotLinePopupWidget', |
|||
events: _.extend({}, PopupWidget.prototype.events, { |
|||
'click .remove-lot': 'remove_lot', |
|||
'keydown': 'add_lot', |
|||
'blur .packlot-line-input': 'lose_input_focus' |
|||
}), |
|||
|
|||
/*making sure we didn't used same key already in the order*/ |
|||
duplicate_lot_name: function(id, lot_name, lot_lines){ |
|||
for(var i=0; i< lot_lines.length; i++){ |
|||
if(lot_lines[i].attributes && |
|||
lot_lines[i].attributes.lot_name != null |
|||
&& lot_lines[i].attributes.lot_name == lot_name && |
|||
id != lot_lines[i].cid){ |
|||
return true; |
|||
} |
|||
} |
|||
return false; |
|||
}, |
|||
|
|||
click_confirm: function(){ |
|||
var self = this; |
|||
var lot_names = []; |
|||
var lot_cid = {}; |
|||
var pack_lot_lines = this.options.pack_lot_lines; |
|||
|
|||
this.$('.packlot-line-input').each(function(index, el){ |
|||
var cid = $(el).attr('cid'), |
|||
lot_name = $(el).val(); |
|||
var pack_line = pack_lot_lines.get({cid: cid}); |
|||
pack_line.set_lot_name(lot_name); |
|||
lot_names.push(lot_name); |
|||
lot_cid[lot_name] = cid; |
|||
}); |
|||
|
|||
rpc.query({ |
|||
model: 'serial_no.validation', |
|||
method: 'validate_lots', |
|||
args: [lot_names] |
|||
}).then(function(result){ |
|||
|
|||
if(result != true){ |
|||
var current_id = lot_cid[result[1]]; |
|||
var pack_line = pack_lot_lines.get({cid: current_id}); |
|||
pack_line.set_lot_name(null); |
|||
if(result[0] == 'no_stock'){ |
|||
alert("Insufficient stock for " + result[1]) |
|||
} |
|||
else if(result[0] == 'duplicate'){ |
|||
alert("Duplicate entry for " + result[1]) |
|||
} |
|||
else if(result[0] == 'except'){ |
|||
alert("Exception occured with " + result[1]) |
|||
} |
|||
} |
|||
else{ |
|||
pack_lot_lines.s(); |
|||
pack_lot_lines.set_quantity_by_lot(); |
|||
self.options.order.save_to_db(); |
|||
self.options.order_line.trigger( |
|||
'change', |
|||
self.options.order_line |
|||
); |
|||
self.gui.close_popup(); |
|||
} |
|||
}); |
|||
}, |
|||
remove_lot: function(ev){ |
|||
var pack_lot_lines = this.options.pack_lot_lines, |
|||
$input = $(ev.target).prev(), |
|||
cid = $input.attr('cid'); |
|||
var lot_model = pack_lot_lines.get({cid: cid}); |
|||
lot_model.remove(); |
|||
pack_lot_lines.set_quantity_by_lot(); |
|||
this.renderElement(); |
|||
} |
|||
|
|||
|
|||
}); |
|||
gui.define_popup({name:'packlotline', widget: PackLotLinePopupWidget}); |
|||
|
|||
}); |
@ -0,0 +1,9 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<odoo> |
|||
<template id="pos_extend_assets" inherit_id="point_of_sale.assets"> |
|||
<xpath expr="." position="inside"> |
|||
<script type="text/javascript" src="/pos_traceability_validation/static/src/js/pos_models.js"/> |
|||
</xpath> |
|||
</template> |
|||
</odoo> |
|||
|
@ -0,0 +1,158 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<templates id="point_of_sale.template" xml:space="preserve"> |
|||
<t t-extend="Chrome"> |
|||
<t t-jquery='.pos-branding' t-operation='replace'> |
|||
<img src='/web/binary/company_logo' style="width: 3%;padding: 2px 8px 0px 13px;float: left;"/> |
|||
<span class="placeholder-UsernameWidget" style="float: left;padding-top: 19px;color: #fff;"></span> |
|||
</t> |
|||
</t> |
|||
|
|||
<t t-extend="PosTicket"> |
|||
<t t-jquery='.pos-sale-ticket' t-operation='replace'> |
|||
<div class="pos-sale-ticket"> |
|||
<div> |
|||
<div style="width: 55%; float: left; padding: 20px 0px;"> |
|||
<t t-if="order.get_client()"> |
|||
Customer: <t t-esc="order.get_client().name"/><br /> |
|||
</t> |
|||
Cashier: <t t-esc="widget.pos.cashier ? widget.pos.cashier.name : widget.pos.user.name"/><br /> |
|||
<t t-if="widget.pos.company.phone"> |
|||
Phone: <t t-esc="widget.pos.company.phone || ''"/><br /> |
|||
</t> |
|||
<t t-esc="order.name"/> |
|||
<t t-esc="moment().format('L LT')"/> |
|||
</div> |
|||
<div style="width: 45%;float: left; "> |
|||
<img src='/web/binary/company_logo' style="width:100%"/> |
|||
</div> |
|||
</div> |
|||
<t t-if="widget.pos.company.name"> |
|||
<div style="width:100%;text-align:right;"><t t-esc="widget.pos.company.name"/></div> |
|||
</t> |
|||
<t t-if="widget.pos.company.email"> |
|||
<div style="width:100%;text-align:right;"><t t-esc="widget.pos.company.email"/></div> |
|||
</t> |
|||
<br /> |
|||
<t t-if="receipt.header"> |
|||
<div style='text-align:center'> |
|||
<t t-esc="receipt.header" /> |
|||
</div> |
|||
<br/> |
|||
</t> |
|||
<table class='receipt-orderlines'> |
|||
<colgroup> |
|||
<col width='40%' /> |
|||
<col width='15%' /> |
|||
<col width='15%' /> |
|||
<col width='30%' /> |
|||
</colgroup> |
|||
<tr style="border: 1px solid rgb(0, 0, 0);"> |
|||
<th>Name</th> |
|||
<th>Qty</th> |
|||
<th>Price</th> |
|||
<th>Value</th> |
|||
</tr> |
|||
<tr t-foreach="orderlines" t-as="orderline"> |
|||
<td> |
|||
<t t-esc="orderline.get_product().display_name"/> |
|||
<t t-if="orderline.get_discount() > 0"> |
|||
<div class="pos-disc-font"> |
|||
With a <t t-esc="orderline.get_discount()"/>% discount |
|||
</div> |
|||
</t> |
|||
</td> |
|||
<td> |
|||
<t t-esc="orderline.get_quantity_str_with_unit()"/> |
|||
</td> |
|||
<td> |
|||
<t t-set="a" t-value="orderline.quantityStr"></t> |
|||
<t t-set="b" t-value="orderline.get_display_price()"></t> |
|||
<t t-set="c" t-value="b/a"></t> |
|||
<t t-esc="c"/> |
|||
</td> |
|||
<td style='text-align:right'> |
|||
<t t-esc="widget.format_currency(orderline.get_display_price())"/> |
|||
</td> |
|||
</tr> |
|||
</table> |
|||
<br /> |
|||
<table class='receipt-total'> |
|||
<colgroup> |
|||
<col width='40%' /> |
|||
<col width='30%' /> |
|||
<col width='30%' /> |
|||
</colgroup> |
|||
<tr> |
|||
<td></td> |
|||
<td>Subtotal:</td> |
|||
<td style='text-align:right'> |
|||
<t t-esc="widget.format_currency(order.get_total_without_tax())"/> |
|||
</td> |
|||
</tr> |
|||
<t t-foreach="order.get_tax_details()" t-as="taxdetail"> |
|||
<tr> |
|||
<td></td> |
|||
<td><t t-esc="taxdetail.name" /></td> |
|||
<td style='text-align:right'> |
|||
<t t-esc="widget.format_currency(taxdetail.amount)"/> |
|||
</td> |
|||
</tr> |
|||
</t> |
|||
<tr> |
|||
<td></td> |
|||
<td>Discount:</td> |
|||
<td style='text-align:right'> |
|||
<t t-esc="widget.format_currency(order.get_total_discount())"/> |
|||
</td> |
|||
</tr> |
|||
<tr class="emph"> |
|||
<td>Total:</td> |
|||
<td colspan="2" style='text-align:right'> |
|||
<t t-esc="widget.format_currency(order.get_total_with_tax())"/> |
|||
</td> |
|||
</tr> |
|||
</table> |
|||
<br/> |
|||
<table class='receipt-paymentlines'> |
|||
<colgroup> |
|||
<col width='38%' /> |
|||
<col width='20%' /> |
|||
<col width='13%' /> |
|||
<col width='29%' /> |
|||
</colgroup> |
|||
<t t-foreach="paymentlines" t-as="line"> |
|||
<tr> |
|||
<td> |
|||
<t t-esc="line.name"/> |
|||
</td> |
|||
<td> |
|||
</td> |
|||
<td> |
|||
</td> |
|||
<td style='text-align:right'> |
|||
<t t-esc="widget.format_currency(line.get_amount())"/> |
|||
</td> |
|||
</tr> |
|||
</t> |
|||
</table> |
|||
<br/> |
|||
<table class='receipt-change'> |
|||
<colgroup> |
|||
<col width='40%' /> |
|||
<col width='15%' /> |
|||
<col width='15%' /> |
|||
<col width='30%' /> |
|||
</colgroup> |
|||
<tr><td>Change:</td> |
|||
<td> |
|||
</td> |
|||
<td> |
|||
</td> |
|||
<td style='text-align:right'> |
|||
<t t-esc="widget.format_currency(order.get_change())"/> |
|||
</td></tr> |
|||
</table> |
|||
</div> |
|||
</t> |
|||
</t> |
|||
</templates> |
@ -0,0 +1,25 @@ |
|||
Costing Method:Last Purchase Price |
|||
================================== |
|||
|
|||
This module introduces a new costing method to Odoo. That will update a product's cost price when a new purchase |
|||
happens with the purchasing rate. if you enables automatic stock valuation and provided a price difference account, |
|||
this module will generate stock journal entry to update the stock value according to the price change. |
|||
|
|||
Installation |
|||
============ |
|||
- www.odoo.com/documentation/12.0/setup/install.html |
|||
- Install our custom addon |
|||
|
|||
|
|||
Bug Tracker |
|||
=========== |
|||
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. |
|||
|
|||
Credits |
|||
======= |
|||
* Cybrosys Techno Solutions <https://www.cybrosys.com> |
|||
|
|||
Author |
|||
------ |
|||
* Fasluca <faslu@cybrosys.in> |
|||
* Sreenath |
@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: fasluca(<https://www.cybrosys.com>) |
|||
# |
|||
# This program is free software: you can modify |
|||
# it under the terms of the GNU Affero General Public License (AGPL) as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# 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 Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################### |
|||
from . import models |
|||
|
@ -0,0 +1,42 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2018-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: fasluca(<https://www.cybrosys.com>) |
|||
# |
|||
# This program is free software: you can modify |
|||
# it under the terms of the GNU Affero General Public License (AGPL) as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# 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 Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>. |
|||
# |
|||
################################################################################### |
|||
|
|||
{ |
|||
'name': 'Costing method: Last Purchase Price', |
|||
'version': '13.0.1.0.0', |
|||
'category': 'Inventory', |
|||
'summary': "Introducing new costing method in Odoo 'last purchase price'", |
|||
'author': 'Cybrosys Techno solutions', |
|||
'maintainer': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'website': 'https://www.openhrms.com', |
|||
'description': """Introducing new costing method in Odoo 'last purchase price'""", |
|||
'depends': ['stock', |
|||
'stock_account', |
|||
'purchase' |
|||
], |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'AGPL-3', |
|||
'application': False, |
|||
'installable': True, |
|||
'auto_install': False, |
|||
} |
@ -0,0 +1,3 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from . import stock |
|||
from . import product |
@ -0,0 +1,159 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from odoo import api, fields, models, _ |
|||
from odoo.exceptions import UserError |
|||
from odoo.tools import float_is_zero |
|||
|
|||
|
|||
class ProductCategory(models.Model): |
|||
_inherit = "product.category" |
|||
|
|||
property_cost_method = fields.Selection([ |
|||
('standard', 'Standard Price'), |
|||
('last', 'Last Purchase Price'), |
|||
('fifo', 'First In First Out (FIFO)'), |
|||
('average', 'Average Cost (AVCO)')], string='Costing Method', |
|||
company_dependent=True, copy=True, |
|||
help="""Standard Price: The products are valued at their standard cost defined on the product. |
|||
Average Cost (AVCO): The products are valued at weighted average cost. |
|||
First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first. |
|||
Last Purchase Price: The products are valued same as 'Standard Price' Method, But standard price defined on the product will updated automatically with last purchase price.""") |
|||
|
|||
|
|||
class ProductTemplate(models.Model): |
|||
_inherit = 'product.template' |
|||
|
|||
property_cost_method = fields.Selection([ |
|||
('standard', 'Standard Price'), |
|||
('last', 'Last Purchase Price'), |
|||
('fifo', 'First In First Out (FIFO)'), |
|||
('average', 'Average Cost (AVCO)')], string='Costing Method', |
|||
company_dependent=True, copy=True, |
|||
help="""Standard Price: The products are valued at their standard cost defined on the product. |
|||
Average Cost (AVCO): The products are valued at weighted average cost. |
|||
First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first. |
|||
Last Purchase Price: The products are valued same as 'Standard Price' Method, But standard price defined on the product will be updated automatically with last purchase price.""") |
|||
|
|||
|
|||
def _set_cost_method(self): |
|||
# When going from FIFO to AVCO or to standard, we update the standard price with the |
|||
# average value in stock. |
|||
if self.property_cost_method == 'fifo' and self.cost_method in ['average', 'standard', 'last']: |
|||
# Cannot use the `stock_value` computed field as it's already invalidated when |
|||
# entering this method. |
|||
valuation = sum([variant._sum_remaining_values()[0] for variant in self.product_variant_ids]) |
|||
qty_available = self.with_context(company_owned=True).qty_available |
|||
if qty_available: |
|||
self.standard_price = valuation / qty_available |
|||
return self.write({'property_cost_method': self.cost_method}) |
|||
|
|||
|
|||
class ProductProduct(models.Model): |
|||
_inherit = 'product.product' |
|||
|
|||
|
|||
def create_price_change_account_move(self, new_price, account_id, company_id, origin): |
|||
""" |
|||
""" |
|||
AccountMove = self.env['account.move'] |
|||
product_accounts = {product.id: product.product_tmpl_id.get_product_accounts() for product in self} |
|||
for product in self.with_context().filtered(lambda r: r.valuation == 'real_time'): |
|||
diff = product.standard_price - new_price |
|||
if float_is_zero(diff, precision_rounding=product.currency_id.rounding): |
|||
raise UserError(_("No difference between the standard price and the new price.")) |
|||
if not product_accounts[product.id].get('stock_valuation', False): |
|||
raise UserError(_('You don\'t have any stock valuation account defined on your product category. You must define one before processing this operation.')) |
|||
qty_available = product.qty_available |
|||
if qty_available: |
|||
# Accounting Entries |
|||
if diff * qty_available > 0: |
|||
debit_account_id = account_id |
|||
credit_account_id = product_accounts[product.id]['stock_valuation'].id |
|||
else: |
|||
debit_account_id = product_accounts[product.id]['stock_valuation'].id |
|||
credit_account_id = account_id |
|||
|
|||
move_vals = { |
|||
'journal_id': product_accounts[product.id]['stock_journal'].id, |
|||
'company_id': company_id, |
|||
'ref': product.default_code, |
|||
'line_ids': [(0, 0, { |
|||
'name': _('%s changed cost from %s to %s - %s') % (origin, product.standard_price, new_price, product.display_name), |
|||
'account_id': debit_account_id, |
|||
'debit': abs(diff * qty_available), |
|||
'credit': 0, |
|||
'product_id': product.id, |
|||
}), (0, 0, { |
|||
'name': _('%s changed cost from %s to %s - %s') % (origin, product.standard_price, new_price, product.display_name), |
|||
'account_id': credit_account_id, |
|||
'debit': 0, |
|||
'credit': abs(diff * qty_available), |
|||
'product_id': product.id, |
|||
})], |
|||
} |
|||
move = AccountMove.create(move_vals) |
|||
move.post() |
|||
return True |
|||
|
|||
|
|||
@api.depends('stock_move_ids.product_qty', 'stock_move_ids.state', 'stock_move_ids.remaining_value', |
|||
'product_tmpl_id.cost_method', 'product_tmpl_id.standard_price', 'product_tmpl_id.property_valuation', |
|||
'product_tmpl_id.categ_id.property_valuation') |
|||
def _compute_stock_value(self): |
|||
StockMove = self.env['stock.move'] |
|||
to_date = self.env.context.get('to_date') |
|||
|
|||
self.env['account.move.line'].check_access_rights('read') |
|||
fifo_automated_values = {} |
|||
query = """SELECT aml.product_id, aml.account_id, sum(aml.debit) - sum(aml.credit), sum(quantity), array_agg(aml.id) |
|||
FROM account_move_line AS aml |
|||
WHERE aml.product_id IS NOT NULL AND aml.company_id=%%s %s |
|||
GROUP BY aml.product_id, aml.account_id""" |
|||
params = (self.env.user.company_id.id,) |
|||
if to_date: |
|||
query = query % ('AND aml.date <= %s',) |
|||
params = params + (to_date,) |
|||
else: |
|||
query = query % ('',) |
|||
self.env.cr.execute(query, params=params) |
|||
|
|||
res = self.env.cr.fetchall() |
|||
for row in res: |
|||
fifo_automated_values[(row[0], row[1])] = (row[2], row[3], list(row[4])) |
|||
|
|||
for product in self: |
|||
if product.cost_method in ['standard', 'average', 'last']: |
|||
qty_available = product.with_context(company_owned=True, owner_id=False).qty_available |
|||
price_used = product.standard_price |
|||
if to_date: |
|||
price_used = product.get_history_price( |
|||
self.env.user.company_id.id, |
|||
date=to_date, |
|||
) |
|||
product.stock_value = price_used * qty_available |
|||
product.qty_at_date = qty_available |
|||
elif product.cost_method == 'fifo': |
|||
if to_date: |
|||
if product.product_tmpl_id.valuation == 'manual_periodic': |
|||
domain = [('product_id', '=', product.id), |
|||
('date', '<=', to_date)] + StockMove._get_all_base_domain() |
|||
moves = StockMove.search(domain) |
|||
product.stock_value = sum(moves.mapped('value')) |
|||
product.qty_at_date = product.with_context(company_owned=True, owner_id=False).qty_available |
|||
product.stock_fifo_manual_move_ids = StockMove.browse(moves.ids) |
|||
elif product.product_tmpl_id.valuation == 'real_time': |
|||
valuation_account_id = product.categ_id.property_stock_valuation_account_id.id |
|||
value, quantity, aml_ids = fifo_automated_values.get((product.id, valuation_account_id)) or ( |
|||
0, 0, []) |
|||
product.stock_value = value |
|||
product.qty_at_date = quantity |
|||
product.stock_fifo_real_time_aml_ids = self.env['account.move.line'].browse(aml_ids) |
|||
else: |
|||
product.stock_value, moves = product._sum_remaining_values() |
|||
product.qty_at_date = product.with_context(company_owned=True, owner_id=False).qty_available |
|||
if product.product_tmpl_id.valuation == 'manual_periodic': |
|||
product.stock_fifo_manual_move_ids = moves |
|||
elif product.product_tmpl_id.valuation == 'real_time': |
|||
valuation_account_id = product.categ_id.property_stock_valuation_account_id.id |
|||
value, quantity, aml_ids = fifo_automated_values.get((product.id, valuation_account_id)) or ( |
|||
0, 0, []) |
|||
product.stock_fifo_real_time_aml_ids = self.env['account.move.line'].browse(aml_ids) |
@ -0,0 +1,107 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from collections import defaultdict |
|||
|
|||
from odoo import api, models |
|||
from odoo.exceptions import UserError |
|||
from odoo.tools import float_is_zero |
|||
|
|||
|
|||
class StockMove(models.Model): |
|||
_inherit = "stock.move" |
|||
|
|||
|
|||
def product_price_update_before_done(self, forced_qty=None): |
|||
tmpl_dict = defaultdict(lambda: 0.0) |
|||
# adapt standard price on incomming moves if the product cost_method is 'average' |
|||
std_price_update = {} |
|||
for move in self.filtered(lambda move: move.location_id.usage in ('supplier', 'production') and move.product_id.cost_method in ('average', 'last')): |
|||
product_tot_qty_available = move.product_id.qty_available + tmpl_dict[move.product_id.id] |
|||
rounding = move.product_id.uom_id.rounding |
|||
|
|||
qty_done = 0.0 |
|||
if float_is_zero(product_tot_qty_available, precision_rounding=rounding): |
|||
new_std_price = move._get_price_unit() |
|||
elif float_is_zero(product_tot_qty_available + move.product_qty, precision_rounding=rounding) or \ |
|||
float_is_zero(product_tot_qty_available + qty_done, precision_rounding=rounding): |
|||
new_std_price = move._get_price_unit() |
|||
else: |
|||
# Get the standard price |
|||
if move.product_id.cost_method == 'average': |
|||
amount_unit = std_price_update.get( |
|||
(move.company_id.id, move.product_id.id)) or move.product_id.standard_price |
|||
qty_done = move.product_uom._compute_quantity(move.quantity_done, move.product_id.uom_id) |
|||
qty = forced_qty or qty_done |
|||
new_std_price = ((amount_unit * product_tot_qty_available) + (move._get_price_unit() * qty)) / (product_tot_qty_available + qty_done) |
|||
if move.product_id.cost_method == 'last' and move.product_id.valuation == 'real_time': |
|||
new_std_price = move._get_price_unit() |
|||
products = self.env['product.product'].browse(move.product_id.id) |
|||
account_id = products.property_account_creditor_price_difference.id or products.categ_id.property_account_creditor_price_difference_categ.id |
|||
if not account_id: |
|||
raise UserError(_('Configuration error. Please configure the price difference account on the product or its category to process this operation.')) |
|||
products.create_price_change_account_move(new_std_price, account_id, move.company_id.id, move.origin) |
|||
tmpl_dict[move.product_id.id] += qty_done |
|||
# Write the standard price, as SUPERUSER_ID because a warehouse manager may not have the right to write on products |
|||
move.product_id.with_context(force_company=move.company_id.id).sudo().write({'standard_price': new_std_price}) |
|||
std_price_update[move.company_id.id, move.product_id.id] = new_std_price |
|||
|
|||
|
|||
class StockMoveLine(models.Model): |
|||
_inherit = 'stock.move.line' |
|||
|
|||
|
|||
def write(self, vals): |
|||
""" When editing a done stock.move.line, we impact the valuation. Users may increase or |
|||
decrease the `qty_done` field. There are three cost method available: standard, average |
|||
and fifo. We implement the logic in a similar way for standard and average: increase |
|||
or decrease the original value with the standard or average price of today. In fifo, we |
|||
have a different logic wheter the move is incoming or outgoing. If the move is incoming, we |
|||
update the value and remaining_value/qty with the unit price of the move. If the move is |
|||
outgoing and the user increases qty_done, we call _run_fifo and it'll consume layer(s) in |
|||
the stack the same way a new outgoing move would have done. If the move is outoing and the |
|||
user decreases qty_done, we either increase the last receipt candidate if one is found or |
|||
we decrease the value with the last fifo price. |
|||
""" |
|||
if 'qty_done' in vals: |
|||
moves_to_update = {} |
|||
for move_line in self.filtered( |
|||
lambda ml: ml.state == 'done' and (ml.move_id._is_in() or ml.move_id._is_out())): |
|||
moves_to_update[move_line.move_id] = vals['qty_done'] - move_line.qty_done |
|||
|
|||
for move_id, qty_difference in moves_to_update.items(): |
|||
move_vals = {} |
|||
if move_id.product_id.cost_method in ['standard', 'average', 'last']: |
|||
correction_value = qty_difference * move_id.product_id.standard_price |
|||
if move_id._is_in(): |
|||
move_vals['value'] = move_id.value + correction_value |
|||
elif move_id._is_out(): |
|||
move_vals['value'] = move_id.value - correction_value |
|||
else: |
|||
if move_id._is_in(): |
|||
correction_value = qty_difference * move_id.price_unit |
|||
new_remaining_value = move_id.remaining_value + correction_value |
|||
move_vals['value'] = move_id.value + correction_value |
|||
move_vals['remaining_qty'] = move_id.remaining_qty + qty_difference |
|||
move_vals['remaining_value'] = move_id.remaining_value + correction_value |
|||
elif move_id._is_out() and qty_difference > 0: |
|||
correction_value = self.env['stock.move']._run_fifo(move_id, quantity=qty_difference) |
|||
# no need to adapt `remaining_qty` and `remaining_value` as `_run_fifo` took care of it |
|||
move_vals['value'] = move_id.value - correction_value |
|||
elif move_id._is_out() and qty_difference < 0: |
|||
candidates_receipt = self.env['stock.move'].search(move_id._get_in_domain(), order='date, id desc', limit=1) |
|||
if candidates_receipt: |
|||
candidates_receipt.write({ |
|||
'remaining_qty': candidates_receipt.remaining_qty + -qty_difference, |
|||
'remaining_value': candidates_receipt.remaining_value + ( |
|||
-qty_difference * candidates_receipt.price_unit), |
|||
}) |
|||
correction_value = qty_difference * candidates_receipt.price_unit |
|||
else: |
|||
correction_value = qty_difference * move_id.product_id.standard_price |
|||
move_vals['value'] = move_id.value - correction_value |
|||
move_id.write(move_vals) |
|||
|
|||
if move_id.product_id.valuation == 'real_time': |
|||
move_id.with_context(force_valuation_amount=correction_value, forced_quantity=qty_difference)._account_entry_move() |
|||
if qty_difference > 0: |
|||
move_id.product_price_update_before_done(forced_qty=qty_difference) |
|||
return super(StockMoveLine, self).write(vals) |
After Width: | Height: | Size: 463 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 16 KiB |
@ -0,0 +1,354 @@ |
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-header-banner.png);background-repeat:no-repeat;background-size:100%;padding: 4% 0% 2% 15%;background-position-y: -107px;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="font-size: 35px;color: #fff;font-weight: 900;text-transform: uppercase;text-align: left;margin: 0;margin-bottom: 16px;"> |
|||
Costing method: Last Purchase Price |
|||
</h2> |
|||
<h3 class="oe_slogan" style="font-size: 25px;color: #fff;font-weight: 600;text-align: left;opacity: 1;margin: 0 !important;"> |
|||
Introducing new costing method 'Last Purchase Price' in Odoo |
|||
</h3> |
|||
<h5 class="oe_slogan" style="text-align: left;background: #fff;width: 293px;padding: 10px;color: #080808 !important;opacity: 1 !important;font-weight: 600;font-size: 20px;"> |
|||
<a style="color: #080808 !important;" href="https://www.cybrosys.com" target="_blank">Cybrosys Technologies</a> |
|||
</h5> |
|||
<a style="color: #080808 !important;" href="https://www.cybrosys.com" target="_blank"> |
|||
<div style="width: 215px;margin-left: 57%;text-align: center;background: #ffffff;height: 215px;border-radius: 100%;display: flex;justify-content: center;align-items: center;box-shadow: 0 0 12px 4px #00000059;"> |
|||
<img src="https://www.cybrosys.com/images/cybro-logo-oca.png" alt="cybrosys technologies" style="width: 180px;"/> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="padding: 3% 0% 3% 15%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Overview |
|||
</h2> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
This module allows you to update your product's cost as your last purchase price |
|||
and changes the stock valuation based on that |
|||
</h3> |
|||
</div> |
|||
|
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 300;margin: 0px !important;"> |
|||
Configuration |
|||
</h2> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
After installing the module, |
|||
Select the newly added costing method in product category. Provide 'Price Difference Account' too if you are |
|||
following automated inventory valuation. |
|||
</h3> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-banner1.png); background-repeat:no-repeat; background-size:cover;padding: 11% 0% 14% 15%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Features |
|||
</h2> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
A New Costing Method Is Added To The List And Can Be Chosen From Product Category Form. |
|||
</h3> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Cost Price Of Products Will Be Updated With Their Last Purchase Price |
|||
</h3> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Takes Last Purchase Price In Stock Valuation Report |
|||
</h3> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Automatically Posting Price Difference Related Accounting Entries To The |
|||
'Price Difference Account' When We Use Automated Inventory Valuation |
|||
</h3> |
|||
</div> |
|||
</section> |
|||
<!-----------------Screenshot Section-------------------------> |
|||
<section class="oe_container" style="padding: 3% 0% 0% 15%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Screenshots |
|||
</h2> |
|||
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Product category |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="prod_category.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Journal Item generated by the price change |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="journal_item.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
|
|||
<section class="oe_container" style="padding: 7px 0% 0% 3%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<a style="color: #080808 !important;" href="https://apps.odoo.com/apps/modules/browse?search=cybrosys" target="_blank"><img src="https://www.cybrosys.com/images/view-more-apps.jpg" alt="cybrosys technologies" style="width: 100%;margin-bottom: 50px;"/></a> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="padding: 1% 0% 0% 3%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Our Services |
|||
</h2> |
|||
<div style="display:flex;padding-top: 20px;justify-content: space-between;"> |
|||
<div style="flex-basis: 18%;"> |
|||
|
|||
<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"> |
|||
Odoo Customization |
|||
</a> |
|||
</h3> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
|
|||
<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"> |
|||
Odoo Implementation </a> |
|||
</h3> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
|
|||
<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"> |
|||
Odoo Integration |
|||
</a> |
|||
</h3> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
|
|||
<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"> |
|||
Odoo Support</a> |
|||
</h3> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
|
|||
<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"> |
|||
Hire Odoo Developers</a> |
|||
</h3> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="padding: 1% 0% 0% 3%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Our Industries |
|||
</h2> |
|||
<div style="display:flex;justify-content: space-between;flex-wrap:wrap;"> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
Trading |
|||
</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Easily procure and sell your products. |
|||
</h3> |
|||
</div> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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;"> |
|||
<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"> |
|||
Manufacturing</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Plan, track and schedule your operations. |
|||
</h3> |
|||
</div> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
Restaurant</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Run your bar or restaurant methodical. |
|||
</h3> |
|||
</div> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
POS</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Easy configuring and convivial selling. |
|||
</h3> |
|||
</div> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
E-commerce & Website</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Mobile friendly, awe-inspiring product pages. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
Hotel Management</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
An all-inclusive hotel management application. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
Education</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
A Collaborative platform for educational management. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
Service Management</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Keep track of services and invoice accordingly. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-footer-bg.png); background-repeat:no-repeat; background-size:100%;padding: 13% 0% 6% 0%;"> |
|||
<div class="oe_slogan" style="margin-top:10px !important;margin-bottom: 0px;"> |
|||
<div> |
|||
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="mailto:odoo@cybrosys.com"><i class="fa fa-envelope"></i> Email us </a> |
|||
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" 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 style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com/contact/"><i class="fa fa-check-square"></i> Request Customization </a> |
|||
</div> |
|||
<br> |
|||
<img src="https://www.cybrosys.com/images/logo.png" style="width: 190px; margin-bottom: 25px;margin-top: 30px;" 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;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;padding-left: 3px;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://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;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;padding-left: 3px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td> |
|||
</div> |
|||
</div> |
|||
</section> |
After Width: | Height: | Size: 114 KiB |
After Width: | Height: | Size: 65 KiB |
@ -0,0 +1,18 @@ |
|||
Top/Least Selling Product Report v13 |
|||
==================================== |
|||
Top Selling and Least Selling Product Reports |
|||
|
|||
Installation |
|||
============ |
|||
- www.odoo.com/documentation/12.0/setup/install.html |
|||
- Install our custom addon |
|||
|
|||
Configuration |
|||
============= |
|||
|
|||
No additional configurations needed |
|||
|
|||
Credits |
|||
======= |
|||
Developer: Ajmal JK @ cybrosys, Contact: odoo@cybrosys.com |
|||
V13 : Sreenath |
@ -0,0 +1,3 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from . import wizard |
|||
from . import report |
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
{ |
|||
'name': 'Top/Least Selling Product Report', |
|||
'version': '13.0.1.0.0', |
|||
'summary': 'Top Selling and Least Selling Product Reports', |
|||
'description': 'Top Selling Products,Fast Moving Products,Most Selling Products,Top Growing Products,Least Selling Products,', |
|||
'author': 'Cybrosys Techno solutions', |
|||
'maintainer': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'website': 'https://www.cybrosys.com', |
|||
'depends': ['base','sale_management','stock','sale'], |
|||
'category': 'Sale', |
|||
'demo': [], |
|||
'data': ['wizard/top_selling_wizard.xml', |
|||
'report/top_selling_report.xml', |
|||
'report/top_selling_report_template.xml'], |
|||
'installable': True, |
|||
'images': ['static/description/banner.png'], |
|||
'qweb': [], |
|||
'license': 'AGPL-3', |
|||
'demo': [], |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': False, |
|||
} |
@ -0,0 +1,6 @@ |
|||
## Module <top_selling_product_report> |
|||
|
|||
#### 01.01.2020 |
|||
#### Version 13.0.1.0.0 |
|||
##### ADD |
|||
- Initial commit for Top Selling Product Report |
@ -0,0 +1,2 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from . import top_selling_report |
@ -0,0 +1,96 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from odoo import models |
|||
from datetime import timedelta, datetime, date |
|||
from dateutil.relativedelta import relativedelta |
|||
import dateutil.relativedelta |
|||
|
|||
|
|||
class CustomReport(models.AbstractModel): |
|||
_name = "report.top_selling_product_report.top_selling_reports" |
|||
|
|||
def _get_report_values(self, docids, data=None): |
|||
|
|||
limit_value = data['period'] if data['period'] else None |
|||
date_option = data['date'] |
|||
date_selected_from = None |
|||
date_selected = None |
|||
date_selected_to = None |
|||
other_details = {} |
|||
|
|||
company_id = data['company'] |
|||
warehouse_id = data['warehouse'] |
|||
|
|||
from_date = date.today() - dateutil.relativedelta.relativedelta(years=100) |
|||
to_date = date.today() + dateutil.relativedelta.relativedelta(days=1) |
|||
|
|||
if date_option == 'days': |
|||
|
|||
from_date = date.today() - dateutil.relativedelta.relativedelta(days=11) |
|||
to_date = date.today() + dateutil.relativedelta.relativedelta(days=1) |
|||
date_selected = "Last 10 Days" |
|||
|
|||
elif date_option == 'last_month': |
|||
|
|||
date_limit = date.today() - dateutil.relativedelta.relativedelta(months=1) |
|||
from_date = date_limit.replace(day=1) |
|||
to_date = (date_limit + relativedelta(months=1, day=1)) - timedelta(1) |
|||
date_selected = "Last Month" |
|||
|
|||
elif date_option == 'curr_month': |
|||
|
|||
from_date = date.today().replace(day=1) |
|||
to_date = date.today() + dateutil.relativedelta.relativedelta(days=1) |
|||
date_selected = "Current Month" |
|||
|
|||
elif date_option == 'last_year': |
|||
|
|||
date_limit = date.today() - dateutil.relativedelta.relativedelta(years=1) |
|||
from_date = date_limit.replace(day=1) |
|||
to_date = (date_limit + relativedelta(months=12, day=1)) - timedelta(1) |
|||
date_selected = "Last Year" |
|||
|
|||
elif date_option == 'curr_year': |
|||
|
|||
date_limit = date.today() - dateutil.relativedelta.relativedelta(years=1) |
|||
from_date = date.today().replace(month=1,day=1) |
|||
to_date = date.today() + dateutil.relativedelta.relativedelta(days=1) |
|||
date_selected = "Current Year" |
|||
|
|||
elif date_option == 'select_period': |
|||
|
|||
from_date = data['from_date'] |
|||
to_date = data['to_date'] |
|||
date_selected_from = from_date |
|||
date_selected_to = to_date |
|||
|
|||
other_details.update({ |
|||
|
|||
'limit': limit_value, |
|||
'least': data['least'], |
|||
'range': date_selected, |
|||
'date_selected_from': date_selected_from, |
|||
'date_selected_to': date_selected_to , |
|||
}) |
|||
|
|||
cr = self._cr |
|||
order = 'asc' if data['least'] else 'desc' |
|||
company_id = str(tuple(company_id)) if len(company_id) > 1 else "("+str(company_id[0])+")" |
|||
warehouse_id = str(tuple(warehouse_id)) if len(warehouse_id) > 1 else "("+str(warehouse_id[0])+")" |
|||
limit_clause = " limit'%s'"%limit_value if limit_value else "" |
|||
|
|||
query = ("""select sl.name as product_name,sum(product_uom_qty),pu.name from sale_order_line sl |
|||
JOIN sale_order so ON sl.order_id = so.id |
|||
JOIN uom_uom pu on sl.product_uom = pu.id |
|||
where so.date_order::DATE >= '%s'::DATE and |
|||
so.date_order::DATE <= '%s'::DATE and |
|||
sl.state = 'sale' and so.company_id in %s |
|||
and so.warehouse_id in %s |
|||
group by sl.name,pu.name order by sum %s""" % (from_date, to_date, company_id, warehouse_id, order)) + limit_clause |
|||
cr.execute(query) |
|||
dat = cr.dictfetchall() |
|||
|
|||
return{ |
|||
'data': dat, |
|||
'other': other_details, |
|||
} |
|||
|
@ -0,0 +1,10 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
|
|||
<report id="top_selling_pdf" |
|||
string="Top Selling Product Report" |
|||
model="top.selling" |
|||
report_type="qweb-pdf" |
|||
file="top_selling_product_report.top_selling_reports" |
|||
name="top_selling_product_report.top_selling_reports" /> |
|||
</odoo> |
@ -0,0 +1,95 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<template id="top_selling_reports"> |
|||
<t t-call="web.html_container"> |
|||
<t t-call="top_selling_product_report.internal_layout"> |
|||
<div class="page"> |
|||
<div class="oe_structure"/> |
|||
<center> |
|||
<t t-if="other['least']"> |
|||
<h2 style="color: #000;">Least Selling Products</h2> |
|||
</t> |
|||
<t t-if="not other['least']"> |
|||
<h2 style="color: #000;">Top Selling Products</h2> |
|||
</t> |
|||
</center> |
|||
<div class="oe_structure"/> |
|||
<br /> |
|||
<span> |
|||
<t t-if="other['range']"> |
|||
<b>Top Product of :</b> <t t-esc="other['range']"/><br /> |
|||
</t> |
|||
<t t-if="other['date_selected_from']"> |
|||
<b>Top Product of :</b> <t t-esc="other['date_selected_from']"/> To <t t-esc="other['date_selected_to']"/><br /> |
|||
</t> |
|||
<t t-if="other['limit']"> |
|||
<b>Product Range :</b> <t t-esc="other['limit']"/> Products<br /> |
|||
</t> |
|||
</span> |
|||
</div> |
|||
<br /> |
|||
<table class="table table-bordered" style="border: 1px solid #000;"> |
|||
<tbody> |
|||
<tr> |
|||
<th style="text-align: center;color: #000;text-color: #000;">Product</th> |
|||
<th style="text-align: center;color: #000;text-color: #000;">Sold Quantity</th> |
|||
<th style="text-align: center;color: #000;text-color: #000;">UoM</th> |
|||
</tr> |
|||
<tr t-foreach="data" t-as="value"> |
|||
<td style="height:5px;color: #000;text-color: #000"><t t-esc="value['product_name']"/></td> |
|||
<td style="height:5px;text-align: center;color: #000;text-color: #000;"><t t-esc="value['sum']"/></td> |
|||
<td style="height:5x;text-align: center;color: #000;text-color: #000;"><t t-esc="value['name']"/></td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</t> |
|||
</t> |
|||
</template> |
|||
<template id="internal_layout"> |
|||
<t t-if="not o and doc"> |
|||
<t t-set="o" t-value="doc"/> |
|||
</t> |
|||
|
|||
<t t-if="o and 'company_id' in o"> |
|||
<t t-set="company" t-value="o.company_id.sudo()"/> |
|||
</t> |
|||
<t t-if="not o or not 'company_id' in o"> |
|||
<t t-set="company" t-value="res_company"/> |
|||
</t> |
|||
<div class="header o_boxed_header"> |
|||
<div class="row mb8"> |
|||
<div class="col-xs-6"> |
|||
<img t-if="company.logo" t-att-src="'data:image/png;base64,%s' % to_text(company.logo)"/> |
|||
</div> |
|||
<div class="col-xs-6 text-right mb4"> |
|||
<h4 class="mt0" t-field="company.report_header"/> |
|||
<div name="company_address" class="mb4"> |
|||
<span style="color: #000;font-color:#000000;" class="company_address" t-field="company.partner_id" |
|||
t-field-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": true}'/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div style="border-bottom: 1px solid black;"/> |
|||
</div> |
|||
<div class="article o_report_layout_background"> |
|||
<t t-raw="0" /> |
|||
</div> |
|||
<div class="footer"> |
|||
<div class="text-center" style="border-top: 1px solid black;"> |
|||
<ul class="list-inline mb4"> |
|||
<li t-if="company.phone">Phone: <span t-field="company.phone"/></li> |
|||
<li t-if="company.email">Email: <span t-field="company.email"/></li> |
|||
<li t-if="company.website">Web: <span t-field="company.website"/></li> |
|||
<li t-if="company.vat"><t t-esc="company.country_id.vat_label or 'TIN'"/>: <span t-field="company.vat"/></li> |
|||
</ul> |
|||
<div name="financial_infos"> |
|||
<span t-field="company.report_footer"/> |
|||
</div> |
|||
<div class="text-muted"> |
|||
Page: <span class="page"/> / <span class="topage"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
</odoo> |
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 36 KiB |
@ -0,0 +1,359 @@ |
|||
|
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-header-banner.png);background-repeat:no-repeat;background-size:100%;padding: 4% 0% 2% 15%;background-position-y: -107px;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="font-size: 35px;color: #fff;font-weight: 900;text-transform: uppercase;text-align: left;margin: 0;margin-bottom: 16px;"> |
|||
Top/Least Selling Product Report |
|||
</h2> |
|||
<h3 class="oe_slogan" style="font-size: 25px;color: #fff;font-weight: 600;text-align: left;opacity: 1;margin: 0 !important;"> |
|||
Top Selling and Least Selling Product Reports |
|||
</h3> |
|||
<h5 class="oe_slogan" style="text-align: left;background: #fff;width: 293px;padding: 10px;color: #080808 !important;opacity: 1 !important;font-weight: 600;font-size: 20px;"> |
|||
<a style="color: #080808 !important;" href="https://www.cybrosys.com" target="_blank">Cybrosys Technologies</a> |
|||
</h5> |
|||
<a style="color: #080808 !important;" href="https://www.cybrosys.com" target="_blank"> |
|||
<div style="width: 215px;margin-left: 57%;text-align: center;background: #ffffff;height: 215px;border-radius: 100%;display: flex;justify-content: center;align-items: center;box-shadow: 0 0 12px 4px #00000059;"> |
|||
<img src="https://www.cybrosys.com/images/cybro-logo-oca.png" alt="cybrosys technologies" style="width: 136px;"/> </div> |
|||
</a> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container" style="padding: 1% 0% 3% 15%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Overview |
|||
</h2> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
This module helps in generating top selling and least selling product pdf reports. One can generate top/least selling product report |
|||
according to the company and warehouse for range of period. |
|||
</h3> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-banner1.png); background-repeat:no-repeat; background-size:cover;padding: 10% 0% 10% 15%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Features |
|||
</h2> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Generates top/least selling product report. |
|||
</h3> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Generates reports for certain time periods. |
|||
</h3> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Report for a range of product. |
|||
</h3> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Screenshots |
|||
</h2> |
|||
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
When you install this module, an extra menu named Top/Least Selling Product is created. |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="top-selling-product-report1.gif" alt="" style="width: 95%;"/> |
|||
</div> |
|||
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
|
|||
Go to <b>Sales</b> --> <b>Reporting</b> --> <b>Top/Least Selling Product</b>.<br> |
|||
A wizard will be opened once the user clicks on it..<br> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Choose companies and warehouses for generating report. <br> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Select a time period from 'Top Selling product of' selection field.<br> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
Select 'Least Selling Product' to generate least selling product report.<br> |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="top-selling-product-report2.jpg" alt="" style="width: 95%;"/> |
|||
</div> |
|||
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
|
|||
Click the button <b>Print</b> to least selling product report in PDF format.<br> |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="top-selling-product-report4.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
<h3 class="oe_slogan" style="text-align: left;padding: 5% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
<img src="https://www.cybrosys.com/images/ico-tick.png"> |
|||
For 'Top selling product report' deselect 'Least Selling Product'.<br> |
|||
Click the button <b>Print</b> to get top selling product report in PDF format.<br> |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="top-selling-product-report3.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="padding: 7px 0% 0% 3%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<a style="color: #080808 !important;" href="https://apps.odoo.com/apps/modules/browse?search=cybrosys" target="_blank"><img src="https://www.cybrosys.com/images/view-more-apps.jpg" alt="cybrosys technologies" style="width: 100%;margin-bottom: 50px;"/></a> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container" style="padding: 1% 0% 0% 3%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Our Services |
|||
</h2> |
|||
<div style="display:flex;padding-top: 20px;justify-content: space-between;"> |
|||
<div style="flex-basis: 18%;"> |
|||
|
|||
<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"> |
|||
Odoo Customization |
|||
</a> |
|||
</h3> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
|
|||
<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"> |
|||
Odoo Implementation </a> |
|||
</h3> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
|
|||
<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"> |
|||
Odoo Integration |
|||
</a> |
|||
</h3> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
|
|||
<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"> |
|||
Odoo Support</a> |
|||
</h3> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
|
|||
<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"> |
|||
Hire Odoo Developers</a> |
|||
</h3> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="padding: 1% 0% 0% 3%;"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> |
|||
Our Industries |
|||
</h2> |
|||
<div style="display:flex;justify-content: space-between;flex-wrap:wrap;"> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
Trading |
|||
</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Easily procure and sell your products. |
|||
</h3> |
|||
</div> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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;"> |
|||
<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"> |
|||
Manufacturing</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Plan, track and schedule your operations. |
|||
</h3> |
|||
</div> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
Restaurant</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Run your bar or restaurant methodical. |
|||
</h3> |
|||
</div> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
POS</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Easy configuring and convivial selling. |
|||
</h3> |
|||
</div> |
|||
|
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
E-commerce & Website</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Mobile friendly, awe-inspiring product pages. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
Hotel Management</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
An all-inclusive hotel management application. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
Education</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
A Collaborative platform for educational management. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
|
|||
<div style="width:30%; float:left;"> |
|||
<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"> |
|||
Service Management</a> |
|||
</h3> |
|||
<h3 class="oe_slogan" style=" text-align: left;font-size: 13px;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;"> |
|||
Keep track of services and invoice accordingly. |
|||
</h3> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-footer-bg.png); background-repeat:no-repeat; background-size:100%;padding: 13% 0% 6% 0%;"> |
|||
<div class="oe_slogan" style="margin-top:10px !important;margin-bottom: 0px;"> |
|||
<div> |
|||
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="mailto:odoo@cybrosys.com"><i class="fa fa-envelope"></i> Email us </a> |
|||
<a style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" 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 style="color: #5c5c5c !important;border-radius: 0;background: none;border: none;background: #fff;box-shadow: 0 10px 40px 0 rgba(62,57,107,0.07), 0 2px 9px 0 rgba(62, 57, 107, 0.05);border-radius: 30px;font-size: 12px;padding: 9px 26px;margin-right: 9px;width: 200px;text-transform: capitalize;" class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com/contact/"><i class="fa fa-check-square"></i> Request Customization </a> |
|||
</div> |
|||
<br> |
|||
<img src="https://www.cybrosys.com/images/logo.png" style="width: 190px; margin-bottom: 25px;margin-top: 30px;" 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;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;padding-left: 3px;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://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;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;padding-left: 3px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td> |
|||
</div> |
|||
</div> |
|||
</section> |
After Width: | Height: | Size: 123 KiB |
After Width: | Height: | Size: 107 KiB |
After Width: | Height: | Size: 176 KiB |
After Width: | Height: | Size: 197 KiB |
@ -0,0 +1,2 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from . import top_selling_wizard |
@ -0,0 +1,44 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from odoo import fields, models |
|||
|
|||
|
|||
class TopSellingWizard(models.TransientModel): |
|||
|
|||
_name = 'top.selling' |
|||
|
|||
from_date = fields.Date(string='From') |
|||
to_date = fields.Date(string='To') |
|||
date = fields.Selection([('days', 'Last 10 Days'), ('curr_month', 'Current Month'), ('last_month', 'Last Month'), |
|||
('curr_year', 'Current Year'), ('last_year', 'Last Year'), ('select_period', 'Select Period')], |
|||
string="Top Selling product of", default='days') |
|||
period = fields.Char(string="Products Range", help="Enter number of products in report.") |
|||
least = fields.Boolean(string="Least Selling Product", default=False) |
|||
company = fields.Many2many('res.company', default=lambda self: self.env.user.company_id, string="Company") |
|||
warehouse = fields.Many2many('stock.warehouse', string="Warehouse") |
|||
|
|||
|
|||
def print_report(self): |
|||
|
|||
company_id = [] |
|||
warehouse_id = [] |
|||
|
|||
if self.company: |
|||
for val in self.company: |
|||
company_id.append(val.id) |
|||
else: |
|||
company = self.env['res.company'].search([]) |
|||
for val in company: |
|||
company_id.append(val.id) |
|||
|
|||
if self.warehouse: |
|||
for val in self.warehouse: |
|||
warehouse_id.append(val.id) |
|||
else: |
|||
warehouse = self.env['stock.warehouse'].search([]) |
|||
for val in warehouse: |
|||
warehouse_id.append(val.id) |
|||
|
|||
data = {'date': self.date, 'period': self.period, 'least': self.least, 'from_date': self.from_date, |
|||
'to_date': self.to_date, 'company': company_id, 'warehouse': warehouse_id} |
|||
|
|||
return self.env.ref('top_selling_product_report.top_selling_pdf').report_action(self, data=data) |
@ -0,0 +1,50 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
|
|||
<odoo> |
|||
<record id="top_selling_wizard_report" model="ir.ui.view"> |
|||
<field name="name">Top/Least Selling Products</field> |
|||
<field name="model">top.selling</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Stock Report"> |
|||
<group> |
|||
<group string="Company"> |
|||
<field name="company" widget="many2many_tags"/> |
|||
</group> |
|||
<group string="Warehouses"> |
|||
<field name="warehouse" widget="many2many_tags"/> |
|||
</group> |
|||
<group> |
|||
<field name="date"/> |
|||
<field name="period"/> |
|||
</group> |
|||
<group> |
|||
<field name="from_date" attrs="{'invisible': [('date', '!=', 'select_period')],'required':[('date','=','select_period')]}"/> |
|||
<field name="to_date" attrs="{'invisible': [('date', '!=', 'select_period')],'required':[('date','=','select_period')]}"/> |
|||
</group> |
|||
</group> |
|||
<group> |
|||
<field name="least"/> |
|||
</group> |
|||
|
|||
<footer> |
|||
<button name="print_report" type="object" string="Print" class="oe_highlight"/> |
|||
<button string="Cancel" class="btn btn-default" special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="top_selling_wizard" model="ir.actions.act_window"> |
|||
<field name="name">Top/Least Selling Products</field> |
|||
<field name="res_model">top.selling</field> |
|||
<field name="view_mode">form</field> |
|||
<field name="target">new</field> |
|||
</record> |
|||
|
|||
<menuitem id="top_selling_report" |
|||
name="Top/Least Selling Products" |
|||
parent="sale.menu_sale_report" |
|||
action="top_selling_wizard" |
|||
groups="sales_team.group_sale_manager" |
|||
/> |
|||
</odoo> |