package FormEdit;
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
#
use strict;
use warnings;
use POSIX;
use CGI ':standard';
use DateTime;
use DateTime::Format::Pg;
use Lib::Config;
use Mod::Buttons;
use Mod::Libenz;
use Mod::Libenzdb;
use Mod::DBtank;
use Mod::APIfunc;
use Mod::Pricing;
use Tpl::AccountSubmenu;
use Data::Dumper;
sub new {
my $class = shift;
my $self = {};
bless($self,$class);
return $self;
}
#Template
sub tpl(){
my $node_meta = shift;
my $users_dms = shift || "";
my $mode = shift || "";
my $varenv = shift;
my $users_sharee = shift || "";
my $return = shift || "";
my $q = new CGI;
my $cf = new Config;
my $lb = new Libenz;
my $db = new Libenzdb;
my $dbt = new DBtank;
my $apif = new APIfunc;
my $pri = new Pricing;
my $but = new Buttons;
my $submenu = new AccountSubmenu;
my $script = $q->script_name();
my $path_info = $q->path_info();
my $path = $path_info;
#with meta_host,
if("$varenv->{metahost}"){
$path = "$script" . "$path_info";
$script="";
}
my $dbh = "";#$dbt->dbconnect();
my $user_agent = $q->user_agent();
my %ib = $but->ibuttons_arch();
my @viewsel = split /\//,$1 if($path =~ /^\/(.*)/);
my $red = "red";
my $coo = $q->cookie(-name=>'domcookie') || $R::sessionid;
my $session="";
my $session_and="";
if($R::sessionid && length($R::sessionid) > 20 && !$q->cookie(-name=>'domcookie')){
$session = "?sessionid=$R::sessionid";
$session_and = "&sessionid=$R::sessionid";
}
my $bgcolor1 = "009899";#sharee
$bgcolor1 = $dbt->{website}->{$varenv->{syshost}}->{bgcolor1} if($dbt->{website}->{$varenv->{syshost}}->{bgcolor1});
$bgcolor1 = $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{bgcolor1} if($dbt->{merchant_ids}->{$varenv->{merchant_id}}->{bgcolor1});
my $ctrel = {};
$ctrel = $users_sharee if(ref($users_sharee) eq "HASH" && $users_sharee->{c_id});
#
#collect rentals on operators and get operator hash with dbname->uri_operator
#$q->param(-name=>'month',-value=>"18");#disabled because changing to not invoiced positions
my ($ctpos,$operator_hash) = $apif->user_rentals_history($q,$ctrel);
#print Dumper($ctpos);
my $ctpos_count=0;
foreach my $id (keys(%$ctpos)){
$ctpos_count++;
}
my $ctt_all = {};
#$ctt = $db->collect_content2("contenttrans","int10",$ctrel->{c_id}) if($ctrel->{c_id});
#
#loop operator hash to get invoices for each operator
foreach my $sharee_operator (keys (%$operator_hash)){
my $dbh_operator = $dbt->dbconnect_extern("$sharee_operator");
my $pref = {
table => "contenttrans",
fetch => "all",
int10 => "$ctrel->{c_id}",
keyfield => "c_id",
};
if($ctrel->{c_id}){
my $ctt = $dbt->fetch_tablerecord($dbh_operator,$pref);
foreach my $id (keys(%$ctt)){
$ctt->{$id}->{wwwhost} = "$operator_hash->{$sharee_operator}";
$ctt->{$id}->{praefix} = "$sharee_operator";
#print "$ctt->{$id}->{praefix}|";
}
$ctt_all = { %$ctt_all, %$ctt };
}
}
my $tpl_id = $node_meta->{tpl_id};
#$tpl_id = "302004" if($viewsel[1] =~ /Mieten/ && $ctrel->{c_id});
my $tpl = $db->get_tpl($tpl_id);
my $tpl01 = $tpl;#If nothing else, because of tpl_name Title in split_lates
my $tpl02 = "";
my @split_lates = ("$tpl->{tpl_order}");
my $template01 = "$tpl_id" . "001";
my $template02 = "$tpl_id" . "002";
if($tpl_id < 999){
$tpl01 = $db->get_tpl($template01);
$tpl02 = $db->get_tpl($template02);
@split_lates = ("$tpl01->{tpl_order}","$tpl02->{tpl_order}");
}
my $now_dt = strftime "%Y-%m-%d %H:%M", localtime;
my $start_date = strftime "%d.%m.%Y %H:%M", localtime;
my ($end_date,$end_time) = split(/ /,$now_dt);
my ($e_yy,$e_mo,$e_dd) = split(/-/,$end_date);
my ($e_hh,$e_mi) = split(/\:/,$end_time);
my $radID = $R::radID || "";
my $tink_agb_text;
$tink_agb_text = $db->get_content("2351","");
$tink_agb_text->{txt01} = $q->unescapeHTML($tink_agb_text->{txt01});
$tink_agb_text->{txt01} = $lb->newline($tink_agb_text->{txt01},"","0");
my $konrad_agb_text;
$konrad_agb_text = $db->get_content("3446","");
$konrad_agb_text->{txt01} = $q->unescapeHTML($konrad_agb_text->{txt01});
$konrad_agb_text->{txt01} = $lb->newline($konrad_agb_text->{txt01},"","0");
#TODO get and edit sharee AGB from Tarif content
my $sharee_agb_text;
$sharee_agb_text->{ct_name} = "AGB";
$sharee_agb_text->{txt01} = "";
print "
\n";
print <
$sharee_agb_text->{ct_name}
$sharee_agb_text->{txt01}
EOF
;
my $debug=0;
$debug=1 if($users_sharee->{c_id} eq $dbt->{copri_conf}->{superu_id} || $dbt->{copri_conf}->{stage} eq "test");
my $debug_message = "";
my $payable_check=0;
if(($ctrel->{int03} == 1 && $ctrel->{ct_name} =~ /\w{2}-\d+/) || ($ctrel->{int03} == 2 && length($ctrel->{ct_name}) >= 19)){
$payable_check=1;
}
#subMenue--------
$submenu->tpl($node_meta,$users_dms,$mode,$varenv,$users_sharee,$return);
#-----------------
my $catch_failure=0;
if(($R::failure && $R::failure =~ /\w+/) || ($ctrel->{txt31} && $ctrel->{txt31} =~ /\w/)){
$debug_message = "($R::failure || $ctrel->{txt31})" if($debug);
$catch_failure=1;
print $q->div({-class=>'content2', -style=>"clear:both;color:$red"}, "* Es liegt noch mindestens ein Fehler vor. $debug_message"),"\n";
}
#confirm code manage
if($catch_failure && (!$ctrel->{int04} && !$ctrel->{int13}) && ($tpl_id =~ /^2$|302004/) && ($path =~ /$varenv->{accounting_3}/)){
$debug_message = "$catch_failure && (!$ctrel->{int04} || !$ctrel->{int13}) && $tpl_id" if($debug);
print $q->div({-class=>'content2'}, "Erst nachdem Ihre Profildaten vollständig sind erhalten Sie die Bestätigung. $debug_message"),"\n";
}elsif((!$ctrel->{int04} || !$ctrel->{int13}) && ($tpl_id =~ /^2$|302004/) && ($path =~ /$varenv->{accounting_3}/)){
print $q->start_form(-name=>'accountscreen', -action=>"/$varenv->{mandant}/Account/$varenv->{accounting_3}$session"),"\n";
print $q->hidden(-name=>"sessionid",-override=>1,-value=>"$R::sessionid");
my $required = "";
$debug_message = "(!$ctrel->{int04} || !$ctrel->{int13}) && $tpl_id" if($debug);
print $q->div({-class=>'content_title3',-style=>'clear:both;'}, "Fast geschafft $debug_message"),"\n";
my $acktext = "Es wurden Bestätigungs-Codes an Ihre e-Mail Adresse und per SMS an Ihre Telefonnr. versandt.";
$acktext = "Es wurde ein Bestätigungs-Code per SMS an Ihre Telefonnr. versandt." if($ctrel->{int04} && !$ctrel->{int13});
$acktext = "Es wurde ein Bestätigungs-Code an Ihre e-Mail Adresse versandt." if(!$ctrel->{int04} && $ctrel->{int13});
print $q->div({-class=>'content2'}, "$acktext Nach erfolgreicher Bestätigung können Sie unsere Mieträder nutzen. Bitte beachten Sie die Anweisungen."),"\n";
if(!$ctrel->{int04}){
my $des = "E-Mail Bestätigungscode";
my $key = "confirm_code";
my $label_des="* $des";
$label_des = "Bitte \"$des\" korrigieren" if($R::failure);
print $q->label({-for=>"$key", -style=>'padding-top:1em;'},"$label_des"),"\n";
print "\n";
print $q->div({-class=>'content2'}, "Falls Sie keinen e-Mail Bestätigungs Code erhalten haben, überprüfen Sie bitte Ihre bei der Registrierung angegebene e-Mail Adresse und/oder den Spam Bereich in Ihrem e-Mail Programm. Hier können Sie erneut einen ",$q->a({-style=>"color:#$bgcolor1;",-href=>"$varenv->{wwwhost}?sharee_edit=send_email$session_and"},"e-Mail Code anfordern")),"\n";
}else{
print $q->div({-class=>'content2', -style=>'color:gray;'}, "* E-Mail Bestätigungs-Code wurde bereits erfolgreich eingegeben."),"\n";
}
if(!$ctrel->{int13}){
my $des = "SMS Bestätigungscode";
my $key = "confirm_smscode";
my $label_des="* $des";
$label_des = "Bitte \"$des\" korrigieren" if($R::failure);
print $q->label({-for=>"$key", -style=>'padding-top:1em;'},"$label_des"),"\n";
print "\n";
print $q->div({-class=>'content2'}, "Falls Sie keinen SMS Bestätigungs Code erhalten haben, überprüfen Sie bitte Ihre bei der Registrierung angegebene mobile Telefonnummer. Hier können Sie erneut einen ",$q->a({-style=>"color:#$bgcolor1;",-href=>"$varenv->{wwwhost}?sharee_edit=send_sms$session_and"},"SMS Code anfordern")),"\n";
}else{
print $q->div({-class=>'content2', -style=>'color:gray;'}, "* SMS Bestätigungs-Code wurde bereits erfolgreich eingegeben."),"\n";
}
my $button_name = "Weiter";
print $q->div({-style=>'margin-top:2em;'},""),"\n";
print $q->end_form,"\n";
}else{
my $postaction = "/$varenv->{mandant}/Account/$varenv->{accounting_2}";
if($ctrel->{c_id} && $path =~ /$varenv->{accounting_2}|$varenv->{accounting_3}|$varenv->{profile}/){
$postaction = "/$varenv->{mandant}/Account/$varenv->{accounting_3}";
}elsif($path =~ /$varenv->{accounting_1}/){
$postaction = "/$varenv->{mandant}/Account/$varenv->{accounting_1_5}";
}elsif($ctrel->{c_id} && $path =~ /$varenv->{accounting_1}/){
$postaction = "/$varenv->{mandant}/Account/$varenv->{accounting_2}";
}
print $q->start_form(-name=>'accountscreen', -action=>"$postaction$session"),"\n";
print $q->hidden(-name=>"sessionid",-override=>1,-value=>"$R::sessionid") if($R::sessionid);
print "
\n";
my $i=0;
my @tpl_order;
foreach(@split_lates){
$i++;
if($i==1){
if($R::confirm_success){
print $q->div({-class=>'content_title3'},"Anmeldung bestätigt"),"\n";
}else{
print $q->div({-class=>'content_title3'},"$tpl01->{tpl_name}"),"\n";
}
if($path =~ /$varenv->{accounting_1}/){
print $q->div({-class=>'content2'}, "Damit Sie jederzeit und einfach ein Leihrad mieten können benötigen wir Anschrift und Zahlungsdaten."),"\n";
}
if($path =~ /$varenv->{accounting_2}/){
if($tpl_id == 302008){
print $q->div({-class=>'content2'}, "Wähle die Zahlungsart."),"\n";
}else{#old SEPA only style
print $q->div({-class=>'content2'}, "Durch das SEPA Mandat können wir die Leihrad Buchungen bequem einziehen."),"\n";
}
}
}
if($i==2){
print $q->div({-class=>'content_title3'},"$tpl02->{tpl_name}"),"\n";
print $q->div({-class=>'content2'}, "Das Login besteht aus Ihrer e-Mail Adresse und einem mindestens 8 stelligen Passwort."),"\n";
}
@tpl_order = split /,/,$_;
my $scol = "itime";
foreach (@tpl_order){
my ($key,$des,$size) = split /=/,$_;
$ctrel->{$key} = $q->unescapeHTML("$ctrel->{$key}");
$ctrel->{$key} = $lb->newline($ctrel->{$key},"","1");
#radID & timeCode from contenttranspos----------------
if($ctrel->{int03} && $path =~ /$varenv->{accounting_3}|$varenv->{profile}/){
if(1==1){
if($key =~ /ct_name/){
if($ctrel->{int12}){
print $q->div({-class=>'content2', -style=>'color:#c83434;'}, "Herzlich Willkommen. Wir mussten Ihren Zugang zu den Mieträdern sperren weil ein Problem mit Ihren Zahlungsdaten vorliegt. Bitte aktualisieren Sie Ihre Zahlungsdaten und kontaktieren Sie uns damit wir den Vorfall klären können."),"\n";
}else{
print $q->div({-class=>'content2'}, "Herzlich Willkommen. Sie können nach erfolgreicher Anmeldung unter dem Menue \"Fahrradstandortkarte\" ein Leihrad mieten."),"\n";
}
print $q->div({-class=>'content2'}, "Nach der Mietradnutzung haben Sie hier die Möglichkeit die Mietvorgänge einzusehen und gebuchte Rechnungen als PDF herunterzuladen."),"\n";
print $q->div({-class=>'content2'}, "Ihre Bonusnummer wurde akzeptiert. Bitte beachten Sie dass der Bonustarif im Kontext des Mietradbetreibers vergeben wird. Der Tarif wird bei der Mietrad Reservierung angezeigt."),"\n" if($R::success && $R::success eq "txt15");
print $q->div({-class=>'content2'}, "Aktuell liegen keine Buchungen vor."),"\n" if(!$ctpos_count);
}elsif($key =~ /barcode/ && $ctpos_count){
#print $q->div({-style=>'padding-top:1.5em;font-weight:bold;'},"Ihre Buchungsdaten der letzten 1 ½ Jahre im Überblick"),"\n";
print $q->div({-style=>'padding-top:1.5em;font-weight:bold;'},"Folgende Positionen liegen zur nächsten Abbuchung vor"),"\n";
my @tpl_posorder = ("txt01=Beschreibung","int04=Station","ct_name=(Rad) Nummer","int26=CO2","int02=Betrag");
my $j=0;
my $nx=0;
my $sum = 0;
print "