From 13c128ce771a9ff57f5070ab222ffd9329eeeae9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phan=20Sainl=C3=A9ger?= Date: Tue, 3 May 2022 15:04:47 +0200 Subject: [PATCH 1/9] [UPD] Make team_id field required only in membership registration add a mandatory team_id field in the membership invoice wizard --- lcc_members/wizard/membership_invoice.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lcc_members/wizard/membership_invoice.py b/lcc_members/wizard/membership_invoice.py index 8b4a9226..c4806571 100644 --- a/lcc_members/wizard/membership_invoice.py +++ b/lcc_members/wizard/membership_invoice.py @@ -6,11 +6,18 @@ class MembershipInvoice(models.TransientModel): _inherit = "membership.invoice" + @api.model + def _default_team_id(self): + return ( + self.env["res.partner"].browse(self._context.get("active_ids")).team_id.id + ) + team_id = fields.Many2one( "crm.team", string="Local group", required=True, domain=[("local_group", "=", True)], + default=_default_team_id, ) def membership_invoice(self): From 5f23dbc18e4a27ac1e68986a84f0359b284faf51 Mon Sep 17 00:00:00 2001 From: Nicolas JEUDY Date: Mon, 9 May 2022 15:39:28 +0200 Subject: [PATCH 2/9] [NEW] add new l10n_fr_lcc_members module (FIXES: #173) --- l10n_fr_lcc_members/__init__.py | 2 + l10n_fr_lcc_members/__manifest__.py | 89 +++++++++++++++++ l10n_fr_lcc_members/i18n/fr.po | 97 +++++++++++++++++++ l10n_fr_lcc_members/models/__init__.py | 3 + l10n_fr_lcc_members/models/account_invoice.py | 23 +++++ l10n_fr_lcc_members/models/account_journal.py | 10 ++ .../report/invoice_report_templates.xml | 29 ++++++ l10n_fr_lcc_members/views/account_journal.xml | 16 +++ 8 files changed, 269 insertions(+) create mode 100644 l10n_fr_lcc_members/__init__.py create mode 100644 l10n_fr_lcc_members/__manifest__.py create mode 100644 l10n_fr_lcc_members/i18n/fr.po create mode 100644 l10n_fr_lcc_members/models/__init__.py create mode 100644 l10n_fr_lcc_members/models/account_invoice.py create mode 100644 l10n_fr_lcc_members/models/account_journal.py create mode 100644 l10n_fr_lcc_members/report/invoice_report_templates.xml create mode 100644 l10n_fr_lcc_members/views/account_journal.xml diff --git a/l10n_fr_lcc_members/__init__.py b/l10n_fr_lcc_members/__init__.py new file mode 100644 index 00000000..a0fdc10f --- /dev/null +++ b/l10n_fr_lcc_members/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import models diff --git a/l10n_fr_lcc_members/__manifest__.py b/l10n_fr_lcc_members/__manifest__.py new file mode 100644 index 00000000..bb899d5c --- /dev/null +++ b/l10n_fr_lcc_members/__manifest__.py @@ -0,0 +1,89 @@ +{ + "name": "l10n_fr_lcc_members", + "summary": """ + French default params for lcc + """, + "description": """ + ::image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +=================== +l10n_fr_lcc_members +=================== + +Module add some default setup for french lcc company + +Installation +============ + +Just install l10n_fr_lcc_members, all dependencies will be installed by default. + +Configuration +============= + +No configuration needed on this addon. + +Usage +===== + +Details TODO + +Known issues / Roadmap +====================== + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* Lokavaluto: `Icon `_. + +Contributors +------------ + +* Stéphan SAINLEGER +* Nicolas JEUDY +* Lokavaluto Teams + +Funders +------- + +The development of this module has been financially supported by: + +* Lokavaluto (https://lokavaluto.fr) +* Mycéliandre (https://myceliandre.fr) +* Elabore (https://elabore.coop) + +Maintainer +---------- + +This module is maintained by LOKAVALUTO. + +LOKAVALUTO, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and ecosystem for local complementary currency organizations. + +""", + "author": "Lokavaluto", + "website": "https://lokavaluto.fr", + "category": "Accounting", + "version": "12.0.1.0.1", + # any module necessary for this one to work correctly + "depends": ["base", "account"], + # always loaded + "data": [ + "views/account_journal.xml", + "report/invoice_report_templates.xml", + ], + # only loaded in demonstration mode + "demo": [], +} diff --git a/l10n_fr_lcc_members/i18n/fr.po b/l10n_fr_lcc_members/i18n/fr.po new file mode 100644 index 00000000..72721071 --- /dev/null +++ b/l10n_fr_lcc_members/i18n/fr.po @@ -0,0 +1,97 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_fr_lcc_members +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-05-09 13:44+0000\n" +"PO-Revision-Date: 2022-05-09 13:44+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_fr_lcc_members +#: model_terms:ir.ui.view,arch_db:l10n_fr_lcc_members.report_invoice_document_inherit_sale +msgid "Invoice Date:" +msgstr "Date de la facture :" + +#. module: l10n_fr_lcc_members +#: model_terms:ir.ui.view,arch_db:l10n_fr_lcc_members.report_invoice_document_inherit_sale +msgid "Receipt Date:" +msgstr "Date du reçu:" + +#. module: l10n_fr_lcc_members +#: model_terms:ir.ui.view,arch_db:l10n_fr_lcc_members.report_invoice_document_inherit_sale +msgid "Cancelled Invoice" +msgstr "Facture annulée" + +#. module: l10n_fr_lcc_members +#: model_terms:ir.ui.view,arch_db:l10n_fr_lcc_members.report_invoice_document_inherit_sale +msgid "Cancelled Receipt" +msgstr "Reçu annulé" + +#. module: l10n_fr_lcc_members +#: model:ir.model,name:l10n_fr_lcc_members.model_res_partner +msgid "Contact" +msgstr "Contact" + +#. module: l10n_fr_lcc_members +#: model_terms:ir.ui.view,arch_db:l10n_fr_lcc_members.report_invoice_document_inherit_sale +msgid "Credit Note" +msgstr "Avoir" + +#. module: l10n_fr_lcc_members +#: model_terms:ir.ui.view,arch_db:l10n_fr_lcc_members.report_invoice_document_inherit_sale +msgid "Draft Invoice" +msgstr "Facture en brouillon" + +#. module: l10n_fr_lcc_members +#: code:addons/l10n_fr_lcc_members/models/account_invoice.py:17 +#: model_terms:ir.ui.view,arch_db:l10n_fr_lcc_members.report_invoice_document_inherit_sale +#, python-format +msgid "Draft Receipt" +msgstr "Reçu Brouillon" + +#. module: l10n_fr_lcc_members +#: model:ir.model,name:l10n_fr_lcc_members.model_account_invoice +#: model_terms:ir.ui.view,arch_db:l10n_fr_lcc_members.report_invoice_document_inherit_sale +msgid "Invoice" +msgstr "Facture" + +#. module: l10n_fr_lcc_members +#: model:ir.model,name:l10n_fr_lcc_members.model_account_journal +msgid "Journal" +msgstr "Journal" + +#. module: l10n_fr_lcc_members +#: model:ir.model.fields,field_description:l10n_fr_lcc_members.field_account_bank_statement_import_journal_creation__is_receipt +#: model:ir.model.fields,field_description:l10n_fr_lcc_members.field_account_journal__is_receipt +msgid "Print Receipt" +msgstr "Imprimer un reçu" + +#. module: l10n_fr_lcc_members +#: model_terms:ir.ui.view,arch_db:l10n_fr_lcc_members.report_invoice_document_inherit_sale +msgid "Receipt" +msgstr "Reçu" + +#. module: l10n_fr_lcc_members +#: code:addons/l10n_fr_lcc_members/models/account_invoice.py:20 +#, python-format +msgid "Receipt - %s" +msgstr "Reçu - %s" + +#. module: l10n_fr_lcc_members +#: model_terms:ir.ui.view,arch_db:l10n_fr_lcc_members.report_invoice_document_inherit_sale +msgid "Vendor Bill" +msgstr "Facture fournisseur" + +#. module: l10n_fr_lcc_members +#: model_terms:ir.ui.view,arch_db:l10n_fr_lcc_members.report_invoice_document_inherit_sale +msgid "Vendor Credit Note" +msgstr "Avoir de fournisseur" + diff --git a/l10n_fr_lcc_members/models/__init__.py b/l10n_fr_lcc_members/models/__init__.py new file mode 100644 index 00000000..94a2b638 --- /dev/null +++ b/l10n_fr_lcc_members/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +from . import account_journal +from . import account_invoice diff --git a/l10n_fr_lcc_members/models/account_invoice.py b/l10n_fr_lcc_members/models/account_invoice.py new file mode 100644 index 00000000..abfc44a3 --- /dev/null +++ b/l10n_fr_lcc_members/models/account_invoice.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- + +from odoo import models, fields, api, _ +from odoo.exceptions import UserError + + +class AccountInvoice(models.Model): + _inherit = "account.invoice" + + @api.multi + def _get_report_base_filename(self): + self.ensure_one() + if self.journal_id.is_receipt: + return ( + self.type == "out_invoice" + and self.state == "draft" + and _("Draft Receipt") + or self.type == "out_invoice" + and self.state in ("open", "in_payment", "paid") + and _("Receipt - %s") % (self.number) + ) + else: + super(AccountInvoice, self)._get_report_base_filename() diff --git a/l10n_fr_lcc_members/models/account_journal.py b/l10n_fr_lcc_members/models/account_journal.py new file mode 100644 index 00000000..85d38a68 --- /dev/null +++ b/l10n_fr_lcc_members/models/account_journal.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- + +from odoo import models, fields, api +from odoo.exceptions import UserError + + +class AccountJournal(models.Model): + _inherit = "account.journal" + + is_receipt = fields.Boolean("Print Receipt") diff --git a/l10n_fr_lcc_members/report/invoice_report_templates.xml b/l10n_fr_lcc_members/report/invoice_report_templates.xml new file mode 100644 index 00000000..04a3e6ab --- /dev/null +++ b/l10n_fr_lcc_members/report/invoice_report_templates.xml @@ -0,0 +1,29 @@ + + + + \ No newline at end of file diff --git a/l10n_fr_lcc_members/views/account_journal.xml b/l10n_fr_lcc_members/views/account_journal.xml new file mode 100644 index 00000000..8cd39c11 --- /dev/null +++ b/l10n_fr_lcc_members/views/account_journal.xml @@ -0,0 +1,16 @@ + + + + + account.journal.form + account.journal + + + + + + + + \ No newline at end of file From 345efbdc9e29b4887281fc95b3e0a76d4d001818 Mon Sep 17 00:00:00 2001 From: Nicolas JEUDY Date: Tue, 10 May 2022 15:34:31 +0200 Subject: [PATCH 3/9] [FIX] remove public profile when main was removed - Fixes #211 --- lcc_members/models/res_partner.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lcc_members/models/res_partner.py b/lcc_members/models/res_partner.py index 6db8ffeb..3113acfa 100644 --- a/lcc_members/models/res_partner.py +++ b/lcc_members/models/res_partner.py @@ -156,6 +156,7 @@ class res_partner(models.Model): compute="_compute_public_profile_id", string="Public profile", store=True, + ondelete="cascade", ) odoo_user_id = fields.Many2one( "res.users", From 3e03b07c67a96e80f02f7fb7537b9cb91dd1bb21 Mon Sep 17 00:00:00 2001 From: Nicolas JEUDY Date: Tue, 10 May 2022 15:38:23 +0200 Subject: [PATCH 4/9] [FIX] remove cyclos token res_config_settings - Fixes #194 --- lcc_cyclos_base/models/res_config_settings.py | 5 -- .../views/res_config_settings_view.xml | 51 ++++++++----------- 2 files changed, 21 insertions(+), 35 deletions(-) diff --git a/lcc_cyclos_base/models/res_config_settings.py b/lcc_cyclos_base/models/res_config_settings.py index b77c18a5..a79db842 100644 --- a/lcc_cyclos_base/models/res_config_settings.py +++ b/lcc_cyclos_base/models/res_config_settings.py @@ -9,11 +9,6 @@ class ResConfigSettings(models.TransientModel): readonly=False, string="Url for cyclos serveur", ) - cyclos_client_token = fields.Char( - related="company_id.cyclos_client_token", - readonly=False, - string="Client token auth for cyclos server", - ) cyclos_server_login = fields.Char( related="company_id.cyclos_server_login", diff --git a/lcc_cyclos_base/views/res_config_settings_view.xml b/lcc_cyclos_base/views/res_config_settings_view.xml index b76c56f4..cf9188cf 100644 --- a/lcc_cyclos_base/views/res_config_settings_view.xml +++ b/lcc_cyclos_base/views/res_config_settings_view.xml @@ -3,52 +3,43 @@ res.config.settings.view.form.inherit.cyclos res.config.settings - - + +

Cyclos export configuration

-
-
- Cyclos server url -
- -
+
+
+ Cyclos server url +
+
+
-
-
- Cyclos Client Token -
- -
+
+
+ Cyclos Server Login +
+
+
-
-
- Cyclos Server Login -
- -
-
-
-
-
-
- Cyclos Server Password -
- -
+
+
+ Cyclos Server Password +
+
+
- + \ No newline at end of file From 0d1aba7de1a3e1e54549c468fcfeceba15e0d689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phan=20Sainl=C3=A9ger?= Date: Tue, 10 May 2022 23:47:13 +0200 Subject: [PATCH 5/9] [CLEAN] Type on files name --- lcc_members_portal/__manifest__.py | 4 ++-- ..._registration.xml => portal_organization_registration.xml} | 0 ...ganization_renewal.xml => portal_organization_renewal.xml} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename lcc_members_portal/views/{portal_oganization_registration.xml => portal_organization_registration.xml} (100%) rename lcc_members_portal/views/{portal_oganization_renewal.xml => portal_organization_renewal.xml} (100%) diff --git a/lcc_members_portal/__manifest__.py b/lcc_members_portal/__manifest__.py index 20cc9cfa..cb9b6ed2 100644 --- a/lcc_members_portal/__manifest__.py +++ b/lcc_members_portal/__manifest__.py @@ -89,8 +89,8 @@ "data": [ "views/portal_my_home.xml", "views/portal_private_registration.xml", - "views/portal_oganization_registration.xml", - "views/portal_oganization_renewal.xml", + "views/portal_organization_registration.xml", + "views/portal_organization_renewal.xml", "views/portal_affiliation_request.xml", "views/product_template_view.xml", "views/crm_lead_view.xml", diff --git a/lcc_members_portal/views/portal_oganization_registration.xml b/lcc_members_portal/views/portal_organization_registration.xml similarity index 100% rename from lcc_members_portal/views/portal_oganization_registration.xml rename to lcc_members_portal/views/portal_organization_registration.xml diff --git a/lcc_members_portal/views/portal_oganization_renewal.xml b/lcc_members_portal/views/portal_organization_renewal.xml similarity index 100% rename from lcc_members_portal/views/portal_oganization_renewal.xml rename to lcc_members_portal/views/portal_organization_renewal.xml From 5a9347cacaab16ef5bf93babdc866c5d7d33f809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phan=20Sainl=C3=A9ger?= Date: Wed, 11 May 2022 08:05:54 +0200 Subject: [PATCH 6/9] [UPD] Add email-pro field in portal organization registrationf form --- .../controllers/portal_organization_registration.py | 1 + lcc_members_portal/models/crm_lead.py | 1 + .../views/portal_organization_registration.xml | 11 ++++++++--- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lcc_members_portal/controllers/portal_organization_registration.py b/lcc_members_portal/controllers/portal_organization_registration.py index f8fc41bd..ce3e4b1b 100644 --- a/lcc_members_portal/controllers/portal_organization_registration.py +++ b/lcc_members_portal/controllers/portal_organization_registration.py @@ -25,6 +25,7 @@ class PortalOrganizationRegistration(CustomerPortal): "opening_time", "discount", "function", + "email_pro", "phone_pro", "message_from_candidate", ] diff --git a/lcc_members_portal/models/crm_lead.py b/lcc_members_portal/models/crm_lead.py index 59e7becd..5b0c5f81 100644 --- a/lcc_members_portal/models/crm_lead.py +++ b/lcc_members_portal/models/crm_lead.py @@ -32,6 +32,7 @@ class Lead(models.Model): _POSITION_PROFILE_FIELDS = [ "function", + "email_pro", "phone_pro", ] diff --git a/lcc_members_portal/views/portal_organization_registration.xml b/lcc_members_portal/views/portal_organization_registration.xml index ddc27d3f..305e0311 100644 --- a/lcc_members_portal/views/portal_organization_registration.xml +++ b/lcc_members_portal/views/portal_organization_registration.xml @@ -143,16 +143,21 @@ Your position in the organisation
-
- +
+ - +
+
+ + + +


