Browse Source

Jan 06: [ADD] Initial Commit 'advance_signup_page'

pull/299/head
Shijin V 2 years ago
parent
commit
3c0742f932
  1. 46
      advance_signup_page/README.rst
  2. 23
      advance_signup_page/__init__.py
  3. 50
      advance_signup_page/__manifest__.py
  4. 23
      advance_signup_page/controllers/__init__.py
  5. 146
      advance_signup_page/controllers/auth_signup.py
  6. 96
      advance_signup_page/controllers/web.py
  7. 6
      advance_signup_page/doc/RELEASE_NOTES.md
  8. 23
      advance_signup_page/models/__init__.py
  9. 67
      advance_signup_page/models/signup_configuration.py
  10. 83
      advance_signup_page/models/signup_field.py
  11. 3
      advance_signup_page/security/ir.model.access.csv
  12. BIN
      advance_signup_page/static/description/assets/icons/check.png
  13. BIN
      advance_signup_page/static/description/assets/icons/chevron.png
  14. BIN
      advance_signup_page/static/description/assets/icons/cogs.png
  15. BIN
      advance_signup_page/static/description/assets/icons/consultation.png
  16. BIN
      advance_signup_page/static/description/assets/icons/ecom-black.png
  17. BIN
      advance_signup_page/static/description/assets/icons/education-black.png
  18. BIN
      advance_signup_page/static/description/assets/icons/hotel-black.png
  19. BIN
      advance_signup_page/static/description/assets/icons/license.png
  20. BIN
      advance_signup_page/static/description/assets/icons/lifebuoy.png
  21. BIN
      advance_signup_page/static/description/assets/icons/manufacturing-black.png
  22. BIN
      advance_signup_page/static/description/assets/icons/pos-black.png
  23. BIN
      advance_signup_page/static/description/assets/icons/puzzle.png
  24. BIN
      advance_signup_page/static/description/assets/icons/restaurant-black.png
  25. BIN
      advance_signup_page/static/description/assets/icons/service-black.png
  26. BIN
      advance_signup_page/static/description/assets/icons/trading-black.png
  27. BIN
      advance_signup_page/static/description/assets/icons/training.png
  28. BIN
      advance_signup_page/static/description/assets/icons/update.png
  29. BIN
      advance_signup_page/static/description/assets/icons/user.png
  30. BIN
      advance_signup_page/static/description/assets/icons/wrench.png
  31. BIN
      advance_signup_page/static/description/assets/misc/categories.png
  32. BIN
      advance_signup_page/static/description/assets/misc/check-box.png
  33. BIN
      advance_signup_page/static/description/assets/misc/compass.png
  34. BIN
      advance_signup_page/static/description/assets/misc/corporate.png
  35. BIN
      advance_signup_page/static/description/assets/misc/customer-support.png
  36. BIN
      advance_signup_page/static/description/assets/misc/cybrosys-logo.png
  37. BIN
      advance_signup_page/static/description/assets/misc/features.png
  38. BIN
      advance_signup_page/static/description/assets/misc/logo.png
  39. BIN
      advance_signup_page/static/description/assets/misc/pictures.png
  40. BIN
      advance_signup_page/static/description/assets/misc/pie-chart.png
  41. BIN
      advance_signup_page/static/description/assets/misc/right-arrow.png
  42. BIN
      advance_signup_page/static/description/assets/misc/star.png
  43. BIN
      advance_signup_page/static/description/assets/misc/support.png
  44. BIN
      advance_signup_page/static/description/assets/misc/whatsapp.png
  45. BIN
      advance_signup_page/static/description/assets/modules/11.png
  46. BIN
      advance_signup_page/static/description/assets/modules/12.png
  47. BIN
      advance_signup_page/static/description/assets/modules/13.png
  48. BIN
      advance_signup_page/static/description/assets/modules/14.png
  49. BIN
      advance_signup_page/static/description/assets/modules/15.png
  50. BIN
      advance_signup_page/static/description/assets/modules/16.png
  51. BIN
      advance_signup_page/static/description/assets/screenshots/1.png
  52. BIN
      advance_signup_page/static/description/assets/screenshots/2.png
  53. BIN
      advance_signup_page/static/description/assets/screenshots/3.png
  54. BIN
      advance_signup_page/static/description/assets/screenshots/4.png
  55. BIN
      advance_signup_page/static/description/assets/screenshots/5.png
  56. BIN
      advance_signup_page/static/description/assets/screenshots/6.png
  57. BIN
      advance_signup_page/static/description/assets/screenshots/7.png
  58. BIN
      advance_signup_page/static/description/assets/screenshots/8.png
  59. BIN
      advance_signup_page/static/description/assets/screenshots/9.png
  60. BIN
      advance_signup_page/static/description/assets/screenshots/hero.gif
  61. BIN
      advance_signup_page/static/description/banner.jpg
  62. BIN
      advance_signup_page/static/description/icon.png
  63. 677
      advance_signup_page/static/description/index.html
  64. 192
      advance_signup_page/views/auth_signup_templates.xml
  65. 85
      advance_signup_page/views/signup_configuration_views.xml
  66. 45
      advance_signup_page/views/signup_fields_views.xml

