| @ -0,0 +1,47 @@ | |||||
|  | .. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg | ||||
|  |     :target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html | ||||
|  |     :alt: License: LGPL-3 | ||||
|  | 
 | ||||
|  | Website Signup Approval | ||||
|  | ======================= | ||||
|  | This module approve or reject signup approval request of users from website. | ||||
|  | 
 | ||||
|  | Installation | ||||
|  | ============ | ||||
|  | - www.odoo.com/documentation/16.0/setup/install.html | ||||
|  | - Install our custom addon | ||||
|  | 
 | ||||
|  | License | ||||
|  | ------- | ||||
|  | General Public License, Version 3 (LGPL-3). | ||||
|  | (https://www.gnu.org/licenses/lgpl-3.0-standalone.html) | ||||
|  | 
 | ||||
|  | Company | ||||
|  | ------- | ||||
|  | * `Cybrosys Techno Solutions <https://cybrosys.com/>`__ | ||||
|  | 
 | ||||
|  | Credits | ||||
|  | ------- | ||||
|  | * Developer: | ||||
|  |   (V16) Sruthi pavithran, Contact: odoo@cybrosys.com | ||||
|  | 
 | ||||
|  | Contacts | ||||
|  | -------- | ||||
|  | * Mail Contact : odoo@cybrosys.com | ||||
|  | 
 | ||||
|  | Bug Tracker | ||||
|  | ----------- | ||||
|  | Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. | ||||
|  | 
 | ||||
|  | Maintainer | ||||
|  | ========== | ||||
|  | .. image:: https://cybrosys.com/images/logo.png | ||||
|  |    :target: https://cybrosys.com | ||||
|  | 
 | ||||
|  | This module is maintained by Cybrosys Technologies. | ||||
|  | 
 | ||||
|  | For support and more information, please visit `Our Website <https://cybrosys.com/>`__ | ||||
|  | 
 | ||||
|  | Further information | ||||
|  | =================== | ||||
|  | HTML Description: `<static/description/index.html>`__ | ||||
| @ -0,0 +1,23 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | ||||
|  | #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | ||||
|  | # | ||||
|  | #    You can modify it under the terms of the GNU LESSER | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    (LGPL v3) along with this program. | ||||
|  | #    If not, see <http://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | from . import controllers | ||||
|  | from . import models | ||||
| @ -0,0 +1,54 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | ||||
|  | #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | ||||
|  | # | ||||
|  | #    You can modify it under the terms of the GNU LESSER | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    (LGPL v3) along with this program. | ||||
|  | #    If not, see <http://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | { | ||||
|  |     'name': "Website Signup Approval", | ||||
|  |     'version': '16.0.1.0.0', | ||||
|  |     'summary': 'Approve signup request to login to the website', | ||||
|  |     'description': """This module approve or reject signup approval request of  | ||||
|  |      users from website.User can upload their documents for approval.""", | ||||
|  |     'author': "Cybrosys Techno Solutions", | ||||
|  |     'company': 'Cybrosys Techno Solutions', | ||||
|  |     'maintainer': 'Cybrosys Techno Solutions', | ||||
|  |     'website': 'https://www.cybrosys.com', | ||||
|  |     'category': 'Website', | ||||
|  |     'depends': ['website', 'sale_management', 'web'], | ||||
|  |     'data': [ | ||||
|  |         'security/website_signup_approval_groups.xml', | ||||
|  |         'security/ir.model.access.csv', | ||||
|  |         'data/mail_channel_data.xml', | ||||
|  |         'views/res_users_approve_views.xml', | ||||
|  |         'views/res_config_settings_views.xml', | ||||
|  |         'views/signup_templates.xml', | ||||
|  |         'views/document_attachment_views.xml', | ||||
|  |         'views/approval_request_templates.xml' | ||||
|  |     ], | ||||
|  |     'assets': { | ||||
|  |         'web.assets_frontend': [ | ||||
|  |             'website_signup_approval/static/src/js/signup.js' | ||||
|  |         ], | ||||
|  |     }, | ||||
|  |     'images': ['static/description/banner.jpg'], | ||||
|  |     'license': 'LGPL-3', | ||||
|  |     'installable': True, | ||||
|  |     'auto_install': False, | ||||
|  |     'application': True, | ||||
|  | } | ||||
| @ -0,0 +1,22 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | ||||
|  | #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | ||||
|  | # | ||||
|  | #    You can modify it under the terms of the GNU LESSER | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    (LGPL v3) along with this program. | ||||
|  | #    If not, see <http://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | from . import website_signup_approval | ||||
| @ -0,0 +1,137 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | ||||
|  | #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | ||||
|  | # | ||||
|  | #    You can modify it under the terms of the GNU LESSER | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    (LGPL v3) along with this program. | ||||
|  | #    If not, see <http://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | import logging | ||||
|  | import werkzeug | ||||
|  | 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.models.res_users import SignupError | ||||
|  | from odoo.addons.web.controllers.home import ensure_db, Home, \ | ||||
|  |     SIGN_UP_REQUEST_PARAMS, LOGIN_SUCCESSFUL_PARAMS | ||||
|  | 
 | ||||
