From 5f6311f71173762f1b6e32301f03a70d51e602bd Mon Sep 17 00:00:00 2001 From: Antoine B Date: Wed, 28 Aug 2024 15:21:01 +0200 Subject: [PATCH 1/4] Merge branch 'fix-again-org-migr-script' --- lib/ProductOpener/CRM.pm | 5 +---- .../2024_08_validate_and_sync_crm_existing_orgs.pl | 6 +++++- 2 files changed, 6 insertions(+), 5 deletions(-) mode change 100644 => 100755 scripts/migrations/2024_08_validate_and_sync_crm_existing_orgs.pl diff --git a/lib/ProductOpener/CRM.pm b/lib/ProductOpener/CRM.pm index 711119bde67dd..358608dddc524 100644 --- a/lib/ProductOpener/CRM.pm +++ b/lib/ProductOpener/CRM.pm @@ -132,6 +132,7 @@ sub sync_org_with_crm($org_ref, $salesperson_user_id) { my $my_admin = retrieve_user($salesperson_user_id); $log->debug("store_org", {myuser => $my_admin}) if $log->is_debug(); + $partner_id ||= $company_id; my $opportunity_id = create_onboarding_opportunity("$org_ref->{name} - new", $company_id, $partner_id, $my_admin->{email}); defined $opportunity_id or die "Failed to create opportunity"; @@ -173,8 +174,6 @@ sub find_or_create_contact($user_ref) { my $contact_id = find_contact($user_ref); if (defined $contact_id) { return if not link_user_with_contact($user_ref, $contact_id); - add_category_to_partner($user_ref, 'Producer'); - update_partner_country($user_ref); } else { $contact_id = create_contact($user_ref); @@ -347,8 +346,6 @@ sub find_or_create_company($org_ref, $contact_id = undef) { my $company_id = find_company($org_ref, $contact_id); if (defined $company_id) { return if not link_org_with_company($org_ref, $company_id); - add_category_to_partner($org_ref, 'Producer'); - update_partner_country($org_ref); } else { $company_id = create_company($org_ref); diff --git a/scripts/migrations/2024_08_validate_and_sync_crm_existing_orgs.pl b/scripts/migrations/2024_08_validate_and_sync_crm_existing_orgs.pl old mode 100644 new mode 100755 index 5c3189893d77c..e50e5d3661cc4 --- a/scripts/migrations/2024_08_validate_and_sync_crm_existing_orgs.pl +++ b/scripts/migrations/2024_08_validate_and_sync_crm_existing_orgs.pl @@ -30,6 +30,8 @@ use ProductOpener::Orgs qw( list_org_ids retrieve_org store_org send_rejection_email); use ProductOpener::CRM qw( init_crm_data sync_org_with_crm ); use ProductOpener::Store qw( retrieve store ); +use ProductOpener::Data qw( :all ); +use Log::Any::Adapter 'TAP'; use Encode; binmode(STDOUT, ":encoding(UTF-8)"); @@ -60,7 +62,7 @@ open($checkpoint, '+<:encoding(UTF-8)', $checkpoint_file) or die "Could not open file: $!"; my %orgs_processed = map {chomp; $_ => 1} <$checkpoint>; -foreach my $org_id (keys %orgs_to_accept) { +foreach my $org_id (sort list_org_ids()) { $org_id = decode utf8 => $org_id; my $org_ref = retrieve_org($org_id); @@ -91,6 +93,8 @@ } store("$BASE_DIRS{ORGS}/" . $org_ref->{org_id} . ".sto", $org_ref); + my $orgs_collection = get_orgs_collection(); + $orgs_collection->replace_one({"org_id" => $org_ref->{org_id}}, $org_ref, {upsert => 1}); print $checkpoint "$org_id\n"; } From 6cbece377b1dc90d15d7cf58b1078c273e2fc540 Mon Sep 17 00:00:00 2001 From: Antoine B Date: Wed, 28 Aug 2024 16:41:48 +0200 Subject: [PATCH 2/4] fix org contact info --- lib/ProductOpener/CRM.pm | 15 ++++++++++----- lib/ProductOpener/Orgs.pm | 11 ++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/lib/ProductOpener/CRM.pm b/lib/ProductOpener/CRM.pm index 358608dddc524..f3e35254e2845 100644 --- a/lib/ProductOpener/CRM.pm +++ b/lib/ProductOpener/CRM.pm @@ -148,10 +148,10 @@ sub sync_org_with_crm($org_ref, $salesperson_user_id) { } 1; } or do { - $org_ref->{valid_org} = 'unreviewed'; $log->error("store_org", {error => $@}) if $log->is_error(); + return; }; - return; + return 1; } =head2 find_or_create_contact ($user_ref) @@ -208,6 +208,8 @@ sub link_user_with_contact($user_ref, $contact_id) { [$contact_id], { x_off_username => $user_ref->{userid}, + email => $user_ref->{email}, + phone => $user_ref->{phone}, category_id => [[$commands{link}, $crm_data->{category}{Producer}]], $country_id ? (country_id => $country_id) : () } @@ -380,6 +382,9 @@ sub link_org_with_company($org_ref, $company_id) { { x_off_org_id => $org_ref->{org_id}, category_id => [[$commands{link}, $crm_data->{category}{Producer}]], + phone => $org_ref->{commercial_service}{phone}, + email => $org_ref->{commercial_service}{email}, + website => $org_ref->{link}, x_off_main_contact => $user_ref->{crm_user_id}, $country_id ? (country_id => $country_id) : () } @@ -477,9 +482,9 @@ sub create_company ($org_ref) { my $company = { name => $org_ref->{name}, - phone => $org_ref->{phone}, - email => $org_ref->{email}, - website => $org_ref->{website}, + phone => $org_ref->{commercial_service}{phone}, + email => $org_ref->{commercial_service}{email}, + website => $org_ref->{link}, category_id => [$crm_data->{category}{Producer}], # "Producer" category id in Odoo is_company => 1, x_off_org_id => $org_ref->{org_id}, diff --git a/lib/ProductOpener/Orgs.pm b/lib/ProductOpener/Orgs.pm index 59838d729ba48..42904ecdd9b53 100644 --- a/lib/ProductOpener/Orgs.pm +++ b/lib/ProductOpener/Orgs.pm @@ -171,9 +171,10 @@ sub store_org ($org_ref) { if ( (defined $previous_org_ref) && $previous_org_ref->{valid_org} ne 'accepted' - && $org_ref->{valid_org} eq 'accepted') + && $org_ref->{valid_org} eq 'accepted' + && not sync_org_with_crm($org_ref, $User_id)) { - sync_org_with_crm($org_ref, $User_id); + $org_ref->{valid_org} = 'unreviewed'; } if ( defined $org_ref->{crm_org_id} @@ -185,13 +186,13 @@ sub store_org ($org_ref) { $org_ref->{main_contact} = $previous_org_ref->{main_contact}; } + # Store to file + store("$BASE_DIRS{ORGS}/" . $org_ref->{org_id} . ".sto", $org_ref); + # Store to MongoDB my $orgs_collection = get_orgs_collection(); $orgs_collection->replace_one({"org_id" => $org_ref->{org_id}}, $org_ref, {upsert => 1}); - # Store to file - store("$BASE_DIRS{ORGS}/" . $org_ref->{org_id} . ".sto", $org_ref); - return; } From c4b7afb2ecf898f3926007b1caaa91b8a2d01a8c Mon Sep 17 00:00:00 2001 From: Antoine B <56827368+4nt0ineB@users.noreply.github.com> Date: Wed, 28 Aug 2024 16:49:15 +0200 Subject: [PATCH 3/4] Update 2024_08_validate_and_sync_crm_existing_orgs.pl --- .../migrations/2024_08_validate_and_sync_crm_existing_orgs.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/migrations/2024_08_validate_and_sync_crm_existing_orgs.pl b/scripts/migrations/2024_08_validate_and_sync_crm_existing_orgs.pl index e50e5d3661cc4..9950afe4fecb4 100755 --- a/scripts/migrations/2024_08_validate_and_sync_crm_existing_orgs.pl +++ b/scripts/migrations/2024_08_validate_and_sync_crm_existing_orgs.pl @@ -62,7 +62,7 @@ open($checkpoint, '+<:encoding(UTF-8)', $checkpoint_file) or die "Could not open file: $!"; my %orgs_processed = map {chomp; $_ => 1} <$checkpoint>; -foreach my $org_id (sort list_org_ids()) { +foreach my $org_id (sort(list_org_ids())) { $org_id = decode utf8 => $org_id; my $org_ref = retrieve_org($org_id); From 11b32c6d8524d6c7a6cbab4cbe597fa9b5b23487 Mon Sep 17 00:00:00 2001 From: Alex Garel Date: Fri, 6 Sep 2024 17:46:31 +0200 Subject: [PATCH 4/4] fix: perl critic --- lib/ProductOpener/Orgs.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ProductOpener/Orgs.pm b/lib/ProductOpener/Orgs.pm index 42904ecdd9b53..39557bd1fb281 100644 --- a/lib/ProductOpener/Orgs.pm +++ b/lib/ProductOpener/Orgs.pm @@ -170,9 +170,9 @@ sub store_org ($org_ref) { my $previous_org_ref = retrieve("$BASE_DIRS{ORGS}/$org_ref->{org_id}.sto"); if ( (defined $previous_org_ref) - && $previous_org_ref->{valid_org} ne 'accepted' - && $org_ref->{valid_org} eq 'accepted' - && not sync_org_with_crm($org_ref, $User_id)) + && ($previous_org_ref->{valid_org} ne 'accepted') + && ($org_ref->{valid_org} eq 'accepted') + && (not sync_org_with_crm($org_ref, $User_id))) { $org_ref->{valid_org} = 'unreviewed'; }