diff --git a/copri4/main/src/Mod/APIfunc.pm b/copri4/main/src/Mod/APIfunc.pm index f1bc1c0..6f40a9a 100755 --- a/copri4/main/src/Mod/APIfunc.pm +++ b/copri4/main/src/Mod/APIfunc.pm @@ -25,7 +25,7 @@ use Mod::DBtank; use Mod::Callib; use Mod::Basework; use Mod::Pricing; -#use Mod::APIsigoclient;#no! +#use Mod::APIsigclient;#no! use Data::Dumper; use Sys::Hostname; my $hostname = hostname; @@ -36,7 +36,7 @@ my $dbt = new DBtank; my $cal = new Callib; my $bw = new Basework; my $pri = new Pricing; -#my $si = new APIsigoclient; +#my $si = new APIsigclient; sub new { my $class = shift; @@ -1143,7 +1143,7 @@ sub booking_update(){ $update_pos->{owner} = "$owner"; $update_pos->{int10} = "$state_key"; - $update_pos->{txt11} = "$sig_book->{rentalid}" if($sig_book->{rentalid}); + $update_pos->{txt11} = "$sig_book->{rentalId}" if($sig_book->{rentalId}); $rows = $dbt->update_record($dbh,$update_pos,$record_pos); if($rows > 0){ @@ -1171,7 +1171,7 @@ sub booking_update(){ $update_pos->{int41} = "$counting->{int41}" if(looks_like_number($counting->{int41})); $update_pos->{int10} = "$state_key"; - $update_pos->{txt11} = "$sig_book->{rentalid}" if($sig_book->{rentalid}); + $update_pos->{txt11} = "$sig_book->{rentalId}" if($sig_book->{rentalId}); $rows = $dbt->update_record($dbh,$update_pos,$record_pos); $booking_values->{response_state} = "OK: available bike " . $q->param('bike') . ", still locked"; @@ -1207,7 +1207,7 @@ sub booking_update(){ $update_cc->{int04} = "$stations_raw->{$id}->{int04}"; $update_pos->{int24} = "1"; $update_pos->{int10} = "$state_key"; - $update_pos->{txt11} = "$sig_book->{rentalid}" if($sig_book->{rentalid}); + $update_pos->{txt11} = "$sig_book->{rentalId}" if($sig_book->{rentalId}); $update_cc->{txt06} = "$gps";#end content coordinates $update_pos->{txt06} = "$gps";#end pos coordinates $update_pos->{int21} = "$gps_age_minutes"; diff --git a/copri4/main/src/Mod/APIjsonserver.pm b/copri4/main/src/Mod/APIjsonserver.pm index f898f78..441f6c8 100755 --- a/copri4/main/src/Mod/APIjsonserver.pm +++ b/copri4/main/src/Mod/APIjsonserver.pm @@ -25,7 +25,7 @@ use Mod::Basework; use Mod::Shareework; use Mod::APIfunc; use Mod::APIjsonclient; -use Mod::APIsigoclient; +use Mod::APIsigclient; use Data::Dumper; use Sys::Hostname; my $hostname = hostname; @@ -42,7 +42,7 @@ sub handler { my $tk = new Shareework; my $apif = new APIfunc; my $jsc = new APIjsonclient; - my $si = new APIsigoclient; + my $si = new APIsigclient; my $dbh = ""; my %varenv = $cf->envonline(); @@ -185,6 +185,7 @@ elsif($q->param('request') eq "authorization"){ elsif($q->param('request') eq "booking_request"){ ($aowner,my $return_merchant) = $apif->fetch_merchant($q,\%varenv,$coo,$q->param('merchant_id')); $varenv{merchant_id} = $return_merchant->{merchant_id}; + my $rows = 0; $response = { %$response, %$return_merchant }; my ($auth,$authraw) = $apif->auth_verify($q); @@ -241,6 +242,7 @@ elsif($q->param('request') eq "booking_request"){ ($ct_bike,$ct_tariff) = $apif->fetch_bike_tariff(\%varenv,$authraw,$bike,$aowner); my $sig_book = { + bikeId => "$ct_bike->{txt22}", rentalId => "", reservationId => "" }; @@ -248,7 +250,7 @@ elsif($q->param('request') eq "booking_request"){ if($ct_bike->{barcode} && $ct_tariff->{barcode}){ #sig reservation. not mandatory if($ct_bike->{int11} == 3){ - $sig_book = $si->sig_booking(\%varenv,$auth,$ct_bike,"","reserve"); + $sig_book = $si->sig_booking(\%varenv,$authraw,$ct_bike,"","reserve"); } $response_book = $apif->booking_request(\%varenv,$authraw,$bike,$ct_bike,$ct_tariff,$aowner,$gps,$sig_book); }elsif(!$ct_tariff->{barcode}){ @@ -261,6 +263,7 @@ elsif($q->param('request') eq "booking_request"){ #just in time booking if(ref($response_book) eq "HASH" && $response_book->{response_state} =~ /OK/ && $q->param('state') && $q->param('state') =~ /occupied/){ + my $booking_values = {}; my $ctpos = {}; my $booking_pos = { table => "contenttranspos", @@ -274,13 +277,16 @@ elsif($q->param('request') eq "booking_request"){ #sig booking if($ctpos->{int11} == 3){ #usecase with reservationId (in ctpos) is in sig not defined, thats because using ct_bike.txt22 - $sig_book = $si->sig_booking(\%varenv,$auth,$ct_bike,$ctpos,"rental"); + #$sig_book = $si->sig_booking(\%varenv,$authraw,$ct_bike,$ctpos,"rental"); + system("$varenv{basedir}/src/scripts/sig_client.pl $varenv{syshost} 'rental' $authraw->{c_id} $ctpos->{c_id} &"); + ($rows, $booking_values) = $apif->booking_update($q,\%varenv,$authraw,$aowner,$sig_book); + $response = {%$response, %$booking_values}; + }else{ + ($rows, $booking_values) = $apif->booking_update($q,\%varenv,$authraw,$aowner,$sig_book); + $response = {%$response, %$booking_values}; } - - (my $rows, my $booking_values) = $apif->booking_update($q,\%varenv,$authraw,$aowner,$sig_book); - $response = {%$response, %$booking_values}; }else{ - $response = {%$response, %$response_book}; + $response = {%$response, %$response_book}; } } @@ -331,7 +337,8 @@ elsif($q->param('request') eq "booking_cancel" || $q->param('request') eq "booki $ctpos = $dbt->fetch_tablerecord($dbh,$booking_pos); my $sig_book = { - rentalId => "", + bikeId => $ctpos->{txt22}, + rentalId => $ctpos->{txt11}, reservationId => "" }; @@ -339,10 +346,10 @@ elsif($q->param('request') eq "booking_cancel" || $q->param('request') eq "booki my $booking_values = {}; if($ctpos->{int11} == 3){ - #this sigo request is still not defined - #$sig_book = $si->sig_booking(\%varenv,$auth,"",$ctpos,"reserve_end"); - $response->{response_state} = "Failure: sigo bike reservation can not be canceled on sigo"; - $response->{response_text} = "Abbruch, die Reservierung kann nicht storniert werden"; + #this sig request is still not defined + #$response->{response_state} = "Failure: sig bike reservation can not be canceled on sig"; + #$response->{response_text} = "Abbruch, die Reservierung kann nicht storniert werden"; + $sig_book = $si->sig_booking(\%varenv,$authraw,"",$ctpos,"reserve_end"); ($rows, $booking_values) = $apif->booking_update($q,\%varenv,$authraw,$aowner,$sig_book); }else{ ($rows, $booking_values) = $apif->booking_update($q,\%varenv,$authraw,$aowner,$sig_book); @@ -350,19 +357,24 @@ elsif($q->param('request') eq "booking_cancel" || $q->param('request') eq "booki $response = {%$response, %$booking_values}; }elsif($q->param('request') eq "booking_update" && (($q->param('state') && $q->param('state') =~ /occupied|available/) || ($q->param('lock_state') && $q->param('lock_state') =~ /locking|locked|unlocking|unlocked/))){ - + my $booking_values = {}; if($ctpos->{int11} == 3){ if($q->param('state') eq "occupied"){ - $sig_book = $si->sig_booking(\%varenv,$auth,"",$ctpos,"rental"); + #$sig_book = $si->sig_booking(\%varenv,$authraw,"",$ctpos,"rental"); + system("$varenv{basedir}/src/scripts/sig_client.pl $varenv{syshost} 'rental' $authraw->{c_id} $ctpos->{c_id} &"); } if($q->param('state') eq "available"){ - $sig_book = $si->sig_booking(\%varenv,$auth,"",$ctpos,"rental_end"); + #$sig_book = $si->sig_booking(\%varenv,$authraw,"",$ctpos,"rental_end"); + system("$varenv{basedir}/src/scripts/sig_client.pl $varenv{syshost} 'rental_end' $authraw->{c_id} $ctpos->{c_id} &"); } - } - ($rows, my $booking_values) = $apif->booking_update($q,\%varenv,$authraw,$aowner,$sig_book); - $response = {%$response, %$booking_values}; + ($rows, $booking_values) = $apif->booking_update($q,\%varenv,$authraw,$aowner,$sig_book); + $response = {%$response, %$booking_values}; + }else{ + ($rows, $booking_values) = $apif->booking_update($q,\%varenv,$authraw,$aowner,$sig_book); + $response = {%$response, %$booking_values}; + } #keep in mind, it works on operator dependency $bw->log("user_miniquery via $varenv{dbname} exist count:",$authraw->{int23},""); @@ -493,8 +505,8 @@ elsif($q->param('request') eq "bikes_available"){ $bw->log("Y bikes_available by c_id $authraw->{c_id}, Tarif:",$authraw->{txt30},""); if($varenv{syshost} eq "shareeapp-sx"){ - ($response->{bikes},my $return2copri->{bikes}) = $si->sigo_available($q,\%varenv,$authraw); - $tk->sigobike_cupdate($return2copri->{bikes}); + ($response->{bikes},my $return2copri->{bikes}) = $si->sig_available($q,\%varenv,$authraw); + $tk->sigbike_cupdate($return2copri->{bikes}); }else{ $response->{bikes} = $apif->bikes_available($q,\%varenv,$authraw); } @@ -700,8 +712,8 @@ elsif($q->param('request') eq "stations_available"){ my ($auth,$authraw) = $apif->auth_verify($q); $response = { %$response, %$auth }; if($varenv{syshost} eq "shareeapp-sx"){ - ($response->{stations},my $return2copri->{stations}) = $si->sigo_available($q,\%varenv,$authraw); - $tk->sigostation_cupdate($return2copri->{stations}); + ($response->{stations},my $return2copri->{stations}) = $si->sig_available($q,\%varenv,$authraw); + $tk->sigstation_cupdate($return2copri->{stations}); }else{ ($response->{stations}, my $response_raw) = $apif->stations_available($q,\%varenv,$authraw); } diff --git a/copri4/main/src/Mod/APIsigoclient.pm b/copri4/main/src/Mod/APIsigclient.pm similarity index 85% rename from copri4/main/src/Mod/APIsigoclient.pm rename to copri4/main/src/Mod/APIsigclient.pm index 34edee6..6520c08 100755 --- a/copri4/main/src/Mod/APIsigoclient.pm +++ b/copri4/main/src/Mod/APIsigclient.pm @@ -1,9 +1,9 @@ -package APIsigoclient; +package APIsigclient; # # SPDX-License-Identifier: AGPL-3.0-or-later # Copyright (c) Rainer Gümpelein, TeilRad GmbH # -#Client for sigo +#Client for sig # #380116b5-0522-43da-ab66-477744a731a3 # @@ -49,18 +49,18 @@ sub new { my %apikeyconf = $aconf->getall; my $ua = LWP::UserAgent->new; - $ua->agent("sharee sigoclient"); + $ua->agent("sharee sigclient"); my $size = $ua->max_size; my $bytes = 100000; $ua->max_size( $bytes ); $ua->default_header( 'x-api-key' => $apikeyconf{sigo}->{api_key} ); #will be called on bikes_available -sub sigo_available { +sub sig_available { my $self = shift; my $q = shift; my $varenv = shift || {}; - my $auth = shift || {}; + my $ctadr = shift || {}; my $response_in = {}; my $dbh = ""; @@ -68,8 +68,8 @@ sub sigo_available { my $authed = 0; my $tariff_content = {}; - $authed = 1 if(ref($auth) eq "HASH" && $auth->{c_id} && $auth->{c_id} > 0); - (my $bike_group,my $user_group,$tariff_content,my $user_tour) = $apif->fetch_tariff($varenv->{dbname},$auth,$q->param('authcookie')); + $authed = 1 if(ref($ctadr) eq "HASH" && $ctadr->{c_id} && $ctadr->{c_id} > 0); + (my $bike_group,my $user_group,$tariff_content,my $user_tour) = $apif->fetch_tariff($varenv->{dbname},$ctadr,$q->param('ctadrcookie')); my $hotline_hash = { table => "contentuser", @@ -80,15 +80,15 @@ sub sigo_available { my $hotline_data = $dbt->fetch_record($dbh,$hotline_hash); my $td_template = $dbt->rental_description_template(); - open(FILE,">>$varenv->{logdir}/APIsigo_client.log"); - print FILE "\n*** $now_dt 'sigo_available' \n"; + open(FILE,">>$varenv->{logdir}/APIsigclient.log"); + print FILE "\n*** $now_dt 'sig_available' \n"; #my $endpoint = "https://sigo.dev.sigo.green/api/v1/bikes"; my $endpoint = "$dbt->{operator}->{$varenv->{dbname}}->{endpoint}/bikes"; my $response_out = {}; my $return2copri = {}; my $rest_json = ""; - (my $ret_json, my $ret_status) = $self->get_sigo("$endpoint",$rest_json); + (my $ret_json, my $ret_status) = $self->get_sig("$endpoint",$rest_json); eval { $response_in = decode_json($ret_json); $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime; @@ -200,13 +200,13 @@ sub sigo_available { $response_out->{$bike}->{tariff_description}->{max_eur_per_day} = "$tariff_content->{$tid}->{int17}" if($tariff_content->{$tid}->{int17}); $response_out->{$bike}->{tariff_description}->{free_hours} = "$tariff_content->{$tid}->{int16}" if($tariff_content->{$tid}->{int16}); $response_out->{$bike}->{tariff_description}->{abo_eur_per_month} = "$tariff_content->{$tid}->{int15}" if($tariff_content->{$tid}->{int15}); - $response_out->{$bike}->{tariff_description}->{operator_agb} = "Mit der Mietrad Anmietung wird folgender Betreiber AGB zugestimmt (Demo)." if($auth->{c_id} && ($auth->{c_id} == 1842 || $auth->{c_id} == 5781 || $auth->{c_id} == 22262)); + $response_out->{$bike}->{tariff_description}->{operator_agb} = "Mit der Mietrad Anmietung wird folgender Betreiber AGB zugestimmt (Demo)." if($ctadr->{c_id} && ($ctadr->{c_id} == 1842 || $ctadr->{c_id} == 5781 || $ctadr->{c_id} == 22262)); #new rental_description $response_out->{$bike}->{rental_description}->{name} = "$tariff_content->{$tid}->{ct_name}"; $response_out->{$bike}->{rental_description}->{id} = "$tariff_content->{$tid}->{barcode}"; $response_out->{$bike}->{rental_description}->{rental_info}->{1} = ["Tracking","Ich stimme der Speicherung (Tracking) meiner Fahrstrecke zwecks wissenschaftlicher Auswertung und Berechnung der CO2-Einsparung zu!"];#TODO if($resp->{gps_tracker_id}); - $response_out->{$bike}->{rental_description}->{rental_info}->{2} = ["AGB","Mit der Mietrad Anmietung wird folgender Betreiber AGB zugestimmt (als Demo sharee AGB)."] if($auth->{c_id} && ($auth->{c_id} == 1842 || $auth->{c_id} == 5781 || $auth->{c_id} == 22262)); + $response_out->{$bike}->{rental_description}->{rental_info}->{2} = ["AGB","Mit der Mietrad Anmietung wird folgender Betreiber AGB zugestimmt (als Demo sharee AGB)."] if($ctadr->{c_id} && ($ctadr->{c_id} == 1842 || $ctadr->{c_id} == 5781 || $ctadr->{c_id} == 22262)); my $i = 0; foreach my $td (sort keys (%$td_template)){ @@ -262,17 +262,17 @@ sub sigo_available { print FILE "warn:" . $@ . "\n"; } - print FILE "sigo_available response_out from response_in\n" . Dumper($response_out) . "\n"; + print FILE "sig_available response_out from response_in\n" . Dumper($response_out) . "\n"; close(FILE); return ($response_out,$return2copri); -}#end sigo_available +}#end sig_available #POST resverve, rental, ... sub sig_booking { my $self = shift; my $varenv = shift || {}; - my $auth = shift || {}; + my $ctadr = shift || {}; my $ct_bike = shift || {}; my $ctpos = shift || {}; my $todo = shift || ""; @@ -281,8 +281,8 @@ sub sig_booking { my $owner = 169; my $sig_book = {}; - open(FILE,">>$varenv->{logdir}/APIsigo_client.log"); - print FILE "\n*** $now_dt 'sigo_post $todo' \n"; + open(FILE,">>$varenv->{logdir}/APIsigclient.log"); + print FILE "\n*** $now_dt 'sig_post $todo' \n"; my $endpoint = "$dbt->{operator}->{$varenv->{dbname}}->{endpoint}/"; my %json = (); @@ -292,25 +292,24 @@ sub sig_booking { $endpoint .= "bikes/reserve"; %json = ( bikeId => "$ct_bike->{txt22}", - email => "r.guempelein\@sharee.bike" + email => "$ctadr->{txt08}" ); } - #reservation end, this sigo request is still not defined + #reservation end, this sig request is still not defined. maybe end by rentalId elsif($todo eq "reserve_end"){ $endpoint .= "reserve/end"; %json = ( reservationId => "$ctpos->{txt10}", - email => "r.guempelein\@sharee.bike" + email => "$ctadr->{txt08}" ); } #rental start elsif($todo eq "rental"){ $endpoint .= "rental"; - my $sig_serial = $ctpos->{txt22} || $ct_bike->{txt22}; + my $sig_bikeId = $ctpos->{txt22} || $ct_bike->{txt22}; %json = ( - bikeId => "$sig_serial", - #reservationId => "$ctpos->{txt10}",#not in sig implemented - email => "r.guempelein\@sharee.bike" + bikeId => "$sig_bikeId", + email => "$ctadr->{txt08}" ); } #rental end @@ -318,7 +317,7 @@ sub sig_booking { $endpoint .= "rental/end"; %json = ( rentalId => "$ctpos->{txt11}", - email => "r.guempelein\@sharee.bike" + email => "$ctadr->{txt08}" ); #keep in mind, it will return no json, just text: "Rental Ended" } @@ -332,16 +331,16 @@ sub sig_booking { if(ref(\%json) eq "HASH" && $json{email}){ my $rest_json = encode_json(\%json); - (my $ret_json, my $ret_status) = $self->post_sigo($endpoint,$rest_json); + (my $ret_json, my $ret_status) = $self->post_sig($endpoint,$rest_json); $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime; eval { $sig_book = decode_json($ret_json); - print FILE "<--- $now_dt sig_booking sigo_post $todo response_in with status_line: $ret_status\n" . Dumper($sig_book); + print FILE "<--- $now_dt sig_booking sig_post $todo response_in with status_line: $ret_status\n" . Dumper($sig_book); #print $ret_json . "\n"; }; if ($@){ - print FILE "<--- $now_dt failure sig_booking sigo_post $todo raw response_in with status_line: $ret_status\n" . Dumper($ret_json) . "\n"; + print FILE "<--- $now_dt failure sig_booking sig_post $todo raw response_in with status_line: $ret_status\n" . Dumper($ret_json) . "\n"; #warn $@; print FILE "warn:" . $@ . "\n"; } @@ -349,10 +348,26 @@ sub sig_booking { if(ref($sig_book) ne "HASH"){ $sig_book = { + bikeId => "", rentalId => "", reservationId => "" }; - print FILE "<--- $now_dt failure sig_booking sigo_post $todo , reset sig_book hash to empty\n"; + print FILE "<--- $now_dt failure sig_booking sig_post $todo , reset sig_book hash to empty\n"; + } + + + if($ctpos->{c_id}){ + my $update_pos = { + table => "contenttranspos", + mtime => "now()", + owner => "169", + }; + my $rows = 0; + $update_pos->{txt10} = "$sig_book->{reservationId}" if($sig_book->{reservationId}); + $update_pos->{txt11} = "$sig_book->{rentalId}" if($sig_book->{rentalid}); + $rows = $dbt->update_record($dbh,$update_pos,$ctpos); + + print FILE "<--- rows: $rows, update_pos: $ctpos->{c_id}, with:" . Dumper($update_pos) . "\n"; } close(FILE); @@ -361,15 +376,15 @@ sub sig_booking { #main GET -sub get_sigo { +sub get_sig { my $self = shift; my $endpoint = shift || ""; my $rest_json = shift || ""; - my $sigo_request = "$endpoint"; + my $sig_request = "$endpoint"; - print FILE "===> GET sigo >> " . $sigo_request . "\n" . $rest_json . "\n"; + print FILE "===> GET sig >> " . $sig_request . "\n" . $rest_json . "\n"; - my $req = HTTP::Request->new(GET => "$sigo_request"); + my $req = HTTP::Request->new(GET => "$sig_request"); $req->content_type('application/json'); $req->content($rest_json); @@ -386,15 +401,15 @@ sub get_sigo { } #main POST -sub post_sigo { +sub post_sig { my $self = shift; my $endpoint = shift || ""; my $rest_json = shift || ""; - my $sigo_request = "$endpoint"; + my $sig_request = "$endpoint"; - print FILE "===> POST sigo >> " . $sigo_request . "\n" . $rest_json . "\n"; + print FILE "===> POST sig >> " . $sig_request . "\n" . $rest_json . "\n"; - my $req = HTTP::Request->new(POST => "$sigo_request"); + my $req = HTTP::Request->new(POST => "$sig_request"); $req->content_type('application/json'); $req->content($rest_json); diff --git a/copri4/main/src/Mod/APIxmlserver.pm b/copri4/main/src/Mod/APIxmlserver.pm index ccabd87..271eee4 100755 --- a/copri4/main/src/Mod/APIxmlserver.pm +++ b/copri4/main/src/Mod/APIxmlserver.pm @@ -157,10 +157,12 @@ sub handler { #keep all and add only LV userID if user email still exist my $update = { - table => "contentadr", - mtime => 'now()', - owner => "$owner", - int01 => $q->escapeHTML($xmlref->{userID}), + table => "contentadr", + txt17 => "sharee_lv", + txt30 => "5511", + mtime => 'now()', + owner => "$owner", + int01 => $q->escapeHTML($xmlref->{userID}), }; my $rows = $dbt->update_record($dbh,$update,$record); diff --git a/copri4/main/src/Mod/DBtank.pm b/copri4/main/src/Mod/DBtank.pm index 56fe191..db643d4 100755 --- a/copri4/main/src/Mod/DBtank.pm +++ b/copri4/main/src/Mod/DBtank.pm @@ -276,7 +276,7 @@ sub users_map(){ sub channel_map(){ my $self = shift; my $channel = { - 169 => "sigo connector", + 169 => "sig connector", 173 => "merchant fallback",#mig 175 => "example App",#mig 176 => "Mein konrad App",#mig @@ -1314,6 +1314,7 @@ sub insert_pos(){ my $status = shift || ""; my $owner = shift || ""; my $sig_book = shift || {}; + #txt11=$sig_book->{rentalId} will be set on booking_update $ct_name = $ct->{barcode} if(!$ct_name);#artikelnr or bikenr my $prefix = ""; @@ -1366,7 +1367,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,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}','$sig_book->{reservationId}','$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','$sig_book->{bikeId}','$sig_book->{reservationId}','$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/Indexsharee.pm b/copri4/main/src/Mod/Indexsharee.pm index 8f11103..5fe066f 100755 --- a/copri4/main/src/Mod/Indexsharee.pm +++ b/copri4/main/src/Mod/Indexsharee.pm @@ -353,8 +353,8 @@ sub handler { }elsif($R::rel_edit eq "new_relation" && $R::main_id && $R::main_id >= 200000){ $return = $pl->new_relation($R::main_id,$users_dms->{u_id}); }elsif($R::rel_edit eq "save_ctuser" && $R::main_id && $R::main_id >= 200000){ - $return = "failure::TODO Service-Config save"; - #$return = $pl->save_ctuser($users_dms); + $return = "failure::under development, $node_meta->{tpl_name}"; + #$return = $pl->save_service_desc($users_dms); }elsif($R::rel_edit && $R::main_id && $R::main_id >= 200000){ $return = $pm->maininit($users_dms); } diff --git a/copri4/main/src/Mod/Prelib.pm b/copri4/main/src/Mod/Prelib.pm index 14afa60..822ac5a 100755 --- a/copri4/main/src/Mod/Prelib.pm +++ b/copri4/main/src/Mod/Prelib.pm @@ -458,4 +458,24 @@ sub set_usertarif { return $ret; } +sub save_service_desc { + my $self = shift; + my $users_dms = shift; + my @keywords = $q->param; + + my @tpl_desc = (); + foreach(@keywords){ + my @val = $q->param($_); + my $valxx = $q->escapeHTML("@val"); + + if($_ =~ /txt\d/){ + print $_ . ":" . $valxx . "
\n"; + #@tpl_desc = $q->param($_); + } + } + #my $tpl_obj = join('=',@tpl_desc); + #print $tpl_obj . "
\n"; + +} + 1; diff --git a/copri4/main/src/Mod/Shareework.pm b/copri4/main/src/Mod/Shareework.pm index bfa28af..85c7628 100755 --- a/copri4/main/src/Mod/Shareework.pm +++ b/copri4/main/src/Mod/Shareework.pm @@ -781,16 +781,16 @@ sub send_password(){ } -#sigobike just like caching and not realy used by app -sub sigobike_cupdate { +#sigbike just like caching and not realy used by app +sub sigbike_cupdate { my $self = shift; - my $record_sigo = shift; + my $record_sig = shift; my $dbh = ""; my $rows = 0; - foreach my $bid (keys (%$record_sigo)){ + foreach my $bid (keys (%$record_sig)){ my $update = { - %{$record_sigo->{$bid}}, + %{$record_sig->{$bid}}, table => "content", template_id => "205", main_id => "300102", @@ -798,12 +798,12 @@ sub sigobike_cupdate { owner => "169", }; - $bw->log("UPDATE content from record_sigo with bike nr:",$update,""); - $rows = $dbt->update_record($dbh,$update,$record_sigo->{$bid}); + $bw->log("UPDATE content from record_sig with bike nr:",$update,""); + $rows = $dbt->update_record($dbh,$update,$record_sig->{$bid}); if($rows != 1){ my $c_id = ""; $update->{itime} = "now()"; - $bw->log("INSERT content from record_sigo with bike nr:",$update,""); + $bw->log("INSERT content from record_sig with bike nr:",$update,""); $c_id = $dbt->insert_contentoid($dbh,$update,""); $rows = 1 if($c_id); } @@ -812,16 +812,16 @@ sub sigobike_cupdate { } -#sigostation just like caching and not realy used by app -sub sigostation_cupdate { +#sigstation just like caching and not realy used by app +sub sigstation_cupdate { my $self = shift; - my $record_sigo = shift; + my $record_sig = shift; my $dbh = ""; my $rows = 0; - foreach my $sid (keys (%$record_sigo)){ + foreach my $sid (keys (%$record_sig)){ my $update = { - %{$record_sigo->{$sid}}, + %{$record_sig->{$sid}}, table => "content", template_id => "225", main_id => "300016", @@ -829,12 +829,12 @@ sub sigostation_cupdate { owner => "169", }; - $bw->log("UPDATE content from record_sigo with bike nr:",$update,""); - $rows = $dbt->update_record($dbh,$update,$record_sigo->{$sid}); + $bw->log("UPDATE content from record_sig with bike nr:",$update,""); + $rows = $dbt->update_record($dbh,$update,$record_sig->{$sid}); if($rows != 1){ my $c_id = ""; $update->{itime} = "now()"; - $bw->log("INSERT content from record_sigo with bike nr:",$update,""); + $bw->log("INSERT content from record_sig with bike nr:",$update,""); $c_id = $dbt->insert_contentoid($dbh,$update,""); $rows = 1 if($c_id); } diff --git a/copri4/main/src/Tpl/BaseEdit.pm b/copri4/main/src/Tpl/BaseEdit.pm index 833ab78..e70704d 100755 --- a/copri4/main/src/Tpl/BaseEdit.pm +++ b/copri4/main/src/Tpl/BaseEdit.pm @@ -55,9 +55,9 @@ sub tpl(){ my $u_id = $1 if($R::u_id && $R::u_id =~ /(\d+)/); $u_id = $1 if($R::c_idadr && $R::c_idadr =~ /(\d+)/ && $R::base_edit eq "new_dmsusers"); my ($edit,$copy_key,$save_key,$relate_key,$move_key,$delete_key,$package_key); - my $tpl; - my @tpl_order; - my $edit_template; + my $tpl = {}; + my @tpl_order = (); + my $edit_template = ""; my $bg_color = "grey"; my $ctrel = {}; if($node_meta->{ct_table} eq "content" && $node_meta->{tpl_id}){ @@ -258,26 +258,41 @@ EOF ; } + @tpl_order = split /,/,$tpl->{tpl_order}; #2. table content print $q->start_table({-border=>'0', -width=>'100%',-align=>'center', -cellpadding=>'3', -cellspacing=>'0'}); print "\n"; my $j=0; - @tpl_order = split /,/,$tpl->{tpl_order}; #2.1 sub-table print "\n"; print $q->start_table({-border=>'0', -width=>'100%',-align=>'center', -cellpadding=>'3', -cellspacing=>'0'}); - $j++; my @_service_valxx = ("","1","2","3","4"); foreach (@tpl_order){ - my ($key,$des,$size,$postdes) = split /=/,$_; - my $seldes = $des; - $des .= " ($key)" if($users_dms->{u_id} eq $varenv{superu_id}); + $j++; + if($tpl->{tpl_id} == 199){ + if($j==1){ + print $q->Tr(); + print $q->td({-class=>'content1_cms',-colspan=>3},$q->b("under development, $tpl->{tpl_name}")),"\n"; + } + my ($key,$tplkey,$des,$size,$service_interval,$service_type) = split /=/,$_; + $des = " ($key:$tplkey)" if($users_dms->{u_id} eq $varenv{superu_id}); + if($key =~ /txt\d/ && $tplkey =~ /int\d/){ + print $q->Tr(); + print $q->td({-class=>'content1_cms'},"Wartung $des",$q->textfield(-class=>'etxt', -style=>"width:15em;",-name=>"$key", -default=>"")),"\n"; + print $q->td({-class=>'content1_cms'},"Intervall",$q->textfield(-class=>'etxt', -style=>"width:2em;",-name=>"$key", -default=>""),"Tage"),"\n"; + print $q->td({-class=>'content1_cms'},$but->radiobox2("$key","$ctrel->{$key}","aus","weich","hart")),"\n"; - $ctrel->{$key} = $q->unescapeHTML("$ctrel->{$key}"); - $ctrel->{$key} = $lb->newline($ctrel->{$key},"",1); + } + }else{ + my ($key,$des,$size,$postdes) = split /=/,$_; + my $seldes = $des; + $des .= " ($key)" if($users_dms->{u_id} eq $varenv{superu_id}); + + $ctrel->{$key} = $q->unescapeHTML("$ctrel->{$key}"); + $ctrel->{$key} = $lb->newline($ctrel->{$key},"",1); if($key =~ /c_id|ct_name|barcode|txt/ && $size eq "readonly"){ print $q->Tr(); print $q->td({-class=>'left_italic_cms'},"$des"),"\n"; @@ -641,6 +656,7 @@ EOF $q->textfield(-class=>'etxt',-name=>"e_hh", -override=>'1',-default=>"$e_hh",-size=>"2",-maxlength=>2),":", $q->textfield(-class=>'etxt',-name=>"e_mi", -override=>'1',-default=>"$e_mi",-size=>"2",-maxlength=>2)),"\n"; } + }#end else } print $q->end_table; print "\n"; diff --git a/copri4/main/src/Tpl/Karte.pm b/copri4/main/src/Tpl/Karte.pm index 7d9d1b4..85e5af4 100755 --- a/copri4/main/src/Tpl/Karte.pm +++ b/copri4/main/src/Tpl/Karte.pm @@ -85,6 +85,7 @@ sub tpl(){ #setting to true to keeps lat,lng and zoom $preserve_view = "true" if($filesize < 200); + print $q->div({-class=>"content2_contact"},"Hier können Lastenfahrräder gemietet werden:"),"\n"; print "
\n"; print "
\n"; @@ -95,7 +96,7 @@ print<div({-style=>"position:absolute;margin-left:$daymarker;border-right: solid thin #86cb00;height:1.7em;"}," "),"\n";# if("$mon" eq "$mon_today"); my $calpath = "Mietjournal"; $calpath = "Alarmjournal" if($ct4rel->{$id}->{int13} == $cttpos->{$ctid}->{int13} && $cttpos->{$ctid}->{int10} == 7); - print $q->div({-style=>"position:static;margin-left:$day_stpx;width:$rent_day_px;background-color:$scale_color"},$q->a({-class=>"linknav3",-style=>"$time_style",-href=>"$varenv{wwwhost}/$calpath/?cttpos_id=$cttpos->{$ctid}->{c_id}",-title=>"Im $calpath öffnen"},"$hh_en:$mm_en")),"\n"; + print $q->div({-style=>"position:static;margin-left:$day_stpx;width:$rent_day_px;background-color:$scale_color"},$q->a({-class=>"linknav3",-style=>"$time_style",-href=>"$varenv{wwwhost}/DMS/$calpath/?cttpos_id=$cttpos->{$ctid}->{c_id}",-title=>"Im $calpath öffnen"},"$hh_en:$mm_en")),"\n"; print "\n"; print $q->Tr(); print $q->td({-style=>'padding-top:1px;'},""),"\n"; diff --git a/copri4/main/src/scripts/sig_client.pl b/copri4/main/src/scripts/sig_client.pl new file mode 100755 index 0000000..9877011 --- /dev/null +++ b/copri4/main/src/scripts/sig_client.pl @@ -0,0 +1,113 @@ +#!/usr/bin/perl +# +# SPDX-License-Identifier: AGPL-3.0-or-later +# Copyright (c) Rainer Gümpelein, TeilRad GmbH +# +# sudo su www-data -c "./src/scripts/sig_client.pl shareeapp-sx bikes_available" +# +# sudo su www-data -c "./src/scripts/sig_client.pl shareeapp-sx reserve 1842 '380116b5-0522-43da-ab66-477744a731a3'" +# sudo su www-data -c "./src/scripts/sig_client.pl shareeapp-sx rental 1842 '380116b5-0522-43da-ab66-477744a731a3'" +# +use vars qw($syshost); + +BEGIN { + $syshost = $ARGV[0] || die 'syshost not defined'; +} + +use lib "/var/www/copri-bike/$syshost/src"; +use strict; +use warnings; +use POSIX; +use CGI; +use Scalar::Util qw(looks_like_number); +use Mod::DBtank; +use Mod::APIsigclient; +use Data::Dumper; + +my $q = new CGI; +my $cf = new Config; +my $dbt = new DBtank; +my $si = new APIsigclient; +my $bw = new Basework; +my $lang = "de"; +my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime; +my %varenv = $cf->envonline(); +my $dbh = ""; + +my $todo = $ARGV[1] || ""; +my $user_id = $ARGV[2] || ""; +my $sig_bike_id = $ARGV[3] || ""; + + open(FILE,">>$varenv{logdir}/APIsigclient.log"); + print FILE "\n*** $now_dt 'sig_client fork with todo:$todo|user_id:$user_id|sig_bike_id:$sig_bike_id' \n"; + +#get user and bike in copri by id +my $apref = { + table => "contentadr", + fetch => "one", + template_id => "202", + c_id => "$user_id", + }; +my $ctadr = { c_id => 0 }; +$ctadr = $dbt->fetch_record($dbh,$apref) if($user_id =~ /^\d+$/ && $user_id > 0); + +my $ct_bike = { txt22 => "" }; + +my $posref = { + table => "contenttranspos", + fetch => "one", + ca_id => "$ctadr->{c_id}", + int10 => "IN::('3','2')", + txt22 => "$sig_bike_id", + }; +my $ctpos = { c_id => 0 }; +$ctpos = $dbt->fetch_tablerecord($dbh,$posref) if($user_id =~ /^\d+$/ && $user_id > 0 && $sig_bike_id); + +print FILE "fetched from DB ctadr:$ctadr->{c_id}|ctpos:$ctpos->{c_id}\n"; + +#only for tests +if($todo eq "stations_available"){ + $q->param(-name=>'request',-value=>"stations_available"); + $ctadr = { c_id => 0 }; + my $return = $si->sig_available($q,\%varenv,$ctadr); + #print $0 . Dumper($return) . "\n"; +} + +#only for tests +if($todo eq "bikes_available"){ + $q->param(-name=>'request',-value=>"bikes_available"); + #$ctadr = { c_id => 0 }; + my $return = $si->sig_available($q,\%varenv,$ctadr); + #print $0 . Dumper($return) . "\n"; +} + +#only for tests +elsif($todo eq "reserve"){ + #$ctadr = { c_id => 1842 }; + #$ct_bike = { txt22 => "380116b5-0522-43da-ab66-477744a731a3" }; + my $return = $si->sig_booking(\%varenv,$ctadr,$ct_bike,$ctpos,$todo); + #print $0 . Dumper($return) . "\n"; +} + +#used also live! to fork rental request with +elsif($todo eq "rental" && $ctadr->{c_id} > 0 && $ctpos->{txt22}){ + #$ctadr = { c_id => 1842 }; + #$ct_bike = { txt22 => "380116b5-0522-43da-ab66-477744a731a3" }; + my $return = $si->sig_booking(\%varenv,$ctadr,$ct_bike,$ctpos,$todo); + #print $0 . Dumper($return) . "\n"; +} + +#used also live! to fork rental_end request with "rentalId" +elsif($todo eq "rental_end" && $ctadr->{c_id} > 0 && $ctpos->{txt11}){ + my $return = $si->sig_booking(\%varenv,$ctadr,$ct_bike,$ctpos,$todo); + #print $0 . Dumper($return) . "\n"; +} + +else{ + print FILE "failure::sig_client request not defined: $todo && $ctadr->{c_id} > 0 && $ctpos->{txt22}\n"; + close(FILE); + exit 1; +} + +close(FILE); + diff --git a/copri4/main/src/scripts/sigo_client.pl b/copri4/main/src/scripts/sigo_client.pl deleted file mode 100755 index 74f9113..0000000 --- a/copri4/main/src/scripts/sigo_client.pl +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/perl -# -# SPDX-License-Identifier: AGPL-3.0-or-later -# Copyright (c) Rainer Gümpelein, TeilRad GmbH -# -# sudo su www-data -c "./src/scripts/sigo_client.pl shareeapp-sx available" -# -# sudo su www-data -c "./src/scripts/sigo_client.pl shareeapp-sx reserve" -# sudo su www-data -c "./src/scripts/sigo_client.pl shareeapp-sx rental" -# -use vars qw($syshost); - -BEGIN { - $syshost = $ARGV[0] || die 'syshost not defined'; -} - -use lib "/var/www/copri-bike/$syshost/src"; -use strict; -use warnings; -use POSIX; -use CGI; -use Mod::APIsigoclient; -use Data::Dumper; - -my $q = new CGI; -my $cf = new Config; -my $si = new APIsigoclient; -my $bw = new Basework; -my $lang = "de"; -my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime; - my %varenv = $cf->envonline(); - -my $todo = $ARGV[1]; - - -if($todo eq "available"){ - $q->param(-name=>'request',-value=>"bikes_available"); - my $auth = { c_id => 0 }; - my $return = $si->sigo_available($q,\%varenv,$auth); - #print $0 . Dumper($return) . "\n"; -} - -if($todo eq "reserve"){ - my $auth = { c_id => 1842 }; - my $bike = { txt22 => "380116b5-0522-43da-ab66-477744a731a3" };# bike 1150 - #my $bike = "SX1150";# bike 1150 from app booking_request - my $return = $si->sigo_booking(\%varenv,$auth,$bike,$todo); - #print $0 . Dumper($return) . "\n"; -} - -if($todo eq "rental"){ - my $auth = { c_id => 1842 }; - my $bike = { txt22 => "380116b5-0522-43da-ab66-477744a731a3" };# bike 1150 - #my $bike = "SX1150";# bike 1150 from app booking_request - my $return = $si->sigo_booking(\%varenv,$auth,$bike,$todo); - #print $0 . Dumper($return) . "\n"; -} - diff --git a/copri4/shareeapp-operator/src/Lib/Mlogic.pm b/copri4/shareeapp-operator/src/Lib/Mlogic.pm index ecae759..48151e3 100755 --- a/copri4/shareeapp-operator/src/Lib/Mlogic.pm +++ b/copri4/shareeapp-operator/src/Lib/Mlogic.pm @@ -43,9 +43,9 @@ sub tpl(){ my $coo = $q->cookie('domcookie') || $q->param('sessionid') || ""; #my $api_test = "sharee_kn"; - my $api_test = "sharee_fr01"; my $bike="FR1538"; + #my $api_test = "sharee_fr01"; my $bike="FR1538"; #my $api_test = "sharee_wue"; - #my $api_test = "sharee_sx"; my $bike="S3X1001"; + my $api_test = "sharee_sx"; my $bike="S3X1001"; #my $api_test = "sharee_ren"; my $bike="REN2"; print $q->div({-style=>'float:right;text-align:right;height:25px;padding:6px 15px;background-color:white'},$q->a({-style=>"background-color:#ffffff;color:#$bgcolor1;", -href=>"$varenv->{metahost}/src/scripts/tests/index.pl?sessionid=$coo\&api_test=$api_test\&bike=$bike", -target=>'_blank'}," [ tests --> $api_test ] "),"$users_sharee->{txt08}",$q->a({-style=>"color:#$bgcolor1;", -href=>"logout_sharee$session"},"logout")),"\n";