diff --git a/copri4/main/src/Mod/APIfunc.pm b/copri4/main/src/Mod/APIfunc.pm index 0b7c598..4a8f840 100755 --- a/copri4/main/src/Mod/APIfunc.pm +++ b/copri4/main/src/Mod/APIfunc.pm @@ -1243,6 +1243,7 @@ sub booking_update(){ $booking_values->{response_state} = "OK: occupied bike " . $q->param('bike'); $booking_values->{response_text} = "Fahrrad Nr. " . $q->param('bike') . " Miete gestartet. "; $update_cc->{int10} = 3; + #$update_cc->{int04} = "null";#Because of servicetool, we hav to be keep the station } #fraud_rental sms_message diff --git a/copri4/main/src/Mod/APIjsonserver.pm b/copri4/main/src/Mod/APIjsonserver.pm index c1a83a5..69ef365 100755 --- a/copri4/main/src/Mod/APIjsonserver.pm +++ b/copri4/main/src/Mod/APIjsonserver.pm @@ -699,7 +699,7 @@ elsif($q->param('request') eq "stations_available"){ my $localtime = Time::Piece->strptime($lnow, "%Y-%m-%d %H:%M:%S"); my $epoch_now = $localtime->epoch; my $merchant_message_start = Time::Piece->strptime("2023-06-26 00:00:00", "%Y-%m-%d %H:%M:%S"); - my $merchant_message_end = Time::Piece->strptime("2023-07-06 23:59:00", "%Y-%m-%d %H:%M:%S"); + my $merchant_message_end = Time::Piece->strptime("2023-08-06 23:59:00", "%Y-%m-%d %H:%M:%S"); my $epoch_start = $merchant_message_start->epoch; my $epoch_end = $merchant_message_end->epoch; diff --git a/copri4/main/src/Mod/APIsigclient.pm b/copri4/main/src/Mod/APIsigclient.pm index 189abec..16d92f4 100755 --- a/copri4/main/src/Mod/APIsigclient.pm +++ b/copri4/main/src/Mod/APIsigclient.pm @@ -422,14 +422,15 @@ sub sig_booking { my $endpoint = "$dbt->{operator}->{$varenv->{dbname}}->{endpoint}/"; my %json = (); - $ctadr->{txt08} =~ s/[a-z]-/-/; $ctadr->{txt08} =~ s/[a-z]_/_/; $ctadr->{txt08} =~ s/[0-9a-z]\@/\@/i; $ctadr->{txt08} =~ s/[0-9a-z]\@/\@/i; $ctadr->{txt08} =~ s/\@(\w{1,2})\w+\.(\w+)/\@$1email\.$2/i; - $ctadr->{txt08} =~ s/[a-z]\./\./ if($ctadr->{txt08} =~ /\.\w+\@/); + my $email = $ctadr->{txt08}; + $email =~ s/[a-z]-/-/; $email =~ s/[a-z]_/_/; $email =~ s/[0-9a-z]\@/\@/i; $email =~ s/[0-9a-z]\@/\@/i; $email =~ s/\@(\w{1,2})\w+\.(\w+)/\@$1email\.$2/i; + $email =~ s/[a-z]\./\./ if($email =~ /\.\w+\@/); #reservation start if($todo eq "reserve"){ $endpoint .= "bikes/reserve"; %json = ( bikeId => "$ct_bike->{txt22}", - email => "$ctadr->{txt08}" + email => "$email" ); } #reservation end, this sig request is still not defined. maybe end by rentalId @@ -438,7 +439,7 @@ sub sig_booking { $endpoint .= "bikes/reserve/end"; %json = ( rentalId => "$ctpos->{txt11}", - email => "$ctadr->{txt08}" + email => "$email" ); } #rental start @@ -448,7 +449,7 @@ sub sig_booking { my $sig_bikeId = $ctpos->{txt22} || $ct_bike->{txt22}; %json = ( bikeId => "$sig_bikeId", - email => "$ctadr->{txt08}" + email => "$email" ); } #rental end @@ -456,7 +457,7 @@ sub sig_booking { $endpoint .= "rental/end"; %json = ( rentalId => "$ctpos->{txt11}", - email => "$ctadr->{txt08}" + email => "$email" ); #keep in mind, it will return no json, just text: "Rental Ended" } @@ -465,7 +466,7 @@ sub sig_booking { elsif($todo eq "rentals_running"){ $endpoint .= "rentals/running"; %json = ( - email => "$ctadr->{txt08}" + email => "$email" ); } diff --git a/copri4/main/src/Mod/Buttons.pm b/copri4/main/src/Mod/Buttons.pm index 9493e15..423b421 100755 --- a/copri4/main/src/Mod/Buttons.pm +++ b/copri4/main/src/Mod/Buttons.pm @@ -268,7 +268,7 @@ sub selector_class(){ my $value = $opt; ($id,$value) = split /:/,$opt if($opt =~ /\:/); $des_style = "color:grey;" if(!$id); - if($sel && $sel eq $id){ + if($sel eq $id){ push @selopt, "\n"; }else{ push @selopt, "\n"; diff --git a/copri4/main/src/Mod/DBtank.pm b/copri4/main/src/Mod/DBtank.pm index fbf0bef..e8c51c7 100755 --- a/copri4/main/src/Mod/DBtank.pm +++ b/copri4/main/src/Mod/DBtank.pm @@ -1466,7 +1466,8 @@ sub insert_pos(){ my $bike_type_id = $ct->{type_id} || 0; my $from_main_id = $ct->{main_id} || 0; my $from_template_id = $ct->{template_id} || 0; - my $station = $ct->{int04} || 0; + my $start_station = $ct->{int04} || 0; + my $end_station = "null";#2023-07-12 will be not set on request. my $fibumark = $ct->{int16} || 0; my $rabatt = 0; @@ -1502,7 +1503,7 @@ sub insert_pos(){ my $sth; #Verleihräder if($ct->{template_id} && $ct->{template_id} == 205){#Leihrad_list - $sth = $dbh->prepare("INSERT INTO contenttranspos (ct_id,cc_id,ca_id,ct_name,barcode,txt01,txt08,txt02,txt09,txt12,itime,start_time,end_time,int01,int02,int03,int06,int04,txt05,txt06,txt07,int10,int12,template_id,int13,owner,int07,txt04,int09,int17,int15,int11,int18,int19,txt17,txt18,int20,int25,int29,int34,txt22,txt11,int35,int36,int37,int42,time01,time02) VALUES ('$ctt_id','$ct->{c_id}','$ctadr->{c_id}','$ct_name','$ct->{barcode}','$ct->{txt01}','$user_name','$ct->{txt02}','$ctadr->{txt09}','$prefix',now(),now(),'$endRental','1','$unit_price','$menge','$station','$station','$ct->{txt06}','$ct->{txt06}','$ct->{txt07}','$status','$from_main_id','$from_template_id','$deviceId','$owner','$rabatt','$tariff_desc','$tariff_nr','$daymax_price','$abo_price','$ct->{int11}','$sharing_type','$bike_charge','$ct->{txt17}','$ct->{txt18}','1','$trackon','$bike_type_id','$staff','$sig_book->{bikeId}','$sig_book->{rentalId}','$unit_price1','$unit_price2','$start_price','$aa_station','$unit_time','$free_time') RETURNING c_id"); + $sth = $dbh->prepare("INSERT INTO contenttranspos (ct_id,cc_id,ca_id,ct_name,barcode,txt01,txt08,txt02,txt09,txt12,itime,start_time,end_time,int01,int02,int03,int06,txt05,txt06,txt07,int10,int12,template_id,int13,owner,int07,txt04,int09,int17,int15,int11,int18,int19,txt17,txt18,int20,int25,int29,int34,txt22,txt11,int35,int36,int37,int42,time01,time02) VALUES ('$ctt_id','$ct->{c_id}','$ctadr->{c_id}','$ct_name','$ct->{barcode}','$ct->{txt01}','$user_name','$ct->{txt02}','$ctadr->{txt09}','$prefix',now(),now(),'$endRental','1','$unit_price','$menge','$start_station','$ct->{txt06}','$ct->{txt06}','$ct->{txt07}','$status','$from_main_id','$from_template_id','$deviceId','$owner','$rabatt','$tariff_desc','$tariff_nr','$daymax_price','$abo_price','$ct->{int11}','$sharing_type','$bike_charge','$ct->{txt17}','$ct->{txt18}','1','$trackon','$bike_type_id','$staff','$sig_book->{bikeId}','$sig_book->{rentalId}','$unit_price1','$unit_price2','$start_price','$aa_station','$unit_time','$free_time') RETURNING c_id"); }else{ $sth = $dbh->prepare("INSERT INTO contenttranspos (ct_id,cc_id,ca_id,ct_name,barcode,txt08,txt09,itime,int01,int02,int03,txt01,txt06,txt07,int10,int12,int16,template_id,owner) VALUES ('$ctt_id','$ct->{c_id}','$ctadr->{c_id}','$ct_name','$ct->{barcode}','$user_name','$ctadr->{txt09}',now(),'1','$unit_price','1','$ct->{txt01}','$ct->{txt06}','$ct->{txt07}','0','$from_main_id','$fibumark','$from_template_id','$owner') RETURNING c_id"); } diff --git a/copri4/main/src/Mod/Indexsharee.pm b/copri4/main/src/Mod/Indexsharee.pm index 4503c9c..895ac17 100755 --- a/copri4/main/src/Mod/Indexsharee.pm +++ b/copri4/main/src/Mod/Indexsharee.pm @@ -213,19 +213,16 @@ sub handler { print $q->header(-charset=>"$html_charset", -cookie=>$cookie); #print "5. set cookie: " . $author->{authcookie} . " -- " . $q->param('authcookie') . " ++ " . $coo . "
"; - #2020-07-09 if user-pw authorized, then ignore conflict_ because it matches exist user-data + #if user-pw authorized, then ignore conflict_ because it matches exist user-data + #should be result to Uhps page if($tinkc_id && $returnwww && $returnwww =~ /conflict_txt07|conflict_txt08/){ - #delete user-pw conflict registration and going on with existing data - #$db->delete_content("contentadr",$tinkc_id); $return = $tk->delete_account($tinkc_id,$users_dms->{u_id}); - $apif->authout($q,$coo) if($coo); print redirect("$varenv{wwwhost}/$varenv{mandant}/Anmelden?conflict_failure=1"); exit 0; } elsif(length($coo) > 20){ #we need this to get $R::sessionid to FormEdit - #if(length($coo) > 20 && !$q->cookie(-name=>'domcookie')){ ($api_return,$users_sharee) = $apif->auth_verify($q,$author->{authcookie},""); if(($returnwww && $returnwww =~ /failure::(.*)/) || ($users_sharee->{txt31} && $users_sharee->{txt31} =~ /\w/)){ $returnwww =~ s/::/=/g; @@ -482,6 +479,13 @@ sub handler { ($api_return,$users_sharee) = $apif->auth_verify($q,$coo,""); if($returnwww =~ /txt22|txt23/){ + #should be result to Uhps page + if($returnwww =~ /conflict_txt22/){ + $return = $tk->delete_account($users_sharee->{c_id},$users_dms->{u_id}); + $apif->authout($q,$coo) if($coo); + print redirect("$varenv{wwwhost}/$varenv{mandant}/Anmelden?conflict_failure=1"); + exit 0; + } print redirect("$varenv{wwwhost}/$varenv{mandant}/Account/$varenv{accounting_2}?cum=1$session_and\&$returnwww"); }elsif($returnwww =~ /int03/){ print redirect("$varenv{wwwhost}/$varenv{mandant}/Account/$varenv{accounting_1_5}?cum=1$session_and\&$returnwww"); diff --git a/copri4/main/src/Mod/Prelib.pm b/copri4/main/src/Mod/Prelib.pm index fb56453..bf235b1 100755 --- a/copri4/main/src/Mod/Prelib.pm +++ b/copri4/main/src/Mod/Prelib.pm @@ -556,6 +556,7 @@ sub save_contenttranspos { table => "contenttranspos", start_time => "$start_time", end_time => "$end_time", + int04 => "null", owner_end => $owner, mtime => "now()", }; diff --git a/copri4/main/src/Mod/Pricing.pm b/copri4/main/src/Mod/Pricing.pm index 5d573d7..43add59 100755 --- a/copri4/main/src/Mod/Pricing.pm +++ b/copri4/main/src/Mod/Pricing.pm @@ -324,14 +324,12 @@ sub fetch_rentalfeed { my $return = {}; $return->{bike_group} = ["$bike_group"]; - #TOD save with prefix - $return->{station} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$ctpos->{int04}"; + $return->{station} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$ctpos->{int06}"; $return->{uri_operator} = "$varenv->{wwwhost}";#TOD, should be DB select $return->{bike} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$ctpos->{barcode}"; #TOD save also sig prefix if($dbt->{operator}->{$varenv->{dbname}}->{oprefix} eq "SX"){ $return->{bike} = "S3X$ctpos->{barcode}"; - #$return->{station} = "S3X$ctpos->{int04}"; } $return->{state} = "$dbt->{copri_conf}->{bike_state}->{$ctpos->{int10}}" || ""; $return->{lock_state} = "$dbt->{copri_conf}->{lock_state}->{$ctpos->{int20}}"; @@ -508,46 +506,62 @@ sub operator_accounting2calc { my $varenv = shift; my $ctpos = shift;#client invoices my $ctf = shift;#Operator-Faktura config + my $today4db = strftime("%Y-%m-%d %H:%M:%S",localtime(time)); my $tplf = $dbt->get_tpl($dbh,"196");#Operator-Faktura my @tplf_order = split /,/,$tplf->{tpl_order}; + my $debug=1; + open(FILE,">>$varenv->{logdir}/operator_accounting2calc.log") if($debug); + print FILE "\n*-->$today4db $varenv->{dbname}\n" if($debug); + print FILE "ctpos:\n" . Dumper($ctpos) . "\n" if($debug); + #returned values my $oac = { - int01 => 0, - int02 => 0, - int93 => 0, - int94 => 0, - int95 => 0, - int96 => 0, - int97 => 0, - int98 => 0, - int99 => 0, - int100 => 0, + int01 => 0,#capture netto (Netto Erlös) + int02 => 0,#Gutschrift + int93 => 0,#Entgelt TeilRad + int94 => 0,#Disagio + int95 => 0,#Transaktion + int96 => 0,#Zahlungsmeldung + int97 => 0,#Kreditkarte Zuordnung + int99 => 0,#invoice captured brutto + int100 => 0,#Operator invoice (TeilRad Gebühren netto) }; - #TODO #accounting Bank Gebühren + my $invoice_brutto = 0; + my $sumgeb_bank = 0; + if($ctpos->{int01}){ + $invoice_brutto = $ctpos->{int01}; + #substract TeilRad Gebühren + if($ctpos->{int08} && $ctpos->{int08} > 0){ + $invoice_brutto -= $ctpos->{int08}; + } + #substract Bank Gebühren + if($ctpos->{int07} && $ctpos->{int07} > 0){ + $invoice_brutto -= $ctpos->{int07}; + $sumgeb_bank -= $ctpos->{int07}; + } + $oac->{int99} = $invoice_brutto; + #invoice capture netto + $oac->{int01} = $invoice_brutto / 119 * 100; + } + $oac->{int01} = sprintf('%.2f', $oac->{int01}); + + foreach(@tplf_order){ my ($key,$val,$size) = split /=/,$_; if($key =~ /int/){ - my $invoice_brutto = 0; - if($key eq "int01" && $ctpos->{int01}){ - $invoice_brutto = $ctpos->{int01}; - #substract TeilRad Gebühren - $invoice_brutto = $ctpos->{int01} - $ctpos->{int08} if($ctpos->{int08} && $ctpos->{int08} > 0); - #substract Bank Gebühren - $invoice_brutto = $ctpos->{int01} - $ctpos->{int07} if($ctpos->{int07} && $ctpos->{int07} > 0); - $oac->{int99} = $invoice_brutto; - #invoice capture netto - $oac->{int01} = $invoice_brutto / 119 * 100; - } - $oac->{int01} = sprintf('%.2f', $oac->{int01}); - if($ctpos->{state} =~ /Lastschrift|Überweisung/){ - $oac->{int93} = $oac->{int01} / 100 * $ctf->{$key} if($key eq "int01");#7,5% + if($ctpos->{state} =~ /Zahlungsausfall/){ + $oac->{int01} = $sumgeb_bank; + $oac->{int93} = $sumgeb_bank * -1 if($key eq "int01");#Entgelt TeilRad + $oac->{int93} = sprintf('%.3f', $oac->{int93}); + } + + if($ctpos->{state} =~ /Lastschrift|Überweisung/){ + $oac->{int93} = $oac->{int01} / 100 * $ctf->{$key} if($key eq "int01");#Entgelt TeilRad $oac->{int93} = sprintf('%.3f', $oac->{int93}); - $oac->{int98} = $oac->{int93} * 0.19 if($oac->{int93});#UmSt auf 7,5% - $oac->{int98} = sprintf('%.3f', $oac->{int98}); $oac->{int94} = $oac->{int01} / 100 * $ctf->{$key} * -1 if($key eq "int02");#po Disagio % $oac->{int94} = sprintf('%.3f', $oac->{int94}); $oac->{int95} = $ctf->{$key} * -1 if($key eq "int04");#po Trans @@ -556,11 +570,10 @@ sub operator_accounting2calc { $oac->{int96} = sprintf('%.3f', $oac->{int96}); $oac->{int97} = 0; } + if($ctpos->{state} =~ /Kreditkarte/){ - $oac->{int93} = $oac->{int01} / 100 * $ctf->{$key} if($key eq "int01");#7,5% + $oac->{int93} = $oac->{int01} / 100 * $ctf->{$key} if($key eq "int01");#Entgelt TeilRad $oac->{int93} = sprintf('%.3f', $oac->{int93}); - $oac->{int98} = $oac->{int93} * 0.19 if($oac->{int93});#UmSt auf 7,5% - $oac->{int98} = sprintf('%.3f', $oac->{int98}); $oac->{int94} = $oac->{int01} / 100 * $ctf->{$key} * -1 if($key eq "int03");#po Disagio % $oac->{int94} = sprintf('%.3f', $oac->{int94}); $oac->{int95} = $ctf->{$key} * -1 if($key eq "int05");#po Trans @@ -570,16 +583,19 @@ sub operator_accounting2calc { $oac->{int97} = $ctf->{$key} * -1 if($key eq "int07");#po CC Zuordnung $oac->{int97} = sprintf('%.3f', $oac->{int97}); } - #operator accounting - $oac->{int02} = $oac->{int01} + $oac->{int94} + $oac->{int95} + $oac->{int96} + $oac->{int97}; - $oac->{int02} = sprintf('%.3f', $oac->{int02}); - #operator invoice - #$oac->{int100} = $oac->{int93} + $oac->{int98};#brutto - $oac->{int100} = $oac->{int93};#netto - $oac->{int100} = sprintf('%.3f', $oac->{int100}); } } + #operator accounting + $oac->{int02} = $oac->{int01} + $oac->{int94} + $oac->{int95} + $oac->{int96} + $oac->{int97}; + $oac->{int02} = sprintf('%.3f', $oac->{int02}); + #operator invoice + $oac->{int100} = $oac->{int93};#netto + $oac->{int100} = sprintf('%.3f', $oac->{int100}); + + print FILE "oac:\n" . Dumper($oac) . "\n" if($debug); + close(FILE) if($debug); + return $oac; } diff --git a/copri4/main/src/Mod/Shareework.pm b/copri4/main/src/Mod/Shareework.pm index 6a6c762..a1635ae 100755 --- a/copri4/main/src/Mod/Shareework.pm +++ b/copri4/main/src/Mod/Shareework.pm @@ -111,16 +111,6 @@ sub delete_account { return "$i_rows-$u_rows-$d_rows"; } - -sub check_account(){ - my $self = shift; - my ($column2,$op2,$content2,$column3,$op3,$content3) = @_; - my $table = "contentadr"; - $content2 = $q->escapeHTML("$content2"); - my $account_check = $db->get_like2sort("contentadr","","","$column2","$op2","$content2","$column3","$op3","$content3"); - return $account_check; -} - #create_account is alwas done on primary first sub create_account(){ my $self = shift; @@ -440,8 +430,17 @@ sub save_account(){ if($valxx !~ /\w\@\w/){ $ret = "failure::$_#top"; }else{ - my $account_check = &check_account("","txt08","ilike",$valxx,"c_id","!=",$c_id); - print FILE "$account_check->{c_id} && $account_check->{c_id} != $c_id\n" if($debug); + my $pref_ac = { + table => "contentadr", + fetch => "one", + txt08 => "ilike::$valxx", + c_id => "!=::$c_id", + order => "mtime", + }; + my $account_check = $dbt->fetch_tablerecord($dbh,$pref_ac); + #my $account_check = $self->check_account("txt08","ilike",$valxx,"c_id","!=",$c_id); + + print FILE "account_check email:$valxx, c_id:$account_check->{c_id} && $account_check->{c_id} != $c_id\n" if($debug); if($account_check->{c_id} && $account_check->{c_id} != $c_id){ my $encoded_val = $uri_encode->encode($valxx); $ret_conflict = "failure::conflict_$_=$encoded_val#top"; @@ -525,6 +524,22 @@ sub save_account(){ my $vde_on_fail = $ctadr->{int12} || 3;#keep last or set 3 + #check if iban from another user has Vde + my $pref_ac = { + table => "contentadr", + fetch => "one", + txt22 => "$iban", + int12 => ">=::1", + c_id => "!=::$c_id", + order => "mtime", + }; + my $account_check = $dbt->fetch_tablerecord($dbh,$pref_ac); + print FILE "account_check iban:$iban, c_id:$account_check->{c_id} && $account_check->{c_id} != $c_id\n" if($debug); + if($account_check->{c_id} && $account_check->{c_id} != $c_id){ + my $encoded_val = $uri_encode->encode($iban); + $ret_conflict = "failure::conflict_txt22=$encoded_val#top"; + } + my $payone_mival = $payone->managemandate_main(\%varenv,$ctadr,"",$owner); if($payone_mival && $payone_mival =~ /\w{2}-\d+/){ #define fictiv invoice to get 1 € test diff --git a/copri4/main/src/Tpl/BaseEdit.pm b/copri4/main/src/Tpl/BaseEdit.pm index 7ab5500..96b24a6 100755 --- a/copri4/main/src/Tpl/BaseEdit.pm +++ b/copri4/main/src/Tpl/BaseEdit.pm @@ -234,7 +234,6 @@ sub tpl(){ ### my $bike_nodes = {}; - my $tariff_all = {}; my $node = { template_id => 205, parent_id => 200013, @@ -243,6 +242,16 @@ sub tpl(){ }; $bike_nodes = $dbt->fetch_rel4tpl4nd($dbh,$node); + my $station_all = {}; + my $pref_st = { + table => "content", + fetch => "all", + keyfield => "c_id", + template_id => 225, + }; + $station_all = $dbt->fetch_record($dbh,$pref_st); + + my $tariff_all = {}; my $tariff = { table => "content", fetch => "all", @@ -398,9 +407,19 @@ EOF print $q->td({-class=>'left_italic_cms'},"$des"),"\n"; #print $q->td({-class=>'content1_cms'}, $q->textfield(-class=>'etxt',-name=>"int09",-default=>"$cttpos->{int09}",-size=>"5",-maxlength=>5), "Text", $q->textfield(-class=>'etxt',-name=>"txt04",-default=>"$cttpos->{txt04}",-size=>"30",-maxlength=>50)),"\n"; print $q->td({-class=>'content1_cms'}, "$cttpos->{int09} ($cttpos->{txt04})"),"\n"; + } + #pos end station + elsif($key eq "int04" && "$size" eq "select" && $node_meta->{tpl_id} == 221){ + my @_valxx = (""); + foreach my $rid (sort { $station_all->{$a}->{int04} <=> $station_all->{$b}->{int04} } keys (%$station_all)){ + push (@_valxx, "$station_all->{$rid}->{int04}:$station_all->{$rid}->{int04} - $station_all->{$rid}->{txt01}"); + } + print $q->Tr(); + print $q->td({-class=>'left_italic_cms',-colspan=>'1'},"$des"); + print $q->td({-class=>'content1_cms',-colspan=>'1'},"$prefix",$but->selector_class("$key","eselect2","width:250px;",$cttpos->{int04},@_valxx)); - #Endstation - }elsif($key eq "int04"){ + } + elsif($key eq "int04"){ print $q->Tr(),"\n"; print $q->td({-class=>'left_italic_cms'},"$des"),"\n"; print $q->td({-class=>'content1_cms'}, "$prefix", $q->textfield(-class=>'etxt2',-name=>"int04",-default=>"$cttpos->{int04}",-size=>"15",-maxlength=>40)),"\n"; @@ -632,6 +651,18 @@ EOF print $q->td({-class=>'content1_cms', -colspan=>'1'}, $but->checkbox("1","$key","$ctrel->{$key}"), $postdes),"\n"; print $q->hidden(-name=>"$key",-override=>1,-value=>"null"); } + #bike station + elsif($key eq "int04" && "$size" eq "select" && $node_meta->{tpl_id} == 205){ + my @_valxx = (""); + foreach my $rid (sort { $station_all->{$a}->{int04} <=> $station_all->{$b}->{int04} } keys (%$station_all)){ + push (@_valxx, "$station_all->{$rid}->{int04}:$station_all->{$rid}->{int04} - $station_all->{$rid}->{txt01}"); + } + my $oprefix = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}"; + print $q->Tr(); + print $q->td({-class=>'left_italic_cms',-colspan=>'1'},"$des"); + print $q->td({-class=>'content1_cms',-colspan=>'1'},"$oprefix",$but->selector_class("$key","eselect","width:250px;",$ctrel->{int04},@_valxx)); + + } elsif($key eq "int04"){ my $oprefix = ""; $oprefix = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}" if($node_meta->{tpl_id} == 225 || $node_meta->{tpl_id} == 205); @@ -710,41 +741,12 @@ EOF print $q->td({-class=>'left_italic_cms'},"$des"),"\n"; print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector_class("$key","eselect","",$ctrel->{$key},@_lock_valxx)); } - #elsif($key =~ /int/ && "$size" eq "select"){ - # my @_valxx; - # my $selsize="50px"; - - # @_valxx = split(/\|/,$varenv{$seldes}); - # $ctrel->{$key} =~ s/\.00//; - # print $q->Tr(); - # print $q->td({-class=>'left_italic_cms'},"$des"),"\n"; - # print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector("$key","$selsize",$ctrel->{$key},@_valxx)); - #} elsif($key =~ /int/){ + $ctrel->{$key} = "75" if($key eq "int06" && !$ctrel->{$key} && $node_meta->{tpl_id} == 225); print $q->Tr(); print $q->td({-class=>'left_italic_cms'},"$des"),"\n"; print $q->td({-class=>'content1_cms',-colspan=>2},$q->textfield(-class=>'etxt', -style=>"width:$w;",-name=>"$key", -override=>'1', -default=>"$ctrel->{$key}"), $postdes),"\n"; } - elsif($key =~ /txt/ && "$size" eq "select" && "$des" =~ /Status|PiQuest|Zahlungsweise/){ - my @_valxx; - my $selsize="150px"; - @_valxx = split(/\|/,$varenv{$seldes}) if($varenv{$seldes}); - print $q->Tr(); - print $q->td({-class=>'left_italic_cms'},"$des"),"\n"; - if($des eq "PiQuest"){ - print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector("$key","$selsize","",@_valxx)," $ctrel->{$key}"); - }else{ - print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector("$key","$selsize",$ctrel->{$key},@_valxx)); - } - } - elsif($key =~ /txt/ && "$size" eq "select" && "$des" =~ /System|Ziel Datei/){ - my @_valxx; - my $selsize="150px"; - @_valxx = split(/\|/,$varenv{$seldes}) if($varenv{$seldes}); - print $q->Tr(); - print $q->td({-class=>'left_italic_cms'},"$des"),"\n"; - print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector("$key","$selsize",$ctrel->{$key},@_valxx)); - } elsif($key =~ /txt/ && "$size" eq "select" && "$des" =~ /Land/){ my @_valxx; my $selsize="150px"; diff --git a/copri4/main/src/Tpl/Calorin.pm b/copri4/main/src/Tpl/Calorin.pm index 6168b66..60d1f65 100755 --- a/copri4/main/src/Tpl/Calorin.pm +++ b/copri4/main/src/Tpl/Calorin.pm @@ -338,9 +338,11 @@ sub tpl(){ my $part_style = "padding:0 5px;border: 2px solid #dcd77f;"; my ($ct_name,$ct_txt00,$ct_txt01,$ct_phone,$c_id4trans,$tpl_id4trans,$u_name); + my $opos = ""; my $id = $cttpos->{$pid}->{ct_id}; if($ct4rel->{$id}->{c_id} == $cttpos->{$pid}->{ct_id}){ $ct_name = $ct4rel->{$id}->{ct_name}; + $opos = "" if($ct4rel->{$id}->{int14}); $ct_txt00 = $ct4rel->{$id}->{txt00}; $ct_txt01 = $ct4rel->{$id}->{txt01}; $ct_phone = $ct4rel->{$id}->{txt07}; @@ -484,7 +486,7 @@ sub tpl(){ } if($users_dms_primary->{u_id} && $users_dms->{u_id} && $users_dms->{int03} >= 1){ - print $q->div({-style=>'float:left;margin-left:1em;'}, "→ Faktura", $q->a({-class=>"linknav3",-style=>"$trans_style",-href=>"/DMS/Faktura?ct_trans=open\&c_id4trans=$c_id4trans\&tpl_id4trans=$tpl_id4trans\&kind_of_trans=Faktura\&owner=$users_dms->{owner}",-title=>"Faktura Terminal öffnen"},"\#$ct_name")),"\n" if($c_id4trans && $tpl_id4trans); + print $q->div({-style=>'float:left;margin-left:1em;'}, "→ Faktura", $q->a({-class=>"linknav3",-style=>"$trans_style",-href=>"/DMS/Faktura?ct_trans=open\&c_id4trans=$c_id4trans\&tpl_id4trans=$tpl_id4trans\&kind_of_trans=Faktura\&owner=$users_dms->{owner}",-title=>"Faktura Terminal öffnen"},"$opos \#$ct_name")),"\n" if($c_id4trans && $tpl_id4trans); print $q->div({-style=>'float:left;margin-left:1em;'}, "$user_device"),"\n"; } diff --git a/copri4/main/src/Tpl/Liste3.pm b/copri4/main/src/Tpl/Liste3.pm index c0cd024..1c5a27b 100755 --- a/copri4/main/src/Tpl/Liste3.pm +++ b/copri4/main/src/Tpl/Liste3.pm @@ -957,7 +957,9 @@ EOF } elsif($key eq "ct_name" && $ct4rel->{$id}->{$key}){ if($table =~ /contenttrans|contenttver/){ - print $q->td({-class=>'tdint',-style=>"font-weight:normal;$set_style4nr"},$q->a({-class=>"linknav3",-href=>"?ct_trans=open\&mode=manager\&c_id4trans=$ct4rel->{$id}->{c_id}\&tpl_id4trans=$ct4rel->{$id}->{template_id}\&kind_of_trans=$node_meta->{node_name}\&owner=$users_dms->{u_id}\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>"Terminal öffnen"},"$ct4rel->{$id}->{$key}")); + my $opos = ""; + $opos = "" if($ct4rel->{$id}->{int14}); + print $q->td({-class=>'tdint',-style=>"font-weight:normal;$set_style4nr", -nowrap=>1},$q->a({-class=>"linknav3",-href=>"?ct_trans=open\&mode=manager\&c_id4trans=$ct4rel->{$id}->{c_id}\&tpl_id4trans=$ct4rel->{$id}->{template_id}\&kind_of_trans=$node_meta->{node_name}\&owner=$users_dms->{u_id}\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>"Terminal öffnen"},"$opos $ct4rel->{$id}->{$key}")); }elsif($table =~ /content$|contentadr|contentnel/){ print $q->td({-class=>"tdint",-style=>"font-weight:normal;$set_style4nr"},$q->a({-class=>"linknav3",-href=>"?node2edit=editpart\&mode=manager\&rel_id=$ct4rel->{$id}->{rel_id}\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>"Terminal öffnen"},"$ct4rel->{$id}->{$key}")),"\n"; }elsif(($node_meta->{tpl_order} !~ /barcode/) || ("$ct4rel->{$id}->{$key}" ne "$ct4rel->{$id}->{barcode}")){ diff --git a/copri4/main/src/scripts/mailTransportcms.pl b/copri4/main/src/scripts/mailTransportcms.pl index 7e0ab45..dbf75bd 100755 --- a/copri4/main/src/scripts/mailTransportcms.pl +++ b/copri4/main/src/scripts/mailTransportcms.pl @@ -107,6 +107,27 @@ if($todo eq "send_occupied2hotline"){ $sendmail = send_occupied2hotline($sendref); } +#send_invoice_onwork once a week as reminder +if($todo eq "send_invoice_onwork"){ + #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); + + $oprefix = $op_name->{oprefix} || ""; + $sendref->{syshost} = "$syshost"; + $sendmail = send_invoice_onwork($dbh,$oprefix,$sendref); + if($sendmail->{c_id}){ + sendmailjob($sendmail); + } + } + } + +} + if($sendmail->{c_id}){ sendmailjob($sendmail); }else{ @@ -341,6 +362,7 @@ $sendref->{message} = <dbconnect_extern($dbt->{primary}->{sharee_primary}->{database}->{dbname},"iso-8859-1"); + + my $pref_ctu = { + table => "contentuser", + fetch => "one", + c_id => "1",#primary hotline + }; + my $uadr = { c_id => 0 }; + $uadr = $dbt->fetch_tablerecord($dbh_primary,$pref_ctu); + $sendref->{mail_to} = $uadr->{txt08}; + + my $pref = { + table => "contenttrans", + fetch => "all", + keyfield => "c_id", + txt22 => "in Arbeit", + state => "is::null", + }; + + my $ctt = $dbt->fetch_tablerecord($dbh,$pref); + + my $ct_onwork = ""; + foreach my $id (sort { $ctt->{$b}->{c_id} <=> $ctt->{$a}->{c_id} } keys(%$ctt)){ + + $ct_onwork .= $oprefix . " Faktura ID:$ctt->{$id}->{c_id}, " . " Nummer: " . $ctt->{$id}->{ct_name} . "\n"; + $sendref->{c_id} = $ctt->{$id}->{c_id};#just one + print "$ctt->{$id}->{c_id}: $ct_onwork $sendref->{c_id}"; + + } + + if($ct_onwork){ + $ct_onwork =~ s/,$//; + $sendref->{subject} = "$oprefix wöchentliche Faktura in Arbeit Übersicht"; + +$sendref->{message} = <{message} =~ s/\n/\
/g; + return $sendref; + } + return; +}#end send_invoice_onwork + + #prepare email by cms markup sub prepare_content { my $sendref = shift; diff --git a/copri4/main/src/scripts/statistik_amountCSV_files.pl b/copri4/main/src/scripts/statistik_amountCSV_files.pl index 8b39863..9f6c820 100755 --- a/copri4/main/src/scripts/statistik_amountCSV_files.pl +++ b/copri4/main/src/scripts/statistik_amountCSV_files.pl @@ -189,7 +189,6 @@ print "Neue NutzerInnen mit Bonus Tarif: $swk_reg\n"; table => "contenttranspos", fetch => "all", keyfield => "c_id", - #int04 => "!=::99",#virtual end-station int05 => "is::null",#not if sub workflow doc int06 => "!=::99",#virtual start-station int29 => "$bike_type_id",#nodes.type_id @@ -213,11 +212,7 @@ print "Neue NutzerInnen mit Bonus Tarif: $swk_reg\n"; $swk_i++; } - if($pos->{$id}->{int06} && exists($start_station->{$pos->{$id}->{int06}})){ - $start_station->{$pos->{$id}->{int06}} += 1; - }elsif($pos->{$id}->{int04} && exists($start_station->{$pos->{$id}->{int04}})){ - $start_station->{$pos->{$id}->{int04}} += 1; - } + $start_station->{$pos->{$id}->{int06}} += 1 if($pos->{$id}->{int06} && exists($start_station->{$pos->{$id}->{int06}})); $end_station->{$pos->{$id}->{int04}} += 1 if($pos->{$id}->{int04} && exists($start_station->{$pos->{$id}->{int04}})); $diff_station += 1 if($pos->{$id}->{int06} && $pos->{$id}->{int04} && $pos->{$id}->{int06} != $pos->{$id}->{int04}); diff --git a/copri4/shareeapp-operator/src/Tpl/Anmelden.pm b/copri4/shareeapp-operator/src/Tpl/Anmelden.pm index 4cb4a1b..d0332fd 100755 --- a/copri4/shareeapp-operator/src/Tpl/Anmelden.pm +++ b/copri4/shareeapp-operator/src/Tpl/Anmelden.pm @@ -150,7 +150,7 @@ sub tpl(){ # print $q->div({-style=>'margin-top:1em;'},"
Anmelden
"),"\n"; print $q->div({-style=>'margin-top:1em;text-align:center;'},""),"\n"; - print $q->div({-style=>'margin-top:1em;text-align:center;'},$q->a({-class=>"btn btn-default btn-lg btn-block", -style=>"background-color:#ffffff;color:#$bgcolor1;", -role=>"button", -href=>"$varenv->{wwwhost}/$varenv->{mandant}/Account/$varenv->{accounting_1}"}, "$varenv->{cms}->{'iframe-request-pw'}->{txt}")),"\n"; + print $q->div({-style=>'margin-top:1em;text-align:center;'},$q->a({-class=>"btn btn-default btn-lg btn-block", -style=>"background-color:#ffffff;color:#$bgcolor1;", -role=>"button", -href=>"$varenv->{wwwhost}/$varenv->{mandant}/Account/$varenv->{accounting_1}"}, "$varenv->{cms}->{'iframe-new-account'}->{txt}")),"\n"; print $q->div({-style=>'margin-top:1em;text-align:center;'},$q->a({-class=>"", -style=>"background-color:#ffffff;color:#$bgcolor1;font-size:1.1em;text-decoration:underline;", -role=>"button", -href=>"$varenv->{wwwhost}/$varenv->{mandant}/Account"}, "$varenv->{cms}->{'iframe-request-pw'}->{txt}")),"\n";