|  | _logger = logging.getLogger(__name__) | ||||
|  | LOGIN_SUCCESSFUL_PARAMS.add('account_created') | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class AuthSignupHome(Home): | ||||
|  |     """Portal user login""" | ||||
|  |     @http.route() | ||||
|  |     def web_login(self, *args, **kw): | ||||
|  |         """Function have login features""" | ||||
|  |         response = super(AuthSignupHome, self).web_login(*args, **kw) | ||||
|  |         if response.qcontext and response.qcontext.get('login', False): | ||||
|  |             inactive_user = request.env['res.users.approve'].sudo().search( | ||||
|  |                 [('name', '=', response.qcontext.get('login')), | ||||
|  |                  ('for_approval_menu', '=', False)]) | ||||
|  |             if inactive_user: | ||||
|  |                 response.qcontext["error"] = _( | ||||
|  |                     "You can login only after your login get approved..!") | ||||
|  |         return response | ||||
|  | 
 | ||||
|  |     @http.route('/web/signup', type='http', auth='public', website=True, | ||||
|  |                 sitemap=False) | ||||
|  |     def web_auth_signup(self, *args, **kw): | ||||
|  |         """Function have signup features""" | ||||
|  |         qcontext = self.get_auth_signup_qcontext() | ||||
|  |         values = {k: v for k, v in request.params.items() if | ||||
|  |                   k in SIGN_UP_REQUEST_PARAMS} | ||||
|  |         signup_approval = request.env['ir.config_parameter'].sudo().get_param( | ||||
|  |             'website_signup_approval.auth_signup_approval') | ||||
|  |         if values: | ||||
|  |             if signup_approval: | ||||
|  |                 return request.redirect('/success') | ||||
|  |         if not qcontext.get('token') and not qcontext.get('signup_enabled'): | ||||
|  |             raise werkzeug.exceptions.NotFound() | ||||
|  |         if 'error' not in qcontext and request.httprequest.method == 'POST': | ||||
|  |             try: | ||||
|  |                 self.do_signup(qcontext) | ||||
|  |                 if qcontext.get('token'): | ||||
|  |                     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 | ||||
|  | 
 | ||||
|  |     @http.route('/success', type='http', auth='public', website=True, | ||||
|  |                 sitemap=False) | ||||
|  |     def approval_success(self): | ||||
|  |         """Create approval request success form""" | ||||
|  |         return request.render("website_signup_approval.approval_form_success") | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class SignUpApproveController(http.Controller): | ||||
|  |     """Manage Approval Request in Backend""" | ||||
|  |     @http.route(['/web/signup/approve'], type='json', auth='public') | ||||
|  |     def create_attachment(self, **dat): | ||||
|  |         """Create approval request and attachment in backend""" | ||||
|  |         data_list = [] | ||||
|  |         for data in dat['data']: | ||||
|  |             data = data.split('base64')[1] if data else False | ||||
|  |             data_list.append((0, 0, {'attachments': data})) | ||||
|  |         if request.env['res.users.approve'].sudo().search( | ||||
|  |                 [('name', '=', dat['email'])]): | ||||
|  |             pass | ||||
|  |         else: | ||||
|  |             attach = request.env['res.users.approve'].sudo().create( | ||||
|  |                 {'name': dat['email'], | ||||
|  |                  'email': dat['username'], | ||||
|  |                  'password': dat['password'], | ||||
|  |                  'attachment_ids': data_list | ||||
|  |                  }) | ||||
|  |             for data in dat['data']: | ||||
|  |                 data = data.split('base64')[1] if data else False | ||||
|  |                 request.env['ir.attachment'].sudo().create( | ||||
|  |                     {'name': attach.name, | ||||
|  |                      'datas': data, | ||||
|  |                      'res_model': 'res.users.approve', | ||||
|  |                      'res_id': attach.id, | ||||
|  |                      } | ||||
|  |                 ) | ||||
| @ -0,0 +1,12 @@ | |||||
|  | <?xml version="1.0" encoding="UTF-8" ?> | ||||
|  | <odoo> | ||||
|  |     <data noupdate="0"> | ||||
|  | <!--        Channel notification for user approval--> | ||||
|  |         <record id="mail_channel_for_signup_approval" model="mail.channel"> | ||||
|  |             <field name="name">User Approval</field> | ||||
|  |             <field name="group_public_id" ref="website_signup_approval.group_approval_channel"/> | ||||
|  |             <field name="group_ids" eval="[(4, ref('website_signup_approval.group_approval_channel'))]"/> | ||||
|  |             <field name="description">Notification For User Approval</field> | ||||
|  |         </record> | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,6 @@ | |||||
|  | ## Module <website_signup_approval> | ||||
|  | 
 | ||||
|  | #### 04.09.2023 | ||||
|  | #### Version 16.0.1.0.0 | ||||
|  | #### ADD | ||||
|  | - Initial Commit for Website Signup Approval. | ||||
| @ -0,0 +1,25 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | ||||
|  | #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | ||||
|  | # | ||||
|  | #    You can modify it under the terms of the GNU LESSER | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    (LGPL v3) along with this program. | ||||
|  | #    If not, see <http://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | from . import document_attachment | ||||
|  | from . import res_config_settings | ||||
|  | from . import res_users_approve | ||||
|  | from . import signup_approval | ||||
| @ -0,0 +1,32 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | ||||
|  | #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | ||||
|  | 
 | ||||