From bb874d79b6a649e5aa8a801dcd5a31be04fc5060 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phan=20Sainl=C3=A9ger?= Date: Tue, 10 May 2022 23:48:01 +0200 Subject: [PATCH 7/9] [NEW] Add organization application form page from website An organization can apply to membership without creation of portal account --- lcc_members/models/res_partner.py | 34 ++- lcc_members_portal/__manifest__.py | 1 + lcc_members_portal/controllers/__init__.py | 1 + .../website_organization_registration.py | 129 +++++++++ lcc_members_portal/models/crm_lead.py | 58 ++-- lcc_members_portal/views/crm_lead_view.xml | 2 + .../website_organization_registration.xml | 258 ++++++++++++++++++ 7 files changed, 449 insertions(+), 34 deletions(-) create mode 100644 lcc_members_portal/controllers/website_organization_registration.py create mode 100644 lcc_members_portal/views/website_organization_registration.xml diff --git a/lcc_members/models/res_partner.py b/lcc_members/models/res_partner.py index 3113acfa..b0c1e89e 100644 --- a/lcc_members/models/res_partner.py +++ b/lcc_members/models/res_partner.py @@ -255,21 +255,25 @@ def _compute_odoo_user_id(self): @api.model def create(self, vals): - """When creating, if partner_profile is not defined by a previous process, the defaut value is Main""" - modified_self = self._basecontact_check_context("create") - if not vals.get("partner_profile") and not vals.get("contact_id"): - profile = self.env.ref("lcc_members.partner_profile_main").read()[0] - vals["partner_profile"] = profile["id"] - res = super(res_partner, modified_self).create(vals) - if ( - res.partner_profile.ref == "partner_profile_main" - and not res.public_profile_id - ): - res.create_public_profile() - if res.partner_profile.ref == "partner_profile_public": - # Public profile can't be customer or supplier. Only main or position profiles can - res.customer = False - res.supplier = False + if vals["type"] == "contact": + """When creating, if partner_profile is not defined by a previous process, the defaut value is Main""" + modified_self = self._basecontact_check_context("create") + if not vals.get("partner_profile") and not vals.get("contact_id"): + profile = self.env.ref("lcc_members.partner_profile_main").read()[0] + vals["partner_profile"] = profile["id"] + res = super(res_partner, modified_self).create(vals) + if ( + res.partner_profile.ref == "partner_profile_main" + and not res.public_profile_id + ): + res.create_public_profile() + if res.partner_profile.ref == "partner_profile_public": + # Public profile can't be customer or supplier. Only main or position profiles can + res.customer = False + res.supplier = False + else: + modified_self = self._basecontact_check_context("create") + res = super(res_partner, modified_self).create(vals) return res @api.constrains("email") diff --git a/lcc_members_portal/__manifest__.py b/lcc_members_portal/__manifest__.py index cb9b6ed2..244835ba 100644 --- a/lcc_members_portal/__manifest__.py +++ b/lcc_members_portal/__manifest__.py @@ -90,6 +90,7 @@ "views/portal_my_home.xml", "views/portal_private_registration.xml", "views/portal_organization_registration.xml", + "views/website_organization_registration.xml", "views/portal_organization_renewal.xml", "views/portal_affiliation_request.xml", "views/product_template_view.xml", diff --git a/lcc_members_portal/controllers/__init__.py b/lcc_members_portal/controllers/__init__.py index 764bf6d2..3fb26996 100644 --- a/lcc_members_portal/controllers/__init__.py +++ b/lcc_members_portal/controllers/__init__.py @@ -3,6 +3,7 @@ from . import portal_private_registration from . import portal_organization_registration +from . import website_organization_registration from . import portal_organization_renewal from . import portal_affiliation_request from . import custom_website_sale diff --git a/lcc_members_portal/controllers/website_organization_registration.py b/lcc_members_portal/controllers/website_organization_registration.py new file mode 100644 index 00000000..b6ae9c57 --- /dev/null +++ b/lcc_members_portal/controllers/website_organization_registration.py @@ -0,0 +1,129 @@ +# Copyright 2020 Lokavaluto () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import http +from odoo.http import request + + +class WebsiteOrganizationRegistration(http.Controller): + _ORGANIZATION_REGISTRATION_FIELDS = [ + "company_name", + "commercial_company_name", + "website_description", + "street", + "street2", + "city", + "zipcode", + "country_id", + # "team_id", # TODO: issue occuring when this field is added. INVESTIGATION NEEDED + "phone", + "company_email", + "website_url", + "industry_id", + "detailed_activity", + "reasons_choosing_mlc", + "opening_time", + "discount", + "contact_name", + "function", + "email_pro", + "phone_pro", + "message_from_candidate", + ] + + # Variable to update to add other fields in child classes + _EXTRA_FIELDS = [] + + def get_organization_membership_product(self): + product_obj = request.env["product.template"] + product = product_obj.sudo().get_organization_membership_product( + request.website.company_id.id + ) + return product + + @http.route( + ["/web/organization_registration"], + type="http", + auth="public", + website=True, + ) + def portal_organization_registration(self, access_token=None, redirect=None, **kw): + + product = self.get_organization_membership_product() + titles = request.env["res.partner.title"].sudo().search([]) + countries = request.env["res.country"].sudo().search([]) + teams = ( + request.env["crm.team"] + .sudo() + .search( + [ + ("local_group", "=", True), + ("company_id", "=", request.website.company_id.id), + ] + ) + ) + industries = request.env["res.partner.industry"].sudo().search([]) + error = dict() + error_message = [] + + values = { + "product": product, + "total_membership": product.list_price, + "dynamic_price": product.dynamic_price, + "titles": titles, + "countries": countries, + "industries": industries, + "teams": teams, + "error": error, + "error_message": error_message, + } + + return request.render( + "lcc_members_portal.website_organization_registration", values + ) + + @http.route( + ["/web/send_request"], + type="http", + auth="public", + website=True, + ) + def send_registration_request(self, **kwargs): + # Create a new lead + values = {} + for field in self._ORGANIZATION_REGISTRATION_FIELDS: + if kwargs.get(field): + values[field] = kwargs.pop(field) + for field in self._EXTRA_FIELDS: + if kwargs.get(field): + values[field] = kwargs.pop(field) + values["name"] = "[NEW APPLICATION] " + values["company_name"] + values["partner_id"] = 2 # OdooBot-s ID + values["company_id"] = request.website.company_id.id + values["type"] = "opportunity" + values["lead_type"] = "membership_web_application" + values.update({"zip": values.pop("zipcode", "")}) + values.update({"website": values.pop("website_url", "")}) + values["accept_coupons"] = kwargs.get("accept_coupons", "off") == "on" + values["accept_digital_currency"] = ( + kwargs.get("accept_digital_currency", "off") == "on" + ) + values["from_website"] = True + values["itinerant"] = kwargs.get("itinerant", "off") == "on" + values["want_newsletter_subscription"] = ( + kwargs.get("want_newsletter_subscription", "off") == "on" + ) + values["accept_policy"] = kwargs.get("accept_policy", "off") == "on" + if float(kwargs.get("total_membership", False)): + values["total_membership"] = float(kwargs.get("total_membership")) + else: + values[ + "total_membership" + ] = self.get_organization_membership_product().list_price + + lead = request.env["crm.lead"].sudo().create(values) + lead.team_id = kwargs.pop( + "team_id" + ) # TODO: see remark above concerning team_id + return request.render( + "lcc_members_portal.website_organization_registration_saved", {} + ) diff --git a/lcc_members_portal/models/crm_lead.py b/lcc_members_portal/models/crm_lead.py index 5b0c5f81..ce524a65 100644 --- a/lcc_members_portal/models/crm_lead.py +++ b/lcc_members_portal/models/crm_lead.py @@ -32,6 +32,11 @@ class Lead(models.Model): _POSITION_PROFILE_FIELDS = [ "function", + "street", + "street2", + "city", + "zip", + "country_id", "email_pro", "phone_pro", ] @@ -62,6 +67,7 @@ class Lead(models.Model): accept_digital_currency = fields.Boolean(string=_("Accept digital currency")) accept_coupons = fields.Boolean(string=_("Accept coupons")) itinerant = fields.Boolean(string=_("Itinerant")) + email_pro = fields.Char(string=_("Email Pro")) function = fields.Char(string=_("Job Position")) phone_pro = fields.Char(string=_("Phone Pro")) want_newsletter_subscription = fields.Boolean( @@ -82,9 +88,9 @@ class Lead(models.Model): domain=[("membership", "=", True), ("type", "=", "service")], ) invoice_url = fields.Char(string=_("Invoice link")) + from_website = fields.Boolean(default=False) application_accepted = fields.Boolean(default=False) application_refused = fields.Boolean(default=False) - affiliated_company = fields.Many2one( "res.partner", string="Affiliated organization", @@ -133,24 +139,38 @@ def action_validate_organization_application(self): main_partner = self.env["res.partner"].create(values) # Organization's public profile is automaticcaly created - # Organization's contact's position partner creation - values = {} - for field_name in self._POSITION_PROFILE_FIELDS: - values[field_name] = self._get_field_value(field_name) - values["name"] = self.contact_name - values["is_company"] = False - values["contact_id"] = self.partner_id.id - values["parent_id"] = main_partner.id - values["partner_profile"] = ( - self.env["partner.profile"] - .search([("ref", "=", "partner_profile_position")], limit=1) - .id - ) - values["type"] = "contact" - values["edit_structure_main_profile"] = True - values["edit_structure_public_profile"] = True - values.update({"phone": values.pop("phone_pro", "")}) - self.env["res.partner"].create(values) + if self.from_website: + # Organization created from website, we create only a billing contact + values = {} + for field_name in self._POSITION_PROFILE_FIELDS: + values[field_name] = self._get_field_value(field_name) + values["name"] = self.contact_name + values.update({"phone": values.pop("phone_pro", "")}) + values.update({"email": values.pop("email_pro", "")}) + values["is_company"] = False + values["type"] = "other" + values["parent_id"] = main_partner.id + self.env["res.partner"].create(values) + else: + # Organization's contact's position partner creation + values = {} + for field_name in self._POSITION_PROFILE_FIELDS: + values[field_name] = self._get_field_value(field_name) + values["name"] = self.contact_name + values["is_company"] = False + values["contact_id"] = self.partner_id.id + values["parent_id"] = main_partner.id + values["partner_profile"] = ( + self.env["partner.profile"] + .search([("ref", "=", "partner_profile_position")], limit=1) + .id + ) + values["type"] = "contact" + values["edit_structure_main_profile"] = True + values["edit_structure_public_profile"] = True + values.update({"phone": values.pop("phone_pro", "")}) + values.update({"email": values.pop("email_pro", "")}) + self.env["res.partner"].create(values) # Create sale order and invoice to finalize the registration process values = {} diff --git a/lcc_members_portal/views/crm_lead_view.xml b/lcc_members_portal/views/crm_lead_view.xml index 7eb8b9fb..d35b798e 100644 --- a/lcc_members_portal/views/crm_lead_view.xml +++ b/lcc_members_portal/views/crm_lead_view.xml @@ -93,8 +93,10 @@ + + diff --git a/lcc_members_portal/views/website_organization_registration.xml b/lcc_members_portal/views/website_organization_registration.xml new file mode 100644 index 00000000..74d734ea --- /dev/null +++ b/lcc_members_portal/views/website_organization_registration.xml @@ -0,0 +1,258 @@ + + +