diff --git a/copri4/main/src/Mod/APIfunc.pm b/copri4/main/src/Mod/APIfunc.pm index a1a985c..99b2d4a 100755 --- a/copri4/main/src/Mod/APIfunc.pm +++ b/copri4/main/src/Mod/APIfunc.pm @@ -1066,7 +1066,6 @@ sub booking_update(){ my $state = $q->escapeHTML($q->param('state')) || ""; my $lock_state = $q->escapeHTML($q->param('lock_state')) || ""; - my %varenv = $cf->envonline(); my $rows = 0; my $user_agent = $q->user_agent(); #my $bike = $q->param('bike'); @@ -1228,7 +1227,7 @@ sub booking_update(){ $update_pos->{end_time} = "now()"; $update_pos->{txt05} = "$record_cc->{txt06}";#pos start GPS from content end GPS $update_pos->{int06} = "$record_cc->{int04}";#pos start station from content station - $update_pos->{txt12} = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}";#pos start station prefix + $update_pos->{txt12} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}";#pos start station prefix $update_pos->{int21} = $gps_data->{gps_age_minutes}; $update_pos->{int22} = $gps_data->{gps_accuracy}; $update_pos->{owner} = "$owner"; @@ -1294,13 +1293,13 @@ sub booking_update(){ $update_pos->{int26} = "$sig_book->{distance}" if($sig_book->{distance}); $update_pos->{int28} = "$sig_book->{station_lock_state}" if($sig_book->{station_lock_state}); #end-Station prefix - $update_pos->{txt13} = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}"; - $update_cc->{txt13} = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}"; + $update_pos->{txt13} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}"; + $update_cc->{txt13} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}"; #return after booking_update #in real, we know freed accountable rentals only on rental end's $pri->count_freedrental($q,$varenv,$auth->{c_id},$record_pos); - my ($pricing,$counting) = $pri->counting_rental(\%varenv,$record_pos); + my ($pricing,$counting) = $pri->counting_rental($varenv,$record_pos); #int03 only used for tarif counting backwards compatibility $update_pos->{int03} = "$pricing->{computed_hours}" if(looks_like_number($pricing->{computed_hours})); @@ -1324,7 +1323,7 @@ sub booking_update(){ else{ if($gps_data->{geo_distance} <= $geo_distance_next){ $geo_distance_next = $gps_data->{geo_distance}; - $station_next = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}$stations_raw->{$id}->{int04}"; + $station_next = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$stations_raw->{$id}->{int04}"; } #2021-10-13 changed to save last gps @all $update_cc->{txt06} = "$gps_data->{gps}";#end content coordinates @@ -1333,11 +1332,11 @@ sub booking_update(){ $update_pos->{int22} = $gps_data->{gps_accuracy}; $update_pos->{int23} = $gps_data->{geo_distance}; #end-Station prefix - $update_pos->{txt13} = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}"; - $update_cc->{txt13} = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}"; + $update_pos->{txt13} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}"; + $update_cc->{txt13} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}"; #return after booking_update - my ($pricing,$counting) = $pri->counting_rental(\%varenv,$record_pos); + my ($pricing,$counting) = $pri->counting_rental($varenv,$record_pos); #int03 only used for tarif counting backwards compatibility $update_pos->{int03} = "$pricing->{computed_hours}" if(looks_like_number($pricing->{computed_hours})); $update_pos->{int38} = "$counting->{int38}" if(looks_like_number($counting->{int38})); @@ -1424,16 +1423,58 @@ sub booking_update(){ if(ref($booking) eq "HASH" && $booking->{ct_name}){ #deprecated - $booking_values->{bike} = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}$booking->{barcode}"; + $booking_values->{bike} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$booking->{barcode}"; $booking_values->{state} = "$dbt->{copri_conf}->{bike_state}->{$booking->{int10}}"; $booking_values->{lock_state} = "$dbt->{copri_conf}->{lock_state}->{$booking->{int20}}"; + #new object after rental end $booking_values->{bike_returned} = {}; if($booking->{int10} == 1){ - $booking_values->{bike_returned}->{bike} = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}$booking->{barcode}"; - $booking_values->{bike_returned}->{station} = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}$booking->{int04}"; + $booking_values->{bike_returned}->{bike} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$booking->{barcode}"; + $booking_values->{bike_returned}->{station} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$booking->{int04}"; $booking_values->{bike_returned}->{state} = "$dbt->{copri_conf}->{bike_state}->{$booking->{int10}}"; $booking_values->{bike_returned}->{lock_state} = "$dbt->{copri_conf}->{lock_state}->{$booking->{int20}}"; + my ($pricing,$counting) = $pri->counting_rental($varenv,$booking); + if($pricing->{real_clock} && $pricing->{real_clock} =~ /[1-9]/){ + my $time_unit = $dbt->time_format($varenv,$pricing->{real_clock}); + $booking_values->{bike_returned}->{real_clock} = "$time_unit";#2023-09-12 + } + if($pricing->{total_price} && $pricing->{total_price} > 0){ + $pricing->{total_price} =~ s/\./,/ if($lang eq "de"); + $booking_values->{bike_returned}->{total_price} = "$pricing->{total_price} €";#2023-09-12 + } + + #fetch tracking distance on Ilockit cloud by summary trip if(tracking && deviceId && available) + if($booking->{int25} == 1){ + $bw->log("get co2saving",$booking->{c_id},""); + #if system=ilockit && clouid + if($record_pos->{int11} == 2 && $booking->{int13}){ + sleep 2;#hopefully get distance in 2 sec. + system("$varenv->{basedir}/src/scripts/Ilockit_trackingcloud.pl $varenv->{syshost} get_tripsum $booking->{c_id}"); + $booking = $dbt->fetch_tablerecord($dbh,$booking_pos); + #try it again with 20sec sleep + if(!$booking->{int26}){ + $bw->log("$varenv->{basedir}/src/scripts/Ilockit_trackingcloud.pl $varenv->{syshost} get_tripsum $booking->{c_id} 20",$booking->{c_id},""); + system("$varenv->{basedir}/src/scripts/Ilockit_trackingcloud.pl $varenv->{syshost} get_tripsum $booking->{c_id} 20 &"); + $booking = $dbt->fetch_tablerecord($dbh,$booking_pos); + } + } + + my $co2saving = ""; + $booking->{int26} = 10 if(!$booking->{int26} && ($auth->{c_id} == 5781 || $auth->{c_id} == 38883 || $auth->{c_id} == 37974));#10 km test + if($booking->{int26}){ + $co2saving = "Einsparung: "; + my $co2diff = $pri->co2calc($booking); + #my $sprit_price = $pri->sprit2calc($booking); + $co2saving .= "$co2diff kg CO2, "; + #$co2saving .= "$sprit_price EUR " if($sprit_price !~ /-/); + $booking->{int26} =~ s/\./,/; + $co2saving .= "bei einer Strecke von $booking->{int26} KM"; + $booking_values->{co2saving} = $co2saving; + $booking_values->{bike_returned}->{distance} = "$booking->{int26} km";#2023-09-12 + $booking_values->{bike_returned}->{co2saving} = "$co2diff kg CO2";#2023-09-12 + } + } } #user_miniquest_count on operator @@ -1446,7 +1487,7 @@ sub booking_update(){ }; my $auth_prim = $dbt->fetch_record($dbh_primary,$adref); - if($booking->{int10} == 1 && $dbt->{operator}->{$varenv{dbname}}->{project} eq "Bayern" && $auth_prim->{int23} < 4){ + if($booking->{int10} == 1 && $dbt->{operator}->{$varenv->{dbname}}->{project} eq "Bayern" && $auth_prim->{int23} < 4){ $bw->log("user_miniquery user ID $auth_prim->{c_id} exist count:",$auth_prim->{int23},""); $booking_values->{user_miniquery} = $dbt->evaluationsfragen($dbh); @@ -1465,35 +1506,6 @@ sub booking_update(){ } }#end mini_quest - #fetch tracking distance on Ilockit cloud by summary trip if(tracking && deviceId && available) - if($booking->{int25} == 1 && $booking->{int10} == 1){ - $bw->log("get co2saving",$booking->{c_id},""); - #if system=ilockit && clouid - if($record_pos->{int11} == 2 && $booking->{int13}){ - sleep 2;#hopefully get distance in 2 sec. - system("$varenv{basedir}/src/scripts/Ilockit_trackingcloud.pl $varenv{syshost} get_tripsum $booking->{c_id}"); - $booking = $dbt->fetch_tablerecord($dbh,$booking_pos); - #try it again with 20sec sleep - if(!$booking->{int26}){ - $bw->log("$varenv{basedir}/src/scripts/Ilockit_trackingcloud.pl $varenv{syshost} get_tripsum $booking->{c_id} 20",$booking->{c_id},""); - system("$varenv{basedir}/src/scripts/Ilockit_trackingcloud.pl $varenv{syshost} get_tripsum $booking->{c_id} 20 &"); - $booking = $dbt->fetch_tablerecord($dbh,$booking_pos); - } - } - - my $co2saving = ""; - $booking->{int26} = 10 if(!$booking->{int26} && ($auth->{c_id} == 5781 || $auth->{c_id} == 38883));#10 km test - if($booking->{int26}){ - $co2saving = "Einsparung: "; - my $co2diff = $pri->co2calc($booking); - #my $sprit_price = $pri->sprit2calc($booking); - $co2saving .= "$co2diff kg CO2, "; - #$co2saving .= "$sprit_price EUR " if($sprit_price !~ /-/); - $booking->{int26} =~ s/\./,/; - $co2saving .= "bei einer Strecke von $booking->{int26} KM"; - $booking_values->{co2saving} = $co2saving; - } - } } } return ($rows,$booking_values); diff --git a/copri4/main/src/Mod/APIjsonserver.pm b/copri4/main/src/Mod/APIjsonserver.pm index c37350e..1fbe9f4 100755 --- a/copri4/main/src/Mod/APIjsonserver.pm +++ b/copri4/main/src/Mod/APIjsonserver.pm @@ -68,7 +68,7 @@ my $response = { apiserver => "$apiserver", response => "$respreq", uri_primary => "$dbt->{primary}->{sharee_primary}->{primaryApp}", - copri_version => "4.1.23.16", + copri_version => "4.1.23.17", user_id => "", authcookie => "", new_authcoo => "0", diff --git a/copri4/main/src/Mod/DBtank.pm b/copri4/main/src/Mod/DBtank.pm index 21da49c..bbb92a2 100755 --- a/copri4/main/src/Mod/DBtank.pm +++ b/copri4/main/src/Mod/DBtank.pm @@ -1242,7 +1242,7 @@ sub collect_transpos { } $where .= " ORDER BY cp.c_id DESC LIMIT $search->{limit} OFFSET $search->{offset}" if($search->{limit}); - my $sql = "SELECT cp.*,ct.txt07 AS phone from $search->{table} cp, contenttrans ct $where"; + my $sql = "SELECT cp.*,ct.txt07 AS phone,ct.txt08 AS email,ct.txt11 AS lang from $search->{table} cp, contenttrans ct $where"; my $sth = $dbh->prepare($sql); my $rc = $sth->execute(); my $ct = $sth->fetchall_hashref("c_id"); diff --git a/copri4/main/src/Mod/Prelib.pm b/copri4/main/src/Mod/Prelib.pm index c59c2af..ce8fecf 100755 --- a/copri4/main/src/Mod/Prelib.pm +++ b/copri4/main/src/Mod/Prelib.pm @@ -51,6 +51,66 @@ my %varenv = $cf->envonline(); my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime; my $debug=1; +#select rentals for messaging user if bike > 12h ... occupied +sub longterm_occupied { + my $self = shift; + my $varenv = shift; + my $dbh = ""; + + my $search = { + table => "contenttranspos", + int10 => 3, + int34 => "null",#if not staff + start_time_interval => "(now() - interval '1 day')", + }; + my $update_pos = { + table => "contenttranspos", + }; + + my $dt1 = DateTime->now(time_zone => "Europe/Berlin"); + + my $cttpos = { c_id => 0 }; + $cttpos = $dbt->collect_transpos($dbh,$search); + my $longterm_ctadr = {}; + my $posting = { + 78 => 'email', + 36 => 'sms', + 24 => 'email', + 12 => 'email', + }; + + foreach my $pid (sort { $cttpos->{$b}->{end_time} cmp $cttpos->{$a}->{end_time} } keys(%$cttpos)){ + if($cttpos->{$pid}->{int10} == 3){ + my $dt2 = ""; + $dt2 = DateTime::Format::Pg->parse_datetime($cttpos->{$pid}->{start_time}); + if($dt2){ + #foreach $posting {#TODO tests + foreach my $h_id (sort { $a <=> $b } keys(%$posting)){ + print "--> hour:$h_id\n"; + if($dt1 >= $dt2->add( hours => $h_id )){ + if($cttpos->{$pid}->{int33} != $h_id){ + $longterm_ctadr = { + hours => $h_id, + posting => $posting->{$h_id}, + c_id => $cttpos->{$pid}->{ca_id}, + pos_id => $cttpos->{$pid}->{c_id}, + bike => $cttpos->{$pid}->{ct_name}, + txt01 => $cttpos->{$pid}->{txt08}, + txt07 => $cttpos->{$pid}->{phone}, + txt08 => $cttpos->{$pid}->{email}, + txt11 => $cttpos->{$pid}->{lang}, + }; + print $dt1 . ">=" . $dt2->add( hours => $h_id ) . "\n" . Dumper($longterm_ctadr) . "\n"; + $dbt->update_one($dbh,$update_pos,"int33=78",$cttpos->{$pid}->{c_id}); + } + } + } + } + } + } + return $longterm_ctadr; +} + #insert/save/delete DMS users sub manage_dmsusers { my $self = shift; diff --git a/copri4/main/src/Mod/Prelogic.pm b/copri4/main/src/Mod/Prelogic.pm index bbd25ce..c1a2fea 100755 --- a/copri4/main/src/Mod/Prelogic.pm +++ b/copri4/main/src/Mod/Prelogic.pm @@ -659,23 +659,35 @@ sub preinit(){ #PDF will be generated by "print_pdf" in context "buchen" #"send_invoice_again" will use formarly generated PDF if(-f "$varenv{basedir}/pdfinvoice/$praefix-$ctt->{ct_name}.pdf" && (($R::set_state eq "buchen" && $R::send_invoice && $ctt->{int01} && $ctt->{int01} != 0) || ($ib_key eq "send_invoice_again"))){ + my $sum_paid = $R::sum_paid || 0; + $sum_paid =~ s/,/\./; my $cms_message_key = "email-invoice"; $varenv{cms} = $dbt->fetch_cms($dbh,{ lang => $lang_ctt }); if(!$varenv{cms}->{$cms_message_key}->{txt}){ return "failure::Achtung, CMS-Text '$cms_message_key' ist nicht vorhanden. Es wurde keine eMail versandt!"; } + if($sum_paid != $ctt->{int01}){ + return "failure::Achtung, die Summe der Positionen $sum_paid enstpricht nicht der Rechnung-Summe $ctt->{int01}. Die Rechnung muss vor dem eMail versand erst gebucht werden!"; + } system("$dbt->{copri_conf}->{basedir}/$varenv{syshost}/src/scripts/mailTransportcms.pl '$varenv{syshost}' 'send_invoice' '$ctt->{int10}' '$ctt->{c_id}' '' '$cms_message_key' '1'"); print EMA "---> Prelogic send_invoice $praefix-$ctt->{ct_name}.pdf email command: $dbt->{copri_conf}->{basedir}/$varenv{syshost}/src/scripts/mailTransportcms.pl '$varenv{syshost}' 'send_invoice' '$ctt->{int10}' '$ctt->{c_id}' '' '$cms_message_key' '1'\n"; } + #send_invoice_cms if($ib_key eq "send_invoice_cms" && $R::cms_message_key){ - + my $sum_paid = $R::sum_paid || 0; + $sum_paid =~ s/,/\./; + $varenv{cms} = $dbt->fetch_cms($dbh,{ lang => $lang_ctt }); if(!$varenv{cms}->{$R::cms_message_key}->{txt}){ return "failure::Achtung, CMS-Text '$R::cms_message_key' ist nicht vorhanden. Es wurde keine eMail versandt!"; } + if($sum_paid != $ctt->{int01}){ + return "failure::Achtung, die Summe der Positionen $sum_paid enstpricht nicht der Rechnung-Summe $ctt->{int01}. Die Rechnung muss vor dem eMail versand erst gebucht werden!"; + } + my $with_pdf = ""; $with_pdf = 1 if(-f "$varenv{basedir}/pdfinvoice/$praefix-$ctt->{ct_name}.pdf" && $R::print_pdf); system("$dbt->{copri_conf}->{basedir}/$varenv{syshost}/src/scripts/mailTransportcms.pl '$varenv{syshost}' 'send_invoice_cms' '$ctt->{int10}' '$ctt->{c_id}' '' '$R::cms_message_key' '$with_pdf'"); diff --git a/copri4/main/src/Tpl/BaseEdit.pm b/copri4/main/src/Tpl/BaseEdit.pm index 20b5afa..e1889b6 100755 --- a/copri4/main/src/Tpl/BaseEdit.pm +++ b/copri4/main/src/Tpl/BaseEdit.pm @@ -517,14 +517,14 @@ EOF $cttpos->{$key} = $q->unescapeHTML("$cttpos->{$key}"); $cttpos->{$key} = $lb->newline($cttpos->{$key},"",""); print $q->Tr(),"\n"; - print $q->td({-class=>'content1_cms',-colspan=>2},"$cttpos->{$key}"),"\n"; + print $q->td({-class=>'content1_cms',-colspan=>2},"appapi-log
$cttpos->{$key}"),"\n"; } }elsif($key eq "txt25"){ if($cttpos->{$key} && $users_dms->{int03} > 1){ $cttpos->{$key} = $q->unescapeHTML("$cttpos->{$key}"); $cttpos->{$key} = $lb->newline($cttpos->{$key},"",""); print $q->Tr(),"\n"; - print $q->td({-class=>'content1_cms',-colspan=>2},"$cttpos->{$key}"),"\n"; + print $q->td({-class=>'content1_cms',-colspan=>2},"sigapi-log
$cttpos->{$key}"),"\n"; } }elsif($key =~ /txt/){ print $q->Tr(),"\n"; @@ -974,10 +974,15 @@ EOF ::user_name:: → Kunden Name
::app_name:: → App Name
::invoice_nr:: → Faktura Beleg Nr
- ::sum_total:: → Rechnungsbetrag Summe €
+ ::total_sum:: → Rechnungsbetrag Summe €
::invoice_name:: → Faktura PDF Name
::txid:: → Payone TXID
- ::signature:: → eMail Signature
+ ::bike:: → Mietrad (PrefixNummer)
+ ::total_price:: → Mietpreis €
+ ::hotline_email:: → hotline eMail Adresse
+ ::hotline_phone:: → hotline Telefonnr.
+ ::signature:: → eMail-footer Signature
+ ::konrad_signature:: → konrad eMail-footer Signature
"),"\n"; } diff --git a/copri4/main/src/Tpl/TransPositionen.pm b/copri4/main/src/Tpl/TransPositionen.pm index abbcca2..828c3b9 100755 --- a/copri4/main/src/Tpl/TransPositionen.pm +++ b/copri4/main/src/Tpl/TransPositionen.pm @@ -662,6 +662,7 @@ EOF print $q->hidden(-name=>'tpl_id4trans', -override=>'1', -value=>"$ctt->{template_id}"),"\n"; print $q->hidden(-name=>'offset', -override=>'1', -value=>"$R::offset"),"\n" if($R::offset); print $q->hidden(-name=>'limit', -override=>'1', -value=>"$R::limit"),"\n" if($R::limit); + print $q->hidden(-name=>'sum_paid', -override=>'1',-value=>"$sum_paid"); print $q->div({-style=>"padding:0.5em;font-size:0.81em;width:98%;text-align:right;"}, "Copri-Ticket-mailing: ", $but->selector_class("cms_message_key","eselect","width:250px;","",@_valxx), "mit PDF", $but->checkbox("1","print_pdf","1","mit PDF",""), $but->singlesubmit1("ct_trans","send_invoice_cms","")),"\n"; print $q->end_form; diff --git a/copri4/main/src/scripts/mailTransportcms.pl b/copri4/main/src/scripts/mailTransportcms.pl index 570ab46..dea7cf0 100755 --- a/copri4/main/src/scripts/mailTransportcms.pl +++ b/copri4/main/src/scripts/mailTransportcms.pl @@ -29,12 +29,14 @@ use DateTime::Format::Pg; use Scalar::Util qw(looks_like_number); use Lib::Config; use Mod::DBtank; +use Mod::Prelib; use Mod::MailTransport; use Data::Dumper; my $cf = new Config; my %varenv = $cf->envonline(); my $dbt = new DBtank; +my $pl = new Prelib; my $mailtrans = new MailTransport; my $now_dt = strftime "%Y.%m.%d %H:%M:%S", localtime; @@ -106,6 +108,7 @@ if(looks_like_number($adr_id)){ if(($todo eq "send_cpupdate_message" || $todo eq "send_proactive_cpupdate_message")){ $sendmail = send_cpupdate_message($todo,$sendref,$ctadr); } + }#end user-account message #send_alarm2hotline, done by Ilockit_cloud.pl @@ -118,38 +121,50 @@ if($todo eq "send_occupied2hotline"){ $sendmail = send_occupied2hotline($sendref); } -#send_invoice_onwork once a week as reminder [in Arbeit|eMail gesendet] -if($todo eq "send_invoice_onwork"){ +#final send +if(ref($sendmail) eq "HASH" && $sendmail->{c_id}){ + sendmailjob($sendmail); +}else{ + print EMA "Error, can not sendmailjob without c_id\n"; +} + + +#user messaging for all operators by one cronjob +if($todo eq "send_invoice_onwork" || $todo eq "email_longterm_occupied"){ #loop operators DB while (my ($key, $op_name) = each %{ $dbt->{operator} }) { if($op_name->{database}->{dbname}){ my $rows = 0; my $sharee_operator = $op_name->{database}->{dbname}; my $dbh = ""; - $dbh = $dbt->dbconnect_extern($sharee_operator); + $dbh = $dbt->dbconnect_extern($sharee_operator,"iso-8859-1"); $oprefix = $op_name->{oprefix} || ""; $sendref->{syshost} = "$syshost"; - $sendmail = send_invoice_onwork($dbh,$oprefix,$sendref); - if($sendmail->{c_id}){ + + #send_invoice_onwork once a week as reminder [in Arbeit|eMail gesendet] + if($todo eq "send_invoice_onwork"){ + $sendmail = send_invoice_onwork($dbh,$oprefix,$sendref); + } + + #email_longterm_occupied, done by cronjob (enhance/substitute sms_message 24h_occupied job) + if($todo eq "email_longterm_occupied"){ + $sendmail = email_longterm_occupied($dbh,$oprefix,$sendref); + } + + #final send + if(ref($sendmail) eq "HASH" && $sendmail->{c_id}){ sendmailjob($sendmail); } } } - -} - -if($sendmail->{c_id}){ - sendmailjob($sendmail); -}else{ - print EMA "Error, can not sendmailjob without c_id\n"; -} +}#end user messaging for all operators by one cronjob #send_invoice sub send_invoice { my $todo = shift || ""; my $sendref = shift || {}; - my $ctadr = shift || ""; + my $ctadr = shift || {}; my $ct_id = shift || ""; my $cms_message_key = shift || "email-invoice"; my $with_pdf = shift || ""; @@ -190,8 +205,8 @@ sub send_invoice { $ctt->{fibu_user} = "$fibu_owner->{txt01}" if($fibu_owner->{txt01}); } - - $sendref = prepare_content($sendref,$ctadr,$uadr,$ctt,$varenv{cms}->{$cms_message_key}->{txt},$with_pdf); + my $ctadr_invoice = $ctt;#take adr from invoice for account-less mailing + $sendref = prepare_content($sendref,$ctadr_invoice,$uadr,$ctt,$varenv{cms}->{$cms_message_key}->{txt},$with_pdf); my $updatectt = { table => "contenttrans", @@ -294,6 +309,7 @@ sub send_cpupdate_message { }#end send_cpupdate_message + #send_alarm2hotline sub send_alarm2hotline { my $sendref = shift; @@ -415,7 +431,6 @@ sub send_invoice_onwork { my $dbh = shift; my $oprefix = shift || ""; my $sendref = shift; - my $ct_id = shift || ""; my $dbh_primary = $dbt->dbconnect_extern($dbt->{primary}->{sharee_primary}->{database}->{dbname},"iso-8859-1"); @@ -470,6 +485,36 @@ EOF return; }#end send_invoice_onwork +#greater 12h_mailmessage +#TODO test .... +sub email_longterm_occupied { + my $dbh = shift; + my $oprefix = shift || ""; + my $sendref = shift; + + #operator contact + my $pref_ctu = { + table => "contentuser", + fetch => "one", + c_id => "1", + }; + my $uadr = { c_id => 0 }; + $uadr = $dbt->fetch_tablerecord($dbh,$pref_ctu); + + my $longterm_ctadr = {}; + $longterm_ctadr = $pl->longterm_occupied(\%varenv); + my $lang = $longterm_ctadr->{txt11} || "de"; + + $varenv{cms} = $dbt->fetch_cms($dbh,{ lang => $lang }); + my $cms_message_key = ""; + $cms_message_key = "email-" . $longterm_ctadr->{hours} . "h-occupied" if($longterm_ctadr->{hours}); + if($longterm_ctadr->{posting} eq "email" && $varenv{cms}->{$cms_message_key}->{txt}){ + $sendref = prepare_content($sendref,$longterm_ctadr,$uadr,"",$varenv{cms}->{$cms_message_key}->{txt}); + } + + return $sendref; +}#end email_longterm_occupied + #prepare email by cms markup sub prepare_content { @@ -484,15 +529,15 @@ sub prepare_content { $app_name = $dbt->{operator}->{$varenv{dbname}}->{app_name}; my $invoice_name = ""; my $invoice_nr = ""; - my $sum_total = ""; + my $total_sum = ""; my $sharee_ticket = ""; my $fibu_user = ""; if(ref($ctt) eq "HASH" && $ctt->{ct_name}){ $invoice_name = "$ctt->{txt00}-$varenv{dbname}-$ctt->{ct_name}.pdf"; $sendref->{attachment} = "$invoice_name" if($with_pdf); $invoice_nr = "$varenv{dbname}-$ctt->{ct_name}"; - $sum_total = "$ctt->{int01}"; - $sum_total =~ s/\./,/; + $total_sum = "$ctt->{int01}"; + $total_sum =~ s/\./,/; $sharee_ticket = "[$invoice_nr]"; $fibu_user = "\n$ctt->{fibu_user}\n" if($ctt->{fibu_user}); } @@ -526,9 +571,10 @@ EOF $sendref->{message} = $cms_prim; $sendref->{message} =~ s/::user_name::/$ctadr->{txt01}/g; + $sendref->{message} =~ s/::bike::/$ctadr->{bike}/g if($ctadr->{bike}); $sendref->{message} =~ s/::app_name::/$app_name/g; $sendref->{message} =~ s/::invoice_nr::/\$invoice_nr\<\/b\>/g if($invoice_nr); - $sendref->{message} =~ s/::sum_total::/\$sum_total €\<\/b\>/g if($sum_total); + $sendref->{message} =~ s/::total_sum::/\$total_sum €\<\/b\>/g if($total_sum); $sendref->{message} =~ s/::invoice_name::/$invoice_name/g if($invoice_name); $sendref->{message} =~ s/::txid::/$ctt->{txt16}/; $sendref->{message} =~ s/::email_temppassword::/\$ctadr->{txt04}\<\/b\>/g; diff --git a/copri4/shareeapp-operator/src/Tpl/FormEdit.pm b/copri4/shareeapp-operator/src/Tpl/FormEdit.pm index 270e87a..e400f9c 100755 --- a/copri4/shareeapp-operator/src/Tpl/FormEdit.pm +++ b/copri4/shareeapp-operator/src/Tpl/FormEdit.pm @@ -269,7 +269,7 @@ EOF $label_des = "$varenv->{cms}->{'iframe-correct-input'}->{txt}" if($R::failure); print $q->label({-for=>"$key", -style=>'padding-top:1em;'},"$label_des"),"\n"; print "\n"; - print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-if-sms-code-not-received'}->{txt} ",$q->a({-style=>"color:#$bgcolor1;",-href=>"$varenv->{wwwhost}?sharee_edit=send_sms$session_and"},"$varenv->{cms}->{'iframe-request-sms-code'}->{txt}")),"\n"; + #print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-if-sms-code-not-received'}->{txt} ",$q->a({-style=>"color:#$bgcolor1;",-href=>"$varenv->{wwwhost}?sharee_edit=send_sms$session_and"},"$varenv->{cms}->{'iframe-request-sms-code'}->{txt}")),"\n"; }else{ print $q->div({-class=>'content2', -style=>'color:gray;'}, "* $varenv->{cms}->{'iframe-sms-code-already-entered'}->{txt}"),"\n"; }