|  | #    You can modify it under the terms of the GNU LESSER | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    (LGPL v3) along with this program. | ||||
|  | #    If not, see <http://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | from odoo import fields, models | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class DocumentAttachment(models.Model): | ||||
|  |     """Store Information of Attachment""" | ||||
|  |     _name = "document.attachment" | ||||
|  |     _rec_name = 'document' | ||||
|  |     _description = 'Signup Attachments' | ||||
|  | 
 | ||||
|  |     document = fields.Char(string="Attachment", | ||||
|  |                            help="It identify the type of user document") | ||||
| @ -0,0 +1,51 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | ||||
|  | #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | ||||
|  | # | ||||
|  | #    You can modify it under the terms of the GNU LESSER | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    (LGPL v3) along with this program. | ||||
|  | #    If not, see <http://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | from ast import literal_eval | ||||
|  | from odoo import fields, models | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class ResConfigSettings(models.TransientModel): | ||||
|  |     """Adding field in res config settings""" | ||||
|  |     _inherit = 'res.config.settings' | ||||
|  | 
 | ||||
|  |     auth_signup_approval = fields.Boolean(string='Signup Approval', | ||||
|  |             config_parameter='website_signup_approval.auth_signup_approval', | ||||
|  |             help="Signup request send only if it is enabled") | ||||
|  |     documents_ids = fields.Many2many('document.attachment', string='Documents', | ||||
|  |                                      help="Select the type of document") | ||||
|  | 
 | ||||
|  |     def set_values(self): | ||||
|  |         """Set values for the field""" | ||||
|  |         super(ResConfigSettings, self).set_values() | ||||
|  |         self.env['ir.config_parameter'].sudo().set_param( | ||||
|  |             'website_signup_approval.documents_ids', | ||||
|  |             self.documents_ids.ids) | ||||
|  | 
 | ||||
|  |     def get_values(self): | ||||
|  |         """Return values for the fields""" | ||||
|  |         res = super(ResConfigSettings, self).get_values() | ||||
|  |         params = self.env['ir.config_parameter'].sudo() | ||||
|  |         limits = params.get_param( | ||||
|  |             'website_signup_approval.documents_ids') | ||||
|  |         res.update(documents_ids=[ | ||||
|  |             (6, 0, literal_eval(limits))] if limits else False) | ||||
|  |         return res | ||||
| @ -0,0 +1,68 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | ||||
|  | #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | ||||
|  | # | ||||
|  | #    You can modify it under the terms of the GNU LESSER | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    (LGPL v3) along with this program. | ||||
|  | #    If not, see <http://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | from odoo import fields, models | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class ResUsersApprove(models.Model): | ||||
|  |     """Store Signup Information of Users from Website""" | ||||
|  |     _name = 'res.users.approve' | ||||
|  |     _description = "Approval Request Details" | ||||
|  | 
 | ||||
|  |     name = fields.Char(help="name of the user", string='Name') | ||||
|  |     email = fields.Char(help="email of the user", string="Email") | ||||
|  |     password = fields.Char(help="password of the user", string="Password") | ||||
|  |     for_approval_menu = fields.Boolean(string='For Approval menu', | ||||
|  |                                        default=False, | ||||
|  |                                        help="Check the request is approved") | ||||
|  |     approved_date = fields.Datetime(string='Approved Date', copy=False, | ||||
|  |                                     help="Approval date of signup request") | ||||
|  |     attachment_ids = fields.One2many('user.approval.window', | ||||
|  |                                      'approval_id', | ||||
|  |                                      string='Attachments', | ||||
|  |                                      help="Store uploaded document") | ||||
|  | 
 | ||||
|  |     def action_approve_login(self): | ||||
|  |         """To approve the request from website""" | ||||
|  |         self.for_approval_menu = True | ||||
|  |         user = self.env['res.users'].sudo().search([('login', '=', self.name)]) | ||||
|  |         if not user: | ||||
|  |             user = self.env['res.users'].sudo().create({ | ||||
|  |                 'login': self.name, | ||||
|  |                 'name': self.email, | ||||
|  |                 'password': self.password, | ||||
|  |                 'groups_id': [(4, self.env.ref('base.group_portal').id)] | ||||
|  |             }) | ||||
|  |             template = self.env.ref( | ||||
|  |                 'auth_signup.mail_template_user_signup_account_created', | ||||
|  |                 raise_if_not_found=False) | ||||
|  |             email_values = { | ||||
|  |                 'email_to': user.login, | ||||
|  |             } | ||||
|  |             template.send_mail(user.id, email_values=email_values, | ||||
|  |                                force_send=True) | ||||
|  | 
 | ||||