46
advance_signup_page/README.rst

@ -0,0 +1,46 @@
.. 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
Advance Signup Page
====================
The user can create the Sign-Up page for their Odoo website using the Odoo Advance Sign Up tool.
Configuration
=============
* No additional configurations needed
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
-------
Affero General Public License, Version 3 (AGPL v3)
( https://www.gnu.org/licenses/agpl-3.0-standalone.html)
Credits
-------
* Developers: (V16): Amal Varghese ,Jumana Jabin MP ,Contact: odoo@cybrosys.com
Contacts
--------
* Mail Contact : odoo@cybrosys.com
* Website : https://cybrosys.com
Bug Tracker
-----------
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
Maintainer
==========
.. image:: https://cybrosys.com/images/logo.png
:target: https://cybrosys.com
This module is maintained by Cybrosys Technologies.
For support and more information, please visit `Our Website <https://cybrosys.com/>`__
Further information
===================
HTML Description: `<static/description/index.html>`__

23
advance_signup_page/__init__.py

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

50
advance_signup_page/__manifest__.py

@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Amal Varghese, Jumana Jabin MP (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
{
'name': "Advance Signup Page",
'version': '16.0.1.0.0',
'category': 'Website',
'summary': """The user can design a more creative and distinctive sign-up
page for their Odoo website by using Odoo Advance Sign Up.""",
'description': """The user may create the Sign-Up page for their Odoo
website using the Odoo Advance Sign Up tool.Various dynamic fields can
be added by the Odoo admin as needed to the signup form.The website page
for signup, login, and password reset can have custom background picture
selected by the Odoo admin.Admins may also add content to the login,
register, and reset password pages from the Odoo backend.""",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': "https://www.cybrosys.com",
'depends': ['website', 'auth_signup'],
'data': [
'security/ir.model.access.csv',
'views/signup_configuration_views.xml',
'views/signup_fields_views.xml',
'views/auth_signup_templates.xml'
],
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

23
advance_signup_page/controllers/__init__.py

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

146
advance_signup_page/controllers/auth_signup.py

@ -0,0 +1,146 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Amal Varghese, Jumana Jabin MP (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
import logging
from werkzeug.urls import url_encode
from odoo import http, _
from odoo.exceptions import UserError
from odoo.http import request
from odoo.addons.auth_signup.controllers.main import AuthSignupHome
from odoo.addons.auth_signup.models.res_users import SignupError
from odoo.addons.web.controllers.home import ensure_db
_logger = logging.getLogger(__name__)
class AuthSignupHome(AuthSignupHome):
"""Custom AuthSignupHome Controller for Handling Signup.This custom
AuthSignupHome controller extends the default Odoo 'AuthSignupHome'
controller to handle signup functionality.It provides methods for web
login and signup, including additional configuration fields."""
@http.route()
def web_login(self, *args, **kw):
""" Perform web login."""
ensure_db()
response = super().web_login(*args, **kw)
configuration = request.env['signup.configuration'].sudo().search([(
'website_id', '=', request.website.id)], limit=1)
response.qcontext.update(self.get_auth_signup_config())
response.qcontext.update({
'is_hide_footer': True if configuration.is_hide_footer else False
})
if request.session.uid:
if request.httprequest.method == 'GET' and request.params.get(
'redirect'):
# Redirect if already logged in and redirect param is present
return request.redirect(request.params.get('redirect'))
# Add message for non-internal user account without redirect
# if account was just created
if response.location == '/web/login_successful' and kw.get(
'confirm_password'):
return request.redirect_query('/web/login_successful',
query={'account_created': True})
return response
@http.route('/web/signup', type='http', auth='public', website=True,
sitemap=False)
def web_auth_signup(self, *args, **kw):
"""Overridden the controller function to add the configuration into
the qcontext"""
qcontext = self.get_auth_signup_qcontext()
configuration = request.env['signup.configuration'].sudo(). \
search([('website_id', '=', request.website.id)], limit=1)
for key in kw:
qcontext[key] = kw[key]
if configuration:
qcontext.update({
'configuration': configuration
})
if 'error' not in qcontext and request.httprequest.method == 'POST':
try:
self.do_signup(qcontext)
# Send an account creation confirmation email
user = request.env['res.users']
user_sudo = user.sudo().search(
user._get_login_domain(qcontext.get('login')),
order=user._get_login_order(), limit=1
)
template = request.env.ref(
'auth_signup.mail_template_user_signup_account_created',
raise_if_not_found=False)
if user_sudo and template:
template.sudo().send_mail(user_sudo.id, force_send=True)
return self.web_login(*args, **kw)
except UserError as e:
qcontext['error'] = e.args[0]
except (SignupError, AssertionError) as e:
if request.env["res.users"].sudo().search(
[("login", "=", qcontext.get("login"))]):
qcontext["error"] = _(
"Another user is already registered using this email "
"address.")
else:
_logger.error("%s", e)
qcontext['error'] = _("Could not create a new account.")
elif 'signup_email' in qcontext:
user = request.env['res.users'].sudo().search(
[('email', '=', qcontext.get('signup_email')),
('state', '!=', 'new')], limit=1)
if user:
return request.redirect('/web/login?%s' % url_encode(
{'login': user.login, 'redirect': '/web'}))
response = request.render('auth_signup.signup', qcontext)
response.headers['X-Frame-Options'] = 'SAMEORIGIN'
response.headers['Content-Security-Policy'] = "frame-ancestors 'self'"
return response
def _prepare_signup_values(self, qcontext):
"""Updated the values with newly added fields"""
keys = ['login', 'name', 'password']
configuration = request.env['signup.configuration'] \
.sudo().search([], limit=1)
for field in configuration.signup_field_ids:
keys.append(field.field_id.name)
values = {key: qcontext.get(key) for key in keys}
if not values:
raise UserError(_("The form was not properly filled in."))
if values.get('password') != qcontext.get('confirm_password'):
raise UserError(_("Passwords do not match; please retype them."))
supported_lang_codes = [code for code, _ in
request.env['res.lang'].get_installed()]
lang = request.context.get('lang', '')
if lang in supported_lang_codes:
values['lang'] = lang
return values
@http.route('/web/signup', type='http', auth="public", website=True,
sitemap=False)
def website_signup(self):
"""Perform website signup."""
values = {}
configuration_signup = request.env[
'configuration.signup'].sudo().search([], limit=1)
if configuration_signup.is_show_terms_conditions:
values[
'terms_and_conditions'] = configuration_signup \
.terms_and_conditions
return request.render(
"advance_signup_portal.advance_signup_portal.fields", values)

96
advance_signup_page/controllers/web.py

@ -0,0 +1,96 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Amal Varghese, Jumana Jabin MP (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
import logging
import odoo
from odoo import http
from odoo.http import request
from odoo.tools.translate import _
from odoo.addons.web.controllers.home import Home
from odoo.addons.web.controllers.utils import ensure_db
_logger = logging.getLogger(__name__)
SIGN_UP_REQUEST_PARAMS = {'db', 'login', 'debug', 'token', 'message', 'error',
'scope', 'mode',
'redirect', 'redirect_hostname', 'email', 'name',
'partner_id',
'password', 'confirm_password', 'city', 'country_id',
'lang', 'signup_email'}
LOGIN_SUCCESSFUL_PARAMS = set()
class Home(Home):
"""Custom Home Controller for Handling Login and Signup.This custom Home
controller extends the default Odoo 'Home' controller to handle login and
signup functionality.It provides methods for web login and signup."""
@http.route('/web/login', type='http', auth="none")
def web_login(self, redirect=None, **kw):
"""Function to Handle web login. """
ensure_db()
request.params['login_success'] = False
if request.httprequest.method == 'GET' and redirect and \
request.session.uid:
return request.redirect(redirect)
# Simulate hybrid auth=user/auth=public, despite using auth=none to be,
# able to redirect users when no db is selected - cfr ensure_db()
if request.env.uid is None:
if request.session.uid is None:
request.env["ir.http"]._auth_method_public()
else:
request.update_env(user=request.session.uid)
values = {k: v for k, v in request.params.items() if
k in SIGN_UP_REQUEST_PARAMS}
try:
values['databases'] = http.db_list()
except odoo.exceptions.AccessDenied:
values['databases'] = None
if request.httprequest.method == 'POST':
try:
uid = request.session.authenticate(request.db,
request.params['login'],
request.params['password'])
request.params['login_success'] = True
return request.redirect(
self._login_redirect(uid, redirect=redirect))
except odoo.exceptions.AccessDenied as e:
if e.args == odoo.exceptions.AccessDenied().args:
values['error'] = _("Wrong login/password")
else:
values['error'] = e.args[0]
else:
if 'error' in request.params and request.params.get(
'error') == 'access':
values['error'] = _(
'Only employees can access this database. Please contact '
'the administrator.')
if 'login' not in values and request.session.get('auth_login'):
values['login'] = request.session.get('auth_login')
if not odoo.tools.config['list_db']:
values['disable_database_manager'] = True
values.update({
'header': True,
'footer': True,
'signup_url': '/web/signup',
})
response = request.render('web.login', values)
response.headers['X-Frame-Options'] = 'SAMEORIGIN'
response.headers['Content-Security-Policy'] = "frame-ancestors 'self'"
return response

6
advance_signup_page/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <advance_signup_page>
#### 06.01.2024
#### Version 16.0.1.0.0
#### ADD
- Initial Commit for Advance Signup Page

23
advance_signup_page/models/__init__.py

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

67
advance_signup_page/models/signup_configuration.py

@ -0,0 +1,67 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Amal Varghese, Jumana Jabin MP (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from odoo import fields, models
class SignupConfiguration(models.Model):
"""Model for Signup Configuration.This class represents the Signup
Configuration model for the Odoo website.It is used to configure the
signup page, including defining fields, content,and other settings."""
_name = 'signup.configuration'
_description = 'Signup Configuration'
_sql_constraints = [('website_id', 'unique(website_id)',
'A record for this website is already exist')]
name = fields.Char(string='Name', copy=False, required=True,
help='The name of the signup configuration.')
website_id = fields.Many2one(comodel_name='website',
string='Website', required=True,
help='The website associated with the signup'
' configuration.')
is_active = fields.Boolean(string='Active', default=True,
help='Specifies if the signup configuration is '
'active or not.')
signup_field_ids = fields.One2many(comodel_name='signup.field',
inverse_name='configuration_id',
string='Signup Fields',
help='The fields associated with the '
'signup configuration.')
signup_page_content = fields.Html(string='Signup Page Content',
help='The content of the signup page.')
login_page_content = fields.Html(string='Login Page Content',
help='The content of the login page.')
reset_password_content = fields.Html(string='Reset Password Content',
help='The content of the reset'
' password page.')
background_image = fields.Binary(string='Background Image',
help='The background image for the '
'signup page.')
is_hide_footer = fields.Boolean(string='Hide Footer from Signup Page',
help='Specifies if the footer should be'
' hidden on the signup page.')
is_show_terms_conditions = fields.Boolean(
string='Show Terms and Condition in Signup Page',
help='Specifies if the terms and conditions '
'should be shown on the signup page.')
terms_and_conditions = fields.Html(string='Terms and Conditions',
help='The terms and conditions'
' text for the signup page.')

83
advance_signup_page/models/signup_field.py

@ -0,0 +1,83 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Amal Varghese, Jumana Jabin MP (odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU AFFERO
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
# (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from odoo import api, fields, models
class SignupFields(models.Model):
""" Model for Signup Fields.This class represents the Signup Fields model
for the Odoo website. It is used to define and manage the fields that
users can sign up with."""
_name = 'signup.field'
_description = 'Signup Fields for Website'
field_id = fields.Many2one(comodel_name='ir.model.fields',
string='Signup Field',
domain=[('model_id.model', '=', 'res.users')],
help='The field associated with the '
'signup field.')
name = fields.Char(string='Field Label',
related='field_id.field_description',
help='The label of the signup field.')
placeholder = fields.Char(string='Placeholder',
help='The placeholder text for the '
'signup field.')
help_description = fields.Text(string='Help',
help='Additional help or description '
'for the signup field.')
field_type = fields.Char(string='Field Type',
readonly=True,
help='The type of the signup field.')
number_of_cols = fields.Selection(selection=[('2', '2'), ('3', '3'),
('4', '4'), ('6', '6'),
('12', '12')],
string='Number of Columns',
help='The number of columns for the '
'signup field layout.')
is_required = fields.Boolean(string='Is Required',
help='Specifies if the signup field is '
'required.')
configuration_id = fields.Many2one(comodel_name='signup.configuration',
help='The signup configuration '
'associated with the signup field')
@api.model_create_multi
def create(self, vals_list):
"""Create records for the SignupFields model."""
field_ids = [vals['field_id'] for vals in vals_list if
'field_id' in vals]
field_types = self.env['ir.model.fields'].browse(field_ids).mapped(
'ttype')
for vals in vals_list:
if 'field_id' in vals:
vals['field_type'] = field_types[
field_ids.index(vals['field_id'])]
records = super(SignupFields, self).create(
[vals for vals in vals_list if 'field_id' in vals])
return records
def write(self, vals):
"""Override the function to update the field type while saving the
record"""
if 'field_id' in vals:
vals['field_type'] = self.env['ir.model.fields'].browse(
vals['field_id']).ttype
return super(SignupFields, self).write(vals)

3
advance_signup_page/security/ir.model.access.csv

@ -0,0 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_signup_configuration_user,access.signup.configuration.user,model_signup_configuration,base.group_user,1,1,1,1
access_signup_field_user,access.signup.field.user,model_signup_field,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_signup_configuration_user access.signup.configuration.user model_signup_configuration base.group_user 1 1 1 1
3 access_signup_field_user access.signup.field.user model_signup_field base.group_user 1 1 1 1

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
advance_signup_page/static/description/assets/modules/11.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
advance_signup_page/static/description/assets/modules/12.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
advance_signup_page/static/description/assets/modules/13.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
advance_signup_page/static/description/assets/modules/14.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
advance_signup_page/static/description/assets/modules/15.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
advance_signup_page/static/description/assets/modules/16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 670 KiB

BIN
advance_signup_page/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
advance_signup_page/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

677
advance_signup_page/static/description/index.html

@ -0,0 +1,677 @@
<div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div class="d-flex align-items-center justify-content-between"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42"
style="width: 42px; height: 42px;"/>
<div>
<div
style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div
style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
<div
style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Odoo.Sh
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
Advance Signup Page</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
Using Odoo Advance Sign Up, The User Can Generate a
Creative and Unique Sign-Up Page.
</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif" class="img-responsive"
style="width: 100%; margin-left: auto; margin-right: auto;"/>
</div>
</div>
</div>
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/compass.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Explore This
Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn
more about this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
features of this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
screenshots for this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
</div>
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="overview">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pie-chart.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Overview
</h2>
</div>
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4">
The user can design a more creative and distinctive sign-up page for
their Odoo website by using Advance Signup.
</div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="features">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/features.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Features
</h2>
</div>
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Advance Signup Facilitates the User
to Design the Sign-Up Page for His/Her Odoo Website</span>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">The Odoo Admin can Add Various Dynamic Fields
in the Signup Form as per the Requirements</span>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">The Odoo Admin can Set a Custom Background Image
for the Signup/Login/Reset Password Website Page</span>
</div>
</div>
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="screenshots">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pictures.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Screenshots
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
From Website Configuration -> Choose Signup Configuration
</h3>
<img src="assets/screenshots/1.png"
class="img-thumbnail">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Admin can Add any Dynamic Field in the Signup Page
</h3>
<img src="assets/screenshots/2.png"
class="img-thumbnail">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Also, Admin can Create Dynamic Fields in the Signup Page
</h3>
<img src="assets/screenshots/3.png"
class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Manage Content Settings of the Signup Page
</h3>
<img src="assets/screenshots/4.png"
class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Manage Background Settings of the Signup Page
</h3>
<img src="assets/screenshots/5.png"
class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Manage Other Settings of the Signup Page
</h3>
<img src="assets/screenshots/6.png"
class="img-thumbnail">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
After Saving the Changes, You Can Go to the Website Frontend
and can Notice the Difference. </h3>
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Login Page </h3>
<img src="assets/screenshots/7.png"
class="img-thumbnail">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Signup Page </h3>
<img src="assets/screenshots/8.png"
class="img-thumbnail">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Reset Password Page </h3>
<img src="assets/screenshots/9.png"
class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/categories.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Related
Products
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/odoo_website_helpdesk/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/11.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/website_product_attachments/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/12.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/insta_feed_snippet/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/13.png">
</div>
</a>
</div>
</div>
<div class="carousel-item active"
style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/customer_geolocation/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/14.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/product_visibility_website/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/15.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/website_hide_variants/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/16.png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev"
style="width:35px; color:#000"> <span
class="carousel-control-prev-icon"><i
class="fa fa-chevron-left"
style="font-size:24px"></i></span>
</a> <a class="carousel-control-next" href="#demo1"
data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i
class="fa fa-chevron-right"
style="font-size:24px"></i></span>
</a>
</div>
</div>
</div>
<!-- END OF RELATED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/star.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our Services
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</div>
<!-- END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/corporate.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our
Industries
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/trading-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easily procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/pos-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/education-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
A platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/manufacturing-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Plan, track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/ecom-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Mobile
friendly,
awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/service-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Keep track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/restaurant-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Run your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/hotel-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</div>
<!-- END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Support
</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48" width="48"
style="width: 42px; height: 42px;"/>
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need help?
Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
odoo@cybrosys.com</p>
</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52" width="52"
style="width: 52px; height: 52px;"/>
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
+91 86068
27707</p>
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="assets/misc/logo.png" width="144" height="31"
style="width:144px; height: 31px; margin-top: 40px;"/>
</div>
</div>
</div>
<!-- END OF SUPPORT -->

192
advance_signup_page/views/auth_signup_templates.xml

@ -0,0 +1,192 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- Frontend Layout Extension -->
<template id="frontend_layout_extension" name="Frontend Layout"
inherit_id="web.frontend_layout">
<xpath expr="//div[@id='wrapwrap']/main" position="attributes">
<!-- Add a background image style based on the signup configuration -->
<attribute name="t-attf-style"
add="background-image: url('data:image/*;base64,{{request.env['signup.configuration'].sudo().search([('website_id', '=', request.website.id)],limit=1).background_image}}'); background-size: 100% 100%;"/>
</xpath>
</template>
<!-- Auth Signup/ResetPassword Form Fields -->
<template id="advance_signup_portal_fields"
inherit_id="auth_signup.fields"
name="Auth Signup/ResetPassword form fields">
<xpath expr="//div[hasclass('field-confirm_password')]"
position="after">
<t t-foreach="configuration.signup_field_ids" t-as="field">
<div class="mb-3 field-test pt-2">
<label>
<t t-esc="field.name"/>
</label>
<input type="text" t-attf-name="{{field.field_id.name}}"
t-attf-id="{{field.field_id.id}}"
t-attf-class="form-control form-control-sm"
required="required"/>
</div>
</t>
<!-- Display terms and conditions from the configuration -->
<t t-if="configuration.is_show_terms_conditions">
<div class="form-group">
<input type="checkbox" name="accept_terms">I Agree to the
<t t-out="configuration.terms_and_conditions"/>
</input>
</div>
</t>
</xpath>
</template>
<!-- Template for the Login Form -->
<template id="advance_signup_portal_login"
inherit_id="auth_signup.login" name="Login Form">
<form class="oe_login_form" position="attributes">
<attribute name="style"
add="z-index: 99;background: #f0f8ff70;padding: 20px;border-radius: 5px;max-width:350px;"/>
</form>
<div class="mb-3 field-login" position="before">
<t t-set="configuration"
t-value="request.env['signup.configuration'].sudo().search([('website_id', '=', request.website.id)],limit=1)"/>
<div class="mb-3">
<span style="font-size: 19px;font-family: sans serif;">
<b>ALREADY REGISTERED ?</b>
</span>
</div>
<div class="mb-4">
<span style="font-size: 15px;font-family: cursive;font-weight: bold;">
<t t-esc="configuration.login_page_content"/>
</span>
</div>
</div>
</template>
<!-- Template for Sign Up Form -->
<template id="auth_signup_signup" name="Sign up login">
<t t-call="web.login_layout">
<form class="oe_signup_form" role="form" method="post"
t-if="not message">
<input type="hidden" name="csrf_token"
t-att-value="request.csrf_token()"/>
<t t-call="auth_signup.fields">
<t t-set="only_passwords"
t-value="bool(token and not invalid_token)"/>
</t>
<p class="alert alert-danger" t-if="error" role="alert">
<t t-esc="error"/>
</p>
<input type="hidden" name="redirect" t-att-value="redirect"/>
<input type="hidden" name="token" t-att-value="token"/>
<div class="text-center oe_login_buttons d-grid pt-3">
<button type="submit" class="btn btn-primary">Sign up
</button>
<a t-attf-href="/web/login?{{ keep_query() }}"
class="btn btn-link btn-sm" role="button">Already
have an account?
</a>
<div class="o_login_auth"/>
</div>
</form>
</t>
</template>
<!-- Template for Sign Up Form -->
<template id="advance_signup_portal_signup"
inherit_id="auth_signup.signup" name="Signup Form">
<form class="oe_signup_form" position="attributes">
<attribute name="style"
add="z-index: 99;background: #f0f8ff70;padding: 20px;border-radius: 5px;max-width:350px;"/>
</form>
<xpath expr="//input[@name='csrf_token']" position="before">
<t t-set="configuration"
t-value="request.env['signup.configuration'].sudo().search([('website_id', '=', request.website.id)],limit=1)"/>
<div class="mb-3">
<span style="font-size: 19px;font-family: sans serif;">
<b>CREATE YOUR ACCOUNT</b>
</span>
</div>
<div class="mb-4">
<span style="font-size: 15px;font-family: cursive;font-weight: bold;">
<t t-esc="configuration.signup_page_content"/>
</span>
</div>
</xpath>
<xpath expr="//form[@class='oe_signup_form']" position="inside">
<div class="text-center small mt-4 pt-3 border-top"
t-if="not disable_footer">
<t t-if="not disable_database_manager">
<a class="border-end pe-2 me-1"
href="/web/database/manager">Manage Databases
</a>
</t>
<a href="https://www.odoo.com?utm_source=db&amp;utm_medium=auth"
target="_blank">Powered by
<span>Odoo</span>
</a>
</div>
</xpath>
</template>
<!-- Template for Reset Password Form -->
<template id="advance_signup_portal_reset_password"
inherit_id="auth_signup.reset_password"
name="Reset Password Form">
<xpath expr="//input[@name='csrf_token']" position="before">
<t t-set="configuration"
t-value="request.env['signup.configuration'].sudo().search([('website_id', '=', request.website.id)],limit=1)"/>
<div class="mb-3">
<span style="font-size: 19px;font-family: sans serif;">
<b>FORGOT YOUR PASSWORD ?</b>
</span>
</div>
<div class="mb-4">
<span style="font-size: 15px;font-family: cursive;font-weight: bold;">
<t t-esc="configuration.reset_password_content"/>
</span>
</div>
</xpath>
<form class="oe_reset_password_form" position="attributes">
<attribute name="style"
add="z-index: 99;background: #f0f8ff70;padding: 20px;border-radius: 5px;max-width:350px;"/>
</form>
</template>
<!-- Template for the Home Page Layout -->
<template id="advance_signup_portal_layout" name="Home"
inherit_id="website.layout">
<xpath expr="//header" position="attributes">
<attribute name="t-if">not hide_header</attribute>
</xpath>
<xpath expr="//footer" position="attributes">
<attribute name="t-if">not hide_footer</attribute>
</xpath>
</template>
<!-- Template for Extending the Web Login Form -->
<template id="web_login_extend" inherit_id="web.login">
<xpath expr="//form[@class='oe_login_form']" position="inside">
<div class="signup_option">
<div class="justify-content-between mt-2 d-flex small">
<a t-attf-href="/web/signup?{{ keep_query() }}">Don't have
an account?
</a>
<a t-attf-href="/web/reset_password?{{ keep_query() }}">
Reset Password
</a>
</div>
</div>
<div class="text-center small mt-4 pt-3 border-top"
t-if="not disable_footer">
<t t-if="not disable_database_manager">
<a class="border-end pe-2 me-1"
href="/web/database/manager">Manage Databases
</a>
</t>
<a href="https://www.odoo.com?utm_source=db&amp;utm_medium=auth"
target="_blank">Powered by
<span>Odoo</span>
</a>
</div>
</xpath>
</template>
<!-- Template for Customizing the Footer -->
<template id="footer_custom" inherit_id="website.layout" name="Default"
active="True">
<xpath expr="//div[@id='footer']" position="replace"
t-if="request.env['signup.configuration'].sudo().search([('website_id', '=', request.website.id)],limit=1).is_hide_footer">
</xpath>
</template>
</odoo>

85
advance_signup_page/views/signup_configuration_views.xml

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Tree View for Signup Configuration -->
<record id="signup_configuration_view_tree" model="ir.ui.view">
<field name="name">signup.configuration.view.tree</field>
<field name="model">signup.configuration</field>
<field name="arch" type="xml">
<tree string="Signup Configuration">
<field name="name"/>
<field name="website_id"/>
</tree>
</field>
</record>
<!-- Form View for Signup Configuration -->
<record id="signup_configuration_view_form" model="ir.ui.view">
<field name="name">signup.configuration.view.form</field>
<field name="model">signup.configuration</field>
<field name="arch" type="xml">
<form string="Signup Configuration">
<sheet>
<field name="is_active" invisible="1"/>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name"/>
</h1>
</div>
<group>
<field name="website_id"/>
</group>
<notebook>
<!-- Page for Signup Fields -->
<page string="Signup Fields" name="signup_fields">
<field name="signup_field_ids"/>
</page>
<!-- Page for Content Settings -->
<page string="Content Settings"
name="content_settings">
<group>
<field name="signup_page_content"/>
</group>
<group>
<field name="login_page_content"/>
</group>
<group>
<field name="reset_password_content"/>
</group>
</page>
<!-- Page for Background Settings -->
<page string="Background Settings"
name="background_settings">
<group>
<field name="background_image" widget="image"/>
</group>
</page>
<!-- Page for Other Settings -->
<page string="Other Settings" name="other_settings">
<group>
<field name="is_hide_footer"/>
</group>
<group>
<field name="is_show_terms_conditions"/>
</group>
<group>
<field name="terms_and_conditions"
attrs="{'invisible': [('is_show_terms_conditions','!=',True)]}"/>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- Action to Open Signup Configuration -->
<record id="signup_configuration_action" model="ir.actions.act_window">
<field name="name">Signup Configuration</field>
<field name="res_model">signup.configuration</field>
<field name="view_mode">tree,form</field>
</record>
<!-- Menu Item for Signup Configuration -->
<menuitem id="signup_configuration_menu" name="Signup Configuration"
parent="website.menu_website_global_configuration"
action="signup_configuration_action"
groups="website.group_website_designer"/>
</odoo>

45
advance_signup_page/views/signup_fields_views.xml

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--Record for the Tree View of Signup Fields. This view displays a list of signup
fields with their ID, type, and requirement status.-->
<record id="signup_field_view_tree" model="ir.ui.view">
<field name="name">signup.field.view.tree</field>
<field name="model">signup.field</field>
<field name="arch" type="xml">
<tree string="Signup Fields" name="tree_signup_fields">
<!-- Columns to display in the tree view -->
<field name="field_id"/>
<field name="field_type"/>
<field name="is_required"/>
</tree>
</field>
</record>
<!--Record for the Form View of Signup Fields.This view provides a detailed
form for managing signup field properties. -->
<record id="signup_field_view_form" model="ir.ui.view">
<field name="name">signup.field.view.form</field>
<field name="model">signup.field</field>
<field name="arch" type="xml">
<form string="Signup Fields" name="form_signup_fields">
<sheet>
<group>
<group>
<field name="field_id"
options="{'no_create': True, 'no_create_edit':True}"/>
<field name="name"/>
<field name="placeholder"/>
</group>
<group>
<field name="field_type"/>
<field name="number_of_cols"/>
<field name="is_required"/>
</group>
</group>
<group>
<field name="help_description"/>
</group>
</sheet>
</form>
</field>
</record>
</odoo>
Loading…
Cancel
Save