Browse Source

Sep 13: [ADD] Initial commit 'franchise_management'

pull/254/merge
Cybrosys Technologies 8 months ago
parent
commit
49d15b0a69
  1. 48
      franchise_management/README.rst
  2. 24
      franchise_management/__init__.py
  3. 79
      franchise_management/__manifest__.py
  4. 25
      franchise_management/controllers/__init__.py
  5. 43
      franchise_management/controllers/franchise_customer_portal.py
  6. 108
      franchise_management/controllers/franchise_portal.py
  7. 76
      franchise_management/controllers/web_franchise_dealer.py
  8. 71
      franchise_management/controllers/web_franchise_sale.py
  9. 56
      franchise_management/data/contract_email_data.xml
  10. 17
      franchise_management/data/contract_renewal_cron_data.xml
  11. 33
      franchise_management/data/contract_renewal_email_data.xml
  12. 34
      franchise_management/data/feedback_email_data.xml
  13. 88
      franchise_management/data/franchise_contract_data.xml
  14. 21
      franchise_management/data/ir_sequence_data.xml
  15. 17
      franchise_management/data/monthly_feedback_cron_data.xml
  16. 6
      franchise_management/doc/RELEASE_NOTES.md
  17. 26
      franchise_management/models/__init__.py
  18. 37
      franchise_management/models/business_experience.py
  19. 40
      franchise_management/models/franchise_agreement.py
  20. 334
      franchise_management/models/franchise_dealer.py
  21. 80
      franchise_management/models/franchise_sales.py
  22. 32
      franchise_management/models/res_users.py
  23. 94
      franchise_management/report/agreement_based_templates.xml
  24. 73
      franchise_management/report/dealer_based_templates.xml
  25. 94
      franchise_management/report/dealer_sale_based_templates.xml
  26. 95
      franchise_management/report/dealer_sale_on_agreement_templates.xml
  27. 83
      franchise_management/report/dealer_sale_report_templates.xml
  28. 935
      franchise_management/report/franchise_dealership_contract_templates.xml
  29. 68
      franchise_management/report/franchise_management_report.xml
  30. 74
      franchise_management/report/franchise_report_templates.xml
  31. 20
      franchise_management/security/franchise_management_groups.xml
  32. 8
      franchise_management/security/ir.model.access.csv
  33. BIN
      franchise_management/static/description/assets/icons/check.png
  34. BIN
      franchise_management/static/description/assets/icons/chevron.png
  35. BIN
      franchise_management/static/description/assets/icons/cogs.png
  36. BIN
      franchise_management/static/description/assets/icons/consultation.png
  37. BIN
      franchise_management/static/description/assets/icons/ecom-black.png
  38. BIN
      franchise_management/static/description/assets/icons/education-black.png
  39. BIN
      franchise_management/static/description/assets/icons/hotel-black.png
  40. BIN
      franchise_management/static/description/assets/icons/license.png
  41. BIN
      franchise_management/static/description/assets/icons/lifebuoy.png
  42. BIN
      franchise_management/static/description/assets/icons/logo.png
  43. BIN
      franchise_management/static/description/assets/icons/manufacturing-black.png
  44. BIN
      franchise_management/static/description/assets/icons/pos-black.png
  45. BIN
      franchise_management/static/description/assets/icons/puzzle.png
  46. BIN
      franchise_management/static/description/assets/icons/restaurant-black.png
  47. BIN
      franchise_management/static/description/assets/icons/service-black.png
  48. BIN
      franchise_management/static/description/assets/icons/trading-black.png
  49. BIN
      franchise_management/static/description/assets/icons/training.png
  50. BIN
      franchise_management/static/description/assets/icons/update.png
  51. BIN
      franchise_management/static/description/assets/icons/user.png
  52. BIN
      franchise_management/static/description/assets/icons/wrench.png
  53. BIN
      franchise_management/static/description/assets/misc/categories.png
  54. BIN
      franchise_management/static/description/assets/misc/check-box.png
  55. BIN
      franchise_management/static/description/assets/misc/compass.png
  56. BIN
      franchise_management/static/description/assets/misc/corporate.png
  57. BIN
      franchise_management/static/description/assets/misc/customer-support.png
  58. BIN
      franchise_management/static/description/assets/misc/cybrosys-logo.png
  59. BIN
      franchise_management/static/description/assets/misc/features.png
  60. BIN
      franchise_management/static/description/assets/misc/logo.png
  61. BIN
      franchise_management/static/description/assets/misc/pictures.png
  62. BIN
      franchise_management/static/description/assets/misc/pie-chart.png
  63. BIN
      franchise_management/static/description/assets/misc/right-arrow.png
  64. BIN
      franchise_management/static/description/assets/misc/star.png
  65. BIN
      franchise_management/static/description/assets/misc/support.png
  66. BIN
      franchise_management/static/description/assets/misc/whatsapp.png
  67. BIN
      franchise_management/static/description/assets/modules/1.png
  68. BIN
      franchise_management/static/description/assets/modules/2.png
  69. BIN
      franchise_management/static/description/assets/modules/3.png
  70. BIN
      franchise_management/static/description/assets/modules/4.jpg
  71. BIN
      franchise_management/static/description/assets/modules/4.png
  72. BIN
      franchise_management/static/description/assets/modules/5.png
  73. BIN
      franchise_management/static/description/assets/modules/6.png
  74. BIN
      franchise_management/static/description/assets/modules/banner.png
  75. BIN
      franchise_management/static/description/assets/modules/budget_image.png
  76. BIN
      franchise_management/static/description/assets/modules/credit_image.png
  77. BIN
      franchise_management/static/description/assets/modules/crm.png
  78. BIN
      franchise_management/static/description/assets/modules/employee.png
  79. BIN
      franchise_management/static/description/assets/modules/employee_image.png
  80. BIN
      franchise_management/static/description/assets/modules/export_image.png
  81. BIN
      franchise_management/static/description/assets/modules/gantt_image.png
  82. BIN
      franchise_management/static/description/assets/modules/hr.png
  83. BIN
      franchise_management/static/description/assets/modules/quotation_image.png
  84. BIN
      franchise_management/static/description/assets/modules/sales.png
  85. BIN
      franchise_management/static/description/assets/modules/w1.gif
  86. BIN
      franchise_management/static/description/assets/modules/w2.png
  87. BIN
      franchise_management/static/description/assets/modules/w3.png
  88. BIN
      franchise_management/static/description/assets/modules/w4.png
  89. BIN
      franchise_management/static/description/assets/modules/w5.png
  90. BIN
      franchise_management/static/description/assets/modules/w6.png
  91. BIN
      franchise_management/static/description/assets/screenshots/1.png
  92. BIN
      franchise_management/static/description/assets/screenshots/10.png
  93. BIN
      franchise_management/static/description/assets/screenshots/11.png
  94. BIN
      franchise_management/static/description/assets/screenshots/12.png
  95. BIN
      franchise_management/static/description/assets/screenshots/13.png
  96. BIN
      franchise_management/static/description/assets/screenshots/14.png
  97. BIN
      franchise_management/static/description/assets/screenshots/15.png
  98. BIN
      franchise_management/static/description/assets/screenshots/16.png
  99. BIN
      franchise_management/static/description/assets/screenshots/17.png
  100. BIN
      franchise_management/static/description/assets/screenshots/2.png

48
franchise_management/README.rst

