From 1cc3135990b37cd443f7eb49fe51b85aeb22783b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phan=20Sainl=C3=A9ger?= Date: Sat, 14 May 2022 22:49:56 +0200 Subject: [PATCH] [UPD] Code refactoring to ease addons customization --- lcc_members_portal/controllers/auth_signup.py | 4 +- .../controllers/custom_portal.py | 1 + .../controllers/portal_affiliation_request.py | 49 ++--- .../portal_organization_registration.py | 70 ++++--- .../portal_organization_renewal.py | 72 ++++--- .../portal_private_registration.py | 34 +-- .../website_organization_registration.py | 66 +++--- lcc_members_portal/models/crm_lead.py | 194 +++++++++--------- 8 files changed, 257 insertions(+), 233 deletions(-) diff --git a/lcc_members_portal/controllers/auth_signup.py b/lcc_members_portal/controllers/auth_signup.py index 0fd45a53..689a0f66 100644 --- a/lcc_members_portal/controllers/auth_signup.py +++ b/lcc_members_portal/controllers/auth_signup.py @@ -18,11 +18,12 @@ def do_signup(self, qcontext): if qcontext.get("firstname") or qcontext.get("lastname"): """Shared helper that creates a res.partner out of a token""" - # The only change compared to the parent function is the addition of the keys of the new field + # Addition of the keys of the new fields values = { key: qcontext.get(key) for key in ("login", "lastname", "password", "firstname") } + # Name computation depending on the values if qcontext.get("firstname") and qcontext.get("lastname"): values["name"] = ( qcontext.get("firstname") + " " + qcontext.get("lastname") @@ -31,6 +32,7 @@ def do_signup(self, qcontext): values["name"] = qcontext.get("firstname") elif qcontext.get("lastname"): values["name"] = qcontext.get("lastname") + # Next lines are the same than in parent function if not values: raise UserError(_("The form was not properly filled in.")) if values.get("password") != qcontext.get("confirm_password"): diff --git a/lcc_members_portal/controllers/custom_portal.py b/lcc_members_portal/controllers/custom_portal.py index 1e99c310..5ea95e7e 100644 --- a/lcc_members_portal/controllers/custom_portal.py +++ b/lcc_members_portal/controllers/custom_portal.py @@ -8,6 +8,7 @@ class CustomCustomerPortal(CustomerPortal): @route(["/my/account"], type="http", auth="user", website=True) def account(self, redirect=None, **post): response = super(CustomCustomerPortal, self).account(redirect, **post) + # If email is modified, the user is logged out if post and request.httprequest.method == "POST": error, error_message = self.details_form_validate(post) if not error: diff --git a/lcc_members_portal/controllers/portal_affiliation_request.py b/lcc_members_portal/controllers/portal_affiliation_request.py index bdfbd4cd..da0d2c12 100644 --- a/lcc_members_portal/controllers/portal_affiliation_request.py +++ b/lcc_members_portal/controllers/portal_affiliation_request.py @@ -5,7 +5,7 @@ from odoo.addons.portal.controllers.portal import CustomerPortal -class PortalOrganizationRegistration(CustomerPortal): +class PortalOrganizationAffiliation(CustomerPortal): _AFFILIATION_REQUEST_FIELDS = [ "company_name", "function", @@ -38,11 +38,9 @@ def _affiliation_get_page_view_values(self, partner, access_token, **kwargs): ) def portal_affiliation_request(self, access_token=None, redirect=None, **kw): partner = request.env.user.partner_id - values = self._affiliation_get_page_view_values(partner, access_token, **kw) error = dict() error_message = [] - values.update( { "error": error, @@ -51,6 +49,28 @@ def portal_affiliation_request(self, access_token=None, redirect=None, **kw): ) return request.render("lcc_members_portal.portal_affiliation_request", values) + def _compute_affiliation_form_data(self, data): + partner = request.env.user.partner_id + values = { + "partner_id": partner.id, + "type": "opportunity", + "lead_type": "affiliation_request", + "edit_structure_main_profile": data.get("manage_main_profile", "off") + == "on", + "edit_structure_public_profile": data.get("manage_public_profile", "off") + == "on", + } + for field in self._AFFILIATION_REQUEST_FIELDS: + if data.get(field): + values[field] = data.pop(field) + for field in self._EXTRA_FIELDS: + if data.get(field): + values[field] = data.pop(field) + values["name"] = ( + "[AFFILIATION] " + partner.name + " in " + values["company_name"] + ) + return values + @http.route( ["/affiliation/send_request"], type="http", @@ -59,26 +79,7 @@ def portal_affiliation_request(self, access_token=None, redirect=None, **kw): ) def send_affiliation_request(self, **kwargs): # Create a new lead - values = {} - for field in self._AFFILIATION_REQUEST_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) - partner = request.env.user.partner_id - values["name"] = ( - "[AFFILIATION] " + partner.name + " in " + values["company_name"] - ) - values["partner_id"] = partner.id - values["type"] = "opportunity" - values["lead_type"] = "affiliation_request" - values["edit_structure_main_profile"] = ( - kwargs.get("manage_main_profile", "off") == "on" - ) - values["edit_structure_public_profile"] = ( - kwargs.get("manage_public_profile", "off") == "on" - ) + values = self._compute_affiliation_form_data(kwargs) lead = request.env["crm.lead"].sudo().create(values) - lead.team_id = partner.team_id + lead.team_id = request.env.user.partner_id.team_id return request.render("lcc_members_portal.portal_affiliation_request_saved", {}) diff --git a/lcc_members_portal/controllers/portal_organization_registration.py b/lcc_members_portal/controllers/portal_organization_registration.py index ce3e4b1b..ae3e34e9 100644 --- a/lcc_members_portal/controllers/portal_organization_registration.py +++ b/lcc_members_portal/controllers/portal_organization_registration.py @@ -105,6 +105,44 @@ def portal_organization_registration(self, access_token=None, redirect=None, **k "lcc_members_portal.portal_organization_registration", values ) + def _compute_organization_form_data(self, data): + partner = request.env.user.partner_id + values = { + "partner_id": partner.id, + "company_id": partner.company_id.id, + "type": "opportunity", + "lead_type": "membership_web_application", + "accept_coupons": data.get("accept_coupons", "off") == "on", + "accept_digital_currency": data.get("accept_digital_currency", "off") + == "on", + "itinerant": data.get("itinerant", "off") == "on", + "want_newsletter_subscription": data.get( + "want_newsletter_subscription", "off" + ) + == "on", + "accept_policy": data.get("accept_policy", "off") == "on", + } + + if float(data.get("total_membership", False)): + values["total_membership"] = float(data.get("total_membership")) + else: + values[ + "total_membership" + ] = self.get_organization_membership_product().list_price + + for field in self._ORGANIZATION_REGISTRATION_FIELDS: + if data.get(field): + values[field] = data.pop(field) + for field in self._EXTRA_FIELDS: + if data.get(field): + values[field] = data.pop(field) + + values["name"] = "[NEW APPLICATION] " + values["company_name"] + values.update({"zip": values.pop("zipcode", "")}) + values.update({"website": values.pop("website_url", "")}) + + return values + @http.route( ["/membership/send_request"], type="http", @@ -113,37 +151,7 @@ def portal_organization_registration(self, access_token=None, redirect=None, **k ) 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"] - main_partner = request.env.user.partner_id - values["partner_id"] = main_partner.id - values["company_id"] = main_partner.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["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 - + values = self._compute_organization_form_data(kwargs) lead = request.env["crm.lead"].sudo().create(values) lead.team_id = kwargs.pop( "team_id" diff --git a/lcc_members_portal/controllers/portal_organization_renewal.py b/lcc_members_portal/controllers/portal_organization_renewal.py index cfe7075e..e54a321f 100644 --- a/lcc_members_portal/controllers/portal_organization_renewal.py +++ b/lcc_members_portal/controllers/portal_organization_renewal.py @@ -77,6 +77,44 @@ def portal_organization_renewal(self, access_token=None, redirect=None, **kw): ) return request.render("lcc_members_portal.portal_organization_renewal", values) + def _compute_renewal_form_data(self, data): + partner = request.env.user.partner_id + values = { + "partner_id": partner.id, + "company_id": partner.company_id.id, + "type": "opportunity", + "lead_type": "renewal_request", + "accept_coupons": data.get("accept_coupons", "off") == "on", + "accept_digital_currency": data.get("accept_digital_currency", "off") + == "on", + "itinerant": data.get("itinerant", "off") == "on", + "want_newsletter_subscription": data.get( + "want_newsletter_subscription", "off" + ) + == "on", + "accept_policy": data.get("accept_policy", "off") == "on", + } + + if float(data.get("total_membership", False)): + values["total_membership"] = float(data.get("total_membership")) + else: + values[ + "total_membership" + ] = self.get_organization_membership_product().list_price + + for field in self._ORGANIZATION_RENEWAL_FIELDS: + if data.get(field): + values[field] = data.pop(field) + for field in self._EXTRA_FIELDS: + if data.get(field): + values[field] = data.pop(field) + + values["name"] = ("[RENEWAL] " + values["company_name"],) + values.update({"zip": values.pop("zipcode", "")}) + values.update({"website": values.pop("website_url", "")}) + + return values + @http.route( ["/membership/organization_renewal_request"], type="http", @@ -85,39 +123,9 @@ def portal_organization_renewal(self, access_token=None, redirect=None, **kw): ) def send_renewal_request(self, **kwargs): # Create a new lead - values = {} - for field in self._ORGANIZATION_RENEWAL_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"] = "[RENEWAL] " + values["company_name"] - main_partner = request.env.user.partner_id - values["partner_id"] = main_partner.id - values["company_id"] = main_partner.company_id.id - values["type"] = "opportunity" - values["lead_type"] = "renewal_request" - 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["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 - + values = self._compute_renewal_form_data(kwargs) lead = request.env["crm.lead"].sudo().create(values) - lead.team_id = main_partner.team_id + lead.team_id = request.env.user.partner_id.team_id return request.render( "lcc_members_portal.portal_organization_renewal_saved", {} ) diff --git a/lcc_members_portal/controllers/portal_private_registration.py b/lcc_members_portal/controllers/portal_private_registration.py index f11430e5..76fd3c20 100644 --- a/lcc_members_portal/controllers/portal_private_registration.py +++ b/lcc_members_portal/controllers/portal_private_registration.py @@ -80,31 +80,35 @@ def portal_private_registration(self, access_token=None, redirect=None, **kw): ) return request.render("lcc_members_portal.portal_private_registration", values) - @http.route( - ["/membership/subscribe_member"], - type="http", - auth="public", - website=True, - ) - def membership_subscription(self, **kwargs): - # Update the partner data - main_partner = request.env.user.partner_id + def _compute_private_form_data(self, data): values = {} for field in self._PRIVATE_REGISTRATION_FIELDS: - if kwargs.get(field): - values[field] = kwargs.pop(field) + if data.get(field): + values[field] = data.pop(field) for field in self._EXTRA_FIELDS: - if kwargs.get(field): - values[field] = kwargs.pop(field) + if data.get(field): + values[field] = data.pop(field) values["lastname"] = values["lastname"].upper() values["firstname"] = values["firstname"].title() values["name"] = values["firstname"] + " " + values["lastname"] values.update({"zip": values.pop("zipcode", "")}) values["want_newsletter_subscription"] = ( - kwargs.get("want_newsletter_subscription", "off") == "on" + data.get("want_newsletter_subscription", "off") == "on" ) - values["accept_policy"] = kwargs.get("accept_policy", "off") == "on" + values["accept_policy"] = data.get("accept_policy", "off") == "on" + return values + + @http.route( + ["/membership/subscribe_member"], + type="http", + auth="public", + website=True, + ) + def membership_subscription(self, **kwargs): + # Update the partner data + main_partner = request.env.user.partner_id + values = self._compute_private_form_data(kwargs) main_partner.sudo().write(values) # Create sale order to finalize the registration process diff --git a/lcc_members_portal/controllers/website_organization_registration.py b/lcc_members_portal/controllers/website_organization_registration.py index b6ae9c57..6ff95a3a 100644 --- a/lcc_members_portal/controllers/website_organization_registration.py +++ b/lcc_members_portal/controllers/website_organization_registration.py @@ -81,6 +81,40 @@ def portal_organization_registration(self, access_token=None, redirect=None, **k "lcc_members_portal.website_organization_registration", values ) + def _compute_web_form_data(self, data): + values = { + "partner_id": 2, # OdooBot-s ID + "company_id": request.website.company_id.id, + "type": "opportunity", + "lead_type": "membership_web_application", + "accept_coupons": data.get("accept_coupons", "off") == "on", + "accept_digital_currency": data.get("accept_digital_currency", "off") + == "on", + "from_website": True, + "itinerant": data.get("itinerant", "off") == "on", + "want_newsletter_subscription": data.get( + "want_newsletter_subscription", "off" + ) + == "on", + "accept_policy": data.get("accept_policy", "off") == "on", + } + if float(data.get("total_membership", False)): + values["total_membership"] = float(data.get("total_membership")) + else: + values[ + "total_membership" + ] = self.get_organization_membership_product().list_price + for field in self._ORGANIZATION_REGISTRATION_FIELDS: + if data.get(field): + values[field] = data.pop(field) + for field in self._EXTRA_FIELDS: + if data.get(field): + values[field] = data.pop(field) + values["name"] = "[NEW APPLICATION] " + values["company_name"] + values.update({"zip": values.pop("zipcode", "")}) + values.update({"website": values.pop("website_url", "")}) + return values + @http.route( ["/web/send_request"], type="http", @@ -89,37 +123,7 @@ def portal_organization_registration(self, access_token=None, redirect=None, **k ) 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 - + values = self._compute_web_form_data(kwargs) lead = request.env["crm.lead"].sudo().create(values) lead.team_id = kwargs.pop( "team_id" diff --git a/lcc_members_portal/models/crm_lead.py b/lcc_members_portal/models/crm_lead.py index ce524a65..142638da 100644 --- a/lcc_members_portal/models/crm_lead.py +++ b/lcc_members_portal/models/crm_lead.py @@ -115,6 +115,80 @@ def _get_field_value(self, fname): else: return self[fname] + def _get_values_main_partner(self): + values = { + "name": self.company_name, + "company_name": self.commercial_company_name, + "is_company": True, + "partner_profile": self.env["partner.profile"] + .search([("ref", "=", "partner_profile_main")], limit=1) + .id, + "type": "contact", + } + for field_name in self._MAIN_PROFILE_FIELDS: + values[field_name] = self._get_field_value(field_name) + values.update({"email": values.pop("company_email", "")}) + return values + + def _get_values_other_contact(self, main_partner): + values = { + "name": self.contact_name, + "is_company": False, + "type": "other", + "parent_id": main_partner.id, + } + for field_name in self._POSITION_PROFILE_FIELDS: + values[field_name] = self._get_field_value(field_name) + values.update({"phone": values.pop("phone_pro", "")}) + values.update({"email": values.pop("email_pro", "")}) + return values + + def _get_values_position_partner(self, main_partner): + values = { + "name": self.contact_name, + "is_company": False, + "contact_id": self.partner_id.id, + "parent_id": main_partner.id, + "partner_profile": self.env["partner.profile"] + .search([("ref", "=", "partner_profile_position")], limit=1) + .id, + "type": "contact", + "edit_structure_main_profile": True, + "edit_structure_public_profile": True, + } + for field_name in self._POSITION_PROFILE_FIELDS: + values[field_name] = self._get_field_value(field_name) + values.update({"phone": values.pop("phone_pro", "")}) + values.update({"email": values.pop("email_pro", "")}) + return values + + def _get_sale_order_values(self, partner): + values = { + "partner_id": partner.id, + "team_id": self.team_id.id, + "company_id": partner.company_id.id, + } + return values + + def _get_membership_values(self, sale_order): + values = { + "member_product_id": self.membership_product_id.id, + "total_membership": self.total_membership, + "order_id": sale_order.id, + } + return values + + def _create_organization_so_and_invoice(self, partner): + values = self._get_sale_order_values(partner) + sale_order = self.env["sale.order"].create(values) + values = self._get_membership_values(sale_order) + sale_order.sudo().create_membership(values) + sale_order.sudo().action_confirm() + invoice_id = sale_order.sudo().action_invoice_create()[0] + invoice = self.env["account.invoice"].browse(invoice_id) + invoice.action_invoice_open() + self.invoice_url = invoice.get_portal_url() + @api.multi def action_validate_organization_application(self): if not self.membership_product_id: @@ -123,71 +197,22 @@ def action_validate_organization_application(self): ) # Organization's main partner creation - values = {} - for field_name in self._MAIN_PROFILE_FIELDS: - values[field_name] = self._get_field_value(field_name) - values["name"] = self.company_name - values["company_name"] = self.commercial_company_name - values["is_company"] = True - values["partner_profile"] = ( - self.env["partner.profile"] - .search([("ref", "=", "partner_profile_main")], limit=1) - .id - ) - values["type"] = "contact" - values.update({"email": values.pop("company_email", "")}) + values = self._get_values_main_partner() main_partner = self.env["res.partner"].create(values) # Organization's public profile is automaticcaly created 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 + # Organization created from website, we create only an "other" contact + values = self._get_values_other_contact(main_partner) 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", "")}) + values = self._get_values_position_partner(main_partner) self.env["res.partner"].create(values) # Create sale order and invoice to finalize the registration process - values = {} - values["partner_id"] = main_partner.id - values["team_id"] = self.team_id.id - values["company_id"] = main_partner.company_id.id - sale_order = self.env["sale.order"].create(values) - values = {} - values["member_product_id"] = self.membership_product_id.id - values["total_membership"] = self.total_membership - values["order_id"] = sale_order.id - sale_order.sudo().create_membership(values) - sale_order.sudo().action_confirm() - invoice_id = sale_order.sudo().action_invoice_create()[0] - invoice = self.env["account.invoice"].browse(invoice_id) - invoice.action_invoice_open() - self.invoice_url = invoice.get_portal_url() + self._create_organization_so_and_invoice(main_partner) + self.application_accepted = True # Redirect to the main profile @@ -208,6 +233,17 @@ def action_refuse_organization_application(self): self.application_refused = True return + def _get_renewal_values_main_partner(self): + values = { + "name": self.commercial_company_name, + } + for field_name in self._MAIN_PROFILE_FIELDS: + values[field_name] = self._get_field_value(field_name) + company_email = values.pop("company_email", "") + if company_email and self.partner_id.email != company_email: + values.update({"email": company_email}) + return values + @api.multi def action_validate_renewal_request(self): if not self.membership_product_id: @@ -216,37 +252,12 @@ def action_validate_renewal_request(self): ) # Organization's main partner update - values = {} - for field_name in self._MAIN_PROFILE_FIELDS: - values[field_name] = self._get_field_value(field_name) - values["name"] = self.commercial_company_name - company_email = values.pop("company_email", "") - if company_email and self.partner_id.email != company_email: - values.update({"email": company_email}) + values = self._get_renewal_values_main_partner() self.partner_id.write(values) # Create sale order and invoice to finalize the registration process - values = {} - values["partner_id"] = self.partner_id.id - values["team_id"] = self.team_id.id - values["company_id"] = self.partner_id.company_id.id - sale_order = self.env["sale.order"].create(values) - values = {} - values["member_product_id"] = self.membership_product_id.id - values["total_membership"] = self.total_membership - values["order_id"] = sale_order.id - sale_order.create_membership(values) - sale_order.action_confirm() - invoice_id = sale_order.action_invoice_create()[0] - invoice = self.env["account.invoice"].browse(invoice_id) - invoice.action_invoice_open() - self.invoice_url = ( - self.env["website"] - .search([("company_id", "=", self.partner_id.company_id.id)], limit=1) - .domain - + "/my/invoices/" - + str(invoice_id) - ) + self._create_organization_so_and_invoice(self.partner_id) + self.renewal_accepted = True return @@ -259,22 +270,7 @@ def action_refuse_renewal_request(self): def action_validate_affiliation_request(self): if self.affiliated_company: # 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"] = self.affiliated_company.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 = self._get_values_position_partner(self.affiliated_company) position_partner = self.env["res.partner"].create(values) self.affiliation_accepted = True