|  |     def action_reject_login(self): | ||||
|  |         """To reject the request from website""" | ||||
|  |         self.for_approval_menu = False | ||||
|  |         user = self.env['res.users'].sudo().search([('login', '=', self.name)]) | ||||
|  |         if user: | ||||
|  |             user.unlink() | ||||
| @ -0,0 +1,54 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | ||||
|  | #    Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) | ||||
|  | # | ||||
|  | #    You can modify it under the terms of the GNU LESSER | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    (LGPL v3) along with this program. | ||||
|  | #    If not, see <http://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | from odoo import fields, models | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class UserApprovalWindow(models.Model): | ||||
|  |     """Store Information of Attachment in a One2many Field""" | ||||
|  |     _name = 'user.approval.window' | ||||
|  |     _description = 'Attachment Details in User Approval Window' | ||||
|  | 
 | ||||
|  |     attachments = fields.Binary(string='Attachments', attachment=True, | ||||
|  |                                 help="Store the uploaded document") | ||||
|  |     approval_id = fields.Many2one('res.users.approve', | ||||
|  |                                   help="Signup information's of user") | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class SignupApproval(models.Model): | ||||
|  |     """Store Information's of User""" | ||||
|  |     _name = 'signup.approval' | ||||
|  |     _description = "Approval Request Details" | ||||
|  | 
 | ||||
|  |     login = fields.Char(string='Email', help="login details of user") | ||||
|  |     name = fields.Char(string='Name', help="name of the user") | ||||
|  |     approved_date = fields.Datetime(string='Approved Date', copy=False, | ||||
|  |                                     help="Approval date of signup request") | ||||
|  |     for_approval_menu = fields.Boolean(string='For Approval menu', | ||||
|  |                                        help="Check the request is approved") | ||||
|  | 
 | ||||
|  |     def action_approve_login(self): | ||||
|  |         """To approve the request from website""" | ||||
|  |         self.env['res.users'].create({ | ||||
|  |             'name': self.name, | ||||
|  |             'login': self.login, | ||||
|  |         }) | ||||
|  |         self.env.ref('base.group_user').users.ids.pop() | ||||
| 
 | 
| @ -0,0 +1,8 @@ | |||||
|  | <?xml version="1.0" encoding="UTF-8" ?> | ||||
|  | <odoo> | ||||
|  | <!--   Creating security group for user --> | ||||
|  |     <record id="group_approval_channel" model="res.groups"> | ||||
|  |         <field name="name">Signup Approval User</field> | ||||
|  |         <field name="users" eval="[(4, ref('base.user_admin'))]"/> | ||||
|  |     </record> | ||||
|  | </odoo> | ||||
| After Width: | Height: | Size: 3.6 KiB | 
| After Width: | Height: | Size: 310 B | 
| After Width: | Height: | Size: 1.3 KiB | 
| After Width: | Height: | Size: 1.4 KiB | 
| After Width: | Height: | Size: 576 B | 
| After Width: | Height: | Size: 733 B | 
| After Width: | Height: | Size: 911 B | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 673 B | 
| After Width: | Height: | Size: 878 B | 
| After Width: | Height: | Size: 653 B | 
| After Width: | Height: | Size: 905 B | 
| After Width: | Height: | Size: 839 B | 
| After Width: | Height: | Size: 427 B | 
| After Width: | Height: | Size: 627 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 988 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 1.5 KiB | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.9 KiB | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 2.1 KiB | 
| After Width: | Height: | Size: 4.4 KiB | 
| After Width: | Height: | Size: 589 B | 
| After Width: | Height: | Size: 3.4 KiB | 
| After Width: | Height: | Size: 1.7 KiB | 
| After Width: | Height: | Size: 2.3 KiB | 
| After Width: | Height: | Size: 967 B | 
| After Width: | Height: | Size: 1.6 KiB | 
| After Width: | Height: | Size: 3.8 KiB | 
| After Width: | Height: | Size: 5.0 KiB | 
| After Width: | Height: | Size: 49 KiB | 
| After Width: | Height: | Size: 47 KiB | 
| After Width: | Height: | Size: 54 KiB | 
| After Width: | Height: | Size: 50 KiB | 
| After Width: | Height: | Size: 44 KiB | 
| After Width: | Height: | Size: 53 KiB | 
| After Width: | Height: | Size: 276 KiB | 
| After Width: | Height: | Size: 186 KiB | 
| After Width: | Height: | Size: 121 KiB | 
| After Width: | Height: | Size: 130 KiB | 
| After Width: | Height: | Size: 113 KiB | 
| After Width: | Height: | Size: 152 KiB | 
| After Width: | Height: | Size: 161 KiB | 
| After Width: | Height: | Size: 139 KiB | 
| After Width: | Height: | Size: 143 KiB | 
| After Width: | Height: | Size: 86 KiB | 
| After Width: | Height: | Size: 136 KiB | 
| After Width: | Height: | Size: 119 KiB | 
| After Width: | Height: | Size: 156 KiB | 
| After Width: | Height: | Size: 93 KiB | 
| After Width: | Height: | Size: 11 KiB | 
| @ -0,0 +1,550 @@ | |||||
|  | <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: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" | ||||
|  |         class="mr-2"> | ||||
|  |         <i class="fa fa-check mr-1"></i>Enterprise | ||||
|  |       </div> | ||||
|  |     </div> | ||||
|  |   </div> | ||||
|  |   <!-- END OF TITLE BAR --> | ||||
|  |   <div class="container"> | ||||
|  |     <div class="row"> | ||||
|  |       <div class="col-sm-12 col-md-12 col-lg-12"> | ||||
|  |         <h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">Website Signup Approval</h1> | ||||
|  |         <p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">Manage User Signup Approval Process</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"> | ||||
|  |     This module helps to approve/reject user signup request | ||||
|  |   </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;">User Signup Approval Process when a new User Signup</span> | ||||
|  |     </div> | ||||
|  |      <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;">Upload Documents of User from Website</span> | ||||
|  |     </div> | ||||
|  |      <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;">Approve/Reject User Signup Requests</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;">Signup Approval process in Website | ||||
|  |       </h3> | ||||
|  |       <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Go to Sales Configuration Settings, Choose Customer Account as Free sign up, Enable Signup Approval and add attachment types</p> | ||||
|  |       <img src="assets/screenshots/website.png" class="img-thumbnail"> | ||||
|  |       <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Upload User Documents</p> | ||||
|  |       <img src="assets/screenshots/website1.png" class="img-thumbnail"> | ||||
|  |       <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">After completed the signup form click on the signup button.An approval request is generated</p> | ||||
|  |       <img src="assets/screenshots/website33.png" class="img-thumbnail"> | ||||
|  |       <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">When we try to login with that login and password we get an error</p> | ||||
|  |       <img src="assets/screenshots/website3.png" class="img-thumbnail"> | ||||
|  |        <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Clicking on the Portal Approval menu in the Users we can see the approval request</p> | ||||
|  |       <img src="assets/screenshots/website4.png" class="img-thumbnail"> | ||||
|  |       <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">We can Approve/Reject the signup request</p> | ||||
|  |       <img src="assets/screenshots/website333.png" class="img-thumbnail"> | ||||
|  |       <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">After clicking the Approve button we can see the request is approved now</p> | ||||
|  |       <img src="assets/screenshots/website_66.png" class="img-thumbnail"> | ||||
|  |        <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">A portal user is created in Users</p> | ||||
|  |       <img src="assets/screenshots/website7.png" class="img-thumbnail"> | ||||
|  |       <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Now we can login that user in to the portal</p> | ||||
|  |       <img src="assets/screenshots/website8.png" class="img-thumbnail"> | ||||
|  |       <img src="assets/screenshots/website9.png" class="img-thumbnail"> | ||||
|  |     </div> | ||||
|  | 
 | ||||
