sigo api rental fork

This commit is contained in:
ragu 2022-05-11 08:05:35 +02:00
parent 0163c06893
commit dd9be5f40e
14 changed files with 283 additions and 161 deletions

View file

@ -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";

View file

@ -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);
}

View file

@ -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 <a href='$dbt->{operator}->{$varenv->{dbname}}->{operatorApp}/site/agb.html' target='_blank'>AGB</a> 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 <a href='$dbt->{operator}->{$varenv->{dbname}}->{operatorApp}/site/agb.html' target='_blank'>AGB</a> 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 <a href='$varenv->{wwwhost}/site/agb.html' target='_blank'>AGB</a> 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 <a href='$varenv->{wwwhost}/site/agb.html' target='_blank'>AGB</a> 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);

View file

@ -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);

View file

@ -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");
}

View file

@ -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);
}

View file

@ -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 . "<br>\n";
#@tpl_desc = $q->param($_);
}
}
#my $tpl_obj = join('=',@tpl_desc);
#print $tpl_obj . "<br> \n";
}
1;

View file

@ -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);
}

View file

@ -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 "<tr>\n";
my $j=0;
@tpl_order = split /,/,$tpl->{tpl_order};
#2.1 sub-table
print "<td style='border-bottom:1px solid silver;border-right:1px solid silver;vertical-align:top;padding:15px;'>\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 "</td>\n";

View file

@ -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 "<div style='background-color:#cccccc;width:100%;margin-top:1em;'>\n";
print "<div id='map' style='height:$mapheight'></div>\n";
@ -95,7 +96,7 @@ print<<EOF
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
scrollwheel: false,
draggable: !("ontouchend" in document),
//draggable: !("ontouchend" in document),
center: {lat: $lat, lng: $lng},
zoom: $map_zoom
});

View file

@ -1103,7 +1103,7 @@ sub tpl(){
#print $q->div({-style=>"position:absolute;margin-left:$daymarker;border-right: solid thin #86cb00;height:1.7em;"},"&nbsp;"),"\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 "</td>\n";
print $q->Tr();
print $q->td({-style=>'padding-top:1px;'},""),"\n";

View file

@ -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);

View file

@ -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";
}

View file

@ -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";