@ -0,0 +1,48 @@
.. 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
Franchise Management
====================
This module helps to manage franchise in odoo.
Configuration
=============
* No additional configurations needed
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
-------
Affero General Public License v3.0 (AGPL v3)
(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
Credits
-------
* Developer: (V15) Gayathri V,
(V16) Jumana Jabin MK,
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>`__

24
franchise_management/__init__.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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 controllers
from . import models
from . import wizard

79
franchise_management/__manifest__.py

@ -0,0 +1,79 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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': 'Franchise Management',
'version': '15.0.1.0.0',
'category': 'Marketing',
'summary': 'This Module will help to manage franchisees and dealers.',
'description': """This module helps to manage the franchise in odoo.
A franchise is a type of license that grants a franchisee access,thus
allowing the franchisee to sell a product or service under the
franchises business name.""",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': 'https://www.cybrosys.com',
'depends': ['product', 'website_sale', 'contacts'],
'data': [
'security/franchise_management_groups.xml',
'security/ir.model.access.csv',
'report/franchise_dealership_contract_templates.xml',
'report/franchise_management_report.xml',
'report/franchise_report_templates.xml',
'report/dealer_based_templates.xml',
'report/dealer_sale_report_templates.xml',
'report/dealer_sale_based_templates.xml',
'report/agreement_based_templates.xml',
'report/dealer_sale_on_agreement_templates.xml',
'data/ir_sequence_data.xml',
'data/contract_email_data.xml',
'data/franchise_contract_data.xml',
'data/contract_renewal_email_data.xml',
'data/feedback_email_data.xml',
'data/monthly_feedback_cron_data.xml',
'data/contract_renewal_cron_data.xml',
'wizard/dealer_report_views.xml',
'wizard/dealer_sale_report_views.xml',
'views/franchise_dealer_views.xml',
'views/web_franchise_templates.xml',
'views/franchise_agreement_views.xml',
'views/approved_dealer_views.xml',
'views/res_users_views.xml',
'views/franchise_dealer_portal_templates.xml',
'views/franchise_dealer_portal_detail_templates.xml',
'views/franchise_sales_views.xml',
'views/web_franchise_sales_templates.xml',
'views/franchise_management_menus.xml',
],
'assets': {
'web.assets_frontend': [
'franchise_management/static/src/css/website.css',
'franchise_management/static/src/js/portalSignatureForm.js',
'franchise_management/static/src/js/portalSignature.js',
],
},
'images': ['static/description/banner.png'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': True,
}

25
franchise_management/controllers/__init__.py

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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 franchise_customer_portal
from . import franchise_portal
from . import web_franchise_dealer
from . import web_franchise_sale

43
franchise_management/controllers/franchise_customer_portal.py

@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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/>.
#
#############################################################################
"""Franchise customer portal controller"""
from odoo import http
from odoo.http import request
from odoo.addons.portal.controllers.portal import CustomerPortal
class FranchiseCustomerPortal(CustomerPortal):
"""Franchise Customer portal."""
def _prepare_home_portal_values(self, counters):
"""Preparing franchise count to view in portal."""
values = super(FranchiseCustomerPortal,
self)._prepare_home_portal_values(counters)
if request.env.user.has_group(
'franchise_management.dealer_manager_access'):
franchise_count = http.request.env[
'franchise.dealer'].search_count(
[('state', 'in', ('e_contract', 'f_signed', 'g_declined'))])
else:
franchise_count = 0
values.update({'franchise_count': franchise_count})
return values

108
franchise_management/controllers/franchise_portal.py

@ -0,0 +1,108 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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/>.
#
#############################################################################
"""Franchise portal controller"""
import binascii
from odoo import fields, http, _
from odoo.http import request
from odoo.exceptions import AccessError, MissingError
from odoo.addons.portal.controllers.mail import _message_post_helper
class FranchisePortal(http.Controller):
"""Franchise Portal template."""
@http.route(['/my/franchise'], type='http', auth="public",
website=True)
def display_franchise_registration(self):
"""function to display franchise registrations from backend."""
franchise_registration = request.env['franchise.dealer'].sudo().search(
[('state', 'in', ('e_contract', 'f_signed', 'g_declined'))])
dealer_dict = {'franchise_registration': franchise_registration,
'page_name': 'franchise_registrations'}
return request.render("franchise_management.portal_my_franchise",
dealer_dict)
@http.route(['/my/franchise/<int:franchise_id>'], type='http', auth="public",
website=True)
def portal_sign_page(self, franchise_id):
"""Franchise Portal Sign Page."""
franchise = request.env['franchise.dealer'].sudo().browse(franchise_id)
return request.render("franchise_management.franchise_portal",
{'franchise': franchise,
'page_name': 'registration_details'})
@http.route(['/my/franchise/<int:dealer_id>/decline'], type='http', auth="public",
methods=['POST'], website=True, csrf=True)
def portal_franchise_decline(self, dealer_id):
"""Declining the contract sign"""
order_sudo = request.env['franchise.dealer'].sudo().browse(dealer_id)
order_sudo.contract_declined()
return request.redirect(f'my/franchise/{dealer_id}')
@http.route(['/my/franchise/<int:dealer_id>/accept'], type='json', auth="public",
website=True, csrf=True)
def portal_franchise_accept(self, dealer_id, name=None, signature=None,
access_token=None):
"""Accepting the contract and signing it."""
access_token = access_token or request.httprequest.args.get(
'access_token')
try:
order_sudo = request.env['franchise.dealer'].sudo().browse(dealer_id)
except (AccessError, MissingError):
return {'error': _('Invalid order.')}
try:
order_sudo.write({
'signed_by': name,
'signed_on': fields.Datetime.now(),
'signature': signature,
})
request.env.cr.commit()
order_sudo.contract_signed()
list_login = request.env['res.users'].sudo().search([]).mapped(
'login')
# Check if the dealer's mail is not in the list_login
if order_sudo.dealer_mail not in list_login:
order_sudo.create_portal_user()
order_sudo._send_order_confirmation_mail()
order_sudo.dealer_portal_user.is_dealer_user = True
if order_sudo.dealer_mail in list_login:
franchise_users_id = request.env['res.users'].sudo().search([
('login', '=', order_sudo.dealer_mail)])
order_sudo.dealer_portal_user = franchise_users_id
except (TypeError, binascii.Error) as e:
return {'error': _('Invalid signature data.')}
signed_pdf = request.env.ref('franchise_management.franchise_contract_report_action').sudo()._render_qweb_pdf(
[order_sudo.id])[0]
_message_post_helper(
'franchise.dealer',
order_sudo.id,
_('Order signed by %s', name),
attachments=[('%s.signed_pdf' % order_sudo.dealer_name,
signed_pdf)],
token=access_token,
)
query_string = "&message=sign_ok"
return {
'force_refresh': True,
'redirect_url': order_sudo.get_portal_url(
query_string=query_string),
}

76
franchise_management/controllers/web_franchise_dealer.py

@ -0,0 +1,76 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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/>.
#
#############################################################################
"""Franchise dealer controller"""
from odoo import http
from odoo.http import request
class FranchiseDealer(http.Controller):
"""Franchise dealer controller."""
@http.route(['/franchise_menu'], type='http', auth="public", website=True)
def dealer_create(self):
"""Creating a dealer form in website."""
state_rec = request.env['res.country.state'].sudo().search([])
country_rec = request.env['res.country'].sudo().search([])
franchise_agreement_rec = request.env[
'franchise.agreement'].sudo().search([])
return http.request.render("franchise_management.tmpl_dealer_request",
{
'state_rec': state_rec,
'country_rec': country_rec,
'franchise_agreement_rec':
franchise_agreement_rec,
})
@http.route(['/franchise_menu/form/submit'], type='http', auth="public",
website=True)
def franchise_form_submit(self, **post):
"""Website dealer form submit function."""
order = request.env['franchise.dealer'].sudo().create({
'dealer_name': post.get('franchisee_name'),
'dealer_mobile': post.get('dealer_mobile') or '',
'dealer_phone': post.get('dealer_phone') or '',
'dealer_mail': post.get('franchisee_email') or '',
'dealer_website': post.get('dealer_website') or '',
'street': post.get('street') or '',
'city': post.get('city') or '',
'country_id': post.get('country_id'),
'zip': post.get('zip') or '',
'state_id': post.get('state_id'),
'dealer_occupation': post.get('dealer_occupation') or '',
'dealer_qualification': post.get('dealer_qualification') or '',
'contract_type_id': post.get('contract_type_id'),
'monthly_target_amount': post.get('monthly_target_amount'),
'business_city': post.get('business_city'),
'business_country': post.get('business_country'),
'experience': post.get('experience') or '',
'site_area': post.get('site_area') or '',
'site_type': post.get('site_type') or '',
'site_location': post.get('site_location'),
'investment_from': post.get('investment_from'),
'investment_to': post.get('investment_to'),
'advertisement': post.get('advertisement')
})
vals = {'order': order}
return request.render("franchise_management.website_success_page",
vals)

71
franchise_management/controllers/web_franchise_sale.py

@ -0,0 +1,71 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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 http
from odoo.http import request
class DealerMonthlySaleReport(http.Controller):
"""Franchise dealer monthly feedback about the product sale."""
@http.route(['/feedback_report_menu'], type='http', auth="public",
website=True)
def dealer_feedback_form(self, **post):
"""Creating a dealer feedback form in website."""
franchise_dealer_rec = request.env['res.users'].sudo().search(
[('is_dealer_user', '=', True)])
franchise_agreement_rec = request.env[
'franchise.agreement'].sudo().search([])
values = {
'franchise_agreement_rec': franchise_agreement_rec,
'franchise_dealer_rec': franchise_dealer_rec,
}
if post.get('id'):
values['current_franchise'] = request.env[
'franchise.dealer'].sudo().browse(
int(post.get('id')))
user = request.env['res.users'].sudo().search(
[('id', '=', int(request.env.user.id))])
if user.is_dealer_user:
values['user_data'] = request.env[
'franchise.dealer'].sudo().search(
[('dealer_portal_user.id', '=', request.env.user.id)])
return http.request.render(
"franchise_management.tmpl_dealer_feedback", values)
@http.route(['/dealer_feedback_menu/form/submit'], type='http',
auth="public", website=True)
def franchise_form_submit(self, **post):
"""Website dealer form submit function."""
order = request.env['dealer.sale'].sudo().create({
'dealer_id': post.get('dealer_id'),
'franchise_reference': post.get('franchise_reference') or '',
'dealer_agreement_id': post.get('dealer_agreement_id'),
'sale_quantity': post.get('sale_quantity'),
'scrap_quantity': post.get('scrap_quantity'),
'total_sale_amount': post.get('total_sale_amount'),
'discount_percentage': post.get('discount_percentage'),
'monthly_target_amount': post.get('monthly_target_amount'),
'monthly_target_gained': post.get('monthly_target_gained'),
})
vals = {'order': order}
return request.render("franchise_management.feedback_success_page",
vals)

56
franchise_management/data/contract_email_data.xml

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data noupdate="1">
<!--Dealership contract email data-->
<record id="contract_email_template" model="mail.template">
<field name="name">DEALERSHIP CONTRACT</field>
<field name="model_id" ref="franchise_management.model_franchise_dealer"/>
<field name="email_from">{{object.company_id.email}}</field>
<field name="email_to"/>
<field name="lang">{{ ctx.get('default_lang') }}</field>
<field name="subject">Dealership Contract</field>
<field name="body_html" type="html">
<p>
Hi,<br/>
Congratulations<br/>
You are approved for the Dealership with us.<br/>
Make sure you submit your request form completely, and<br/>
Please read carefully the pdf contract attached here and <br/>
if you are agree with our terms and conditions <br/>
Please sign the contract below for the further procedures.<br/>
You can sign digitally through the button link given here.
<br/><br/>
</p>
<div><br/>
<a style="background-color:#875A7B;
padding:8px 20px 8px 20px;
text-decoration:none; color:#fff; border-style:solid;
display:inline-block;
border-radius:5px; font-weight:bold; font-style:normal;
line-height:26px; width:auto; text-align:center"
t-attf-href="{{object.url}}">Sign and confirm</a>
</div>
</field>
</record>
<!--Dealer Notification email template-->
<record id="portal_user_email_template" model="mail.template">
<field name="name">Login Details</field>
<field name="model_id" ref="franchise_management.model_franchise_dealer"/>
<field name="email_from">{{object.company_id.email}}</field>
<field name="email_to"/>
<field name="lang">{{ ctx.get('default_lang') }}</field>
<field name="subject">Franchise Login Details</field>
<field name="body_html" type="html">
<p>
Hi,
Congratulations<br/>
You are successfully signed our dealership contract.<br/>
And now you can log in to our website using the email and password.<br/>
email : user email address given in the franchise registration.<br/>
password : franchise00129
<br/><br/>
</p>
</field>
</record>
</data>
</odoo>

17
franchise_management/data/contract_renewal_cron_data.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data noupdate="1">
<!--Contract Renewal Action-->
<record id="contract_renewal_scheduler_action" model="ir.cron">
<field name="name">Franchise Contract Renewal</field>
<field name="model_id" ref="model_franchise_dealer"/>
<field name="state">code</field>
<field name="code">model.action_send_contract_renewal()</field>
<field name="user_id" ref="base.user_root"/>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
</data>
</odoo>

33
franchise_management/data/contract_renewal_email_data.xml

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--Contract renewal email template data-->
<data noupdate="1">
<record id="contract_renewal_email_template" model="mail.template">
<field name="name">CONTRACT RENEWAL</field>
<field name="model_id"
ref="franchise_management.model_franchise_dealer"/>
<field name="email_from">{{object.company_id.email}}</field>
<field name="email_to"/>
<field name="lang">{{ ctx.get('default_lang') }}</field>
<field name="subject">Contract Renewal</field>
<field name="body_html" type="html">
<p>
Hi,<br/>
Your Franchise dealership contract has expired,<br/>
Please renew your dealership contract in order to continue
the services.<br/><br/>
Thanks and Regards<br/>
</p>
<div><br/>
<a style="background-color:#875A7B;
padding:8px 20px 8px 20px;
text-decoration:none; color:#fff; border-style:solid;
display:inline-block;
border-radius:5px; font-weight:bold; font-style:normal;
line-height:26px; width:auto; text-align:center"
t-attf-href="{{object.url}}">Sign and confirm</a>
</div>
</field>
</record>
</data>
</odoo>

34
franchise_management/data/feedback_email_data.xml

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--Franchise sales feedback email template data-->
<data noupdate="1">
<record id="feedback_email_template" model="mail.template">
<field name="name">SALES FEEDBACK</field>
<field name="model_id"
ref="franchise_management.model_franchise_dealer"/>
<field name="email_from">{{object.company_id.email}}</field>
<field name="email_to"/>
<field name="lang">{{ ctx.get('default_lang') }}</field>
<field name="subject">Monthly Sales Feedback</field>
<field name="body_html" type="html">
<p>
Hi,<br/>
Please submit monthly feedback report about the sales of the
product, which you owned through the dealership. <br/>
Please mention your monthly business target, achieved
target, and the total sales done .<br/>
</p>
<div><br/>
<a style="background-color:#875A7B;
padding:8px 20px 8px 20px;
text-decoration:none; color:#fff; border-style:solid;
display:inline-block;
border-radius:5px; font-weight:bold; font-style:normal;
line-height:26px; width:auto; text-align:center"
t-attf-href="{{object.feedback_url}}">Submit Feedback</a>
<br/>
</div>
</field>
</record>
</data>
</odoo>

88
franchise_management/data/franchise_contract_data.xml

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Franchise contract -->
<record id="yearly_franchise_contract" model="franchise.agreement">
<field name="agreement_type">yearly</field>
<field name="agreement_body">
<![CDATA[
<h1>Yearly Franchise Agreement</h1>
<p>This Franchise Agreement ("Agreement") is made and entered into as of <strong>January 1, 2024</strong>, by and between <strong>Franchise Corp</strong>, a company organized and existing under the laws of <strong>State</strong> with its principal office located at <strong>123 Franchise Ave, City, State</strong> ("Franchisor"), and <strong>John Doe</strong>, located at <strong>456 Partner St, City, State</strong> ("Franchisee").</p>
<h2>1. Grant of Franchise</h2>
<p>The Franchisor hereby grants to the Franchisee the right, and the Franchisee undertakes the obligation, to operate a franchise under the Franchisor’s brand and system, using the Franchisor's trademarks, trade names, service marks, logos, and commercial symbols (the "Marks").</p>
<h2>2. Term</h2>
<p>This Agreement shall commence on the effective date and shall continue for a term of one year, subject to renewal as provided herein.</p>
<h2>3. Fees</h2>
<p>The Franchisee shall pay to the Franchisor an initial franchise fee of <strong>$10,000</strong> and an ongoing royalty fee of <strong>5%</strong> of the Franchisee's gross revenue.</p>
<h2>4. Duties of Franchisee</h2>
<ul>
<li>Operate the franchise in compliance with the Franchisor’s standards and specifications.</li>
<li>Maintain the quality and image of the Franchisor’s brand.</li>
<li>Participate in all required training programs.</li>
</ul>
<h2>5. Confidentiality</h2>
<p>The Franchisee agrees to maintain the confidentiality of all proprietary information provided by the Franchisor.</p>
<h2>6. Termination</h2>
<p>This Agreement may be terminated by either party upon thirty (30) days' written notice to the other party in the event of a breach of any provision of this Agreement.</p>
<h2>7. Governing Law</h2>
<p>This Agreement shall be governed by and construed in accordance with the laws of the State of [State].</p>
<h2>8. Entire Agreement</h2>
<p>This Agreement constitutes the entire agreement between the parties and supersedes all prior agreements and understandings, whether written or oral, relating to the subject matter hereof.</p>
<p>IN WITNESS WHEREOF, the parties hereto have executed this Agreement as of the day and year first above written.</p>
<p>____________________________<br>Franchisor Representative</p>
<p>____________________________<br>John Doe, Franchisee</p>
]]>
</field>
</record>
<record id="monthly_franchise_contract" model="franchise.agreement">
<field name="agreement_type">monthly</field>
<field name="agreement_body">
<![CDATA[
<h1>Monthly Franchise Agreement</h1>
<p>This Franchise Agreement ("Agreement") is made and entered into as of <strong>May 1, 2024</strong>, by and between <strong>Franchise Corp</strong>, a company organized and existing under the laws of <strong>State</strong> with its principal office located at <strong>123 Franchise Ave, City, State</strong> ("Franchisor"), and <strong>John Doe</strong>, located at <strong>456 Partner St, City, State</strong> ("Franchisee").</p>
<h2>1. Grant of Franchise</h2>
<p>The Franchisor hereby grants to the Franchisee the right, and the Franchisee undertakes the obligation, to operate a franchise under the Franchisor’s brand and system, using the Franchisor's trademarks, trade names, service marks, logos, and commercial symbols (the "Marks").</p>
<h2>2. Term</h2>
<p>This Agreement shall commence on the effective date and shall continue for a term of one month, subject to renewal as provided herein.</p>
<h2>3. Fees</h2>
<p>The Franchisee shall pay to the Franchisor an initial franchise fee of <strong>$1,000</strong> and an ongoing royalty fee of <strong>5%</strong> of the Franchisee's gross revenue.</p>
<h2>4. Duties of Franchisee</h2>
<ul>
<li>Operate the franchise in compliance with the Franchisor’s standards and specifications.</li>
<li>Maintain the quality and image of the Franchisor’s brand.</li>
<li>Participate in all required training programs.</li>
</ul>
<h2>5. Confidentiality</h2>
<p>The Franchisee agrees to maintain the confidentiality of all proprietary information provided by the Franchisor.</p>
<h2>6. Termination</h2>
<p>This Agreement may be terminated by either party upon seven (7) days' written notice to the other party in the event of a breach of any provision of this Agreement.</p>
<h2>7. Governing Law</h2>
<p>This Agreement shall be governed by and construed in accordance with the laws of the State of [State].</p>
<h2>8. Entire Agreement</h2>
<p>This Agreement constitutes the entire agreement between the parties and supersedes all prior agreements and understandings, whether written or oral, relating to the subject matter hereof.</p>
<p>IN WITNESS WHEREOF, the parties hereto have executed this Agreement as of the day and year first above written.</p>
<p>____________________________<br>Franchisor Representative</p>
<p>____________________________<br>John Doe, Franchisee</p>
]]>
</field>
</record>
</odoo>

21
franchise_management/data/ir_sequence_data.xml

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">
<!--Sequence number for franchise dealer-->
<record id="seq_dealer" model="ir.sequence">
<field name="name">Franchise Dealer</field>
<field name="code">franchise.dealer</field>
<field name="prefix">DL</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
<field name="number_increment">1</field>
</record>
<!--Sequence number for franchise feedback-->
<record id="sequence_feedback" model="ir.sequence">
<field name="name">Franchise Feedback</field>
<field name="code">dealer.sale</field>
<field name="prefix">FS</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
<field name="number_increment">1</field>
</record>
</odoo>

17
franchise_management/data/monthly_feedback_cron_data.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--Monthly sales feedback scheduled action-->
<data noupdate="1">
<record id="monthly_sales_feedback_scheduler_recurring_action" model="ir.cron">
<field name="name">Monthly Franchise Sales Feedback</field>
<field name="model_id" ref="model_franchise_dealer"/>
<field name="state">code</field>
<field name="code">model.action_send_feedback()</field>
<field name="user_id" ref="base.user_root"/>
<field name="interval_number">1</field>
<field name="interval_type">months</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
</record>
</data>
</odoo>

6
franchise_management/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <franchise_management>
#### 11.09.2024
#### Version 15.0.1.0.0
#### ADD
- Initial commit for Franchise Management

26
franchise_management/models/__init__.py

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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 business_experience
from . import franchise_agreement
from . import franchise_dealer
from . import franchise_sales
from . import res_users

37
franchise_management/models/business_experience.py

@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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/>.
#
#############################################################################
"""Business Experience model"""
from odoo import fields, models
class BusinessExperience(models.Model):
"""Business experience inverse model."""
_name = 'business.experience'
_description = 'Business Experience'
experience_name = fields.Char(string='Experience',
help='Business Experience')
from_date = fields.Date(string='From Date', help='Experience start Date')
to_date = fields.Date(string='To Date', help='Experience To Date')
experience_id = fields.Many2one('franchise.dealer',
help='Inverse field for Business'
' Experience model')

40
franchise_management/models/franchise_agreement.py

@ -0,0 +1,40 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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/>.
#
#############################################################################
"""Franchise Dealer Agreement Model"""
from odoo import fields, models
class FranchiseAgreement(models.Model):
"""Franchise Agreement Model."""
_name = "franchise.agreement"
_description = "Franchise Agreement Type."
_inherit = ['mail.thread', 'mail.activity.mixin']
_rec_name = "agreement_type"
agreement_type = fields.Selection(
[('monthly', 'Monthly'), ('yearly', 'Yearly')],
string='Agreement Type',
help='Franchise Agreement type')
agreement_body = fields.Html(string='Agreement Body', render_engine='qweb',
translate=True,
help='Franchise Agreement contents',
prefetch=True, sanitize=False)

334
franchise_management/models/franchise_dealer.py

@ -0,0 +1,334 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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/>.
#
#############################################################################
"""Franchise Dealer Model"""
import base64
from datetime import datetime, timedelta
from odoo import api, fields, models, SUPERUSER_ID, _
from odoo.exceptions import UserError
class FranchiseDealer(models.Model):
"""Franchise Dealer Model."""
_name = "franchise.dealer"
_inherit = ['portal.mixin', 'mail.thread', 'mail.activity.mixin',
'utm.mixin']
_description = "Dealers"
_rec_name = "dealer_name"
serial_no = fields.Char(string="Sl No", readonly=True, copy=False,
default='New', help='Record serial no')
dealer_name = fields.Char(string='Franchisee Name', help='Franchisee Name')
dealer_user_id = fields.Many2one('res.users', string="user",
help='User')
street = fields.Char(string="Street", help='Street1 Name')
street2 = fields.Char(string="Street2", help='Street2 Name')
zip = fields.Char(change_default=True, string='Zip code',
help='Franchisee Zip code')
city = fields.Char(string='City', help='City Name')
state_id = fields.Many2one("res.country.state", string='State',
ondelete='restrict', help='Franchisee state',
domain="[('country_id', '=?', country_id)]")
country_id = fields.Many2one('res.country', string='Country',
help='Franchisee Country',
ondelete='restrict')
country_code = fields.Char(related='country_id.code',
string="Country Code",
help='Franchisee Country code')
dealer_qualification = fields.Char(string='Qualification',
help='Franchise Qualification')
dealer_occupation = fields.Char(string='Current Occupation',
help='Franchisee Occupation')
dealer_phone = fields.Char(string='Phone', help='Franchise Phone')
dealer_mobile = fields.Char(string='Mobile', help='Mobile number')
dealer_mail = fields.Char(string='Email', required=True,
help='Franchise email')
dealer_website = fields.Char(string='Website', help='Franchisee Website')
advertisement = fields.Selection(
selection=[('advertisement', 'Advertisement'),
('area_sales_manager', 'Area Sales Manager'),
('regional_manager', 'Regional Manager'),
('others', 'Others')],
string='Advertisement',
help='Dealer Vacancy Known Through',
default='advertisement')
business_city = fields.Char(string='City Interested in',
help='City Interested to Franchise')
business_country = fields.Many2one('res.country',
string='Country Interested in',
help='Country Interested to Franchise',
ondelete='restrict')
experience = fields.Text(string='Experience in this Business',
help='Experience in this Business')
earnings = fields.Char(string='Last year Earnings',
help='Last year earnings in the business')
business_experience_ids = fields.One2many('business.experience',
'experience_id',
string='Experience',
help='Business Experience')
site_location = fields.Char(string='Site Location',
help='Business Site location')
site_type = fields.Selection(
selection=[('owned', 'Owned'), ('rented', 'Rented'),
('leased', 'Leased'), ('others', 'Others')],
string='Site Type', default='owned', help='Business Site Type')
site_area = fields.Float(string='Total Area(in sq/ft)',
help='Total site area in sq ft')
investment_from = fields.Float(string='From', help='Investment From')
investment_to = fields.Float(string='To', help='Investment To')
company_id = fields.Many2one('res.company', string='Company',
help='Company Name',
change_default=True,
default=lambda self: self.env.company)
user_id = fields.Many2one('res.users', string='Responsible',
help='Responsible User',
default=lambda self: self.env.user)
url = fields.Char(string='url', help='url to website')
feedback_url = fields.Char(string='Feedback url',
help='Feedback Url to feedback form')
signature = fields.Image(string="Signature", copy=False, attachment=True,
help='Franchise Dealer Signature',
max_width=1024, max_height=1024)
signed_by = fields.Char(string="Signed By", copy=False,
help='Franchise Contract Signed By')
signed_on = fields.Date(string="Signed On", copy=False,
help='Franchise Contract Signed On')
contract_renewal_date = fields.Date(string="Renewal Date", store=True,
help='Contract Renewal Date',
compute='_compute_renewal_date')
priority = fields.Selection(
selection=[('0', 'Low'), ('1', 'Medium'),
('2', 'High'), ('3', 'Very High')],
default='0', help='Prioritise the dealer',
index=True, string="Priority", tracking=True)
dealer_portal_user = fields.Many2one('res.users',
string='Portal User Name',
help='Dealer Portal User Name')
monthly_target_amount = fields.Float(string='Monthly Target Amount',
required=True,
help='Franchise Monthly Target Amount')
state = fields.Selection(
selection=[('a_draft', 'Draft'), ('b_to_approve', 'To Approve'),
('c_approve', 'Approved'), ('d_cancel', 'Rejected'),
('e_contract', 'Contract Proposal'),
('g_declined', 'Declined'),
('f_signed', 'Contract Signed'),
('h_feedback', 'Feedback Sent')
],
string='Status', help='Status', required=True, readonly=True,
copy=False, tracking=True, default='a_draft')
# contract
contract_type_id = fields.Many2one('franchise.agreement',
string='Agreement Type',
required=True,
help='Franchise Agreement Type')
body_html = fields.Html(string='Body', render_engine='qweb',
translate=True, prefetch=True, sanitize=False,
compute="_compute_body_html",
help='Franchise Agreement Body',
inverse="_inverse_contract", store=True)
@api.constrains('monthly_target_amount')
def _monthly_target_amount(self):
""" Constraint to validate the number of featured blogs.
Raises: ValidationError: If more than three blogs are added."""
if self.monthly_target_amount == 0.00:
raise UserError(_('Please enter the monthly target amount.'))
@api.depends('contract_type_id')
def _compute_body_html(self):
"""Contract type computation function."""
for rec in self:
rec.body_html = rec.contract_type_id.agreement_body
def _inverse_contract(self):
"""Inverse function to make the compute field editable"""
self.body_html = self.body_html
def _compute_renewal_date(self):
"""Franchise dealer contract renewal date computation function."""
for record in self:
record.contract_renewal_date = 0
if record.signed_on:
if record.contract_type_id.agreement_type == 'yearly':
record.contract_renewal_date = (record.signed_on +
timedelta(days=365))
if record.contract_type_id.agreement_type == 'monthly':
record.contract_renewal_date = (record.signed_on +
timedelta(days=30))
else:
record.contract_renewal_date = 0
# EXTENDS portal portal.mixin
def _compute_access_url(self):
"""Compute url in portal mixin."""
super()._compute_access_url()
for move in self:
move.access_url = '/my/franchise/%s' % (move.id)
@api.model_create_multi
def create(self, vals_list):
"""Franchise dealer model sequence create method."""
for vals in vals_list:
if vals.get('serial_no', _("New")) == _("New"):
vals['serial_no'] = self.env['ir.sequence'].next_by_code(
'franchise.dealer') or 'New'
if vals.get('contract_type_id', False):
vals['body_html'] = self.env['franchise.agreement'].browse(
int(vals['contract_type_id'])).agreement_body
result = super(FranchiseDealer, self).create(vals)
return result
def action_confirm(self):
"""Function of confirm button."""
self.write({'state': "b_to_approve"})
def action_approve(self):
"""Function of approve button."""
self.write({'state': "c_approve"})
def action_cancel(self):
"""Function of cancel button."""
self.write({'state': "d_cancel"})
def contract_signed(self):
"""Function of contract sign button."""
self.write({'state': "f_signed"})
def contract_declined(self):
"""Function of reject_sign button in website portal."""
self.write({'state': "g_declined"})
def action_send_contract(self):
"""Contract send on button function."""
base_url = str(self.get_base_url()) + str("/my/franchise/") + str(
self.id)
self.url = base_url
self.write({'state': "e_contract"})
template = self.env.ref('franchise_management.contract_email_template')
self.argument_function(template)
return True
def action_send_contract_renewal(self):
"""Contract renewal schedule action."""
today_renewals = self.env['franchise.dealer'].search(
[('contract_renewal_date', '=', datetime.today().date())])
if today_renewals:
for i in today_renewals:
template = self.env.ref(
'franchise_management.contract_renewal_email_template')
self.argument_function(template)
return True
def argument_function(self, template):
"""Contract send and renewal argument function."""
current_dealer_order = self.env['franchise.dealer'].browse(self.id)
email_values = {'email_to': current_dealer_order.dealer_mail, }
form_data = {
'data': current_dealer_order,
}
report_template_id = self.env.ref(
'franchise_management.franchise_contract_report_action'
)._render_qweb_pdf(self.id, data=form_data)
data_record = base64.b64encode(report_template_id[0])
ir_values = {
'name': "Dealership Contract",
'type': 'binary',
'datas': data_record,
'store_fname': data_record,
'mimetype': 'application/x-pdf',
}
data_id = self.env['ir.attachment'].create(ir_values)
template.attachment_ids = [(6, 0, [data_id.id])]
template.send_mail(self.id, email_values=email_values, force_send=True)
template.attachment_ids = [(3, data_id.id)]
def _get_confirmation_template(self):
""" Get the mail template sent on SO confirmation (or for confirmed
Sales).:return: `mail.template` record or None if default template
wasn't found"""
return self.env.ref('franchise_management.portal_user_email_template',
raise_if_not_found=False)
def _send_order_confirmation_mail(self):
"""Dealer request confirmation mail after signing the contract."""
if not self:
return
if self.env.su:
# sending mail in sudo was meant for it being sent from superuser
self = self.with_user(SUPERUSER_ID)
for record in self:
mail_template = record._get_confirmation_template()
if not mail_template:
continue
record.with_context(force_send=True).message_post_with_template(
mail_template.id,
composition_mode='comment',
)
def create_portal_user(self):
"""After contract signed,the dealer created as portal user."""
user = self.env['res.users'].create({
'name': self.dealer_name,
'login': self.dealer_mail,
'email': self.dealer_mail,
'phone': self.dealer_phone,
'website': self.dealer_website,
'password': 'franchise00129',
'street': self.street,
'zip': self.zip,
'groups_id': [(4, self.env.ref('base.group_portal').id)]
})
self.dealer_portal_user = user.id
return user
def action_preview_dealer_order(self):
"""Dealer portal preview from backend."""
return {
'type': 'ir.actions.act_url',
'target': 'self',
'url': self.url,
}
def action_dealer_feedback(self):
"""Dealer sale feedback smart button to view feedback report
of the product"""
feedback_ids = self.env['dealer.sale'].search([
('dealer_id', '=', self.id)]).ids
return {
'type': 'ir.actions.act_window',
'name': 'Dealership feedback',
'view_mode': 'tree,form',
'res_model': 'dealer.sale',
'domain': [('id', 'in', feedback_ids)],
'context': "{'create': False}"
}
def action_send_feedback(self):
"""Method to send franchise feedback"""
base_url = str(self.get_base_url()) + str(
"/feedback_report_menu?id=") + str(self.id)
self.feedback_url = base_url
current_dealer_order = self.env['franchise.dealer'].browse(self.id)
email_values = {'email_to': current_dealer_order.dealer_mail, }
template = self.env.ref('franchise_management.feedback_email_template')
template.send_mail(self.id, email_values=email_values, force_send=True)
return True

80
franchise_management/models/franchise_sales.py

@ -0,0 +1,80 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gayathri V(<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/>.
#
#############################################################################
"""Franchise feedback form"""
from odoo import api, fields, models, _
class DealerSale(models.Model):
"""Franchise Dealer Monthly Sales Feedback."""
_name = "dealer.sale"
_inherit = ['portal.mixin', 'mail.thread', 'mail.activity.mixin',
'utm.mixin']
_description = "Dealer Sales"
_rec_name = "dealer_id"
serial_no = fields.Char(string="Sl No", help='Serial no', readonly=True,
copy=False, default='New')
dealer_id = fields.Many2one('franchise.dealer',
string="Franchise Dealer",
help='Franchise dealer name')
franchise_reference = fields.Char(string="Franchise Reference",
readonly=True,
help='Franchise Reference Number')
dealer_mail = fields.Char(string='mail', help='Franchise Dealer email')
dealer_agreement_id = fields.Many2one('franchise.agreement',
string="Franchise agreement type",
help='Franchise Agreement Type')
dealership_signed_on = fields.Date(string='Dealership Signed on',
readonly=True,
help='Dealership Contract Signed on')
sale_quantity = fields.Integer(string="Sale Quantity",
help='Total Sale Quantity')
scrap_quantity = fields.Integer(string="Scrap Quantity",
help='Total Scrap Quantity')
total_sale_amount = fields.Float(string="Sale Amount",
help='Total Sale Amount')
discount_percentage = fields.Float(string="Discount Given in(%)",
help='Discount Given in(%)')
monthly_target_amount = fields.Float(string="Monthly Target",
help='Monthly Target Amount')
monthly_target_gained = fields.Float(string="Monthly Target Gained in (%)",
help='Monthly Target Gained in (%)')
state = fields.Selection(selection=[('a_to_verify', 'To Verify'),
('b_verified', 'Verified')],
string='Status', required=True,
help='Status of the Franchise Registration',
readonly=True, copy=False,
tracking=True, default='a_to_verify')
def action_verify_sale(self):
"""Method to verify the sales feedback"""
self.write({'state': "b_verified"})
@api.model_create_multi
def create(self, vals_list):
"""Method to create Franchise dealer sales record sequences."""
for vals in vals_list:
if vals.get('serial_no', _("New")) == _("New"):
vals['serial_no'] = self.env['ir.sequence'].next_by_code(
'dealer.sale') or 'New'
result = super(DealerSale, self).create(vals)
return result

32
franchise_management/models/res_users.py

@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Gaythri V(<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/>.
#
#############################################################################
"""Res Users Inherited model"""
from odoo import fields, models
class ResUsers(models.Model):
"""Inherited the res_users model to add a boolean field to ensure
a dealer after contract signed."""
_inherit = 'res.users'
is_dealer_user = fields.Boolean(string='Is Dealer',
help='Dealer User identification field')

94
franchise_management/report/agreement_based_templates.xml

@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--Agreement based report template-->
<template id="agreement_based_report_pdf">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<div class="text-center">
<h1 style="font-size:35px">
<b>FRANCHISE LIST</b>
</h1>
</div>
<div class="text-center">
<t t-if="form_data.get('agreement_id')">
<h2 style="font-size:25px">
<b>
<t t-esc="form_data['agreement_id'][1]"/>
</b>
</h2>
</t>
</div>
<br/>
<br/>
<t t-if="form_data.get('from_date')">
From Date :
<t t-esc="form_data['from_date']"/>
</t>
<br/>
<br/>
<t t-if="form_data.get('to_date')">
To Date :
<t t-esc="form_data['to_date']"/>
</t>
<br/>
<br/>
<div class="row">
<table class="table">
<thead>
<tr>
<th width="10px">
<strong>Sl.no</strong>
</th>
<th width="10px">
<strong>Reference</strong>
</th>
<th width="10px">
<strong>Franchises Name</strong>
</th>
<th width="10px">
<strong>Signed On</strong>
</th>
<th width="10px">
<strong>City Interested</strong>
</th>
<th width="10px">
<strong>Investment From</strong>
</th>
<th width="10px">
<strong>Investment To</strong>
</th>
</tr>
</thead>
<t t-foreach="fetch_agreement_details" t-as="line">
<tr>
<td>
<span t-esc="line_index+1"/>
</td>
<td>
<span t-esc="line['serial_no']"/>
</td>
<td>
<span t-esc="line['name']"/>
</td>
<td>
<span t-esc="line['signed_on']"/>
</td>
<td>
<span t-esc="line['business_city']"/>
</td>
<td>
<span t-esc="line['investment_from']"/>
</td>
<td>
<span t-esc="line['investment_to']"/>
</td>
</tr>
</t>
</table>
</div>
</div>
</t>
</t>
</template>
</odoo>

73
franchise_management/report/dealer_based_templates.xml

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--Dealer based report pdf template-->
<template id="dealer_based_report_pdf">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<div class="text-center">
<h1 style="font-size:35px">
<b>FRANCHISE LIST</b>
</h1>
</div>
<div class="text-center">
<t t-if="form_data.get('dealer_id')">
<h2 style="font-size:25px">
<b><t t-esc="form_data['dealer_id'][1]"/></b>
</h2>
</t>
</div><br/><br/>
<t t-if="form_data.get('from_date')">
From Date :
<t t-esc="form_data['from_date']"/>
</t><br/><br/>
<t t-if="form_data.get('to_date')">
To Date :
<t t-esc="form_data['to_date']"/>
</t><br/><br/>
<div class="row">
<table class="table">
<thead>
<tr>
<th width="10px">
<strong>Sl.no</strong>
</th>
<th width="10px">
<strong>Reference</strong>
</th>
<th width="10px">
<strong>Signed On</strong>
</th>
<th width="10px">
<strong>Franchise Agreement</strong>
</th>
<th width="10px">
<strong>City Interested</strong>
</th>
<th width="10px">
<strong>Investment From</strong>
</th>
<th width="10px">
<strong>Investment To</strong>
</th>
</tr>
</thead>
<t t-foreach="fetch_dealer_details" t-as="line">
<tr>
<td><span t-esc="line_index+1"/></td>
<td><span t-esc="line['serial_no']"/></td>
<td><span t-esc="line['signed_on']"/></td>
<td><span t-esc="line['agreement_type']"/></td>
<td><span t-esc="line['business_city']"/></td>
<td><span t-esc="line['investment_from']"/></td>
<td><span t-esc="line['investment_to']"/></td>
</tr>
</t>
</table>
</div>
</div>
</t>
</t>
</template>
</odoo>

94
franchise_management/report/dealer_sale_based_templates.xml

@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--Sale feedback report on dealer based-->
<template id="dealer_sale_on_dealer_report_pdf">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<div class="text-center">
<h1 style="font-size:35px">
<b>Franchise Sale List</b>
</h1>
</div>
<div class="text-center">
<t t-if="form_data.get('dealer_id')">
<h2 style="font-size:25px">
<b>
<t t-esc="form_data['dealer_id'][1]"/>
</b>
</h2>
</t>
</div>
<br/>
<br/>
<t t-if="form_data.get('from_date')">
From Date :
<t t-esc="form_data['from_date']"/>
</t>
<br/>
<br/>
<t t-if="form_data.get('to_date')">
To Date :
<t t-esc="form_data['to_date']"/>
</t>
<br/>
<br/>
<div class="row">
<table class="table">
<thead>
<tr>
<th width="10px">
<strong>Sl.no</strong>
</th>
<th width="10px">
<strong>Agreement Type</strong>
</th>
<th width="10px">
<strong>Signed on</strong>
</th>
<th width="10px">
<strong>Monthly Target</strong>
</th>
<th width="10px">
<strong>Total Sale Amount</strong>
</th>
<th width="10px">
<strong>Sale qty</strong>
</th>
<th width="10px">
<strong>Target Gained</strong>
</th>
</tr>
</thead>
<t t-foreach="fetch_dealer_details" t-as="line">
<tr>
<td>
<span t-esc="line_index+1"/>
</td>
<td>
<span t-esc="line['agreement_type']"/>
</td>
<td>
<span t-esc="line['dealership_signed_on']"/>
</td>
<td>
<span t-esc="line['monthly_target_amount']"/>
</td>
<td>
<span t-esc="line['total_sale_amount']"/>
</td>
<td>
<span t-esc="line['sale_quantity']"/>
</td>
<td>
<span t-esc="line['monthly_target_gained']"/>
</td>
</tr>
</t>
</table>
</div>
</div>
</t>
</t>
</template>
</odoo>

95
franchise_management/report/dealer_sale_on_agreement_templates.xml

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--Dealer sale report on agreement based-->
<template id="dealer_sale_on_agreement_report_pdf">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<div class="text-center">
<h1 style="font-size:35px">
<b>Franchise Sale List</b>
</h1>
</div>
<div class="text-center">
<t t-if="form_data.get('agreement_id')">
<h2 style="font-size:25px">
<b>
<t t-esc="form_data['agreement_id'][1]"/>
</b>
</h2>
</t>
</div>
<br/>
<br/>
<t t-if="form_data.get('from_date')">
From Date :
<t t-esc="form_data['from_date']"/>
</t>
<br/>
<br/>
<t t-if="form_data.get('to_date')">
To Date :
<t t-esc="form_data['to_date']"/>
</t>
<br/>
<br/>
<div class="row">
<table class="table">
<thead>
<tr>
<th width="10px">
<strong>Sl.no</strong>
</th>
<th width="10px">
<strong>Franchise Dealer</strong>
</th>
<th width="10px">
<strong>Signed on</strong>
</th>
<th width="10px">
<strong>Monthly Target</strong>
</th>
<th width="10px">
<strong>Total Sale Amount</strong>
</th>
<th width="10px">
<strong>Sale qty</strong>
</th>
<th width="10px">
<strong>Target Gained</strong>
</th>
</tr>
</thead>
<t t-foreach="fetch_agreement_details" t-as="line">
<tr>
<td>
<span t-esc="line_index+1"/>
</td>
<td>
<span t-esc="line['dealer_name']"/>
</td>
<td>
<span t-esc="line['dealership_signed_on']"/>
</td>
<td>
<span t-esc="line['monthly_target_amount']"/>
</td>
<td>
<span t-esc="line['total_sale_amount']"/>
</td>
<td>
<span t-esc="line['sale_quantity']"/>
</td>
<td>
<span t-esc="line['monthly_target_gained']"/>
</td>
</tr>
</t>
</table>
</div>
</div>
</t>
</t>
</template>
</odoo>

83
franchise_management/report/dealer_sale_report_templates.xml

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--All dealer sales report-->
<template id="all_dealer_sale_report_pdf">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<div class="text-center">
<h1 style="font-size:35px"><b>Dealer Sale List</b></h1>
</div>
<br/><br/>
<t t-if="form_data.get('from_date')">
From Date :
<t t-esc="form_data['from_date']"/>
</t>
<br/><br/>
<t t-if="form_data.get('to_date')">
To Date :
<t t-esc="form_data['to_date']"/>
</t>
<br/><br/>
<div class="row">
<table class="table">
<thead>
<tr>
<th width="10px">
<strong>Sl.no</strong>
</th>
<th width="10px">
<strong>Dealer Name</strong>
</th>
<th width="10px">
<strong>Agreement</strong>
</th>
<th width="10px">
<strong>Total Sale Qty</strong>
</th>
<th width="10px">
<strong>Total Sale Amount</strong>
</th>
<th width="10px">
<strong>Scrap Qty</strong>
</th>
<th width="10px">
<strong>Target Amount</strong>
</th>
<th width="10px">
<strong>Target Gained</strong>
</th>
</tr>
</thead>
<t t-foreach="fetch_all_details" t-as="line">
<tr>
<td>
<span t-esc="line_index+1"/>
</td>
<td>
<span t-esc="line['dealer_name']"/>
</td>
<td>
<span t-esc="line['sale_quantity']"/>
</td>
<td>
<span t-esc="line['total_sale_amount']"/>
</td>
<td>
<span t-esc="line['scrap_quantity']"/>
</td>
<td>
<span t-esc="line['monthly_target_amount']"/>
</td>
<td>
<span t-esc="line['monthly_target_gained']"/>
</td>
</tr>
</t>
</table>
</div>
</div>
</t>
</t>
</template>
</odoo>

935
franchise_management/report/franchise_dealership_contract_templates.xml

@ -0,0 +1,935 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--Franchise Dealership Report contract template-->
<template id="franchise_dealership_contract_template">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<div class="row mt64 mb32">
<div class="col-md-12">
<h2 class="text-center" style="font-size:35px">
<b>
<span>DEALERSHIP CONTRACT</span>
</b>
</h2>
<p>
<br/>
As a prospective account, you must provide
the following:
<br/>
1. Completed and signed dealer application.
<br/>
2. Copy of your Certificate of Liability
Insurance for your business.
<br/>
3. Copy of state sales tax certificate or
resale certificate.
<br/>
4. Copy of business license and/or
occupational license.
<br/>
5. A brief summary (1 paragraph) of your
company’s business products and strategy.
<br/>
6. Photos of your retail/commercial business
location: including storefront with
signage, merchandising, and the service
repair area if available.
<br/>
7. A current advertisement with your company
name.
<br/>
<br/>
Thank you for your interest in establishing
a dealer account with us.
Our friendly, knowledgeable customer support
team will guide you through the process.
Please complete the application and initial
each page; keep in mind that incomplete
paperwork can delay your application.
<br/>
We are dedicated to serving our dealers and
to ensure we protect them;
your business must operate as a
brick-and-mortar business.
Internet sales are only approved through the
dealers’ webpage and will not be
permitted to sell on eBay or any other
auction, or discount site.
To be considered a brick and mortar
business, your shop must be:
<br/>
1. Clearly identifiable as a retail shop
with dedication to the servicing your
customers.
<br/>
2. Committed to maintaining our standards.
<br/>
a) All dealer candidates must demonstrate
the ability to conduct themselves in an
ethical, professional and courteous manner
with our throughout the application
process and thereafter.
<br/>
b) Web, Mail Order, Mobile repair accounts
must have a physical retail location that
allows the business to serve its customers
during regular business hours.
<br/>
c) All our dealers are to service our
products and customers regardless of point
of purchase.
<br/>
d) Controllers, batteries, motors and
chargers will need to be sent back to us for
testing if replaced under warranty.
<br/>
e) We only pays for labor for the first 30
days at the listed rates in the dealer
agreement.
Any charges over the listed rates will need
to be authorized in advance by us. (Exhibit
C.)
<br/>
<br/>
Please submit your signed, completed
application and required additional
documents
to: sales@odoo.com or you may fax them to
954-974-6729.
<br/>
<br/>
We reserves the right to close an account if
the dealer fails to comply with any part
spelled out in this agreement, including
failure to provide true or complete
information on this application.
<br/>
Date offered via Fax or Email ___________,
20___
<br/>
<br/>
</p>
<br/>
<br/>
<h2 class="text-center" style="font-size:35px">
<b>
<span>Authorized Dealer Agreement</span>
</b>
</h2>
<p>
<br/>
This AGREEMENT, to become effective
______________, 20___ (hereafter called
"Agreement")
between us at 1201 NE 38th St suite B1 Ft.
Lauderdale, Fl 33334,
and _________________________________
(hereafter called “Dealer”) located at the
above
address for the retail sale and servicing of
our products covered by this “Agreement”.
<br/>
<b>I. Purpose of this “Agreement”</b>– To
establish “Dealer” as an authorized
reseller/service
center for us with the non-exclusive right
to sell and service a selection of our
products
(list of products authorized for resale is
attached as Exhibit A. Part 1. hereafter
called “Products”)
in the trade area served by “Dealer” and to
establish the responsibilities of the
parties.
The trade area will consist of the
authorized territory and sales channels set
forth.
<br/>
<br/>
<b>II. Terms of Sale</b>
<br/>
Product Cost – The price to “Dealer” for
“Products” shall follow our current standard
USA Domestic
Product price list as shown in Exhibit A.
Part 2. we have the right to change the
“Products” offering,
the terms and MSRP pricing at any time and
will give notice to “Dealer” of such changes
prior to the
effective date of change.
<br/>
MAP Pricing – “Dealer” must adhere to the
MAP pricing for advertisements and follow
our
MAP pricing as shown in Exhibit A.
“Dealer’s” whom do not follow MAP pricing
will have
their account terminated and be in default
of the agreement.
<br/>
Territory and Sales Channels -“Dealer” is
authorized to sell “Products” in the
following territory and channels:
<br/>
Territory:
___________________________________________________________________
<br/>
Channels:
__________________________________________________________________
<br/>
Off limit channels/customers – National
accounts are exclusive to us and off limits
to “Dealer” unless approved in
writing prior to the “Dealer” contacting of
such accounts. National accounts include USA
retailers with 25 store
locations or more throughout USA
territories, or annual sales in excess of
$100,000,000 unless approved in writing
prior to “Dealer” contacting such accounts.
No ebay advertisements are allowed unless
specifically approved in writing.
<br/>
Internet sales – Internet sales are not
exclusive to any dealer or dealer and not
considered part
of the exclusive zone or sales channels.
<br/>
Shipping – FOB , Ft Lauderdale, Florida.
Products shall be sent by Freight Carrier,
Federal Express or any other courier at the
discretion of us unless other means are
requested by “Dealer”.
“Dealer” agrees to pay for shipping and
insurance according to terms of the order.
<br/>
Taxes/Duties – Any duties, taxes,
governmental or broker charges for
international orders incurred by
the “Dealer” for their shipments are the
sole responsibility of the “Dealer”.
<br/>
Drop Shipping – “Dealer” shall be approved
prior to be allowed to drop-ship
orders and follow prices as shown in Exhibit
A. part 2, drop-ship pricing column.
<br></br>
Payment – Payment for “Products” will be
pre-paid prior to shipment by us.
<br/>
<br/>
Any other terms are subject to our written
agreement. For International orders a 30%
deposit is required prior to building an
order and the remainder paid upon
completion.
<br/>
Warranty – “Products” are sold subject to
the applicable our standard printed warranty
found in “Products”
manual enclosed with each product sold and
attached as Exhibit B. “Dealer” is not
authorized to accept or commit,
on our behalf, any liabilities in connection
with “Dealer's” sale of “Products” other
than as set
forth in our standard warranty.
<br/>
<br/>
<b>III. Authorized Service Center</b>
<br/>
At all times during the Term of this
Agreement, Service Center agrees:
<br/>
a. It has, and it shall at all times
maintain adequate, suitable and clean
facility, associated tools and equipment,
all as are necessary to ensure the efficient
and timely performance by Service Center.
<br/>
b. “Appointed Services” means the
performance of, without limitation, service,
repair, regular maintenance,
warranty, recall on our products, regardless
of point of purchase, including, if
required, the use of genuine our
products and parts purchased from us.
<br/>
c. To promptly provide, upon our direction,
any records regarding us in a format as may
be requested by us,
to enable us to conduct or issue, without
limitation, product recalls, safety alerts,
warranty notices,
technical service bulletins, or otherwise.
<br/>
d. To at all times cooperate and use its
best efforts to assist us in the
dissemination and/or the timely
performance of, without limitation, any
product safety alerts, recalls, technical
service bulletins, etc.,
should they arise, or any other information
as may be requested by us.
<br/>
e. It shall procure and at all times
maintain at its own cost and expense,
without limitation,
all current and future required licenses,
permits and governmental approvals as
applicable to enable Service Center,
its facilities, and its Technician(s) to
lawfully comply with all the sections of
this Agreement.
<br/>
f. Not to install or otherwise use any
product or part except in strict accordance
with its intended use/application,
applicable our instructions, and local,
state and federal laws where Service Center
is located or where it performs Services.
<br/>
g. To provide it's our customers, with such
information and/or documentation as we may
direct from time to time.
<br/>
h. To serve as our liaison and promptly
handle, in coordination with us the
following, without limitation,
as we deem appropriate and as it may direct,
all inquiries, orders and complaints that
Service Center receives
regarding our products, including complaints
regarding Service Center's performance.
<br/>
i. It shall not submit any claims, whether
warranty, recall, or otherwise, to us that
is not identified as a
reimbursable cost or charge associated with
Service Center’s Services,
or charge customers for any Services that
have not been first authorized in writing by
us.
<br/>
Prices of “Parts” outside the warranty
period – The price to “Service
Center/Dealer” for parts
outside the warranty coverage shall be equal
to our current standard US domestic Service
Center price list
(Detailed lists per model will be furnished
upon acceptance of agreement).
<br/>
We has the right to change the “Products”
and “Parts” offering including terms and
prices at any time.
We will give notice to “Service Center” of
such changes prior to the effective date of
change.
<br/>
</p>
<br></br>
<p>
<br/>
Shipping charges of “Parts” outside the
warranty period – FOB , Pompano, Florida.
“Parts” shall be sent by Freight Carrier,
Federal Express or any other courier at the
discretion of
us unless other means are requested by
“Service Center/Dealer”.
“Service Center/Dealer” agrees to pay for
shipping and insurance according to sales
order/invoice.
<br/>
Payment – Payment for “Parts” outside of the
warranty period will be in full payment
prior to shipment by us.
<br/>
Warranty – “Products” and “Parts” are sold
subject to the applicable our standard
printed warranty attached as
found in “Products” manual enclosed with
each product sold (a copy of the standard
warranty is attached as Exhibit B.).
“Service Center” is not authorized to accept
or commit, on our behalf, any liabilities in
connection with
“Service Center/Dealer” sale of “Products”
or “Parts” other than as set forth in our
standard warranty.
<br/>
Request for Parts – “Service Center/Dealer”
will fill out Warranty Part Replacement form
(attached as Exhibit C.)
and either email, fax or call our Customer
Service at 800-943-6190 with the information
to obtain part replacement.
<br/>
Parts and Service – “Dealer” shall encourage
retail customers to use our original
equipment parts in their repair
and replacement of “Products” outside of
warranty in order to maintain our high
quality performance.
We will furnish “Dealer” with warranty parts
in a timely manner. Upon the situation of an
original part not being
available under warranty, we will furnish a
compatible part of equal or higher quality
to “Dealer”.
“Dealer” will send to our parts being
replaced by warranty issues in a timely
manner unless written approval by
our allowing “Dealer’s” request for “Dealer”
not to return warranty part being replaced.
<br/>
Out of Stock – We maintain a complete
inventory of all parts on hand. In the rare
occasion a part is not available.
We will furnish a compatible part of equal
or higher quality to “Service
Center/Dealer”.
<br/>
Returning of Warranty Covered “Parts” –
“Service Center/Dealer” will store defective
“Parts” covered under
warranty until we request for the parts to
be sent back to us.
<br/>
<br/>
<b>IV. Additional Obligations of We and
“Dealer”
</b>
<br/>
Marketing – We shall furnish “Dealer” with
Hi Res images and detailed specifications of
“Products”
in assisting “Dealer” and their customers
with the promoting of “Products”.
“Dealer” shall use its best efforts to
promote the resale of “Products” to realize
a maximum sales
potential for the “Products” in the
territory and channels. If “Dealer” wishes
to create its own “single occasion”
marketing material or issue a “single
occasion” discounted sale price, “Dealer”
shall prior to its use of
such materials or discounts submit examples
and pricing to us for a written “single
occasion” approval with date limits.
Training – “Dealer” will properly train
sales and service staff on the functions of
“Products”.
“Dealer” will make available to its staff
all manuals, documents, brochures, catalogs,
videos and support material
furnished by us for assisting in the sale
and servicing of “Products”.
<br/>
New Locations – If “Dealer” intends to open
any additional business locations, sales
channels or service of “Products”
other than described in Section II under
Paragraph B of this “Agreement”, “Dealer”
must initially obtain written approval
from our prior to “Dealer” offering
“Products” for sale in new locations.
<br/>
Purchasing – “Dealer” shall only purchase
products shown on Exhibit A of this
“Agreement” from us.
We will make available to “Dealer” for
immediate delivery “Products” in stock and
on hand in our
warehouses and storage facilities. We shall
not hold “Products” from shipping to
“Dealer” while “Dealer” is in
compliance with this “Agreement”.
<br/>
<b>V. Term and Termination</b>
<br/>
The term of this “Agreement” shall be for a
period of one (1) year, commencing on the
effective date hereof.
This “Agreement” shall be automatically
renewed for successive terms of one (1) year
each unless either party
shall give the other notice of non-renewal
not less than thirty (30) days prior to the
end of the then current
term or unless this “Agreement” is otherwise
terminated as provided herein. Unless
otherwise provided by applicable
state law, either party may terminate this
“Agreement” without cause and for any
reason, upon not less than thirty (30)
days written notice given to the other
party. Nothing contained herein shall
prevent us from immediately terminating this
“Agreement” in the event of bankruptcy or
insolvency of “Dealer”, “Dealer's” failure
to pay any amounts owing us when due.
Upon termination for any reason, all amounts
owed to us will become immediately due and
payable. This Agreement shall continue
in full force and effect until the
indebtedness is paid in full; and all
representations and warranties and all
provisions herein for
indemnity of us (and any other provisions
herein specified to survive) shall survive
payment in full of the indebtedness and any
release or termination of this Agreement.
<br/>
<br/>
<b>VI. Repurchase</b>
<br/>
In the event this “Agreement” is terminated,
We have a right but not an obligation to
purchase back from “Dealer” all new, unused,
current, complete and undamaged “Products”
at the price of original invoice less any
applicable discounts or payments made
thereon
and less a fifteen (15) % restocking charge,
computed on “Dealer's” net cost. In
addition, We have a right but not an
obligation to
purchase back “Dealer's” “Products” parts
subject to such parts being current, unused
and in a new physical condition and
appearance,
including packaging, and suitable for
reshipment by us to other dealers. We will
not repurchase parts whose condition may
have
deteriorated while in “Dealer’s” inventory.
The price to be paid or credited to
“Dealer's” account for such parts will be at
current
“Dealer’s” net cost less a fifteen (15) %
restocking charge. “Dealer” will provide
invoices showing proof of purchase from us.
<br/>
<b>VII. Authorized Dealer, Trademarks and
Brand Name
</b>
<br/>
“Dealer” is hereby licensed to use our name
and trademarks in the normal course of
distributing our “Products” and performing
related
services under this “Agreement”. Dealer
agrees not to use our name as part of
“Dealer's” name or in any manner which would
misrepresent
the relationship between “Dealer” and us.
“Dealer” may represent itself as an
"authorized dealer" of us, and may use our
name and
“Products” model names in the promoting of
“Products”. Upon termination of this
“Agreement”, “Dealer” shall immediately
cease
representing itself as a “Dealer” of us and
shall cease use of all our names, model
names, trademarks and any signs or other
material, of whatever nature, identifying
“Dealer” as a dealer of us shall be removed
or obliterated.
<br/>
<b>VIII. Mutual Indemnities</b>
<br/>
Each party shall indemnify and hold the
other harmless for any losses, claims,
damages, awards, penalties,
or injuries incurred by any third party,
including reasonable attorney's fees, which
arise from any alleged breach of such
indemnifying party's representations and
warranties made under this agreement. The
indemnifying party shall have the sole right
to defend such claims at its own expense.
The other party shall provide, at the
indemnifying party's expense, such
assistance in
investigating and defending such claims as
the indemnifying party may reasonably
request. This indemnity shall survive the
termination
of this Agreement.
<br/>
</p>
<br/>
<br/>
<p>
<b>IX. Confidentiality and Non-Disclosure
Agreement
</b>
<br/>
We and “Dealer” wish to define the rights
and obligations of each other with respect
to their handling and disclosure of
Confidential
Information as it pertains to the respective
business relationship of both we and
Dealer”.
<br/>
We and “Dealer” agrees to the following:
<br/>
Confidential Information is any information
relating to prices for “Products” and
business practices (including pending or
potential projects or business opportunities
of “Dealer”) of either party, whether
reduced to writing or other tangible
expression,
which the disclosing party considers to be
proprietary and confidential.
<br/>
Confidential Information shall include but
not be limited to terms and pricing,
technical and other specifications for
“Products”
and all information clearly identified as
confidential.
<br/>
Confidential Information will not include
any information which:
<br/>
i) is already known to the receiving party
prior to the time of disclosure by the
disclosing party;
<br/>
ii) is available or becomes generally
available to the public other than through a
breach of “Agreement” by the receiving
party;
<br/>
iii) is acquired or received rightfully and
without confidential limitation by the
receiving party from a third party;
<br/>
iv) is independently developed by the
receiving party without breach of Agreement;
or
<br/>
v) the disclosure of which is required by
law or governmental order.
If the receiving party becomes legally
required to disclose Confidential
Information,
or any part thereof the receiving party will
give the disclosing party prompt advance
notice of such requirement.
<br/>
Both parties agree to hold Confidential
Information in confidence during the term of
this “Agreement” and for a period of
two years after termination of this
“Agreement”. “Dealer” agrees to take all
reasonable steps to ensure that Confidential
Information
is not disclosed or distributed by its
employees, representatives or agents in
violation of the terms of this “Agreement”.
<br/>
All Confidential Information furnished under
this Agreement is and shall remain the
property of us and shall be returned or
otherwise
disposed of by the “Dealer” as instructed by
us promptly upon demand or upon the
termination or expiration of this Agreement.
<br/>
<b>X. General</b>
<br/>
“Dealer” is not an agent of us nor is
“Dealer” authorized to incur any obligations
or make any representations on behalf of our
company.
<br/>
This “Agreement” is binding on the parties,
their heirs, executors, administrators,
successors, and assignors.
<br/>
Force Majeure- Neither party shall be
responsible for any failure to carry out its
obligation hereunder which is due to causes
beyond
its control, including, but not limited to,
acts of God, public enemy, fires, floods,
epidemics, strikes, embargoes, severe
weather,
war, or delays of supply due to such causes.
Limitation of Liability/Waivers and
Disclaimers us shall not be liable for any
damages
whatsoever or claims of any kind, whether
based on contract, warranty, tort including
negligence or otherwise, or for any loss or
damage arising out of, connected with, or
resulting from, this Agreement, or from the
performance or breach thereof, or with
respect
to any and all goods covered by or furnished
under this Agreement. In no event shall be
liable for special, incidental, exemplary or
consequential damages including, but not
limited to, loss of profits or revenue, loss
of use of the Product or any associated
equipment,
cost of capital, cost of purchased power,
cost of substitute products or equipment,
facilities or services, downtime costs, or
claims or
damages of Dealer or employees, agents or
contractors of Dealer for such damages,
regardless of whether such claims or damages
are based
on contract, warranty, or tort including
negligence or otherwise. We shall not be
liable for any delay or failure to perform
its
obligations due to any cause beyond its
reasonable control, including, without
limitation, fire, weather, accident, act of
public
enemy, war, rebellion, insurrection, strike,
lockout, work slowdown, or similar
industrial or labor action, sabotage,
transportation
delay, shortage of raw material, energy or
machinery, act of God, acts or omissions of
Dealer, or the order or judgment of any
federal,
state, local or foreign court,
administrative agency or governmental
officer or body. Claims for shortages must
be reported within twenty-four
(24) hours. Except as expressly provided in
this Agreement, We makes no warranties,
express or implied, and specifically
disclaims any warranty
of merchantability, fitness for a particular
purpose, title or non-infringement or any
warranty arising by usage of trade, course
of dealing
or course of performance nor do us warrant
that the Product will meet Dealer's
requirements.
<br/>
We do not authorize anyone to make a
warranty of any kind on its behalf and
customer should not rely on anyone making
such statements.
<br/>
Organization, Power and Authority/Validity
of Documents Dealer is (A) an entity duly
organized, validly existing and in good
standing
under the laws of the state or country of
its incorporation or creation, (B) has the
power and authority to carry on its business
as now
being conducted, (C) is in compliance with
all governmental requirements; and (D) has
the power and authority to enter into this
Agreement
and any other documents related therewith.
<br/>
Litigation There are no judgments
outstanding against Dealer and there is no
action, suit, proceeding, or investigation
now pending against,
involving or affecting Dealer, at law, in
equity or before any governmental authority
that if adversely determined as to Dealer
would
result in a material adverse change in the
business or financial condition of Dealer,
nor is there any basis for such action,
suit,
proceeding or investigation.
<br/>
Assignment of Interest/Changes of
Ownership/Name Dealer shall not voluntarily
or by operation of law assign, transfer or
otherwise
encumber all or any part of Dealer's
interest or obligations under Agreement
without the prior written consent of us,
which consent
shall be at the sole discretion of us.
Dealer further represents and warrants that
it shall:
<br/>
(A) notify our immediately of any changes in
its ownership structure or name.
<br/>
Insurance Dealer shall obtain and maintain,
at Dealer's cost and expense, in full force
and effect at all times,
with all premiums paid thereon, and without
notice or demand, insurance with respect to
the Product against risks encompassed within
the standard policy of fire insurance with
extended coverage endorsement, theft and
other risks as “We” may require.
Upon request, Dealer shall provide us with
proof of such insurance.
<br/>
Forum Dealer hereby irrevocably submits
generally and unconditionally for itself to
the jurisdiction of the [Eleventh
Judicial Circuit Court] of the State of
Florida and the United States District Court
for the Southern District of Florida, over
any suit,
action or proceeding arising out of or
relating to this Agreement or the Product.
Dealer hereby agrees and consents that, in
addition to any methods of service or
process provided for under applicable law,
all service of process in any such suit,
action or proceeding in any state court, or
any United States federal court,
sitting in the state specified in this
Section may be made by certified or
registered mail, return receipt requested,
directed to Dealer at its address for notice
stated in this Agreement, or at a subsequent
address of which received actual notice from
Dealer in accordance with the Agreement, and
service so made shall be complete five (5)
days after the same shall have been so
mailed.
Nothing herein shall affect the right of us
to serve process in any manner permitted by
law or limit the right of us to bring
proceedings
against Dealer in any other court or
jurisdiction.
<br/>
Miscellaneous This Agreement may be executed
in several counterparts, all of which are
identical, and all of which counterparts
together
shall constitute one and the same
instrument. A determination that any
provision of this Agreement is unenforceable
or invalid shall not
affect the enforceability or validity of any
other provision and the determination that
the application of any provision of this
Agreement to any person or circumstance is
illegal or unenforceable shall not affect
the enforceability or validity of such
provision
as it may apply to other persons or
circumstances. This Agreement, and its
validity, enforcement and interpretation,
shall be governed
by the laws of the State of Florida (without
regard to any conflict of laws principles)
and applicable United States federal law.
This Agreement shall be binding upon Dealer,
and Dealer’s heirs, devices,
representatives, successors and assigns, and
shall inure to
the benefit of us and its successors and
assigners.
<br/>
Notices Unless specifically provided
otherwise, any notice for purposes of this
Agreement or any other Document shall be
given in
writing or by telex or by facsimile (fax)
transmission and shall be addressed or
delivered to the respective addresses set
forth
in the introduction of this Agreement. If
sent by prepaid, registered or certified
mail (return receipt requested), the notice
shall be deemed effective when the receipt
is signed or when the attempted initial
delivery is refused or cannot be made
because
of a change of address of which the sending
party has not been notified; if transmitted
by telex, the notice shall be effective
when transmitted (answer back confirmed);
and if transmitted by facsimile or personal
delivery, the notice shall be effective when
received.
No notice of change of address shall be
effective except upon actual receipt, and
service of a notice required by any
applicable statute
shall be considered complete when the
requirements of that statute are met.
<br/>
Waiver of jury trial. Dealer, by its
execution, and we, by its acceptance of this
agreement, hereby agree as follows:
<br/>
(a) each of them knowingly, voluntarily,
intentionally, and irrevocably waives any
right it may have to a trial by jury in any
lawsuit,
proceeding, counterclaim, or other
litigation (as used in this section an
"action") based upon, or arising out of,
under, or
in connection with, this agreement or any
related documents, instruments, or
agreements (whether oral or written and
whether
express or implied as a result of a course
of dealing, a course of conduct, a
statement, or other action of either party);
<br/>
(b) neither of them may seek a trial by jury
in any such action;
<br/>
(c) neither of them will seek to consolidate
any such action
(in which a jury trial has been waived) with
any other action in which a jury trial
cannot be or has not been waived; and
<br/>
(d) neither of them has in any way agreed
with or represented to the other of them
that the provisions of this section will
not be fully enforced in all instances.
<br/>
<br/>
The laws of the State of Florida will govern
this “Agreement”.
<br/>
<br/>
<br/>
<br/>
Authorized Signatures
<br/>
<br/>
“Dealer”
<br/>
<br/>
Company Name _____________________________
<br/>
</p>
<t t-esc="data"/>
</div>
</div>
</div>
</t>
</t>
</template>
</odoo>

68
franchise_management/report/franchise_management_report.xml

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--Contract Action-->
<record id="franchise_contract_report_action" model="ir.actions.report">
<field name="name">Contract</field>
<field name="model">franchise.dealer</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">franchise_management.franchise_dealership_contract_template</field>
<field name="report_file">franchise_management.franchise_dealership_contract_template</field>
<field name="binding_model_id" ref="model_franchise_dealer"/>
<field name="binding_type">report</field>
</record>
<!--Report Action-->
<record id="franchise_dealer_details_report_action" model="ir.actions.report">
<field name="name">franchise Dealer Details</field>
<field name="model">franchise.dealer</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">franchise_management.all_dealer_based_report_pdf</field>
<field name="report_file">franchise_management.all_dealer_based_report_pdf</field>
<field name="binding_type">report</field>
</record>
<!--Dealer Based Report Action-->
<record id="action_dealer_based_report_pdf" model="ir.actions.report">
<field name="name">Dealer Franchisee</field>
<field name="model">franchise.dealer</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">franchise_management.dealer_based_report_pdf</field>
<field name="report_file">franchise_management.dealer_based_report_pdf</field>
<field name="binding_type">report</field>
</record>
<!--Product based report action-->
<record id="action_agreement_based_report_pdf" model="ir.actions.report">
<field name="name">Agreement Based Report</field>
<field name="model">franchise.dealer</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">franchise_management.agreement_based_report_pdf</field>
<field name="report_file">franchise_management.agreement_based_report_pdf</field>
<field name="binding_type">report</field>
</record>
<!--Dealer Sale Feedback Report Action.-->
<record id="action_dealer_sale_based_report_pdf" model="ir.actions.report">
<field name="name">Dealer Based Report</field>
<field name="model">dealer.sale</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">franchise_management.all_dealer_sale_report_pdf</field>
<field name="report_file">franchise_management.all_dealer_sale_report_pdf</field>
<field name="binding_type">report</field>
</record>
<!--Dealer Sale feedback on dealer action-->
<record id="action_dealer_sale_on_dealer_report_pdf"
model="ir.actions.report">
<field name="name">Dealer Based Sale Report</field>
<field name="model">dealer.sale</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">franchise_management.dealer_sale_on_dealer_report_pdf</field>
<field name="report_file">franchise_management.dealer_sale_on_dealer_report_pdf</field>
<field name="binding_type">report</field>
</record>
<!--Dealer Sale feedback on product action-->
<record id="action_dealer_sale_on_agreement_report_pdf" model="ir.actions.report">
<field name="name">Agreement Based Sale Report</field>
<field name="model">dealer.sale</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">franchise_management.dealer_sale_on_agreement_report_pdf</field>
<field name="report_file">franchise_management.dealer_sale_on_agreement_report_pdf</field>
<field name="binding_type">report</field>
</record>
</odoo>

74
franchise_management/report/franchise_report_templates.xml

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--All dealer based report-->
<template id="all_dealer_based_report_pdf">
<t t-call="web.html_container">
<t t-call="web.external_layout">
<div class="page">
<div class="text-center">
<h1 style="font-size:35px"><b>Dealer List</b></h1>
</div>
<br/><br/>
<t t-if="form_data.get('from_date')">
From Date :
<t t-esc="form_data['from_date']"/>
</t>
<br/><br/>
<t t-if="form_data.get('to_date')">
To Date :
<t t-esc="form_data['to_date']"/>
</t>
<br/><br/>
<div class="row">
<table class="table">
<thead>
<tr>
<th width="10px">
<strong>Sl.no</strong>
</th>
<th width="10px">
<strong>Reference</strong>
</th>
<th width="10px">
<strong>Dealer Name</strong>
</th>
<th width="10px">
<strong>Signed On</strong>
</th>
<th width="10px">
<strong>Email</strong>
</th>
<th width="10px">
<strong>Franchise Agreement</strong>
</th>
</tr>
</thead>
<t t-foreach="fetch_all_details" t-as="line">
<tr>
<td>
<span t-esc="line_index+1"/>
</td>
<td>
<span t-esc="line['serial_no']"/>
</td>
<td>
<span t-esc="line['name']"/>
</td>
<td>
<span t-esc="line['signed_on']"/>
</td>
<td>
<span t-esc="line['dealer_mail']"/>
</td>
<td>
<span t-esc="line['agreement_type']"/>
</td>
</tr>
</t>
</table>
</div>
</div>
</t>
</t>
</template>
</odoo>

20
franchise_management/security/franchise_management_groups.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--Security user access groups user and manager-->
<data noupdate="1">
<record model="ir.module.category" id="franchise_management">
<field name="name">Dealer</field>
<field name="description">User access levels for Franchise Management</field>
<field name="sequence">10</field>
</record>
<record id="dealer_user_access" model="res.groups">
<field name="name">Franchise User</field>
<field name="category_id" ref="franchise_management"/>
</record>
<record id="dealer_manager_access" model="res.groups">
<field name="name">Franchise Manager</field>
<field name="category_id" ref="franchise_management"/>
<field name="implied_ids" eval="[(4, ref('dealer_user_access'))]"/>
</record>
</data>
</odoo>

8
franchise_management/security/ir.model.access.csv

@ -0,0 +1,8 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_dealer_manager,access.dealer.manager,franchise_management.model_franchise_dealer,base.group_user,1,1,1,1
access_dealer_agreement_user,access.dealer.agreement.user,franchise_management.model_franchise_agreement,base.group_user,1,1,1,1
access_dealer_sale_user,access.dealer.sale.user,franchise_management.model_dealer_sale,base.group_user,1,1,1,1
access_portal_dealer_user,access.portal.dealer.user,franchise_management.model_franchise_dealer,base.group_portal,1,0,0,0
access_dealer_experience_user,access.dealer.experience.user,model_business_experience,base.group_user,1,1,1,1
access_dealer_report_user,access.dealer.report.user,model_dealer_report,base.group_user,1,1,1,1
access_dealer_sale_report_user,access.dealer.sales.report.user,model_dealer_sale_report,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_dealer_manager access.dealer.manager franchise_management.model_franchise_dealer base.group_user 1 1 1 1
3 access_dealer_agreement_user access.dealer.agreement.user franchise_management.model_franchise_agreement base.group_user 1 1 1 1
4 access_dealer_sale_user access.dealer.sale.user franchise_management.model_dealer_sale base.group_user 1 1 1 1
5 access_portal_dealer_user access.portal.dealer.user franchise_management.model_franchise_dealer base.group_portal 1 0 0 0
6 access_dealer_experience_user access.dealer.experience.user model_business_experience base.group_user 1 1 1 1
7 access_dealer_report_user access.dealer.report.user model_dealer_report base.group_user 1 1 1 1
8 access_dealer_sale_report_user access.dealer.sales.report.user model_dealer_sale_report base.group_user 1 1 1 1

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
franchise_management/static/description/assets/icons/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
franchise_management/static/description/assets/modules/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
franchise_management/static/description/assets/modules/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
franchise_management/static/description/assets/modules/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
franchise_management/static/description/assets/modules/budget_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
franchise_management/static/description/assets/modules/credit_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
franchise_management/static/description/assets/modules/crm.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
franchise_management/static/description/assets/modules/employee.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
franchise_management/static/description/assets/modules/employee_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
franchise_management/static/description/assets/modules/export_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
franchise_management/static/description/assets/modules/gantt_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
franchise_management/static/description/assets/modules/hr.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

BIN
franchise_management/static/description/assets/modules/quotation_image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
franchise_management/static/description/assets/modules/sales.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
franchise_management/static/description/assets/modules/w1.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 678 KiB

BIN
franchise_management/static/description/assets/modules/w2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
franchise_management/static/description/assets/modules/w3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
franchise_management/static/description/assets/modules/w4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
franchise_management/static/description/assets/modules/w5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

BIN
franchise_management/static/description/assets/modules/w6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
franchise_management/static/description/assets/screenshots/12.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
franchise_management/static/description/assets/screenshots/13.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

BIN
franchise_management/static/description/assets/screenshots/14.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

BIN
franchise_management/static/description/assets/screenshots/15.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
franchise_management/static/description/assets/screenshots/16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
franchise_management/static/description/assets/screenshots/17.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save