|  |   </div> | ||||
|  | </div> | ||||
|  | <!-- END OF SCREENSHOTS SECTION --> | ||||
|  | 
 | ||||
|  | <!-- RELATED PRODUCTS --> | ||||
|  |    <div class="row"> | ||||
|  |         <div class="col-lg-12 d-flex flex-column justify-content-center" | ||||
|  |              style="text-align: center; padding: 2.5rem 1rem !important;"> | ||||
|  |             <h2 style="color: #212529 !important;">Suggested Products</h2> | ||||
|  |             <hr | ||||
|  |                     style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/> | ||||
|  | 
 | ||||
|  |             <div id="demo1" class="row carousel slide" data-ride="carousel"> | ||||
|  |                 <!-- The slideshow --> | ||||
|  |                 <div class="carousel-inner" style="padding: 30px;"> | ||||
|  |                     <div class="carousel-item active" style="min-height: 198.656px;"> | ||||
|  |                         <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | ||||
|  |                             <a href="https://apps.odoo.com/apps/modules/16.0/login_user_detail/" target="_blank"> | ||||
|  |                                 <div style="border-radius:10px"> | ||||
|  |                                     <img class="img img-responsive center-block" | ||||
|  |                                          style="border-radius: 0px;" | ||||
|  |                                          src="./assets/modules/module01.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/web_login_styles/" target="_blank"> | ||||
|  |                                 <div style="border-radius:10px"> | ||||
|  |                                     <img class="img img-responsive center-block" | ||||
|  |                                          style="border-radius: 0px;" | ||||
|  |                                          src="./assets/modules/module02.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/multi_branch_base/" target="_blank"> | ||||
|  |                                 <div style="border-radius:10px"> | ||||
|  |                                     <img class="img img-responsive center-block" | ||||
|  |                                          style="border-radius: 0px;" | ||||
|  |                                          src="./assets/modules/module03.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/employee_documents_expiry/" | ||||
|  |                                target="_blank"> | ||||
|  |                                 <div style="border-radius:10px"> | ||||
|  |                                     <img class="img img-responsive center-block" | ||||
|  |                                          style="border-radius: 0px;" | ||||
|  |                                          src="./assets/modules/module04.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/sale_report_advanced/" target="_blank"> | ||||
|  |                                 <div style="border-radius:10px"> | ||||
|  |                                     <img class="img img-responsive center-block" | ||||
|  |                                          style="border-radius: 0px;" | ||||
|  |                                          src="./assets/modules/module05.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/subscription_package/" target="_blank"> | ||||
|  |                                 <div style="border-radius:10px"> | ||||
|  |                                     <img class="img img-responsive center-block" | ||||
|  |                                          style="border-radius: 0px;" | ||||
|  |                                          src="./assets/modules/module06.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> | ||||
|  |                 </a> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <!-- END OF SUGGESTED PRODUCTS --> | ||||
|  | 
 | ||||
