From b53156d50230824be5572f84f1d9994410deefe9 Mon Sep 17 00:00:00 2001 From: ragu Date: Wed, 21 Jun 2023 14:59:05 +0200 Subject: [PATCH] Add methode send_occupied2hotline. Fix pricing rental duration. Adding countries --- copri4/main/src/Mod/APIfunc.pm | 11 +- copri4/main/src/Mod/Libenz.pm | 272 +++++++++++++++++- copri4/main/src/Mod/Pricing.pm | 39 ++- copri4/main/src/Tpl/BaseEdit.pm | 13 +- copri4/main/src/Tpl/Calorin.pm | 3 +- copri4/main/src/Tpl/TransPositionen.pm | 19 +- copri4/main/src/scripts/mailTransportcms.pl | 68 ++++- copri4/shareeapp-operator/src/Tpl/FormEdit.pm | 7 +- 8 files changed, 374 insertions(+), 58 deletions(-) diff --git a/copri4/main/src/Mod/APIfunc.pm b/copri4/main/src/Mod/APIfunc.pm index ad362b8..5ef5b25 100755 --- a/copri4/main/src/Mod/APIfunc.pm +++ b/copri4/main/src/Mod/APIfunc.pm @@ -907,7 +907,7 @@ sub booking_request(){ my $response_text = ""; #state and lock_state is only defined if requestes incl. occupied - $bw->log("log booking_request bike:$bike, state:$state, lock_state:$lock_state, tarif:$ct_tariff->{barcode}, auth:$auth->{c_id}",$auth->{txt08},""); + $bw->log("log booking_request bike=$bike, auth=$auth->{c_id}, state=$state, lock_state=$lock_state, tarif=$ct_tariff->{barcode}",$auth->{txt08},""); my $update_adr = { table => "contentadr", @@ -1165,10 +1165,13 @@ sub booking_update(){ my $lock_charge = $q->param('voltage') || ""; my $gps_age_minutes = ""; $gps_age_minutes = $gps_data->{gps_age_minutes} if($q->param('gps_age')); - my $logging = "log booking_update bike:$bike, userID:$auth->{c_id}, state:$state, lock_state:$lock_state, lock_charge:$lock_charge, gps:$gps_data->{gps}, gps_age_minutes:$gps_age_minutes"; + + my $logvalues = "state=$state, lock_state=$lock_state, lock_charge=$lock_charge, gps=$gps_data->{gps}, gps_age_minutes=$gps_age_minutes"; + my $logging = "log booking_update bike=$bike, userID=$auth->{c_id}, $logvalues"; $bw->log("$logging",$auth->{c_id},""); + my $log_stamp = strftime "%d.%m.%Y %H:%M:%S", localtime; - $update_pos->{txt24} = $record_pos->{txt24} . "\n- $log_stamp $logging"; + $update_pos->{txt24} = $record_pos->{txt24} . "\n- $log_stamp $logvalues"; $dbt->update_record($dbh,$update_pos,$record_pos); my $Ilockit_GUID = ""; @@ -1187,7 +1190,7 @@ sub booking_update(){ }; $record_pos = $dbt->fetch_tablerecord($dbh,$booking_pos); my $if_gps = $gps_data->{gps} || ""; - $bw->log("log smartlock lock_state $bike $lock_state | int10 $record_pos->{int10} | int20 $record_pos->{int20} | if_gps $if_gps",$booking_values,""); + $bw->log("log smartlock lock_state=$bike $lock_state, int10=$record_pos->{int10}, int20=$record_pos->{int20}, if_gps=$if_gps",$booking_values,""); } diff --git a/copri4/main/src/Mod/Libenz.pm b/copri4/main/src/Mod/Libenz.pm index 6bda108..f0b161a 100755 --- a/copri4/main/src/Mod/Libenz.pm +++ b/copri4/main/src/Mod/Libenz.pm @@ -124,7 +124,264 @@ sub country_code(){ 'SK' => 'Slowakei', 'FI' => 'Finnland', 'SE' => 'Schweden', - 'GB' => 'Vereinigtes Königreich' + 'GB' => 'Vereinigtes Königreich', + }; + return $country; +} + +sub country_code_all(){ + my $self = shift; + my $country = { + '--' => '----------------------', + 'AF' => 'Afghanistan', + 'AX' => 'Åland Islands', + 'AL' => 'Albania', + 'DZ' => 'Algeria', + 'AS' => 'American Samoa', + 'AD' => 'Andorra', + 'AO' => 'Angola', + 'AI' => 'Anguilla', + 'AQ' => 'Antarctica', + 'AG' => 'Antigua and Barbuda', + 'AR' => 'Argentina', + 'AM' => 'Armenia', + 'AW' => 'Aruba', + 'AU' => 'Australia', + 'AT' => 'Austria', + 'AZ' => 'Azerbaijan', + 'BS' => 'Bahamas', + 'BH' => 'Bahrain', + 'BD' => 'Bangladesh', + 'BB' => 'Barbados', + 'BY' => 'Belarus', + 'BE' => 'Belgium', + 'BZ' => 'Belize', + 'BJ' => 'Benin', + 'BM' => 'Bermuda', + 'BT' => 'Bhutan', + 'BO' => 'Bolivia (Plurinational State of)', + 'BQ' => 'Bonaire, Sint Eustatius and Saba', + 'BA' => 'Bosnia and Herzegovina', + 'BW' => 'Botswana', + 'BV' => 'Bouvet Island', + 'BR' => 'Brazil', + 'IO' => 'British Indian Ocean Territory', + 'BN' => 'Brunei Darussalam', + 'BG' => 'Bulgaria', + 'BF' => 'Burkina Faso', + 'BI' => 'Burundi', + 'CV' => 'Cabo Verde', + 'KH' => 'Cambodia', + 'CM' => 'Cameroon', + 'CA' => 'Canada', + 'KY' => 'Cayman Islands', + 'CF' => 'Central African Republic', + 'TD' => 'Chad', + 'CL' => 'Chile', + 'CN' => 'China', + 'CX' => 'Christmas Island', + 'CC' => 'Cocos (Keeling) Islands', + 'CO' => 'Colombia', + 'KM' => 'Comoros', + 'CG' => 'Congo', + 'CD' => 'Congo, Democratic Republic of the', + 'CK' => 'Cook Islands', + 'CR' => 'Costa Rica', + 'CI' => 'Côte d\'Ivoire', + 'HR' => 'Croatia', + 'CU' => 'Cuba', + 'CW' => 'Curaçao', + 'CY' => 'Cyprus', + 'CZ' => 'Czechia', + 'DK' => 'Denmark', + 'DJ' => 'Djibouti', + 'DM' => 'Dominica', + 'DO' => 'Dominican Republic', + 'EC' => 'Ecuador', + 'EG' => 'Egypt', + 'SV' => 'El Salvador', + 'GQ' => 'Equatorial Guinea', + 'ER' => 'Eritrea', + 'EE' => 'Estonia', + 'SZ' => 'Eswatini', + 'ET' => 'Ethiopia', + 'FK' => 'Falkland Islands (Malvinas)', + 'FO' => 'Faroe Islands', + 'FJ' => 'Fiji', + 'FI' => 'Finland', + 'FR' => 'France', + 'GF' => 'French Guiana', + 'PF' => 'French Polynesia', + 'TF' => 'French Southern Territories', + 'GA' => 'Gabon', + 'GM' => 'Gambia', + 'GE' => 'Georgia', + #'DE' => 'Germany', + 'GH' => 'Ghana', + 'GI' => 'Gibraltar', + 'GR' => 'Greece', + 'GL' => 'Greenland', + 'GD' => 'Grenada', + 'GP' => 'Guadeloupe', + 'GU' => 'Guam', + 'GT' => 'Guatemala', + 'GG' => 'Guernsey', + 'GN' => 'Guinea', + 'GW' => 'Guinea-Bissau', + 'GY' => 'Guyana', + 'HT' => 'Haiti', + 'HM' => 'Heard Island and McDonald Islands', + 'VA' => 'Holy See', + 'HN' => 'Honduras', + 'HK' => 'Hong Kong', + 'HU' => 'Hungary', + 'IS' => 'Iceland', + 'IN' => 'India', + 'ID' => 'Indonesia', + 'IR' => 'Iran (Islamic Republic of)', + 'IQ' => 'Iraq', + 'IE' => 'Ireland', + 'IM' => 'Isle of Man', + 'IL' => 'Israel', + 'IT' => 'Italy', + 'JM' => 'Jamaica', + 'JP' => 'Japan', + 'JE' => 'Jersey', + 'JO' => 'Jordan', + 'KZ' => 'Kazakhstan', + 'KE' => 'Kenya', + 'KI' => 'Kiribati', + 'KP' => 'Korea (Democratic People\'s Republic of)', + 'KR' => 'Korea, Republic of', + 'KW' => 'Kuwait', + 'KG' => 'Kyrgyzstan', + 'LA' => 'Lao People\'s Democratic Republic', + 'LV' => 'Latvia', + 'LB' => 'Lebanon', + 'LS' => 'Lesotho', + 'LR' => 'Liberia', + 'LY' => 'Libya', + 'LI' => 'Liechtenstein', + 'LT' => 'Lithuania', + 'LU' => 'Luxembourg', + 'MO' => 'Macao', + 'MG' => 'Madagascar', + 'MW' => 'Malawi', + 'MY' => 'Malaysia', + 'MV' => 'Maldives', + 'ML' => 'Mali', + 'MT' => 'Malta', + 'MH' => 'Marshall Islands', + 'MQ' => 'Martinique', + 'MR' => 'Mauritania', + 'MU' => 'Mauritius', + 'YT' => 'Mayotte', + 'MX' => 'Mexico', + 'FM' => 'Micronesia (Federated States of)', + 'MD' => 'Moldova, Republic of', + 'MC' => 'Monaco', + 'MN' => 'Mongolia', + 'ME' => 'Montenegro', + 'MS' => 'Montserrat', + 'MA' => 'Morocco', + 'MZ' => 'Mozambique', + 'MM' => 'Myanmar', + 'NA' => 'Namibia', + 'NR' => 'Nauru', + 'NP' => 'Nepal', + 'NL' => 'Netherlands', + 'NC' => 'New Caledonia', + 'NZ' => 'New Zealand', + 'NI' => 'Nicaragua', + 'NE' => 'Niger', + 'NG' => 'Nigeria', + 'NU' => 'Niue', + 'NF' => 'Norfolk Island', + 'MK' => 'North Macedonia', + 'MP' => 'Northern Mariana Islands', + 'NO' => 'Norway', + 'OM' => 'Oman', + 'PK' => 'Pakistan', + 'PW' => 'Palau', + 'PS' => 'Palestine, State of', + 'PA' => 'Panama', + 'PG' => 'Papua New Guinea', + 'PY' => 'Paraguay', + 'PE' => 'Peru', + 'PH' => 'Philippines', + 'PN' => 'Pitcairn', + 'PL' => 'Poland', + 'PT' => 'Portugal', + 'PR' => 'Puerto Rico', + 'QA' => 'Qatar', + 'RE' => 'Réunion', + 'RO' => 'Romania', + 'RU' => 'Russian Federation', + 'RW' => 'Rwanda', + 'BL' => 'Saint Barthélemy', + 'SH' => 'Saint Helena, Ascension and Tristan da Cunha', + 'KN' => 'Saint Kitts and Nevis', + 'LC' => 'Saint Lucia', + 'MF' => 'Saint Martin (French part)', + 'PM' => 'Saint Pierre and Miquelon', + 'VC' => 'Saint Vincent and the Grenadines', + 'WS' => 'Samoa', + 'SM' => 'San Marino', + 'ST' => 'Sao Tome and Principe', + 'SA' => 'Saudi Arabia', + 'SN' => 'Senegal', + 'RS' => 'Serbia', + 'SC' => 'Seychelles', + 'SL' => 'Sierra Leone', + 'SG' => 'Singapore', + 'SX' => 'Sint Maarten (Dutch part)', + 'SK' => 'Slovakia', + 'SI' => 'Slovenia', + 'SB' => 'Solomon Islands', + 'SO' => 'Somalia', + 'ZA' => 'South Africa', + 'GS' => 'South Georgia and the South Sandwich Islands', + 'SS' => 'South Sudan', + 'ES' => 'Spain', + 'LK' => 'Sri Lanka', + 'SD' => 'Sudan', + 'SR' => 'Suriname', + 'SJ' => 'Svalbard and Jan Mayen', + 'SE' => 'Sweden', + 'CH' => 'Switzerland', + 'SY' => 'Syrian Arab Republic', + 'TW' => 'Taiwan, Province of China', + 'TJ' => 'Tajikistan', + 'TZ' => 'Tanzania, United Republic of', + 'TH' => 'Thailand', + 'TL' => 'Timor-Leste', + 'TG' => 'Togo', + 'TK' => 'Tokelau', + 'TO' => 'Tonga', + 'TT' => 'Trinidad and Tobago', + 'TN' => 'Tunisia', + 'TR' => 'Turkey', + 'TM' => 'Turkmenistan', + 'TC' => 'Turks and Caicos Islands', + 'TV' => 'Tuvalu', + 'UG' => 'Uganda', + 'UA' => 'Ukraine', + 'AE' => 'United Arab Emirates', + 'GB' => 'United Kingdom of Great Britain and Northern Ireland', + 'US' => 'United States of America', + 'UM' => 'United States Minor Outlying Islands', + 'UY' => 'Uruguay', + 'UZ' => 'Uzbekistan', + 'VU' => 'Vanuatu', + 'VE' => 'Venezuela (Bolivarian Republic of)', + 'VN' => 'Viet Nam', + 'VG' => 'Virgin Islands (British)', + 'VI' => 'Virgin Islands (U.S.)', + 'WF' => 'Wallis and Futuna', + 'EH' => 'Western Sahara', + 'YE' => 'Yemen', + 'ZM' => 'Zambia', + 'ZW' => 'Zimbabwe', }; return $country; } @@ -456,17 +713,6 @@ sub newline(){ return $txtxx; } -#Komplettset compset logic -sub compsum(){ - my $self = shift; - my ($main_id,$lang,$owner) = @_; - my $ct4rel = $db->collect_ct4rel("content",$main_id,$lang);#hash - my $ctpers4rel = $db->collect_ctpers4rel($main_id,$lang,$owner);#hash - %$ct4rel = (%$ctpers4rel, %$ct4rel);#hash slice - return $ct4rel; -} - - # Rounding like "Kaufmannsrunden" # Descr. http://de.wikipedia.org/wiki/Rundung # Inspired by @@ -596,3 +842,5 @@ sub pathrun(){ } 1; + + diff --git a/copri4/main/src/Mod/Pricing.pm b/copri4/main/src/Mod/Pricing.pm index 5b721cc..9a2a7f2 100755 --- a/copri4/main/src/Mod/Pricing.pm +++ b/copri4/main/src/Mod/Pricing.pm @@ -44,23 +44,6 @@ sub round(){ return $rounded; } -#converts clock-time to minutes -sub clock_minutes { - my $self = shift; - my $clockfloat = shift;# like 12:35 - my $day = 0; - my $hour = 0; - my $min = 0; - - ($hour,$min) = split(/:/, $clockfloat); - ($day,$hour) = split(/\sday\s/, $hour) if($hour =~ /\sday\s/); - $hour += 24 * $day if($day && $day > 0); - my $minutes = $min; - $minutes = ($hour * 60) + $min if($hour && $hour > 0); - - return $minutes; -} - #for one freed rental #depends on operator, only 1 rental get freed_time sub count_freedrental { @@ -141,14 +124,18 @@ sub counting_rental { #main counting rental time and convert it to minute my $dt0 = DateTime::Format::Pg->parse_datetime($computed_start_time); my $dt1 = DateTime::Format::Pg->parse_datetime($computed_end_time); + my $dur10 = $dt1->subtract_datetime($dt0); - my ($durdd,$durhh,$durmm) = $dur10->in_units( 'days', 'hours','minutes' ); + my ($durmonth,$durdd,$durhh,$durmm) = $dur10->in_units( 'months', 'days', 'hours','minutes' ); $durhh = sprintf('%.2d',$durhh); $durmm = sprintf('%.2d',$durmm); my $real_clock = "$durhh:$durmm"; $real_clock = "$durdd day $durhh:$durmm" if($durdd); + $real_clock = "$durmonth month $durdd day $durhh:$durmm" if($durmonth); my $computed_clock = $real_clock; - my $rental_minute = $self->clock_minutes($computed_clock); + my $dur = $dt0->delta_ms($dt1); + my $rental_minute = $dur->{minutes}; + #if end_station == start_station and rental minutes < 5 minutes, then 0 $rental_minute = 0 if($ctpos->{int04} && $ctpos->{int06} && $ctpos->{int04} == $ctpos->{int06} && $rental_minute && $rental_minute < 5); @@ -162,7 +149,9 @@ sub counting_rental { #convert tariff unit by minute time my $tariff_unitbyminute = 60;#defaults to Stundentarif if($ctpos->{time01} && $ctpos->{time01} =~ /[1-9]/){ - $tariff_unitbyminute = $self->clock_minutes($ctpos->{time01}); + my ($dhh,$dmm) = split(/:/,$ctpos->{time01}); + $tariff_unitbyminute = $dmm if($dmm && $dmm > 0); + $tariff_unitbyminute = ($dhh * 60) + $dmm if($dhh && $dhh > 0); } #substract free time from rental time ex. 00:30 Min/Gratis @@ -175,13 +164,17 @@ sub counting_rental { $dt0->add( hours => $dhh, minutes => $dmm ) if(looks_like_number($dhh) && looks_like_number($dmm)); my $cdur10 = $dt1->subtract_datetime($dt0); - my ($durdd,$durhh,$durmm) = $cdur10->in_units( 'days', 'hours','minutes' ); + my ($durmonth,$durdd,$durhh,$durmm) = $cdur10->in_units( 'months', 'days', 'hours','minutes' ); $durhh = sprintf('%.2d',$durhh); $durmm = sprintf('%.2d',$durmm); $computed_clock = "$durhh:$durmm"; $computed_clock = "$durdd day $durhh:$durmm" if($durdd); - $rental_minute = $self->clock_minutes($computed_clock); - #print "$computed_clock|$rental_minute"; + $computed_clock = "$durmonth month $durdd day $durhh:$durmm" if($durmonth); + $rental_minute = 0; + if($dt1 > $dt0){ + my $dur = $dt0->delta_ms($dt1); + $rental_minute = $dur->{minutes}; + } } diff --git a/copri4/main/src/Tpl/BaseEdit.pm b/copri4/main/src/Tpl/BaseEdit.pm index a25054c..4fb8ddc 100755 --- a/copri4/main/src/Tpl/BaseEdit.pm +++ b/copri4/main/src/Tpl/BaseEdit.pm @@ -190,7 +190,6 @@ sub tpl(){ $occupied_style = "color:#ff1493" if($cttpos->{int10} == 2 ||$cttpos->{int10} == 3 || $cttpos->{int10} == 6); if($cttpos->{int35} && $cttpos->{start_time} && $cttpos->{end_time}){ - $cttpos->{end_time} = $now_dt if($cttpos->{int10} == 3 && $cttpos->{int20} == 2); ($pricing,$counting) = $pri->counting_rental(\%varenv,$cttpos); $rental_feed = $pri->fetch_rentalfeed(\%varenv,$cttpos,$counting); $gesamt = $pri->round($pricing->{total_price}); @@ -412,8 +411,8 @@ EOF print $q->td({-class=>'content1_cms'}, "$cttpos->{$key}"),"\n"; }elsif($key eq "date_time"){ - my ($s_yy,$s_mo,$s_dd,$s_hh,$s_mi) = $lb->split_date($cttpos->{start_time}); - my ($e_yy,$e_mo,$e_dd,$e_hh,$e_mi) = $lb->split_date($cttpos->{end_time}); + my ($s_yy,$s_mo,$s_dd,$s_hh,$s_mi) = $lb->split_date($pricing->{start_time}); + my ($e_yy,$e_mo,$e_dd,$e_hh,$e_mi) = $lb->split_date($pricing->{end_time}); print $q->Tr(),"\n"; print $q->td({-class=>'left_italic_cms'},"$des"),"\n"; print $q->td({-class=>'content1_cms'}, @@ -458,7 +457,7 @@ EOF }elsif($key =~ /int03/){ print $q->Tr(),"\n"; print $q->td({-class=>'left_italic_cms',-nowrap=>"1"},"$des"),"\n"; - if($cttpos->{int35} && $cttpos->{start_time} && $cttpos->{end_time}){ + if($cttpos->{int35} && $pricing->{start_time} && $pricing->{end_time}){ print $q->td({-class=>'content1_cms', -nowrap=>1},"$pricing->{real_clock} $pricing->{freed_time}"),"\n"; }else{ print $q->td({-colspan=>'1',-class=>'content1_cms'},$q->textfield(-class=>'etxt',-name=>"$key",-default=>"$cttpos->{$key}", -override=>'1',-size=>"$size",-maxlength=>10)),"\n"; @@ -466,7 +465,7 @@ EOF }elsif($key =~ /int02/){ print $q->Tr(),"\n"; print $q->td({-class=>'left_italic_cms'},"$des"),"\n"; - if($cttpos->{int35} && $cttpos->{start_time} && $cttpos->{end_time}){ + if($cttpos->{int35} && $pricing->{start_time} && $pricing->{end_time}){ print "\n"; foreach my $fid (sort keys(%{ $rental_feed->{rental_description}->{tarif_elements} })){ if(ref($rental_feed->{rental_description}->{tarif_elements}->{$fid}) eq "ARRAY"){ @@ -750,10 +749,14 @@ EOF my @_valxx; my $selsize="150px"; my $country = $lb->country_code(); + my $country_all = $lb->country_code_all(); $ctrel->{$key} = "DE" if(!$ctrel->{$key}); foreach (sort { $country->{$a} cmp $country->{$b} } keys (%$country)){ push @_valxx, "$_:$country->{$_}"; } + foreach (sort { $country_all->{$a} cmp $country_all->{$b} } keys (%$country_all)){ + push @_valxx, "$_:$country_all->{$_}"; + } 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)); diff --git a/copri4/main/src/Tpl/Calorin.pm b/copri4/main/src/Tpl/Calorin.pm index 6aadbfe..f12729e 100755 --- a/copri4/main/src/Tpl/Calorin.pm +++ b/copri4/main/src/Tpl/Calorin.pm @@ -56,7 +56,7 @@ sub tpl(){ } $path =~ s/\/user|\/manager|\/admin//; - my $now_time = strftime "%Y-%m-%d %H:%M", localtime; + my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime; my $dbh_primary = $dbt->dbconnect_extern($dbt->{primary}->{sharee_primary}->{database}->{dbname}); my $users_dms_primary = { u_id => 0 }; @@ -354,6 +354,7 @@ sub tpl(){ ($year_st,$mon_st,$day_st,$hh_st,$mm_st) = $lb->split_date($cttpos->{$pid}->{itime}); } if($cttpos->{$pid}->{end_time}){ + $cttpos->{$pid}->{end_time} = $now_dt if($cttpos->{$pid}->{int10} == 3); ($year_en,$mon_en,$day_en,$hh_en,$mm_en) = $lb->split_date($cttpos->{$pid}->{end_time}); }else{ ($year_en,$mon_en,$day_en,$hh_en,$mm_en) = $lb->split_date($cttpos->{$pid}->{itime}); diff --git a/copri4/main/src/Tpl/TransPositionen.pm b/copri4/main/src/Tpl/TransPositionen.pm index 89a2c60..7c73e3f 100755 --- a/copri4/main/src/Tpl/TransPositionen.pm +++ b/copri4/main/src/Tpl/TransPositionen.pm @@ -176,7 +176,6 @@ EOF my $rental_feed = {}; if($cttpos->{$id}->{int35} && $cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ - $cttpos->{$id}->{end_time} = $now_dt if($cttpos->{$id}->{int10} == 3); $pri->count_freedrental($q,\%varenv,$ctadr->{c_id},$cttpos->{$id}); ($pricing,$counting) = $pri->counting_rental(\%varenv,$cttpos->{$id}); $rental_feed = $pri->fetch_rentalfeed(\%varenv,$cttpos->{$id},$counting); @@ -266,13 +265,13 @@ EOF print $q->td({-class=>'tdint'},"$co2saving"),"\n"; }elsif($key =~ /int03/){ - if($cttpos->{$id}->{int35} && $cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ + if($cttpos->{$id}->{int35} && $pricing->{start_time} && $pricing->{end_time}){ print $q->td({-class=>'tdint', -nowrap=>1},"$pricing->{real_clock} $pricing->{freed_time}"),"\n"; }else{ print $q->td({-colspan=>'1',-class=>'element',-style=>"$txtstyle $set_style"},$q->textfield(-class=>'etxt',-style=>"$txtstyle",-name=>"col_$key",-default=>"$cttpos->{$id}->{$key}", -override=>'1',-size=>"$isize",-maxlength=>10)),"\n"; } }elsif($key =~ /int02/){ - if($cttpos->{$id}->{int35} && $cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ + if($cttpos->{$id}->{int35} && $pricing->{start_time} && $pricing->{end_time}){ print "\n"; foreach my $fid (sort keys(%{ $rental_feed->{rental_description}->{tarif_elements} })){ if(ref($rental_feed->{rental_description}->{tarif_elements}->{$fid}) eq "ARRAY"){ @@ -292,8 +291,8 @@ EOF $cttpos->{$id}->{$key} .= "\nManuell bearbeitet\n"; } - my ($s_yy,$s_mo,$s_dd,$s_hh,$s_mi) = $lb->split_date($cttpos->{$id}->{start_time}); - my ($e_yy,$e_mo,$e_dd,$e_hh,$e_mi) = $lb->split_date($cttpos->{$id}->{end_time}); + my ($s_yy,$s_mo,$s_dd,$s_hh,$s_mi) = $lb->split_date($pricing->{start_time}); + my ($e_yy,$e_mo,$e_dd,$e_hh,$e_mi) = $lb->split_date($pricing->{end_time}); print "\n"; print $q->textarea(-class=>'autos',-style=>"border: 1px solid #ededed;",-name=>"col_$key",-default=>"$cttpos->{$id}->{$key}", -override=>'1',-rows=>"3",-cols=>60, -autofocus=>1),"
\n"; @@ -352,14 +351,14 @@ EOF } #yes, int03=Menge on parts, int35=unit_price1 on rental elsif($key =~ /int03/){ - if($cttpos->{$id}->{int35} && $cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ + if($cttpos->{$id}->{int35} && $pricing->{start_time} && $pricing->{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"; } }elsif($key =~ /int02/){ - if($cttpos->{$id}->{int35} && $cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ + if($cttpos->{$id}->{int35} && $pricing->{start_time} && $pricing->{end_time}){ print "\n"; foreach my $fid (sort keys(%{ $rental_feed->{rental_description}->{tarif_elements} })){ if(ref($rental_feed->{rental_description}->{tarif_elements}->{$fid}) eq "ARRAY"){ @@ -427,9 +426,9 @@ EOF if($cttpos->{$id}->{int06} && $cttpos->{$id}->{int04}){ print $q->span("Start/End Station: $cttpos->{$id}->{int06} / $cttpos->{$id}->{int04}, GPS: $cttpos->{$id}->{txt06}"),"\n"; } - if($cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ - my $start_time = $lb->time4de($cttpos->{$id}->{start_time},"1"); - my $end_time = $lb->time4de($cttpos->{$id}->{end_time},"1"); + if($pricing->{start_time} && $pricing->{end_time}){ + my $start_time = $lb->time4de($pricing->{start_time},"1"); + my $end_time = $lb->time4de($pricing->{end_time},"1"); print "
\n"; print $q->span({-style=>"$time_style"}, "Mietzeit: $start_time → $end_time"),"\n"; } diff --git a/copri4/main/src/scripts/mailTransportcms.pl b/copri4/main/src/scripts/mailTransportcms.pl index 794a2da..316b1a3 100755 --- a/copri4/main/src/scripts/mailTransportcms.pl +++ b/copri4/main/src/scripts/mailTransportcms.pl @@ -23,6 +23,8 @@ use warnings; use utf8; use Encode; use POSIX; +use DateTime; +use DateTime::Format::Pg; use Scalar::Util qw(looks_like_number); use Lib::Config; use Mod::DBtank; @@ -73,7 +75,7 @@ if(looks_like_number($adr_id)){ }; $ctadr = $dbt->fetch_tablerecord($dbh_primary,$pref_adr); - #send_emailack + #send_invoice if($todo eq "send_invoice" && looks_like_number($ct_id)){ $sendref->{mailxcfg} = "mailx_rechnung"; $sendmail = send_invoice($todo,$sendref,$ctadr,$ct_id); @@ -100,6 +102,11 @@ if($todo eq "send_alarm2hotline" && looks_like_number($ct_id)){ $sendmail = send_alarm2hotline($sendref,$ct_id); } +#send_occupied2hotline 78h, done by cronjob +if($todo eq "send_occupied2hotline"){ + $sendmail = send_occupied2hotline($sendref); +} + if($sendmail->{c_id}){ sendmailjob($sendmail); }else{ @@ -118,7 +125,7 @@ sub send_invoice { my $pref_ctu = { table => "contentuser", fetch => "one", - c_id => "1",#primary hotline + c_id => "1",#primary hotline#TODO change to Kunden-Fakture, check tablefields }; my $uadr = { c_id => 0 }; $uadr = $dbt->fetch_tablerecord($dbh_primary,$pref_ctu); @@ -290,6 +297,63 @@ EOF return $sendref; }#end send_alarm2hotline +#send_occupied2hotline +sub send_occupied2hotline { + my $sendref = shift; + my $ct_id = shift || ""; + + my $dbh = ""; + my $pref_ctu = { + table => "contentuser", + fetch => "one", + c_id => "1",#primary hotline + }; + my $uadr = { c_id => 0 }; + $uadr = $dbt->fetch_tablerecord($dbh,$pref_ctu); + $sendref->{mail_to} = $uadr->{txt08}; + + my $search = { + table => "contenttranspos", + int10 => 3, + #int33 => 3,#marker for sending 3. SMS + int34 => "null",#not staff + start_time_interval => "(now() - interval '78 hour')", + }; + + my $cttpos = { c_id => 0 }; + $cttpos = $dbt->collect_transpos($dbh,$search); + + my $bike = ""; + foreach my $pid (sort { $cttpos->{$b}->{end_time} cmp $cttpos->{$a}->{end_time} } keys(%$cttpos)){ + + $bike .= $oprefix . $cttpos->{$pid}->{barcode} . "\n"; + $sendref->{c_id} = $cttpos->{$pid}->{cc_id};#just one + print "$bike $sendref->{c_id}"; + + } + + if($bike){ + $bike =~ s/,$//; + $sendref->{subject} = "konrad über 78 Stunden occupied"; + +$sendref->{message} = <{message} =~ s/\n/\
/g; + return $sendref; + } + return; +} + #prepare email by cms markup sub prepare_content { my $sendref = shift; diff --git a/copri4/shareeapp-operator/src/Tpl/FormEdit.pm b/copri4/shareeapp-operator/src/Tpl/FormEdit.pm index 80cb100..ab65bbb 100755 --- a/copri4/shareeapp-operator/src/Tpl/FormEdit.pm +++ b/copri4/shareeapp-operator/src/Tpl/FormEdit.pm @@ -497,11 +497,16 @@ Nach Abschluss der Registrierung erhalten Sie sowohl auf die von Ihnen hinterleg if($key =~ /txt/ && $size eq "select" && $des eq "Land"){ my $country = $lb->country_code(); + my $country_all = $lb->country_code_all(); $ctrel->{$key} = "DE" if(!$ctrel->{$key}); - my @_valxx; + my @_valxx = (); foreach (sort { $country->{$a} cmp $country->{$b} } keys (%$country)){ push @_valxx, "$_:$country->{$_}"; } + foreach (sort { $country_all->{$a} cmp $country_all->{$b} } keys (%$country_all)){ + push @_valxx, "$_:$country_all->{$_}"; + } + print $q->label({-for=>"$key",-style=>'padding-top:15px;'},"$label_des"),"\n"; print $but->selector_class("$key","form-control","","$ctrel->{$key}",@_valxx);