new rental editor

This commit is contained in:
ragu 2022-06-02 10:34:03 +02:00
parent 46f86f6c05
commit aceda57b50
23 changed files with 548 additions and 162 deletions

View file

@ -91,7 +91,6 @@ div#Container_cms {
.left_italic_cms {
min-width:140px;
padding:4px 0;
vertical-align: middle;
text-align: right;
border: 0px solid black;
}
@ -350,13 +349,11 @@ div#Oline {
.etxt {
font-size:100%;
border: 1px solid silver;
background-color: #ededed;
padding:1px;
margin:1px;
}
.etxt2 {
font-size:100%;
border: 0px solid #ededed;
margin:1px;
}
.stxt {
@ -386,7 +383,6 @@ div#Oline {
min-height: 2em;
min-width: 20em;
border: 0px solid silver;
background-color: #ededed;
}
.etxtarea2 {
min-height: 10em;
@ -639,15 +635,15 @@ div#botlogic {
div#retm {
position:fixed;
right:0%;
width:auto;
top:0%;
border:1px solid #007700;
padding:5px;
width:150px;
left:20%;
right:20%;
padding:4px;
color:black;
background-color:yellow;
background-color:#F3F34C;
cursor:pointer;
z-index:11;
z-index:1100;
}
div#savestate {
@ -729,6 +725,17 @@ div#Container_txt1 {
.sortnav:visited { color:black;}
.sortnav:hover { color:#dcd77f;}
.editboo {
font-size: 1.5em;
color: black;
padding:0 2px;
vertical-align:middle;
text-decoration: none;
}
.editboo:link {color:black;}
.editboo:visited { color:black;}
.editboo:hover { color:#dcd77f;}
.editnav {
color: black;
padding:0 2px;

View file

@ -53,9 +53,15 @@ sub handler {
my $debug=1;
my $user_agent = $q->user_agent();
$bw->log("APIjsonserver request:\n--> user-agent '$user_agent'",$q,"");
#my %headers = map { $_ => $q->http($_) } $q->http();
#$bw->log("headers:",\%headers,"");
$bw->log("APIjsonserver request:\n--> user-agent '$user_agent' ",$q,"");
print $q->header(-type => "application/json", -charset => "utf-8", -'Access-Control-Allow-Origin' => "*");
#for my $header ( keys %headers ) {
# print "$header: $headers{$header}\n";
#}
my $respreq = $q->param('request') || "";
my $apiserver = $q->url(-base=>1) || "";
@ -249,6 +255,7 @@ elsif($q->param('request') eq "booking_request"){
my $ct_tariff = {};
($ct_bike,$ct_tariff) = $apif->fetch_bike_tariff(\%varenv,$authraw,$bike,$aowner);
#sig booking_request
my $sig_book = {
bikeId => "$ct_bike->{txt22}",
rentalId => "",
@ -258,7 +265,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,$authraw,$ct_bike,"","reserve");
$sig_book = $si->sig_booking(\%varenv,"reserve",$authraw,$ct_bike,"");
$sig_book->{bikeId} = "$ct_bike->{txt22}";
}
$response_book = $apif->booking_request($q,\%varenv,$authraw,$bike,$ct_bike,$ct_tariff,$aowner,$gps,$sig_book);
@ -286,8 +293,8 @@ 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,$authraw,$ct_bike,$ctpos,"rental");
system("$varenv{basedir}/src/scripts/sig_client.pl $varenv{syshost} 'rental' $authraw->{c_id} $ctpos->{c_id} &");
#$sig_book = $si->sig_booking(\%varenv,"rental",$authraw,$ct_bike,$ctpos);
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{
@ -358,7 +365,7 @@ elsif($q->param('request') eq "booking_cancel" || $q->param('request') eq "booki
#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");
$sig_book = $si->sig_booking(\%varenv,"reserve_end",$authraw,"",$ctpos);
($rows, $booking_values) = $apif->booking_update($q,\%varenv,$authraw,$aowner,$sig_book);
}else{
($rows, $booking_values) = $apif->booking_update($q,\%varenv,$authraw,$aowner,"");
@ -370,12 +377,12 @@ elsif($q->param('request') eq "booking_cancel" || $q->param('request') eq "booki
if($ctpos->{int11} == 3){
if($q->param('state') eq "occupied"){
#$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} &");
#$sig_book = $si->sig_booking(\%varenv,"rental",$authraw,"",$ctpos);
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,$authraw,"",$ctpos,"rental_end");
system("$varenv{basedir}/src/scripts/sig_client.pl $varenv{syshost} 'rental_end' $authraw->{c_id} $ctpos->{c_id} &");
#$sig_book = $si->sig_booking(\%varenv,"rental_end",$authraw,"",$ctpos);
system("$varenv{basedir}/src/scripts/sig_client.pl $varenv{syshost} 'rental_end' $authraw->{c_id} '' $ctpos->{c_id} &");
}
($rows, $booking_values) = $apif->booking_update($q,\%varenv,$authraw,$aowner,$sig_book);

View file

@ -278,10 +278,10 @@ sub sig_available {
sub sig_booking {
my $self = shift;
my $varenv = shift || {};
my $todo = shift || "";
my $ctadr = shift || {};
my $ct_bike = shift || {};
my $ctpos = shift || {};
my $todo = shift || "";
my $dbh = "";
my $owner = 169;
@ -314,7 +314,8 @@ sub sig_booking {
#int10 state will be set on main booking_update
elsif($todo eq "rental"){
$endpoint .= "rental";
my $sig_bikeId = $ctpos->{txt22} || $ct_bike->{txt22};
#my $sig_bikeId = $ctpos->{txt22} || $ct_bike->{txt22};
my $sig_bikeId = "380116b5-0522-43da-ab66-477744a731a3";
%json = (
bikeId => "$sig_bikeId",
email => "$ctadr->{txt08}"
@ -329,6 +330,15 @@ sub sig_booking {
);
#keep in mind, it will return no json, just text: "Rental Ended"
}
#rentals running
#TODO, execute it before user_bikes_occupied
elsif($todo eq "rentals_running"){
$endpoint .= "rentals/running";
%json = (
email => "$ctadr->{txt08}"
);
}
else{
print "Failure, request $todo not defined\n";
@ -352,6 +362,9 @@ sub sig_booking {
#warn $@;
print FILE "warn:" . $@ . "\n";
}
#save always API return state for documentation
$sig_book->{return_state} = "$now_dt $todo: $ret_status";
}
if(ref($sig_book) ne "HASH"){
@ -387,7 +400,8 @@ sub sig_booking {
#}
$update_pos->{txt10} = "$sig_book->{reservationId}" if($sig_book->{reservationId});
$update_pos->{txt11} = "$sig_book->{rentalId}" if($sig_book->{rentalid});
$update_pos->{txt11} = "$sig_book->{rentalId}" if($sig_book->{rentalId});
$update_pos->{txt25} = "$ctpos->{txt25}\n$sig_book->{return_state}";# if($sig_book->{return_state});
$rows = $dbt->update_record($dbh,$update_pos,$ctpos);
print FILE "<--- rows: $rows, update_pos: $ctpos->{c_id}, with:" . Dumper($update_pos) . "\n";

View file

@ -58,5 +58,38 @@ sub log {
}
#return headline message
sub return_feedback(){
my $self = shift;
my $node_meta = shift;
my $users_dms = shift || {};
my $feedb = shift || {};
my $return = "";
if(ref($feedb) eq "HASH" && $feedb->{message}){
print<<EOF
<script>
\$(document).ready(function(){
\$( "#retm" ).fadeOut(8000);
})
</script>
EOF
;
my $debug = "";
$debug = $feedb->{debug} if($users_dms->{u_id} eq "1842");
if($feedb->{message} =~ /(failure::.*)/){
$return = $1;
}elsif($feedb->{message}){
print $q->div({-id=>'retm'},"$feedb->{message} $debug"),"\n";
}elsif($feedb->{u_rows}){
print $q->div({-id=>'retm'},"$feedb->{u_rows} $node_meta->{node_name} aktualisiert $debug"),"\n";
}
}
return $return;
}
1;

View file

@ -312,7 +312,7 @@ sub selector_class(){
push @selopt, "<option style='$des_style' value='$id'>$value</option>\n";
}
}
my $selret = "<select class='$class' style='$style' name='$column'>@selopt</select>\n";
my $selret = "<select class='$class' style='background-color:white;' name='$column'>@selopt</select>\n";
return $selret;
}

View file

@ -277,6 +277,7 @@ sub channel_map(){
my $self = shift;
my $channel = {
169 => "sig connector",
172 => "cron timeout",
173 => "merchant fallback",#mig
175 => "example App",#mig
176 => "Mein konrad App",#mig
@ -532,13 +533,12 @@ sub select_worktime {
sub collect_contentpos(){
my $self = shift;
my $dbh = shift || $dbh_intern;
my ($table,$c_id) = @_;
my $tb = "contenttrans";
my $tbpos = "contenttranspos";
my $where = "where ctt.c_id=pos.ct_id and ctt.c_id='$c_id'";
my $table = shift;
my $ct_id = shift || "";
my $where = "where ctt.c_id=pos.ct_id and ctt.c_id='$ct_id'";
if($c_id){
my $sth = $dbh->prepare("SELECT pos.* FROM $tbpos pos, $tb ctt $where");
if($ct_id){
my $sth = $dbh->prepare("SELECT pos.* FROM contenttranspos pos, contenttrans ctt $where");
my $rc = $sth->execute();
my $cpos = $sth->fetchall_hashref("c_id");
my $rows = $sth->rows;
@ -633,21 +633,20 @@ sub collect_post(){
}
}
my $sth;
my $sql;
my $sth = "";
my $sql = "";
my $limit = "";
$limit = "LIMIT $count" if(looks_like_number($count));
if($fetch->{catch} && $fetch->{catch} eq "content_contentpos"){
$sql = "SELECT cp.* from $fetch->{table_pos} cp, $fetch->{table} ct where $ctcp_where and $cp_where and $ct_where order by cp.mtime DESC $limit";
$sth = $dbh->prepare($sql);
#+3
}else{
#adapated from search_content3 to get Category-Menue
$sql = "SELECT cp.* FROM $fetch->{table_pos} cp WHERE $cp_where and $poscid IN (SELECT ct.c_id FROM relation rel, $fetch->{table} ct WHERE rel.content_id=ct.c_id and $ct_where) order by cp.mtime ASC";#mtime aufsteigend get last (newest) entry
#rental pos with capture booking ct.state
$sql = "SELECT cp.*, ct.state FROM $fetch->{table_pos} cp, $fetch->{table} ct WHERE $cp_where and $poscid IN (SELECT ct.c_id FROM relation rel, $fetch->{table} ct WHERE rel.content_id=ct.c_id and $ct_where) order by cp.mtime ASC";#mtime aufsteigend get last (newest) entry
$sth = $dbh->prepare($sql);
}
my $rc = $sth->execute();
$bw->log("DBtank collect_post $source",$sql,"") if($debug);
my $rc = $sth->execute();
my $record = { c_id => 0 };
if($fetch->{fetch} eq "all" && $fetch->{keyfield}){

View file

@ -380,6 +380,10 @@ sub handler {
$return = "failure::Abbruch. Schreibender Zugriff \"Faktura\" verweigert.";
}
}
if($node_meta->{ct_table} eq "contenttranspos" && $R::base_edit eq "save_pos"){
$return = $pl->save_contenttranspos($R::c_id,$users_dms->{u_id});
}
$users_dms = $dbt->select_users($dbh,$users_dms->{u_id},"");#just to get update after save
#none DMS hosts ----------------------------------------------------
@ -656,7 +660,6 @@ sub handler {
###
}
my $nodev = $db->get_node("$view_post","$lang");
#Printpreview
if($view =~ /Printpreview/){
require "Mod/Printpreview.pm";
@ -669,13 +672,6 @@ sub handler {
exit 0;
}
#else global REDIRECT. Availability check for redirect
#elsif(!$nodev->{main_id} || ($nodev->{main_id} == 100 && $R::rel_edit eq "save_content")){
#print redirect("$varenv{wwwhost}$session");
#exit 0;
#}
#CSVout
if($R::rel_edit && $R::rel_edit =~ /XLSout/){
$users_dms = $dbt->select_users($dbh,$users_dms->{u_id});
@ -737,6 +733,7 @@ sub handler {
\$( '#datepicker1' ).datepicker({ dateFormat: 'dd.mm.yy', dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'], monthNames: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember']});
\$( '#datepicker2' ).datepicker({ dateFormat: 'dd.mm.yy', dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'], monthNames: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember']});
\$( '#datepicker3' ).datepicker({ dateFormat: 'dd.mm.yy', dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'], monthNames: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember']});
\$( '#datepicker4' ).datepicker({ dateFormat: 'dd.mm.yy', dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'], monthNames: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember']});
});";
}

View file

@ -44,6 +44,7 @@ sub mobox3(){
$title = "Kunden Editor" if($node_meta->{ct_table} eq "contentadr");
$title = "DMS-Account Zugriffsberechtigung" if($node_meta->{ct_table} eq "users");
$title = "Service Editor" if($node_meta->{ct_table} eq "contentpos");
$title = "Rental Editor" if($node_meta->{ct_table} eq "contenttranspos");
my $height = $node_meta->{tpl_height} || "990";
my $width = $node_meta->{tpl_width} || "990";

View file

@ -13,6 +13,8 @@ use File::Path qw(make_path remove_tree);
use CGI ':standard';
use CGI::Carp qw(fatalsToBrowser);
use Scalar::Util qw(looks_like_number);
use DateTime;
use DateTime::Format::Pg;
use Lib::Config;
use Mod::Libenzdb;
@ -20,6 +22,7 @@ use Mod::Libenz;
use Mod::DBtank;
use Mod::Basework;
use Mod::APIfunc;
use Mod::Pricing;
use Data::Dumper;
my $cf = new Config;
@ -28,6 +31,7 @@ my $lb = new Libenz;
my $dbt = new DBtank;
my $bw = new Basework;
my $apif = new APIfunc;
my $pri = new Pricing;
my $q = new CGI;
sub new {
@ -46,6 +50,151 @@ my %varenv = $cf->envonline();
my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime;
my $debug=1;
sub save_contenttranspos {
my $self = shift;
my $c_id = shift;
my $owner = shift;
my $dbh = "";
my $feedb = { message => "" };
if($c_id && $R::start_date =~ /\d{1,2}\.\d{1,2}\.\d{4}/ && $R::end_date =~ /\d{1,2}\.\d{1,2}\.\d{4}/){
my $s_hh = $q->escapeHTML("$R::s_hh") || "0";
my $s_mi = $q->escapeHTML("$R::s_mi") || "0";
my $e_hh = $q->escapeHTML("$R::e_hh") || "0";
my $e_mi = $q->escapeHTML("$R::e_mi") || "0";
$s_hh = "24" if($s_hh > "24");
$e_hh = "24" if($e_hh > "24");
$s_mi = "59" if($s_mi > "59");
$e_mi = "59" if($e_mi > "59");
$s_hh = sprintf('%.2d',$s_hh);
$e_hh = sprintf('%.2d',$e_hh);
$s_mi = sprintf('%.2d',$s_mi);
$e_mi = sprintf('%.2d',$e_mi);
my $start_time="";
my $end_time="";
my $dtnow = DateTime->now( time_zone => "Europe/Berlin" );
my $dt0 = DateTime->now( time_zone => "Europe/Berlin" );
my $dt1 = DateTime->now( time_zone => "Europe/Berlin" );
if($R::start_date =~ /(\d{1,2})\.(\d{1,2})\.(\d{4})/){
$dt0 = DateTime->new(
year => $3,
month => $2,
day => $1,
hour => $s_hh,
minute => $s_mi,
time_zone => 'Europe/Berlin',
);
$start_time = $dt0->strftime("%Y-%m-%d %H:%M:%S");
#print $start_time;
}
if($R::end_date =~ /(\d{1,2})\.(\d{1,2})\.(\d{4})/){
$dt1 = DateTime->new(
year => $3,
month => $2,
day => $1,
hour => $e_hh,
minute => $e_mi,
time_zone => 'Europe/Berlin',
);
$end_time = $dt1->strftime("%Y-%m-%d %H:%M:%S");
}
if($c_id && $start_time && $end_time && $dt0 < $dtnow && $dt1 < $dtnow){
my $pref = {
table => "contenttrans",
table_pos => "contenttranspos",
fetch => "one",
template_id => "218",#Mietjournal tpl_id
c_id => $c_id,
"ct.close_time" => "is::null",
};
my $record_pos = {};
$record_pos = $dbt->collect_post($dbh,$pref);
my $pricing = {};
my $counting = {};
my $update_pos = {
table => "contenttranspos",
start_time => "$start_time",
end_time => "$end_time",
owner_end => $owner,
mtime => "now()",
};
$u_rows += $dbt->update_record($dbh,$update_pos,$record_pos);
#again to get setted date-times
$record_pos = $dbt->collect_post($dbh,$pref);
($pricing,$counting) = $pri->counting_rental(\%varenv,$record_pos,"calc_price");
$update_pos->{int38} = "$counting->{int38}" if(looks_like_number($counting->{int38}));
$update_pos->{int39} = "$counting->{int39}" if(looks_like_number($counting->{int39}));
$update_pos->{int40} = "$counting->{int40}" if(looks_like_number($counting->{int40}));
$update_pos->{int41} = "$counting->{int41}" if(looks_like_number($counting->{int41}));
$update_pos->{int10} = $R::int10 if(looks_like_number($R::int10));
$update_pos->{int20} = $R::int20 if(looks_like_number($R::int20));
$update_pos->{int04} = $R::int04 if(looks_like_number($R::int04));
#before update bike content check if realy last rental
my $pref2ck = {
table => "contenttrans",
table_pos => "contenttranspos",
fetch => "one",
template_id => "218",#Mietjournal tpl_id
start_time => ">::$end_time",
"ct.close_time" => "is::null",
};
my $record_pos2ck = { c_id => 0 };
$record_pos2ck = $dbt->collect_post($dbh,$pref2ck);
#update bike content only if there is no later rental start
if($record_pos->{cc_id} && !$record_pos2ck->{c_id}){
my $ctpref = {
table => "content",
fetch => "one",
c_id => $record_pos->{cc_id},
};
my $ctbike = $dbt->fetch_tablerecord($dbh,$ctpref);
$ctpref->{int10} = $R::int10 if(looks_like_number($R::int10));
$ctpref->{int20} = $R::int20 if(looks_like_number($R::int20));
$ctpref->{int04} = $R::int04 if(looks_like_number($R::int04));
$ctpref->{owner} = $owner;
$ctpref->{mtime} = "now()";
$u_rows += $dbt->update_record($dbh,$ctpref,$ctbike);
$feedb->{message} = "Mietdaten gespeichert und Mietrad Stati in Warenstamm übernommen";
}else{
$feedb->{message} = "Mietdaten gespeichert. Achtung, Mietrad Stati in Warenstamm NICHT übernommen, da es sich nicht um die letzte Miete handelt";
}
$u_rows += $dbt->update_record($dbh,$update_pos,$record_pos);
#
if($record_pos->{ct_id}){
my $ctpref = {
table => "contenttrans",
c_id => $record_pos->{ct_id},
start_time => "$start_time",
end_time => "$end_time",
owner => $owner,
mtime => "now()",
};
$u_rows += $dbt->update_record($dbh,$ctpref,$ctpref);
}
}
}else{
$feedb->{message} = "failure::Fehler, falsche Zeitangaben oder Datensatz nicht gefunden!";
}
$feedb->{u_rows} = $u_rows;
return $feedb;
}#end save_contenttranspos
#set Faktura workflow like Rechnung to Storno
sub set_workflow {
@ -440,6 +589,7 @@ sub set_usertarif {
if(@new_txt30){
print FILE "-3-> txt30: @new_txt30\n" if($debug);
$u_rows = $dbt->update_one($dbh_operator,$adr_bonus,"txt30='@new_txt30'");
$u_rows = $dbt->update_one($dbh_operator,$adr_bonus,"txt15='$adr_bonus->{txt15}'");
}
$ret = "failure::txt30#top2" if(!$adr_bonus->{txt30_array} || $adr_bonus->{txt30_array} !~ /\d/);
}

View file

@ -363,7 +363,7 @@ sub preinit(){
($pricing,$counting) = $pri->counting_rental(\%varenv,$record_pos,"calc_price");
#int03 only used for tarif counting backwards compatibility
$update_pos->{int03} = "$pricing->{computed_hours}" if(looks_like_number($pricing->{computed_hours}));
#$update_pos->{int03} = "$pricing->{computed_hours}" if(looks_like_number($pricing->{computed_hours}));
$update_pos->{int38} = "$counting->{int38}" if(looks_like_number($counting->{int38}));
$update_pos->{int39} = "$counting->{int39}" if(looks_like_number($counting->{int39}));
$update_pos->{int40} = "$counting->{int40}" if(looks_like_number($counting->{int40}));

View file

@ -62,7 +62,7 @@ sub only_first_free(){
int10 => "IN::('1','6')",
"ct.close_time" => "is::null",
};
$pref = { %$pref, time_range => "start_time >= '$ctpos->{start_time}' and start_time < '$ctpos->{end_time}' and start_time != end_time" };
$pref = { %$pref, time_range => "cp.start_time >= '$ctpos->{start_time}' and cp.start_time < '$ctpos->{end_time}' and cp.start_time != cp.end_time" };
my $record = $dbt->collect_post($dbh,$pref);
return $record;

View file

@ -269,7 +269,8 @@ sub save_account(){
$valxx = "KN-$valappend";
print FILE "Prepare SWK Bonusnr by prefix $valxx" . "\n" if($debug);
}
if($valxx && ($valxx =~ /^(\w{2,3})-(\w+)/ || $valxx =~ /^(\w{2,3})(\d+)/)){
#Freischaltcode format can be "CA-Li-hsze789k" or "CA1234567"
if($valxx && ($valxx =~ /^(\w{2,3})-([\w\-]+)/i || $valxx =~ /^(\w{2,3})(\d+)/)){
$valxx =~ s/\s//g;
my $bonus_prefix = uc($1),
my $bonusnr = $2;

View file

@ -19,6 +19,7 @@ use Mod::Libenzdb;
use Mod::Basework;
use Mod::DBtank;
use Mod::APIfunc;
use Mod::Pricing;
use Data::Dumper;
sub new {
@ -42,6 +43,7 @@ sub tpl(){
my $bw = new Basework;
my $dbt = new DBtank;
my $apif = new APIfunc;
my $pri = new Pricing;
my $but = new Buttons;
my %ib = $but->ibuttons();
@ -60,6 +62,13 @@ sub tpl(){
my $edit_template = "";
my $bg_color = "grey";
my $ctrel = {};
my $cttpos = {};
my $gesamt = 0;
my $pricing = {};
my $counting = {};
my $rental_feed = {};
my $occupied_style = "";
if($node_meta->{ct_table} eq "content" && $node_meta->{tpl_id}){
my $ref = {
table => "$node_meta->{ct_table}",
@ -125,18 +134,54 @@ sub tpl(){
$edit = "rel_edit";
$save_key = "save_ctuser";
$tpl = $db->get_tpl($node_meta->{tpl_id});
}elsif($node_meta->{ct_table} eq "contenttranspos" && $node_meta->{tpl_id} == 221){
my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime;
my $pref = {
table => "contenttrans",
table_pos => "contenttranspos",
fetch => "one",
c_id => $c_id,
};
print $q->hidden(-name=>'c_id',-override=>'1', -value=>"$c_id");
$cttpos = $dbt->collect_post($dbh,$pref);
$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);
($pricing,$counting) = $pri->counting_rental(\%varenv,$cttpos,"calc_price");
$rental_feed = $pri->fetch_rentalfeed(\%varenv,$cttpos,$counting);
$gesamt = $pri->round($pricing->{total_price});
$gesamt = sprintf('%.2f', $gesamt);
}else{
($gesamt,my $rabatt) = $pri->price2calc($cttpos);
$gesamt = $pri->round($gesamt);
$gesamt = sprintf('%.2f', $gesamt);
}
$bg_color = $varenv{background_color2};
$edit = "base_edit";
$save_key = "save_pos";
$tpl = $db->get_tpl($node_meta->{tpl_id});
}else{
print $q->div("Es konnten keine Daten gefunden werden"),"\n";
return "failure::Error, no table selected";
}
my $u_name = $dbt->sys_username($dbh,$ctrel->{owner});
if(ref($ctrel) ne "HASH" && !$ctrel->{c_id} && !$ctrel->{u_id}){
print $q->div("error: no content available");
}
#if(ref($ctrel) ne "HASH" && !$ctrel->{c_id} && !$ctrel->{u_id}){
# print $q->div("error: no content available");
#}
$ctrel->{mtime} = $lb->time4de($ctrel->{mtime},"1") if($ctrel->{mtime});
my $u_name = "";
my $dbmtime = "";
my $dbowner = $ctrel->{owner} || $cttpos->{owner_end} || "";
my $dbmtime = $ctrel->{mtime} || $cttpos->{mtime} || "";
$u_name = $dbt->sys_username($dbh,$dbowner);
$dbmtime = $lb->time4de($dbmtime,"1") if($dbmtime);
my $selsize="200px";
#$db->users_up("rel_id4edit",$ctrel->{rel_id},$users_dms->{u_id});
@ -147,23 +192,6 @@ sub tpl(){
print $q->hidden(-name=>'limit', -override=>'1', -value=>"$R::limit");
print $q->hidden(-name=>'relids', -override=>'1', -value=>"$R::relids");
my ($start_date,$start_time,$s_dd,$s_mo,$s_yy,$s_hh,$s_mi,$end_date,$end_time,$e_yy,$e_mo,$e_dd,$e_hh,$e_mi);
my $today = strftime("%d.%m.%Y",localtime(time));
my $start_datetime = $ctrel->{start_time};
my $end_datetime = $ctrel->{end_time};
if($start_datetime){
($start_date,$start_time) = split(/ /,$start_datetime);
($s_yy,$s_mo,$s_dd) = split(/-/,$start_date);
$start_date = "$s_dd-$s_mo-$s_yy";
($s_hh,$s_mi) = split(/\:/,$start_time);
}
if($end_datetime){
($end_date,$end_time) = split(/ /,$end_datetime);
($e_yy,$e_mo,$e_dd) = split(/-/,$end_date);
$end_date = "$e_dd-$e_mo-$e_yy";
($e_hh,$e_mi) = split(/\:/,$end_time);
}
###
my $bike_nodes = {};
@ -187,11 +215,11 @@ sub tpl(){
print $but->singlesubmit7("rel_edit","$relate_key","$ib{$relate_key}","margin:0 5px;");
print $but->singlesubmit7("rel_edit","$move_key","$ib{$move_key}","margin:0 5px;");
print $but->singlesubmit7("rel_edit","$copy_key","$ib{$copy_key}","margin:0 5px;");
print $but->singlesubmit7("$edit","remove_chk4rel","$ib{remove_chk4rel}","margin:0 5px;") if($node_meta->{tpl_id} != 199);
print $but->singlesubmit7("$edit","remove_chk4rel","$ib{remove_chk4rel}","margin:0 5px;") if($node_meta->{tpl_id} !~ /199|221/);
#print $q->div({-style=>'position:fixed;bottom:2%;right:1%;z-index:10;font-size:13px;'}," (c_id: $ctrel->{c_id} | rel_id: $ctrel->{rel_id} | tpl_id: $ctrel->{template_id} / $edit_template)"),"\n" if($users_dms->{u_id} eq $varenv{superu_id});
print "</td>\n";
print $q->td({-style=>"background-color:$bg_color;padding-right:10px;border-bottom: 1px solid silver;text-align:right;font-size:11px;"}, "$u_name / $ctrel->{mtime}");
print $q->td({-style=>"background-color:$bg_color;padding-right:10px;border-bottom: 1px solid silver;text-align:right;font-size:11px;"}, "$u_name / $dbmtime");
print $q->end_table;
@ -272,14 +300,138 @@ EOF
foreach (@tpl_order){
#Mietjournal edit
if($node_meta->{ct_table} eq "contenttranspos" && $node_meta->{tpl_id} == 221){
my ($key,$des,$size,$postdes) = split /=/,$_;
if($key =~ /c_id|ct_name|txt08|barcode/){
print $q->Tr(),"\n";
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms'}, $q->b("$cttpos->{$key}")),"\n";
}elsif($key =~ /txt01/){
print $q->Tr(),"\n";
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
if($cttpos->{int09} && $cttpos->{$key} !~ /Manuell/){
$cttpos->{$key} .= "\nManuell bearbeitet\n";
}
print "<td class='content1_cms' style='$occupied_style;'\n>";
print $q->textarea(-class=>'autos',-style=>"border: 1px solid #ededed;",-name=>"$key",-default=>"$cttpos->{$key}", -override=>'1',-rows=>"1",-cols=>45, -autofocus=>1),"<br />\n";
print "</td>\n";
#if Traiff Nr.
}elsif($key eq "int09"){
print $q->Tr(),"\n";
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms'}, $q->textfield(-class=>'etxt',-name=>"int09",-default=>"$cttpos->{int09}",-size=>"5",-maxlength=>5), "Text", $q->textfield(-class=>'etxt',-name=>"txt04",-default=>"$cttpos->{txt04}",-size=>"30",-maxlength=>50)),"\n";
#Endstation
}elsif($key eq "int04"){
print $q->Tr(),"\n";
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms'}, $q->textfield(-class=>'etxt',-name=>"int04",-default=>"$cttpos->{int04}",-size=>"5",-maxlength=>40)),"\n";
#End GPS
}elsif($key eq "txt06"){
print $q->Tr(),"\n";
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
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});
print $q->Tr(),"\n";
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms'},
$q->textfield(-id=>'datepicker3',-class=>'etxt',-name=>"start_date",-default=>"$s_dd.$s_mo.$s_yy",-size=>"8",-maxlength=>10),
$q->textfield(-class=>'etxt',-name=>"s_hh",-default=>"$s_hh",-size=>"1",-maxlength=>2),":",
$q->textfield(-class=>'etxt',-name=>"s_mi",-default=>"$s_mi",-size=>"1",-maxlength=>2)," &rarr; ",
$q->textfield(-id=>'datepicker4',-class=>'etxt',-name=>"end_date",-default=>"$e_dd.$e_mo.$e_yy",-size=>"8",-maxlength=>10),
$q->textfield(-class=>'etxt',-name=>"e_hh",-default=>"$e_hh",-size=>"1",-maxlength=>2),":",
$q->textfield(-class=>'etxt',-name=>"e_mi",-default=>"$e_mi",-size=>"1",-maxlength=>2)),"\n";
}elsif($key =~ /int10/ && "$size" eq "select"){#bike_state
my @_lock_valxx = ();
foreach my $s_key (sort keys (%{ $dbt->{copri_conf}->{bike_state} })) {
push @_lock_valxx, "$s_key:$dbt->{copri_conf}->{bike_state}->{$s_key}";
}
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector_class("$key","eselect","",$cttpos->{$key},@_lock_valxx));
}elsif($key =~ /int20/ && "$size" eq "select"){#lock_state locked/unlocked
my @_lock_valxx = ();
foreach my $s_key (sort keys (%{ $dbt->{copri_conf}->{lock_state} })) {
push @_lock_valxx, "$s_key:$dbt->{copri_conf}->{lock_state}->{$s_key}";
}
my $sys_comment = "";
$sys_comment = "Realer Schliesszustand kann nur am Mietrad gesteuert werden!" if($cttpos->{int11} == 2);
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector_class("$key","eselect","",$cttpos->{$key},@_lock_valxx),"$sys_comment");
}elsif($key eq "int26"){
if($cttpos->{int26}){
print $q->Tr(),"\n";
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
my $co2saving = "";
my $co2diff = $pri->co2calc($cttpos);
my $sprit_price = $pri->sprit2calc($cttpos);
$co2saving .= "$co2diff kg CO&sup2;<br />";
$co2saving .= "$sprit_price EUR<br />";
$cttpos->{int26} =~ s/\./,/;
$co2saving .= "bei $cttpos->{int26} KM";
print $q->td({-class=>'content1_cms'},"$co2saving");
}
}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}){
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";
}
}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}){
print "<td class='content1_cms' nowrap>\n";
foreach my $fid (sort keys(%{ $rental_feed->{rental_description}->{tarif_elements} })){
if(ref($rental_feed->{rental_description}->{tarif_elements}->{$fid}) eq "ARRAY"){
print "$rental_feed->{rental_description}->{tarif_elements}->{$fid}[0]: $rental_feed->{rental_description}->{tarif_elements}->{$fid}[1]<br />\n";
}
}
print "</td>\n";
}else{
print $q->td({-class=>'content1_cms',-style=>""},$q->textfield(-class=>'etxt',-name=>"$key",-default=>"$cttpos->{$key}", -override=>'1',-size=>"$size",-maxlength=>100),"\n");
}
}elsif($key =~ /int07/){
print $q->Tr(),"\n";
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-style=>"",-nowrap=>'1'},$q->textfield(-class=>'etxt',-name=>"$key",-default=>"$cttpos->{$key}", -override=>'1',-size=>"$size",-maxlength=>100),$but->selector("int08","40px","$cttpos->{int08}",("0.00:%","1.00:€"))),"\n";
}elsif($key =~ /int01/){
print $q->Tr(),"\n";
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-nowrap=>"1"},"$gesamt €");
}elsif($key =~ /txt/){
print $q->Tr(),"\n";
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms'},$q->textfield(-class=>'etxt',-name=>"$key",-default=>"$cttpos->{$key}", -override=>'1',-size=>"$size",-maxlength=>100)),"\n";
}elsif($key =~ /int/){
print $q->Tr(),"\n";
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-nowrap=>"1"},"&nbsp;\n");
}
}#end edit position
#service-config
if($tpl->{tpl_id} == 199){
elsif($node_meta->{ct_table} eq "contentuser" && $node_meta->{tpl_id} == 199){
my ($key,$tplkey,$des,$size,$service_interval,$service_type) = split /=/,$_;
$ctrel->{$key} = $q->unescapeHTML("$ctrel->{$key}");
$ctrel->{$key} = $lb->newline($ctrel->{$key},"",1);
if($key =~ /ct_name/){
print $q->Tr();
print $q->Tr(),"\n";
print $q->td({-class=>'content1_cms',-colspan=>3},$q->b("$ctrel->{ct_name}")),"\n";
}
elsif($key =~ /txt\d/ && $tplkey =~ /int\d/){
@ -292,7 +444,7 @@ EOF
my $desc_intervall = "";
my $desc_type = "";
($desc_key,$desc_name,$desc_size,$desc_intervall,$desc_type) = split(/=/,$ctrel->{$key});
print $q->Tr();
print $q->Tr(),"\n";
print $q->hidden(-name=>"$key",-override=>1,-value=>"$tplkey"),"\n";
print $q->td({-class=>'content1_cms'},"$desc_num",$q->textfield(-class=>'etxt', -style=>"width:15em;",-name=>"$key", -default=>"$desc_name")),"\n";
print $q->hidden(-name=>"$key",-override=>1,-value=>"checkbox"),"\n";
@ -310,7 +462,7 @@ EOF
if($key =~ /c_id|ct_name|barcode|txt/ && $size eq "readonly"){
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>2},$q->textfield(-class=>'etxt', -style=>"width:15em;",-name=>"$key", -default=>"$ctrel->{$key}", -readonly=>1)),"\n";
print $q->td({-class=>'content1_cms',-colspan=>2},$q->textfield(-class=>'etxt', -style=>"color:grey;",-name=>"$key", -default=>"$ctrel->{$key}", -readonly=>1)),"\n";
}elsif($key eq "u_id" && $size eq "readonly"){
my $adref = {
table => "contentadr",
@ -402,7 +554,7 @@ EOF
elsif($key =~ /int21|int22/ && "$size" eq "select" && $node_meta->{tpl_id} == 228){#Bonus Tarif
my @_valxx = ("");
foreach my $rid (sort { $tariff_all->{$a}->{barcode} <=> $tariff_all->{$b}->{barcode} } keys (%$tariff_all)){
push (@_valxx, "$tariff_all->{$rid}->{barcode}:$tariff_all->{$rid}->{barcode} - $tariff_all->{$rid}->{txt01}");
push (@_valxx, "$tariff_all->{$rid}->{barcode}:$tariff_all->{$rid}->{barcode} - $tariff_all->{$rid}->{ct_name}");
}
print $q->Tr();
print $q->td({-class=>'left_italic_cms',-colspan=>'1'},"$des");
@ -410,8 +562,8 @@ EOF
}
elsif($key =~ /int10/ && "$size" eq "select" && $node_meta->{tpl_id} == 205){#bike_state
my @_lock_valxx = ();
while (my ($key, $value) = each %{ $dbt->{copri_conf}->{bike_state} }) {
push @_lock_valxx, "$key:$value";#[1:available] ...
foreach my $s_key (sort keys (%{ $dbt->{copri_conf}->{bike_state} })) {
push @_lock_valxx, "$s_key:$dbt->{copri_conf}->{bike_state}->{$s_key}";
}
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
@ -419,8 +571,8 @@ EOF
}
elsif($key =~ /int10/ && "$size" eq "select" && $node_meta->{tpl_id} == 225){#station_state
my @_lock_valxx = ();
while (my ($key, $value) = each %{ $dbt->{copri_conf}->{station_state} }) {
push @_lock_valxx, "$key:$value";#[1:available] ...
foreach my $s_key (sort keys (%{ $dbt->{copri_conf}->{station_state} })) {
push @_lock_valxx, "$s_key:$dbt->{copri_conf}->{station_state}->{$s_key}";
}
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
@ -429,8 +581,8 @@ EOF
elsif($key =~ /int18/ && "$size" eq "select" && $node_meta->{tpl_id} == 210){#sharing_type
my @_lock_valxx = ();
while (my ($key, $value) = each %{ $dbt->{copri_conf}->{sharing_type} }) {
push @_lock_valxx, "$key:$value";#[0:private] ...
foreach my $s_key (sort keys (%{ $dbt->{copri_conf}->{sharing_type} })) {
push @_lock_valxx, "$s_key:$dbt->{copri_conf}->{sharing_type}->{$s_key}";
}
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
@ -438,42 +590,34 @@ EOF
}
elsif($key =~ /int20/ && "$size" eq "select" && $node_meta->{tpl_id} == 205){#lock_state locked/unlocked
my @_lock_valxx = ();
while (my ($key, $value) = each %{ $dbt->{copri_conf}->{lock_state} }) {
push @_lock_valxx, "$key:$value";#[2:unlocked]
foreach my $s_key (sort keys (%{ $dbt->{copri_conf}->{lock_state} })) {
push @_lock_valxx, "$s_key:$dbt->{copri_conf}->{lock_state}->{$s_key}";
}
my $sys_comment = "";
$sys_comment = "Realer Schliesszustand kann nur am Mietrad gesteuert werden!" if($ctrel->{int11} == 2);
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector_class("$key","eselect","",$ctrel->{$key},@_lock_valxx));
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector_class("$key","eselect","",$ctrel->{$key},@_lock_valxx),"$sys_comment");
}
elsif($key =~ /int11/ && "$size" eq "select" && $node_meta->{tpl_id} == 205){#lock_system BC Ilockit usw
my @_lock_valxx = ();
while (my ($key, $value) = each %{ $dbt->{copri_conf}->{lock_system} }) {
push @_lock_valxx, "$key:$value";#[2:Ilockit]
foreach my $s_key (sort keys (%{ $dbt->{copri_conf}->{lock_system} })) {
push @_lock_valxx, "$s_key:$dbt->{copri_conf}->{lock_system}->{$s_key}";
}
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector_class("$key","eselect","",$ctrel->{$key},@_lock_valxx));
}
#changed to time01
elsif(1==2 && $key =~ /int01/ && "$size" eq "select" && $node_meta->{tpl_id} == 210){#tariff_unit
my @_unit_valxx = ();
while (my ($key, $value) = each %{ $dbt->{copri_conf}->{tariff_unit} }) {
push @_unit_valxx, "$key:$value";#[0.5:0,5 Std]
}
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector_class("$key","eselect","",$ctrel->{$key},@_unit_valxx));
}
elsif($key =~ /int/ && "$size" eq "select"){
my @_valxx;
my $selsize="50px";
#elsif($key =~ /int/ && "$size" eq "select"){
# my @_valxx;
# my $selsize="50px";
@_valxx = split(/\|/,$varenv{$seldes});
$ctrel->{$key} =~ s/\.00//;
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector("$key","$selsize",$ctrel->{$key},@_valxx));
}
# @_valxx = split(/\|/,$varenv{$seldes});
# $ctrel->{$key} =~ s/\.00//;
# print $q->Tr();
# print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
# print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector("$key","$selsize",$ctrel->{$key},@_valxx));
#}
elsif($key =~ /int/){
my $w = $size . "em";
print $q->Tr();
@ -575,7 +719,7 @@ EOF
my $h= 1;# if($size =~ /area(\d+)/);
print $q->Tr();
print $q->td({-class=>'left_italic_cms',-colspan=>1},"$des"),"\n";
print $q->td({-class=>'content1_cms', -colspan=>'3'},$q->textarea(-class=>"autos", -style=>'border: 1px solid silver;background-color:#ededed;',-rows=>"$h",-cols=>'35em;', -name=>"$key", -override=>'1',-default=>"$ctrel->{$key}")),"\n";
print $q->td({-class=>'content1_cms', -colspan=>'3'},$q->textarea(-class=>"autos", -style=>'border: 1px solid silver;',-rows=>"$h",-cols=>'35em;', -name=>"$key", -override=>'1',-default=>"$ctrel->{$key}")),"\n";
}
elsif($key =~ /txt/ && $size =~ /area(\d+)/){
#my $h= $1 if($size =~ /area(\d+)/);
@ -593,7 +737,7 @@ EOF
$ctrel->{txt28} =~ s/\+/ /g;
print $q->td({-style=>'border:1px solid silver;'},$ctrel->{txt28}),"\n";
}else{
print $q->td({-class=>'content1_cms', -colspan=>'3'},$q->textarea(-id=>"$key", -class=>"autos", -style=>"border: 1px solid silver;background-color:#ededed;$h $w", -name=>"$key", -override=>'1',-default=>"$ctrel->{$key}")),"\n";
print $q->td({-class=>'content1_cms', -colspan=>'3'},$q->textarea(-id=>"$key", -class=>"autos", -style=>"border: 1px solid silver;$h $w", -name=>"$key", -override=>'1',-default=>"$ctrel->{$key}")),"\n";
}
}
elsif($key =~ /txt02/ && $varenv{syshost} =~ /sharee/){
@ -656,17 +800,20 @@ EOF
}
if($key =~ /date_time/){
#print $q->hidden(-name=>'t_id', -override=>'1',-value=>"$times_id");
my ($s_yy,$s_mo,$s_dd,$s_hh,$s_mi) = $lb->split_date($ctrel->{start_time});
my ($e_yy,$e_mo,$e_dd,$e_hh,$e_mi) = $lb->split_date($ctrel->{end_time});
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"Datum Start"),"\n";
print $q->td({-class=>'content1_cms', -colspan=>'1'},$q->textfield(-id=>'datepicker1',-class=>'etxt',-name=>"start_date",-default=>"$start_date",-override=>'1',-size=>"10",-maxlength=>10)),"\n";
print $q->td({-class=>'content1_cms', -colspan=>'1'},"Ende", $q->textfield(-id=>'datepicker2',-class=>'etxt',-name=>"end_date",-default=>"$end_date",-override=>'1',-size=>"10",-maxlength=>10)),"\n";
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"Uhrzeit Start"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'1'},
print $q->td({-class=>'left_italic_cms'},"Start"),"\n";
print $q->td({-class=>'content1_cms', -colspan=>'1'},
$q->textfield(-id=>'datepicker3',-class=>'etxt',-name=>"start_date",-default=>"$s_dd.$s_mo.$s_yy",-override=>'1',-size=>"10",-maxlength=>10),
$q->textfield(-class=>'etxt',-name=>"s_hh", -override=>'1',-default=>"$s_hh",-size=>"2",-maxlength=>2),":",
$q->textfield(-class=>'etxt',-name=>"s_mi", -override=>'1',-default=>"$s_mi",-size=>"2",-maxlength=>2)),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'1'},"Ende",
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"Ende"),"\n";
print $q->td({-class=>'content1_cms', -colspan=>'1'},
$q->textfield(-id=>'datepicker4',-class=>'etxt',-name=>"end_date",-default=>"$e_dd.$e_mo.$e_yy",-override=>'1',-size=>"10",-maxlength=>10),
$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";
}
@ -679,7 +826,7 @@ EOF
print $q->end_table;
#2.table ende
print $q->div($but->singlesubmit7("$edit","$save_key","$ib{$save_key}","margin:10px 20px;")),"\n";
print $q->div($but->singlesubmit7("$edit","$save_key","$ib{$save_key}","margin:10px 5px;")),"\n";
my $debug = "";
$debug = "(ct_table: $node_meta->{ct_table} | main_id: $node_meta->{main_id} | c_id: $ctrel->{c_id} | tpl_id: $tpl->{tpl_id} | rel_id: $ctrel->{rel_id})";
print $q->div({-style=>'z-index:10;font-size:13px;'},"$debug"),"\n" if($users_dms->{u_id} == $dbt->{copri_conf}->{superu_id});

View file

@ -43,9 +43,12 @@ sub tpl(){
my $pri = new Pricing;
my $lang = "de";
#my $rel = $db->get_relation($main_id,$lang);
my $tpl = $db->get_tpl($node_meta->{template_id});
my @tpl_order = split /,/,$tpl->{tpl_order};
#DB tpl_order used by Rental Editor
#my @tpl_order = split /,/,$tpl->{tpl_order};
my @tpl_order = ('date_time=Mietzeit','txt08=Vorname Name=readonly','int06=Start Station=5','int04=End Station=5','barcode=Rad Nr.=5','int12=Flotte=select','int10=Miet Status=select','int20=Schloss Status=select','owner=user=select');
my %varenv = $cf->envonline();
my %ib = $but->ibuttons();
my $script = $q->script_name();
@ -62,7 +65,6 @@ sub tpl(){
my $table = "contenttrans";
my $u_name = $q->escapeHTML("$R::u_name");
my $ctf = $db->get_content1("contentuser",$dbt->{shareedms_conf}->{parent_id});
my $dbh = "";
my $channel_map = $dbt->channel_map();
@ -96,16 +98,10 @@ sub tpl(){
my $bike_nodes = $dbt->fetch_rel4tpl4nd($dbh,$bnode);
my $root_id = 100;
#alle nicht abgeschlossene mandanten-einträge ....
my $x_main_ids = "$root_id,";
my $tplids = "$node_meta->{template_id},";
$tplids .= "$ctf->{txt34}," if($ctf->{txt34});
$tplids .= "$ctf->{txt35}," if($ctf->{txt35});
$tplids .= "$ctf->{txt36}," if($ctf->{txt36});
#sollte ins ctf-System. Verkaufliste,Verleihliste
#incl. Verkauf/Verleih journal
$tplids .= "204,207,218,209";
$tplids .= "218,209";
$tplids =~ s/,$//;
$x_main_ids .= $db->collect_noderec($root_id,$lang,"nothing");
@ -163,11 +159,17 @@ sub tpl(){
$offset += $limit;
}
my $cttpos;
my $cttpos = {};
$R::ct_ct_name =~ s/\#//;
my $search = {
#table => "contenttranspos",
table => "$node_meta->{ct_table}",
limit => $q->escapeHTML($limit),
offset => $q->escapeHTML($offset),
cal_sort_updown => $users_dms->{cal_sort_updown},
};
if($R::base_edit !~ /transpos|save_pos/){
$search = { %$search,
cttpos_id => $q->escapeHTML("$R::cttpos_id"),
txt06 => $q->escapeHTML("$R::txt06"),
txt08 => $q->escapeHTML("$R::txt08"),
@ -182,10 +184,9 @@ sub tpl(){
ct_txt06 => $q->escapeHTML("$R::ct_txt06"),#PLZ
ct_ct_name => $q->escapeHTML("$R::ct_ct_name"),
owner => $q->escapeHTML("$R::owner"),
limit => $q->escapeHTML($limit),
offset => $q->escapeHTML($offset),
cal_sort_updown => $users_dms->{cal_sort_updown},
};
}
}
$search = { %$search,
start_date_time => "$start_date_time",
end_date_time => "$end_date_time",
@ -312,7 +313,7 @@ sub tpl(){
$nx++;
$set_style = "background-color:#fcfdfb;";
$set_style = "background-color:#f4f1ee;" if($nx %= 2);
#$set_style = "background-color:$varenv{calendar_active_color}" if("$R::c_idpos" == "$cttpos->{$pid}->{c_id}");
$set_style = "background-color:#b6dbe3;" if($R::c_id && $R::c_id == $cttpos->{$pid}->{c_id});
my $trans_style = "padding:0 5px;border: 2px solid #f7ae37;";
my $stamm_style = "padding:0 5px;border: 2px solid #98c13b;";
@ -372,7 +373,7 @@ sub tpl(){
#if($ct_name){
if(1==1){
print "<Tr><td class='element' colspan='$h' style='$set_style;0.91em;padding:0.3em 0 0 0em;'>\n";
print "<Tr id='$cttpos->{$pid}->{c_id}'><td class='element' colspan='$h' style='$set_style;0.91em;padding:0.3em 0 0 0em;'>\n";
my $pos_hash = $cttpos->{$pid};
my $pos_details = "";
@ -429,7 +430,10 @@ sub tpl(){
$end_station = $q->a({-class=>"linknav3",-style=>"",-href=>"/DMS/Waren/?detail_search=1&s_int04=$cttpos->{$pid}->{int04}",-title=>"Rad Warenstamm nach Station filtern"},"$cttpos->{$pid}->{int04}") if($ct4rel_ware->{$cttpos->{$pid}->{cc_id}}->{rel_id});
my $kunde = $q->a({-class=>"linknav3",-style=>"$ware_style",-href=>"/DMS/Kunden/?detail_search=1&s_c_id=$cttpos->{$pid}->{ca_id}",-title=>"Kunde im Kundenstamm"},"$cttpos->{$pid}->{txt08} ($cttpos->{$pid}->{ca_id})");#2021-05-24 saves kd name
print $q->div({-style=>'float:left;margin-left:1em;font-size:0.91em;'}, "$i) <span style='$time_style'> $start_time $end_time</span> &rarr; $kunde &rarr; Start Station $start_station &rarr; End Station $end_station &rarr; Rad $bikenr $status $lock_state $track_info &rarr; $u_name/$u_name_end $pos_id"),"\n";
my $edit_pos = $q->a({-class=>"editboo",-href=>"?base_edit=transpos\&c_id=$cttpos->{$pid}->{c_id}\&owner=$users_dms->{u_id}",-title=>"Miete bearbeiten ($cttpos->{$pid}->{c_id})"},$q->span({-class=>"bi bi-file-earmark-text-fill"}));
print $q->div({-style=>'float:left;margin-left:1em;font-size:0.91em;'}, "<span style='$time_style'>$edit_pos $i) $start_time $end_time</span> &rarr; $kunde &rarr; Start Station $start_station &rarr; End Station $end_station &rarr; Rad $bikenr $status $lock_state $track_info &rarr; $u_name/$u_name_end $pos_id"),"\n";
print $q->div({-style=>'float:left;margin-left:1em;font-size:0.91em;'}, "&rarr; Faktura", $q->a({-class=>"linknav3",-style=>"$trans_style",-href=>"/DMS/Faktura?ct_trans=open\&c_id4trans=$c_id4trans\&tpl_id4trans=$tpl_id4trans\&kind_of_trans=Faktura\&owner=$users_dms->{owner}",-title=>"Faktura Terminal öffnen"},"\#$ct_name")),"\n" if($c_id4trans && $tpl_id4trans);
print $q->div({-style=>'float:left;margin-left:1em;font-size:0.91em;'}, "$user_device"),"\n";

View file

@ -103,8 +103,8 @@ EOF
print<<EOF
<script>
var map = L.map('map').setView([$lat, $lng], $map_zoom);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
var map = L.map('map', { scrollWheelZoom: false }).setView([$lat, $lng], $map_zoom);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);

View file

@ -184,7 +184,7 @@ EOF
if(!$start_chck && !$end_chck && $main_ids && $tpl_ids){
#$rows = $db->count_content($searchref->{table_pos},"$main_ids","$tpl_ids");
#collect search keys
#collect search keys.
foreach my $postkey (@keywords){
foreach(@tpl_order){
my ($key,$val,$size) = split /=/,$_;
@ -195,7 +195,6 @@ EOF
}
}
}
#trying to save hashref
if($R::detail_search && ref($searchref) eq "HASH"){
store $searchref, $hashfile;

View file

@ -314,8 +314,6 @@ EOF
print "</td>\n";
}elsif($key =~ /txt/){
print $q->td({-class=>'element',-style=>"$txtstyle $set_style"},$q->textfield(-class=>'etxt',-style=>"$txtstyle",-name=>"col_$key",-default=>"$cttpos->{$id}->{$key}", -override=>'1',-size=>"$isize",-maxlength=>100),"\n");
#}elsif($key =~ /save/){
#print $q->td({-class=>'element',-style=>"$set_style"},$but->singlesubmit2("ct_trans","save_pos","$ib{save_pos}"));
}elsif($key =~ /int/){
print $q->td({-class=>'tdint',-nowrap=>"1"},"&nbsp;\n");
}

View file

@ -213,6 +213,7 @@ sub get_devices {
#sudo su www-data -c "./src/scripts/Ilockit_cloud.pl shareedms-fr01 get_events 6572 20"
#TODO
&get_events if($todo eq "get_events");
sub get_events {

View file

@ -0,0 +1 @@
../../../../../sharee.bike/copri-bike/main/src/scripts/coupongen.pl

View file

@ -48,6 +48,8 @@ my $update_cp = {
table => "contenttranspos",
#txt10 => "available",
int10 => "1",
owner_end => "172",
mtime => "now()",
};
my $update_cc = {
table => "content",

View file

@ -3,10 +3,15 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
#
#On this forking script, nothing will saved on script, else by execute APIsigclient methodes
#
# command line syntax
# sudo su www-data -c "./src/scripts/sig_client.pl shareeapp-sx 'todo' 'user_id' 'bike_id' 'pos_id'"
#
# 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'"
# 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);
@ -36,7 +41,8 @@ my $dbh = "";
my $todo = $ARGV[1] || "";
my $user_id = $ARGV[2] || "";
my $pos_id = $ARGV[3] || "";
my $bike_id = $ARGV[3] || "";
my $pos_id = $ARGV[4] || "";
open(FILE,">>$varenv{logdir}/APIsigclient.log");
print FILE "\n*** $now_dt 'sig_client fork with todo:$todo|user_id:$user_id|pos_id:$pos_id' \n";
@ -51,7 +57,7 @@ my $apref = {
my $ctadr = { c_id => 0 };
$ctadr = $dbt->fetch_record($dbh,$apref) if($user_id =~ /^\d+$/ && $user_id > 0);
my $ct_bike = { txt22 => "" };
my $ct_bike = { txt22 => "$bike_id" };
my $posref = {
table => "contenttranspos",
@ -61,7 +67,7 @@ my $posref = {
c_id => "$pos_id",
};
my $ctpos = { c_id => 0 };
$ctpos = $dbt->fetch_tablerecord($dbh,$posref) if($user_id =~ /^\d+$/ && $user_id > 0 && $pos_id);
$ctpos = $dbt->fetch_tablerecord($dbh,$posref) if($user_id =~ /^\d+$/ && $user_id > 0 && $pos_id && $pos_id =~ /^\d+$/);
print FILE "fetched from DB ctadr:$ctadr->{c_id}|ctpos:$ctpos->{c_id}\n";
@ -81,25 +87,36 @@ if($todo eq "bikes_available"){
#print $0 . Dumper($return) . "\n";
}
#only for tests
#sig => copri key mapping
#bike id => txt22
#reservationId => txt10
#renatlId => txt11
#only for tests. build in methode
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);
my $return = $si->sig_booking(\%varenv,$todo,$ctadr,$ct_bike,$ctpos);
#print $0 . Dumper($return) . "\n";
}
#used also live! to fork rental request with
#live! Fork rental request with bike "id"
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);
my $return = $si->sig_booking(\%varenv,$todo,$ctadr,$ct_bike,$ctpos);
#print $0 . Dumper($return) . "\n";
}
#used also live! to fork rental_end request with "rentalId"
#live! 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);
my $return = $si->sig_booking(\%varenv,$todo,$ctadr,$ct_bike,$ctpos);
#print $0 . Dumper($return) . "\n";
}
#only for tests. build in methode
elsif($todo eq "rentals_running" && $ctadr->{c_id} > 0 && $ctpos->{txt22}){
my $return = $si->sig_booking(\%varenv,$todo,$ctadr,$ct_bike,$ctpos);
#print $0 . Dumper($return) . "\n";
}

View file

@ -42,11 +42,11 @@ sub tpl(){
if($users_sharee->{c_id} && $R::sharee_edit ne "delete_account2" && ($users_sharee->{c_id} eq $varenv->{superu_id} || $dbt->{copri_conf}->{stage} eq "test")){
my $coo = $q->cookie('domcookie') || $q->param('sessionid') || "";
my $api_test = "sharee_fr01"; my $bike="FR1538";
#my $api_test = "sharee_fr01"; my $bike="FR1538";
#my $api_test = "sharee_fr01"; my $bike="FR4781";#Tracking and BVB test
#my $api_test = "sharee_kn"; my $bike="KN205";
#my $api_test = "sharee_wue"; my $bike="WUE5524";
#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";

View file

@ -10,6 +10,7 @@ use CGI::Carp qw(fatalsToBrowser);
use CGI ':standard';
use Config::General;
use Mod::Buttons;
use Mod::Basework;
use Mod::Libenz;
use Mod::Libenzdb;
use Mod::DBtank;
@ -34,6 +35,7 @@ sub tpl(){
my $return = shift || "";
my $q = new CGI;
my $bw = new Basework;
my $lb = new Libenz;
my $db = new Libenzdb;
my $dbt = new DBtank;
@ -129,7 +131,13 @@ sub tpl(){
}
if($users_dms->{u_id} && $main_id){
$return = $lb->return_feedback($return,$users_dms->{kind_of_trans},$users_dms->{owner}) if($return !~ /shareejson/);
if(ref($return) eq "HASH"){
$return = $bw->return_feedback($node_meta,$users_dms,$return);
}else{
#deprecated
$return = $lb->return_feedback($return,$node_meta->{node_name},$users_dms->{owner}) if($return !~ /shareejson/);
}
if($main_id >= "100000"){
my $mstyle="";
@ -359,7 +367,7 @@ EOF
if($return !~ /failure/){
if(($R::ct_trans !~ /close/) && ($ct_table =~ /contenttrans/) && ($R::ct_trans || $R::trans2edit || $R::ctpos_activ || $R::select_part || $R::set_main_id)){
&Modalbox::mobox($node_meta,$users_dms,$mode,$return);
}elsif(($R::ct_trans !~ /close/) && ($ct_table =~ /content$|contentadr|contentuser|contentpos|users$/ && ($R::ct_trans || $R::rel_edit || $R::base_edit)) || ($R::node2edit && $R::node2edit =~ /edit/)){
}elsif(($R::ct_trans !~ /close/) && ($ct_table =~ /content$|contentadr|contentuser|contentpos|users$|contenttranspos/ && ($R::ct_trans || $R::rel_edit || $R::base_edit)) || ($R::node2edit && $R::node2edit =~ /edit/)){
&Modalbox3::mobox3($node_meta,$users_dms,$mode,$return) if($R::rel_edit !~ /delete|save/ && $R::ct_trans !~ /delete/ && $R::base_edit !~ /delete|save/ && !$R::service_id);
}
}