@ -0,0 +1,44 @@ |
|||
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg |
|||
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html |
|||
:alt: License: AGPL-3 |
|||
|
|||
Product Management System |
|||
========================== |
|||
|
|||
* This module helps in product management system. |
|||
|
|||
Configuration |
|||
============ |
|||
- No additional configuration required |
|||
|
|||
Company |
|||
------- |
|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
|||
|
|||
License |
|||
------- |
|||
General Public License, Version 3 (AGPL v3). |
|||
(https://www.gnu.org/licenses/agpl-3.0-standalone.html) |
|||
|
|||
Credits |
|||
------- |
|||
* Developer: (V16) Amaya Aravind EV, Ashwin A |
|||
* Contact: odoo@cybrosys.com |
|||
|
|||
Contacts |
|||
-------- |
|||
* Mail Contact : odoo@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 |
|||
========== |
|||
This module is maintained by Cybrosys Technologies. |
|||
|
|||
For support and more information, please visit https://www.cybrosys.com |
|||
|
|||
Further information |
|||
=================== |
|||
HTML Description: `<static/description/index.html>`__ |
@ -0,0 +1,22 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 wizard |
@ -0,0 +1,73 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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/>. |
|||
# |
|||
################################################################################ |
|||
{ |
|||
'name': 'Product Management System', |
|||
'version': '16.0.1.0.0', |
|||
'category': 'Warehouse , Extra Tools', |
|||
'summary': """This module helps in product management system.""", |
|||
'description': """ Mass actions are operations that might be proceeded for |
|||
a number of product templates in batch. The tool offers multiple default |
|||
actions, among which you can select the required ones.""", |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'maintainer': 'Cybrosys Techno Solutions', |
|||
'website': "https://www.cybrosys.com", |
|||
'depends': ['product', 'website_sale', 'purchase', 'stock'], |
|||
'data': [ |
|||
'security/product_management_system_groups.xml', |
|||
'security/ir.model.access.csv', |
|||
'views/product_management_system_views.xml', |
|||
'views/product_management_system_menus.xml', |
|||
'wizard/product_add_vendor.xml', |
|||
'wizard/product_category_change_views.xml', |
|||
'wizard/product_update_price_views.xml', |
|||
'wizard/product_make_purchasable_views.xml', |
|||
'wizard/product_make_salable_views.xml', |
|||
'wizard/product_delete_views.xml', |
|||
'wizard/product_alternative_views.xml', |
|||
'wizard/product_archive_views.xml', |
|||
'wizard/product_accessory_views.xml', |
|||
'wizard/product_optional_views.xml', |
|||
'wizard/product_invoice_views.xml', |
|||
'wizard/product_customer_tax_views.xml', |
|||
'wizard/product_vendor_tax_views.xml', |
|||
'wizard/product_publish_views.xml', |
|||
'wizard/product_category_website_views.xml', |
|||
'wizard/product_add_attribute_views.xml', |
|||
'wizard/product_change_tracking_views.xml', |
|||
'wizard/product_production_location_views.xml', |
|||
'wizard/product_inventory_location_views.xml', |
|||
'wizard/product_customer_lead_time_views.xml', |
|||
], |
|||
'assets': { |
|||
'web.assets_backend': [ |
|||
'product_management_system/static/src/css/**.css', |
|||
'product_management_system/static/src/xml/**.xml', |
|||
'product_management_system/static/src/js/**.js', |
|||
] |
|||
}, |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'AGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': True, |
|||
} |
@ -0,0 +1,7 @@ |
|||
## Module <product_management_system> |
|||
|
|||
#### 04.05.2024 |
|||
#### Version 16.0.1.0.0 |
|||
#### ADD |
|||
|
|||
- Initial Commit for Product Management System |
|
@ -0,0 +1,8 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<!-- New user group created for product management--> |
|||
<record id="user_product_management" model="res.groups"> |
|||
<field name="name">Product Management</field> |
|||
<field name="category_id" ref="base.module_category_usability"/> |
|||
</record> |
|||
</odoo> |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 576 B |
After Width: | Height: | Size: 733 B |
After Width: | Height: | Size: 911 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 673 B |
After Width: | Height: | Size: 878 B |
After Width: | Height: | Size: 653 B |
After Width: | Height: | Size: 905 B |
After Width: | Height: | Size: 839 B |
After Width: | Height: | Size: 427 B |
After Width: | Height: | Size: 627 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 988 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 589 B |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 967 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 95 KiB |
After Width: | Height: | Size: 239 KiB |
After Width: | Height: | Size: 222 KiB |
After Width: | Height: | Size: 226 KiB |
After Width: | Height: | Size: 236 KiB |
After Width: | Height: | Size: 216 KiB |
After Width: | Height: | Size: 221 KiB |
After Width: | Height: | Size: 222 KiB |
After Width: | Height: | Size: 138 KiB |
After Width: | Height: | Size: 253 KiB |
After Width: | Height: | Size: 227 KiB |
After Width: | Height: | Size: 222 KiB |
After Width: | Height: | Size: 229 KiB |
After Width: | Height: | Size: 226 KiB |
After Width: | Height: | Size: 216 KiB |
After Width: | Height: | Size: 231 KiB |
After Width: | Height: | Size: 218 KiB |
After Width: | Height: | Size: 830 KiB |
After Width: | Height: | Size: 103 KiB |
After Width: | Height: | Size: 16 KiB |
@ -0,0 +1,786 @@ |
|||
<div style="background-color: #714B67; min-height: 600px; width: 100%; padding: 15px; position: relative;"> |
|||
<!-- TITLE BAR --> |
|||
<div class="d-flex align-items-center justify-content-between" |
|||
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;"> |
|||
<img src="assets/misc/logo.png" width="162" height="60" |
|||
style="width:auto !important; height:60px !important"/> |
|||
<div> |
|||
<div style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" |
|||
class="mr-2"> |
|||
<i class="fa fa-check mr-1"></i>Community |
|||
</div> |
|||
<div |
|||
style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" |
|||
class="mr-2"> |
|||
<i class="fa fa-check mr-1"></i>Enterprise |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF TITLE BAR --> |
|||
<div class="container"> |
|||
<div class="row"> |
|||
<div class="col-sm-12 col-md-12 col-lg-12"> |
|||
<!-- APP HERO --> |
|||
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;"> |
|||
Product Management System |
|||
</h1> |
|||
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">This module helps in product management system.</p> |
|||
<!-- END OF APP HERO --> |
|||
<img src="./assets/screenshots/hero.png" |
|||
style="width: 75%; height: auto; position: absolute; margin-left: auto; margin-right: auto; top: 45%; left: 12%; right: auto;"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- NAVIGATION SECTION --> |
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="assets/misc/compass.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Explore This |
|||
Module</h2> |
|||
</div> |
|||
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;"> |
|||
<div class="col-sm-12 col-md-6 my-3"> |
|||
<a href="#overview"> |
|||
<div class="d-flex justify-content-between align-items-center" |
|||
style="background-color: #f5f5f5; padding: 30px; width: 100%;"> |
|||
<div> |
|||
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span> |
|||
<span |
|||
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn more about this module.</span> |
|||
</div> |
|||
<img src="assets/misc/right-arrow.png" width="36" height="36"/> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
|
|||
<div class="col-sm-12 col-md-6 my-3"> |
|||
<a href="#features"> |
|||
<div class="d-flex justify-content-between align-items-center" |
|||
style="background-color: #f5f5f5; padding: 30px; width: 100%;"> |
|||
<div> |
|||
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span> |
|||
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View |
|||
features of this |
|||
module</span> |
|||
</div> |
|||
<img src="assets/misc/right-arrow.png" width="36" height="36"/> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-sm-12 col-md-6 my-3"> |
|||
<a href="#screenshots"> |
|||
<div class="d-flex justify-content-between align-items-center" |
|||
style="background-color: #f5f5f5; padding: 30px; width: 100%;"> |
|||
<div> |
|||
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span> |
|||
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View |
|||
screenshots for this |
|||
module</span> |
|||
</div> |
|||
<img src="assets/misc/right-arrow.png" width="36" height="36"/> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<!-- END OF NAVIGATION SECTION --> |
|||
|
|||
<!-- OVERVIEW SECTION --> |
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" |
|||
id="overview"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="assets/misc/pie-chart.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Overview |
|||
</h2> |
|||
</div> |
|||
<div class="row" |
|||
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> |
|||
<div class="col-sm-12 py-4"> |
|||
Mass actions and operations that might be proceeded for a number of |
|||
product templates in batch. |
|||
The tool offers multiple default actions, among which you can select the |
|||
required ones. |
|||
</div> |
|||
</div> |
|||
<!-- END OF OVERVIEW SECTION --> |
|||
|
|||
<!-- FEATURES SECTION --> |
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" |
|||
id="features"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="assets/misc/features.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Features |
|||
</h2> |
|||
</div> |
|||
<div class="row" |
|||
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> |
|||
<div class="col-sm-12 col-md-6"> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Change the product category of all selected items.</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 30px; margin-bottom: 30px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Change the product customer lead time of all selected items.</span> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Archive products in bulk.</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Update the product sales price of all selected items.</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Add product vendors for all selected items.</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Make product salable and purchasable for all selected items.</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Delete all selected products.</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Publish or unpublish products in batch.</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Add Alternative products for all selected items.</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Add Accessory products for all selected items.</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Add Optional products for all selected items.</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Change invoice policy of all selected items.</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Add Customer/Vendor taxes for all selected items.</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Change website product category of all selected items.</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Add Attribute & Variants for all selected items.</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Change product tracking for all selected items.</span> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex align-items-start" |
|||
style="margin-top: 40px; margin-bottom: 40px"> |
|||
<img src="assets/misc/check-box.png" class="mr-2"/> |
|||
<div> |
|||
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Change Production/Inventory location for all selected items.</span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF FEATURES SECTION --> |
|||
|
|||
<!-- SCREENSHOTS SECTION --> |
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" |
|||
id="screenshots"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="assets/misc/pictures.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Screenshots |
|||
</h2> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-sm-12"> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
User Configuration</h3> |
|||
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Settings -> Users -> Turn on Product Management </p> |
|||
<img src="assets/screenshots/16.png" class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Kanban View Of Products</h3> |
|||
<img src="assets/screenshots/1.png" class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
By selecting Products in kanban view a new list of buttons will be shown</h3> |
|||
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> |
|||
We can perform different actions for the selected products.</p> |
|||
<img src="assets/screenshots/2.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Change Product Category</h3> |
|||
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> |
|||
By clicking the change category button a wizard appear for changing category of selected products.</p> |
|||
<img src="assets/screenshots/3.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Change Customer Lead Time</h3> |
|||
<img src="assets/screenshots/4.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Archive Products</h3> |
|||
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> |
|||
<img src="assets/screenshots/5.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Update Sale Price Of Selected Products</h3> |
|||
<img src="assets/screenshots/6.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Add Vendors For Selected Products</h3> |
|||
<img src="assets/screenshots/7.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Make Product Salable</h3> |
|||
<img src="assets/screenshots/8.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Add Alternative Products For Selected Products</h3> |
|||
<img src="assets/screenshots/9.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Edit Invoice Policy Of Selected Products</h3> |
|||
<img src="assets/screenshots/10.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Change Customer Tax Of Selected Products</h3> |
|||
<img src="assets/screenshots/11.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Change Website Category Of Selected Products</h3> |
|||
<img src="assets/screenshots/12.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Add Product Attributes</h3> |
|||
<img src="assets/screenshots/13.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Change Product Tracking Method Of Selected Products</h3> |
|||
<img src="assets/screenshots/14.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
<div style="display: block; margin: 30px auto;"> |
|||
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> |
|||
Change Production Location Of Selected Products</h3> |
|||
<img src="assets/screenshots/15.png" |
|||
class="img-thumbnail"> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
<!-- END OF SCREENSHOTS SECTION --> |
|||
|
|||
<!-- SUGGESTED PRODUCTS --> |
|||
<div class="row"> |
|||
<div class="col-lg-12 d-flex flex-column justify-content-center" |
|||
style="text-align: center; padding: 2.5rem 1rem !important;"> |
|||
<h2 style="color: #212529 !important;">Suggested Products</h2> |
|||
<hr style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/> |
|||
|
|||
<div id="demo1" class="row carousel slide" data-ride="carousel"> |
|||
<!-- The slideshow --> |
|||
<div class="carousel-inner" style="padding: 30px;"> |
|||
<div class="carousel-item active" |
|||
style="min-height: 198.656px;"> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" |
|||
style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/16.0/low_stocks_product_alert/" |
|||
target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" |
|||
style="border-radius: 0px;" |
|||
src="./assets/modules/1.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" |
|||
style="float:left"> |
|||
<a href="/home/cybrosys/Downloads/low_stocks_product_alert-16.0.1.0.0/low_stocks_product_alert/static/description/banner.png" |
|||
target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" |
|||
style="border-radius: 0px;" |
|||
src="./assets/modules/2.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" |
|||
style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/16.0/stock_intercompany_transfer/" |
|||
target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" |
|||
style="border-radius: 0px;" |
|||
src="./assets/modules/3.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="carousel-item active" |
|||
style="min-height: 198.656px;"> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" |
|||
style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/16.0/automatic_invoice_and_post/" |
|||
target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" |
|||
style="border-radius: 0px;" |
|||
src="./assets/modules/4.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" |
|||
style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/16.0/hide_all_print_button/" |
|||
target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" |
|||
style="border-radius: 0px;" |
|||
src="./assets/modules/5.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
<div class="carousel-item active" |
|||
style="min-height: 198.656px;"> |
|||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" |
|||
style="float:left"> |
|||
<a href="https://apps.odoo.com/apps/modules/16.0/merge_picking_orders/" |
|||
target="_blank"> |
|||
<div style="border-radius:10px"> |
|||
<img class="img img-responsive center-block" |
|||
style="border-radius: 0px;" |
|||
src="./assets/modules/6.png"> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- Left and right controls --> |
|||
<a class="carousel-control-prev" href="#demo1" |
|||
data-slide="prev" style="width:35px; color:#000"> <span |
|||
class="carousel-control-prev-icon"><i |
|||
class="fa fa-chevron-left" |
|||
style="font-size:24px"></i></span> |
|||
</a> <a class="carousel-control-next" href="#demo1" |
|||
data-slide="next" style="width:35px; color:#000"> |
|||
<span class="carousel-control-next-icon"><i |
|||
class="fa fa-chevron-right" |
|||
style="font-size:24px"></i></span> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF SUGGESTED PRODUCTS --> |
|||
|
|||
<!-- OUR SERVICES --> |
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="assets/misc/star.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Our Services |
|||
</h2> |
|||
</div> |
|||
<div class="container my-5"> |
|||
<div class="row"> |
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/cogs.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Customization</h6> |
|||
</div> |
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/wrench.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Implementation</h6> |
|||
</div> |
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/lifebuoy.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Support</h6> |
|||
</div> |
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/user.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Hire |
|||
Odoo |
|||
Developer</h6> |
|||
</div> |
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/puzzle.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Integration</h6> |
|||
</div> |
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/update.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Migration</h6> |
|||
</div> |
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/consultation.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Consultancy</h6> |
|||
</div> |
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/training.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Implementation</h6> |
|||
</div> |
|||
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
|||
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
|||
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
|||
<img src="assets/icons/license.png" class="img-responsive" |
|||
height="48px" width="48px"> |
|||
</div> |
|||
<h6 class="text-center" |
|||
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
|||
Odoo |
|||
Licensing Consultancy</h6> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF OUR SERVICES --> |
|||
|
|||
<!-- OUR INDUSTRIES --> |
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="assets/misc/corporate.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Our |
|||
Industries |
|||
</h2> |
|||
</div> |
|||
<div class="container my-5"> |
|||
<div class="row"> |
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="assets/icons/trading-black.png/" |
|||
class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Trading |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Easily procure |
|||
and |
|||
sell your products</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="assets/icons/pos-black.png/" |
|||
class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
POS |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Easy |
|||
configuration |
|||
and convivial experience.</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="assets/icons/education-black.png/" |
|||
class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Education |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
A platform for |
|||
educational management.</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="assets/icons/manufacturing-black.png/" |
|||
class="img-responsive mb-3" height="48px" |
|||
width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Manufacturing |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Plan, track and |
|||
schedule your operations.</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="./assets/icons/ecom-black.png/" |
|||
class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
E-commerce & Website |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Mobile |
|||
friendly, |
|||
awe-inspiring product pages.</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="./assets/icons/service-black.png/" |
|||
class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Service Management |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Keep track of |
|||
services and invoice.</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="./assets/icons/restaurant-black.png/" |
|||
class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Restaurant |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
Run your bar or |
|||
restaurant methodically.</p> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="col-lg-3"> |
|||
<div class="my-4 d-flex flex-column justify-content-center" |
|||
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> |
|||
<img src="./assets/icons/hotel-black.png/" |
|||
class="img-responsive mb-3" height="48px" width="48px"> |
|||
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
|||
Hotel Management |
|||
</h5> |
|||
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
|||
An |
|||
all-inclusive |
|||
hotel management application.</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF OUR INDUSTRIES --> |
|||
|
|||
<!-- SUPPORT --> |
|||
<div class="d-flex align-items-center" |
|||
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> |
|||
<div class="d-flex justify-content-center align-items-center mr-2" |
|||
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> |
|||
<img src="assets/misc/customer-support.png"/> |
|||
</div> |
|||
<h2 class="mt-2" |
|||
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> |
|||
Support |
|||
</h2> |
|||
</div> |
|||
<div class="container mt-5"> |
|||
<div class="row"> |
|||
<div class="col-sm-12 col-md-6"> |
|||
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> |
|||
<div class="mr-4" |
|||
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> |
|||
<img src="assets/misc/support.png" height="48" width="48" |
|||
style="width: 42px; height: 42px;"/> |
|||
</div> |
|||
<div> |
|||
<h4>Need Help?</h4> |
|||
<p style="line-height: 100%;">Got questions or need help? |
|||
Get in touch.</p> |
|||
<a href="mailto:odoo@cybrosys.com"> |
|||
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;"> |
|||
odoo@cybrosys.com</p> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-sm-12 col-md-6"> |
|||
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> |
|||
<div class="mr-4" |
|||
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> |
|||
<img src="assets/misc/whatsapp.png" height="52" width="52" |
|||
style="width: 52px; height: 52px;"/> |
|||
</div> |
|||
<div> |
|||
<h4>WhatsApp</h4> |
|||
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p> |
|||
<a href="https://api.whatsapp.com/send?phone=918606827707"> |
|||
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;"> |
|||
+91 86068 |
|||
27707</p> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center"> |
|||
<img src="assets/misc/logo.png" width="144" height="31" |
|||
style="width:144px; height: 31px; margin-top: 40px;"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- END OF SUPPORT --> |
@ -0,0 +1,3 @@ |
|||
.o_cp_bottom_right{ |
|||
height: fit-content; |
|||
} |
@ -0,0 +1,364 @@ |
|||
/** @odoo-module **/ |
|||
|
|||
var KanbanController = require('web.KanbanController'); |
|||
var KanbanView = require('web.KanbanView'); |
|||
var viewRegistry = require('web.view_registry'); |
|||
var products_selected = []; |
|||
|
|||
var KanbanButton = KanbanController.extend({ |
|||
// Extending KanbanController and Creating buttons and its functions
|
|||
buttons_template: 'button_in_kanban.button', |
|||
events: _.extend({}, KanbanController.prototype.events, { |
|||
'click .product_check_box': '_onSelectDocs', |
|||
'click .on_change_category': '_onChangeCategory', |
|||
'click .on_customer_lead_time_products': '_onCustLeadTimeProducts', |
|||
'click .on_archive_products': '_onArchiveProducts', |
|||
'click .on_update_price': '_onUpdatePrice', |
|||
'click .on_add_vendor': '_onAddVendor', |
|||
'click .on_make_salable': '_onMakeSalable', |
|||
'click .on_make_purchasable': '_onMakePurchasable', |
|||
'click .on_delete_products': '_onDeleteProducts', |
|||
'click .on_alternative_products': '_onAlternativeProducts', |
|||
'click .on_accessory_products': '_onAccessoryProducts', |
|||
'click .on_optional_products': '_onOptionalProducts', |
|||
'click .on_edit_invoice_policy_products': '_onEditInvoicePolicyProducts', |
|||
'click .on_add_cust_tax_products': '_onAddCustomerTaxProducts', |
|||
'click .on_add_vendor_tax_products': '_onAddVendorTaxProducts', |
|||
'click .on_publish_products': '_onPublishProducts', |
|||
'click .on_change_web_category_products': '_onWebCategChangeProducts', |
|||
'click .on_add_attribute_products': '_onAddAttributeProducts', |
|||
'click .on_change_tracking_products': '_onChangeTrackingProducts', |
|||
'click .change_production_location_products': '_onChangeProductionLocation', |
|||
'click .change_inventory_location_products': '_onChangeInventoryLocation', |
|||
}), |
|||
|
|||
start: function(){ |
|||
return this._super().then(function() {}) |
|||
}, |
|||
|
|||
_onSelectDocs: function(ev){ |
|||
// Function for selecting products and appending in the products_selected list
|
|||
var toast = $('.toast') |
|||
var checked = $(ev.target).is(':checked'); |
|||
var record_id =parseInt($(ev.target).data('id')); |
|||
if (checked){ |
|||
toast.addClass('show'); |
|||
toast.css("display","inline"); |
|||
products_selected.push(record_id); |
|||
} |
|||
else{ |
|||
let index = products_selected.indexOf(record_id); |
|||
products_selected.splice(index, 1) |
|||
if ( products_selected.length == 0){ |
|||
toast.css("display",""); |
|||
toast.removeClass('show'); |
|||
} |
|||
} |
|||
}, |
|||
|
|||
_onChangeCategory: function(ev){ |
|||
// Function for changing category of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Change Category', |
|||
res_model: 'product.category.change', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onCustLeadTimeProducts: function(ev){ |
|||
// Function for changing Customer Lead Time of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Change Customer Lead Time', |
|||
res_model: 'product.customer.lead.time', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onArchiveProducts: function(ev){ |
|||
// Function for changing Archive Product of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Archive Product', |
|||
res_model: 'product.archive', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onUpdatePrice: function(ev){ |
|||
// Function for changing Update Price of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Update Price', |
|||
res_model: 'product.update.price', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onAddVendor: function(ev){ |
|||
// Function for changing Add Vendor of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Add Vendor', |
|||
res_model: 'product.add.vendor', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onMakeSalable: function(ev){ |
|||
// Function for Make Salable of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Make Products Salable', |
|||
res_model: 'product.make.salable', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onMakePurchasable: function(ev){ |
|||
// Function for Make Purchasable of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Make Products Purchasable', |
|||
res_model: 'product.make.purchasable', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onDeleteProducts: function(ev){ |
|||
// Function for Deleting the selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Delete Product', |
|||
res_model: 'product.delete', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onPublishProducts : function(ev){ |
|||
// Function for Publish On Website of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Publish On Website', |
|||
res_model: 'product.publish', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onAlternativeProducts: function(ev){ |
|||
// Function for Adding Alternative Product of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Add Alternative Product', |
|||
res_model: 'product.alternative', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onAccessoryProducts: function(ev){ |
|||
// Function for Adding Accessory Product of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Add Accessory Product', |
|||
res_model: 'product.accessory', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onOptionalProducts: function(ev){ |
|||
// Function for Adding Optional Product of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Add Optional Product', |
|||
res_model: 'product.optional', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onEditInvoicePolicyProducts:function(ev){ |
|||
// Function for Editing Invoice Policy of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Edit Invoice Policy', |
|||
res_model: 'product.invoice', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onAddCustomerTaxProducts: function(ev){ |
|||
// Function for Changing Customer Tax of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Change Customer Tax', |
|||
res_model: 'product.customer.tax', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onAddVendorTaxProducts: function(ev){ |
|||
// Function for Changing Vendor Tax of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Change Vendor Tax', |
|||
res_model: 'product.vendor.tax', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onWebCategChangeProducts: function(ev){ |
|||
// Function for Changing Category On Website of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Change Category On Website', |
|||
res_model: 'product.category.website', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
_onAddAttributeProducts : function(ev){ |
|||
// Function for Adding Product Attributes of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Add Product Attributes', |
|||
res_model: 'product.add.attribute', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onChangeTrackingProducts: function(ev){ |
|||
// Function for Changing Product Tracking of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Change Product Tracking', |
|||
res_model: 'product.change.tracking', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onChangeProductionLocation: function(ev){ |
|||
// Function for Changing Production Location of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Change Production Location', |
|||
res_model: 'product.production.location', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
_onChangeInventoryLocation: function(ev){ |
|||
// Function for Changing Inventory Location of selected products
|
|||
this.do_action({ |
|||
type: 'ir.actions.act_window', |
|||
name: 'Change Inventory Location', |
|||
res_model: 'product.inventory.location', |
|||
view_mode: 'form', |
|||
views: [[false, 'form']], |
|||
target: 'new', |
|||
context: { |
|||
'default_product_ids': products_selected, |
|||
}, |
|||
}); |
|||
}, |
|||
}); |
|||
|
|||
var ProductKanbanView = KanbanView.extend({ |
|||
config: _.extend({}, KanbanView.prototype.config, { |
|||
Controller: KanbanButton, |
|||
}), |
|||
}); |
|||
viewRegistry.add('product_management_kanban_view', ProductKanbanView); |
@ -0,0 +1,151 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<templates id="template" xml:space="preserve"> |
|||
<t t-name="button_in_kanban.button"> |
|||
<div class="new_container toast"> |
|||
<div style="padding-top:25px; display:flex;"> |
|||
<!-- Change Category Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_change_category" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Change Category</button> |
|||
<!-- Customer Lead Time Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_customer_lead_time_products" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Customer Lead Time</button> |
|||
<!-- Archive Products Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_archive_products" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Archive Products</button> |
|||
<!-- Update Sales Price Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_update_price" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Update Sales Price</button> |
|||
<!-- Add Vendor Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_add_vendor" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Add Vendor</button> |
|||
<!-- Make Salable Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_make_salable" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Make Salable</button> |
|||
<!-- Make Purchasable Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_make_purchasable" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Make Purchasable</button> |
|||
<!-- Delete Products Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_delete_products" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Delete Products</button> |
|||
<!-- Publish On Website Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_publish_products" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Publish On Website</button> |
|||
<!-- Add Alternative Products Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_alternative_products" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Add Alternative Products</button> |
|||
<!-- Add Accessory Products Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_accessory_products" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Add Accessory Products</button> |
|||
<!-- Add Optional Products Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_optional_products" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Add Optional Products</button> |
|||
<!-- Edit Invoice Policy Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_edit_invoice_policy_products" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Edit Invoice Policy</button> |
|||
<!-- Add Customer Taxes Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_add_cust_tax_products" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Add Customer Taxes</button> |
|||
<!-- Add Vendor Taxes Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_add_vendor_tax_products" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Add Vendor Taxes</button> |
|||
<!-- Change Website Category Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_change_web_category_products" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Change Website Category</button> |
|||
<!-- Add Attributes & Variants Button --> |
|||
|
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_add_attribute_products" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Add Attributes & Variants</button> |
|||
<!-- Change Product Tracking Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm on_change_tracking_products" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Change Product Tracking</button> |
|||
<!-- Change Production Location Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm change_production_location_products" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Change Production Location</button> |
|||
<!-- Change Inventory Location Button --> |
|||
<button name="cl" type="object" |
|||
class="btn btn-secondary btn-sm change_inventory_location_products" |
|||
style="width: 90px; padding-top: 10px; padding-left: 9px; |
|||
padding-right: 13px; padding-bottom: 5px; |
|||
border-radius: 11px; background: #714b67; |
|||
color: white; font-size: 11px;">Change Inventory Location</button> |
|||
<!-- Change Category Button --> |
|||
</div> |
|||
</div> |
|||
</t> |
|||
</templates> |
@ -0,0 +1,13 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<!-- Root Menu for the module --> |
|||
<menuitem id="product_management_system_menu_root" |
|||
groups="product_management_system.user_product_management" |
|||
web_icon="product_management_system,static/description/icon.png" |
|||
name="Product Management" sequence="190"/> |
|||
<!-- Menus and submenus for the module --> |
|||
<menuitem id="product_template_menu_root" name="Product Management" |
|||
parent="product_management_system.product_management_system_menu_root" |
|||
action="product_management_system.product_template_action" |
|||
sequence="1"/> |
|||
</odoo> |
@ -0,0 +1,106 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<!-- Search Panel --> |
|||
<record id="product_template_view_search" model="ir.ui.view"> |
|||
<field name="name">product.template.search</field> |
|||
<field name="model">product.template</field> |
|||
<field name="arch" type="xml"> |
|||
<search string="Product Management"> |
|||
<searchpanel> |
|||
<field name="company_id" select="multi" string="Company" |
|||
icon="fa-cutlery" color="#875A7B" |
|||
enable_counters="1"/> |
|||
<field name="type" select="multi" string="Types" |
|||
icon="fa-th-large" color="#875A7B" |
|||
enable_counters="1"/> |
|||
<field name="categ_id" select="multi" string="Categories" |
|||
icon="fa-th-list" color="#875A7B" |
|||
enable_counters="1"/> |
|||
</searchpanel> |
|||
</search> |
|||
</field> |
|||
</record> |
|||
<!-- Kanban View --> |
|||
<record id="product_template_view_kanban" model="ir.ui.view"> |
|||
<field name="name">Product.template.view.kanban</field> |
|||
<field name="model">product.template</field> |
|||
<field name="arch" type="xml"> |
|||
<kanban sample="1" js_class="product_management_kanban_view"> |
|||
<field name="id"/> |
|||
<field name="product_variant_count"/> |
|||
<field name="currency_id"/> |
|||
<field name="activity_state"/> |
|||
<progressbar field="activity_state" |
|||
colors='{"planned": "success", "today": "warning", "overdue": "danger"}'/> |
|||
<templates> |
|||
<t t-name="kanban-box"> |
|||
<div class="oe_kanban_card oe_kanban_global_click" style="width:430px;"> |
|||
<div class="o_kanban_image me-1"> |
|||
<img t-att-src="kanban_image('product.template', 'image_128', record.id.raw_value)" |
|||
alt="Product" class="o_image_64_contain"/> |
|||
</div> |
|||
<div class="oe_kanban_details"> |
|||
<div class="o_kanban_record_top mb-0"> |
|||
<div class="o_kanban_record_headings"> |
|||
<strong class="o_kanban_record_title" style="font-size:large;"> |
|||
<field name="priority" |
|||
widget="priority"/> |
|||
<field name="name" /> |
|||
</strong> |
|||
<t t-if="record.default_code.value"> |
|||
[<field name="default_code"/>] |
|||
</t> |
|||
</div> |
|||
<input type="checkbox" class="product_check_box" |
|||
t-attf-id="{{record.id.value}}" |
|||
t-att-data-id="record.id.value" style="height:20px;width:20px;"/> |
|||
</div> |
|||
<br/> |
|||
Category: <strong><field name="categ_id"/></strong> |
|||
<div t-if="record.product_variant_count.value > 1" |
|||
groups="product.group_product_variant"> |
|||
<strong> |
|||
<t t-esc="record.product_variant_count.value"/> |
|||
Variants |
|||
</strong> |
|||
</div> |
|||
<div name="product_lst_price" class="mt-1"> |
|||
Price:<strong> |
|||
<field name="list_price" widget="monetary" |
|||
options="{'currency_field': 'currency_id', 'field_digits': True}"/> |
|||
</strong> |
|||
</div> |
|||
<div> |
|||
Type : <strong><field name="type"/></strong><br/> |
|||
Invoice Policy : <strong><field name="invoice_policy"/> </strong><br/> |
|||
<strong><field name="sale_ok"/></strong> |
|||
Can be sold<br/> |
|||
<strong><field name="purchase_ok"/></strong> |
|||
Can be Purchased<br/> |
|||
<strong><field name="is_published"/></strong> |
|||
Website Published |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</t> |
|||
</templates> |
|||
</kanban> |
|||
</field> |
|||
</record> |
|||
<!-- Kanban View Action --> |
|||
<record id="product_template_action" model="ir.actions.act_window"> |
|||
<field name="name">Product Management</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">product.template</field> |
|||
<field name="view_mode">kanban</field> |
|||
<field name="view_id" |
|||
ref="product_management_system.product_template_view_kanban"/> |
|||
<field name="search_view_id" |
|||
ref="product_management_system.product_template_view_search"/> |
|||
<field name="help" type="html"> |
|||
<p class="o_view_nocontent_smiling_face"> |
|||
Create a new product |
|||
</p> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,41 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 product_accessory |
|||
from . import product_add_attribute |
|||
from . import product_add_vendor |
|||
from . import product_alternative |
|||
from . import product_archive |
|||
from . import product_category_change |
|||
from . import product_category_website |
|||
from . import product_change_tracking |
|||
from . import product_customer_lead_time |
|||
from . import product_customer_tax |
|||
from . import product_delete |
|||
from . import product_inventory_location |
|||
from . import product_invoice |
|||
from . import product_make_purchasable |
|||
from . import product_make_salable |
|||
from . import product_optional |
|||
from . import product_production_location |
|||
from . import product_publish |
|||
from . import product_update_price |
|||
from . import product_vendor_tax |
@ -0,0 +1,47 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductAccessory(models.TransientModel): |
|||
""" |
|||
Model for adding Accessory Products |
|||
""" |
|||
_name = 'product.accessory' |
|||
_description = 'Product Accessory' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
accessory_ids = fields.Many2many('product.product', |
|||
string="Accessory Products", |
|||
help='Products wanted to added as Accessory Products') |
|||
|
|||
def action_add_accessory_products(self): |
|||
""" |
|||
Function for adding Accessory Products for the selected products |
|||
""" |
|||
if self.product_ids and self.accessory_ids: |
|||
for products in self.product_ids: |
|||
for items in self.accessory_ids: |
|||
products.accessory_product_ids = [ |
|||
fields.Command.link(items.id)] |
@ -0,0 +1,22 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Product Accessory Form View --> |
|||
<record id="product_accessory_view_form" model="ir.ui.view"> |
|||
<field name="name">product.accessory.view.form</field> |
|||
<field name="model">product.accessory</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Accessory Product"> |
|||
<group> |
|||
<field name="product_ids" widget="many2many_tags"/> |
|||
<field name="accessory_ids" widget="many2many_tags"/> |
|||
</group> |
|||
<footer> |
|||
<button name="action_add_accessory_products" string="SAVE" |
|||
class="btn-primary" type="object"/> |
|||
<button string="Cancel" class="btn-secondary" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,69 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductAddAttribute(models.TransientModel): |
|||
""" |
|||
Model for adding Attributes and Variants |
|||
""" |
|||
_name = 'product.add.attribute' |
|||
_description = 'Product Add Attribute' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
attribute_line_ids = fields.One2many('product.management.attribute', |
|||
'wizard_id', |
|||
string="Product Attributes", |
|||
help='Attribute Lines') |
|||
|
|||
def action_add_product_attributes(self): |
|||
""" |
|||
Function for adding Attributes and Variants for Selected Products |
|||
""" |
|||
if self.product_ids and self.attribute_line_ids: |
|||
for products in self.product_ids: |
|||
for line in self.attribute_line_ids: |
|||
products.attribute_line_ids = [fields.Command.create({ |
|||
'attribute_id': line.attribute_id.id, |
|||
'value_ids': line.value_ids, |
|||
})] |
|||
|
|||
|
|||
class ProductAttribute(models.TransientModel): |
|||
""" |
|||
Model for attribute_lines for the model product.add.attribute |
|||
""" |
|||
_name = 'product.management.attribute' |
|||
_description = 'Product Attributes' |
|||
|
|||
attribute_id = fields.Many2one('product.attribute', |
|||
string='Attribute', |
|||
help='Attribute ID') |
|||
value_ids = fields.Many2many('product.attribute.value', |
|||
string='Values', |
|||
help='Attribute Values', |
|||
domain="[('attribute_id','=',attribute_id)]") |
|||
wizard_id = fields.Many2one('product.add.attribute', |
|||
string='ID', |
|||
help='Wizard ID') |
@ -0,0 +1,31 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Product Add Attribute Form View--> |
|||
<record id="product_add_attribute_view_form" model="ir.ui.view"> |
|||
<field name="name">product.add.attribute.view.form</field> |
|||
<field name="model">product.add.attribute</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Product Attributes"> |
|||
<group> |
|||
<field name="product_ids" widget="many2many_tags"/> |
|||
</group> |
|||
<notebook> |
|||
<page string="Attributes"> |
|||
<field name="attribute_line_ids" widget="one2many"> |
|||
<tree editable="bottom"> |
|||
<field name="attribute_id"/> |
|||
<field name="value_ids" widget="many2many_tags"/> |
|||
</tree> |
|||
</field> |
|||
</page> |
|||
</notebook> |
|||
<footer> |
|||
<button name="action_add_product_attributes" string="SAVE" |
|||
class="btn-primary" type="object"/> |
|||
<button string="Cancel" class="btn-secondary" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,68 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductAddVendor(models.TransientModel): |
|||
""" |
|||
Model for adding seller_ids (product vendors) |
|||
""" |
|||
_name = 'product.add.vendor' |
|||
_description = 'Product Add Vendors' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
vendor_ids = fields.One2many('product.vendor', 'wizard_id', |
|||
string="Product Attributes", |
|||
help='Product Vendors') |
|||
|
|||
def action_add_product_vendors(self): |
|||
""" |
|||
Function for adding seller_ids (product vendors) for Selected Products |
|||
""" |
|||
if self.product_ids and self.vendor_ids: |
|||
for products in self.product_ids: |
|||
for vendor in self.vendor_ids: |
|||
products.seller_ids = [fields.Command.create({ |
|||
'partner_id': vendor.partner_id.id, |
|||
'price': vendor.price, |
|||
'currency_id': vendor.currency_id.id, |
|||
'delay': vendor.delay, |
|||
})] |
|||
|
|||
|
|||
class ProductAttribute(models.TransientModel): |
|||
_name = 'product.vendor' |
|||
_description = 'Product Vendors' |
|||
|
|||
partner_id = fields.Many2one('res.partner', |
|||
string='Vendor', |
|||
help='Partner ID') |
|||
price = fields.Float(string='Price', help='Price', |
|||
required=True) |
|||
delay = fields.Integer(string='Delivery Lead Time', |
|||
help='Delivery Lead Time', required=True) |
|||
currency_id = fields.Many2one('res.currency', string='Currency', |
|||
help='Currency', required=True) |
|||
wizard_id = fields.Many2one('product.add.vendor', string='ID', |
|||
help='Wizard ID') |
@ -0,0 +1,33 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Product Add Vendor Form View --> |
|||
<record id="product_add_vendor_view_form" model="ir.ui.view"> |
|||
<field name="name">product.add.vendor.view.form</field> |
|||
<field name="model">product.add.vendor</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Product Add Vendor"> |
|||
<group> |
|||
<field name="product_ids" widget="many2many_tags"/> |
|||
</group> |
|||
<notebook> |
|||
<page string="Vendors"> |
|||
<field name="vendor_ids" widget="one2many"> |
|||
<tree editable="bottom"> |
|||
<field name="partner_id"/> |
|||
<field name="currency_id"/> |
|||
<field name="price"/> |
|||
<field name="delay"/> |
|||
</tree> |
|||
</field> |
|||
</page> |
|||
</notebook> |
|||
<footer> |
|||
<button name="action_add_product_vendors" string="SAVE" |
|||
class="btn-primary" type="object"/> |
|||
<button string="Cancel" class="btn-secondary" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,49 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductAlternative(models.TransientModel): |
|||
""" |
|||
Model for adding alternative products |
|||
""" |
|||
_name = 'product.alternative' |
|||
_description = 'Alternative Product' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
alternative_ids = fields.Many2many('product.template', |
|||
'product_management_alternative_rel', |
|||
string="Alternative Products", |
|||
help='Alternative Products', |
|||
domain="[('id', 'not in', product_ids)]") |
|||
|
|||
def action_add_alternative_products(self): |
|||
""" |
|||
Function for adding alternative products for Selected Products |
|||
""" |
|||
if self.product_ids and self.alternative_ids: |
|||
for products in self.product_ids: |
|||
for items in self.alternative_ids: |
|||
products.alternative_product_ids = [ |
|||
fields.Command.link(items.id)] |
@ -0,0 +1,22 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Product Alternative Form View--> |
|||
<record id="product_alternative_view_form" model="ir.ui.view"> |
|||
<field name="name">product.alternative.view.form</field> |
|||
<field name="model">product.alternative</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Alternative Product"> |
|||
<group> |
|||
<field name="product_ids" widget="many2many_tags"/> |
|||
<field name="alternative_ids" widget="many2many_tags"/> |
|||
</group> |
|||
<footer> |
|||
<button name="action_add_alternative_products" string="SAVE" |
|||
class="btn-primary" type="object"/> |
|||
<button string="Cancel" class="btn-secondary" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,44 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductArchive(models.TransientModel): |
|||
""" |
|||
Model for archiving products |
|||
""" |
|||
_name = 'product.archive' |
|||
_description = 'Archive Products' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
|
|||
def action_archive_product(self): |
|||
""" |
|||
Function for archiving Selected Products |
|||
""" |
|||
if self.product_ids: |
|||
for products in self.product_ids: |
|||
products.write({ |
|||
'active': False |
|||
}) |
@ -0,0 +1,22 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Product Archive Form View --> |
|||
<record id="product_archive_view_form" model="ir.ui.view"> |
|||
<field name="name">product.archive.view.form</field> |
|||
<field name="model">product.archive</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Archive Product"> |
|||
<group> |
|||
<field name="product_ids" widget="many2many_tags"/> |
|||
</group> |
|||
<h3>Do you want to make these products Archive?</h3> |
|||
<footer> |
|||
<button name="action_archive_product" string="YES" |
|||
class="btn-primary" type="object"/> |
|||
<button string="Cancel" class="btn-secondary" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,47 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductCategoryChange(models.TransientModel): |
|||
""" |
|||
Model for changing category |
|||
""" |
|||
_name = 'product.category.change' |
|||
_description = 'Change Product Category' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
category_id = fields.Many2one('product.category', |
|||
string='New Category', |
|||
help='Category') |
|||
|
|||
def action_product_category_change_confirm(self): |
|||
""" |
|||
Function for changing category of Selected Products |
|||
""" |
|||
if self.product_ids and self.category_id: |
|||
for rec in self.product_ids: |
|||
rec.write({ |
|||
'categ_id': self.category_id |
|||
}) |
@ -0,0 +1,26 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Product Category Change Form View --> |
|||
<record id="product_category_change_view_form" model="ir.ui.view"> |
|||
<field name="name">product.category.change.view.form</field> |
|||
<field name="model">product.category.change</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Change Category"> |
|||
<group> |
|||
<group> |
|||
<field name="product_ids" widget="many2many_tags"/> |
|||
</group> |
|||
<group> |
|||
<field name="category_id"/> |
|||
</group> |
|||
</group> |
|||
<footer> |
|||
<button name="action_product_category_change_confirm" string="Confirm" |
|||
class="btn-primary" type="object"/> |
|||
<button string="Cancel" class="btn-secondary" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,46 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductWebsiteCategory(models.TransientModel): |
|||
""" |
|||
Model for changing public_categ_ids (Website Category) |
|||
""" |
|||
_name = 'product.category.website' |
|||
_description = 'Product Website Category' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
public_categ_ids = fields.Many2many('product.public.category', |
|||
string="Website Product Category", |
|||
help='Select Product Category In Website') |
|||
|
|||
def action_change_website_category(self): |
|||
""" |
|||
Function for changing public_categ_ids (Website Category) of Selected Products |
|||
""" |
|||
if self.product_ids and self.public_categ_ids: |
|||
for products in self.product_ids: |
|||
for items in self.public_categ_ids: |
|||
products.public_categ_ids = [fields.Command.link(items.id)] |
@ -0,0 +1,22 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Product Category Website Form View --> |
|||
<record id="product_category_website_view_form" model="ir.ui.view"> |
|||
<field name="name">product.category.website.view.form</field> |
|||
<field name="model">product.category.website</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Website Category Product"> |
|||
<group> |
|||
<field name="product_ids" widget="many2many_tags"/> |
|||
<field name="public_categ_ids" widget="many2many_tags"/> |
|||
</group> |
|||
<footer> |
|||
<button name="action_change_website_category" string="SAVE" |
|||
class="btn-primary" type="object"/> |
|||
<button string="Cancel" class="btn-secondary" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,49 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductChangeTracking(models.TransientModel): |
|||
""" |
|||
Model for changing tracking method |
|||
""" |
|||
_name = 'product.change.tracking' |
|||
_description = 'Change Product Tracking Method' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
tracking = fields.Selection([ |
|||
('serial', 'By Unique Serial Number'), |
|||
('lot', 'By Lots'), |
|||
('none', 'No Tracking')], |
|||
string='Tracking', |
|||
help='Select a tracking type', |
|||
default='none', required=True) |
|||
|
|||
def action_change_product_tracking(self): |
|||
""" |
|||
Function for changing tracking method of selected products |
|||
""" |
|||
if self.product_ids: |
|||
for products in self.product_ids: |
|||
products.write({'tracking': self.tracking}) |
@ -0,0 +1,22 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Product Change Tracking Form View --> |
|||
<record id="product_change_tracking_view_form" model="ir.ui.view"> |
|||
<field name="name">product.change.tracking.view.form</field> |
|||
<field name="model">product.change.tracking</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Change Product Invoice Policy"> |
|||
<group> |
|||
<field name="product_ids" widget="many2many_tags"/> |
|||
<field name="tracking"/> |
|||
</group> |
|||
<footer> |
|||
<button name="action_change_product_tracking" string="SAVE" |
|||
class="btn-primary" type="object"/> |
|||
<button string="Cancel" class="btn-secondary" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,44 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductCustomerLeadTime(models.TransientModel): |
|||
""" |
|||
Model for changing sale_delay (Customer Lead Time) |
|||
""" |
|||
_name = 'product.customer.lead.time' |
|||
_description = 'Product Customer Lead Time' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
sale_delay = fields.Float(string='Customer Lead Time', |
|||
help='Delivery lead time in days') |
|||
|
|||
def action_change_customer_lead_time(self): |
|||
""" |
|||
Function for changing sale_delay (Customer Lead Time) of Selected Products |
|||
""" |
|||
if self.product_ids and self.sale_delay != 0: |
|||
for products in self.product_ids: |
|||
products.write({'sale_delay': self.sale_delay}) |
@ -0,0 +1,22 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Product Customer Lead Time Form View --> |
|||
<record id="product_customer_lead_time_view_form" model="ir.ui.view"> |
|||
<field name="name">product.customer.lead.time.view.form</field> |
|||
<field name="model">product.customer.lead.time</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Change Customer Lead Time"> |
|||
<group> |
|||
<field name="product_ids" widget="many2many_tags"/> |
|||
<field name="sale_delay"/> |
|||
</group> |
|||
<footer> |
|||
<button name="action_change_customer_lead_time" string="YES" |
|||
class="btn-primary" type="object"/> |
|||
<button string="Cancel" class="btn-secondary" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,47 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductCustomerTax(models.TransientModel): |
|||
""" |
|||
Model for changing tax_ids (Customer Tax) |
|||
""" |
|||
_name = 'product.customer.tax' |
|||
_description = 'Product Customer Tax' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
tax_ids = fields.Many2many('account.tax', |
|||
domain="[('type_tax_use', '=', 'sale')]", |
|||
string="Customer Tax", |
|||
help='Customer Tax') |
|||
|
|||
def action_change_customer_tax(self): |
|||
""" |
|||
Function for changing tax_ids (Customer Tax) of selected products |
|||
""" |
|||
if self.product_ids and self.tax_ids: |
|||
for products in self.product_ids: |
|||
for items in self.tax_ids: |
|||
products.taxes_id = [fields.Command.link(items.id)] |
@ -0,0 +1,26 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Product Category Tax Form View --> |
|||
<record id="product_customer_tax_view_form" model="ir.ui.view"> |
|||
<field name="name">product.customer.tax.view.form</field> |
|||
<field name="model">product.customer.tax</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Change Category"> |
|||
<group> |
|||
<group> |
|||
<field name="product_ids" widget="many2many_tags"/> |
|||
</group> |
|||
<group> |
|||
<field name="tax_ids" widget="many2many_tags"/> |
|||
</group> |
|||
</group> |
|||
<footer> |
|||
<button name="action_change_customer_tax" string="Confirm" |
|||
class="btn-primary" type="object"/> |
|||
<button string="Cancel" class="btn-secondary" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,42 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductDelete(models.TransientModel): |
|||
""" |
|||
Model for deleting products |
|||
""" |
|||
_name = 'product.delete' |
|||
_description = 'Product Delete' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
|
|||
def action_delete_product(self): |
|||
""" |
|||
Function for deleting selected products |
|||
""" |
|||
if self.product_ids: |
|||
for products in self.product_ids: |
|||
products.unlink() |
@ -0,0 +1,22 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Product Delete Form View --> |
|||
<record id="product_delete_view_form" model="ir.ui.view"> |
|||
<field name="name">product.delete.view.form</field> |
|||
<field name="model">product.delete</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Delete Product"> |
|||
<group> |
|||
<field name="product_ids" widget="many2many_tags"/> |
|||
</group> |
|||
<h3>Do you want to make these products Delete?</h3> |
|||
<footer> |
|||
<button name="action_delete_product" string="YES" |
|||
class="btn-primary" type="object"/> |
|||
<button string="Cancel" class="btn-secondary" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,47 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductInventoryLocation(models.TransientModel): |
|||
""" |
|||
Model for changing product inventory location |
|||
""" |
|||
_name = 'product.inventory.location' |
|||
_description = 'Product Inventory Location' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
inventory_location_id = fields.Many2one('stock.location', |
|||
string='Inventory Location', |
|||
help='Inventory location of the products', |
|||
domain="[('usage','=','inventory')]") |
|||
|
|||
def action_change_inventory_location(self): |
|||
""" |
|||
Function for changing product inventory location of selected products |
|||
""" |
|||
if self.product_ids and self.inventory_location_id: |
|||
for products in self.product_ids: |
|||
products.write( |
|||
{'property_stock_inventory': self.inventory_location_id}) |
@ -0,0 +1,23 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Product Inventory Location Form View --> |
|||
<record id="product_inventory_location_view_form" model="ir.ui.view"> |
|||
<field name="name">product.inventory.location.view.form</field> |
|||
<field name="model">product.inventory.location</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Change Product Inventory Location"> |
|||
<group> |
|||
<field name="product_ids" widget="many2many_tags"/> |
|||
<field name="inventory_location_id"/> |
|||
</group> |
|||
<footer> |
|||
<button name="action_change_inventory_location" string="SAVE" |
|||
class="btn-primary" type="object"/> |
|||
<button string="Cancel" class="btn-secondary" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
</odoo> |
@ -0,0 +1,47 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductInvoice(models.TransientModel): |
|||
""" |
|||
Model for changing invoice policy |
|||
""" |
|||
_name = 'product.invoice' |
|||
_description = 'Product Invoice' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
invoice_policy = fields.Selection([ |
|||
('order', 'Ordered Quantities'), |
|||
('delivery', 'Delivered Quantities')], |
|||
string='Invoicing Policy', help='Invoice policy of the product', |
|||
default='order', required=True) |
|||
|
|||
def action_change_invoice_policy_products(self): |
|||
""" |
|||
Function for changing invoice policy of selected products |
|||
""" |
|||
if self.product_ids: |
|||
for products in self.product_ids: |
|||
products.write({'invoice_policy': self.invoice_policy}) |
@ -0,0 +1,22 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Product Invoice Form View --> |
|||
<record id="product_invoice_view_form" model="ir.ui.view"> |
|||
<field name="name">product.invoice.view.form</field> |
|||
<field name="model">product.invoice</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Change Product Invoice Policy"> |
|||
<group> |
|||
<field name="product_ids" widget="many2many_tags"/> |
|||
<field name="invoice_policy"/> |
|||
</group> |
|||
<footer> |
|||
<button name="action_change_invoice_policy_products" string="SAVE" |
|||
class="btn-primary" type="object"/> |
|||
<button string="Cancel" class="btn-secondary" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,54 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductMakePurchasable(models.TransientModel): |
|||
""" |
|||
Model for making product purchasable |
|||
""" |
|||
_name = 'product.make.purchasable' |
|||
_description = 'Make Product Purchasable' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
|
|||
def action_product_make_purchasable_confirm(self): |
|||
""" |
|||
Function for making product purchasable |
|||
""" |
|||
if self.product_ids: |
|||
for rec in self.product_ids: |
|||
rec.write({ |
|||
'purchase_ok': True |
|||
}) |
|||
|
|||
def action_product_make_purchasable_false(self): |
|||
""" |
|||
Function for making product not purchasable |
|||
""" |
|||
if self.product_ids: |
|||
for rec in self.product_ids: |
|||
rec.write({ |
|||
'purchase_ok': False |
|||
}) |
@ -0,0 +1,24 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Make Product Purchasable Form View --> |
|||
<record id="product_make_purchasable_view_form" model="ir.ui.view"> |
|||
<field name="name">product.make.purchasable.view.form</field> |
|||
<field name="model">product.make.purchasable</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Product Purchasable"> |
|||
<group> |
|||
<field name="product_ids" widget="many2many_tags"/> |
|||
</group> |
|||
<h3>Do you want to make these products purchasable?</h3> |
|||
<footer> |
|||
<button name="action_product_make_purchasable_confirm" string="Yes" |
|||
class="btn-primary" type="object"/> |
|||
<button name="action_product_make_purchasable_false" string="NO" |
|||
class="btn-primary" type="object"/> |
|||
<button string="CLOSE" class="btn-secondary" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,54 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductMakeSaleable(models.TransientModel): |
|||
""" |
|||
Model for making product Salable |
|||
""" |
|||
_name = 'product.make.salable' |
|||
_description = 'Make Product Salable' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
|
|||
def action_product_make_salable_confirm(self): |
|||
""" |
|||
Function for making product Salable |
|||
""" |
|||
if self.product_ids: |
|||
for rec in self.product_ids: |
|||
rec.write({ |
|||
'sale_ok': True |
|||
}) |
|||
|
|||
def action_product_make_salable_false(self): |
|||
""" |
|||
Function for making product not Salable |
|||
""" |
|||
if self.product_ids: |
|||
for rec in self.product_ids: |
|||
rec.write({ |
|||
'sale_ok': False |
|||
}) |
@ -0,0 +1,24 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<odoo> |
|||
<!-- Make Product Salable Form View --> |
|||
<record id="product_make_salable_view_form" model="ir.ui.view"> |
|||
<field name="name">product.make.salable.view.form</field> |
|||
<field name="model">product.make.salable</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Product Salable"> |
|||
<group> |
|||
<field name="product_ids" widget="many2many_tags"/> |
|||
</group> |
|||
<h3>Do you want to make these products salable?</h3> |
|||
<footer> |
|||
<button name="action_product_make_salable_confirm" string="Yes" |
|||
class="btn-primary" type="object"/> |
|||
<button name="action_product_make_salable_false" string="NO" |
|||
class="btn-primary" type="object"/> |
|||
<button string="CLOSE" class="btn-secondary" |
|||
special="cancel"/> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,49 @@ |
|||
# -*- coding: utf-8 -*- |
|||
################################################################################ |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies (<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 odoo import fields, models |
|||
|
|||
|
|||
class ProductOptional(models.TransientModel): |
|||
""" |
|||
Model for adding optional products |
|||
""" |
|||
_name = 'product.optional' |
|||
_description = 'Optional Product' |
|||
|
|||
product_ids = fields.Many2many('product.template', |
|||
string='Selected Products', |
|||
help='Products which are selected') |
|||
optional_ids = fields.Many2many('product.template', |
|||
string="Optional Products", |
|||
help='Optional Products', |
|||
relation="product_management_optional_rel", |
|||
domain="[('id', 'not in', product_ids)]") |
|||
|
|||
def action_add_optional_products(self): |
|||
""" |
|||
Function for adding optional products for selected products |
|||
""" |
|||
if self.product_ids and self.optional_ids: |
|||
for products in self.product_ids: |
|||
for items in self.optional_ids: |
|||
products.optional_product_ids = [ |
|||
fields.Command.link(items.id)] |