|  |     <!-- OUR SERVICES --> | ||||
|  |     <section class="container" style="margin-top: 6rem !important;"> | ||||
|  |         <div class="row"> | ||||
|  |             <div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> | ||||
|  |                 <h2 style="color: #212529 !important;">Our Services</h2> | ||||
|  |                 <hr | ||||
|  |                         style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/> | ||||
|  |             </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: #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> | ||||
|  |     </section> | ||||
|  |     <!-- END OF END OF OUR SERVICES --> | ||||
|  | 
 | ||||
|  |     <!-- OUR INDUSTRIES --> | ||||
|  |     <section class="container" style="margin-top: 6rem !important;"> | ||||
|  |         <div class="row"> | ||||
|  |             <div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> | ||||
|  |                 <h2 style="color: #212529 !important;">Our Industries</h2> | ||||
|  |                 <hr | ||||
|  |                         style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-3"> | ||||
|  |                 <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                      style="background-color: #f6f8f9 !important; border-radius: 10px; 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: 10px; 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: 10px; 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: 10px; 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: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                     <img src="./assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |                     <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                         E-commerce & Website | ||||
|  |                     </h5> | ||||
|  |                     <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                         Mobile | ||||
|  |                         friendly, | ||||
|  |                         awe-inspiring product pages</p> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-3"> | ||||
|  |                 <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                      style="background-color: #f6f8f9 !important; border-radius: 10px; 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: 10px; 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: 10px; 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> | ||||
|  |     </section> | ||||
|  | 
 | ||||
|  |     <!-- END OF END OF OUR INDUSTRIES --> | ||||
|  | 
 | ||||
|  |     <!-- FOOTER --> | ||||
|  |     <!-- Footer Section --> | ||||
|  |     <section class="container" style="margin: 5rem auto 2rem;"> | ||||
|  |         <div class="row" style="max-width:1540px;"> | ||||
|  |             <div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> | ||||
|  |                 <h2 style="color: #212529 !important;">Need Help?</h2> | ||||
|  |                 <hr | ||||
|  |                         style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  | 
 | ||||
|  |         <!-- Contact Cards --> | ||||
|  |         <div class="row d-flex justify-content-center align-items-center" | ||||
|  |              style="max-width:1540px; margin: 0 auto 2rem auto;"> | ||||
|  | 
 | ||||
|  |             <div class="col-lg-12" style="padding: 0rem 3rem 2rem; border-radius: 10px; margin-right: 3rem; "> | ||||
|  | 
 | ||||
|  |                 <div class="row mt-4"> | ||||
|  |                     <div class="col-lg-6"> | ||||
|  |                         <a href="mailto:odoo@cybrosys.com" target="_blank" class="btn btn-block mb-2 deep_hover" | ||||
|  |                            style="text-decoration: none;  background-color: #4d4d4d; color: #FFF;  border-radius: 4px;"><i | ||||
|  |                                 class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a> | ||||
|  |                     </div> | ||||
|  |                     <div class="col-lg-6"> | ||||
|  |                         <a href="https://api.whatsapp.com/send?phone=918606827707" target="_blank" | ||||
|  |                            class="btn btn-block mb-2 deep_hover" | ||||
|  |                            style="text-decoration: none;  background-color: #25D366; color: #FFF;  border-radius: 4px;"><i | ||||
|  |                                 class="fa fa-whatsapp mr-2"></i>+91 86068 27707</a> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |         </div> | ||||
|  |         <!-- End of Contact Cards --> | ||||
|  |     </section> | ||||
|  |     <!-- Footer --> | ||||
|  |     <section class="oe_container" style="padding: 2rem 3rem 1rem;"> | ||||
|  |         <div class="row" style="max-width:1540px; margin: 0 auto; margin-right: 3rem; "> | ||||
|  |             <!-- Logo --> | ||||
|  |             <div class="col-lg-12 d-flex justify-content-center align-items-center" style="margin-top: 3rem;"> | ||||
|  |                 <img src="https://www.cybrosys.com/images/logo.png" width="200px" height="auto"/> | ||||
|  |             </div> | ||||
|  |             <!-- End of Logo --> | ||||
|  |             <div class="col-lg-12"> | ||||
|  |                 <hr | ||||
|  |                         style="margin-top: 3rem;background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;"> | ||||
|  |                 <!-- End of Footer Section --> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </section> | ||||
|  |     <!-- END OF FOOTER --> | ||||
|  | 
 | ||||
