From b3fb4e21430b5bfc15721acf15452010b3d3f0f2 Mon Sep 17 00:00:00 2001 From: ragu Date: Sun, 1 May 2022 18:31:03 +0200 Subject: [PATCH] Invoice refactoring --- copri4/main/src/Mod/APIfunc.pm | 12 +- copri4/main/src/Mod/DBtank.pm | 8 +- copri4/main/src/Mod/Prelogic.pm | 2 +- copri4/main/src/Mod/Pricing.pm | 99 +++++-- copri4/main/src/Mod/Printpreview.pm | 109 +++++--- copri4/main/src/Mod/Shareework.pm | 251 ------------------ copri4/main/src/Tpl/Liste3.pm | 59 +--- copri4/main/src/Tpl/TransPositionen.pm | 117 ++++---- copri4/shareeapp-operator/src/Tpl/FormEdit.pm | 4 + 9 files changed, 220 insertions(+), 441 deletions(-) diff --git a/copri4/main/src/Mod/APIfunc.pm b/copri4/main/src/Mod/APIfunc.pm index 39849db..03aa17f 100755 --- a/copri4/main/src/Mod/APIfunc.pm +++ b/copri4/main/src/Mod/APIfunc.pm @@ -876,7 +876,7 @@ sub booking_request(){ my $dbh = ""; my $bike_id = ""; - $bike_id = $1 if($bike =~ /(\d+)/); + $bike_id = $1 if($bike =~ /(\d+)$/); my $pos_id=""; my $now_dt = strftime "%Y-%m-%d %H:%M", localtime; @@ -1087,6 +1087,8 @@ sub booking_update(){ $gps = "$latitude,$longitude" if($latitude && $longitude); } + my $Ilockit_GUID = ""; + $Ilockit_GUID = $q->escapeHTML($q->param('Ilockit_GUID')) if($q->param('Ilockit_GUID') && $q->param('Ilockit_GUID') =~ /\w+-\w+-\w+-\w+$/); my $gps_age = 0; my $gps_age_minutes = 60; $gps_age = $q->escapeHTML($1) if($q->param('gps_age') =~ /^(\d+)/);#in milli-sec @@ -1127,7 +1129,7 @@ sub booking_update(){ $booking_values->{response_text} = "Keine Reservierung zu Fahrrad Nr. " . $q->param('bike') . " gefunden."; } }else{ - + $update_pos->{txt17} = $Ilockit_GUID if($Ilockit_GUID); #prevent reset occupied values OR only if genkey defined #if(($state eq "occupied" && $record_pos->{txt10} =~ /requested/) || ($state eq "occupied" && $record_pos->{txt10} =~ /occupied/ && $q->param('genkey') eq "1")) @@ -1320,7 +1322,7 @@ sub booking_update(){ #$self->service_automatic($q) if($1 <= 40); } $update_cc->{txt15} = $q->escapeHTML($q->param('firmware')) if($q->param('firmware')); - + $update_cc->{txt17} = $Ilockit_GUID if($Ilockit_GUID); } #end Ilockit || sigo }else{ @@ -1766,6 +1768,7 @@ sub bikes_available(){ if($record->{$id}->{int11} eq "2"){ $return->{$id}->{system} = "Ilockit"; + $return->{$id}->{Ilockit_GUID} = "$record->{$id}->{txt17}"; $return->{$id}->{Ilockit_ID} = "$record->{$id}->{txt18}"; #if($users_serviceapp->{int09}) #shareetool @@ -1814,7 +1817,7 @@ sub bikes_available(){ $time_unit = $dbt->time_format($tariff_content->{$tid}->{time01}); $return->{$id}->{tariff_description2}->{$td} = ["$td_template->{$td}->{int36}", "$tariff_content->{$tid}->{int36} € / $time_unit"]; }elsif($td_template->{$td}->{int17} && $tariff_content->{$tid}->{int17} && $tariff_content->{$tid}->{int17} > 0){ - $tariff_content->{$tid}->{int17} =~ s/\./,/; + #$tariff_content->{$tid}->{int17} =~ s/\./,/; $return->{$id}->{tariff_description2}->{$td} = ["$td_template->{$td}->{int17}","$tariff_content->{$tid}->{int17} € / Tag"]; }elsif($td_template->{$td}->{time02} && $tariff_content->{$tid}->{time02} =~ /[1-9]/){ $time_unit = $dbt->time_format($tariff_content->{$tid}->{time02}); @@ -1905,6 +1908,7 @@ sub bikes_all(){ if($record->{$id}->{int11} eq "2"){ $return->{$id}->{system} = "Ilockit"; + $return->{$id}->{Ilockit_GUID} = "$record->{$id}->{txt17}"; $return->{$id}->{Ilockit_ID} = "$record->{$id}->{txt18}"; #shareetool if($q->param('authcookie') && $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{id} && $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{id} == 187 && scalar(@{$user_tour} >= 1)){ diff --git a/copri4/main/src/Mod/DBtank.pm b/copri4/main/src/Mod/DBtank.pm index 5709f31..72c8c88 100755 --- a/copri4/main/src/Mod/DBtank.pm +++ b/copri4/main/src/Mod/DBtank.pm @@ -1243,7 +1243,7 @@ sub tariff_description2_template { my $self = shift; my $tpl_order = { 1 => {int35 => "Mietgebühr"},#unit_price1 - 2 => {int36 => "Mietgebühr ab 2. Tag"},#unit_price2 + 2 => {int36 => "ab 2. Tag"},#unit_price2 #3 => {int37 => "Grundgebühr"},#startup_price 4 => {int17 => "Max. Gebühr"},#max_fee/day 5 => {time01 => "Zeiteinheit"},#unit_time @@ -1318,6 +1318,10 @@ sub insert_pos(){ my $reserveid = shift || ""; $ct_name = $ct->{barcode} if(!$ct_name);#artikelnr or bikenr + my $prefix = ""; + $ct_name =~ s/S[1-9]X/SX/;#sig + $prefix = $1 if($ct_name =~ /^([A-Z]+)(\d+)$/i); + my $user_name = $ctadr->{txt01}; $user_name = $ctadr->{txt08} if(!$user_name || $user_name eq "no name"); my $staff = 0; @@ -1364,7 +1368,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,itime,start_time,end_time,int02,int03,int06,int04,txt05,txt06,txt07,int10,int12,int13,owner,int07,txt04,int09,int17,int15,int16,int11,int18,int19,txt18,int20,int25,int34,txt22,txt10,int35,int36,int37,time01,time02) VALUES ('$ctt_id','$ct->{c_id}','$ctadr->{c_id}','$ct_name','$ct->{barcode}','$ct->{txt01}','$user_name','$ct->{txt02}','$ctadr->{txt09}',now(),now(),'$endRental','$unit_price','$menge','$station','$station','$ct->{txt06}','$ct->{txt06}','$ct->{txt07}','$status','$from_main_id','$deviceId','$owner','$rabatt','$tariff_desc','$tariff_nr','$daymax_price','$abo_price','$free_hours','$ct->{int11}','$sharing_type','$bike_charge','$ct->{txt17}','$ct->{int20}','$trackon','$staff','$ct->{txt22}','$reserveid','$unit_price1','$unit_price2','$start_price','$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,int02,int03,int06,int04,txt05,txt06,txt07,int10,int12,int13,owner,int07,txt04,int09,int17,int15,int16,int11,int18,int19,txt17,txt18,int20,int25,int34,txt22,txt10,int35,int36,int37,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','$unit_price','$menge','$station','$station','$ct->{txt06}','$ct->{txt06}','$ct->{txt07}','$status','$from_main_id','$deviceId','$owner','$rabatt','$tariff_desc','$tariff_nr','$daymax_price','$abo_price','$free_hours','$ct->{int11}','$sharing_type','$bike_charge','$ct->{txt17}','$ct->{txt18}','$ct->{int20}','$trackon','$staff','$ct->{txt22}','$reserveid','$unit_price1','$unit_price2','$start_price','$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,int02,int03,txt01,txt06,txt07,int10,int12,owner) VALUES ('$ctt_id','$ct->{c_id}','$ctadr->{c_id}','$ct_name','0','$user_name','$ctadr->{txt09}',now(),'$unit_price1','1','$ct->{txt01}','$ct->{txt06}','$ct->{txt07}','0','$from_main_id','$owner') RETURNING c_id"); } diff --git a/copri4/main/src/Mod/Prelogic.pm b/copri4/main/src/Mod/Prelogic.pm index f0ef7c9..ef4cfad 100755 --- a/copri4/main/src/Mod/Prelogic.pm +++ b/copri4/main/src/Mod/Prelogic.pm @@ -378,7 +378,7 @@ sub preinit(){ table => "contenttranspos", start_time => "$start_time", end_time => "$end_time", - owner => $users_dms->{u_id}, + owner_end => $users_dms->{u_id}, mtime => "now()", }; my $rows = $dbt->update_record($dbh,$update_pos,$record_pos); diff --git a/copri4/main/src/Mod/Pricing.pm b/copri4/main/src/Mod/Pricing.pm index 7835084..5d0f9cf 100755 --- a/copri4/main/src/Mod/Pricing.pm +++ b/copri4/main/src/Mod/Pricing.pm @@ -38,6 +38,14 @@ sub new { my $dbh = ""; +sub round(){ + my $self = shift; + my ($amount) = @_; + $amount = $amount * (10**(2)); + my $rounded = int($amount + .5 * ($amount<=> 0)) / (10**(2)); + return $rounded; +} + sub only_first_free(){ my $self = shift; my $ctpos = shift; @@ -206,14 +214,14 @@ sub counting_rental { if($rental_unit =~ /(\d+)\.(\d+)/){ $rental_unit_rounded = $1 + 1 if($2 > 0); } - if(!$ctpos->{int36} && $ctpos->{int17} && $ctpos->{int17} > 0){ + if($ctpos->{int36} == 0 && $ctpos->{int17} && $ctpos->{int17} > 0){ $counting->{int38} = $rental_unit_rounded;#count by time $rental_time_price = $rental_unit_rounded * $ctpos->{int35}; $used_methode .= " | $rental_unit_rounded rental_unit_rounded * $ctpos->{int35} int35"; - }elsif($ctpos->{int36}){#if second unit_price2 defined + }elsif($ctpos->{int36} > 0){#if second unit_price2 defined $counting->{int40} = 1;#by day $rental_time_price = 1 * $ctpos->{int35}; - $used_methode .= " | 1 rental_unit_rounded * $ctpos->{int35} int35"; + $used_methode .= " | 1 rental_unit_rounded * $ctpos->{int35} int35 with unit_price2 $ctpos->{int36} 36"; if($rental_unit_rounded >= 2 && $ctpos->{int36} && $ctpos->{int36} > 0){ my $rental_unit_rounded2 = $rental_unit_rounded - 1;#by day @@ -229,7 +237,24 @@ sub counting_rental { $total_price = $rental_day_price + $rental_time_price; $used_methode .= " --> $total_price total_price = $rental_day_price rental_day_price + $rental_time_price rental_time_price"; - $total_price = sprintf('%.2f', $total_price); + #$total_price = sprintf('%.2f', $total_price); + + my $discount = ""; + my $discount_val = $ctpos->{int07} || 0; + if($discount_val != 0 && $total_price){ + my $discount_eur = $discount_val; + $discount_eur = $total_price * $discount_val/100 if($ctpos->{int08} != 1); + $total_price -= $discount_eur; + + $discount = "-" . $ctpos->{int07}; + if($ctpos->{int08} == 1){ + $discount .= " €"; + }else{ + $discount =~ s/\.00//; + $discount .= "%"; + } + } + $return->{start_time} = "$ctpos->{start_time}"; $return->{end_time} = "$computed_end_time"; @@ -238,6 +263,7 @@ sub counting_rental { $return->{unit_price} = "$ctpos->{int35}"; $return->{real_clock} = "$real_clock"; $return->{total_price} = "$total_price"; + $return->{discount} = "$discount"; $return->{rentalog}->{real_clock} = "$real_clock"; $return->{rentalog}->{freed_time} = "$freed_time"; @@ -509,13 +535,13 @@ sub sprit2calc { my $einzel = $ctpos->{int02}; my $menge = $ctpos->{int03}; - my $rabatt_val = $ctpos->{int07} || 0; + my $discount_val = $ctpos->{int07} || 0; my $total = 0; - if($rabatt_val != 0 && $einzel && $menge){ - my $rabatt_eur = $rabatt_val; + if($discount_val != 0 && $einzel && $menge){ + my $discount_eur = $discount_val; #if int08 != 1 alias € - $rabatt_eur = $einzel * $menge * $rabatt_val/100 if($ctpos->{int08} != 1); - $total = $einzel * $menge - $rabatt_eur; + $discount_eur = $einzel * $menge * $discount_val/100 if($ctpos->{int08} != 1); + $total = $einzel * $menge - $discount_eur; }elsif($einzel && $menge){ $total = $einzel * $menge; } @@ -530,35 +556,66 @@ sub sprit2calc { } -#computes position price and rabatt +#computes article position price and rabatt sub price2calc { my $self = shift; my $ctpos = shift; my $total = 0; - my $rabatt = ""; + my $discount = ""; my $einzel = $ctpos->{int02}; my $menge = $ctpos->{int03}; - my $rabatt_val = $ctpos->{int07} || 0; - if($rabatt_val != 0 && $einzel && $menge){ - my $rabatt_eur = $rabatt_val; + my $discount_val = $ctpos->{int07} || 0; + if($discount_val != 0 && $einzel && $menge){ + my $discount_eur = $discount_val; #if int08 != 1 alias € - $rabatt_eur = $einzel * $menge * $rabatt_val/100 if($ctpos->{int08} != 1); - $total = $einzel * $menge - $rabatt_eur; + $discount_eur = $einzel * $menge * $discount_val/100 if($ctpos->{int08} != 1); + $total = $einzel * $menge - $discount_eur; }elsif($einzel && $menge){ $total = $einzel * $menge; } if($ctpos->{int07} && $ctpos->{int07} > 0 && $menge > 0){ - $rabatt = "-" . $ctpos->{int07}; + $discount = "-" . $ctpos->{int07}; if($ctpos->{int08} == 1){ - $rabatt .= " €"; + $discount .= " €"; }else{ - $rabatt =~ s/\.00//; - $rabatt .= " %"; + $discount =~ s/\.00//; + $discount .= " %"; } } - return ($total,$rabatt); + return ($total,$discount); +} + +#computes rental position price and rabatt +sub rental_price2calc { + my $self = shift; + my $ctpos = shift || {}; + my $pricing = shift || {}; + + my $total = 0; + my $discount = ""; + my $discount_val = $ctpos->{int07} || 0; + if($discount_val != 0 && $pricing->{total_price}){ + my $discount_eur = $discount_val; + #if int08 != 1 alias € + $discount_eur = $pricing->{total_price} * $discount_val/100 if($ctpos->{int08} != 1); + $total = $pricing->{total_price} - $discount_eur; + }elsif($pricing->{total_price}){ + $total = $pricing->{total_price}; + } + + if($ctpos->{int07} && $ctpos->{int07} > 0){ + $discount = "-" . $ctpos->{int07}; + if($ctpos->{int08} == 1){ + $discount .= " €"; + }else{ + $discount =~ s/\.00//; + $discount .= " %"; + } + } + + return ($total,$discount); } 1; diff --git a/copri4/main/src/Mod/Printpreview.pm b/copri4/main/src/Mod/Printpreview.pm index 162a91a..17ed3d4 100755 --- a/copri4/main/src/Mod/Printpreview.pm +++ b/copri4/main/src/Mod/Printpreview.pm @@ -85,7 +85,7 @@ td { } .tdtxt { - font-size:1em; + font-size:0.91em; padding:0.1em 0.5em; vertical-align: top; text-align: left; @@ -107,7 +107,7 @@ td { } .tdint { - font-size:1em; + font-size:0.91em; padding:0.1em 0.5em; vertical-align: top; text-align: right; @@ -342,11 +342,11 @@ td { #my $umst1619 = $lb->umst_breaking($ctt,""); - my @tpl_order = ("txt01=Beschreibung","ct_name=Nummer","date_time=Mietzeit","int03=Menge","int02=Preis","int07=Rabatt","int04=Gesamt"); + my @tpl_order = ("txt01=Beschreibung","ct_name=Nummer","date_time=Mietzeit","int03=Menge (Std:Min)","int02=Preis","int07=Rabatt","int04=Gesamt"); my ($cttpos,$rows) = $db->collect_contentpos("contenttrans",$c_id); foreach my $id (keys(%$cttpos)){ if($cttpos->{$id}->{int26}){ - @tpl_order = ("txt01=Beschreibung","ct_name=Nummer","date_time=Mietzeit","int26=Einsparung","int03=Menge","int02=Preis","int07=Rabatt","int04=Gesamt"); + @tpl_order = ("txt01=Beschreibung","ct_name=Nummer","date_time=Mietzeit","int26=Einsparung","int03=Menge (Std:Min)","int02=Preis","int07=Rabatt","int04=Gesamt"); } } @@ -387,6 +387,8 @@ td { #Tablecontent (ct_name(primary key)) my $sum_parts19=0; + my $diff19 = 100 + 19; + my $sum_umst19=0; my $j=0; my $k=0; my $nullcount=0; @@ -396,28 +398,33 @@ td { my $gesamt = 0; my $rabatt = ""; - my $einzel = $cttpos->{$id}->{int02}; - my $menge = $cttpos->{$id}->{int03} || 0; - my $unit = $cttpos->{$id}->{txt03}; + my $pricing = {}; + my $counting = {}; + my $rental_feed = {}; - ($gesamt,$rabatt) = $pri->price2calc($cttpos->{$id}); + if($cttpos->{$id}->{int35} && $cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ + ($pricing,$counting) = $pri->counting_rental(\%varenv,$cttpos->{$id},"calc_price"); + $rental_feed = $pri->fetch_rentalfeed(\%varenv,$cttpos->{$id},$counting); + $rabatt = $pricing->{discount}; + $sum_parts19 += $pricing->{total_price}; + $gesamt = $pri->round($pricing->{total_price}); + $gesamt = sprintf('%.2f', $gesamt); + }else{ + ($gesamt,$rabatt) = $pri->price2calc($cttpos->{$id}); + $sum_parts19 += $gesamt; + $gesamt = $pri->round($gesamt); + $gesamt = sprintf('%.2f', $gesamt); + } if($gesamt == 0){ $nullcount++; } if($gesamt != 0){ - $gesamt = $lb->round($gesamt); - $gesamt = $lb->cashme($gesamt,","); $j++; if($j<=$max_table_wc || $break_table_wc){ - ($gesamt,$rabatt) = $pri->price2calc($cttpos->{$id}); - $sum_parts19 += $gesamt; - $gesamt = $lb->round($gesamt); - $gesamt = $lb->cashme($gesamt,","); - #2. empty loop for sum if($break_table_wc){ #print "$j|"; @@ -446,15 +453,17 @@ td { if($key =~ /txt01/){ print "\n"; if($cttpos->{$id}->{$key}){ - $cttpos->{$id}->{$key} =~ s/\
/;   /g; - print "$cttpos->{$id}->{$key}
\n"; + $cttpos->{$id}->{$key} =~ s/\
/,   /g; + my $tariff = ""; + $tariff = "
Tarif: $cttpos->{$id}->{int09} $cttpos->{$id}->{txt04}" if($cttpos->{$id}->{txt04}); + print "$cttpos->{$id}->{$key} $tariff
\n"; } if($cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ #print "
\n"; $cttpos->{$id}->{start_time} = $lb->time4de($cttpos->{$id}->{start_time},"1"); $cttpos->{$id}->{end_time} = $lb->time4de($cttpos->{$id}->{end_time},"1"); - print $q->span("Mietzeit: $cttpos->{$id}->{start_time} – $cttpos->{$id}->{end_time}"),"\n"; + print $q->span("$cttpos->{$id}->{start_time} – $cttpos->{$id}->{end_time}"),"\n"; } print "\n"; } @@ -472,25 +481,36 @@ td { print $q->td({-class=>'tdint',-nowrap=>'1'},"$co2saving"); } if($key =~ /int03/){ - $cttpos->{$id}->{$key} =~ s/\./,/; - print $q->td({-class=>'tdint'},"$cttpos->{$id}->{$key}"),"\n"; + if($cttpos->{$id}->{int35} && $cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ + print $q->td({-class=>'tdint',-nowrap=>1},"$pricing->{real_clock} $pricing->{freed_time}"),"\n"; + }else{ + $cttpos->{$id}->{$key} =~ s/\./,/; + print $q->td({-class=>'tdint'},"$cttpos->{$id}->{$key}"),"\n"; + } } - if($key =~ /int02/){ - if($cttpos->{$id}->{$key} == "0"){ - $cttpos->{$id}->{$key}=""; + if($key =~ /int02/){ + if($cttpos->{$id}->{int35} && $cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ + print "\n"; + foreach my $fid (sort keys(%{ $rental_feed->{tariff_description2} })){ + if(ref($rental_feed->{tariff_description2}->{$fid}) eq "ARRAY"){ + print "$rental_feed->{tariff_description2}->{$fid}[0]: $rental_feed->{tariff_description2}->{$fid}[1]
\n"; + } + } + print "\n"; }else{ - $cttpos->{$id}->{$key} =~ s/\./,/; - } - print $q->td({-nowrap=>'1',-class=>'tdint'},"$cttpos->{$id}->{$key}"),"\n"; - } + $cttpos->{$id}->{$key} =~ s/\./,/; + print $q->td({-class=>'tdint',-nowrap=>1},"$cttpos->{$id}->{$key} €"),"\n"; + } + } - if($key =~ /int04/){ - $gesamt .= " €"; + if($key =~ /int04/){ + $gesamt =~ s/\./,/; if($rabatt != 0){ - print $q->td({-nowrap=>'1',-class=>'tdint'},"(Rabatt $rabatt) $gesamt"),"\n"; + $rabatt =~ s/\./,/; + print $q->td({-nowrap=>'1',-class=>'tdint'},"$rabatt $gesamt €"),"\n"; }else{ - print $q->td({-nowrap=>'1',-class=>'tdint'},"$gesamt"),"\n"; + print $q->td({-nowrap=>'1',-class=>'tdint'},"$gesamt €"),"\n"; } } } @@ -516,18 +536,23 @@ td { } } - - my $diff19 = 100 + 19; - my $sum_umst19 = $sum_parts19 / $diff19 * 19; - $sum_umst19 = $lb->round($sum_umst19); + if($sum_parts19 && $sum_parts19 != 0){ + $sum_umst19 = $sum_parts19 / $diff19 * 19; + $sum_umst19 = $pri->round($sum_umst19); + } my $sum_netto19 = $sum_parts19 - $sum_umst19; - $sum_netto19 = $lb->cashme($sum_netto19); - my $sum_nettoall = $sum_netto19; - $sum_nettoall = $lb->cashme($sum_nettoall,","); + $sum_netto19 = sprintf('%.2f', $sum_netto19); + $sum_netto19 =~ s/\./,/; + my $sum_paid = $sum_parts19; - $sum_parts19 = $lb->cashme($sum_parts19,","); - $sum_umst19 = $lb->cashme($sum_umst19,","); - $sum_paid = $lb->cashme($sum_paid,","); + $sum_paid = $pri->round($sum_paid); + my $sum_preauth = $sum_paid || 0; + $sum_paid = sprintf('%.2f', $sum_paid); + $sum_paid =~ s/\./,/; + + $sum_parts19 = sprintf('%.2f', $sum_parts19); + $sum_umst19 = sprintf('%.2f', $sum_umst19); + $sum_umst19 =~ s/\./,/; print $q->Tr(),"\n"; @@ -549,7 +574,7 @@ td { if($ctt->{txt00} !~ /steuerfrei/){#dirty hack print $q->Tr(),"\n"; print $q->td({-class=>'tdint'},"Betrag Netto:"),"\n"; - print $q->td({-class=>'tdint',-nowrap=>"1"},"$sum_nettoall €"),"\n"; + print $q->td({-class=>'tdint',-nowrap=>"1"},"$sum_netto19 €"),"\n"; if($sum_parts19 != "0"){ print $q->Tr(); print $q->td({-class=>'tdint',-nowrap=>"1"},"19% UmSt auf $sum_netto19 €:"),"\n"; diff --git a/copri4/main/src/Mod/Shareework.pm b/copri4/main/src/Mod/Shareework.pm index 26a5e8d..bfa28af 100755 --- a/copri4/main/src/Mod/Shareework.pm +++ b/copri4/main/src/Mod/Shareework.pm @@ -746,257 +746,6 @@ sub save_transact(){ }#end save_transact -#online net bike booking -#deprecated, use apif->booking_request -sub net_booking(){ - my $self = shift; - my $auth = shift;#API auth - my $bikeIDin = shift;#API request - my $owner = shift; - my $gps = shift || ""; - - my %varenv = $cf->envonline(); - $bikeIDin =~ s/\s//g; - my $bikeID = $q->escapeHTML($bikeIDin) if($bikeIDin =~ /\d+$/); - my $db_bike = $bikeID; - $db_bike = $1 if($db_bike =~ /(\d+)/); - - my $pos_id=""; - my $return=0; - my $now_dt = strftime "%Y-%m-%d %H:%M", localtime; - my $dbh = ""; - my $response_state = "OK"; - my $response_text = ""; - - $bw->log("net_booking booking_request bikeIDin $bikeIDin, authID $auth->{c_id}",$bikeIDin,""); - - my $ctadr = $db->get_contentrow("contentadr",$auth->{c_id}); - - my $update_adr = { - table => "contentadr", - mtime => "now()", - owner => "$owner", - c_id => "$ctadr->{c_id}", - }; - - my $pref = { - table => "contenttrans", - fetch => "one", - main_id => 300008, - template_id => 218, - #ca_id => "$ctadr->{c_id}",#TODO - int10 => "$ctadr->{c_id}", - state => "null", - close_time => "is::null", - }; - - - my $main_ids; - my ($bike_group,$user_group,$tariff_content,$user_tour) = $apif->fetch_tariff($varenv{dbname},$ctadr,""); - $main_ids = join(",",@{$bike_group}); - $main_ids =~ s/[a-z_]+//ig; - my $ct = {}; - my $pref_cc = { - table => "content", - fetch => "one", - main_id => "IN::($main_ids)", - barcode => $db_bike, - int10 => 1, - }; - - $ct = $dbt->fetch_record($dbh,$pref_cc) if($main_ids); - - - - #$tariff_nr in contentadr are saved by COPRI OR user Tarif-Select!!! - #This is the automatic user tariff setter - my $tariff_nr = ""; - my @adr_tariff = (); - if($ctadr->{txt30}){ - @adr_tariff = ("$ctadr->{txt30}"); - @adr_tariff = split(/\s+/,$ctadr->{txt30}) if($ctadr->{txt30} =~ /\w\s+\w/); - } - if(ref($ct) eq "HASH" && $ct->{main_id}){ - foreach my $id (keys (%$tariff_content)){ - foreach(@adr_tariff){ - $bw->log("adr_tariff array form $ctadr->{txt30}",$_,""); - if($tariff_content->{$id}->{int12} && $tariff_content->{$id}->{int12} == $ct->{main_id} && $tariff_content->{$id}->{barcode} && $_ == $tariff_content->{$id}->{barcode}){ - $bw->log("1. net_booking tariff loop matches:",$tariff_content->{$id}->{barcode},""); - $tariff_nr = $tariff_content->{$id}->{barcode}; - } - } - } - #2021-07-10, if no tarif then update user account to fallback default public or private or hidden tarif - #if(!$tariff_nr && !$ctadr->{txt30}) - if(!$tariff_nr){ - my @txt30 = (); - foreach my $id (keys (%$tariff_content)){ - # #int18 - # - # 2 = "public" - # 3 = "private" - # 4 = "hidden-lv" - # - if($tariff_content->{$id}->{int18} && ($tariff_content->{$id}->{int18} == 2 || $tariff_content->{$id}->{int18} == 3 || $tariff_content->{$id}->{int18} == 4)){ - #auto set tarif if requested bike matches flot - if($tariff_content->{$id}->{int12} && $tariff_content->{$id}->{int12} == $ct->{main_id} && $tariff_content->{$id}->{barcode}){ - $bw->log("2. net_booking tariff loop matches:",$tariff_content->{$id}->{barcode},""); - $tariff_nr = $tariff_content->{$id}->{barcode}; - push(@txt30, "$tariff_content->{$id}->{barcode}"); - }#add also other public tarif - elsif($tariff_content->{$id}->{int18} && $tariff_content->{$id}->{int18} == 2 && $tariff_content->{$id}->{int12} && $tariff_content->{$id}->{barcode}){ - push(@txt30, "$tariff_content->{$id}->{barcode}"); - } - } - } - $bw->log("--> NO user tariff defined, update user account to fallback default public or private or hidden",\@txt30,""); - $dbt->update_one($dbh,$update_adr,"txt30='@txt30'"); - }else{ - $bw->log("--> user tariff selected",$tariff_nr,""); - } - } - - $bw->log("---> bike $ct->{barcode} matching by bike_group: @{$bike_group} main_ids:$main_ids | user_group:@{$user_group} | Tarif selected: $tariff_nr",$tariff_content->{$tariff_nr},""); - - if($ct->{c_id} && $tariff_nr){ - my $ctt; - my $payoneable_check=0; - if(($ctadr->{int03} == 1 && $ctadr->{ct_name} =~ /\w{2}-\d+/ && $ctadr->{ct_name} !~ /LV-\d+/) || ($ctadr->{int03} == 2 && length($ctadr->{ct_name}) >= 19) || ($ctadr->{int03} == 1 && $varenv{dbname} eq "sharee_lv" && $ctadr->{ct_name} =~ /LV-\d+/)){ - $payoneable_check=1; - }else{ - $response_state="Failure 1006: There is no valid payment methode"; - $response_text="Bitte überprüfen Sie Ihre Profildaten auf Vollständigkeit, nur dann können wir das Fahrradmietsystem für Sie freischalten"; - } - - $bw->log("--->0. payable_check=$payoneable_check for $ctadr->{txt08} int01=$ctadr->{int01}|int03=$ctadr->{int03}|int04=$ctadr->{int04}|int13=$ctadr->{int13}|int12=$ctadr->{int12}|$ctadr->{ct_name}|length($ctadr->{ct_name}) >= 19\n","",""); - - #int04==1 if email Ack - #int13==1 if sms Ack - #int12!=1|2|3 if Vde - #int14==1 if AGB - if($ctadr->{txt08} && $ctadr->{int04} == 1 && $ctadr->{int13} == 1 && !$ctadr->{int12} && $ctadr->{int14} && $payoneable_check){ - - $bw->log("---> net_booking select Tarif ct->{main_id}:$ct->{main_id}| tariff_nr:$tariff_nr| ct_tariff --> Tarif-Nr:$tariff_content->{$tariff_nr}->{barcode}|Tarif desc:$tariff_content->{$tariff_nr}->{ct_name}|unit_price:$tariff_content->{$tariff_nr}->{int02}|max EUR/Tag:$tariff_content->{$tariff_nr}->{int17}|Abo EUR:$tariff_content->{$tariff_nr}->{int15}|Gratis Std/Rad:$tariff_content->{$tariff_nr}->{int16}\n","",""); - - $ctt = $dbt->fetch_record($dbh,$pref); - #if invoice exist - if($ctt->{c_id}){ - my $ctpos = {}; - if($bikeID && $ctadr->{c_id}){ - my $booking_pos = { - table => "contenttranspos", - fetch => "one", - barcode => "$db_bike", - int10 => "IN::('2','3')", - ca_id => "$ctadr->{c_id}", - }; - $ctpos = $dbt->fetch_tablerecord($dbh,$booking_pos); - } - if(!$ctpos->{c_id}){ - #2 = "requested" - $pos_id = $dbt->insert_pos($dbh,$ctt->{c_id},$ct,$ctadr,$tariff_content->{$tariff_nr},$now_dt,"$bikeID","2","$owner"); - if($pos_id){ - $response_state = "OK, bike " . $bikeID . " succesfully requested"; - $response_text = "Fahrrad Nr. $bikeID wurde erfolgreich für 15 Min. reserviert"; - $bw->log("--->2. (insert contenttranspos pos_id: $pos_id\n","",""); - #require "Mod/KMLout.pm"; - #my $kmlfile = Mod::KMLout::kmlGenerator($ctadr,""); - - $db->updater("contenttrans","c_id",$ctt->{c_id},"start_time","$now_dt",$owner); - $db->updater("contenttrans","c_id",$ctt->{c_id},"end_time","$now_dt",$owner); - }else{ - $response_state="Failure 1007: booking request fails"; - $response_text="Entschuldigung, es ist ein Fehler aufgetreten. Bitte kontaktieren Sie unsere Hotline damit wir das Problem lösen können"; - } - } - #else if invoice does not exist, generate one - }else{ - my $ct_id; - if($ctt->{c_id}){ - $ct_id = $ctt->{c_id}; - }else{ - $ct_id = $dbt->insert_contenttrans($dbh,$ctadr,"300008","218","----","$owner"); - $ctt = $dbt->fetch_record($dbh,$pref); - } - $ctt = $dbt->fetch_record($dbh,$pref); - - #TODO refactory, routines douple definend - if($ctt->{c_id}){ - my $ctpos = {}; - if($bikeID && $ctadr->{c_id}){ - my $booking_pos = { - table => "contenttranspos", - fetch => "one", - barcode => "$db_bike", - int10 => "IN::('2','3')", - ca_id => "$ctadr->{c_id}", - }; - $ctpos = $dbt->fetch_tablerecord($dbh,$booking_pos); - } - if(!$ctpos->{c_id}){ - #2 = "requested" - $pos_id = $dbt->insert_pos($dbh,$ctt->{c_id},$ct,$ctadr,$tariff_content->{$tariff_nr},$now_dt,"$bikeID","2","$owner"); - if($pos_id){ - $response_state = "OK, bike " . $bikeID . " succesfully requested"; - $response_text = "Fahrrad Nr. $bikeID wurde erfolgreich für 15 Min. reserviert"; - $bw->log("--->3. (insert contenttranspos pos_id: $pos_id\n","",""); - #require "Mod/KMLout.pm"; - #my $kmlfile = Mod::KMLout::kmlGenerator($ctadr,""); - - $db->updater("contenttrans","c_id",$ctt->{c_id},"start_time","$now_dt",$owner); - $db->updater("contenttrans","c_id",$ctt->{c_id},"end_time","$now_dt",$owner); - }else{ - $response_state="Failure 1008: booking request fails"; - $response_text="Entschuldigung, es ist ein Fehler aufgetreten. Bitte kontaktieren Sie unsere Hotline damit wir das Problem lösen können"; - } - } - } - } - }else{#end Vde AGB and payable_check - $response_state="Failure 1005: user-account deactivated because of failing data"; - $response_text="Bitte überprüfen Sie Ihre Profildaten auf Vollständigkeit, nur dann können wir das Fahrradmietsystem für Sie freischalten"; - } - - }else{ - my $ctpos = {}; - my $booking_pos = { - table => "contenttranspos", - fetch => "one", - barcode => "$db_bike", - int10 => "IN::('2','3')", - ca_id => "$ctadr->{c_id}", - }; - $ctpos = $dbt->fetch_tablerecord($dbh,$booking_pos) if($bikeID && $ctadr->{c_id}); - if($ctpos->{c_id}){ - $response_state = "OK, bike " . $bikeID . " already requested or occupied"; - $response_text = "Fahrrad Nr. " . $bikeID . " ist bereits reserviert"; - }elsif($ct->{c_id} && !$tariff_nr){ - $response_state="Failure 2089: booking bike $bikeID fails, no user tariff available"; - $response_text="Reservierungsfehler Fahrrad Nr. $bikeID. Es konnte kein Mietrad Tarif gefunden werden."; - }else{ - $response_state="Failure 2001: booking bike $bikeID fails, bike not available"; - $response_text="Fahrrad Nr. $bikeID ist leider nicht verfügbar. U.U. ist die Fahrrad Flotte für Sie nicht freigeschaltet. Bitte überprüfen Sie Ihre Profildaten auf Vollständigkeit"; - } - } - $bw->log("response_state:$response_state\n","",""); - - if(ref($auth) eq "HASH"){ - $return = { - bike => "$bikeID", - state => "requested", - response_state => "$response_state", - response_text => "$response_text" - }; - }else{ - if($response_state =~ /Failure/){ - $return = "failure::int01 $response_state"; - } - } - - return $return; -}#end net_booking - - #Send sms after payable check and !int13 sub smsack(){ my $self = shift; diff --git a/copri4/main/src/Tpl/Liste3.pm b/copri4/main/src/Tpl/Liste3.pm index 60bf436..55e76fe 100755 --- a/copri4/main/src/Tpl/Liste3.pm +++ b/copri4/main/src/Tpl/Liste3.pm @@ -666,10 +666,11 @@ sub tpl(){ } #print $q->end_form,"\n"; - my $sum_bar="0";my $sum_ec="0";my $sum_kredit="0";my $sum_abb="0";my $sum_ueb="0";my $sum_geka="0";my $sum_paypal="0";my $sum_SEPApayone="0";my $sum_CCpayone="0";my $sum_ausfall="0";my $sum_kasse="0";my $sum_start="0";my $close_time="";my $payment_time="";my $sum_waren;my $sum_verkauf;my $sum_kaution;my $sum_am;my $sum_park; my $sum_radd;my $sum_wst_ek=0; my $sum_wst_vk=0; my $sum_verleih; + my $sum_bar="0";my $sum_ec="0";my $sum_kredit="0";my $sum_abb="0";my $sum_ueb="0";my $sum_geka="0";my $sum_paypal="0";my $sum_SEPApayone="0";my $sum_CCpayone="0";my $sum_ausfall="0";my $sum_kasse="0";my $sum_start="0";my $close_time="";my $payment_time=""; my $nr=0;my $nx=0; my $check_kaution=0; - my $rabatt_key; my $kost_key; + my $rabatt_key = ""; + my $kost_key = ""; #BIG LOOP loop content table foreach my $id (sort { @@ -693,40 +694,27 @@ sub tpl(){ my $sum_error = 0; my $ecol=0; - if($ct4rel->{$id}->{int01} > 0 && $ct4rel->{$id}->{int03} > 0){ - $sum_wst_ek += $ct4rel->{$id}->{int01} * $ct4rel->{$id}->{int03}; - } - if($ct4rel->{$id}->{int02} > 0 && $ct4rel->{$id}->{int03} > 0){ - $sum_wst_vk += $ct4rel->{$id}->{int02} * $ct4rel->{$id}->{int03}; - } - # check sum_pos and sum_buchen - my $sum_pos=0; + my $sum_pos = 0; my $pricing = {}; my $counting = {}; if($ct4rel->{$id}->{state} ne "Kassenbestand"){ foreach my $cpid (keys (%$ct4rel_parts)){ - if($ct4rel->{$id}->{c_id} eq $ct4rel_parts->{$cpid}->{ct_id}){ + if($ct4rel->{$id}->{c_id} == $ct4rel_parts->{$cpid}->{ct_id}){ if($ct4rel_parts->{$cpid}->{int35} && $ct4rel_parts->{$cpid}->{start_time} && $ct4rel_parts->{$cpid}->{end_time}){ ($pricing,$counting) = $pri->counting_rental(\%varenv,$ct4rel_parts->{$cpid},"calc_price"); + $sum_pos += $pricing->{total_price} }elsif((looks_like_number($ct4rel_parts->{$cpid}->{int02}) && $ct4rel_parts->{$cpid}->{int02} != 0) && (looks_like_number($ct4rel_parts->{$cpid}->{int03}) && $ct4rel_parts->{$cpid}->{int03} != 0)){ - - if($ct4rel_parts->{$cpid}->{int07} != 0){ - my $rabatt_eur = $ct4rel_parts->{$cpid}->{int07}; - $rabatt_eur = $ct4rel_parts->{$cpid}->{int02} * $ct4rel_parts->{$cpid}->{int03} * $ct4rel_parts->{$cpid}->{int07}/100 if($ct4rel_parts->{$cpid}->{int08} != 1);#wenn int08 != 1 alias € - #$rabatt_eur = $lb->round($rabatt_eur); - $sum_pos += $ct4rel_parts->{$cpid}->{int02} * $ct4rel_parts->{$cpid}->{int03} - $rabatt_eur; - }else{ - $sum_pos += $ct4rel_parts->{$cpid}->{int02} * $ct4rel_parts->{$cpid}->{int03}; - } + my ($gesamt,$rabatt) = $pri->price2calc($ct4rel_parts->{$cpid}); + $sum_pos += $gesamt; } } } my $sum_chk = $ct4rel->{$id}->{int01}; $sum_pos = $lb->round($sum_pos); $sum_pos = $lb->cashme($sum_pos); - my $sum_chkdiff = $sum_chk - $sum_pos;#wegen $rabatt_eur kleine Rundungsfehler zulassen. + my $sum_chkdiff = $sum_chk - $sum_pos; if($ct4rel->{$id}->{int01} && ($sum_pos ne $sum_chk) && ($sum_chkdiff > 0.02 || $sum_chkdiff < -0.02)){ $sum_error = "1"; } @@ -1143,13 +1131,6 @@ sub tpl(){ } $sum_parts = $lb->round($sum_parts); $sum_parts = $lb->cashme($sum_parts); - $sum_waren += $sum_parts; - $sum_verkauf += $sum_parts if($ct4rel_parts->{$cpid}->{ct_name} ne "999");#999=Ausgaben, Fixme - $ctf->{txt31} =~ s/,/|/; - if($ct4rel->{$id}->{state} =~ /^Bar/ && $ct4rel_parts->{$cpid}->{int12} =~ /$ctf->{txt31}/){ - $sum_kaution += $sum_parts; - $sum_bar -= $sum_parts; - } my $parts_time = ""; @@ -1186,24 +1167,6 @@ sub tpl(){ }#journal offen ende - if($R::todo && $R::todo eq "Waren-Summe"){ - my $m = 9; - $sum_wst_ek = $lb->round($sum_wst_ek); - $sum_wst_vk = $lb->round($sum_wst_vk); - $sum_wst_ek = $lb->cashme($sum_wst_ek,","); - $sum_wst_vk = $lb->cashme($sum_wst_vk,","); - print $q->Tr(); - print $q->td({-style=>"background-color:silver;"},""),"\n"; - print $q->td({-class=>'tdtxt',-style=>'text-align:center;background-color:silver;',-colspan=>"$m"},""); - print $q->td({-class=>'tdsum',-colspan=>"2",-style=>'background-color:silver;'},""); - print $q->Tr(); - print $q->td({-style=>"background-color:silver;"},""),"\n"; - #print $q->td({-class=>'tdsum',-colspan=>"$m"},$q->span({-style=>'color:silver;font-weight:normal;'},"(Vorsicht! incl. Ausgaben)"),$q->span("Waren-Stamm Summe")); - print $q->td({-class=>'tdsum',-colspan=>"$m"},"Waren-Stamm Summe"); - print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_wst_ek €"); - print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_wst_vk €"); - } - #Kassenjournal alias Summe Bar und Kredit if(($nr > 0) && ($v_journal || $R::v_abschluss) && (!$R::rel_id) && ("$R::s_kontext" ne "Waren")){ #if(($nr > 0) && ($v_journal || $R::v_abschluss || $close_time) && (!$R::rel_id)){ @@ -1232,10 +1195,6 @@ sub tpl(){ $sum_ausfall = $lb->round($sum_ausfall); $sum_ausfall = $lb->cashme($sum_ausfall); - - $sum_waren = $lb->round($sum_waren); - $sum_waren = $lb->cashme($sum_waren); - $sum_kaution = $lb->cashme($sum_kaution); $sum_start = $lb->cashme($sum_start); $sum_kasse = $lb->cashme($sum_kasse); $close_time = $R::s_mtime if($R::s_mtime); diff --git a/copri4/main/src/Tpl/TransPositionen.pm b/copri4/main/src/Tpl/TransPositionen.pm index 7b943da..d107298 100755 --- a/copri4/main/src/Tpl/TransPositionen.pm +++ b/copri4/main/src/Tpl/TransPositionen.pm @@ -70,19 +70,12 @@ sub tpl(){ my $vibuchen_mtime = ""; $vibuchen_mtime = "Payone post " . $lb->time4de($ctt->{pay_time},1) . " . " if($ctt->{pay_time}); - my @tpl_order = ("txt01=Beschreibung","ct_name=Nummer","date_time=timerange","int03=Menge","int02=Tarif/Preis","int07=Rabatt","int04=Gesamt"); + my @tpl_order = ("txt01=Beschreibung","ct_name=Nummer","date_time=timerange","int03=Menge","int02=Preis","int07=Rabatt","int04=Gesamt"); my $tplf = $db->get_tpl("201");#Firma tpl my @tplf_order = split /,/,$tplf->{tpl_order}; my $txt20 = $R::txt20 || $ctt->{txt20} || "";#Leistungsdatum my $int05 = $R::int05 || $ctt->{int05} || "";#manuell - my $max_timestamp = "210001012359"; - if($ctf->{txt80} && $txt20 =~ /(\d{2})\.(\d{2})\.(\d{4})$/){ - $max_timestamp = $3 . $2 . $1 . "2359"; - }elsif($ctf->{txt80} =~ /(\d{2})\.(\d{2})\.(\d{4})$/){ - $max_timestamp = $3 . $2 . $1 . "2359"; - } - my $max_sum = 1000; my $cttpos = { c_id => 0 }; my $rows = 0; ($cttpos,$rows) = $dbt->collect_contentpos($dbh,"contenttrans",$rel4tpl->{content_id}); @@ -90,7 +83,7 @@ sub tpl(){ foreach my $id (keys(%$cttpos)){ if(ref($cttpos->{$id}) eq "HASH"){ if($cttpos->{$id}->{int26}){ - @tpl_order = ("txt01=Beschreibung","ct_name=Nummer","date_time=timerange","int26=Einsparung","int03=Menge","int02=Tarif/Preis","int07=Rabatt","int04=Gesamt"); + @tpl_order = ("txt01=Beschreibung","ct_name=Nummer","date_time=timerange","int26=Einsparung","int03=Menge","int02=Preis","int07=Rabatt","int04=Gesamt"); } #enhanced tariff #if($cttpos->{$id}->{int35}){ @@ -165,7 +158,6 @@ EOF #my $scol = "c_id";#changed to itime because of Storno resorts my $scol = "itime"; my $sum_parts19=0; - #my $diff19 = 100 + $umst1619; my $diff19 = 100 + 19; my $sum_umst19=0; my $i=0; @@ -175,12 +167,22 @@ EOF #foreach my $id (sort { $cttpos->{$b}->{$scol} <=> $cttpos->{$a}->{$scol} } keys(%$cttpos)){ foreach my $id (sort { $cttpos->{$b}->{$scol} cmp $cttpos->{$a}->{$scol} } keys(%$cttpos)){ + my $gesamt = 0; my $pricing = {}; my $counting = {}; my $rental_feed = {}; + if($cttpos->{$id}->{int35} && $cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ - ($pricing,$counting) = $pri->counting_rental(\%varenv,$cttpos->{$id},"calc_price"); - $rental_feed = $pri->fetch_rentalfeed(\%varenv,$cttpos->{$id},$counting); + ($pricing,$counting) = $pri->counting_rental(\%varenv,$cttpos->{$id},"calc_price"); + $rental_feed = $pri->fetch_rentalfeed(\%varenv,$cttpos->{$id},$counting); + $sum_parts19 += $pricing->{total_price}; + $gesamt = $pri->round($pricing->{total_price}); + $gesamt = sprintf('%.2f', $gesamt); + }else{ + ($gesamt,my $rabatt) = $pri->price2calc($cttpos->{$id}); + $sum_parts19 += $gesamt; + $gesamt = $pri->round($gesamt); + $gesamt = sprintf('%.2f', $gesamt); } my $set_style=""; @@ -189,11 +191,9 @@ EOF #$occupied_style = "color:#ff1493" if($cttpos->{$id}->{txt10} =~ /occupied|requested|canceled/); $occupied_style = "color:#ff1493" if($cttpos->{$id}->{int10} == 2 ||$cttpos->{$id}->{int10} == 3 || $cttpos->{$id}->{int10} == 6); - my $cttpos_timestamp = $1 . $2 . $3 . "0000" if($cttpos->{$id}->{itime} =~ /(\d+)\-(\d+)\-(\d+)/); #max. Rechnungspositionen - if(($cttpos_timestamp <= $max_timestamp) && ($sum_parts19 <= $max_sum)){ + if(1==1){ $i++; - #print "$i (($id: $cttpos_timestamp <= $max_timestamp) && ($sum_parts19 <= $max_sum))
"; if($i==1){ $accounting_end = "$3.$2.$1" if($cttpos->{$id}->{itime} =~ /(\d+)\-(\d+)\-(\d+)/); $accounting_end = "$3.$2.$1" if($cttpos->{$id}->{end_time} =~ /(\d+)\-(\d+)\-(\d+)/); @@ -209,13 +209,6 @@ EOF #$line_count2 += scalar(@line_txt01); } - my $gesamt = 0; - my $rabatt = ""; - ($gesamt,$rabatt) = $pri->price2calc($cttpos->{$id}); - $sum_parts19 += $gesamt; - $gesamt = $lb->round($gesamt); - $gesamt = $lb->cashme($gesamt,","); - #1. Spalte print $q->Tr(),"\n"; print ""; @@ -273,7 +266,7 @@ EOF }elsif($key =~ /int02/){ if($cttpos->{$id}->{int35} && $cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ print "\n"; - print "Tarif: $rental_feed->{tariff_description2}->{number} $rental_feed->{tariff_description2}->{name}
\n"; + #print "Tarif: $rental_feed->{tariff_description2}->{number} $rental_feed->{tariff_description2}->{name}
\n"; foreach my $fid (sort keys(%{ $rental_feed->{tariff_description2} })){ if(ref($rental_feed->{tariff_description2}->{$fid}) eq "ARRAY"){ print "$rental_feed->{tariff_description2}->{$fid}[0]: $rental_feed->{tariff_description2}->{$fid}[1]
\n"; @@ -284,17 +277,9 @@ EOF print $q->td({-class=>'element',-style=>"$txtstyle $set_style"},$q->textfield(-class=>'etxt',-style=>"$txtstyle",-name=>"col_$key",-default=>"$cttpos->{$id}->{$key}", -override=>'1',-size=>"$isize",-maxlength=>100),"\n"); } }elsif($key =~ /int07/){ - if(!$cttpos->{$id}->{int35}){ - print $q->td({-class=>'element',-style=>"$txtstyle $set_style",-nowrap=>'1'},$q->textfield(-class=>'etxt',-style=>"$txtstyle",-name=>"col_$key",-default=>"$cttpos->{$id}->{$key}", -override=>'1',-size=>"$isize",-maxlength=>100),$but->selector("int08","40px","$cttpos->{$id}->{int08}",("0.00:%","1.00:€"))),"\n"; - }else{ - print $q->td({-class=>'tdint'},""),"\n"; - } + print $q->td({-class=>'element',-style=>"$txtstyle $set_style",-nowrap=>'1'},$q->textfield(-class=>'etxt',-style=>"$txtstyle",-name=>"col_$key",-default=>"$cttpos->{$id}->{$key}", -override=>'1',-size=>"$isize",-maxlength=>100),$but->selector("int08","40px","$cttpos->{$id}->{int08}",("0.00:%","1.00:€"))),"\n"; }elsif($key =~ /int04/){ - if($pricing->{total_price}){ - print $q->td({-class=>'tdint',-nowrap=>1},"$pricing->{total_price} €"),"\n"; - }else{ - print $q->td({-class=>'tdint',-nowrap=>"1"},"$gesamt €"); - } + print $q->td({-class=>'tdint',-nowrap=>"1"},"$gesamt €"); }elsif($key =~ /txt01/){ if($cttpos->{$id}->{int09} && $cttpos->{$id}->{$key} !~ /Manuell/){ $cttpos->{$id}->{$key} .= "\nManuell bearbeitet\n"; @@ -306,10 +291,11 @@ EOF print ""; print $q->textarea(-class=>'autos',-style=>"border: 1px solid #ededed;background-color: #ededed;",-name=>"col_$key",-default=>"$cttpos->{$id}->{$key}", -override=>'1',-rows=>"1",-cols=>65),"
\n"; - if($cttpos->{$id}->{int09}){#2020-12-07 Verleihräder werden anhand der TarifNr als solches erkannt - #print $q->span({-style=>"$txtstyle $set_style"}, - #"Tarif Nr.: ", $q->textfield(-class=>'etxt',-name=>"int09",-default=>"$cttpos->{$id}->{int09}",-size=>"5",-maxlength=>5), - #"Tarif Text", $q->textfield(-class=>'etxt',-name=>"txt04",-default=>"$cttpos->{$id}->{txt04}",-size=>"30",-maxlength=>50)),"
\n"; + #if Traiff Nr. + if($cttpos->{$id}->{int09}){ + print $q->span({-style=>"$txtstyle $set_style"}, + "Tarif Nr.: ", $q->textfield(-class=>'etxt',-name=>"int09",-default=>"$cttpos->{$id}->{int09}",-size=>"5",-maxlength=>5), + "Tarif Text", $q->textfield(-class=>'etxt',-name=>"txt04",-default=>"$cttpos->{$id}->{txt04}",-size=>"30",-maxlength=>50)),"
\n"; print $q->span({-style=>"$txtstyle $set_style"}, "Endstation: ", $q->textfield(-class=>'etxt',-name=>"int04",-default=>"$cttpos->{$id}->{int04}",-size=>"5",-maxlength=>40), @@ -371,7 +357,6 @@ EOF }elsif($key =~ /int02/){ if($cttpos->{$id}->{int35} && $cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ print "\n"; - print "Tarif: $rental_feed->{tariff_description2}->{number} $rental_feed->{tariff_description2}->{name}
\n"; foreach my $fid (sort keys(%{ $rental_feed->{tariff_description2} })){ if(ref($rental_feed->{tariff_description2}->{$fid}) eq "ARRAY"){ print "$rental_feed->{tariff_description2}->{$fid}[0]: $rental_feed->{tariff_description2}->{$fid}[1]
\n"; @@ -383,21 +368,14 @@ EOF print $q->td({-class=>'tdint'},"$cttpos->{$id}->{$key} €"),"\n"; } }elsif($key =~ /int04/){ - if($pricing->{total_price}){ - print $q->td({-class=>'tdint',-nowrap=>1},"$pricing->{total_price} €"),"\n"; - }else{ - $gesamt =~ s/\./,/; - print $q->td({-class=>'tdint',-nowrap=>1},"$gesamt €"),"\n"; - } + $gesamt =~ s/\./,/; + print $q->td({-class=>'tdint',-nowrap=>1},"$gesamt €"),"\n"; }elsif($key =~ /int07/){ - if(!$cttpos->{$id}->{int35}){ - my $proz=""; - $proz = "%" if($cttpos->{$id}->{$key} && $cttpos->{$id}->{$key} != 0); - $proz = "€" if($cttpos->{$id}->{$key} && $cttpos->{$id}->{$key} != 0 && $cttpos->{$id}->{int08} && $cttpos->{$id}->{int08} == 1); - print $q->td({-class=>'tdint',-nowrap=>"1"},"$cttpos->{$id}->{$key} $proz"),"\n"; - }else{ - print $q->td({-class=>'tdint',-nowrap=>"1"},""),"\n"; - } + my $proz=""; + $proz = "%" if($cttpos->{$id}->{$key} && $cttpos->{$id}->{$key} != 0); + $proz = "€" if($cttpos->{$id}->{$key} && $cttpos->{$id}->{$key} != 0 && $cttpos->{$id}->{int08} && $cttpos->{$id}->{int08} == 1); + $cttpos->{$id}->{$key} =~ s/\./,/; + print $q->td({-class=>'tdint',-nowrap=>"1"},"$cttpos->{$id}->{$key} $proz"),"\n"; }elsif($key =~ /txt01/){ $cttpos->{$id}->{$key} = $q->unescapeHTML("$cttpos->{$id}->{$key}"); $cttpos->{$id}->{$key} = $lb->newline($cttpos->{$id}->{$key},"",""); @@ -419,16 +397,16 @@ EOF } if($cttpos->{$id}->{itime} =~ /(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2})/){ print $q->span("$dbt->{copri_conf}->{bike_state}->{$cttpos->{$id}->{int10}} → $dbt->{copri_conf}->{lock_state}->{$cttpos->{$id}->{int20}} → $u_name / $u_name_end"),"\n"; - my $pos_id = ""; + my $pos_raw = ""; if($users_dms->{u_id} && $users_dms->{u_id} =~ /1842/){ my $pos_details = ""; foreach my $did (sort keys (%{$pricing->{rentalog}})){ $pos_details .= $did . " = " . $pricing->{rentalog}->{$did} . "
" if($pricing->{rentalog}->{$did}); } #$pos_details = Dumper($pricing->{rentalog}); - $pos_id = $q->div({-class=>"popup",-onclick=>"toggle_box('$id')"},"$cttpos->{$id}->{c_id}", $q->span({-class=>"popuptext",-id=>"$id"},"$pos_details")); + $pos_raw = $q->div({-class=>"popup",-onclick=>"toggle_box('$id')"},"$cttpos->{$id}->{c_id}", $q->span({-class=>"popuptext",-id=>"$id"},"$pos_details")); } - print "$pos_id
\n"; + print "(raw $pos_raw)
\n"; } } if($cttpos->{$id}->{txt01} || $cttpos->{$id}->{int09}){ @@ -438,9 +416,8 @@ EOF my $bike=""; my $tariff = ""; $bike = "$cttpos->{$id}->{$key}" if($cttpos->{$id}->{$key}); - #$tariff = ", Tarif: $cttpos->{$id}->{int09} $cttpos->{$id}->{txt04}" if($cttpos->{$id}->{txt04}); - #print $q->span("$bike $tariff
"),"\n"; - print $q->span("$bike
"),"\n"; + $tariff = ", Tarif: $cttpos->{$id}->{int09} $cttpos->{$id}->{txt04}" if($cttpos->{$id}->{txt04}); + print $q->span("$bike $tariff
"),"\n"; } if($cttpos->{$id}->{int06} || $cttpos->{$id}->{int04}){ print $q->span("Start/End Station: $cttpos->{$id}->{int06} / $cttpos->{$id}->{int04}, GPS: $cttpos->{$id}->{txt06}"),"\n"; @@ -464,22 +441,22 @@ EOF }#foreach end if($sum_parts19 && $sum_parts19 != 0){ - #$sum_umst19 = $sum_parts19 / $diff19 * $umst1619; $sum_umst19 = $sum_parts19 / $diff19 * 19; - $sum_umst19 = $lb->round($sum_umst19); + $sum_umst19 = $pri->round($sum_umst19); } my $sum_netto19 = $sum_parts19 - $sum_umst19; - $sum_netto19 = $lb->cashme($sum_netto19); - my $sum_nettoall = $sum_netto19; - $sum_nettoall = $lb->round($sum_nettoall); - $sum_nettoall = $lb->cashme($sum_nettoall,","); + $sum_netto19 = sprintf('%.2f', $sum_netto19); + $sum_netto19 =~ s/\./,/; + my $sum_paid = $sum_parts19; - $sum_paid = $lb->round($sum_paid); + $sum_paid = $pri->round($sum_paid); my $sum_preauth = $sum_paid || 0; - $sum_parts19 = $lb->cashme($sum_parts19,","); - $sum_umst19 = $lb->round($sum_umst19); - $sum_umst19 = $lb->cashme($sum_umst19,","); - $sum_paid = $lb->cashme($sum_paid,","); + $sum_paid = sprintf('%.2f', $sum_paid); + $sum_paid =~ s/\./,/; + + $sum_parts19 = sprintf('%.2f', $sum_parts19); + $sum_umst19 = sprintf('%.2f', $sum_umst19); + $sum_umst19 =~ s/\./,/; my $payment_text = ""; foreach(@tplf_order){ @@ -512,7 +489,7 @@ EOF if($node_meta->{node_name} !~ /steuerfrei/){ print $q->Tr("\n"); $line_count2++; print $q->td({-class=>'tdint'},"Nettobetrag:"); - print $q->td({-class=>'tdint',-nowrap=>"1"},"$sum_nettoall €"); + print $q->td({-class=>'tdint',-nowrap=>"1"},"$sum_netto19 €"); if($sum_netto19 != 0){ print $q->Tr("\n");$line_count2++; diff --git a/copri4/shareeapp-operator/src/Tpl/FormEdit.pm b/copri4/shareeapp-operator/src/Tpl/FormEdit.pm index c5f2e9b..8bd2b61 100755 --- a/copri4/shareeapp-operator/src/Tpl/FormEdit.pm +++ b/copri4/shareeapp-operator/src/Tpl/FormEdit.pm @@ -404,6 +404,10 @@ Nach Abschluss der Registrierung erhalten Sie sowohl auf die von Ihnen hinterleg print $q->td({-class=>'tdint', -style=>"$occupied_style", -nowrap=>1},"$co2saving"); }elsif($key eq "int02"){ if($pricing->{total_price}){ + $sum += $pricing->{total_price}; + $pricing->{total_price} = $lb->round($pricing->{total_price}); + $pricing->{total_price} = sprintf('%.2f', $pricing->{total_price}); + $pricing->{total_price} =~ s/\./,/; print $q->td({-class=>'tdint', -style=>"$occupied_style", -nowrap=>1},"$pricing->{total_price} €"),"\n"; }else{ my $gesamt = 0;