329 lines
14 KiB
Perl
329 lines
14 KiB
Perl
|
|
#!/usr/bin/perl
|
||
|
|
|
||
|
|
BEGIN { use lib '/usr/home/cfg' ; require push_inc ; }
|
||
|
|
|
||
|
|
require cfg ;
|
||
|
|
|
||
|
|
use CGI::Carp qw(fatalsToBrowser) ;
|
||
|
|
# use Date::Calc qw(:all);
|
||
|
|
# use DBI;
|
||
|
|
|
||
|
|
# https://itvadmin.co.za/cgi-bin/scripts/admin/oneoff/build_poc_table.pl?1&poc
|
||
|
|
# https://itvadmin.co.za/cgi-bin/scripts/admin/oneoff/build_poc_table.pl?1&recipient
|
||
|
|
|
||
|
|
#-------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
my @ARGV = split(/\&/, $ENV{'QUERY_STRING'});
|
||
|
|
our $debug = $ARGV[0] ;
|
||
|
|
our $poc_or_recipient = $ARGV[1] ;
|
||
|
|
# our $username = 'rory' ;
|
||
|
|
|
||
|
|
if ($debug) { print "Content-type: text/html\n\n"; }
|
||
|
|
|
||
|
|
#------------------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
&today ;
|
||
|
|
|
||
|
|
&db_open_upd ;
|
||
|
|
# &db_open_ro ;
|
||
|
|
our $db_ignore_open_close = 1 ; # do one open and one close instead of repeating it
|
||
|
|
&load_vars ;
|
||
|
|
$db_ignore_open_close = 0 ; # do one open and one close instead of repeating it
|
||
|
|
&db_close_conn ;
|
||
|
|
|
||
|
|
if ($debug) { print "Done."; }
|
||
|
|
|
||
|
|
exit;
|
||
|
|
|
||
|
|
#------------------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
sub load_vars {
|
||
|
|
|
||
|
|
|
||
|
|
# $poc_or_recipient = "poc" ;
|
||
|
|
|
||
|
|
exit unless $poc_or_recipient ;
|
||
|
|
# my $poc_or_recipient = "poc" ;
|
||
|
|
my $id_field = "$poc_or_recipient\_id" ;
|
||
|
|
my $table_ = "event_quotes_$poc_or_recipient" ;
|
||
|
|
my $name_field = "$poc_or_recipient\_name" ;
|
||
|
|
my $nr_field = ($poc_or_recipient eq 'poc') ? "$poc_or_recipient\_contact_nr" : "$poc_or_recipient\_nr" ;
|
||
|
|
|
||
|
|
&db_min_ro('event_quotes aisa',"id,$name_field,$nr_field","$name_field <> '' AND $name_field IS NOT NULL","","") ;
|
||
|
|
&db_min_ro($table_,'id,name,contact_nr',"","","") ;
|
||
|
|
&db_switch_conn('sss') ;
|
||
|
|
&db_min_ro('event_quotes sss',"id,$name_field,$nr_field","$name_field <> '' AND $name_field IS NOT NULL","","") ;
|
||
|
|
my %seen_poc = () ;
|
||
|
|
&db_switch_conn('aisa') ;
|
||
|
|
|
||
|
|
foreach (keys %{$db{$table_}}) {
|
||
|
|
$seen_poc{$db{$table_}{$_}{name}}{$db{$table_}{$_}{contact_nr}} = 1 ;
|
||
|
|
}
|
||
|
|
|
||
|
|
my %seen_name = () ; my %seen_name_with_blank_number = () ; my %seen_name_with_non_blank_number = () ; my %seen_number_with_complete_name = () ; my %seen_number_cnt = () ; my %seen_name_cnt = () ;
|
||
|
|
|
||
|
|
my %unique_number_linked_to_name = () ;
|
||
|
|
|
||
|
|
my $cnt = 0 ;
|
||
|
|
use utf8;
|
||
|
|
|
||
|
|
foreach (sort { lc $db{"event_quotes aisa"}{$a}{$name_field} cmp lc $db{"event_quotes aisa"}{$b}{$name_field} } keys %{$db{"event_quotes aisa"}}) {
|
||
|
|
|
||
|
|
my $number = &common_fix_poc_numbers($db{"event_quotes aisa"}{$_}{$nr_field}) ;
|
||
|
|
my $name = &common_fix_poc_name($db{"event_quotes aisa"}{$_}{$name_field}) ;
|
||
|
|
|
||
|
|
$db{"event_quotes aisa"}{$_}{$nr_field} = $number ;
|
||
|
|
$db{"event_quotes aisa"}{$_}{$name_field} = $name ;
|
||
|
|
|
||
|
|
if ($unique_number_linked_to_name{$name} && $unique_number_linked_to_name{$name} ne $number && $number) {
|
||
|
|
$unique_number_linked_to_name{$name} = "NA" ;
|
||
|
|
} elsif ($number) {
|
||
|
|
$unique_number_linked_to_name{$name} = $number ;
|
||
|
|
}
|
||
|
|
|
||
|
|
$seen_name{$name}{$number} = 1 ;
|
||
|
|
$seen_name_with_non_blank_number{$name} = 1 if $number ;
|
||
|
|
}
|
||
|
|
|
||
|
|
foreach (sort { lc $db{"event_quotes sss"}{$a}{$name_field} cmp lc $db{"event_quotes sss"}{$b}{$name_field} } keys %{$db{"event_quotes sss"}}) {
|
||
|
|
|
||
|
|
my $number = &common_fix_poc_numbers($db{"event_quotes sss"}{$_}{$nr_field}) ;
|
||
|
|
my $name = &common_fix_poc_name($db{"event_quotes sss"}{$_}{$name_field}) ;
|
||
|
|
# $number = "" if !$number || length($number) <= 5 ;
|
||
|
|
$db{"event_quotes sss"}{$_}{$nr_field} = $number ;
|
||
|
|
$db{"event_quotes sss"}{$_}{$name_field} = $name ;
|
||
|
|
if ($unique_number_linked_to_name{$name} && $unique_number_linked_to_name{$name} ne $number && $number) {
|
||
|
|
$unique_number_linked_to_name{$name} = "NA" ;
|
||
|
|
} elsif ($number) {
|
||
|
|
$unique_number_linked_to_name{$name} = $number ;
|
||
|
|
}
|
||
|
|
|
||
|
|
$seen_name{$name}{$number} = 1 ;
|
||
|
|
$seen_name_with_non_blank_number{$name} = 1 if $number ;
|
||
|
|
}
|
||
|
|
|
||
|
|
my %poc_id = () ; my %final_names_numbers = () ; my %names_seen_with_number = () ; my %skip_name_number = () ;
|
||
|
|
|
||
|
|
foreach my $lc_name (sort { $seen_name{$a} cmp $seen_name{$b} } keys %seen_name) {
|
||
|
|
foreach my $nr (sort { $seen_name{$lc_name}{$a} cmp $seen_name{$lc_name}{$b} } keys %{$seen_name{$lc_name}}) {
|
||
|
|
# next if $seen_poc{$lc_name}{$nr} ;
|
||
|
|
|
||
|
|
next if $seen_poc{$lc_name}{$nr} || (!$nr && $seen_name_with_non_blank_number{$lc_name} && $unique_number_linked_to_name{$lc_name} ne 'NA') || $seen_name{$lc_name}{$nr} < 0 ;
|
||
|
|
# next if $seen_name_with_non_blank_number{$lc_name} ;
|
||
|
|
# $cnt++ ;
|
||
|
|
# $poc_id{$lc_name}{$nr} = $cnt ;
|
||
|
|
$seen_number_cnt{$nr}++ if $nr ;
|
||
|
|
$seen_number_cnt{$nr} = 0 unless $nr ;
|
||
|
|
$names_seen_with_number{$nr}{$seen_number_cnt{$nr}} = $lc_name ;
|
||
|
|
$final_names_numbers{$lc_name}{$nr} = 1 ;
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
$cnt = 0 ;
|
||
|
|
|
||
|
|
our %skip_name_number = () ; #our %skip_name_number_because_of = () ;
|
||
|
|
|
||
|
|
foreach my $nr (keys %names_seen_with_number) {
|
||
|
|
|
||
|
|
my $seen_cnt = 0 ;
|
||
|
|
|
||
|
|
foreach my $number_cnt (sort {$b <=> $a} keys %{$names_seen_with_number{$nr}}) {
|
||
|
|
|
||
|
|
next if $number_cnt <= 1 && !$seen_cnt ;
|
||
|
|
$seen_cnt++ ;
|
||
|
|
|
||
|
|
for my $cnt1 (1 .. $number_cnt) {
|
||
|
|
|
||
|
|
my @name_split = split(/ /,$names_seen_with_number{$nr}{$cnt1}) ;
|
||
|
|
my $first_name1 = $name_split[0] ;
|
||
|
|
my $rest_of_name1 = join(" ", @name_split[1..$#name_split]);
|
||
|
|
|
||
|
|
for my $cnt2 (1 .. $number_cnt) {
|
||
|
|
|
||
|
|
next if $cnt1 eq $cnt2 ;
|
||
|
|
|
||
|
|
# print "\n MAWND $names_seen_with_number{$nr}{$cnt2} =~ /\b$names_seen_with_number{$nr}{$cnt1}b/" ;
|
||
|
|
|
||
|
|
if ($names_seen_with_number{$nr}{$cnt2} =~ /\b$names_seen_with_number{$nr}{$cnt1}\b/) {
|
||
|
|
# print "\n SKIP : $nr : $names_seen_with_number{$nr}{$cnt1}" ;
|
||
|
|
$skip_name_number{$names_seen_with_number{$nr}{$cnt1}}{$nr} = "$names_seen_with_number{$nr}{$cnt2}\_:_$nr" ;
|
||
|
|
# $skip_name_number_because_of{$names_seen_with_number{$nr}{$cnt1}}{$nr} = "$names_seen_with_number{$nr}{$cnt2}\_:_$nr" ;
|
||
|
|
} else {
|
||
|
|
|
||
|
|
@name_split = split(/ /,$names_seen_with_number{$nr}{$cnt2}) ;
|
||
|
|
my $first_name2 = $name_split[0] ;
|
||
|
|
my $rest_of_name2 = join(" ", @name_split[1..$#name_split]);
|
||
|
|
if ($first_name2 =~ /$first_name1/ && $rest_of_name2 =~ /$rest_of_name1/) {
|
||
|
|
$skip_name_number{$names_seen_with_number{$nr}{$cnt1}}{$nr} = "$names_seen_with_number{$nr}{$cnt2}\_:_$nr" ;
|
||
|
|
# $skip_name_number_because_of{$names_seen_with_number{$nr}{$cnt1}}{$nr} = "$names_seen_with_number{$nr}{$cnt2}\_:_$nr" ;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
last ;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
&skip_names_numbers ;
|
||
|
|
# sort { $seen_name{$lc_name}{$a} cmp $seen_name{$lc_name}{$b} }
|
||
|
|
|
||
|
|
$cnt = 0 ;
|
||
|
|
|
||
|
|
foreach my $lc_name (sort { $seen_name{$a} cmp $seen_name{$b} } keys %final_names_numbers) {
|
||
|
|
foreach my $nr ( keys %{$final_names_numbers{$lc_name}}) {
|
||
|
|
# next if $seen_poc{$lc_name}{$nr} ;
|
||
|
|
# next if $seen_name_with_non_blank_number{$lc_name} ;
|
||
|
|
|
||
|
|
next if $skip_name_number{$lc_name}{$nr} || !$lc_name || $lc_name eq '1' || $lc_name eq '123' ;
|
||
|
|
# next if $lc_name =~ /Iren/ && $lc_name ne 'Irene' && $nr eq '27832524894' ;
|
||
|
|
# next if $lc_name =~ /Handr/ && $lc_name ne 'Handro Le Roux' && $nr eq '27766215100' ;
|
||
|
|
$cnt++ ;
|
||
|
|
$poc_id{$lc_name}{$nr} = $cnt ;
|
||
|
|
print "\n INSERT INTO $table_ (id,name,contact_nr) VALUES ($cnt,\"$lc_name\",'$nr') ; " ;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
my %event_quotes_ = () ;
|
||
|
|
|
||
|
|
foreach (sort { lc $db{"event_quotes aisa"}{$a}{$name_field} cmp lc $db{"event_quotes aisa"}{$b}{$name_field} } keys %{$db{"event_quotes aisa"}}) {
|
||
|
|
|
||
|
|
my $number = &common_fix_poc_numbers($db{"event_quotes aisa"}{$_}{$nr_field}) ;
|
||
|
|
my $name = &common_fix_poc_name($db{"event_quotes aisa"}{$_}{$name_field}) ;
|
||
|
|
|
||
|
|
if (!$number) {
|
||
|
|
$number = $unique_number_linked_to_name{$name} ;
|
||
|
|
$number = "" if $number eq 'NA' ;
|
||
|
|
# print "\n unique_numbers_linked_to_name : $name : $unique_numbers_linked_to_name{$name}" ;
|
||
|
|
}
|
||
|
|
if ($skip_name_number{$name}{$number}) {
|
||
|
|
($name,$number) = split(/\_:_/,$skip_name_number{$name}{$number}) ;
|
||
|
|
($name,$number) = split(/\_:_/,$skip_name_number{$name}{$number}) if $skip_name_number{$name}{$number} ;
|
||
|
|
($name,$number) = split(/\_:_/,$skip_name_number{$name}{$number}) if $skip_name_number{$name}{$number} ;
|
||
|
|
($name,$number) = split(/\_:_/,$skip_name_number{$name}{$number}) if $skip_name_number{$name}{$number} ;
|
||
|
|
($name,$number) = split(/\_:_/,$skip_name_number{$name}{$number}) if $skip_name_number{$name}{$number} ;
|
||
|
|
}
|
||
|
|
|
||
|
|
if ($poc_id{$name}{$number}) {
|
||
|
|
# print "\n ID : $name,$number ,$poc_id{$name}{$number}" ;
|
||
|
|
} else {
|
||
|
|
# print "\n 3 NO ID : $name,$number" ;
|
||
|
|
}
|
||
|
|
|
||
|
|
$event_quotes_{$poc_id{$name}{$number}}{$_} = 1 if $poc_id{$name}{$number} ;
|
||
|
|
}
|
||
|
|
|
||
|
|
foreach my $pid (keys %event_quotes_) {
|
||
|
|
my $sql_where = join (" OR ", map { "id='$_'" } keys %{$event_quotes_{$pid}} ) ;
|
||
|
|
print "\n UPDATE event_quotes aisa SET $poc_or_recipient\_id = '$pid' WHERE $sql_where ; " if $sql_where ;
|
||
|
|
}
|
||
|
|
|
||
|
|
&db_switch_conn('sss') ;
|
||
|
|
|
||
|
|
%event_quotes_ = () ;
|
||
|
|
|
||
|
|
foreach (sort { lc $db{"event_quotes sss"}{$a}{$name_field} cmp lc $db{"event_quotes sss"}{$b}{$name_field} } keys %{$db{"event_quotes sss"}}) {
|
||
|
|
my $number = &common_fix_poc_numbers($db{"event_quotes sss"}{$_}{$nr_field}) ;
|
||
|
|
my $name = &common_fix_poc_name($db{"event_quotes sss"}{$_}{$name_field}) ;
|
||
|
|
|
||
|
|
if (!$number) {
|
||
|
|
$number = $unique_number_linked_to_name{$name} ;
|
||
|
|
$number = "" if $number eq 'NA' ;
|
||
|
|
# print "\n unique_numbers_linked_to_name : $name : $unique_numbers_linked_to_name{$name}" ;
|
||
|
|
}
|
||
|
|
|
||
|
|
if ($skip_name_number{$name}{$number}) {
|
||
|
|
($name,$number) = split(/\_:_/,$skip_name_number{$name}{$number}) ;
|
||
|
|
($name,$number) = split(/\_:_/,$skip_name_number{$name}{$number}) if $skip_name_number{$name}{$number} ;
|
||
|
|
($name,$number) = split(/\_:_/,$skip_name_number{$name}{$number}) if $skip_name_number{$name}{$number} ;
|
||
|
|
($name,$number) = split(/\_:_/,$skip_name_number{$name}{$number}) if $skip_name_number{$name}{$number} ;
|
||
|
|
($name,$number) = split(/\_:_/,$skip_name_number{$name}{$number}) if $skip_name_number{$name}{$number} ;
|
||
|
|
}
|
||
|
|
|
||
|
|
$event_quotes_{$poc_id{$name}{$number}}{$_} = 1 if $poc_id{$name}{$number} ;
|
||
|
|
# print "\n UPDATE event_quotes SET poc_id = '$poc_id{$name}{$number}' WHERE id = '$_'" if $poc_id{$name}{$number} ;
|
||
|
|
}
|
||
|
|
|
||
|
|
foreach my $pid (keys %event_quotes_) {
|
||
|
|
my $sql_where = join (" OR ", map { "id='$_'" } keys %{$event_quotes_{$pid}} ) ;
|
||
|
|
print "\n UPDATE event_quotes sss SET $poc_or_recipient\_id = '$pid' WHERE $sql_where ; " if $sql_where ;
|
||
|
|
}
|
||
|
|
|
||
|
|
} #-------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
sub skip_names_numbers {
|
||
|
|
|
||
|
|
# $skip_name_number{"Klye Reddy"}{"27716057436"} = "Kyle Reddy_:_27716057436" ;
|
||
|
|
# $skip_name_number{"Adi"}{"27828831558"} = "Adrian Norris_:_27828831558" ;
|
||
|
|
# $skip_name_number{"Monwabisi ( Mo)"}{"27791349494"} = "Monwabisi (mo)_:_27791349494" ;
|
||
|
|
# $skip_name_number{"Patrick"}{"073286160"} = "Patrick_:_27732876160" ;
|
||
|
|
# $skip_name_number{"Wikus"}{"27766969301"} = "Wickus Coetzer_:_27766969301" ;
|
||
|
|
# $skip_name_number{"Werner Jv Rensburg"}{"27714103925"} = "Werner Jansen van Rensburg_:_27714103925" ;
|
||
|
|
# $skip_name_number{"Werener"}{"27714103925"} = "Werner Jansen van Rensburg_:_27714103925" ;
|
||
|
|
# $skip_name_number{"Warner"}{"27714103925"} = "Werner Jansen van Rensburg_:_27714103925" ;
|
||
|
|
# $skip_name_number{"Warren Tanner Ellis"}{"27832124379"} = "Warren Tanner-Ellis_:_27832124379" ;
|
||
|
|
# $skip_name_number{"Shaun Labscher"}{"27847751762"} = "Shaun Laubscher_:_27847751762" ;
|
||
|
|
# $skip_name_number{"Andrew Nel Skool"}{"27822186009"} = "Andrew Nel-Skool_:_27822186009" ;
|
||
|
|
# $skip_name_number{"Anna Marie - Pmbghs"}{"27829293432"} = "Anna-Marie Snyman_:_27829293432" ;
|
||
|
|
# $skip_name_number{"Willem vd Merwe"}{"27844028276"} = "Willem van De Merwe_:_27844028276" ;
|
||
|
|
# $skip_name_number{"Wanri Venter"}{"07780195566"} = "Wanri Venter_:_27780195566" ;
|
||
|
|
# $skip_name_number{"Willem van De Merwe"}{"844028276"} = "Willem van De Merwe_:_27844028276" ;
|
||
|
|
# $skip_name_number{"Wayne Philips"}{"27827832211"} = "Wayne Phillips_:_27827832211" ;
|
||
|
|
# $skip_name_number{"Martin Vw"}{"27737466628"} = "Martin van Wyngaardt_:_27737466628" ;
|
||
|
|
# $skip_name_number{"Max ,mohale"}{"27824974244"} = "Max Mohale_:_27824974244" ;
|
||
|
|
# $skip_name_number{"Greg"}{"27746011640"} = "Gregg Von Molendorf_:_27746011640" ;
|
||
|
|
# $skip_name_number{"Greg"}{"27746011640"} = "Gregg Von Molendorf_:_27746011640" ;
|
||
|
|
# $skip_name_number{"Hendo Le Rouz"}{"27766215100"} = "Hendo Le Roux_:_27766215100" ;
|
||
|
|
# $skip_name_number{"Henrich Kruger"}{"27825024824"} = "Heinrich Kruger_:_27825024824" ;
|
||
|
|
# $skip_name_number{"Ilse Davds"}{"27605017896"} = "Ilse Davids_:_27605017896" ;
|
||
|
|
# $skip_name_number{"Renee van Wayk"}{"27847039138"} = "Renee van Wyk_:_27847039138" ;
|
||
|
|
# $skip_name_number{"Cathrine Mccreesh"}{"27825673044"} = "Catherine Mccreesh_:_27825673044" ;
|
||
|
|
|
||
|
|
} #-------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
sub common_fix_poc_numbers {
|
||
|
|
|
||
|
|
my ($number) = @_ ;
|
||
|
|
|
||
|
|
# use utf8; Make sure this is called
|
||
|
|
|
||
|
|
$number =~ s/\-//g ;
|
||
|
|
$number =~ s/\p{Space}//g;
|
||
|
|
$number = &common_fix_cell($number) ;
|
||
|
|
$number = "" if !$number || length($number) <= 5 ;
|
||
|
|
|
||
|
|
if ($number =~ /\//) {
|
||
|
|
$number = join ("/",map{ &common_fix_cell($_) } split(/\//,$number)) ;
|
||
|
|
} elsif (length ($number) == 10 && substr($number,0,1) eq '7') {
|
||
|
|
$number = '2' . $number ;
|
||
|
|
}
|
||
|
|
return $number ;
|
||
|
|
|
||
|
|
} #-------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
sub common_fix_poc_name {
|
||
|
|
|
||
|
|
my ($name) = @_ ;
|
||
|
|
$name = lc $name ;
|
||
|
|
$name = join(" ", map { ($_ eq 'v' || $_ eq 'van' || $_ eq 'der' || $_ eq 'vd') ? $_ : ucfirst $_ } split(/ /,$name)) ;
|
||
|
|
$name = join("-", map { ucfirst $_ } split(/\-/,$name)) ;
|
||
|
|
$name = join(":", map { ucfirst $_ } split(/\:/,$name)) ;
|
||
|
|
$name =~ s/ / /g ;
|
||
|
|
if ($name =~ /\b- \b/ ) {
|
||
|
|
$name =~ s/- /-/g ;
|
||
|
|
} elsif ($name =~ /\b -\b/) {
|
||
|
|
$name =~ s/ -/-/g ;
|
||
|
|
}
|
||
|
|
|
||
|
|
$name =~ s/:(?=\S)/: /g;
|
||
|
|
$name =~ s/^\s+|\s+$//g;
|
||
|
|
|
||
|
|
return $name ;
|
||
|
|
|
||
|
|
} #-------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
use db ;
|
||
|
|
use today ;
|
||
|
|
use common ;
|
||
|
|
use common_min ;
|