|  | </div> | ||||
| @ -0,0 +1,42 @@ | |||||
|  | odoo.define('website_signup_approval.signup', function (require) { | ||||
|  |     'use strict'; | ||||
|  | 
 | ||||
|  |     var publicWidget = require('web.public.widget'); | ||||
|  |     var MySignUpForm = publicWidget.registry.SignUpForm.extend({ | ||||
|  |         _onSubmit: function (el) { | ||||
|  |         /** | ||||
|  |         *Override onSubmit function for sending approval request | ||||
|  |         */ | ||||
|  |         var file = this.$('.get_attach'); | ||||
|  |         var email = this.$('input[name=login]').val(); | ||||
|  |         var username = this.$('input[name=name]').val(); | ||||
|  |         var password = this.$('input[name=password]').val(); | ||||
|  |         //Get signup information's from user
 | ||||
|  |         const data_array = [] | ||||
|  |         var count=0; | ||||
|  |         for (var doc = 0; doc < file.length; doc++) { | ||||
|  |               var SelectedFile = new FileReader(); | ||||
|  |               var data = SelectedFile.readAsDataURL(file[doc].files[0]); | ||||
|  |               SelectedFile.addEventListener('load', (e) => { | ||||
|  |                  count++; | ||||
|  |                  const data = e.target.result; | ||||
|  |                  data_array.push(data) | ||||
|  |                  if (count===(file.length)){ | ||||
|  |                  //Pass parameters to the route
 | ||||
|  |                     this._rpc({ | ||||
|  |                       route: '/web/signup/approve', | ||||
|  |                       params: { | ||||
|  |                           'data':data_array, | ||||
|  |                           'email':email, | ||||
|  |                           'username':username, | ||||
|  |                           'password':password | ||||
|  |                       }, | ||||
|  |                     }); | ||||
|  |                  } | ||||
|  |               }); | ||||
|  |             } | ||||
|  |         }, | ||||
|  |     }); | ||||
|  |     publicWidget.registry.MySignUpForm = MySignUpForm; | ||||
|  |     return MySignUpForm; | ||||
|  | }); | ||||
| @ -0,0 +1,18 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||
|  | <odoo> | ||||
|  |     <!--    Create Approval Request Success Form--> | ||||
|  |     <template id="approval_form_success" name="Approval Request"> | ||||
|  |         <t t-call="website.layout"> | ||||
|  |             <div id="wrap"> | ||||
|  |                 <div class="container"> | ||||
|  |                     <div class="col-md-12"> | ||||
|  |                         <div class="alert alert-success"> | ||||
|  |                             Thank you, We get your signup request, we will | ||||
|  |                             contact you shortly.. | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  |         </t> | ||||
|  |     </template> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,32 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||
|  | <odoo> | ||||
|  |     <!--    Create document types of user--> | ||||
|  |     <record id="document_attachment_action" model="ir.actions.act_window"> | ||||
|  |         <field name="name">Attachments</field> | ||||
|  |         <field name="res_model">document.attachment</field> | ||||
|  |         <field name="view_mode">tree,form</field> | ||||
|  |     </record> | ||||
|  |     <record id="document_attachment_view_tree" model="ir.ui.view"> | ||||
|  |         <field name="name">document.attachment.view.tree</field> | ||||
|  |         <field name="model">document.attachment</field> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <tree> | ||||
|  |                 <field name="document"/> | ||||
|  |             </tree> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  |     <record id="document_attachment_view_form" model="ir.ui.view"> | ||||
|  |         <field name="name">document.attachment.view.form</field> | ||||
|  |         <field name="model">document.attachment</field> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <form> | ||||
|  |                 <group> | ||||
|  |                     <field name="document"/> | ||||
|  |                 </group> | ||||
|  |             </form> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  |     <menuitem id="document_attachment_menu" name="Attachment" | ||||
|  |               parent="sale.menu_sales_config" | ||||
|  |               action="document_attachment_action"/> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,35 @@ | |||||
|  | <?xml version="1.0" encoding="UTF-8" ?> | ||||
|  | <odoo> | ||||
|  |     <!--        Inherited res config settings model--> | ||||
|  |     <record id="res_config_settings_view_form" model="ir.ui.view"> | ||||
|  |         <field name="name"> | ||||
|  |             res.config.settings.view.form.inherit.website.signup.approval | ||||
|  |         </field> | ||||
|  |         <field name="model">res.config.settings</field> | ||||
|  |         <field name="inherit_id" ref="sale.res_config_settings_view_form"/> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <xpath expr="//div[@id='pricing_setting_container']" position="inside"> | ||||
|  | 
 | ||||
