@ -0,0 +1,47 @@ |
|||
.. image:: https://img.shields.io/badge/licence-AGPL--1-blue.svg |
|||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html |
|||
:alt: License: AGPL-3 |
|||
|
|||
Barcode scanning support for sale and Purchase v13 |
|||
================================================== |
|||
|
|||
This module will help you to use barcode scanner in sales and purchase. |
|||
|
|||
Depends |
|||
======= |
|||
[sale_management] addon Odoo |
|||
[purchase] addon Odoo |
|||
|
|||
Configuration |
|||
============= |
|||
* No additional configurations needed |
|||
|
|||
Company |
|||
------- |
|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
|||
|
|||
Credits |
|||
------- |
|||
* Developer: Sreejith P @ cybrosys, Contact: odoo@cybrosys.com |
|||
Version 13: Vaishnavi B @cybrosys,Contact: odoo@cybrosys.com |
|||
Contacts |
|||
-------- |
|||
* Mail Contact : odoo@cybrosys.com |
|||
* Website : https://cybrosys.com |
|||
|
|||
Bug Tracker |
|||
----------- |
|||
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. |
|||
|
|||
Maintainer |
|||
========== |
|||
.. image:: https://cybrosys.com/images/logo.png |
|||
:target: https://cybrosys.com |
|||
|
|||
This module is maintained by Cybrosys Technologies. |
|||
|
|||
For support and more information, please visit `Our Website <https://cybrosys.com/>`__ |
|||
|
|||
Further information |
|||
=================== |
|||
HTML Description: `<static/description/index.html>`__ |
@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Sreejith P (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
from . import models |
@ -0,0 +1,43 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Sreejith P (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
{ |
|||
'name': 'Barcode scanning support for sale and Purchase', |
|||
'version': '13.0.1.0.0', |
|||
'category': 'Sales', |
|||
'summary': 'This module will help you to use barcode scanner in sales and purchase.', |
|||
'author': 'Cybrosys Techno solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'website': 'https://www.cybrosys.com', |
|||
'depends': ['purchase', 'sale_management'], |
|||
'demo': [], |
|||
'data': [ |
|||
'views/sale_order_line.xml', |
|||
'views/purchase_order_line.xml', |
|||
], |
|||
'installable': True, |
|||
'application': False, |
|||
'auto_install': False, |
|||
'images': ['static/description/banner.jpg'], |
|||
'qweb': [], |
|||
'license': 'AGPL-3', |
|||
} |
@ -0,0 +1,6 @@ |
|||
## Module <barcode_scanning_sale_purchase> |
|||
|
|||
#### 28.10.2019 |
|||
#### Version 13.0.1.0.0 |
|||
##### ADD |
|||
- Migrated to version 13 |
@ -0,0 +1,24 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Sreejith P (<https://www.cybrosys.com>) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
from . import sale_order |
|||
from . import purchase_order |
@ -0,0 +1,16 @@ |
|||
from odoo import api, models, fields |
|||
|
|||
|
|||
class PurchaseOrderLines(models.Model): |
|||
_inherit = "purchase.order.line" |
|||
|
|||
barcode_scan = fields.Char(string='Product Barcode', help="Here you can provide the barcode for the product") |
|||
|
|||
@api.onchange('barcode_scan') |
|||
def _onchange_barcode_scan(self): |
|||
product_rec = self.env['product.product'] |
|||
if self.barcode_scan: |
|||
product = product_rec.search([('barcode', '=', self.barcode_scan)]) |
|||
self.product_id = product.id |
|||
|
|||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
@ -0,0 +1,16 @@ |
|||
from odoo import api, models, fields |
|||
|
|||
|
|||
class SaleOrderLines(models.Model): |
|||
_inherit = 'sale.order.line' |
|||
|
|||
barcode_scan = fields.Char(string='Product Barcode', help="Here you can provide the barcode for the product") |
|||
|
|||
@api.onchange('barcode_scan') |
|||
def _onchange_barcode_scan(self): |
|||
product_rec = self.env['product.product'] |
|||
if self.barcode_scan: |
|||
product = product_rec.search([('barcode', '=', self.barcode_scan)]) |
|||
self.product_id = product.id |
|||
|
|||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
After Width: | Height: | Size: 138 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 13 KiB |
@ -0,0 +1,305 @@ |
|||
|
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-header-banner.png); background-repeat:no-repeat; background-size:cover;padding: 13% 0% 25% 15%;"> |
|||
<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;"> |
|||
Barcode scanning support for sale and Purchase |
|||
</h2> |
|||
<h3 class="oe_slogan" style="font-size: 25px;color: #fff;font-weight: 600;text-align: left;opacity: 1;margin: 0 !important;"> |
|||
This module will help you to use barcode scanner in sales and purchase module. |
|||
</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">Cybrosys Technologies</a> |
|||
</h5> |
|||
</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;"> |
|||
A module that can use in sales and purchase for barcode scanning. |
|||
</h3> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-banner.png); background-repeat:no-repeat; background-size:cover;padding: 19% 0% 30% 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"> |
|||
Use barcode in Sales order |
|||
</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"> |
|||
Use barcode in Purchase order |
|||
</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"> |
|||
Product Form |
|||
</h3> |
|||
<p> |
|||
Provide a barcode for the product.<br> |
|||
</p> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="product_barcode.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"> |
|||
Sale Order |
|||
</h3> |
|||
<p> |
|||
Just click on the barcode field and scan the product now the item is added to the order line.<br> |
|||
</p> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="sale_order.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"> |
|||
>Purchase Order |
|||
</h3> |
|||
<p> |
|||
Just click on the barcode field and scan the product now the item is added to the order line.<br> |
|||
</p> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="purchase_order.png" alt="" style="width: 95%;"/> |
|||
</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 Service |
|||
</h2> |
|||
<div style="display:flex;padding-top: 20px;justify-content: space-between;"> |
|||
<div style="flex-basis: 18%;"> |
|||
<a href="https://www.cybrosys.com/odoo-customization-and-installation/" target="_blank"> |
|||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> |
|||
<img src="https://www.cybrosys.com/images/odoo-customization.png" style="width: 100%;border-radius: 100%;"/> |
|||
</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 <br/>Customization |
|||
</h3> |
|||
</a> |
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
<a href="https://www.cybrosys.com/odoo-erp-implementation/" target="_blank"> |
|||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> |
|||
<img src="https://www.cybrosys.com/images/odoo-erp-implementation.png" style="width: 100%;border-radius: 100%;"/> |
|||
</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 <br/>Implementation |
|||
</h3> |
|||
</a> |
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
<a href="https://www.cybrosys.com/odoo-erp-integration/" target="_blank"> |
|||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> |
|||
<img src="https://www.cybrosys.com/images/odoo-erp-integration.png" style="width: 100%;border-radius: 100%;"/> |
|||
</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 <br/>Integration |
|||
</h3> |
|||
</a> |
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
<a href="https://www.cybrosys.com/odoo-erp-support/" target="_blank"> |
|||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> |
|||
<img src="https://www.cybrosys.com/images/odoo-erp-support.png" style="width: 100%;border-radius: 100%;"/> |
|||
</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 <br/>Support |
|||
</h3> |
|||
</a> |
|||
</div> |
|||
<div style="flex-basis: 18%;"> |
|||
<a href="https://www.cybrosys.com/hire-odoo-developer/" target="_blank"> |
|||
<div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> |
|||
<img src="https://www.cybrosys.com/images/hire-odoo-developer.png" style="width: 100%;border-radius: 100%;"/> |
|||
</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 <br/>Odoo Developer |
|||
</h3> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="padding: 3% 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;"> |
|||
<a href="https://www.cybrosys.com/odoo/industries/best-trading-erp/" target="_blank"> |
|||
<div style="width:30%; float:left;"> |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> |
|||
<img src="https://www.cybrosys.com/images/odoo-index-industry-1.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> |
|||
</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: 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> |
|||
</a> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
<a href="https://www.cybrosys.com/odoo/industries/manufacturing-erp-software/" target="_blank"> |
|||
<div style="width:30%; float:left;"> |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> |
|||
<img src="https://www.cybrosys.com/images/odoo-index-industry-2.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> |
|||
</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: 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> |
|||
</a> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
<a href="https://www.cybrosys.com/odoo/industries/restaurant-management/" target="_blank"> |
|||
<div style="width:30%; float:left;"> |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> |
|||
<img src="https://www.cybrosys.com/images/odoo-index-industry-3.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> |
|||
</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: 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> |
|||
</a> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
<a href="https://www.cybrosys.com/odoo/industries/pos/" target="_blank"> |
|||
<div style="width:30%; float:left;"> |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> |
|||
<img src="https://www.cybrosys.com/images/odoo-index-industry-4.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> |
|||
|
|||
</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: 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> |
|||
</a> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
<a href="https://www.cybrosys.com/odoo/industries/ecommerce-website/" target="_blank"> |
|||
<div style="width:30%; float:left;"> |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> |
|||
<img src="https://www.cybrosys.com/images/odoo-index-industry-5.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> |
|||
|
|||
</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: 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> |
|||
</a> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
<a href="https://www.cybrosys.com/odoo/industries/hotel-management-erp/" target="_blank"> |
|||
<div style="width:30%; float:left;"> |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> |
|||
<img src="https://www.cybrosys.com/images/odoo-index-industry-6.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> |
|||
|
|||
</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: 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> |
|||
</a> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
<a href="https://www.cybrosys.com/odoo/industries/education-erp-software/" target="_blank"> |
|||
<div style="width:30%; float:left;"> |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> |
|||
<img src="https://www.cybrosys.com/images/odoo-index-industry-7.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> |
|||
|
|||
</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: 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> |
|||
</a> |
|||
</div> |
|||
<div style="flex-basis: 32%;padding-top: 20px;"> |
|||
<a href="https://www.cybrosys.com/odoo/industries/service-management/" target="_blank"> |
|||
<div style="width:30%; float:left;"> |
|||
<div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> |
|||
<img src="https://www.cybrosys.com/images/odoo-index-industry-8.png" alt="Odoo Industry" style=" border-radius: 100%;width:100%;"/> |
|||
|
|||
</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: 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> |
|||
</a> |
|||
</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: 14px;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: 14px;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: 14px;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> |
After Width: | Height: | Size: 239 KiB |
After Width: | Height: | Size: 258 KiB |
After Width: | Height: | Size: 265 KiB |
@ -0,0 +1,15 @@ |
|||
<?xml version="1.0" encoding="utf-8" ?> |
|||
<odoo> |
|||
<data> |
|||
<record id="purchase_order_view_inherit_barcode1" model="ir.ui.view"> |
|||
<field name="name">purchase.order.form.inherit</field> |
|||
<field name="model">purchase.order</field> |
|||
<field name="inherit_id" ref="purchase.purchase_order_form"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//field[@name='order_line']/tree/field[@name='product_id']" position="before"> |
|||
<field name ="barcode_scan"/> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,15 @@ |
|||
<?xml version="1.0" encoding="utf-8" ?> |
|||
<odoo> |
|||
<data> |
|||
<record id="sale_order_view_inherit_barcode1" model="ir.ui.view"> |
|||
<field name="name">sale.order.form.inherit</field> |
|||
<field name="model">sale.order</field> |
|||
<field name="inherit_id" ref="sale.view_order_form"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//field[@name='order_line']/tree/field[@name='product_id']" position="before"> |
|||
<field name ="barcode_scan"/> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
</data> |
|||
</odoo> |
@ -0,0 +1,39 @@ |
|||
Laundry Management v13 |
|||
====================== |
|||
This module helps you to manage laundry service. |
|||
|
|||
Configuration |
|||
============= |
|||
* No additional configurations needed |
|||
|
|||
Company |
|||
------- |
|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
|||
|
|||
Credits |
|||
------- |
|||
* Developers: Jesni Banu@cybrosys |
|||
Nilmar Shereef@cybrosys |
|||
Version 13: Nimisha Murali@cybrosys |
|||
|
|||
Contacts |
|||
-------- |
|||
* Mail Contact : odoo@cybrosys.com |
|||
* Website : https://cybrosys.com |
|||
|
|||
Bug Tracker |
|||
----------- |
|||
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. |
|||
|
|||
Maintainer |
|||
========== |
|||
.. image:: https://cybrosys.com/images/logo.png |
|||
:target: https://cybrosys.com |
|||
|
|||
This module is maintained by Cybrosys Technologies. |
|||
|
|||
For support and more information, please visit `Our Website <https://cybrosys.com/>`__ |
|||
|
|||
Further information |
|||
=================== |
|||
HTML Description: `<static/description/index.html>`__ |
@ -0,0 +1,24 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Jesni Banu and Nilmar Shereef(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
from . import models |
|||
from . import reports |
@ -0,0 +1,49 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Jesni Banu and Nilmar Shereef(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
{ |
|||
'name': 'Laundry Management', |
|||
'version': '13.0.1.0.0', |
|||
'summary': """Complete Laundry Service Management""", |
|||
'description': 'This module is very useful to manage all process of laundry service', |
|||
"category": "Industries", |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'website': "https://www.cybrosys.com", |
|||
'depends': ['base', 'mail', 'sale', 'account'], |
|||
'data': [ |
|||
'data/data.xml', |
|||
'security/laundry_security.xml', |
|||
'security/ir.model.access.csv', |
|||
'views/laundry_view.xml', |
|||
'views/washing_view.xml', |
|||
'views/config_view.xml', |
|||
'views/laundry_report.xml', |
|||
'views/laundry_label.xml', |
|||
], |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'AGPL-3', |
|||
'demo': [], |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': False, |
|||
} |
@ -0,0 +1,7 @@ |
|||
<?xml version="1.0" encoding="utf-8" ?> |
|||
<odoo> |
|||
<record id="laundry_service" model="product.product"> |
|||
<field name="name">Laundry Service</field> |
|||
<field name="type">service</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,9 @@ |
|||
## Module <laundry_management> |
|||
|
|||
#### 28.10.2019 |
|||
#### Version 13.0.1.0.0 |
|||
#### ADD |
|||
Initial commit for Laundry Management |
|||
|
|||
|
|||
|
@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Jesni Banu and Nilmar Shereef(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
from . import laundry |
@ -0,0 +1,438 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Jesni Banu and Nilmar Shereef(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
import time |
|||
from datetime import datetime |
|||
from odoo import models, fields, api, _ |
|||
from odoo.exceptions import UserError |
|||
|
|||
|
|||
class LaundryManagement(models.Model): |
|||
_name = 'laundry.order' |
|||
_inherit = 'mail.thread' |
|||
_description = "Laundry Order" |
|||
_order = 'order_date desc, id desc' |
|||
|
|||
@api.model |
|||
def create(self, vals): |
|||
vals['name'] = self.env['ir.sequence'].next_by_code('laundry.order') |
|||
return super(LaundryManagement, self).create(vals) |
|||
|
|||
@api.depends('order_lines') |
|||
def get_total(self): |
|||
total = 0 |
|||
for obj in self: |
|||
for each in obj.order_lines: |
|||
total += each.amount |
|||
obj.total_amount = total |
|||
|
|||
def confirm_order(self): |
|||
self.state = 'order' |
|||
sale_obj = self.env['sale.order'].create({'partner_id': self.partner_id.id, |
|||
'partner_invoice_id': self.partner_invoice_id.id, |
|||
'partner_shipping_id': self.partner_shipping_id.id}) |
|||
self.sale_obj = sale_obj |
|||
product_id = self.env.ref('laundry_management.laundry_service') |
|||
self.env['sale.order.line'].create({'product_id': product_id.id, |
|||
'name': 'Laundry Service', |
|||
'price_unit': self.total_amount, |
|||
'order_id': sale_obj.id |
|||
}) |
|||
for each in self: |
|||
for obj in each.order_lines: |
|||
self.env['washing.washing'].create({'name': obj.product_id.name + '-Washing', |
|||
'user_id': obj.washing_type.assigned_person.id, |
|||
'description': obj.description, |
|||
'laundry_obj': obj.id, |
|||
'state': 'draft', |
|||
'washing_date': datetime.now().strftime('%Y-%m-%d %H:%M:%S')}) |
|||
|
|||
def create_invoice(self): |
|||
if self.sale_obj.state in ['draft', 'sent']: |
|||
self.sale_obj.action_confirm() |
|||
self.invoice_status = self.sale_obj.invoice_status |
|||
return { |
|||
'name': 'Create Invoice', |
|||
'view_type': 'form', |
|||
'view_mode': 'form', |
|||
'res_model': 'sale.advance.payment.inv', |
|||
'type': 'ir.actions.act_window', |
|||
'context': {'laundry_sale_obj': self.sale_obj.id}, |
|||
'target': 'new' |
|||
} |
|||
|
|||
def return_dress(self): |
|||
self.state = 'return' |
|||
|
|||
|
|||
def cancel_order(self): |
|||
self.state = 'cancel' |
|||
|
|||
|
|||
def _invoice_count(self): |
|||
wrk_ordr_ids = self.env['account.move'].search([('invoice_origin', '=', self.sale_obj.name)]) |
|||
self.invoice_count = len(wrk_ordr_ids) |
|||
|
|||
|
|||
def _work_count(self): |
|||
wrk_ordr_ids = self.env['washing.washing'].search([('laundry_obj.laundry_obj.id', '=', self.id)]) |
|||
self.work_count = len(wrk_ordr_ids) |
|||
|
|||
|
|||
def action_view_laundry_works(self): |
|||
|
|||
work_obj = self.env['washing.washing'].search([('laundry_obj.laundry_obj.id', '=', self.id)]) |
|||
print(work_obj) |
|||
work_ids = [] |
|||
for each in work_obj: |
|||
work_ids.append(each.id) |
|||
view_id = self.env.ref('laundry_management.washing_form_view').id |
|||
if work_ids: |
|||
if len(work_ids) <= 1: |
|||
value = { |
|||
'view_type': 'form', |
|||
'view_mode': 'form', |
|||
'res_model': 'washing.washing', |
|||
'view_id': view_id, |
|||
'type': 'ir.actions.act_window', |
|||
'name': _('Works'), |
|||
'res_id': work_ids and work_ids[0] |
|||
} |
|||
else: |
|||
value = { |
|||
'domain': str([('id', 'in', work_ids)]), |
|||
'view_type': 'form', |
|||
'view_mode': 'tree,form', |
|||
'res_model': 'washing.washing', |
|||
'view_id': False, |
|||
'type': 'ir.actions.act_window', |
|||
'name': _('Works'), |
|||
'res_id': work_ids |
|||
} |
|||
|
|||
return value |
|||
|
|||
|
|||
def action_view_invoice(self): |
|||
|
|||
inv_obj = self.env['account.move'].search([('invoice_origin', '=', self.sale_obj.name)]) |
|||
inv_ids = [] |
|||
for each in inv_obj: |
|||
inv_ids.append(each.id) |
|||
view_id = self.env.ref('account.view_move_form').id |
|||
if inv_ids: |
|||
if len(inv_ids) <= 1: |
|||
value = { |
|||
'view_type': 'form', |
|||
'view_mode': 'form', |
|||
'res_model': 'account.move', |
|||
'view_id': view_id, |
|||
'type': 'ir.actions.act_window', |
|||
'name': _('Invoice'), |
|||
'res_id': inv_ids and inv_ids[0] |
|||
} |
|||
else: |
|||
value = { |
|||
'domain': str([('id', 'in', inv_ids)]), |
|||
'view_type': 'form', |
|||
'view_mode': 'tree,form', |
|||
'res_model': 'account.move', |
|||
'view_id': False, |
|||
'type': 'ir.actions.act_window', |
|||
'name': _('Invoice'), |
|||
'res_id': inv_ids |
|||
} |
|||
|
|||
return value |
|||
|
|||
name = fields.Char(string="Label", copy=False) |
|||
invoice_status = fields.Selection([ |
|||
('upselling', 'Upselling Opportunity'), |
|||
('invoiced', 'Fully Invoiced'), |
|||
('to invoice', 'To Invoice'), |
|||
('no', 'Nothing to Invoice') |
|||
], string='Invoice Status', invisible=1, related='sale_obj.invoice_status', store=True) |
|||
sale_obj = fields.Many2one('sale.order', invisible=1) |
|||
invoice_count = fields.Integer(compute='_invoice_count', string='# Invoice') |
|||
work_count = fields.Integer(compute='_work_count', string='# Works') |
|||
partner_id = fields.Many2one('res.partner', string='Customer', readonly=True, |
|||
states={'draft': [('readonly', False)], 'order': [('readonly', False)]}, required=True, |
|||
change_default=True, index=True, track_visibility='always') |
|||
partner_invoice_id = fields.Many2one('res.partner', string='Invoice Address', readonly=True, required=True, |
|||
states={'draft': [('readonly', False)], 'order': [('readonly', False)]}, |
|||
help="Invoice address for current sales order.") |
|||
partner_shipping_id = fields.Many2one('res.partner', string='Delivery Address', readonly=True, required=True, |
|||
states={'draft': [('readonly', False)], 'order': [('readonly', False)]}, |
|||
help="Delivery address for current sales order.") |
|||
order_date = fields.Datetime(string="Date", default=datetime.now().strftime('%Y-%m-%d %H:%M:%S')) |
|||
laundry_person = fields.Many2one('res.users', string='Laundry Person', required=1) |
|||
order_lines = fields.One2many('laundry.order.line', 'laundry_obj', required=1, ondelete='cascade') |
|||
total_amount = fields.Float(compute='get_total', string='Total', store=1) |
|||
currency_id = fields.Many2one("res.currency", string="Currency") |
|||
note = fields.Text(string='Terms and conditions') |
|||
state = fields.Selection([ |
|||
('draft', 'Draft'), |
|||
('order', 'Laundry Order'), |
|||
('process', 'Processing'), |
|||
('done', 'Done'), |
|||
('return', 'Returned'), |
|||
('cancel', 'Cancelled'), |
|||
], string='Status', readonly=True, copy=False, index=True, track_visibility='onchange', default='draft') |
|||
|
|||
|
|||
class LaundryManagementLine(models.Model): |
|||
_name = 'laundry.order.line' |
|||
|
|||
@api.depends('washing_type', 'extra_work', 'qty') |
|||
def get_amount(self): |
|||
for obj in self: |
|||
total = obj.washing_type.amount*obj.qty |
|||
for each in obj.extra_work: |
|||
total += each.amount*obj.qty |
|||
obj.amount = total |
|||
|
|||
product_id = fields.Many2one('product.product', string='Dress', required=1) |
|||
qty = fields.Integer(string='No of items', required=1) |
|||
description = fields.Text(string='Description') |
|||
washing_type = fields.Many2one('washing.type', string='Washing Type', required=1) |
|||
extra_work = fields.Many2many('washing.work', string='Extra Work') |
|||
amount = fields.Float(compute='get_amount', string='Amount') |
|||
laundry_obj = fields.Many2one('laundry.order', invisible=1) |
|||
state = fields.Selection([ |
|||
('draft', 'Draft'), |
|||
('wash', 'Washing'), |
|||
('extra_work', 'Make Over'), |
|||
('done', 'Done'), |
|||
('cancel', 'Cancelled'), |
|||
], string='Status', readonly=True, copy=False, index=True, default='draft') |
|||
|
|||
|
|||
class WashingType(models.Model): |
|||
_name = 'washing.type' |
|||
|
|||
name = fields.Char(string='Name', required=1) |
|||
assigned_person = fields.Many2one('res.users', string='Assigned Person', required=1) |
|||
amount = fields.Float(string='Service Charge', required=1) |
|||
|
|||
|
|||
class ExtraWork(models.Model): |
|||
_name = 'washing.work' |
|||
|
|||
name = fields.Char(string='Name', required=1) |
|||
assigned_person = fields.Many2one('res.users', string='Assigned Person', required=1) |
|||
amount = fields.Float(string='Service Charge', required=1) |
|||
|
|||
|
|||
|
|||
class Washing(models.Model): |
|||
_name = 'washing.washing' |
|||
|
|||
|
|||
def start_wash(self): |
|||
if not self.laundry_works: |
|||
self.laundry_obj.state = 'wash' |
|||
self.laundry_obj.laundry_obj.state = 'process' |
|||
for each in self: |
|||
for obj in each.product_line: |
|||
self.env['sale.order.line'].create({'product_id': obj.product_id.id, |
|||
'name': obj.name, |
|||
'price_unit': obj.price_unit, |
|||
'order_id': each.laundry_obj.laundry_obj.sale_obj.id, |
|||
'product_uom_qty': obj.quantity, |
|||
'product_uom': obj.uom_id.id, |
|||
}) |
|||
self.state = 'process' |
|||
|
|||
|
|||
def set_to_done(self): |
|||
self.state = 'done' |
|||
f = 0 |
|||
if not self.laundry_works: |
|||
if self.laundry_obj.extra_work: |
|||
for each in self.laundry_obj.extra_work: |
|||
self.create({'name': each.name, |
|||
'user_id': each.assigned_person.id, |
|||
'description': self.laundry_obj.description, |
|||
'laundry_obj': self.laundry_obj.id, |
|||
'state': 'draft', |
|||
'laundry_works': True, |
|||
'washing_date': datetime.now().strftime('%Y-%m-%d %H:%M:%S')}) |
|||
self.laundry_obj.state = 'extra_work' |
|||
laundry_obj = self.search([('laundry_obj.laundry_obj', '=', self.laundry_obj.laundry_obj.id)]) |
|||
for each in laundry_obj: |
|||
if each.state != 'done' or each.state == 'cancel': |
|||
f = 1 |
|||
break |
|||
if f == 0: |
|||
self.laundry_obj.laundry_obj.state = 'done' |
|||
laundry_obj1 = self.search([('laundry_obj', '=', self.laundry_obj.id)]) |
|||
f1 = 0 |
|||
for each in laundry_obj1: |
|||
if each.state != 'done' or each.state == 'cancel': |
|||
f1 = 1 |
|||
break |
|||
if f1 == 0: |
|||
self.laundry_obj.state = 'done' |
|||
|
|||
|
|||
@api.depends('product_line') |
|||
def get_total(self): |
|||
total = 0 |
|||
for obj in self: |
|||
for each in obj.product_line: |
|||
total += each.subtotal |
|||
obj.total_amount = total |
|||
|
|||
name = fields.Char(string='Work') |
|||
laundry_works = fields.Boolean(default=False, invisible=1) |
|||
user_id = fields.Many2one('res.users', string='Assigned Person') |
|||
washing_date = fields.Datetime(string='Date') |
|||
description = fields.Text(string='Description') |
|||
state = fields.Selection([ |
|||
('draft', 'Draft'), |
|||
('process', 'Process'), |
|||
('done', 'Done'), |
|||
('cancel', 'Cancelled'), |
|||
], string='Status', readonly=True, copy=False, index=True, default='draft') |
|||
laundry_obj = fields.Many2one('laundry.order.line', invisible=1) |
|||
product_line = fields.One2many('wash.order.line', 'wash_obj', string='Products', ondelete='cascade') |
|||
total_amount = fields.Float(compute='get_total', string='Grand Total') |
|||
|
|||
|
|||
class SaleOrderInherit(models.Model): |
|||
_name = 'wash.order.line' |
|||
|
|||
@api.depends('price_unit', 'quantity') |
|||
def compute_amount(self): |
|||
total = 0 |
|||
for obj in self: |
|||
total += obj.price_unit * obj.quantity |
|||
obj.subtotal = total |
|||
|
|||
wash_obj = fields.Many2one('washing.washing', string='Order Reference', ondelete='cascade') |
|||
name = fields.Text(string='Description', required=True) |
|||
uom_id = fields.Many2one('product.uom', 'Unit of Measure ', required=True) |
|||
quantity = fields.Integer(string='Quantity') |
|||
product_id = fields.Many2one('product.product', string='Product') |
|||
price_unit = fields.Float('Unit Price', default=0.0, related='product_id.list_price') |
|||
subtotal = fields.Float(compute='compute_amount', string='Subtotal', readonly=True, store=True) |
|||
|
|||
|
|||
class LaundryManagementInvoice(models.TransientModel): |
|||
_inherit = 'sale.advance.payment.inv' |
|||
|
|||
|
|||
def create_invoices(self): |
|||
context = self._context |
|||
if context.get('laundry_sale_obj'): |
|||
sale_orders = self.env['sale.order'].browse(context.get('laundry_sale_obj')) |
|||
else: |
|||
sale_orders = self.env['sale.order'].browse(self._context.get('active_ids', [])) |
|||
if self.advance_payment_method == 'delivered': |
|||
sale_orders._create_invoices() |
|||
elif self.advance_payment_method == 'all': |
|||
sale_orders._create_invoices()(final=True) |
|||
else: |
|||
# Create deposit product if necessary |
|||
if not self.product_id: |
|||
vals = self._prepare_deposit_product() |
|||
self.product_id = self.env['product.product'].create(vals) |
|||
self.env['ir.values'].sudo().set_default('sale.config.settings', 'deposit_product_id_setting', |
|||
self.product_id.id) |
|||
|
|||
sale_line_obj = self.env['sale.order.line'] |
|||
for order in sale_orders: |
|||
if self.advance_payment_method == 'percentage': |
|||
amount = order.amount_untaxed * self.amount / 100 |
|||
else: |
|||
amount = self.amount |
|||
if self.product_id.invoice_policy != 'order': |
|||
raise UserError(_( |
|||
'The product used to invoice a down payment should have an invoice policy set to "Ordered' |
|||
' quantities". Please update your deposit product to be able to create a deposit invoice.')) |
|||
if self.product_id.type != 'service': |
|||
raise UserError(_( |
|||
"The product used to invoice a down payment should be of type 'Service'. Please use another " |
|||
"product or update this product.")) |
|||
taxes = self.product_id.taxes_id.filtered( |
|||
lambda r: not order.company_id or r.company_id == order.company_id) |
|||
if order.fiscal_position_id and taxes: |
|||
tax_ids = order.fiscal_position_id.map_tax(taxes).ids |
|||
else: |
|||
tax_ids = taxes.ids |
|||
so_line = sale_line_obj.create({ |
|||
'name': _('Advance: %s') % (time.strftime('%m %Y'),), |
|||
'price_unit': amount, |
|||
'product_uom_qty': 0.0, |
|||
'order_id': order.id, |
|||
'discount': 0.0, |
|||
'product_uom': self.product_id.uom_id.id, |
|||
'product_id': self.product_id.id, |
|||
'tax_id': [(6, 0, tax_ids)], |
|||
}) |
|||
self._create_invoice(order, so_line, amount) |
|||
if self._context.get('open_invoices', False): |
|||
return sale_orders.action_view_invoice() |
|||
return {'type': 'ir.actions.act_window_close'} |
|||
|
|||
def _create_invoice(self, order, so_line, amount): |
|||
if (self.advance_payment_method == 'percentage' and self.amount <= 0.00) or (self.advance_payment_method == 'fixed' and self.fixed_amount <= 0.00): |
|||
raise UserError(_('The value of the down payment amount must be positive.')) |
|||
if self.advance_payment_method == 'percentage': |
|||
amount = order.amount_untaxed * self.amount / 100 |
|||
name = _("Down payment of %s%%") % (self.amount,) |
|||
else: |
|||
amount = self.fixed_amount |
|||
name = _('Down Payment') |
|||
|
|||
invoice_vals = { |
|||
'type': 'out_invoice', |
|||
'invoice_origin': order.name, |
|||
'invoice_user_id': order.user_id.id, |
|||
'narration': order.note, |
|||
'partner_id': order.partner_invoice_id.id, |
|||
'fiscal_position_id': order.fiscal_position_id.id or order.partner_id.property_account_position_id.id, |
|||
'partner_shipping_id': order.partner_shipping_id.id, |
|||
'currency_id': order.pricelist_id.currency_id.id, |
|||
'invoice_payment_ref': order.client_order_ref, |
|||
'invoice_payment_term_id': order.payment_term_id.id, |
|||
'team_id': order.team_id.id, |
|||
'campaign_id': order.campaign_id.id, |
|||
'medium_id': order.medium_id.id, |
|||
'source_id': order.source_id.id, |
|||
'invoice_line_ids': [(0, 0, { |
|||
'name': name, |
|||
'price_unit': amount, |
|||
'quantity': 1.0, |
|||
'product_id': self.product_id.id, |
|||
'sale_line_ids': [(6, 0, [so_line.id])], |
|||
'analytic_tag_ids': [(6, 0, so_line.analytic_tag_ids.ids)], |
|||
'analytic_account_id': order.analytic_account_id.id or False, |
|||
})], |
|||
} |
|||
if order.fiscal_position_id: |
|||
invoice_vals['fiscal_position_id'] = order.fiscal_position_id.id |
|||
invoice = self.env['account.move'].create(invoice_vals) |
|||
invoice.message_post_with_view('mail.message_origin_link', |
|||
values={'self': invoice, 'origin': order}, |
|||
subtype_id=self.env.ref('mail.mt_note').id) |
|||
return invoice |
@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Jesni Banu and Nilmar Shereef(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
from . import laundry_report |
@ -0,0 +1,98 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Jesni Banu and Nilmar Shereef(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
from odoo import models, fields, tools |
|||
|
|||
|
|||
class DifferedCheckHistory(models.Model): |
|||
_name = "report.laundry.order" |
|||
_description = "Laundry Order Analysis" |
|||
_auto = False |
|||
|
|||
name = fields.Char(string="Label") |
|||
invoice_status = fields.Selection([ |
|||
('upselling', 'Upselling Opportunity'), |
|||
('invoiced', 'Fully Invoiced'), |
|||
('to invoice', 'To Invoice'), |
|||
('no', 'Nothing to Invoice') |
|||
], string='Invoice Status', store=True) |
|||
partner_id = fields.Many2one('res.partner', string='Customer') |
|||
partner_invoice_id = fields.Many2one('res.partner', string='Invoice Address') |
|||
partner_shipping_id = fields.Many2one('res.partner', string='Delivery Address') |
|||
order_date = fields.Datetime(string="Date") |
|||
laundry_person = fields.Many2one('res.users', string='Laundry Person') |
|||
total_amount = fields.Float(string='Total') |
|||
currency_id = fields.Many2one("res.currency", string="Currency") |
|||
state = fields.Selection([ |
|||
('draft', 'Draft'), |
|||
('order', 'Laundry Order'), |
|||
('process', 'Processing'), |
|||
('done', 'Done'), |
|||
('return', 'Returned'), |
|||
('cancel', 'Cancelled'), |
|||
], string='Status') |
|||
|
|||
_order = 'name desc' |
|||
|
|||
def _select(self): |
|||
select_str = """ |
|||
SELECT |
|||
(select 1 ) AS nbr, |
|||
t.id as id, |
|||
t.name as name, |
|||
t.invoice_status as invoice_status, |
|||
t.partner_id as partner_id, |
|||
t.partner_invoice_id as partner_invoice_id, |
|||
t.partner_shipping_id as partner_shipping_id, |
|||
t.order_date as order_date, |
|||
t.laundry_person as laundry_person, |
|||
t.total_amount as total_amount, |
|||
t.currency_id as currency_id, |
|||
t.state as state |
|||
""" |
|||
return select_str |
|||
|
|||
def _group_by(self): |
|||
group_by_str = """ |
|||
GROUP BY |
|||
t.id, |
|||
name, |
|||
invoice_status, |
|||
partner_id, |
|||
partner_invoice_id, |
|||
partner_shipping_id, |
|||
order_date, |
|||
laundry_person, |
|||
total_amount, |
|||
currency_id, |
|||
state |
|||
""" |
|||
return group_by_str |
|||
|
|||
def init(self): |
|||
tools.sql.drop_view_if_exists(self._cr, 'report_laundry_order') |
|||
self._cr.execute(""" |
|||
CREATE view report_laundry_order as |
|||
%s |
|||
FROM laundry_order t |
|||
%s |
|||
""" % (self._select(), self._group_by())) |
|
@ -0,0 +1,27 @@ |
|||
<?xml version="1.0" ?> |
|||
<odoo> |
|||
<data> |
|||
|
|||
<record id="module_laundry_category" model="ir.module.category"> |
|||
<field name="name">Laundry</field> |
|||
<field name="sequence">18</field> |
|||
</record> |
|||
<record id="laundry_group_user" model="res.groups"> |
|||
<field name="name">User</field> |
|||
<field name="category_id" ref="module_laundry_category"/> |
|||
<field name="users" eval="[(4, ref('base.group_user'))]"/> |
|||
</record> |
|||
<record id="laundry_group_manager" model="res.groups"> |
|||
<field name="name">Manager</field> |
|||
<field name="implied_ids" eval="[(4, ref('laundry_group_user'))]"/> |
|||
<field name="category_id" ref="module_laundry_category"/> |
|||
<field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> |
|||
</record> |
|||
|
|||
</data> |
|||
</odoo> |
|||
|
|||
|
|||
<!--id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink--> |
|||
<!--access_washing_type,washing.type.user,model_washing_type,base.group_user,1,0,0,0--> |
|||
<!--access_washing_type,washing.type.manager,model_washing_type,base.group_system,1,1,1,1--> |
After Width: | Height: | Size: 133 KiB |
After Width: | Height: | Size: 124 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 199 KiB |
After Width: | Height: | Size: 133 KiB |
After Width: | Height: | Size: 133 KiB |
After Width: | Height: | Size: 126 KiB |
After Width: | Height: | Size: 199 KiB |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 151 KiB |
After Width: | Height: | Size: 210 KiB |
After Width: | Height: | Size: 202 KiB |
After Width: | Height: | Size: 207 KiB |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 17 KiB |
@ -0,0 +1,471 @@ |
|||
<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;"> |
|||
Laundry Service Management |
|||
</h2> |
|||
<h3 class="oe_slogan" style="font-size: 25px;color: #fff;font-weight: 600;text-align: left;opacity: 1;margin: 0 !important;"> |
|||
Cybrosys Industrial Module Which Helps You To Manage Laundry Service |
|||
</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 is an industrial specific module by <a href="https://www.cybrosys.com">Cybrosys Technologies</a> |
|||
for Laundry Management. It manages |
|||
the laundry process with assigning works to workers. |
|||
</h3> |
|||
<br/> |
|||
<h3 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;padding: 2% 0% 0% 0%;"> |
|||
Configuration |
|||
</h3> |
|||
<h3 class="oe_slogan" style="text-align: left;padding: 0% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> |
|||
<b>Access Rights</b> |
|||
<br/> |
|||
|
|||
<span>Laundry Manager : Laundry manager have all the access across the fleet rental management <br/></span> |
|||
<span>Laundry User : Laundry user can read, write and create the records.</span> |
|||
</h3> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-banner.png); background-repeat:no-repeat; background-size:cover;padding: 19% 0% 30% 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"> |
|||
Recording Laundry Order. |
|||
</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"> |
|||
Assigning Works. |
|||
</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"> |
|||
Make Invoices. |
|||
</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"> |
|||
Separate View for Works. |
|||
</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"> |
|||
Billing Facility for Extra Works. |
|||
</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"> |
|||
Label Printing for Every Order. |
|||
</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"> |
|||
Detailed Laundry Work Analysis 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"> |
|||
Access Rights From Multiple Level. |
|||
</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"> |
|||
Configuration for Washing Type. |
|||
</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"> |
|||
Configuration for Extra Works (Ironing/Patching etc..). |
|||
</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"> |
|||
Recording Laundry Order |
|||
</h3> |
|||
<div> |
|||
<h4>Laundry Management -> Laundry Management -> Laundry Order</h4> |
|||
</div> |
|||
<span> |
|||
When you install this module, an extra menu |
|||
Laundry Management will created in main menu. |
|||
Youcan see the different sub menus under the main menu. Here you |
|||
can create Laundry Order via clicking the 'Create' button. There you can specify the customer, laundry person, |
|||
order lines with washing type and Extra works for your order. |
|||
</span> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="cybrosys-laundry-1.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
<span> |
|||
When you confirm the Laundry Order the corresponding works will created under the |
|||
assigned person. There you can add extra products also. It will also add in Billing. |
|||
</span> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="cybrosys-laundry-2.png" alt="" style="width: 95%;"/> |
|||
</div><div class="oe_row oe_spaced"> |
|||
<img src="cybrosys-laundry-3.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"> |
|||
Laundry Label |
|||
</h3> |
|||
<span> |
|||
You can print label for each order from the print menu. |
|||
</span> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="cybrosys-laundry-4.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"> |
|||
Laundry Works |
|||
</h3> |
|||
<div> |
|||
<h4>Laundry Management -> Laundry Management -> Laundry Works</h4> |
|||
</div> |
|||
<span> |
|||
This is the Separate Laundry Works Form. Here you can see the work status of Laundry Works. |
|||
</span> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="cybrosys-laundry-6.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
<span> |
|||
If there is any extra works , it will created as work When you finish the main work. Then we can see the |
|||
status of that order line is become 'Make Over'. |
|||
</span> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="cybrosys-laundry-7.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"> |
|||
Invoice |
|||
</h3> |
|||
<span> |
|||
You can create Invoice via the button 'Create Invoice' when the order reaches to 'Done' state. |
|||
</span> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="cybrosys-laundry-8.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
<span> |
|||
You can see all the Invoice through the smart button "Invoices" from the Laundry Order form. |
|||
</span> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="cybrosys-laundry-9.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"> |
|||
Configuration |
|||
</h3> |
|||
<span> |
|||
You can configure washing types from the menu Laundry Management -> Configuration -> Washing Type by |
|||
specifying the name, assigned person and service charge |
|||
</span> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="cybrosys-laundry-10.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
<span> |
|||
You can configure additional works from the menu Laundry Management -> Configuration -> Additional Works by |
|||
specifying the name, assigned person and service charge |
|||
</span> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="cybrosys-laundry-11.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"> |
|||
Laundry Work Analysis Report |
|||
</h3> |
|||
<span> |
|||
You can also analyse your all Laundry Works from Laundry Management -> Report -> Laundry Order Analysis. |
|||
</span> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="cybrosys-laundry-12.png" alt="" style="width: 95%;"/> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<section class="oe_container oe_dark"> |
|||
<br/> |
|||
<h2 class="oe_slogan" style="margin-top:20px;" >You Looking for a functional Documentation of this Application.?</h2> |
|||
<h3 class="oe_slogan">Give a Request Mail to: <i class="fa fa-envelope" aria-hidden="true"></i> <a href="#" style="color:blue;">odoo@cybrosys.com</a></h3> |
|||
<br/> |
|||
<br/> |
|||
</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> |
|||
|
@ -0,0 +1,222 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan">Laundry Service Management</h2> |
|||
<h3 class="oe_slogan">Cybrosys Industrial Module Which Helps You To Manage Laundry Service</h3> |
|||
<h4 class="oe_slogan"><a href="https://www.cybrosys.com">Cybrosys Technologies</a> </h4> |
|||
</div> |
|||
<div class="oe_row oe_spaced" style="padding-left:65px;"> |
|||
<h4>Features:</h4> |
|||
<div> |
|||
<span style="color:green;"> ☑ </span> Recording Laundry Order.<br/> |
|||
<span style="color:green;"> ☑ </span> Assigning Works.<br/> |
|||
<span style="color:green;"> ☑ </span> Make Invoices.<br/> |
|||
<span style="color:green;"> ☑ </span> Separate View for Works.<br/> |
|||
<span style="color:green;"> ☑ </span> Billing Facility for Extra Works.<br/> |
|||
<span style="color:green;"> ☑ </span> Label Printing for Every Order.<br/> |
|||
<span style="color:green;"> ☑ </span> Detailed Laundry Work Analysis Report.<br/> |
|||
<span style="color:green;"> ☑ </span> Access Rights From Multiple Level.<br/> |
|||
<span style="color:green;"> ☑ </span> Configuration for Washing Type.<br/> |
|||
<span style="color:green;"> ☑ </span> Configuration for Extra Works (Ironing/Patching etc..).<br/> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_picture"> |
|||
<h3 class="oe_slogan">Overview</h3> |
|||
<p class="oe_mt32" style="text-align: center;"> |
|||
This is an industrial specific module by <a href="https://www.cybrosys.com">Cybrosys Technologies</a> |
|||
for Laundry Management. It manages |
|||
the laundry process with assigning works to workers. |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h3 class="oe_slogan">Recording Laundry Order</h3> |
|||
<div style="text-align: center"> |
|||
<p> |
|||
<h4>Laundry Management -> Laundry Management -> Laundry Order</h4> |
|||
<p> |
|||
<span style="text-align: center;padding-left:65px;">☛ When you install this module, an extra menu |
|||
Laundry Management will created in main menu. You |
|||
can see the different sub menus under the main menu. Here you |
|||
can create Laundry Order via clicking the 'Create' button. There you can specify the customer, laundry person, |
|||
order lines with washing type and Extra works for your order. |
|||
</span> |
|||
</div> |
|||
<div style="text-align: center"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;height: 400px;" src="laundry_order.png"> |
|||
</div> |
|||
</div> |
|||
<div class="" style="text-align: center"> |
|||
<div style="padding-left:65px;"> |
|||
<span>☛ When you confirm the Laundry Order the corresponding works will created under the |
|||
assigned person. There you can add extra products also. It will also add in Billing.</span> |
|||
</div> |
|||
<div class="oe_row oe_padded"> |
|||
<div class="oe_span6"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;" src="laundr_work.png"> |
|||
</div> |
|||
</div> |
|||
<div class="oe_span6"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;" src="demo_work.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h3 class="oe_slogan">Laundry Label</h3> |
|||
<div class="" style="text-align: center"> |
|||
<div style="padding-left:65px;"> |
|||
<span>☛ You can print label for each order from the print menu.</span> |
|||
</div> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;" src="label.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h3 class="oe_slogan">Laundry Works</h3> |
|||
<div class="" style="text-align: center"> |
|||
<div class="" style="text-align: center"> |
|||
<p> |
|||
<h4>Laundry Management -> Laundry Management -> Laundry Works</h4> |
|||
<p> |
|||
</div> |
|||
<div style="padding-left:65px;"> |
|||
<span>☛ This is the Separate Laundry Works Form. Here you can see the work status of Laundry Works.</span> |
|||
</div> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;" src="order.png"> |
|||
</div> |
|||
<div style="padding-left:65px;"> |
|||
<span>☛ If there is any extra works , it will created as work When you finish the main work. Then we can see the |
|||
status of that order line is become 'Make Over'.</span> |
|||
</div> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;" src="makeover.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h3 class="oe_slogan">Invoice</h3> |
|||
<div class="" style="text-align: center"> |
|||
<span>☛ |
|||
You can create Invoice via the button 'Create Invoice' when the order reaches to 'Done' state. |
|||
</span> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;height:400px;" src="invoice1.png"> |
|||
</div> |
|||
</div> |
|||
<div class="" style="text-align: center"> |
|||
<span>☛ |
|||
You can see all the Invoice through the smart button "Invoices" from the Laundry Order form. |
|||
</span> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;height:400px;" src="invoice.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h3 class="oe_slogan">Configuration</h3> |
|||
<div class="" style="text-align: center"> |
|||
<span>☛ |
|||
You can configure washing types from the menu Laundry Management -> Configuration -> Washing Type by |
|||
specifying the name, assigned person and service charge |
|||
</span> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;height:400px;" src="washing_type.png"> |
|||
</div> |
|||
</div> |
|||
<div class="" style="text-align: center"> |
|||
<span>☛ |
|||
You can configure additional works from the menu Laundry Management -> Configuration -> Additional Works by |
|||
specifying the name, assigned person and service charge |
|||
</span> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;height:400px;" src="additional.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h3 class="oe_slogan">Laundry Work Analysis Report</h3> |
|||
<div class="" style="text-align: center"> |
|||
<span>☛ |
|||
You can also analyse your all Laundry Works from Laundry Management -> Report -> Laundry Order Analysis. |
|||
</span> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img style="border:10px solid white;height:400px;" src="laundry_report.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h3 class="oe_slogan">Access Rights</h3> |
|||
<div class="" style="padding-left:65px;"> |
|||
<span>☛Laundry Manager :- Laundry manager have all the access across the fleet rental management <br/></span> |
|||
<span>☛Laundry User :- Laundry user can read, write and create the records.</span> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<br/> |
|||
<h2 class="oe_slogan" style="margin-top:20px;" >You Looking for a functional Documentation of this Application.?</h2> |
|||
<h3 class="oe_slogan">Give a Request Mail to: <i class="fa fa-envelope" aria-hidden="true"></i> <a href="#" style="color:blue;">odoo@cybrosys.com</a></h3> |
|||
<br/> |
|||
<br/> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> |
|||
<div class="oe_slogan" style="margin-top:10px !important;"> |
|||
<div> |
|||
<a class="btn btn-primary btn-lg mt8" |
|||
style="color: #FFFFFF !important;border-radius: 0;" href="http://www.cybrosys.com"><i |
|||
class="fa fa-envelope"></i> Email </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="http://www.cybrosys.com/contact/"><i |
|||
class="fa fa-phone"></i> Contact Us </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i |
|||
class="fa fa-check-square"></i> Request Customization </a> |
|||
</div> |
|||
<br> |
|||
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> |
|||
<div> |
|||
<a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></td> |
|||
<a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></td> |
|||
<a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;padding-left: 3px;"></i></a></td> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
|
|||
|
After Width: | Height: | Size: 207 KiB |
After Width: | Height: | Size: 202 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 199 KiB |
After Width: | Height: | Size: 199 KiB |
After Width: | Height: | Size: 126 KiB |
After Width: | Height: | Size: 210 KiB |
After Width: | Height: | Size: 151 KiB |
After Width: | Height: | Size: 133 KiB |
@ -0,0 +1,90 @@ |
|||
<?xml version="1.0" encoding="utf-8" ?> |
|||
<odoo> |
|||
<data> |
|||
|
|||
<record id="washing_type_form_view" model="ir.ui.view"> |
|||
<field name="name">washing.type.form</field> |
|||
<field name="model">washing.type</field> |
|||
<field name="arch" type="xml"> |
|||
<form> |
|||
<sheet> |
|||
<group> |
|||
<group> |
|||
<field name="name"/> |
|||
<field name="assigned_person"/> |
|||
</group> |
|||
<group> |
|||
<field name="amount"/> |
|||
</group> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="washing_type_tree_view" model="ir.ui.view"> |
|||
<field name="name">washing.type.tree</field> |
|||
<field name="model">washing.type</field> |
|||
<field name="arch" type="xml"> |
|||
<tree> |
|||
<field name="name"/> |
|||
<field name="assigned_person"/> |
|||
<field name="amount"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_washing_type" model="ir.actions.act_window"> |
|||
<field name="name">Washing Type</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">washing.type</field> |
|||
<field name="view_mode">tree,form</field> |
|||
</record> |
|||
|
|||
<record id="washing_work_form_view" model="ir.ui.view"> |
|||
<field name="name">washing.work.form</field> |
|||
<field name="model">washing.work</field> |
|||
<field name="arch" type="xml"> |
|||
<form> |
|||
<sheet> |
|||
<group> |
|||
<group> |
|||
<field name="name"/> |
|||
<field name="assigned_person"/> |
|||
</group> |
|||
<group> |
|||
<field name="amount"/> |
|||
</group> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="washing_work_tree_view" model="ir.ui.view"> |
|||
<field name="name">washing.work.tree</field> |
|||
<field name="model">washing.work</field> |
|||
<field name="arch" type="xml"> |
|||
<tree> |
|||
<field name="name"/> |
|||
<field name="assigned_person"/> |
|||
<field name="amount"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_washing_work" model="ir.actions.act_window"> |
|||
<field name="name">Additional Works</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">washing.work</field> |
|||
<field name="view_mode">tree,form</field> |
|||
</record> |
|||
|
|||
<menuitem id="laundry_config_menu" name="Configuration" parent="laundry_management_menu" sequence="3"/> |
|||
<menuitem id="laundry_customer" name="Customers" parent="laundry_config_menu" action="base.action_partner_customer_form" sequence="1"/> |
|||
<menuitem id="laundry_products" name="Products" parent="laundry_config_menu" action="product.product_normal_action_sell" sequence="2"/> |
|||
<menuitem id="laundry_washing_type" name="Washing Type" parent="laundry_config_menu" action="action_washing_type" sequence="3"/> |
|||
<menuitem id="laundry_washing_work" name="Additional Works" parent="laundry_config_menu" action="action_washing_work" sequence="4"/> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,48 @@ |
|||
<?xml version="1.0" encoding="utf-8" ?> |
|||
<odoo> |
|||
<data> |
|||
|
|||
<template id="laundry_order_label"> |
|||
<t t-call="web.html_container"> |
|||
<t t-foreach="docs" t-as="obj"> |
|||
<t t-call="web.external_layout"> |
|||
<div class="page"> |
|||
<div class="col-xs-4" style="padding:0;"> |
|||
<table style="border: 2px solid black;border-spacing:0;margin-bottom:0;height:122px;" class="table"> |
|||
<tbody> |
|||
<tr> |
|||
<th style="text-align: left; vertical-align: middle;" colspan="2"> |
|||
<span t-esc="obj.name"/> |
|||
</th> |
|||
<th style="text-align: right; vertical-align: middle;" colspan="2"> |
|||
<span t-esc="obj.order_date"/> |
|||
</th> |
|||
</tr> |
|||
<tr> |
|||
<td style="border: 2px solid black;text-align: center; vertical-align: middle;" colspan="2"> |
|||
<span>CUSTOMER</span> |
|||
</td> |
|||
<td style="border: 2px solid black;text-align: center; vertical-align: middle;" colspan="2"> |
|||
<span t-esc="obj.partner_id.name"/> |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</div> |
|||
</t> |
|||
</t> |
|||
</t> |
|||
</template> |
|||
|
|||
<report |
|||
string="Laundry Order Label" |
|||
id="laundry_label" |
|||
model="laundry.order" |
|||
report_type="qweb-pdf" |
|||
name="laundry_management.laundry_order_label" |
|||
file="laundry_management.laundry_order_label" |
|||
/> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,27 @@ |
|||
<?xml version="1.0" encoding="utf-8" ?> |
|||
<odoo> |
|||
<data> |
|||
|
|||
<record id="view_report_laundry_order" model="ir.ui.view"> |
|||
<field name="name">report.laundry.order.pivot</field> |
|||
<field name="model">report.laundry.order</field> |
|||
<field name="arch" type="xml"> |
|||
<pivot string="Laundry Order Analysis" display_quantity="true" disable_linking="True"> |
|||
<field name="name" type="row"/> |
|||
</pivot> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_laundry_order_analysis" model="ir.actions.act_window"> |
|||
<field name="name">Laundry Order Analysis</field> |
|||
<field name="res_model">report.laundry.order</field> |
|||
<field name="view_mode">pivot</field> |
|||
<field name="context">{'group_by_no_leaf':1,'group_by':[]}</field> |
|||
<field name="help">This report allows you to analyse the performance of your Laundry Mangement. </field> |
|||
</record> |
|||
|
|||
<menuitem id="laundry_report_menu" name="Report" parent="laundry_management_menu" sequence="2"/> |
|||
<menuitem name="Laundry Order Analysis" action="action_laundry_order_analysis" id="menu_laundry_order_analysis" parent="laundry_report_menu" sequence="1"/> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,118 @@ |
|||
<?xml version="1.0" encoding="utf-8" ?> |
|||
<odoo> |
|||
<data> |
|||
|
|||
<record id="sequence_laundry" model="ir.sequence"> |
|||
<field name="name">Laundry Order Code</field> |
|||
<field name="code">laundry.order</field> |
|||
<field eval="4" name="padding" /> |
|||
<field name="prefix">LO</field> |
|||
</record> |
|||
|
|||
<record id="laundry_order_form_view" model="ir.ui.view"> |
|||
<field name="name">laundry.order.form</field> |
|||
<field name="model">laundry.order</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Laundry Order" class="o_sale_order"> |
|||
<header> |
|||
<button name="confirm_order" class="oe_highlight" string="Confirm Order" type="object" states="draft"/> |
|||
<button name="create_invoice" class="oe_highlight" string="Create Invoice" type="object" |
|||
attrs="{'invisible': ['|',('invoice_status', '=', 'invoiced'), ('state', '!=', 'done')]}"/> |
|||
<button name="return_dress" string="Return" class="oe_highlight" type="object" states="done"/> |
|||
<button name="cancel_order" string="Cancel" type="object" states="draft"/> |
|||
<field name="state" widget="statusbar" statusbar_visible="draft,order,done,return"/> |
|||
</header> |
|||
<sheet> |
|||
<div class="oe_button_box" name="buttons"> |
|||
<button name='action_view_laundry_works' class="oe_stat_button" type="object" icon="fa-money" states="order,done,return,process"> |
|||
<field string="Works" name="work_count" widget="statinfo" /> |
|||
</button> |
|||
<button name='action_view_invoice' class="oe_stat_button" type="object" icon="fa-money" states="done,return"> |
|||
<field string="Invoice" name="invoice_count" widget="statinfo" /> |
|||
</button> |
|||
</div> |
|||
<div class="oe_title"> |
|||
<h1> |
|||
<field name="name" readonly="1"/> |
|||
</h1> |
|||
</div> |
|||
<group> |
|||
<group> |
|||
<field name="partner_id"/> |
|||
<field name="partner_invoice_id" context="{'default_type':'invoice'}" |
|||
attrs="{'readonly': [('state','in',('done','return','cancel'))]}"/> |
|||
<field name="partner_shipping_id" context="{'default_type':'delivery'}" |
|||
attrs="{'readonly': [('state','in',('done','return','cancel'))]}"/> |
|||
</group> |
|||
<group> |
|||
<field name="order_date" attrs="{'readonly': [('state','!=','draft')]}"/> |
|||
<field name="currency_id" attrs="{'readonly': [('state','!=','draft')]}"/> |
|||
<field name="laundry_person" attrs="{'readonly': [('state','in',('return', 'cancel'))]}"/> |
|||
<field name="invoice_status" invisible="1"/> |
|||
<field name="sale_obj" invisible="1"/> |
|||
</group> |
|||
</group> |
|||
<notebook> |
|||
<page string="Order Lines"> |
|||
<field name="order_lines" attrs="{'readonly': [('state','!=','draft')]}"> |
|||
<tree string="Laundry Order Lines" editable="bottom" decoration-info="state == 'draft'" |
|||
colors="grey:state == 'done';black:state == 'extra_work';green:state == 'wash';"> |
|||
<field name="product_id"/> |
|||
<field name="description"/> |
|||
<field name="qty"/> |
|||
<field name="washing_type"/> |
|||
<field name="extra_work" widget="many2many_tags"/> |
|||
<field name="state"/> |
|||
<field name="amount"/> |
|||
</tree> |
|||
</field> |
|||
<group class="oe_subtotal_footer oe_right" colspan="2" name="laundry_total"> |
|||
<field name="total_amount" widget='monetary' options="{'currency_field': 'currency_id'}"/> |
|||
</group> |
|||
<field name="note" class="oe_inline" placeholder="Setup default terms and conditions in your company settings."/> |
|||
<div class="oe_clear"/> |
|||
</page> |
|||
</notebook> |
|||
</sheet> |
|||
<div class="oe_chatter"> |
|||
<field name="message_follower_ids" widget="mail_followers"/> |
|||
<field name="message_ids" widget="mail_thread"/> |
|||
</div> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="laundry_order_tree_view" model="ir.ui.view"> |
|||
<field name="name">laundry.order.tree</field> |
|||
<field name="model">laundry.order</field> |
|||
<field name="arch" type="xml"> |
|||
<tree decoration-info="state == 'draft'"> |
|||
<field name="name"/> |
|||
<field name="partner_id"/> |
|||
<field name="order_date"/> |
|||
<field name="laundry_person"/> |
|||
<field name="total_amount"/> |
|||
<field name="state"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_laundry_order" model="ir.actions.act_window"> |
|||
<field name="name">Laundry Management</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">laundry.order</field> |
|||
<field name="view_mode">tree,form</field> |
|||
<field name="domain">[('laundry_person','=', uid)]</field> |
|||
<field name="help" type="html"> |
|||
<p class="oe_view_nocontent_create"> |
|||
Click to create a New Order. |
|||
</p> |
|||
</field> |
|||
</record> |
|||
|
|||
<menuitem name="Laundry Management" id="laundry_management_menu" icon="fa-car"/> |
|||
<menuitem id="laundry_management_sub_menu" name="Laundry Management" parent="laundry_management_menu" sequence="1"/> |
|||
<menuitem id="laundry_management_order" name="Laundry Order" parent="laundry_management_sub_menu" action="action_laundry_order" sequence="1"/> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,77 @@ |
|||
<?xml version="1.0" encoding="utf-8" ?> |
|||
<odoo> |
|||
<data> |
|||
|
|||
<record id="washing_form_view" model="ir.ui.view"> |
|||
<field name="name">washing.washing.form</field> |
|||
<field name="model">washing.washing</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Washing" create="false"> |
|||
<header> |
|||
<button name="start_wash" class="oe_highlight" string="Start" type="object" states="draft"/> |
|||
<button name="set_to_done" class="oe_highlight" string="Set to Done" type="object" states="process"/> |
|||
<field name="state" widget="statusbar" statusbar_visible="draft,process,done"/> |
|||
</header> |
|||
<sheet> |
|||
<group> |
|||
<group> |
|||
<field name="name" readonly="1"/> |
|||
<field name="user_id"/> |
|||
</group> |
|||
<group> |
|||
<field name="washing_date" readonly="1"/> |
|||
</group> |
|||
</group> |
|||
<notebook> |
|||
<page string="Description"> |
|||
<field name="description"/> |
|||
</page> |
|||
<page string="Additional Products"> |
|||
<field name="product_line" attrs="{'readonly': [('state','!=','draft')]}"> |
|||
<tree editable="bottom"> |
|||
<field name="product_id"/> |
|||
<field name="name"/> |
|||
<field name="quantity"/> |
|||
<field name="uom_id"/> |
|||
<field name="price_unit"/> |
|||
<field name="subtotal"/> |
|||
<field name="wash_obj" invisible="1"/> |
|||
</tree> |
|||
</field> |
|||
<group class="oe_subtotal_footer oe_right" colspan="2" name="product_total"> |
|||
<field name="total_amount" widget='monetary'/> |
|||
</group> |
|||
<div class="oe_clear"/> |
|||
</page> |
|||
</notebook> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
|
|||
<record id="washing_tree_view" model="ir.ui.view"> |
|||
<field name="name">washing.washing.tree</field> |
|||
<field name="model">washing.washing</field> |
|||
<field name="arch" type="xml"> |
|||
<tree create="false" edit="false" decoration-info="state == 'draft'"> |
|||
<field name="name"/> |
|||
<field name="user_id"/> |
|||
<field name="washing_date"/> |
|||
<field name="state"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_washing" model="ir.actions.act_window"> |
|||
<field name="name">Washing</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">washing.washing</field> |
|||
<field name="view_mode">tree,form</field> |
|||
<field name="domain">[('user_id','=', uid)]</field> |
|||
</record> |
|||
|
|||
<menuitem id="laundry_washing" name="Laundry Works" parent="laundry_management_sub_menu" action="action_washing" sequence="2"/> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,40 @@ |
|||
Sale Discount on Total Amount |
|||
============================= |
|||
Discount on Total in Sale and Invoice With Discount Limit and Approval |
|||
|
|||
Configuration |
|||
============= |
|||
* No additional configurations needed |
|||
|
|||
Company |
|||
------- |
|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
|||
|
|||
Credits |
|||
------- |
|||
* Developer: Faslu Rahman@cybrosys |
|||
Version 13: Nimisha Murali@cybrosys |
|||
|
|||
Contacts |
|||
-------- |
|||
* Mail Contact : odoo@cybrosys.com |
|||
* Website : https://cybrosys.com |
|||
|
|||
Bug Tracker |
|||
----------- |
|||
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. |
|||
|
|||
Maintainer |
|||
========== |
|||
.. image:: https://cybrosys.com/images/logo.png |
|||
:target: https://cybrosys.com |
|||
|
|||
This module is maintained by Cybrosys Technologies. |
|||
|
|||
For support and more information, please visit `Our Website <https://cybrosys.com/>`__ |
|||
|
|||
Further information |
|||
=================== |
|||
HTML Description: `<static/description/index.html>`__ |
|||
|
|||
|
@ -0,0 +1,24 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Faslu Rahman(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
from . import models |
|||
from . import reports |
|||
|
@ -0,0 +1,56 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Faslu Rahman(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
{ |
|||
'name': 'Sale Discount on Total Amount', |
|||
'version': '13.0.1.0.0', |
|||
'category': 'Sales Management', |
|||
'summary': "Discount on Total in Sale and Invoice With Discount Limit and Approval", |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'website': 'http://www.cybrosys.com', |
|||
'description': """ |
|||
|
|||
Sale Discount for Total Amount |
|||
======================= |
|||
Module to manage discount on total amount in Sale. |
|||
as an specific amount or percentage |
|||
""", |
|||
'depends': ['sale', |
|||
'account', 'delivery' |
|||
], |
|||
'data': [ |
|||
'views/sale_view.xml', |
|||
'views/account_invoice_view.xml', |
|||
'views/invoice_report.xml', |
|||
'views/sale_order_report.xml', |
|||
'views/res_config_view.xml', |
|||
|
|||
], |
|||
'demo': [ |
|||
], |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'AGPL-3', |
|||
'application': True, |
|||
'installable': True, |
|||
'auto_install': False, |
|||
} |
@ -0,0 +1,9 @@ |
|||
## Module <inventory_barcode_scanning> |
|||
|
|||
#### 15.10.2019 |
|||
#### Version 13.0.1.0.0 |
|||
#### ADD |
|||
Initial commit for Sale Discount On Total Amount |
|||
|
|||
|
|||
|
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Faslu Rahman(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
from . import sale |
|||
from . import account_invoice |
|||
from . import discount_approval |
|||
|
@ -0,0 +1,151 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Faslu Rahman(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
from odoo import api, fields, models |
|||
|
|||
|
|||
class AccountInvoice(models.Model): |
|||
_inherit = "account.move" |
|||
|
|||
@api.depends( |
|||
'line_ids.debit', |
|||
'line_ids.credit', |
|||
'line_ids.amount_currency', |
|||
'line_ids.amount_residual', |
|||
'line_ids.amount_residual_currency', |
|||
'line_ids.payment_id.state') |
|||
def _compute_amount(self): |
|||
|
|||
invoice_ids = [move.id for move in self if move.id and move.is_invoice(include_receipts=True)] |
|||
self.env['account.payment'].flush(['state']) |
|||
if invoice_ids: |
|||
self._cr.execute( |
|||
''' |
|||
SELECT move.id |
|||
FROM account_move move |
|||
JOIN account_move_line line ON line.move_id = move.id |
|||
JOIN account_partial_reconcile part ON part.debit_move_id = line.id OR part.credit_move_id = line.id |
|||
JOIN account_move_line rec_line ON |
|||
(rec_line.id = part.credit_move_id AND line.id = part.debit_move_id) |
|||
OR |
|||
(rec_line.id = part.debit_move_id AND line.id = part.credit_move_id) |
|||
JOIN account_payment payment ON payment.id = rec_line.payment_id |
|||
JOIN account_journal journal ON journal.id = rec_line.journal_id |
|||
WHERE payment.state IN ('posted', 'sent') |
|||
AND journal.post_at = 'bank_rec' |
|||
AND move.id IN %s |
|||
''', [tuple(invoice_ids)] |
|||
) |
|||
in_payment_set = set(res[0] for res in self._cr.fetchall()) |
|||
else: |
|||
in_payment_set = {} |
|||
|
|||
for move in self: |
|||
total_untaxed = 0.0 |
|||
total_untaxed_currency = 0.0 |
|||
total_tax = 0.0 |
|||
total_tax_currency = 0.0 |
|||
total_residual = 0.0 |
|||
total_residual_currency = 0.0 |
|||
currencies = set() |
|||
|
|||
for line in move.line_ids: |
|||
if line.currency_id: |
|||
currencies.add(line.currency_id) |
|||
|
|||
# Untaxed amount. |
|||
if (move.is_invoice(include_receipts=True) and not line.exclude_from_invoice_tab) \ |
|||
or (move.type == 'entry' and line.debit and not line.tax_line_id): |
|||
total_untaxed += line.balance |
|||
total_untaxed_currency += line.amount_currency |
|||
|
|||
# Tax amount. |
|||
if line.tax_line_id: |
|||
total_tax += line.balance |
|||
total_tax_currency += line.amount_currency |
|||
|
|||
# Residual amount. |
|||
if move.type == 'entry' or line.account_id.user_type_id.type in ('receivable', 'payable'): |
|||
total_residual += line.amount_residual |
|||
total_residual_currency += line.amount_residual_currency |
|||
|
|||
total = total_untaxed + total_tax |
|||
total_currency = total_untaxed_currency + total_tax_currency |
|||
|
|||
if move.type == 'entry' or move.is_outbound(): |
|||
sign = 1 |
|||
else: |
|||
sign = -1 |
|||
move.amount_discount = sum((line.quantity * line.price_unit * line.discount)/100 for line in move.line_ids) |
|||
move.amount_untaxed = sign * (total_untaxed_currency if len(currencies) == 1 else total_untaxed) |
|||
move.amount_tax = sign * (total_tax_currency if len(currencies) == 1 else total_tax) |
|||
move.amount_total = sign * (total_currency if len(currencies) == 1 else total) |
|||
move.amount_residual = -sign * (total_residual_currency if len(currencies) == 1 else total_residual) |
|||
move.amount_untaxed_signed = -total_untaxed |
|||
move.amount_tax_signed = -total_tax |
|||
move.amount_total_signed = -total |
|||
move.amount_residual_signed = total_residual |
|||
|
|||
currency = len(currencies) == 1 and currencies.pop() or move.company_id.currency_id |
|||
is_paid = currency and currency.is_zero(move.amount_residual) or not move.amount_residual |
|||
|
|||
# Compute 'invoice_payment_state'. |
|||
if move.state == 'posted' and is_paid: |
|||
if move.id in in_payment_set: |
|||
move.invoice_payment_state = 'in_payment' |
|||
else: |
|||
move.invoice_payment_state = 'paid' |
|||
else: |
|||
move.invoice_payment_state = 'not_paid' |
|||
|
|||
discount_type = fields.Selection([('percent', 'Percentage'), ('amount', 'Amount')], string='Discount Type', |
|||
readonly=True, states={'draft': [('readonly', False)]}, default='percent') |
|||
discount_rate = fields.Float('Discount Amount', digits=(16, 2), readonly=True, states={'draft': [('readonly', False)]}) |
|||
amount_discount = fields.Monetary(string='Discount', store=True, readonly=True, compute='_compute_amount', |
|||
track_visibility='always') |
|||
|
|||
@api.onchange('discount_type', 'discount_rate', 'invoice_line_ids') |
|||
def supply_rate(self): |
|||
for inv in self: |
|||
if inv.discount_type == 'percent': |
|||
for line in inv.line_ids: |
|||
line.discount = inv.discount_rate |
|||
else: |
|||
total = discount = 0.0 |
|||
for line in inv.invoice_line_ids: |
|||
total += (line.quantity * line.price_unit) |
|||
if inv.discount_rate != 0: |
|||
discount = (inv.discount_rate / total) * 100 |
|||
else: |
|||
discount = inv.discount_rate |
|||
for line in inv.invoice_line_ids: |
|||
line.discount = discount |
|||
|
|||
|
|||
def button_dummy(self): |
|||
self.supply_rate() |
|||
return True |
|||
|
|||
class AccountInvoiceLine(models.Model): |
|||
_inherit = "account.move.line" |
|||
|
|||
discount = fields.Float(string='Discount (%)', digits=(16, 20), default=0.0) |
@ -0,0 +1,82 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Faslu Rahman(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
from odoo import api, fields, models |
|||
|
|||
|
|||
class sale_discount(models.Model): |
|||
_inherit = 'sale.order' |
|||
|
|||
state = fields.Selection([ |
|||
('draft', 'Quotation'), |
|||
('sent', 'Quotation Sent'), |
|||
('waiting', 'Waiting Approval'), |
|||
('sale', 'Sales Order'), |
|||
('done', 'Locked'), |
|||
('cancel', 'Cancelled'), |
|||
], string='Status', readonly=True, copy=False, index=True, track_visibility='onchange', default='draft') |
|||
|
|||
|
|||
def action_confirm(self): |
|||
discnt = 0.0 |
|||
no_line = 0.0 |
|||
if self.company_id.so_double_validation == 'two_step': |
|||
for line in self.order_line: |
|||
no_line += 1 |
|||
discnt += line.discount |
|||
discnt = (discnt / no_line) |
|||
if self.company_id.so_double_validation_limit and discnt > self.company_id.so_double_validation_limit: |
|||
self.state = 'waiting' |
|||
return True |
|||
super(sale_discount, self).action_confirm() |
|||
|
|||
|
|||
def action_approve(self): |
|||
super(sale_discount, self).action_confirm() |
|||
return True |
|||
|
|||
|
|||
class Company(models.Model): |
|||
_inherit = 'res.company' |
|||
|
|||
so_double_validation = fields.Selection([ |
|||
('one_step', 'Confirm sale orders in one step'), |
|||
('two_step', 'Get 2 levels of approvals to confirm a sale order') |
|||
], string="Levels of Approvals", default='one_step', |
|||
help="Provide a double validation mechanism for sales discount") |
|||
|
|||
so_double_validation_limit = fields.Float(string="Percentage of Discount that requires double validation'", |
|||
help="Minimum discount percentage for which a double validation is required") |
|||
|
|||
|
|||
class ResDiscountSettings(models.TransientModel): |
|||
_inherit = 'res.config.settings' |
|||
|
|||
so_order_approval = fields.Boolean("Sale Discount Approval", default=lambda self: self.env.user.company_id.so_double_validation == 'two_step') |
|||
|
|||
so_double_validation = fields.Selection(related='company_id.so_double_validation',string="Levels of Approvals *", readonly=False) |
|||
so_double_validation_limit = fields.Float(string="Discount limit requires approval in %", |
|||
related='company_id.so_double_validation_limit', readonly=False) |
|||
|
|||
def set_values(self): |
|||
super(ResDiscountSettings, self).set_values() |
|||
self.so_double_validation = 'two_step' if self.so_order_approval else 'one_step' |
@ -0,0 +1,104 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Faslu Rahman(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
from odoo import api, fields, models |
|||
import odoo.addons.decimal_precision as dp |
|||
|
|||
|
|||
class SaleOrder(models.Model): |
|||
_inherit = "sale.order" |
|||
|
|||
@api.depends('order_line.price_total') |
|||
def _amount_all(self): |
|||
""" |
|||
Compute the total amounts of the SO. |
|||
""" |
|||
for order in self: |
|||
amount_untaxed = amount_tax = amount_discount = 0.0 |
|||
for line in order.order_line: |
|||
amount_untaxed += line.price_subtotal |
|||
amount_tax += line.price_tax |
|||
amount_discount += (line.product_uom_qty * line.price_unit * line.discount) / 100 |
|||
order.update({ |
|||
'amount_untaxed': amount_untaxed, |
|||
'amount_tax': amount_tax, |
|||
'amount_discount': amount_discount, |
|||
'amount_total': amount_untaxed + amount_tax, |
|||
}) |
|||
|
|||
|
|||
discount_type = fields.Selection([('percent', 'Percentage'), ('amount', 'Amount')], string='Discount type', |
|||
readonly=True,states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, |
|||
default='percent') |
|||
discount_rate = fields.Float('Discount Rate', digits=dp.get_precision('Account'), |
|||
readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}) |
|||
amount_untaxed = fields.Monetary(string='Untaxed Amount', store=True, readonly=True, compute='_amount_all', |
|||
track_visibility='always') |
|||
amount_tax = fields.Monetary(string='Taxes', store=True, readonly=True, compute='_amount_all', |
|||
track_visibility='always') |
|||
amount_total = fields.Monetary(string='Total', store=True, readonly=True, compute='_amount_all', |
|||
track_visibility='always') |
|||
amount_discount = fields.Monetary(string='Discount', store=True, readonly=True, compute='_amount_all', |
|||
digits=dp.get_precision('Account'), track_visibility='always') |
|||
|
|||
@api.onchange('discount_type', 'discount_rate', 'order_line') |
|||
def supply_rate(self): |
|||
|
|||
for order in self: |
|||
if order.discount_type == 'percent': |
|||
for line in order.order_line: |
|||
line.discount = order.discount_rate |
|||
else: |
|||
total = discount = 0.0 |
|||
for line in order.order_line: |
|||
total += round((line.product_uom_qty * line.price_unit)) |
|||
if order.discount_rate != 0: |
|||
discount = (order.discount_rate / total) * 100 |
|||
else: |
|||
discount = order.discount_rate |
|||
for line in order.order_line: |
|||
line.discount = discount |
|||
|
|||
def _prepare_invoice(self,): |
|||
invoice_vals = super(SaleOrder, self)._prepare_invoice() |
|||
invoice_vals.update({ |
|||
'discount_type': self.discount_type, |
|||
'discount_rate': self.discount_rate, |
|||
}) |
|||
return invoice_vals |
|||
|
|||
|
|||
|
|||
def button_dummy(self): |
|||
|
|||
self.supply_rate() |
|||
return True |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
class SaleOrderLine(models.Model): |
|||
_inherit = "sale.order.line" |
|||
|
|||
discount = fields.Float(string='Discount (%)', digits=(16, 20), default=0.0) |
|||
|
@ -0,0 +1,23 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Faslu Rahman(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
from . import invoice_report |
|||
from . import sale_report |
@ -0,0 +1,35 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Faslu Rahman(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
from odoo import fields, models |
|||
|
|||
|
|||
class AccountInvoiceReport(models.Model): |
|||
_inherit = 'account.invoice.report' |
|||
|
|||
discount = fields.Float('Discount', readonly=True) |
|||
|
|||
def _select(self): |
|||
res = super(AccountInvoiceReport,self)._select() |
|||
select_str = res + """, line.discount AS discount """ |
|||
return select_str |
|||
|
@ -0,0 +1,36 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Faslu Rahman(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
|
|||
|
|||
from odoo import fields, models |
|||
|
|||
|
|||
class DiscountSaleReport(models.Model): |
|||
_inherit = 'sale.report' |
|||
|
|||
discount = fields.Float('Discount', readonly=True) |
|||
|
|||
def _select(self): |
|||
res = super(DiscountSaleReport,self)._select() |
|||
select_str = res+""",sum(l.product_uom_qty / u.factor * u2.factor * cr.rate * l.price_unit * l.discount / 100.0) |
|||
as discount""" |
|||
return select_str |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 117 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 9.9 KiB |
@ -0,0 +1,351 @@ |
|||
<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;"> |
|||
Global Discount In Sale |
|||
</h2> |
|||
<h3 class="oe_slogan" style="font-size: 25px;color: #fff;font-weight: 600;text-align: left;opacity: 1;margin: 0 !important;"> |
|||
Global Discount In Sale |
|||
</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">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 mention discount on Total of sale order and Total of Customer Invoice as percentage or as amount. |
|||
</h3> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container" style="background-image:url(https://www.cybrosys.com/images/odoo-index-banner.png); background-repeat:no-repeat; background-size:cover;padding: 19% 0% 30% 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"> |
|||
Select 'Percentage' from Discount type and give discount percentage as Discount rate. |
|||
</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"> |
|||
Select 'Amount' from Discount type and give discount amount as Discount rate. |
|||
</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"> |
|||
System will update the value of Discount and Total |
|||
</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"> |
|||
Sale Order |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="cybrosys-sales-discount-1.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"> |
|||
Customer Invoice |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="cybrosys-sales-discount-2.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"> |
|||
And the module also allows you to set a limit for total discount in percentage. Exceeding this limit |
|||
will require approval. |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="cybrosys-sales-discount-3.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"> |
|||
Manager level users can approve sale orders in 'Waiting Approval' stage. |
|||
</h3> |
|||
<div class="oe_row oe_spaced"> |
|||
<img src="cybrosys-sales-discount-4.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: 86 KiB |
After Width: | Height: | Size: 117 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 41 KiB |
@ -0,0 +1,41 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
|
|||
<record id="discount_account_invoice_view_form" model="ir.ui.view"> |
|||
<field name="name">discount.account.invoice</field> |
|||
<field name="model">account.move</field> |
|||
<field name="inherit_id" ref="account.view_move_form"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//field[@name='discount']" position="attributes"> |
|||
<attribute name="digits">[16, 2]</attribute> |
|||
</xpath> |
|||
<xpath expr="//field[@name='amount_untaxed']" position="after"> |
|||
<field name="amount_discount"/> |
|||
</xpath> |
|||
<xpath expr="//field[@name='narration']" position="after"> |
|||
<div> |
|||
<label for="discount_type" string="Discount Type :"/> |
|||
<field name="discount_type" class="oe_inline"/> |
|||
</div> |
|||
<div> |
|||
<label for="discount_rate" string="Discount Rate :"/> |
|||
<field name="discount_rate" class="oe_inline"/> |
|||
</div> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
<!-- <record id="discount_view_invoice_line_tree" model="ir.ui.view">--> |
|||
<!-- <field name="name">discount.account.invoice.line.tree</field>--> |
|||
<!-- <field name="model">account.move.line.tree.grouped.sales.purchase</field>--> |
|||
<!-- <field name="inherit_id" ref="account.view_move_line_tree_grouped_sales_purchases"/>--> |
|||
<!-- <field name="arch" type="xml">--> |
|||
<!-- <xpath expr="//field[@name='debit']" position="attributes">--> |
|||
<!-- <attribute name="digits">[16, 2]</attribute>--> |
|||
<!-- </xpath>--> |
|||
<!-- </field>--> |
|||
<!-- </record>--> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,20 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
|
|||
<template id="report_invoice_customized" inherit_id="account.report_invoice_document"> |
|||
<xpath expr="//span[@t-field='line.discount']" position="replace"> |
|||
<span t-esc="'%.2f'%(line.discount)"/> |
|||
</xpath> |
|||
<xpath expr="//tr[hasclass('border-black')]" position="after"> |
|||
<tr> |
|||
<td>Discount</td> |
|||
<td class="text-right"> |
|||
<span t-field="o.amount_discount"/> |
|||
</td> |
|||
</tr> |
|||
</xpath> |
|||
</template> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,33 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<record id="res_config_settings_view_form_sale_discount" model="ir.ui.view"> |
|||
<field name="name">res.config.settings.view.form.inherit.sale.discount</field> |
|||
<field name="model">res.config.settings</field> |
|||
<field name="priority" eval="10"/> |
|||
<field name="inherit_id" ref="sale.res_config_settings_view_form" /> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//div[@data-key='sale_management']/div[hasclass('o_settings_container')][2]/div[hasclass('o_setting_box')][2]" position="after"> |
|||
|
|||
<div class="col-xs-12 col-md-6 o_setting_box"> |
|||
<div class="o_setting_left_pane"> |
|||
<field name="so_order_approval"/> |
|||
</div> |
|||
<div class="o_setting_right_pane"> |
|||
<label for="so_order_approval"/> |
|||
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/> |
|||
<div class="text-muted"> |
|||
Managers must approve discount |
|||
</div> |
|||
<div class="content-group" attrs="{'invisible': [('so_order_approval', '=', False)]}"> |
|||
<div class="row mt16"> |
|||
<label for="so_double_validation_limit" class="col-md-4 o_light_label"/> |
|||
<field name="so_double_validation_limit"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,21 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
|
|||
<template id="report_saleorder_customized" inherit_id="sale.report_saleorder_document"> |
|||
<xpath expr="//span[@t-field='line.discount']" position="replace"> |
|||
<span t-esc="'%.2f'%(line.discount)"/> |
|||
</xpath> |
|||
<xpath expr="//tr[hasclass('border-black')]" position="after"> |
|||
<tr> |
|||
<td>Total Discount</td> |
|||
<td class="text-right"> |
|||
<span t-field="doc.amount_discount" |
|||
t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> |
|||
</td> |
|||
</tr> |
|||
</xpath> |
|||
</template> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,43 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data> |
|||
|
|||
<record id="discount_sale_view_form" model="ir.ui.view"> |
|||
<field name="name">discount.sale.order.form</field> |
|||
<field name="model">sale.order</field> |
|||
<field name="inherit_id" ref="sale.view_order_form"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//field[@name='state']" position="before"> |
|||
<button string="Approve" type="object" name="action_approve" states="waiting" class="oe_highlight" |
|||
groups="sales_team.group_sale_manager"/> |
|||
</xpath> |
|||
<xpath expr="//button[@name='action_cancel']" position="attributes"> |
|||
<attribute name ="states">draft,sent,sale,waiting</attribute> |
|||
</xpath> |
|||
<!--<xpath expr="//tree/field[@name='discount']" position="replace">--> |
|||
<!--<field name="discount" class="oe_inline" digits="(16, 2)"/> %%--> |
|||
<!--</xpath>--> |
|||
<xpath expr="//group[@name='note_group']" position="replace"> |
|||
<group col="4"> |
|||
<group name="discount" colspan="2"> |
|||
<field name="discount_type"/> |
|||
<field name="discount_rate"/> |
|||
</group> |
|||
<group class="oe_subtotal_footer oe_right" colspan="2" name="sale_total"> |
|||
<field name="amount_untaxed" widget='monetary' options="{'currency_field': 'currency_id'}"/> |
|||
<field name="amount_discount" widget='monetary' options="{'currency_field': 'currency_id'}"/> |
|||
<field name="amount_tax" widget='monetary' options="{'currency_field': 'currency_id'}"/> |
|||
<div class="oe_subtotal_footer_separator oe_inline"> |
|||
<label for="amount_total" /> |
|||
<button name="button_dummy" |
|||
states="draft,sent" string="(update)" type="object" class="oe_edit_only oe_link"/> |
|||
</div> |
|||
<field name="amount_total" nolabel="1" class="oe_subtotal_footer_separator" widget='monetary' options="{'currency_field': 'currency_id'}"/> |
|||
</group> |
|||
</group> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1,38 @@ |
|||
Website Coupon Code v12 |
|||
======================= |
|||
Manage Website Coupon Codes for Products/Categories/All Products & Its Redeem Operations |
|||
|
|||
Configuration |
|||
============= |
|||
* No additional configurations needed |
|||
|
|||
Company |
|||
------- |
|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
|||
|
|||
Credits |
|||
------- |
|||
* Developer:v11- Linto CT @ cybrosys, odoo@cybrosys.com |
|||
Version12:Meera K@cybrosys,Contact: odoo@cybrosys.com |
|||
Version 13: Vaishnavi B@cybrosys,Contact: odoo@cybrosys.com |
|||
Contacts |
|||
-------- |
|||
* Mail Contact : odoo@cybrosys.com |
|||
* Website : https://cybrosys.com |
|||
|
|||
Bug Tracker |
|||
----------- |
|||
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. |
|||
|
|||
Maintainer |
|||
========== |
|||
.. image:: https://cybrosys.com/images/logo.png |
|||
:target: https://cybrosys.com |
|||
|
|||
This module is maintained by Cybrosys Technologies. |
|||
|
|||
For support and more information, please visit Our Website <https://cybrosys.com/>`__ |
|||
|
|||
Further information |
|||
=================== |
|||
HTML Description: `<static/description/index.html>`__ |
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
|
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: LINTO C T (odoo@cybrosys.com) |
|||
# you can modify it under the terms of the GNU LESSER |
|||
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
|||
|
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
|||
# If not, see <https://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
from . import models |
|||
from . import controllers |
|||
|
|||
|
@ -0,0 +1,44 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: LINTO C T (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
{ |
|||
'name': 'Website Coupon Code', |
|||
'version': '13.0.1.0.0', |
|||
'summary': 'Manage Website Coupon Codes for Products/Categories/All Products & Its Redeem Operations', |
|||
'category': 'Website', |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'maintainer': 'Cybrosys Techno Solutions', |
|||
'depends': ['sale_management', 'website_sale'], |
|||
'website': 'https://www.cybrosys.com', |
|||
'data': [ |
|||
'data/product_data.xml', |
|||
'views/gift_voucher.xml', |
|||
'views/applied_coupons.xml', |
|||
'views/templates.xml', |
|||
'security/ir.model.access.csv' |
|||
], |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'AGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': False, |
|||
} |
@ -0,0 +1,3 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
from . import main |
@ -0,0 +1,155 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
from datetime import datetime |
|||
|
|||
from odoo import fields, http, tools, _ |
|||
from odoo.http import request |
|||
from odoo.addons.website_sale.controllers.main import WebsiteSale |
|||
|
|||
|
|||
class WebsiteCoupon(WebsiteSale): |
|||
|
|||
@http.route(['/shop/cart'], type='http', auth="public", website=True) |
|||
def cart(self, access_token=None, revive='', **post): |
|||
|
|||
order = request.website.sale_get_order() |
|||
if order and order.state != 'draft': |
|||
request.session['sale_order_id'] = None |
|||
order = request.website.sale_get_order() |
|||
values = {} |
|||
|
|||
if order: |
|||
from_currency = order.company_id.currency_id |
|||
to_currency = order.pricelist_id.currency_id |
|||
compute_currency = lambda price: from_currency._convert( |
|||
price, to_currency, request.env.user.company_id, fields.Date.today()) |
|||
else: |
|||
compute_currency = lambda price: price |
|||
|
|||
values.update({ |
|||
'website_sale_order': order, |
|||
'compute_currency': compute_currency, |
|||
'date': fields.Date.today(), |
|||
'suggested_products': [], |
|||
}) |
|||
if order: |
|||
_order = order |
|||
if not request.env.context.get('pricelist'): |
|||
_order = order.with_context(pricelist=order.pricelist_id.id) |
|||
values['suggested_products'] = _order._cart_accessories() |
|||
|
|||
if post.get('type') == 'popover': |
|||
return request.render("website_sale.cart_popover", values, headers={'Cache-Control': 'no-cache'}) |
|||
if post.get('code_not_available'): |
|||
values['code_not_available'] = post.get('code_not_available') |
|||
elif post.get('coupon_not_available'): |
|||
values['coupon_not_available'] = post.get('coupon_not_available') |
|||
|
|||
return request.render("website_sale.cart", values) |
|||
|
|||
@http.route(['/shop/gift_coupon'], type='http', auth="public", website=True) |
|||
def gift_coupon(self, promo_voucher, **post): |
|||
"""This function will be executed when we click the apply button of the voucher code in the website. |
|||
It will verify the validity and availability of that coupon. If it can be applied, the coupon will be applied |
|||
and coupon balance will also be updated""" |
|||
|
|||
curr_user = request.env.user |
|||
coupon = request.env['gift.coupon'].sudo().search([('code', '=', promo_voucher)], limit=1) |
|||
flag = True |
|||
if coupon and coupon.total_avail > 0: |
|||
applied_coupons = request.env['partner.coupon'].sudo().search([('coupon', '=', promo_voucher), |
|||
('partner_id', '=', curr_user.partner_id.id)], limit=1) |
|||
|
|||
# checking voucher date and limit for each user for this coupon--------------------- |
|||
if coupon.partner_id: |
|||
if curr_user.partner_id.id != coupon.partner_id.id: |
|||
flag = False |
|||
today = datetime.now().date() |
|||
if flag and applied_coupons.number < coupon.limit and today <= coupon.voucher.expiry_date: |
|||
# checking coupon validity --------------------------- |
|||
# checking date of coupon ------------ |
|||
if coupon.start_date and coupon.end_date: |
|||
if today < coupon.start_date or today > coupon.end_date: |
|||
flag = False |
|||
elif coupon.start_date: |
|||
if today < coupon.start_date: |
|||
flag = False |
|||
elif coupon.end_date: |
|||
if today > coupon.end_date: |
|||
flag = False |
|||
else: |
|||
flag = False |
|||
else: |
|||
flag = False |
|||
if flag: |
|||
voucher_type = coupon.voucher.voucher_type |
|||
voucher_val = coupon.voucher_val |
|||
type = coupon.type |
|||
coupon_product = request.env['product.product'].sudo().search([('name', '=', 'Gift Coupon')], limit=1) |
|||
if coupon_product: |
|||
order = request.website.sale_get_order(force_create=1) |
|||
flag_product = False |
|||
for line in order.order_line: |
|||
if line.product_id.name == 'Gift Coupon': |
|||
flag = False |
|||
break |
|||
if flag and order.order_line: |
|||
if voucher_type == 'product': |
|||
# the voucher type is product ---------------------------- |
|||
categ_id = coupon.voucher.product_id |
|||
for line in order.order_line: |
|||
if line.product_id.name == categ_id.name: |
|||
flag_product = True |
|||
elif voucher_type == 'category': |
|||
# the voucher type is category ---------------------------- |
|||
product_id = coupon.voucher.product_categ |
|||
for line in order.order_line: |
|||
if line.product_id.categ_id.name == product_id.name: |
|||
flag_product = True |
|||
elif voucher_type == 'all': |
|||
# the voucher is applicable to all products ---------------------------- |
|||
flag_product = True |
|||
if flag_product: |
|||
# the voucher is applicable -------------------------------------- |
|||
if type == 'fixed': |
|||
# coupon type is 'fixed'-------------------------------------- |
|||
if voucher_val < order.amount_total: |
|||
coupon_product.product_tmpl_id.write({'list_price': -voucher_val}) |
|||
|
|||
else: |
|||
return request.redirect("/shop/cart?coupon_not_available=3") |
|||
elif type == 'percentage': |
|||
# coupon type is percentage ------------------------------------- |
|||
amount_final = 0 |
|||
if voucher_type == 'product': |
|||
for line in order.order_line: |
|||
if line.product_id.name == categ_id.name: |
|||
amount_final = (voucher_val / 100) * line.price_total |
|||
break |
|||
elif voucher_type == 'category': |
|||
for line in order.order_line: |
|||
if line.product_id.categ_id.name == product_id.name: |
|||
amount_final += (voucher_val / 100) * line.price_total |
|||
elif voucher_type == 'all': |
|||
amount_final = (voucher_val/100) * order.amount_total |
|||
coupon_product.product_tmpl_id.write({'list_price': -amount_final}) |
|||
order._cart_update(product_id=coupon_product.id, set_qty=1, add_qty=1) |
|||
# updating coupon balance-------------- |
|||
total = coupon.total_avail - 1 |
|||
coupon.write({'total_avail': total}) |
|||
# creating a record for this partner, i.e he is used this coupon once----------- |
|||
if not applied_coupons: |
|||
curr_user.partner_id.write({'applied_coupon': [(0, 0, {'partner_id': curr_user.partner_id.id, |
|||
'coupon': coupon.code, |
|||
'number': 1})]}) |
|||
else: |
|||
applied_coupons.write({'number': applied_coupons.number + 1}) |
|||
else: |
|||
return request.redirect("/shop/cart?coupon_not_available=1") |
|||
else: |
|||
return request.redirect("/shop/cart?coupon_not_available=2") |
|||
else: |
|||
|
|||
return request.redirect("/shop/cart?coupon_not_available=1") |
|||
|
|||
return request.redirect("/shop/cart") |
@ -0,0 +1,6 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo noupdate="1"> |
|||
<record model="product.product" id="discount_product"> |
|||
<field name="name">Gift Coupon</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,6 @@ |
|||
## Module <website_coupon> |
|||
|
|||
#### 28.10.2019 |
|||
#### Version 13.0.1.0.0 |
|||
|
|||
Initial Commit for Website Coupon. |
@ -0,0 +1,315 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * website_coupon |
|||
# |
|||
# Xavier Brochard <xavier@alternatif.org>, 2017. |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 10.0-20171109\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2017-11-17 11:24+0000\n" |
|||
"PO-Revision-Date: 2017-11-17 15:04+0100\n" |
|||
"Last-Translator: Xavier Brochard <xavier@alternatif.org>\n" |
|||
"Language-Team: French <>\n" |
|||
"MIME-Version: 1.0\n" |
|||
"Content-Type: text/plain; charset=UTF-8\n" |
|||
"Content-Transfer-Encoding: \n" |
|||
"Plural-Forms: \n" |
|||
"Language: fr\n" |
|||
"X-Generator: Lokalize 2.0\n" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.view,arch_db:website_coupon.cart_lines_extended |
|||
msgid "<small><i class=\"fa fa-trash-o\"/> Remove</small>" |
|||
msgstr "<small><i class=\"fa fa-trash-o\"/> Enlever</small>" |
|||
|
|||
#. module: website_coupon |
|||
#: selection:gift.voucher,voucher_type:0 |
|||
msgid "All Products" |
|||
msgstr "Tous les articles" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_voucher_voucher_type |
|||
msgid "Applicable on " |
|||
msgstr "Valable sur" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.view,arch_db:website_coupon.applied_coupons_view |
|||
msgid "Applied Coupons" |
|||
msgstr "" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.view,arch_db:website_coupon.voucher_code |
|||
msgid "Apply" |
|||
msgstr "Valider" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_code |
|||
msgid "Code" |
|||
msgstr "" |
|||
|
|||
#. module: website_coupon |
|||
#: sql_constraint:gift.coupon:0 |
|||
msgid "Code already exists !" |
|||
msgstr "Ce code existe déjà!" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.view,arch_db:website_coupon.gift_coupon_form |
|||
msgid "Conditions" |
|||
msgstr "Restrictions obligatoires" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_partner_coupon_coupon |
|||
msgid "Coupon Applied" |
|||
msgstr "Code utilisé" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.menu,name:website_coupon.gift_coupon_history |
|||
msgid "Coupon History" |
|||
msgstr "Utilisation" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_res_partner_applied_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_res_users_applied_coupon |
|||
msgid "Coupons Applied" |
|||
msgstr "" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_create_uid |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_voucher_create_uid |
|||
#: model:ir.model.fields,field_description:website_coupon.field_partner_coupon_create_uid |
|||
msgid "Created by" |
|||
msgstr "" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_create_date |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_voucher_create_date |
|||
#: model:ir.model.fields,field_description:website_coupon.field_partner_coupon_create_date |
|||
msgid "Created on" |
|||
msgstr "" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_display_name |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_voucher_display_name |
|||
#: model:ir.model.fields,field_description:website_coupon.field_partner_coupon_display_name |
|||
msgid "Display Name" |
|||
msgstr "Nom affiché" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_end_date |
|||
msgid "End Date" |
|||
msgstr "Finit le" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_voucher_expiry_date |
|||
msgid "Expiry Date" |
|||
msgstr "Expire le" |
|||
|
|||
#. module: website_coupon |
|||
#: selection:gift.coupon,type:0 |
|||
msgid "Fixed Amount" |
|||
msgstr "Montant fixe" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.actions.act_window,name:website_coupon.action_gift_coupon |
|||
msgid "Generate Gift Coupons" |
|||
msgstr "Créer des codes promotionnels" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.menu,name:website_coupon.gift_coupon |
|||
#: model:product.product,name:website_coupon.discount_product |
|||
#: model:product.template,name:website_coupon.discount_product_product_template |
|||
msgid "Gift Coupon" |
|||
msgstr "Code promotionel" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.menu,name:website_coupon.gift_coupon_main |
|||
msgid "Gift Coupons" |
|||
msgstr "Codes promo" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.actions.act_window,name:website_coupon.action_gift_coupon_history |
|||
msgid "Gift Coupons History" |
|||
msgstr "Promotions utilisées" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.menu,name:website_coupon.gift_voucher |
|||
msgid "Gift Voucher" |
|||
msgstr "Promotions autorisées" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.actions.act_window,name:website_coupon.action_gift_voucher |
|||
msgid "Gift Vouchers" |
|||
msgstr "Promotions autorisées" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.view,arch_db:website_coupon.voucher_code |
|||
msgid "Have a voucher code? Fill this field and apply." |
|||
msgstr "Vous avez un code de réduction ? Remplissez ce champ et validez." |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_id |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_voucher_id |
|||
#: model:ir.model.fields,field_description:website_coupon.field_partner_coupon_id |
|||
msgid "ID" |
|||
msgstr "" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon___last_update |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_voucher___last_update |
|||
#: model:ir.model.fields,field_description:website_coupon.field_partner_coupon___last_update |
|||
msgid "Last Modified on" |
|||
msgstr "" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_write_uid |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_voucher_write_uid |
|||
#: model:ir.model.fields,field_description:website_coupon.field_partner_coupon_write_uid |
|||
msgid "Last Updated by" |
|||
msgstr "" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_write_date |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_voucher_write_date |
|||
#: model:ir.model.fields,field_description:website_coupon.field_partner_coupon_write_date |
|||
msgid "Last Updated on" |
|||
msgstr "" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_partner_id |
|||
msgid "Limit to a Single Partner" |
|||
msgstr "Limiter au contact" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_voucher_max_value |
|||
msgid "Maximum Voucher Value" |
|||
msgstr "Valeur de calcul maximum" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_voucher_min_value |
|||
msgid "Minimum Voucher Value" |
|||
msgstr "Valeur de calcul minimum" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_name |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_voucher_name |
|||
#: model:ir.ui.view,arch_db:website_coupon.gift_coupon_form |
|||
msgid "Name" |
|||
msgstr "Nom" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_partner_coupon_number |
|||
msgid "Number of Times Used" |
|||
msgstr "Nombre de fois" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model,name:website_coupon.model_res_partner |
|||
#: model:ir.model.fields,field_description:website_coupon.field_partner_coupon_partner_id |
|||
msgid "Partner" |
|||
msgstr "Contact" |
|||
|
|||
#. module: website_coupon |
|||
#: selection:gift.coupon,type:0 |
|||
msgid "Percentage" |
|||
msgstr "Pourcentage" |
|||
|
|||
#. module: website_coupon |
|||
#: code:addons/website_coupon/models/gift_voucher.py:77 |
|||
#, python-format |
|||
msgid "Please check the voucher value" |
|||
msgstr "" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.view,arch_db:website_coupon.cart_lines_extended |
|||
msgid "Price" |
|||
msgstr "Prix" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.view,arch_db:website_coupon.gift_coupon_form |
|||
msgid "Pricing" |
|||
msgstr "Montant" |
|||
|
|||
#. module: website_coupon |
|||
#: selection:gift.voucher,voucher_type:0 |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_voucher_product_id |
|||
#: model:ir.ui.view,arch_db:website_coupon.cart_lines_extended |
|||
msgid "Product" |
|||
msgstr "Article" |
|||
|
|||
#. module: website_coupon |
|||
#: selection:gift.voucher,voucher_type:0 |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_voucher_product_categ |
|||
msgid "Product Category" |
|||
msgstr "Catégorie d'articles" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.view,arch_db:website_coupon.cart_lines_extended |
|||
msgid "Quantity" |
|||
msgstr "Quantité" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_start_date |
|||
msgid "Start Date" |
|||
msgstr "Débute le" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.view,arch_db:website_coupon.voucher_code |
|||
msgid "The discount amount is too large" |
|||
msgstr "" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.view,arch_db:website_coupon.voucher_code |
|||
msgid "This gift code is not available" |
|||
msgstr "Ce code n'est pas valable" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_total_avail |
|||
msgid "Total Available" |
|||
msgstr "Quantité totale disponible" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_limit |
|||
msgid "Total Available For Each User" |
|||
msgstr "Quantité maxi par personne" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_type |
|||
msgid "Type" |
|||
msgstr "" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_voucher |
|||
msgid "Voucher" |
|||
msgstr "Autorisation" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.view,arch_db:website_coupon.voucher_code |
|||
msgid "Voucher Code" |
|||
msgstr "Code promo" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model.fields,field_description:website_coupon.field_gift_coupon_voucher_val |
|||
msgid "Voucher Value" |
|||
msgstr "Valeur de calcul" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.ui.view,arch_db:website_coupon.voucher_code |
|||
msgid "code..." |
|||
msgstr "" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model,name:website_coupon.model_gift_coupon |
|||
msgid "gift.coupon" |
|||
msgstr "" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model,name:website_coupon.model_gift_voucher |
|||
msgid "gift.voucher" |
|||
msgstr "" |
|||
|
|||
#. module: website_coupon |
|||
#: model:ir.model,name:website_coupon.model_partner_coupon |
|||
msgid "partner.coupon" |
|||
msgstr "" |
|||
|
|||
|
@ -0,0 +1,22 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: LINTO C T (odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
from . import gift_voucher |
@ -0,0 +1,88 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2018-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: LINTO C T(<https://www.cybrosys.com>) |
|||
# you can modify it under the terms of the GNU LESSER |
|||
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
|||
|
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
|||
# If not, see <https://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
import string |
|||
import random |
|||
from odoo import models, fields, api, _ |
|||
from datetime import datetime,date |
|||
from odoo.exceptions import UserError |
|||
|
|||
|
|||
class GiftVoucher(models.Model): |
|||
_name = 'gift.voucher' |
|||
|
|||
name = fields.Char(string="Name", required=True) |
|||
voucher_type = fields.Selection( |
|||
selection=[ |
|||
('product', 'Product'), |
|||
('category', 'Product Category'), |
|||
('all', 'All Products'), |
|||
], string="Applicable on ", default='product' |
|||
) |
|||
product_id = fields.Many2one('product.product', string="Product") |
|||
product_categ = fields.Many2one('product.category', string="Product Category") |
|||
min_value = fields.Integer(string="Minimum Voucher Value", required=True) |
|||
max_value = fields.Integer(string="Maximum Voucher Value", required=True) |
|||
expiry_date = fields.Date(string="Expiry Date", required=True) |
|||
|
|||
|
|||
class GiftCoupon(models.Model): |
|||
_name = 'gift.coupon' |
|||
|
|||
def get_code(self): |
|||
size = 7 |
|||
chars = string.ascii_uppercase + string.digits |
|||
return ''.join(random.choice(chars) for _ in range(size)) |
|||
|
|||
_sql_constraints = [ |
|||
('name_uniq', 'unique (code)', "Code already exists !"), |
|||
] |
|||
|
|||
name = fields.Char(string="Name", required=True) |
|||
code = fields.Char(string="Code", default=get_code) |
|||
voucher = fields.Many2one('gift.voucher', string="Voucher", required=True) |
|||
start_date = fields.Date(string="Start Date") |
|||
end_date = fields.Date(string="End Date") |
|||
partner_id = fields.Many2one('res.partner', string="Limit to a Single Partner") |
|||
limit = fields.Integer(string="Total Available For Each User", default=1) |
|||
total_avail = fields.Integer(string="Total Available", default=1) |
|||
voucher_val = fields.Float(string="Voucher Value") |
|||
type = fields.Selection([ |
|||
('fixed', 'Fixed Amount'), |
|||
('percentage', 'Percentage'), |
|||
], store=True, default='fixed') |
|||
|
|||
@api.onchange('voucher_val') |
|||
def check_val(self): |
|||
if self.voucher_val > self.voucher.max_value or self.voucher_val < self.voucher.min_value: |
|||
raise UserError(_("Please check the voucher value")) |
|||
|
|||
|
|||
class CouponPartner(models.Model): |
|||
_name = 'partner.coupon' |
|||
|
|||
partner_id = fields.Many2one('res.partner', string="Partner") |
|||
coupon = fields.Char(string="Coupon Applied") |
|||
number = fields.Integer(string="Number of Times Used") |
|||
|
|||
|
|||
class PartnerExtended(models.Model): |
|||
_inherit = 'res.partner' |
|||
|
|||
applied_coupon = fields.One2many('partner.coupon', 'partner_id', string="Coupons Applied") |
|
After Width: | Height: | Size: 75 KiB |
After Width: | Height: | Size: 61 KiB |