Browse Source

Aug 23: [ADD] Initital Commits 'product_warranty_management_odoo'

pull/331/head
Cybrosys Technologies 8 months ago
parent
commit
465ef7110c
  1. 42
      product_warranty_management_odoo/README.rst
  2. 23
      product_warranty_management_odoo/__init__.py
  3. 59
      product_warranty_management_odoo/__manifest__.py
  4. 23
      product_warranty_management_odoo/controllers/__init__.py
  5. 56
      product_warranty_management_odoo/controllers/portal.py
  6. 97
      product_warranty_management_odoo/controllers/product_warranty_management_odoo.py
  7. 13
      product_warranty_management_odoo/data/website_warranty_menu_data.xml
  8. 6
      product_warranty_management_odoo/doc/RELEASE_NOTES.md
  9. 24
      product_warranty_management_odoo/models/__init__.py
  10. 35
      product_warranty_management_odoo/models/product_template.py
  11. 76
      product_warranty_management_odoo/models/sale_order.py
  12. 60
      product_warranty_management_odoo/models/warranty_claim.py
  13. 2
      product_warranty_management_odoo/security/ir.model.access.csv
  14. BIN
      product_warranty_management_odoo/static/description/assets/icons/check.png
  15. BIN
      product_warranty_management_odoo/static/description/assets/icons/chevron.png
  16. BIN
      product_warranty_management_odoo/static/description/assets/icons/cogs.png
  17. BIN
      product_warranty_management_odoo/static/description/assets/icons/consultation.png
  18. BIN
      product_warranty_management_odoo/static/description/assets/icons/ecom-black.png
  19. BIN
      product_warranty_management_odoo/static/description/assets/icons/education-black.png
  20. BIN
      product_warranty_management_odoo/static/description/assets/icons/hotel-black.png
  21. BIN
      product_warranty_management_odoo/static/description/assets/icons/license.png
  22. BIN
      product_warranty_management_odoo/static/description/assets/icons/lifebuoy.png
  23. BIN
      product_warranty_management_odoo/static/description/assets/icons/manufacturing-black.png
  24. BIN
      product_warranty_management_odoo/static/description/assets/icons/pos-black.png
  25. BIN
      product_warranty_management_odoo/static/description/assets/icons/puzzle.png
  26. BIN
      product_warranty_management_odoo/static/description/assets/icons/restaurant-black.png
  27. BIN
      product_warranty_management_odoo/static/description/assets/icons/service-black.png
  28. BIN
      product_warranty_management_odoo/static/description/assets/icons/trading-black.png
  29. BIN
      product_warranty_management_odoo/static/description/assets/icons/training.png
  30. BIN
      product_warranty_management_odoo/static/description/assets/icons/update.png
  31. BIN
      product_warranty_management_odoo/static/description/assets/icons/user.png
  32. BIN
      product_warranty_management_odoo/static/description/assets/icons/wrench.png
  33. BIN
      product_warranty_management_odoo/static/description/assets/misc/categories.png
  34. BIN
      product_warranty_management_odoo/static/description/assets/misc/check-box.png
  35. BIN
      product_warranty_management_odoo/static/description/assets/misc/compass.png
  36. BIN
      product_warranty_management_odoo/static/description/assets/misc/corporate.png
  37. BIN
      product_warranty_management_odoo/static/description/assets/misc/customer-support.png
  38. BIN
      product_warranty_management_odoo/static/description/assets/misc/cybrosys-logo.png
  39. BIN
      product_warranty_management_odoo/static/description/assets/misc/features.png
  40. BIN
      product_warranty_management_odoo/static/description/assets/misc/logo.png
  41. 3
      product_warranty_management_odoo/static/description/assets/misc/phone.svg
  42. BIN
      product_warranty_management_odoo/static/description/assets/misc/pictures.png
  43. BIN
      product_warranty_management_odoo/static/description/assets/misc/pie-chart.png
  44. BIN
      product_warranty_management_odoo/static/description/assets/misc/right-arrow.png
  45. BIN
      product_warranty_management_odoo/static/description/assets/misc/star.png
  46. 9
      product_warranty_management_odoo/static/description/assets/misc/support (1) 1.svg
  47. 6
      product_warranty_management_odoo/static/description/assets/misc/support-email.svg
  48. BIN
      product_warranty_management_odoo/static/description/assets/misc/support.png
  49. 9
      product_warranty_management_odoo/static/description/assets/misc/whatsapp 1.svg
  50. BIN
      product_warranty_management_odoo/static/description/assets/misc/whatsapp.png
  51. BIN
      product_warranty_management_odoo/static/description/assets/modules/1.gif
  52. BIN
      product_warranty_management_odoo/static/description/assets/modules/1.png
  53. BIN
      product_warranty_management_odoo/static/description/assets/modules/2.png
  54. BIN
      product_warranty_management_odoo/static/description/assets/modules/3.png
  55. BIN
      product_warranty_management_odoo/static/description/assets/modules/4.jpg
  56. BIN
      product_warranty_management_odoo/static/description/assets/modules/5.jpg
  57. BIN
      product_warranty_management_odoo/static/description/assets/modules/6.png
  58. BIN
      product_warranty_management_odoo/static/description/assets/modules/l2.png
  59. BIN
      product_warranty_management_odoo/static/description/assets/modules/l3.png
  60. BIN
      product_warranty_management_odoo/static/description/assets/modules/l4.png
  61. BIN
      product_warranty_management_odoo/static/description/assets/modules/l5.png
  62. BIN
      product_warranty_management_odoo/static/description/assets/modules/l6.png
  63. BIN
      product_warranty_management_odoo/static/description/assets/screenshots/1.png
  64. BIN
      product_warranty_management_odoo/static/description/assets/screenshots/10.png
  65. BIN
      product_warranty_management_odoo/static/description/assets/screenshots/11.png
  66. BIN
      product_warranty_management_odoo/static/description/assets/screenshots/2.png
  67. BIN
      product_warranty_management_odoo/static/description/assets/screenshots/3.png
  68. BIN
      product_warranty_management_odoo/static/description/assets/screenshots/4.png
  69. BIN
      product_warranty_management_odoo/static/description/assets/screenshots/5.png
  70. BIN
      product_warranty_management_odoo/static/description/assets/screenshots/6.png
  71. BIN
      product_warranty_management_odoo/static/description/assets/screenshots/7.png
  72. BIN
      product_warranty_management_odoo/static/description/assets/screenshots/8.png
  73. BIN
      product_warranty_management_odoo/static/description/assets/screenshots/9.png
  74. BIN
      product_warranty_management_odoo/static/description/assets/screenshots/hero.gif
  75. BIN
      product_warranty_management_odoo/static/description/banner.jpg
  76. BIN
      product_warranty_management_odoo/static/description/icon.png
  77. 818
      product_warranty_management_odoo/static/description/index.html
  78. 42
      product_warranty_management_odoo/static/src/css/product_warranty_management_odoo.css
  79. 123
      product_warranty_management_odoo/static/src/js/website_registration.js
  80. 65
      product_warranty_management_odoo/views/portal_templates.xml
  81. 56
      product_warranty_management_odoo/views/product_template_views.xml
  82. 23
      product_warranty_management_odoo/views/sale_order_views.xml
  83. 51
      product_warranty_management_odoo/views/warranty_claim_views.xml
  84. 152
      product_warranty_management_odoo/views/website_registration_templates.xml

