From f731aa352bcf044e7e088e0eb21fe85230a6a65d Mon Sep 17 00:00:00 2001 From: ragu Date: Thu, 11 Jan 2024 06:40:31 +0100 Subject: [PATCH] some minor prepaid fixes --- copri4/main/src/Mod/APIfunc.pm | 10 ++++------ copri4/main/src/Mod/APIjsonserver.pm | 6 +++++- copri4/main/src/Mod/Basework.pm | 4 ++-- copri4/main/src/Mod/DBtank.pm | 3 ++- copri4/main/src/Mod/Indexsharee.pm | 5 +++-- copri4/main/src/Mod/Payment.pm | 12 +++++++----- copri4/main/src/Mod/Pricing.pm | 3 +-- copri4/main/src/Mod/Shareework.pm | 12 +++++++++--- copri4/main/src/Tpl/TransPositionen.pm | 4 ++-- copri4/main/src/scripts/mailTransportcms.pl | 17 ++++++++++++----- .../src/Tpl/PayoneCCclient.pm | 2 +- copri4/shareeapp-operator/src/Tpl/PayoneLink.pm | 7 +++++-- 12 files changed, 53 insertions(+), 32 deletions(-) diff --git a/copri4/main/src/Mod/APIfunc.pm b/copri4/main/src/Mod/APIfunc.pm index e766639..98353c7 100755 --- a/copri4/main/src/Mod/APIfunc.pm +++ b/copri4/main/src/Mod/APIfunc.pm @@ -1712,7 +1712,7 @@ sub user_rentals_history(){ $operator_hash{$auth->{txt17}} = "$dbt->{operator}{$auth->{txt17}}->{operatorApp}"; } #adding primary to get prepaid - #$operator_hash{sharee_primary} = "$dbt->{primary}{sharee_primary}->{primaryApp}"; + $operator_hash{sharee_primary} = "$dbt->{primary}{sharee_primary}->{primaryApp}" if($allop); foreach my $sharee_operator (keys (%operator_hash)){ #$bw->log("operator_hash sharee_operator: $sharee_operator",$sharee_operator,""); @@ -1795,22 +1795,20 @@ sub user_bikes_occupied { my $dbh = shift; my $auth = shift; my $show_dialog = shift || ""; + my $station = shift || ""; - my $pref = { + my $pref = { table => "contenttrans", table_pos => "contenttranspos", fetch => "all", template_id => "218",#Faktura tpl_id keyfield => "c_id", ca_id => "$auth->{c_id}", - #txt10 => "IN::('occupied','requested')", int10 => "IN::('3','2')", "ct.close_time" => "is::null", }; + $pref->{int06} = $station if($station);#pos start-station - ##selects also int28 > 0 bikes to view once miniquery - #it will only defined on booking_request, because there must be available - #$pref->{show_dialog} = "1" if($show_dialog); my $record = {}; $record = $dbt->collect_post($dbh,$pref) if($auth->{c_id}); return $record; diff --git a/copri4/main/src/Mod/APIjsonserver.pm b/copri4/main/src/Mod/APIjsonserver.pm index 4a555b3..57cba1a 100755 --- a/copri4/main/src/Mod/APIjsonserver.pm +++ b/copri4/main/src/Mod/APIjsonserver.pm @@ -527,7 +527,11 @@ elsif($q->param('request') eq "bikes_available"){ #2023-11-13, return also bikes_occupied on bikes_available by operator request if($user_agent_subversion >= 375 || $user_agent =~ /Mozilla/){#Mozilla for testing my $record = {}; - $record = $apif->user_bikes_occupied($dbh,$authraw,""); + my $station = $q->escapeHTML($q->param('station')) || ""; + my $station_id = ""; + $station_id = $1 if($station =~ /(\d+)$/); + + $record = $apif->user_bikes_occupied($dbh,$authraw,"",$station_id); $response->{bikes_occupied} = $apif->rentals(\%varenv,$record,$authraw,"1");#returns JSON rental values } } diff --git a/copri4/main/src/Mod/Basework.pm b/copri4/main/src/Mod/Basework.pm index ffb0311..16d3130 100755 --- a/copri4/main/src/Mod/Basework.pm +++ b/copri4/main/src/Mod/Basework.pm @@ -130,10 +130,10 @@ sub battery_percent { sub isuser_rentable { my $self = shift; my $auth = shift; - my $varenv = shift; + my $varenv = shift || ""; my $rentable_check=0; - if($auth->{int03} && $auth->{ct_name} && ($auth->{int03} == 1 && $auth->{ct_name} =~ /\w{2}-\d+/) || ($auth->{int03} == 2 && length($auth->{ct_name}) >= 19) || ($auth->{int03} == 3 && $auth->{ct_name} =~ /Prepaid-\d+/i)){ + if($auth->{int03} && $auth->{ct_name} && ($auth->{int03} == 1 && $auth->{ct_name} =~ /^\w{2}-\d+/) || ($auth->{int03} == 2 && length($auth->{ct_name}) >= 19) || ($auth->{int03} == 3 && $auth->{ct_name} =~ /Prepaid-\d+/i)){ $rentable_check=1; if($auth->{txt08} && $auth->{int04} == 1 && $auth->{int13} == 1 && !$auth->{int12} && $auth->{int14}){ $rentable_check=2;#if 2 then everything should be alright. rental is enabled diff --git a/copri4/main/src/Mod/DBtank.pm b/copri4/main/src/Mod/DBtank.pm index bf7e043..2257589 100755 --- a/copri4/main/src/Mod/DBtank.pm +++ b/copri4/main/src/Mod/DBtank.pm @@ -1622,8 +1622,9 @@ sub insert_contenttrans(){ $doc_name = "Tagesabschluss" if($tpl_id == 209); $doc_name = "Prepaid Account" if($tpl_id == 219); $owner="199" if(!$owner); + my $paymenttype = $ctadr->{int03} || 0; #keep in mind int10 will be mainly used by Prelogic and Printpreview, thats because we save it also - my $sth = $dbh->prepare("INSERT INTO contenttrans (ct_name,txt00,int10,int03,txt02,txt01,txt03,txt06,txt07,txt08,txt10,txt11,owner,itime) VALUES('$invoice_nr','$doc_name','$ctadr->{c_id}','$ctadr->{int03}','$ctadr->{txt02}','$ctadr->{txt01}','$ctadr->{txt03}','$ctadr->{txt06}','$ctadr->{txt07}','$ctadr->{txt08}','$ctadr->{txt10}','$ctadr->{txt11}','$owner','now()') RETURNING c_id"); + my $sth = $dbh->prepare("INSERT INTO contenttrans (ct_name,txt00,int10,int03,txt02,txt01,txt03,txt06,txt07,txt08,txt10,txt11,owner,itime) VALUES('$invoice_nr','$doc_name','$ctadr->{c_id}','$paymenttype','$ctadr->{txt02}','$ctadr->{txt01}','$ctadr->{txt03}','$ctadr->{txt06}','$ctadr->{txt07}','$ctadr->{txt08}','$ctadr->{txt10}','$ctadr->{txt11}','$owner','now()') RETURNING c_id"); my $rows = $sth->execute(); my $last_id; diff --git a/copri4/main/src/Mod/Indexsharee.pm b/copri4/main/src/Mod/Indexsharee.pm index 4235764..08ed32b 100755 --- a/copri4/main/src/Mod/Indexsharee.pm +++ b/copri4/main/src/Mod/Indexsharee.pm @@ -787,7 +787,7 @@ sub handler { if($R::sharee_edit && $R::sharee_edit =~ /save_account/){ $returnwww =~ s/::/=/g if($returnwww && $returnwww =~ /success::\w+/); ($api_return,$users_sharee) = $apif->auth_verify($q,$coo,""); - $payable_check = $bw->isuser_rentable($users_sharee,\%varenv); + $payable_check = $bw->isuser_rentable($users_sharee); if((!$users_sharee->{int14}) || ($users_sharee->{txt31} && $tpl->{tpl_order} =~ /$users_sharee->{txt31}/)){ #failure redirect should do the delete job @@ -811,7 +811,8 @@ sub handler { exit 0; } elsif($payable_check && $payable_check == 2){ - print redirect("$varenv{wwwhost}/$varenv{mandant}/Account/$varenv{accounting_2}?cum=2-$payable_check$session_and\&$returnwww"); + print redirect("$varenv{wwwhost}/$varenv{mandant}/Account/$varenv{accounting_3}?cum=2-$payable_check$session_and\&$returnwww"); + #print redirect("$varenv{wwwhost}/$varenv{mandant}/Account/$varenv{accounting_2}?cum=2-$payable_check$session_and\&$returnwww"); exit 0; } }elsif($path =~ /$varenv{mandant}\/$varenv{profile}/ && $referer !~ /failure=\w/){ diff --git a/copri4/main/src/Mod/Payment.pm b/copri4/main/src/Mod/Payment.pm index d05b787..770cfd4 100755 --- a/copri4/main/src/Mod/Payment.pm +++ b/copri4/main/src/Mod/Payment.pm @@ -1135,7 +1135,9 @@ sub generate_payonelink { my $ctadr = shift; my $prepaidhash = shift || {}; my $prepaid_amount = shift || 0; - my $owner = shift || 0; + my $aowner = shift || 0; + + my $app_name = $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{app_name} if($varenv->{merchant_id} && $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{app_name}); my $ret_json = {}; my $response_in = {}; @@ -1174,11 +1176,10 @@ sub generate_payonelink { merchantId => "$dbt->{payonelink_conf}->{merchantId}", accountId => "$dbt->{payonelink_conf}->{accountId}", portalId => "$dbt->{payonelink_conf}->{portalId}", - userId => "$ctadr->{c_id}", mode => "$dbt->{payonelink_conf}->{mode}", notifyUrl => "$dbt->{payonelink_conf}->{notifyUrl}", description => "Ihr vorbereiteter sharee.bike Prepaid/Vorkasse Auftrag", - paymentMethods => ['visa', 'mastercard', 'giropay', 'sepa'], + paymentMethods => ['visa', 'mastercard', 'giropay'], reference => "$reference", shoppingCart => [{ type => "goods", @@ -1195,6 +1196,7 @@ sub generate_payonelink { country => "DE" } }; + #we still have sepa. do it without sepa because of workflow #paymentMethods => ['visa', 'mastercard', 'paypal', 'sofort', 'paydirekt', 'giropay', 'sepa'], my $datahash = "$pay_json->{merchantId}$pay_json->{accountId}$pay_json->{portalId}$pay_json->{mode}$pay_json->{reference}$amount$currency"; @@ -1215,7 +1217,7 @@ sub generate_payonelink { table => "contenttranspos", ca_id => "$ctadr->{c_id}", mtime => "now()", - owner => "$owner", + owner => "$aowner", }; eval { @@ -1239,7 +1241,7 @@ sub generate_payonelink { if(!$varenv->{cms}->{$cms_message_key}->{txt}){ $feedb->{message} = "failure::Achtung, '$cms_message_key' ist nicht vorhanden. Es wurde keine eMail versandt!"; }elsif($ctpos->{c_id}){ - system("$dbt->{copri_conf}->{basedir}/$varenv->{syshost}/src/scripts/mailTransportcms.pl '$varenv->{syshost}' 'send_payonelink' '$ctadr->{c_id}' '$ctpos->{c_id}' '' '$cms_message_key' ''"); + system("$dbt->{copri_conf}->{basedir}/$varenv->{syshost}/src/scripts/mailTransportcms.pl '$varenv->{syshost}' 'send_payonelink' '$ctadr->{c_id}' '$ctpos->{c_id}' '' '$cms_message_key' '' '$app_name'"); } }#end if($ctadr->{c_id} && $prepaidhash->{prepaid_id} && $prepaid_amount2 >= 5) diff --git a/copri4/main/src/Mod/Pricing.pm b/copri4/main/src/Mod/Pricing.pm index aaf26c3..7a398cf 100755 --- a/copri4/main/src/Mod/Pricing.pm +++ b/copri4/main/src/Mod/Pricing.pm @@ -665,9 +665,8 @@ sub collect_prepaid { $prepaidhash->{description} = $cttpos->{$id}->{txt01}; $prepaidhash->{response_log} = $cttpos->{$id}->{txt25}; $prepaidhash->{payone_link} = $cttpos->{$id}->{txt30}; - if($cttpos->{$id}->{txt25} =~ /(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}) mailing/){ + if($cttpos->{$id}->{txt25} =~ /(\d{2}\.\d{2}\.\d{4}\s\d{2}:\d{2}).*mailing/){ $prepaidhash->{mail_datetime} = $1; - $prepaidhash->{mail_datetime} = $lb->time4de($prepaidhash->{mail_datetime},"1"); } } if($cttpos->{$id}->{int02} && $cttpos->{$id}->{int02} != 0){ diff --git a/copri4/main/src/Mod/Shareework.pm b/copri4/main/src/Mod/Shareework.pm index 7280c57..ece25e8 100755 --- a/copri4/main/src/Mod/Shareework.pm +++ b/copri4/main/src/Mod/Shareework.pm @@ -477,10 +477,12 @@ sub save_account(){ $vde_on_fail = 2 if($valxx && $valxx == 1); $update_adr->{$_} = $vde_on_fail; }elsif($_ =~ /^int03/){ - #on payment-type change set vde=3 + #on payment-type change set vde=3 if no vaild user paymentdata available if($ctadr->{int03} && $ctadr->{int03} != $valxx){ $update_adr->{$_} = $valxx; - $update_adr->{int12} = 3; + my $rentable_check=0; + $rentable_check = $bw->isuser_rentable($ctadr); + $update_adr->{int12} = 3 if($rentable_check < 1);#than it will be set by payone response }else{ $update_adr->{$_} = $valxx; } @@ -624,7 +626,11 @@ sub save_account(){ $ret = $ret_conflict if($ret_conflict); print FILE "final ret: $ret \n" if($debug); - + #operators_loop doesn't save operator specific data like int07 or int16, first save in operator + if($varenv{dbname} ne $dbt->{primary}->{sharee_primary}->{database}->{dbname}){ + my $dbh_operator = $dbt->dbconnect_extern($varenv{dbname}); + $u_rows = $dbt->update_record($dbh_operator,$update_adr,$ctadr); + } #update operator with primary data after COPRI address edit $dbt->update_operatorsloop($varenv{dbname},$ctadr->{c_id},"update"); diff --git a/copri4/main/src/Tpl/TransPositionen.pm b/copri4/main/src/Tpl/TransPositionen.pm index 7b12b2b..ed33757 100755 --- a/copri4/main/src/Tpl/TransPositionen.pm +++ b/copri4/main/src/Tpl/TransPositionen.pm @@ -76,7 +76,7 @@ sub tpl(){ #if operator invoice with prepaid type exist, then check whether balance positive my $sum_prepaid = 0; - if($ctt->{int03} && $ctt->{int03} == 3 && $varenv->{dbname} ne $dbt->{primary}->{sharee_primary}->{database}->{dbname}){ + if($ctadr->{ct_name} =~ /Prepaid-\d+/ && $varenv->{dbname} ne $dbt->{primary}->{sharee_primary}->{database}->{dbname}){ my $shareeio_json = { request => "collect_prepaid_invoices", userID => "$ctadr->{c_id}", @@ -599,7 +599,7 @@ EOF print $q->div({-style=>"padding:0.5em;font-size:0.81em;width:98%;text-align:right;"},"Summe ist nicht gebucht!"),"\n"; } - if($ctt->{int03} && $ctt->{int03} == 3 && (!$ctt->{state} || $ctt->{int14})){ + if($ctadr->{ct_name} =~ /Prepaid-\d+/ && $varenv->{dbname} ne $dbt->{primary}->{sharee_primary}->{database}->{dbname} && (!$ctt->{state} || $ctt->{int14})){ my $presaldo = $sum_prepaid - $sum_paid; $presaldo = sprintf('%.2f', $presaldo); my $precolor = "red"; diff --git a/copri4/main/src/scripts/mailTransportcms.pl b/copri4/main/src/scripts/mailTransportcms.pl index 51d6e85..f525c4a 100755 --- a/copri4/main/src/scripts/mailTransportcms.pl +++ b/copri4/main/src/scripts/mailTransportcms.pl @@ -47,6 +47,7 @@ my $ct_id = $ARGV[3] || ""; my $temppw = $ARGV[4] || ""; my $cmstext_select = $ARGV[5] || ""; my $with_pdf = $ARGV[6] || ""; +my $app_name = $ARGV[7] || ""; open(EMA, ">> $dbt->{copri_conf}->{logdir}/mailTransportcms.log"); print EMA "\n$now_dt, start mailTransportcms.pl syshost: $syshost, todo:$todo, adr_id:$adr_id, ct_id:$ct_id, temppw:$temppw, cmstext_select:$cmstext_select, with_pdf:$with_pdf\n"; @@ -96,7 +97,7 @@ if(looks_like_number($adr_id)){ #send_payonelink if($todo eq "send_payonelink"){ - $sendmail = send_payonelink($todo,$sendref,$ctadr,$ct_id,$cmstext_select); + $sendmail = send_payonelink($todo,$sendref,$ctadr,$ct_id,$cmstext_select,$app_name); } #send_emailack @@ -231,6 +232,8 @@ sub send_payonelink { my $ctadr = shift; my $ctpos_id = shift; my $cms_message_key = shift || ""; + my $app_name = shift || ""; + my $lang = $ctadr->{txt11} || $ctadr->{txt10}; my $dbh_primary = $dbt->dbconnect_extern($dbt->{primary}->{sharee_primary}->{database}->{dbname},"iso-8859-1"); @@ -253,13 +256,13 @@ sub send_payonelink { my $record_pos = { c_id => 0 }; $record_pos = $dbt->fetch_tablerecord($dbh_primary,$pref_pos) if($ctpos_id); - $sendref = prepare_content($sendref,$ctadr,$uadr,$record_pos,$varenv{cms}->{$cms_message_key}->{txt}); + $sendref = prepare_content($sendref,$ctadr,$uadr,$record_pos,$varenv{cms}->{$cms_message_key}->{txt},'',$app_name); my $update_pos = { table => "contenttranspos", c_id => "$ctpos_id", }; - my $log_stamp = strftime "%d.%m.%Y %H:%M:%S", localtime; + my $log_stamp = strftime "%d.%m.%Y %H:%M", localtime; my $mailing_log = $record_pos->{txt25} . "\n- $log_stamp mailing: $cms_message_key"; $dbt->update_one($dbh_primary,$update_pos,"txt25='$mailing_log'"); @@ -571,9 +574,13 @@ sub prepare_content { my $ctt = shift || {}; my $cms_prim = shift || ""; my $with_pdf = shift || ""; + my $app_name = shift || ""; - my $app_name = "Mietrad App"; - $app_name = $dbt->{operator}->{$varenv{dbname}}->{app_name}; + if(!$app_name && $dbt->{operator}->{$varenv{dbname}}->{app_name}){ + $app_name = $dbt->{operator}->{$varenv{dbname}}->{app_name}; + }else{ + $app_name = "Mietrad App"; + } my $invoice_name = ""; my $invoice_nr = ""; my $total_sum = ""; diff --git a/copri4/shareeapp-operator/src/Tpl/PayoneCCclient.pm b/copri4/shareeapp-operator/src/Tpl/PayoneCCclient.pm index 8e988c8..44f6344 100755 --- a/copri4/shareeapp-operator/src/Tpl/PayoneCCclient.pm +++ b/copri4/shareeapp-operator/src/Tpl/PayoneCCclient.pm @@ -48,7 +48,7 @@ sub tpl(){ print $q->div({-class=>'content_title3'},"$varenv->{cms}->{'iframe-credit-card-data'}->{txt}"),"\n"; print $q->div({-class=>'content2'},"$varenv->{cms}->{'iframe-creditcard-data-info'}->{txt}"),"\n"; - if($users_sharee->{int03} && $users_sharee->{int03} == 2 && $users_sharee->{txt28} && $users_sharee->{txt28} =~ /pseudocardpan=\d{19}/ && $users_sharee->{txt28} =~ /(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2})/){ + if($users_sharee->{int03} && $users_sharee->{int03} == 2 && length($users_sharee->{ct_name}) >= 19 && $users_sharee->{txt28} && $users_sharee->{txt28} =~ /pseudocardpan=\d{19}/ && $users_sharee->{txt28} =~ /(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2})/){ my $cc_datetime = $1 || ""; $cc_datetime = $lb->time4de($cc_datetime,"1") if($cc_datetime); $varenv->{cms}->{'iframe-cc-acception'}->{txt} =~ s/::cc_datetime::/$cc_datetime/; diff --git a/copri4/shareeapp-operator/src/Tpl/PayoneLink.pm b/copri4/shareeapp-operator/src/Tpl/PayoneLink.pm index 4d1acfd..5c4dbb1 100755 --- a/copri4/shareeapp-operator/src/Tpl/PayoneLink.pm +++ b/copri4/shareeapp-operator/src/Tpl/PayoneLink.pm @@ -93,11 +93,14 @@ sub tpl(){ print $q->div({-class=>'content2', -style=>'color:#c83434;'}, "$varenv->{cms}->{'iframe-prepaid-failure'}->{txt}"),"\n" if($ret_json =~ /failure/); if($prepaidhash->{payone_link}){ + $varenv->{cms}->{'iframe-prepaid-emailinfo'}->{txt} =~ s/\n/
/g; $varenv->{cms}->{'iframe-prepaid-emailinfo'}->{txt} =~ s/::mail_datetime::/$prepaidhash->{mail_datetime}/g; $varenv->{cms}->{'iframe-prepaid-emailinfo'}->{txt} =~ s/::email::/$ctadr->{txt08}/g; $varenv->{cms}->{'iframe-prepaid-emailinfo'}->{txt} =~ s/::payone_link::/Test $prepaidhash->{payone_link}<\/a><\/b>/g if($users_sharee->{c_id} eq $dbt->{copri_conf}->{superu_id}); $varenv->{cms}->{'iframe-prepaid-emailinfo'}->{txt} =~ s/::app_name::/$dbt->{merchant_ids}->{$varenv->{merchant_id}}->{app_name}<\/b>/g; print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-prepaid-emailinfo'}->{txt}"),"\n"; + print $q->div({-style=>'margin-top:1em;text-align:center;'},""),"\n"; + }else{ my $label_des="$varenv->{cms}->{'iframe-prepaid-input'}->{txt}"; print $q->label({-for=>"prepaid_amount", -style=>'padding-top:1.5em;'},"$label_des"),"\n"; @@ -108,13 +111,13 @@ sub tpl(){ }elsif($ret_json){ #payone-link mailing will be done by $pay->generate_payonelink + $varenv->{cms}->{'iframe-prepaid-emailinfo'}->{txt} =~ s/\n/
/g; $varenv->{cms}->{'iframe-prepaid-emailinfo'}->{txt} =~ s/::mail_datetime::/$prepaidhash->{mail_datetime}/g; $varenv->{cms}->{'iframe-prepaid-emailinfo'}->{txt} =~ s/::email::/$ctadr->{txt08}/g; $varenv->{cms}->{'iframe-prepaid-emailinfo'}->{txt} =~ s/::payone_link::/
Test $prepaidhash->{payone_link}<\/a><\/b>/g if($ctadr->{c_id} eq $dbt->{copri_conf}->{superu_id}); $varenv->{cms}->{'iframe-prepaid-emailinfo'}->{txt} =~ s/::app_name::/$dbt->{merchant_ids}->{$varenv->{merchant_id}}->{app_name}<\/b>/g; print $q->div({-class=>'content2', -style=>'color:#009899;'}, "$varenv->{cms}->{'iframe-prepaid-emailinfo'}->{txt}"),"\n"; - print $q->div({-class=>'content2'}, ""),"\n"; - #print Dumper($ret_json) . "
\n"; + print $q->div({-style=>'margin-top:1em;text-align:center;'},""),"\n"; }