|  |                 <div class="col-12 col-lg-6 o_setting_box" | ||||
|  |                      id="signup_approval" attrs="{'invisible': [ | ||||
|  |                                        ('auth_signup_uninvited','=','b2b') | ||||
|  |                                ]}"> | ||||
|  |                     <div class="o_setting_left_pane"> | ||||
|  |                         <field name="auth_signup_approval"/> | ||||
|  |                     </div> | ||||
|  |                     <div class="o_setting_right_pane"> | ||||
|  |                         <label for="auth_signup_approval" readonly="false"/> | ||||
|  |                         <div class="text-muted"> | ||||
|  |                             Attachment Data | ||||
|  |                         </div> | ||||
|  |                         <div class="content-group mt16" | ||||
|  |                              attrs="{'invisible': [('auth_signup_approval', '=', False)]}"> | ||||
|  |                             <field name="documents_ids" | ||||
|  |                                    widget="many2many_tags"/> | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |             </xpath> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,71 @@ | |||||
|  | <?xml version="1.0" encoding="UTF-8" ?> | ||||
|  | <odoo> | ||||
|  |     <!--       Create approval request information of user --> | ||||
|  |     <record id="res_user_approve_view_tree" model="ir.ui.view"> | ||||
|  |         <field name="name">res.users.approve.view.tree</field> | ||||
|  |         <field name="model">res.users.approve</field> | ||||
|  |         <field name="mode">primary</field> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <tree> | ||||
|  |                 <field name="name"/> | ||||
|  |                 <field name="email"/> | ||||
|  |                 <field name="password"/> | ||||
|  |             </tree> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  |     <record id="res_user_approve_view_form" model="ir.ui.view"> | ||||
|  |         <field name="name">res.users.approve.view.form</field> | ||||
|  |         <field name="model">res.users.approve</field> | ||||
|  |         <field name="mode">primary</field> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <form string="Form"> | ||||
|  |                 <header> | ||||
|  |                     <button name="action_approve_login" type="object" | ||||
|  |                             class="oe_highlight" string="Approve Login"/> | ||||
|  |                     <button name="action_reject_login" type="object" | ||||
|  |                             class="oe_highlight" string="Reject Login"/> | ||||
|  |                 </header> | ||||
|  |                 <sheet> | ||||
|  |                     <widget name="web_ribbon" title="APPROVED" | ||||
|  |                             bg_color="bg-success" | ||||
|  |                             attrs="{'invisible': [('for_approval_menu', '=', False)]}"/> | ||||
|  |                     <group> | ||||
|  |                         <group> | ||||
|  |                             <field name="for_approval_menu"/> | ||||
|  |                         </group> | ||||
|  |                         <group> | ||||
|  |                             <field name="name" readonly="1"/> | ||||
|  |                         </group> | ||||
|  |                         <group> | ||||
|  |                             <field name="email" readonly="1"/> | ||||
|  |                         </group> | ||||
|  |                         <group> | ||||
|  |                             <field name="password" readonly="1"/> | ||||
|  |                         </group> | ||||
|  |                     </group> | ||||
|  |                     <notebook> | ||||
|  |                         <page string='Documents'> | ||||
|  |                             <field name="attachment_ids" readonly="1"> | ||||
|  |                                 <tree> | ||||
|  |                                     <field name="attachments" | ||||
|  |                                            options="{'no_quick_create': True,'size': [600, 600]}" | ||||
|  |                                            widget="image" | ||||
|  |                                            class="oe_avatar"/> | ||||
|  |                                 </tree> | ||||
|  |                             </field> | ||||
|  |                         </page> | ||||
|  |                     </notebook> | ||||
|  |                 </sheet> | ||||
|  |             </form> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  |     <record id="res_users_approve_action" model="ir.actions.act_window"> | ||||
|  |         <field name="name">Portal Approval</field> | ||||
|  |         <field name="res_model">res.users.approve</field> | ||||
|  |         <field name="type">ir.actions.act_window</field> | ||||
|  |         <field name="view_mode">tree,form</field> | ||||
|  |         <field name="view_id" ref="res_user_approve_view_tree"/> | ||||
|  |     </record> | ||||
|  |     <menuitem id="res_users_approve_menu" parent="base.menu_users" | ||||
|  |               action="res_users_approve_action"/> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,33 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||
|  | <odoo> | ||||
|  |     <!--    These templates are used to sent approval request with uploaded documents--> | ||||
|  |     <template id="document_fields" inherit_id="auth_signup.fields"> | ||||
|  |         <xpath expr="//input[@name='confirm_password']" position="after"> | ||||
|  |             <t t-if="request.env['ir.config_parameter'].sudo().get_param('website_signup_approval.auth_signup_approval') == 'True'"> | ||||
|  |                 <t t-set="get_attachments_set" | ||||
|  |                    t-value="request.env['ir.config_parameter'].sudo().get_param('website_signup_approval.documents_ids')"/> | ||||
|  |                 <t t-if="get_attachments_set"> | ||||
|  |                     <t t-foreach="json.loads(get_attachments_set)" t-as="res"> | ||||
|  |                         <t t-set="get_attachments_values" | ||||
|  |                            t-value="request.env['document.attachment'].sudo().search([('id', '=', res)])"/> | ||||
|  |                         <table class="table"> | ||||
|  |                             <t t-foreach="get_attachments_values" t-as="rec"> | ||||
|  |                                 <tr> | ||||
|  |                                     <th> | ||||
|  |                                         <span t-esc="rec.document" | ||||
|  |                                               class="oe_inline"/> | ||||
|  |                                     </th> | ||||
|  |                                     <td> | ||||
|  |                                         <input type="file" | ||||
|  |                                                class="oe_import_file get_attach" | ||||
|  |                                                required="1"/> | ||||
|  |                                     </td> | ||||
|  |                                 </tr> | ||||
|  |                             </t> | ||||
|  |                         </table> | ||||
|  |                     </t> | ||||
|  |                 </t> | ||||
|  |             </t> | ||||
|  |         </xpath> | ||||
|  |     </template> | ||||
|  | </odoo> | ||||