42
product_warranty_management_odoo/README.rst

@ -0,0 +1,42 @@
.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg
:target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
Warranty Management
===================
Warranty management used to manage warranty of product
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
-------
General Public License, Version 3 (LGPL v3).
(https://www.gnu.org/licenses/lgpl-3.0-standalone.html)
Credits
-------
* Developers: (V17) Swaraj R Contact: odoo@cybrosys.com
Contacts
--------
* Mail Contact : odoo@cybrosys.com
* Website : https://cybrosys.com
Bug Tracker
-----------
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
Maintainer
==========
.. image:: https://cybrosys.com/images/logo.png
:target: https://cybrosys.com
This module is maintained by Cybrosys Technologies.
For support and more information, please visit `Our Website <https://cybrosys.com/>`__
Further information
===================
HTML Description: `<static/description/index.html>`__

23
product_warranty_management_odoo/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Swaraj R (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import controllers
from . import models

59
product_warranty_management_odoo/__manifest__.py

@ -0,0 +1,59 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Swaraj R (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
{
'name': 'Warranty Management',
'version': '17.0.1.0.0',
'category': 'Sale',
'summary': 'Warranty management used to manage warranty of product',
'description': """The "Warranty Management" module enables businesses to
efficiently track product warranties, including expiration dates and
associated customer details. Seamlessly integrated with sales processes,
it facilitates easy warranty claim creation from sales orders and enhances
customer experience with website warranty registration.""",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': "https://www.cybrosys.com",
'depends': ['mail', 'sale_management', 'website'],
'data': [
'data/website_warranty_menu_data.xml',
'security/ir.model.access.csv',
'views/product_template_views.xml',
'views/sale_order_views.xml',
'views/website_registration_templates.xml',
'views/warranty_claim_views.xml',
'views/portal_templates.xml',
],
'assets': {
'web.assets_frontend': [
'product_warranty_management_odoo/static/src/js'
'/website_registration.js',
'product_warranty_management_odoo/static/src/css'
'/product_warranty_management_odoo.css',
],
},
'images': ['static/description/banner.jpg'],
'license': 'LGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

23
product_warranty_management_odoo/controllers/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Swaraj R (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import portal
from . import product_warranty_management_odoo

56
product_warranty_management_odoo/controllers/portal.py

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Swaraj R (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import http
from odoo.addons.portal.controllers.portal import CustomerPortal
from odoo.http import request
class PortalAccount(CustomerPortal):
"""Inherited class to add portal menu for warranty claims"""
def _prepare_home_portal_values(self, counters):
""" Super the function to add the warranty claim menu"""
values = super()._prepare_home_portal_values(counters)
user = request.env.user.partner_id.id
claim_count = (request.env['warranty.claim'].
search_count([('customer_id', '=', user)]))
values['claim_count'] = claim_count
return values
@http.route('/my/claims', type='http', auth="user", website=True)
def my_claims(self):
""" Define the action to open the warranty claim tree view"""
user = request.env.user.partner_id.id
claims = (request.env['warranty.claim'].sudo().
search([('customer_id', '=', user)]))
# Extract the required fields and store them in a list of dictionaries
claim_data = []
for claim in claims:
claim_data.append({
'customer_id': claim.customer_id.name,
'product_id': claim.product_id.name,
'sale_order_id': claim.sale_order_id.name,
'status': claim.state,
})
# Pass the claim_data to the template
return http.request.render('product_warranty_management_odoo'
'.portal_warranty_claims',
{'claim_data': claim_data})

97
product_warranty_management_odoo/controllers/product_warranty_management_odoo.py

@ -0,0 +1,97 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Swaraj R (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import http
from odoo.http import request
class WarrantyClaimController(http.Controller):
""" Class for Warranty claim controller"""
@http.route('/warranty', type='http', auth="public", website=True)
def warranty_claim(self):
""" Function to pass the warranty claim details to the warranty
claim page"""
customers = request.env['res.partner'].sudo().search([])
sale_orders = request.env['sale.order'].sudo().search([])
products = request.env['product.template'].sudo().search([])
return request.render('product_warranty_management_odoo'
'.warranty_claim_page',
{'sale_orders': sale_orders,
'customers': customers,
'products': products})
@http.route('/warranty/claim/submit', type='http', auth="public",
website=True)
def warranty_claim_submit(self):
"""Function to render the claim thanks view"""
return request.render('product_warranty_management_odoo'
'.claim_thanks_view')
@http.route('/partner/sale_order', type='json', auth="public",
website=True)
def get_sale_order_data(self, partner_id):
"""Get sale order data of selected customer"""
return request.env['sale.order'].search_read([
('partner_id', '=', partner_id)])
@http.route('/partner/sale_order_line', type='json', auth="public",
website=True)
def get_sale_order_line_data(self, order_id):
"""Get sale order line data of selected order"""
return request.env['sale.order.line'].search_read([
('order_id', '=', order_id)])
@http.route('/partner/warranty_claim_count', type='json', auth="public",
website=True)
def warranty_claim_count(self, sale_order_id):
"""Get claim count of selected sale order"""
return request.env['warranty.claim'].search_count([
('sale_order_id', '=', sale_order_id)
])
@http.route('/read/sale_order', type='json', auth="public",
website=True)
def read_sale_order(self, order_id):
"""Read sale order data"""
return request.env['sale.order'].search([('id', '=', order_id),
(
'is_warranty_check', '=', True)
]).read()
@http.route('/check/selected_product', type='json', auth="public",
website=True)
def check_selected_product(self, product_id):
"""Check weather the selected product is a warranty product"""
return request.env['product.product'].search([
('id', '=', product_id),
('is_warranty_available', '=', True)
]).read()
@http.route('/create_warranty_claim', type='json', auth="public",
website=True)
def create_warranty_claim(self, sale_order_id, customer_id, product_id):
"""create a warranty claim for the selected user"""
request.env['warranty.claim'].create({
'customer_id': customer_id,
'product_id': product_id,
'sale_order_id': sale_order_id,
})

13
product_warranty_management_odoo/data/website_warranty_menu_data.xml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!--This XML configuration defines a new menu item for the Odoo website with
the name "Warranty".-->
<data noupdate="1">
<record id="website_menu_warranty" model="website.menu">
<field name="name">Warranty</field>
<field name="url">/warranty</field>
<field name="parent_id" ref="website.main_menu"/>
<field name="sequence" type="int">50</field>
</record>
</data>
</odoo>

6
product_warranty_management_odoo/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <product_warranty_management_odoo>
#### 16.08.2024
#### Version 17.0.1.0.0
#### ADD
- Initial Commit for Warranty Management

24
product_warranty_management_odoo/models/__init__.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Swaraj R (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import product_template
from . import sale_order
from . import warranty_claim

35
product_warranty_management_odoo/models/product_template.py

@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Swaraj R (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class ProductTemplate(models.Model):
"""Inherited product template to add fields"""
_inherit = 'product.template'
is_warranty_available = fields.Boolean(string="Warranty Available",
help="Boolean field to check"
"the warranty availability")
warranty_duration = fields.Integer(string="Warranty Duration (months)",
help="Warranty duration")
warranty_expiry = fields.Date(string="Warranty Expiry Date",
help="Warranty expiry date")

76
product_warranty_management_odoo/models/sale_order.py

@ -0,0 +1,76 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Swaraj R (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from dateutil.relativedelta import relativedelta
from odoo import fields, models
class SaleOrder(models.Model):
"""Inherited sale order to super functions to add additional
functionalities"""
_inherit = 'sale.order'
is_warranty_check = fields.Boolean(string='Warranty Check',
help='Check this box if the item has'
' warranty.')
def action_confirm(self):
"""Call the super method to perform the default confirmation
behavior"""
super(SaleOrder, self).action_confirm()
# Loop through the order lines and check warranty for each product
for order in self:
for line in order.order_line:
product = line.product_id
if product.is_warranty_available:
self.is_warranty_check = True
else:
self.is_warranty_check = False
if (self.order_line.
filtered(lambda x: x.product_id.is_warranty_available)):
self.is_warranty_check = True
else:
self.is_warranty_check = False
def action_open_smart_tab(self):
""" To open warranty smart tab"""
domain = [
('id', 'in',
self.order_line.mapped('product_id.product_tmpl_id.id')),
('is_warranty_available', '=', True),
]
products_with_warranty = self.env['product.template'].search(domain)
for product in products_with_warranty:
# Calculate the warranty expiry date based on the sale order date
warranty_expiry_date = self.date_order + relativedelta(
months=product.warranty_duration)
product.write({'warranty_expiry': warranty_expiry_date})
return {
'type': 'ir.actions.act_window',
'name': 'Warranty Details',
'view_mode': 'tree,form',
'res_model': 'product.template',
'views': [(self.env.ref('product_warranty_management_odoo.'
'product_template_view_tree').id, 'tree'),
(self.env.ref('product_warranty_management_odoo.'
'product_template_view_form').id, 'form')],
'domain': domain
}

60
product_warranty_management_odoo/models/warranty_claim.py

@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Swaraj R (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class WarrantyClaim(models.Model):
""" Warranty claim class to add fields for warranty claim"""
_name = 'warranty.claim'
_rec_name = "sale_order_id"
_description = 'Warranty Claim'
customer_id = fields.Many2one('res.partner',
string='Customer Name',
help="Customer selection",
required=True)
sale_order_id = fields.Many2one('sale.order',
help="To select the sale order",
string='Sale Order')
product_id = fields.Many2one('product.product',
string='Product',
help="To select the product",
required=True)
partner_id = fields.Many2one('res.users', string='User',
help="To select the partner",
default=lambda self: self.env.user)
state = fields.Selection(
[('draft', 'Draft'), ('approved', 'Approved'),
('rejected', 'Rejected')], default='draft', string="Status",
help="To select the state")
product_expiry_date = fields.Date(
string='Product Expiry Date', help="To get the product expiry date",
related='product_id.product_tmpl_id.warranty_expiry',
store=True, readonly=True)
def change_status_approved(self):
""" Function to change the status of the claim to approved"""
self.state = 'approved'
def change_status_rejected(self):
""" Function to change the status of the claim to rejected"""
self.state = 'rejected'

2
product_warranty_management_odoo/security/ir.model.access.csv

@ -0,0 +1,2 @@
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_warranty_claim,access.warranty.claim,model_warranty_claim,base.group_user,1,1,1,1
1 id name model_id/id group_id/id perm_read perm_write perm_create perm_unlink
2 access_warranty_claim access.warranty.claim model_warranty_claim base.group_user 1 1 1 1

BIN
product_warranty_management_odoo/static/description/assets/icons/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
product_warranty_management_odoo/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
product_warranty_management_odoo/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
product_warranty_management_odoo/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
product_warranty_management_odoo/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
product_warranty_management_odoo/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
product_warranty_management_odoo/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
product_warranty_management_odoo/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
product_warranty_management_odoo/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
product_warranty_management_odoo/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
product_warranty_management_odoo/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
product_warranty_management_odoo/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
product_warranty_management_odoo/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
product_warranty_management_odoo/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
product_warranty_management_odoo/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
product_warranty_management_odoo/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
product_warranty_management_odoo/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
product_warranty_management_odoo/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
product_warranty_management_odoo/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
product_warranty_management_odoo/static/description/assets/misc/categories.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
product_warranty_management_odoo/static/description/assets/misc/check-box.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
product_warranty_management_odoo/static/description/assets/misc/compass.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
product_warranty_management_odoo/static/description/assets/misc/corporate.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
product_warranty_management_odoo/static/description/assets/misc/customer-support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
product_warranty_management_odoo/static/description/assets/misc/cybrosys-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
product_warranty_management_odoo/static/description/assets/misc/features.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

BIN
product_warranty_management_odoo/static/description/assets/misc/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

3
product_warranty_management_odoo/static/description/assets/misc/phone.svg

@ -0,0 +1,3 @@
<svg width="36" height="44" viewBox="0 0 36 44" fill="none" xmlns="http://www.w3.org/2000/svg">
<path id="Vector" d="M7.25 19.3903C10.13 26.0689 14.76 31.5322 20.43 34.9305L24.83 29.7268C25.38 29.0778 26.17 28.889 26.86 29.1486C29.1 30.0218 31.51 30.4938 34 30.4938C35.11 30.4938 36 31.544 36 32.8537V41.1135C36 42.4233 35.11 43.4734 34 43.4734C15.22 43.4734 0 25.5143 0 3.35456C0 2.0448 0.9 0.994629 2 0.994629H9C10.11 0.994629 11 2.0448 11 3.35456C11 6.29268 11.4 9.1364 12.14 11.7795C12.36 12.5937 12.2 13.5259 11.65 14.1749L7.25 19.3903Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 565 B

BIN
product_warranty_management_odoo/static/description/assets/misc/pictures.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
product_warranty_management_odoo/static/description/assets/misc/pie-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
product_warranty_management_odoo/static/description/assets/misc/right-arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

BIN
product_warranty_management_odoo/static/description/assets/misc/star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

9
product_warranty_management_odoo/static/description/assets/misc/support (1) 1.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 43 KiB

6
product_warranty_management_odoo/static/description/assets/misc/support-email.svg

@ -0,0 +1,6 @@
<svg width="49" height="37" viewBox="0 0 49 37" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="Group">
<path id="Vector" d="M2.23798 3.59132C3.53363 4.39742 21.5313 15.9748 22.2027 16.3917C22.8741 16.8087 23.5573 17.0032 24.6173 17.0032C25.6774 17.0032 26.3606 16.8087 27.0319 16.3917C27.7033 15.9748 45.701 4.39742 46.9967 3.59132C47.4796 3.29945 48.2923 2.77131 48.469 2.17368C48.7753 1.11741 48.4455 0.714355 47.138 0.714355H24.6173H2.09664C0.789214 0.714355 0.459412 1.13131 0.765656 2.17368C0.942335 2.78521 1.75506 3.29945 2.23798 3.59132Z" fill="white"/>
<path id="Vector_2" d="M48.0214 4.21664C47.0555 4.80037 38.3865 12.0831 32.6503 16.4611L42.3323 29.3171C42.5679 29.5951 42.6739 29.9286 42.5443 30.0954C42.403 30.2483 42.0967 30.1649 41.8494 29.9008L30.2357 18.3374C28.4807 19.6716 27.2439 20.5889 27.0319 20.7279C26.1249 21.2699 25.4889 21.3394 24.6173 21.3394C23.7457 21.3394 23.1096 21.2699 22.2027 20.7279C21.9789 20.5889 20.7539 19.6716 18.9989 18.3374L7.38519 29.9008C7.14961 30.1788 6.83159 30.2622 6.69025 30.0954C6.54891 29.9425 6.65491 29.5951 6.89048 29.3171L16.5607 16.4611C10.8245 12.0831 2.06126 4.80037 1.09541 4.21664C0.0588929 3.59121 0 4.32783 0 4.89766C0 5.46749 0 33.3893 0 33.3893C0 34.6819 1.61367 36.2941 2.76797 36.2941H24.6173H46.4666C47.6209 36.2941 48.999 34.668 48.999 33.3893C48.999 33.3893 48.999 5.4536 48.999 4.89766C48.999 4.31393 49.0697 3.59121 48.0214 4.21664Z" fill="white"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
product_warranty_management_odoo/static/description/assets/misc/support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

9
product_warranty_management_odoo/static/description/assets/misc/whatsapp 1.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 38 KiB

BIN
product_warranty_management_odoo/static/description/assets/misc/whatsapp.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
product_warranty_management_odoo/static/description/assets/modules/1.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 912 KiB

BIN
product_warranty_management_odoo/static/description/assets/modules/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

BIN
product_warranty_management_odoo/static/description/assets/modules/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
product_warranty_management_odoo/static/description/assets/modules/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
product_warranty_management_odoo/static/description/assets/modules/4.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
product_warranty_management_odoo/static/description/assets/modules/5.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
product_warranty_management_odoo/static/description/assets/modules/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
product_warranty_management_odoo/static/description/assets/modules/l2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
product_warranty_management_odoo/static/description/assets/modules/l3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
product_warranty_management_odoo/static/description/assets/modules/l4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
product_warranty_management_odoo/static/description/assets/modules/l5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
product_warranty_management_odoo/static/description/assets/modules/l6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

BIN
product_warranty_management_odoo/static/description/assets/screenshots/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

BIN
product_warranty_management_odoo/static/description/assets/screenshots/10.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
product_warranty_management_odoo/static/description/assets/screenshots/11.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
product_warranty_management_odoo/static/description/assets/screenshots/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

BIN
product_warranty_management_odoo/static/description/assets/screenshots/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
product_warranty_management_odoo/static/description/assets/screenshots/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
product_warranty_management_odoo/static/description/assets/screenshots/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
product_warranty_management_odoo/static/description/assets/screenshots/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

BIN
product_warranty_management_odoo/static/description/assets/screenshots/7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

BIN
product_warranty_management_odoo/static/description/assets/screenshots/8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
product_warranty_management_odoo/static/description/assets/screenshots/9.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
product_warranty_management_odoo/static/description/assets/screenshots/hero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

BIN
product_warranty_management_odoo/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
product_warranty_management_odoo/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

818
product_warranty_management_odoo/static/description/index.html

@ -0,0 +1,818 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Odoo App 3 Index</title>
<!-- Bootstrap CSS -->
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css"
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
crossorigin="anonymous">
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.1/css/all.min.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap"
rel="stylesheet">
</head>
<body>
<section>
<div class="container"
style="font-family: 'Inter', sans-serif !important;background-color: #fff !important;">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between flex-wrap align-items-sm-center"
style="border-bottom:1px solid rgba(0, 0, 0, 0.22)">
<div class="my-3">
<img src="assets/misc/logo.png"
style="width:auto !important; height:40px !important">
</div>
<div class="my-3 d-flex align-items-center">
<div class="text-center"
style="background-color:#017E84 !important;font-size: 0.8rem !important; color:#fff !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important; min-width: 120px !important;">
Community
</div>
<div class="text-center"
style="background-color:#875A7B !important; color:#fff !important;font-size: 0.8rem !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important;min-width: 120px !important;">
Enterprise
</div>
<div class="text-center"
style="background-color:#7C7BAD !important; color:#fff !important;font-size: 0.8rem !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important; min-width: 120px !important;">
Odoo.sh
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12 text-center d-flex align-items-center flex-column"
style="margin: 80px 0px !important;">
<h1 style="font-size: 2.8rem;font-weight: 700; color:
#1A202C;">
Warranty Management</h1>
<p class="my-3 mb-4"
style="max-width: 80%; font-weight: 400 !important; line-height: 32px; color: #718096;">
Warranty management used to manage warranty of product.
</p>
<div style="width: 80%; margin-top: 3rem;">
<img src="assets/screenshots/hero.gif"
class="img-responsive" width="100%" height="auto">
</div>
</div>
</div>
<div class="container mt-5 mb-5">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4">
<p class="m-0"
style="font-weight: 600; font-size: 24px; color:#714b67 !important">
Key Highlights
</p>
</div>
<div class="row py-4">
<div class="col-md-6 col-sm-12 p-3">
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px;
background: #FFF;
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); ">
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67;
display: flex; justify-content: center; align-items: center;
margin-right: 10px; flex-shrink: 0;">
<i class="fa-solid fa-star "
style="color: #fff;font-size:14px;"></i>
</div>
<div>
<p style="color: #1A202C;font-weight: 600;
font-size: 1.2rem; margin-bottom: 2px;">
Users can Easily submit the warranty claims</p>
<p class="m-0" style="color:#718096">Use the new
User can easily submit the Warranty Claim through website.
</p>
</div>
</div>
</div>
<div class="col-md-6 col-sm-12 p-3">
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px;
background: #FFF;
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); ">
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67;
display: flex; justify-content: center; align-items: center;
margin-right: 10px; flex-shrink: 0;">
<i class="fa-solid fa-star "
style="color: #fff;font-size:14px;"></i>
</div>
<div>
<p style="color: #1A202C;font-weight: 600;
font-size: 1.2rem; margin-bottom: 2px;">
Warranty claim requests can be seen by admin</p>
<p class="m-0" style="color:#718096">View and
Warranty claim requests can be seen and approve admin.
</p>
</div>
</div>
</div>
</div>
</div>
<div class="container rounded">
<ul class="nav nav-tabs d-flex"
style="width: fit-content;margin: 0 auto;gap: 1rem;">
<li class="col text-center py-2 text-nowrap "
style="color: #fff; background-color: #714B67;border-radius: 6px 6px 0px 0px;">
<a
class="active show" data-toggle="tab" href="#tab1"
style="color: #fff;font-weight: 500; background-color: #714B67; text-decoration: none;">
<i class="fa-regular fa-image pr-2"
style="color: #fff;"></i>
Screenshots</a></li>
<li class="col text-center py-2 text-nowrap "
style="color: #fff; background-color: #714B67;border-radius: 6px 6px 0px 0px;">
<a
data-toggle="tab" href="#tab2"
style="color: #fff;font-weight: 500; text-decoration: none;"><i
class="fa-solid fa-star pr-2"
style="color: #fff;"></i>Features</a></li>
<li class="col text-center py-2 text-nowrap "
style="color: #fff; background-color: #714B67;border-radius: 6px 6px 0px 0px;">
<a
data-toggle="tab" href="#tab3"
style="color: #fff;font-weight: 500; text-decoration: none; background-color: #714B67;"><i
class="fa-solid fa-book-open pr-2"
style="color: #fff;"></i>Released Notes</a></li>
</ul>
<div class="tab-content"
style="background-color: rgba(121, 113, 119, 0.04);">
<div id="tab1" class="tab-pane fade in active show">
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/1.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
In the product form a warranty page is added, if the product has warranty available,then can be added the duration in the field.</h4>
</div>
</div>
</div>
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/2.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
If we add the warranty enabled product in a sale order line then a warranty smart button will be shown on confirmation.</h4>
</div>
</div>
</div>
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/3.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
Warranty details on clicking the smart tab.</h4>
</div>
</div>
</div>
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/4.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
Warranty detail form view,The expiry date is automatically calculated.</h4>
</div>
</div>
</div>
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/5.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
Warranty menu in website.</h4>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
customer can submit their warranty claims through the website
.</p>
</div>
</div>
</div>
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/6.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
Notification</h4>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
After Successful submission this page will be shown.</p>
</div>
</div>
</div>
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/7.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
Warranty claim request will be created on backend.</h4>
</div>
</div>
</div>
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/8.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
Warranty claim request will be shown like this:</h4>
</div>
</div>
</div>
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/9.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
Admin can Approve or Reject the request.</h4>
</div>
</div>
</div>
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/10.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
Status of the warranty claim can be seen on the portal menu as "My Claims" .</h4>
</div>
</div>
</div>
<div class="col-lg-12 py-2"
style="padding: 1rem 4rem !important;">
<div
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="row justify-content-center p-3 w-100 m-0">
<img src="assets/screenshots/11.png"
class="img-thumbnail">
</div>
<div class="px-3">
<h4 class="mt-2"
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important">
Website view of warranty claim.</h4>
</div>
</div>
</div>
</div>
<div id="tab2" class="tab-pane fade">
<div class="col-mg-12" style="padding: 1rem 4rem;">
<ul style="list-style: none; padding: 1rem 0;font-weight: 500;">
<li class="py-3"
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<span style="margin-right: 12px;"><img
src="assets/misc/star (1) 2.svg"
alt=""
width="16px"></span>Dedicated Website Views for Users.
</li>
<li class="py-3"
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<span style="margin-right: 12px;"><img
src="assets/misc/star (1) 2.svg"
alt=""
width="16px"></span>Users can Easily submit the warranty claims.
</li>
<li class="py-3"
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<span style="margin-right: 12px;"><img
src="assets/misc/star (1) 2.svg"
alt=""
width="16px"></span>Available in Odoo 17.0 Community and Enterprise..
</li>
<li class="py-3"
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<span style="margin-right: 12px;"><img
src="assets/misc/star (1) 2.svg"
alt=""
width="16px"></span>Warranty Menu in Website.
</li>
<li class="py-3"
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<span style="margin-right: 12px;"><img
src="assets/misc/star (1) 2.svg"
alt=""
width="16px"></span>Warranty claim requests can be seen by admin.
</li>
<li class="py-3"
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<span style="margin-right: 12px;"><img
src="assets/misc/star (1) 2.svg"
alt=""
width="16px"></span>Automatic calculation of warranty expiry.
</li>
</ul>
</div>
</div>
<div id="tab3" class="tab-pane fade">
<div class="col-mg-12 active" style="padding: 1rem 4rem;">
<div class="py-3"
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);">
<div class="d-flex mb-3"
style="font-size: 0.8rem; font-weight: 500;"><span>Version
17.0.1.0.0</span><span
class="px-2">|</span><span
style="color: #714B67;font-weight: 600;">Released on:29th July 2024</span>
</div>
<p class="m-0"
style=" color:#718096!important; font-size:1rem !important;line-height: 28px;">
Initial Commit for Warranty Management.</p>
</div>
</div>
</div>
</div>
</div>
<div class="container mt-5">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-5">
<p class="m-0"
style="font-weight: 600; font-size: 24px; color:#000 !important">
Related Products</p>
</div>
</div>
<div id="myCarousel" class="carousel slide py-3" data-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<div class="row p-4">
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/17.0/base_accounting_kit/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px; ">
<img src="assets/modules/1.gif"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
Odoo 17 Full Accounting Kit</p>
</div>
</a>
</div>
</div>
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/17.0/invoice_format_editor/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px; ">
<img src="assets/modules/2.png"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
Invoice Format Editor</p>
</div>
</a>
</div>
</div>
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/17.0/inventory_barcode_scanning/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px; ">
<img src="assets/modules/3.png"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
Barcode scanning in Inventory</p>
</div>
</a>
</div>
</div>
</div>
</div>
<div class="carousel-item">
<div class="row p-4">
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/17.0/whatsapp_redirect/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px; ">
<img src="assets/modules/4.jpg"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
Send Whatsapp Message</p>
</div>
</a>
</div>
</div>
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/17.0/base_account_budget/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px;">
<img src="assets/modules/5.jpg"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
Budget Management</p>
</div>
</a>
</div>
</div>
<div class="col">
<div class="p-3">
<a href="https://apps.odoo.com/apps/modules/17.0/product_barcode/"
style="color: #000; text-decoration: none;">
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;">
<div style="width: 300px;">
<img src="assets/modules/6.png"
alt="" width="100%"
height="auto">
</div>
<p class="text-center pt-2 text-black font-weight-bold">
Product Barcode Generator</p>
</div>
</a>
</div>
</div>
</div>
</div>
</div>
<a class="carousel-control-prev" href="#myCarousel"
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="#myCarousel"
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 class="container mt-5">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4">
<p class="m-0"
style="font-weight: 600; font-size: 24px; color:#000 !important">
Our Services</p>
</div>
</div>
<div class="container my-5">
<div class="row py-3">
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#13EA36 ; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/cogs.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Customization</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#DBC711; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/wrench.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Implementation</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative; border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#FF6B6B ; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/lifebuoy.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Support</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative; border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#FFA801 ; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/user.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Hire
Odoo Developer</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative; border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#54A0FF; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/puzzle.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Integration</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#6D7680 ; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/update.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Migration</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#786FA6 ; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/consultation.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Consultancy</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px;position: relative;border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#F8A5C2 ; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/training.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Implementation</p>
</div>
</div>
<div class="col-md-4 col-sm-6 px-4 py-4">
<div
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;">
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);">
<div style="background-color:#E6BE26; border-radius: 50%; padding: 15px; width: 68px;
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);">
<img src="assets/icons/license.png"
alt="service-icon" width="38px"
height="auto">
</div>
</div>
<p style="margin-top: 20px; font-weight: bold;">Odoo
Licensing Consultancy</p>
</div>
</div>
</div>
</div>
<div class="container mt-5">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4">
<p class="m-0"
style="font-weight: 600; font-size: 24px; color:#000 !important">
Our Industries</p>
</div>
</div>
<div class="container">
<div class="row my-5 py-4">
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100 "
style="border-right: 1px solid rgb(209, 209, 209); border-bottom: 1px solid rgb(209, 209, 209); padding: 30px; box-shadow: 6px 0 10px rgba(228, 227, 227, 0.373);">
<img src="assets/icons/trading-black.png" width="42px"
height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">Trading</p>
<p>Easily procure and sell your products</p>
</div>
</div>
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100"
style="border-right: 1px solid rgb(209, 209, 209);border-bottom: 1px solid rgb(209, 209, 209); padding: 30px;">
<img src="assets/icons/pos-black.png" width="42px"
height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">POS</p>
<p>Easy configuration and convivial experience</p>
</div>
</div>
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100"
style="border-right: 1px solid rgb(209, 209, 209);border-bottom: 1px solid rgba(0, 0, 0, 0.2); padding: 30px; box-shadow: 0 5px 10px rgba(228, 227, 227, 0.373)">
<img src="assets/icons/education-black.png" width="42px"
height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">
Education</p>
<p>A platform for educational management</p>
</div>
</div>
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100"
style="border-bottom: 1px solid rgb(209, 209, 209); padding: 30px; ">
<img src="assets/icons/manufacturing-black.png"
width="42px" height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">
Manufacturing</p>
<p>Plan, track and schedule your operations</p>
</div>
</div>
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100"
style="border-right: 1px solid rgb(209, 209, 209); padding: 30px;">
<img src="assets/icons/ecom-black.png" width="42px"
height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">E-commerce &
Website</p>
<p>Mobile friendly, awe-inspiring product pages</p>
</div>
</div>
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100"
style="border-right: 1px solid rgb(209, 209, 209); padding: 30px;box-shadow: 0 -5px 10px rgba(228, 227, 227, 0.373);">
<img src="assets/icons/service-black.png" width="42px"
height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">Service
Management</p>
<p>Keep track of services and invoice</p>
</div>
</div>
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100"
style="border-right: 1px solid rgb(209, 209, 209); padding: 30px; ">
<img src="assets/icons/restaurant-black.png"
width="42px" height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">
Restaurant</p>
<p>Run your bar or restaurant methodically</p>
</div>
</div>
<div class="col-md-3 col-sm-6 p-0">
<div class="d-flex flex-column h-100"
style=" padding: 30px;box-shadow: -5px 0 10px rgba(228, 227, 227, 0.373);">
<img src="assets/icons/hotel-black.png" width="42px"
height="auto" alt="">
<p style="color: #714B67;font-weight: 600; margin-top: 10px;
font-size: 1.2rem; margin-bottom: 2px;">Hotel
Management</p>
<p>An all-inclusive hotel management application</p>
</div>
</div>
</div>
</div>
<div class="container mt-5">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-5">
<p class="m-0"
style="font-weight: 600; font-size: 24px; color:#000 !important">
Support</p>
</div>
</div>
<div class="container my-5">
<div class="row" style="background-color: #FFFAFE;">
<div class="col-md-6 pb-4 d-flex align-items-center justify-content-center"
style="border-right: 1px solid #D9D9D9;">
<div style="padding: 30px;">
<div class="d-flex align-items-center">
<img src="assets/misc/support (1) 1.svg" alt=""
width="60px" style="margin-right: 12px;">
<div style="padding: 0px 8px;">
<span
style="color: #714B67;font-size: 24px;font-weight: 600;padding-bottom: 1rem;">Need
Help?</span>
<p class="m-0" style="color:#718096;">Got
questions or need help? Get in touch.</p>
<div style="font-weight: 400;"><span><img
src="assets/misc/support-email.svg"
alt=""
width="18px"
style="filter: invert(1);margin-right: 0.8rem;"></span>odoo@cybrosys.com
</div>
</div>
</div>
</div>
</div>
<div class="col-md-6 pb-4 d-flex align-items-center justify-content-center">
<div style="padding: 30px;">
<div class="d-flex align-items-center">
<img src="assets/misc/whatsapp 1.svg" alt=""
width="60px" style="margin-right: 12px;">
<div>
<span style="color: #714B67;font-size: 24px;font-weight: 600;">WhatsApp</span>
<p class="m-0" style="color:#718096;">Say hi to
us on WhatsApp!</p>
<div style="font-weight: 400; font-size: 16px;"><span><img
src="assets/misc/phone.svg"
alt="" width="14px"
style="filter: invert(1); margin-right: 0.8rem;"></span>+91
99456767686
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>

42
product_warranty_management_odoo/static/src/css/product_warranty_management_odoo.css

@ -0,0 +1,42 @@
/* Style the labels */
.error-message{
color:red;
font:20px;
}
/* Style the labels */
.o_form_label {
width: 300px; /* Adjust label width as needed */
text-align: left;
display: inline-block;
/* Add spacing between label and input */
}
/* Style the input elements */
.o_row .o_form_input {
display: inline-block;
width:600px;
/* Add spacing between input and next label */
}
/* Style the form buttons */
.button {
background-color: #007bff;
color: #fff;
border: none;
padding: 10px 20px;
cursor: pointer;
border-radius: 5px;
}
/* Style the button on hover */
.button:hover {
background-color: #0056b3;
}
/* Style the select dropdowns */
select {
width: 100%;
padding: 5px;
border: 1px solid #ccc;
border-radius: 3px;
}

123
product_warranty_management_odoo/static/src/js/website_registration.js

@ -0,0 +1,123 @@
/**@odoo-module*/
import publicWidget from "@web/legacy/js/public/public_widget";
publicWidget.registry.WarrantyClaim = publicWidget.Widget.extend({
//init function to bind rpc
init(){
this.rpc = this.bindService("rpc");
},
selector: '.container',
events: {
'click #customer_id': '_onClickCustomer',
'change #customer_id': '_onClickCustomer',
'click #sale_order_id': '_onClickSaleOrder',
'change #sale_order_id': '_onClickSaleOrder',
'submit #form_submit': '_onSubmit'
},
_onClickCustomer: function (ev) {
// To show the sale order of the selected customer only
ev.preventDefault();
var selectedCustomerId = this.$('#customer_id').val();
var $saleOrderDropdown = this.$('#sale_order_id');
var $productDropdown = this.$('#products_id');
$saleOrderDropdown.empty().append('<option value="">Select Sale Order</option>').prop('disabled', true);
$productDropdown.empty().append('<option value="">Select Product</option>').prop('disabled', true);
if (selectedCustomerId) {
this.rpc('/partner/sale_order', {
'partner_id': parseInt(selectedCustomerId)
}).then(function (result) {
if (result.length > 0) {
$saleOrderDropdown.prop('disabled', false);
$.each(result, function (i, saleOrder) {
$saleOrderDropdown.append($('<option>', {
value: saleOrder.id,
text: saleOrder.name,
}));
});
$productDropdown.prop('disabled', false);
} else {
$productDropdown.prop('disabled', true);
}
});
}
},
_onClickSaleOrder: function (ev) {
// get the product details of the selected sale order
ev.preventDefault();
var selectedSaleOrderId = this.$('#sale_order_id').val();
var $productDropdown = this.$('#products_id');
$productDropdown.empty().append('<option value="">Select Product</option>').prop('disabled', true);
var self = this
if (selectedSaleOrderId) {
this.rpc('/partner/sale_order_line', {
'order_id': parseInt(selectedSaleOrderId)
}).then(function (result) {
var $productDropdown = self.$('#products_id');
$productDropdown.prop('disabled', false);
$productDropdown.empty();
$.each(result, function (i, saleOrderLine) {
$productDropdown.append($('<option>', {
value: saleOrderLine.product_id[0],
text: saleOrderLine.product_id[1],
}));
});
});
}
},
_onSubmit: function (ev) {
var self = this
ev.preventDefault();
// Get the selected sale order ID, customer ID, and product ID
var selectedSaleOrderId = this.$('#sale_order_id').val();
var selectedCustomerId = this.$('#customer_id').val();
var selectedProductId = this.$('#products_id').val();
var errorMessageElement = this.$('#error_message');
if (selectedSaleOrderId && selectedCustomerId && selectedProductId) {
this.rpc('/partner/warranty_claim_count',{
'sale_order_id' : parseInt(selectedSaleOrderId)
}).then(function (count) {
if (count > 0) {
errorMessageElement.text("A warranty claim for this sale order already exists.");
setTimeout(function () {
errorMessageElement.text("");
}, 10000);
} else {
errorMessageElement.text("");
self.rpc('/read/sale_order',{
'order_id': parseInt(selectedSaleOrderId) ,
}).then(function (saleOrderData) {
if (saleOrderData && saleOrderData[0] && saleOrderData[0].is_warranty_check === true) {
self.rpc('/check/selected_product',{
'product_id' : parseInt(selectedProductId)
}).then(function (productData) {
if (productData && productData[0] && productData[0].is_warranty_available === true) {
self.rpc('/create_warranty_claim',{
'sale_order_id': parseInt(selectedSaleOrderId),
'customer_id': parseInt(selectedCustomerId),
'product_id': parseInt(selectedProductId),
}).then(function (result) {
window.location.href = '/warranty/claim/submit';
});
} else {
errorMessageElement.text("Selected product does not have warranty available.");
setTimeout(function () {
errorMessageElement.text("");
}, 10000);
}
});
} else {
errorMessageElement.text("Selected sale order does not have warranty available.");
setTimeout(function () {
errorMessageElement.text("");
}, 10000);
}
});
}
});
}
}
});
return publicWidget.registry.WarrantyClaim;

65
product_warranty_management_odoo/views/portal_templates.xml

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Inherited template to add portal menu for my claims-->
<template id="portal_my_home_claim" name="My Claims"
customize_show="True" inherit_id="portal.portal_my_home">
<xpath expr="//div[hasclass('o_portal_docs')]" position="inside">
<t t-call="portal.portal_docs_entry">
<t t-set="title">My Claims</t>
<t t-set="url"
t-value="'/my/claims'"/>
<t t-set="placeholder_count" t-value="'claim_count'"/>
</t>
</xpath>
</template>
<!-- Template for adding the table of claim data records in the portal -->
<template id="portal_warranty_claims" name="claims">
<t t-call="portal.portal_layout">
<t t-call="portal.portal_searchbar">
<t t-set="page_name">claim_count</t>
<t t-set="title"/>
</t>
<t t-call="portal.portal_table">
<thead>
<tr class="active">
<th class="text-muted">Customer</th>
<th class="text-muted">Sale Order</th>
<th class="text-muted">Product</th>
<th class="text-muted">Status</th>
</tr>
</thead>
<t t-foreach="claim_data" t-as="value">
<tr>
<td class="text-muted">
<span t-esc="value['customer_id']"/>
</td>
<td class="text-muted">
<span t-esc="value['sale_order_id']"/>
</td>
<td class="text-muted">
<span t-esc="value['product_id']"/>
</td>
<td class="text-muted">
<span t-esc="value['status']"/>
</td>
</tr>
</t>
</t>
</t>
</template>
<!-- Template to add bread crumbs-->
<template id="portal_my_home_menu_claims"
name="Portal layout: claims menu entries"
inherit_id="portal.portal_breadcrumbs" priority="20">
<xpath expr="//ol[hasclass('o_portal_submenu')]" position="inside">
<t t-set="variable" t-value="1"/>
<t t-if="variable == 1">
<li>
<a t-attf-href="/my/claims?{{ keep_query() }}">/ Warranty
Claims
</a>
</li>
</t>
</xpath>
</template>
</odoo>

56
product_warranty_management_odoo/views/product_template_views.xml

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--This XML configuration modifies the product.template form view to
include warranty management fields.-->
<record id="product_template_form_view" model="ir.ui.view">
<field name="name">product.template.view.form.inherit.product.warranty.management.odoo</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_form_view"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='sales']" position="after">
<page string="Warranty">
<group>
<group>
<field name="is_warranty_available" widget="bool_badge"/>
<field name="warranty_duration"
invisible=" is_warranty_available == False"/>
</group>
</group>
</page>
</xpath>
</field>
</record>
<record id="product_template_view_tree" model="ir.ui.view">
<field name="name">product.template.view.tree.inherit.product.warranty.management.odoo</field>
<field name="model">product.template</field>
<field name="arch" type="xml">
<tree>
<field name="name" string="Product"/>
<field name="warranty_duration"/>
</tree>
</field>
</record>
<record id="product_template_view_form" model="ir.ui.view">
<field name="name">product.template.view.form</field>
<field name="model">product.template</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="name" string="Product:" readonly="1"/>
<field name="warranty_duration" readonly="1"/>
<field name="warranty_expiry" readonly="1"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="product_template_action" model="ir.actions.act_window">
<field name="name">Warranty Details</field>
<field name="res_model">product.template</field>
<field name="view_mode">tree,form</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('product_template_view_tree')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('product_template_view_form')})]"/>
</record>
</odoo>

23
product_warranty_management_odoo/views/sale_order_views.xml

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Inherit the Sale Order form view -->
<record id="view_order_form" model="ir.ui.view">
<field name="name">sale.order.view.form.inherit.product.warranty.management.odoo</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<!-- Extend the Sale Order form view by adding a smart tab -->
<xpath expr="//div[@name='button_box']/button[last()]"
position="after">
<field name="is_warranty_check" invisible="1"/>
<button name="action_open_smart_tab"
type="object"
class="oe_stat_button"
icon="fa-clock-o"
string="Warranty"
invisible=" is_warranty_check != True">
</button>
</xpath>
</field>
</record>
</odoo>

51
product_warranty_management_odoo/views/warranty_claim_views.xml

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--This XML configuration for the warranty.claim action-->
<record id="warranty_claim_action" model="ir.actions.act_window">
<field name="name">Warranty claim request</field>
<field name="res_model">warranty.claim</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem
id="menu_sale_order_warranty_claim"
name="Warranty Claim Request"
parent="sale.sale_order_menu"
action="warranty_claim_action"
sequence="99"
/>
<!-- This XML configuration for the warranty.claim form view-->
<record id="warranty_claim_view_form" model="ir.ui.view">
<field name="name">warranty.claim.view.form</field>
<field name="model">warranty.claim</field>
<field name="arch" type="xml">
<form string="Warranty Claim">
<header>
<field name="state" widget="statusbar" statusbar_visible="draft,approved,rejected"/>
<button name="change_status_approved" string="Approve" type="object" class="oe_highlight" invisible="state not in ['draft','rejected']"/>
<button name="change_status_rejected" string="Reject" type="object" class="oe_highlight" invisible="state not in ['draft','approved']"/>
</header>
<sheet>
<group>
<field name="customer_id" readonly="1"/>
<field name="sale_order_id" readonly="1"/>
<field name="product_id" readonly="1"/>
<field name="product_expiry_date" readonly="1"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- This XML configuration for the warranty.claim tree view-->
<record id="warranty_claim_view_tree" model="ir.ui.view">
<field name="name">warranty.claim.view.tree</field>
<field name="model">warranty.claim</field>
<field name="arch" type="xml">
<tree string="Warranty Claims">
<field name="customer_id"/>
<field name="sale_order_id"/>
<field name="product_id"/>
<field name="product_expiry_date"/>
</tree>
</field>
</record>
</odoo>

152
product_warranty_management_odoo/views/website_registration_templates.xml

@ -0,0 +1,152 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Template for the Warranty Claim page -->
<template id="warranty_claim_page" name="Warranty Claim">
<t t-call="website.layout">
<div id="wrap" class="warranty-claim-widget" align="center">
<div class="container">
<div class="col-md-9 mt-5"
style="background-color: lightblue; padding: 20px; border-radius: 10px;">
<h2 class="head"
style="color: black; font-size: 26px; font-weight: bold;">
Warranty Claim Request
</h2>
</div>
<div class="col-md-12 mt-5 mb-5 mb-md-0" t-ref="body">
<div class="form">
<form action="/warranty/claim/submit"
id="form_submit">
<!-- Customer Selection -->
<div>
<div class="o_row">
<label class="o_form_label"
for="customer_id">Name Of
Customer: *
</label>
<div class="o_form_input">
<select id="customer_id"
name="customer_id"
required="true">
<option value="">Select
Customer
</option>
<t t-foreach='customers'
t-as="customer">
<option t-esc='customer.name'
t-att-value='customer.id'/>
</t>
</select>
</div>
</div>
<br/>
<!-- Sale Order Selection -->
<div class="o_row">
<label class="o_form_label"
for="sale_order_id">Select Sale
Order: *
</label>
<div class="o_form_input">
<select id="sale_order_id"
name="sale_order_id"
required="true"
disabled="1">
<option value="">Select Sale
Order
</option>
<t t-foreach='sale_orders'
t-as="sale_order">
<option t-esc='sale_order.name'
t-att-value='sale_order.id'/>
</t>
</select>
</div>
</div>
<br/>
<!-- Product Selection -->
<div class="o_row">
<label class="o_form_label"
for="products_id">Select
Product: *
</label>
<div class="o_form_input">
<select id="products_id"
name="products_id"
required="true"
disabled="1">
<option value="">Select
Product
</option>
<t t-foreach='products'
t-as="product">
<option t-esc='product.name'
t-att-value='product.id'/>
</t>
</select>
</div>
</div>
<br/>
<!--description-->
<div class="o_row">
<label class="o_form_label"
for="additional_field">
Description:
</label>
<div class="o_form_input">
<input type="text"
id="additional_field"
name="additional_field"
style="width:600px;; height:80pt;"/>
</div>
</div>
<br/>
<button type="submit"
class="btn btn-primary btn-lg s_website_form_send">
Submit
</button>
<br/>
<br/>
<br/>
<div id="error_message"
class="error-message"/>
<br/>
<br/>
</div>
</form>
</div>
</div>
</div>
</div>
</t>
</template>
<template id="claim_thanks_view">
<t t-call="website.layout">
<div id="wrap" class="oe_structure oe_empty">
<section class="s_website_form" data-vcss="001"
data-snippet="s_website_form">
<div class="container">
<center>
<br/>
<br/>
<div class="col-lg-7 col-xl-6 me-lg-auto">
<span class="d-block fa fa-4x fa-thumbs-up mx-auto rounded-circle bg-primary"/>
<br/>
<h1 class="text-center">Success!!!!</h1>
<div class="pb16 pt16 s_hr" data-snippet="s_hr"
data-name="Separator">
<hr class="mx-auto border-top w-50 border-dark text-center"/>
</div>
<h5 class="text-center">
<span class="fa fa-check-circle"/>
<span>
Claim Request is Created
<b>Successfully</b>
</span>
</h5>
</div>
</center>
</div>
</section>
</div>
</t>
</template>
</odoo>
Loading…
Cancel
Save