mirror of
https://gitlab.com/t6353/sharee.bike.git
synced 2025-07-07 22:26:44 +02:00
Faktura refactoring
This commit is contained in:
parent
9e1a56aa83
commit
60f5bf58ed
20 changed files with 791 additions and 1078 deletions
|
@ -965,7 +965,7 @@ sub booking_request(){
|
|||
|
||||
if($pos_id){
|
||||
$response_state = "OK, bike " . $bike . " succesfully requested";
|
||||
$response_text = "Fahrrad Nr. $bike wurde erfolgreich für 15 Min. reserviert";
|
||||
$response_text = "Rad $bike wurde erfolgreich für 15 Min. reserviert";
|
||||
$bw->log("booking_request insert contenttranspos pos_id: $pos_id\n","","");
|
||||
|
||||
my $update_ctt = {
|
||||
|
@ -1088,7 +1088,7 @@ sub booking_update(){
|
|||
};
|
||||
$record_pos = $dbt->fetch_tablerecord($dbh,$booking_pos) if($bike_id > 0 && $auth->{c_id} > 0);
|
||||
if(!$record_pos->{c_id}){
|
||||
$booking_values->{response_state} = "Failure 758: Can not find bike " . $q->param('bike') . " rental or reservation";
|
||||
$booking_values->{response_state} = "Failure 758: Can not find bike " . $q->param('bike') . " rental or reservation on varenv-dbname: $varenv->{dbname}";
|
||||
$booking_values->{response_text} = "Keine Miete oder Reservierung zu Rad " . $q->param('bike') . " gefunden.";
|
||||
}
|
||||
|
||||
|
@ -1192,11 +1192,11 @@ sub booking_update(){
|
|||
|
||||
$update_cc->{int10} = 1 if($record_cc->{int10} == 2);#only if still requested
|
||||
$booking_values->{response_state} = "OK: canceled bike " . $q->param('bike');
|
||||
$booking_values->{response_text} = "Fahrrad Nr. " . $q->param('bike') . " wurde erfolgreich storniert";
|
||||
$booking_values->{response_text} = "Rad " . $q->param('bike') . " wurde erfolgreich storniert";
|
||||
$booking_values->{state} = "available";
|
||||
}else{
|
||||
$booking_values->{response_state} = "Failure 2002: cancel bike " . $q->param('bike') . " fails, bike not requested";
|
||||
$booking_values->{response_text} = "Keine Reservierung zu Fahrrad Nr. " . $q->param('bike') . " gefunden.";
|
||||
$booking_values->{response_text} = "Keine Reservierung zu Rad " . $q->param('bike') . " gefunden.";
|
||||
}
|
||||
}else{
|
||||
|
||||
|
@ -1221,7 +1221,7 @@ sub booking_update(){
|
|||
|
||||
if($rows > 0){
|
||||
$booking_values->{response_state} = "OK: occupied bike " . $q->param('bike');
|
||||
$booking_values->{response_text} = "Fahrrad Nr. " . $q->param('bike') . " Miete gestartet. ";
|
||||
$booking_values->{response_text} = "Rad " . $q->param('bike') . " Miete gestartet. ";
|
||||
$update_cc->{int10} = 3;
|
||||
#$update_cc->{int04} = "null";#Because of servicetool, we hav to be keep the station
|
||||
}
|
||||
|
@ -1295,7 +1295,7 @@ sub booking_update(){
|
|||
if($rows_end > 0){
|
||||
$update_cc->{int10} = 1;
|
||||
$booking_values->{response_state} = "OK: available bike " . $q->param('bike');
|
||||
$booking_values->{response_text} = "Danke! Die Miete Fahrrad Nr. " . $q->param('bike') . " wurde beendet.";
|
||||
$booking_values->{response_text} = "Danke! Die Miete Rad " . $q->param('bike') . " wurde beendet.";
|
||||
}
|
||||
|
||||
$geo_debug .= "Matching station: $stations_raw->{$id}->{barcode}|$gps_data->{latitude},$gps_data->{longitude},$latitude_station,$longitude_station --> $gps_data->{geo_distance} Meter\n";
|
||||
|
@ -1351,23 +1351,23 @@ sub booking_update(){
|
|||
}elsif($record_pos->{int11} != 3){
|
||||
if(!$gps_data->{gps}){
|
||||
$booking_values->{response_state} = "Failure 2245: No GPS data, state change forbidden.";
|
||||
$booking_values->{response_text} = "Fehler! Keine GPS Standortdaten, Die Miete Fahrrad Nr. " . $q->param('bike') . " kann wegen fehlendem GPS nicht $state_text werden. Bitte aktivieren Sie das GPS.";
|
||||
$booking_values->{response_text} = "Fehler! Keine GPS Standortdaten, Die Miete Rad " . $q->param('bike') . " kann wegen fehlendem GPS nicht $state_text werden. Bitte aktivieren Sie das GPS.";
|
||||
}else{
|
||||
$booking_values->{response_state} = "Failure 2246: GPS age with $gps_data->{gps_age_minutes} minutes too old, state change forbidden.";
|
||||
$booking_values->{response_text} = "Fehler! GPS Daten sind mit $gps_data->{gps_age_minutes} Minuten zu alt. Die Miete Fahrrad Nr. " . $q->param('bike') . " kann aufgrund nicht aktueller GPS nicht $state_text werden. Bitte aktivieren Sie das GPS.";
|
||||
$booking_values->{response_text} = "Fehler! GPS Daten sind mit $gps_data->{gps_age_minutes} Minuten zu alt. Die Miete Rad " . $q->param('bike') . " kann aufgrund nicht aktueller GPS nicht $state_text werden. Bitte aktivieren Sie das GPS.";
|
||||
}
|
||||
}
|
||||
#end if($state eq "available" && $record_pos.state eq occupied || $record_pos.lock_state ne locked
|
||||
}elsif($state_key == 6 && ($record_pos->{int10} == 3 || $record_pos->{int20} != 1)){
|
||||
$booking_values->{response_state} = "Failure 2012: occupied bike " . $q->param('bike') . " cannot be state $state and $lock_state";
|
||||
$booking_values->{response_text} = "Fahrrad Nr. " . $q->param('bike') . " ist in Benutzung und kann somit nicht storniert werden.";
|
||||
$booking_values->{response_text} = "Rad " . $q->param('bike') . " ist in Benutzung und kann somit nicht storniert werden.";
|
||||
}elsif($state_key == 3 && $record_pos->{int10} == 1){
|
||||
$booking_values->{response_state} = "Failure 2016: available bike " . $q->param('bike') . " have to be at first reserved, thats because cannot be $state";
|
||||
$booking_values->{response_text} = "Fahrrad Nr. " . $q->param('bike') . " wurde nicht reserviert und kann somit nicht gemietet werden.";
|
||||
$booking_values->{response_text} = "Rad " . $q->param('bike') . " wurde nicht reserviert und kann somit nicht gemietet werden.";
|
||||
|
||||
}else{
|
||||
$booking_values->{response_state} = "Failure 2035: bike " . $q->param('bike') . " state change to state $state and $lock_state not possible.";
|
||||
$booking_values->{response_text} = "Fehler! Die Miete Fahrrad Nr. " . $q->param('bike') . " kann nicht mit dem vorhandenen Status $state_text werden.";
|
||||
$booking_values->{response_text} = "Fehler! Der Mietstatus zu Rad " . $q->param('bike') . " kann mit dem vorhandenen Status \"state:$state and lock_state:$lock_state\" nicht geändert werden.";
|
||||
}
|
||||
|
||||
#contenttrans
|
||||
|
@ -1555,21 +1555,21 @@ sub smartlock {
|
|||
$update_pos->{int22} = $gps_data->{gps_accuracy};
|
||||
$update_pos->{int23} = "null";# only computed on rental-end
|
||||
$booking_values->{response_state} = "OK: bike " . $q->param('bike') . " locked confirmed. ";
|
||||
$booking_values->{response_text} = "Abschließen von Fahrrad Nr. " . $q->param('bike') . " bestätigt. ";
|
||||
$booking_values->{response_text} = "Schloss schließen von Rad " . $q->param('bike') . " bestätigt. ";
|
||||
|
||||
}elsif($q->param('lock_state') eq "unlocked"){
|
||||
$lock_value = 2;
|
||||
$update_cc->{int20} = "$lock_value";
|
||||
$update_pos->{int20} = "$lock_value";
|
||||
$booking_values->{response_state} = "OK: bike " . $q->param('bike') . " unlocked confirmed. ";
|
||||
$booking_values->{response_text} = "Aufschließen von Fahrrad Nr. " . $q->param('bike') . " bestätigt. ";
|
||||
$booking_values->{response_text} = "Schloss öffnen von Rad " . $q->param('bike') . " bestätigt. ";
|
||||
|
||||
}elsif($q->param('lock_state') eq "locking"){
|
||||
$lock_value = 3;
|
||||
$update_cc->{int20} = "$lock_value";
|
||||
$update_pos->{int20} = "$lock_value";
|
||||
$booking_values->{response_state} = "OK: bike " . $q->param('bike') . " locking in progress. ";
|
||||
$booking_values->{response_text} = "Abschließen von Fahrrad Nr. " . $q->param('bike') . " ist im Prozess. Bitte warten bis das smartlock vollständig geschlossen wurde und das abschließen bestätigt wird. ";
|
||||
$booking_values->{response_text} = "Schloss schließen von Rad " . $q->param('bike') . " ist im Prozess. Bitte warten bis das smartlock vollständig geschlossen wurde und das Schloss schließen bestätigt wird. ";
|
||||
if($varenv->{dbname} ne "sharee_lv" && !$record_pos->{int32}){
|
||||
$bw->log("$varenv->{basedir}/src/scripts/sms_message.pl $varenv->{syshost} locking_progress $auth->{c_id} $record_pos->{c_id}",$record_pos->{c_id},"");
|
||||
system("$varenv->{basedir}/src/scripts/sms_message.pl $varenv->{syshost} locking_progress $auth->{c_id} $record_pos->{c_id} &");
|
||||
|
@ -1580,7 +1580,7 @@ sub smartlock {
|
|||
$update_cc->{int20} = "$lock_value";
|
||||
$update_pos->{int20} = "$lock_value";
|
||||
$booking_values->{response_state} = "OK: bike " . $q->param('bike') . " unlocking in progress. ";
|
||||
$booking_values->{response_text} = "Aufschließen von Fahrrad Nr. " . $q->param('bike') . " ist im Prozess. ";
|
||||
$booking_values->{response_text} = "Schloss öffnen von Rad " . $q->param('bike') . " ist im Prozess. ";
|
||||
}
|
||||
|
||||
$dbt->update_record($dbh,$update_pos,$record_pos);
|
||||
|
@ -1645,8 +1645,10 @@ sub user_rentals_history(){
|
|||
|
||||
my %varenv = $cf->envonline();
|
||||
my $today = strftime("%Y-%m-%d",localtime(time));
|
||||
my %operator_hash = ();
|
||||
my $record_all = {};
|
||||
|
||||
if($auth->{c_id}){
|
||||
my $pref = {
|
||||
table => "contenttrans",
|
||||
table_pos => "contenttranspos",
|
||||
|
@ -1667,7 +1669,6 @@ sub user_rentals_history(){
|
|||
$pref->{'ct.int14'} = "is::null";
|
||||
}
|
||||
|
||||
my %operator_hash = ();
|
||||
if($varenv{dbname} eq $dbt->{primary}->{sharee_primary}->{database}->{dbname}){
|
||||
if($auth->{txt17}){
|
||||
if($auth->{txt17} =~ /\w\s\w/){
|
||||
|
@ -1684,6 +1685,7 @@ sub user_rentals_history(){
|
|||
}else{
|
||||
$record_all = $dbt->collect_post($dbh,$pref);
|
||||
}
|
||||
}
|
||||
|
||||
return ($record_all,\%operator_hash);
|
||||
}#end user_rental_history
|
||||
|
|
|
@ -408,7 +408,7 @@ elsif($q->param('request') eq "booking_cancel" || $q->param('request') eq "booki
|
|||
my $booking_values = {};
|
||||
|
||||
#update on sig
|
||||
if($ctpos->{int11} == 3){
|
||||
if($ctpos->{int11} && $ctpos->{int11} == 3){
|
||||
if($q->param('state') eq "occupied"){
|
||||
system("$varenv{basedir}/src/scripts/sig_client.pl '$varenv{syshost}' 'rental' '$authraw->{c_id}' '$ctpos->{txt22}' '$ctpos->{c_id}' &");
|
||||
}
|
||||
|
@ -521,13 +521,13 @@ elsif($q->param('request') eq "bikes_available"){
|
|||
$response->{bikes} = $apif->bikes_available($q,\%varenv,\%varenv,$authraw);
|
||||
}
|
||||
|
||||
#return also bikes_occupied on bikes_available by operator request
|
||||
if(1==1 && $varenv{syshost} ne "shareeapp-primary" && $dbt->{copri_conf}->{betau_id}->{$authraw->{c_id}}){
|
||||
#2023-11-13, return also bikes_occupied on bikes_available by operator request
|
||||
#if(1==1 && $varenv{syshost} ne "shareeapp-primary" && $dbt->{copri_conf}->{betau_id}->{$authraw->{c_id}}){
|
||||
#return list of occupied/requested bikes
|
||||
my $record = {};
|
||||
$record = $apif->user_bikes_occupied($dbh,$authraw,"");
|
||||
$response->{bikes_occupied} = $apif->rentals(\%varenv,$record,$authraw,"1");#returns JSON rental values
|
||||
}
|
||||
#}
|
||||
}
|
||||
if(ref($response->{bikes}) ne "HASH"){
|
||||
$response->{response_state} = "Failure 5003: cannot find any user defined bike tariff";
|
||||
|
|
|
@ -689,21 +689,6 @@ sub collect_post(){
|
|||
}else{
|
||||
$cp_where .= " and cp.$key $op '$value'";
|
||||
}
|
||||
}elsif($varenv{systype} && $varenv{systype} eq "azn"){
|
||||
if($key =~ /^ct\.(contentadr_id|owner|barcode|int\d+)$/ && $value){
|
||||
$ct_where .= " and $key $op $value";
|
||||
}elsif($key eq "barcode" && $fetch->{fetch} eq "all"){
|
||||
if($value =~ /\d-\d/){
|
||||
my ($start_val,$end_val) = split(/-/, $value);
|
||||
$cp_where .= " and (cp.$key >= $start_val AND cp.$key <= $end_val)";
|
||||
}else{
|
||||
my $start_val = $value . "01";
|
||||
my $end_val = $value . "31";
|
||||
$cp_where .= " and (cp.$key >= $start_val AND cp.$key <= $end_val)";
|
||||
}
|
||||
}elsif($key =~ /^(c_id|ca_id|ct_id|owner|barcode|int\d+)$/ && $value){
|
||||
$cp_where .= " and cp.$key $op $value";
|
||||
}
|
||||
}elsif($key =~ /^(c_id|ca_id|ct_id|owner|barcode|int\d+)$/ && $value){
|
||||
if($value eq "null"){
|
||||
$cp_where .= " and (cp.$key is null OR cp.$key = 0)";
|
||||
|
@ -727,8 +712,7 @@ sub collect_post(){
|
|||
$sth = $dbh->prepare($sql);
|
||||
}else{
|
||||
#rental pos with capture booking ct.state
|
||||
#$sql = "SELECT cp.*, ct.state FROM $fetch->{table_pos} cp, $fetch->{table} ct WHERE $cp_where and cp.ct_id=ct.c_id 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
|
||||
$sql = "SELECT cp.*, ct.state FROM $fetch->{table_pos} cp, $fetch->{table} ct WHERE $cp_where and cp.ct_id=ct.c_id and $ct_where order by cp.mtime ASC";#mtime aufsteigend get last (newest) entry
|
||||
$sql = "SELECT cp.*, ct.state FROM $fetch->{table_pos} cp, $fetch->{table} ct WHERE $cp_where and cp.ct_id=ct.c_id and $ct_where order by cp.mtime ASC";#mtime aufsteigend get last (newest) entry
|
||||
$sth = $dbh->prepare($sql);
|
||||
}
|
||||
$bw->log("DBtank collect_post ",$sql,"") if($debug);
|
||||
|
@ -799,7 +783,7 @@ sub fetch_record(){
|
|||
$where .= " and ct.$key $op '$value'";
|
||||
}
|
||||
}
|
||||
if($key =~ /^(c_id|ca_id|barcode|int\d+|owner|contentadr_id)$/){
|
||||
if($key =~ /^(c_id|barcode|int\d+|owner)$/){
|
||||
if(looks_like_number($value) || $value eq "null"){
|
||||
if($value eq "null"){
|
||||
$where .= " and (ct.$key is null OR ct.$key = 0)";
|
||||
|
@ -854,7 +838,8 @@ sub fetch_tablerecord(){
|
|||
my $dbh = shift || $dbh_intern;
|
||||
my ($fetch) = @_;
|
||||
my $where = "where 1=1";
|
||||
|
||||
my $source = $dbh->get_info( $GetInfoType{SQL_DATABASE_NAME} );
|
||||
|
||||
foreach my $key (keys %$fetch){
|
||||
if($fetch->{$key}){
|
||||
$fetch->{$key} =~ s/^\s//g;
|
||||
|
@ -913,7 +898,9 @@ sub fetch_tablerecord(){
|
|||
my $sql = "SELECT * FROM $fetch->{table} $where";
|
||||
my $sth = $dbh->prepare($sql);
|
||||
my $rc = $sth->execute();
|
||||
#$bw->log("DBtank fetch_tablerecord :",$sql,"") if($debug);
|
||||
|
||||
#debug $fetch->{table} eq "contenttranspos" on Failure 758
|
||||
$bw->log("DBtank fetch_tablerecord source-dbname $source:",$sql,"") if($debug && $fetch->{table} eq "contenttranspos");
|
||||
|
||||
my $record = { c_id => 0 };
|
||||
if($fetch->{fetch} eq "all" && $fetch->{keyfield}){
|
||||
|
@ -952,11 +939,16 @@ sub update_one(){
|
|||
|
||||
my $rows = 0;
|
||||
my $where = "";
|
||||
if($c_id){
|
||||
$where = "where c_id = $c_id";
|
||||
}elsif($update->{c_id}){
|
||||
$where = "where c_id = $update->{c_id}";
|
||||
}
|
||||
|
||||
if($update->{table} =~ /content/){
|
||||
if($c_id){
|
||||
$where = "where c_id = $c_id";
|
||||
}elsif($update->{c_id}){
|
||||
$where = "where c_id = $update->{c_id}";
|
||||
}elsif($update->{barcode}){
|
||||
$where = "where barcode = $update->{barcode}";
|
||||
}
|
||||
}
|
||||
|
||||
if($update->{table} eq "users" && $update->{u_id}){
|
||||
$where = "where u_id = $update->{u_id}";
|
||||
|
@ -1023,7 +1015,7 @@ sub update_record(){
|
|||
$set .= " $key='$value',";
|
||||
}
|
||||
}
|
||||
if($key =~ /^(barcode|contentadr_id|int\d+|time\d+|owner|owner_end|start_at\d+|end_at\d+)$/){
|
||||
if($key =~ /^(barcode|int\d+|time\d+|owner|owner_end|start_at\d+|end_at\d+)$/){
|
||||
$value =~ s/,/\./ if($value);
|
||||
if($key =~ /time\d+|start_at\d+|end_at\d+/ && $value && $value =~ /\d+:\d+/){#azn time format
|
||||
$set .= " $key='$value',";
|
||||
|
@ -1129,16 +1121,8 @@ sub insert_contentoid {
|
|||
foreach my $key (keys(%$insert)){
|
||||
$insert->{$key} =~ s/^\s//g if($insert->{$key});
|
||||
$insert->{$key} =~ s/\s$//g if($insert->{$key});
|
||||
#because of time format without of looks_like_number
|
||||
if($varenv{systype} && $varenv{systype} eq "azn" && $insert->{table} eq "contenttverpos" && $key =~ /start_at|end_at|int/){
|
||||
$columns .= "$key,";
|
||||
if(!$insert->{$key} || $insert->{$key} eq "null"){
|
||||
$values .= "null,";
|
||||
}else{
|
||||
$values .= "'$insert->{$key}',";
|
||||
}
|
||||
}
|
||||
elsif($key =~ /^c_id|ct_name|barcode|txt|int|time|owner|byte/ && ($insert->{$key} || looks_like_number($insert->{$key}))){
|
||||
|
||||
if($key =~ /^c_id|ct_name|barcode|txt|int|time|owner|byte/ && ($insert->{$key} || looks_like_number($insert->{$key}))){
|
||||
$columns .= "$key,";
|
||||
if($key =~ /_id|barcode|int|owner/ && !looks_like_number($insert->{$key})){
|
||||
$values .= "null,";
|
||||
|
@ -1212,6 +1196,7 @@ sub collect_transpos {
|
|||
my $self = shift;
|
||||
my $dbh = shift || $dbh_intern;
|
||||
my $search = shift;
|
||||
my $messaging = shift || 0;
|
||||
|
||||
$search->{offset} = 0 if(!$search->{offset});
|
||||
|
||||
|
@ -1235,9 +1220,9 @@ sub collect_transpos {
|
|||
$where .= " and (cp.$key = $search->{$key} OR cp.owner_end = $search->{$key})" if($key eq "owner" && looks_like_number($search->{$key}));
|
||||
$where .= " and (cp.$key is $search->{$key} OR cp.$key = 0)" if($key eq "int34" && $search->{$key} eq "null");
|
||||
$where .= " and cp.$key ilike '%$search->{$key}%'" if($key eq "txt23" && $search->{$key});
|
||||
#logs,debug,agent,HW
|
||||
#debug,log,device,HW
|
||||
if($key eq "txt24" && $search->{$key}){
|
||||
$where .= " and (cp.txt24 ilike '%$search->{txt24}%' OR cp.txt25 ilike '%$search->{txt24}%' OR cp.txt26 ilike '%$search->{txt24}%' OR cp.txt27 ilike '%$search->{txt24}%' OR cp.txt28 ilike '%$search->{txt24}%' OR cp.txt29 ilike '%$search->{txt24}%')";
|
||||
$where .= " and (cp.txt24 ilike '%$search->{txt24}%' OR cp.txt25 ilike '%$search->{txt24}%' OR cp.txt26 ilike '%$search->{txt24}%' OR cp.txt21 ilike '%$search->{txt24}%' OR cp.txt27 ilike '%$search->{txt24}%' OR cp.txt28 ilike '%$search->{txt24}%' OR cp.txt29 ilike '%$search->{txt24}%')";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1249,7 +1234,11 @@ sub collect_transpos {
|
|||
}
|
||||
|
||||
$where .= " ORDER BY cp.c_id DESC LIMIT $search->{limit} OFFSET $search->{offset}" if($search->{limit});
|
||||
my $sql = "SELECT cp.*,ct.txt07 AS phone,ct.txt08 AS email,ct.txt11 AS lang from $search->{table} cp, contenttrans ct $where";
|
||||
my $sql = "SELECT cp.* from $search->{table} cp, contenttrans ct $where";
|
||||
#for system messaging
|
||||
if($messaging){
|
||||
$sql = "SELECT cp.*,ct.txt07 AS phone,ct.txt08 AS email,ct.txt11 AS lang from $search->{table} cp, contenttrans ct $where";
|
||||
}
|
||||
my $sth = $dbh->prepare($sql);
|
||||
my $rc = $sth->execute();
|
||||
my $ct = $sth->fetchall_hashref("c_id");
|
||||
|
@ -1600,15 +1589,15 @@ sub insert_contenttrans(){
|
|||
my $ctadr = shift;
|
||||
my $main_id = shift;
|
||||
my $tpl_id = shift;
|
||||
my $invoice_nr = shift || "----";
|
||||
my $invoice_nr = shift || 0;
|
||||
my $owner = shift || 0;
|
||||
|
||||
my $doc_name = "Rechnung";
|
||||
$doc_name = "Tagesabschluss" if($tpl_id == 209);
|
||||
$doc_name = "Prepaid Account" if($tpl_id == 219);
|
||||
$owner="199" if(!$owner);
|
||||
#int10 will be substituted by ca_id.
|
||||
#keep in mind int10 will be mainly used by Prelogic and Printpreview, thats because we save it also
|
||||
my $sth = $dbh->prepare("INSERT INTO contenttrans (ct_name,txt00,ca_id,int10,txt02,txt01,txt03,txt06,txt07,txt08,txt10,txt11,owner,itime) VALUES('$invoice_nr','$doc_name','$ctadr->{c_id}','$ctadr->{c_id}','$ctadr->{txt02}','$ctadr->{txt01}','$ctadr->{txt03}','$ctadr->{txt06}','$ctadr->{txt07}','$ctadr->{txt08}','$ctadr->{txt10}','$ctadr->{txt11}','$owner','now()') RETURNING c_id");
|
||||
my $sth = $dbh->prepare("INSERT INTO contenttrans (ct_name,txt00,int10,txt02,txt01,txt03,txt06,txt07,txt08,txt10,txt11,owner,itime) VALUES('$invoice_nr','$doc_name','$ctadr->{c_id}','$ctadr->{txt02}','$ctadr->{txt01}','$ctadr->{txt03}','$ctadr->{txt06}','$ctadr->{txt07}','$ctadr->{txt08}','$ctadr->{txt10}','$ctadr->{txt11}','$owner','now()') RETURNING c_id");
|
||||
|
||||
my $rows = $sth->execute();
|
||||
my $last_id;
|
||||
|
@ -1928,4 +1917,21 @@ sub count_content(){
|
|||
return $rows;
|
||||
}
|
||||
|
||||
#close transactions by close_trans alias Tagesabschluss
|
||||
sub update_close_transactions {
|
||||
my $self = shift;
|
||||
my $dbh = shift || $dbh_intern;
|
||||
my $close_ref = shift;
|
||||
|
||||
#close transactions int11 close_trans reference c_id
|
||||
my $sth = $dbh->prepare("UPDATE $close_ref->{table} SET close_time='now()',int11=$close_ref->{close_id} where c_id IN (SELECT ct.c_id from $close_ref->{table} ct, relation rel where ct.c_id=rel.content_id and (ct.state ~ '[a-z]') and ct.int01 is not null and rel.main_id IN ($close_ref->{source_main_id}) and ct.close_time is null and ct.int14 is null)");
|
||||
my $rows = $sth->execute();
|
||||
|
||||
#move/set to journal
|
||||
$sth = $dbh->prepare("UPDATE relation SET main_id=$close_ref->{main_id}, template_id=$close_ref->{template_id} where template_id=$close_ref->{source_template_id} and content_id IN (SELECT ct.c_id from $close_ref->{table} ct, relation rel where ct.c_id=rel.content_id and (ct.state ~ '[a-z]') and ct.int01 is not null and rel.main_id IN ($close_ref->{source_main_id}) and ct.int14 is null)");
|
||||
$rows = $sth->execute();
|
||||
|
||||
return $rows;
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
@ -20,7 +20,6 @@ use Scalar::Util qw(looks_like_number);
|
|||
|
||||
use Lib::Config;
|
||||
use Mod::Buttons;
|
||||
use Mod::Prelogic;
|
||||
use Lib::Mlogic;
|
||||
use Mod::Basework;
|
||||
use Mod::DBtank;
|
||||
|
@ -39,13 +38,12 @@ sub handler {
|
|||
my $cf = new Config;
|
||||
my $ml = new Mlogic;
|
||||
my $bw = new Basework;
|
||||
my $pre = new Prelogic;
|
||||
my $tk = new Shareework;
|
||||
my $dbt = new DBtank;
|
||||
my $apif = new APIfunc;
|
||||
my $but = new Buttons;
|
||||
my $pl = new Prelib;
|
||||
my $payone = new Payment;
|
||||
my $pay = new Payment;
|
||||
|
||||
my %varenv = $cf->envonline();
|
||||
my $netloc = $q->url(-base=>1);
|
||||
|
@ -353,7 +351,7 @@ sub handler {
|
|||
if($users_dms_primary->{u_id} && $users_dms_primary->{int02} == 2 && $users_dms->{u_id} && $users_dms->{int02} == 2){
|
||||
if($R::c_id && $R::base_edit eq "remove_chk4rel"){
|
||||
my $delete_key = "delete_adr";
|
||||
$return = "failure::Datensatz wirklich löschen. ::?base_edit=$delete_key\&exit_box2=1\&c_id=$R::c_id ::löschen";
|
||||
$feedb->{message} = "failure::Datensatz wirklich löschen. ::?base_edit=$delete_key\&exit_box2=1\&c_id=$R::c_id ::löschen";
|
||||
}elsif($R::c_id && $R::base_edit eq "delete_adr"){
|
||||
$return = $tk->delete_account($R::c_id,$users_dms->{u_id});
|
||||
}elsif($R::c_id && $R::base_edit eq "save_adr"){
|
||||
|
@ -448,16 +446,36 @@ sub handler {
|
|||
|
||||
if($users_dms_primary->{u_id} && $users_dms_primary->{int03} >= 1 && $users_dms->{u_id} && $users_dms->{int03} >= 1 && $R::ct_trans eq "open"){#DMS Faktura read
|
||||
$dbt->update_one($dbh,$update_users,"c_id4trans=$R::c_id4trans,tpl_id4trans=$R::tpl_id4trans") if(looks_like_number($R::c_id4trans) && looks_like_number($R::tpl_id4trans));
|
||||
$users_dms = $dbt->select_users($dbh,$users_sharee->{c_id},"and cookie='$coo'");
|
||||
}
|
||||
if($users_dms_primary->{u_id} && $users_dms_primary->{int03} == 2 && $users_dms->{u_id} && $users_dms->{int03} == 2){#DMS Faktura rw
|
||||
#DMS Faktura rw
|
||||
elsif($users_dms_primary->{u_id} && $users_dms_primary->{int03} == 2 && $users_dms->{u_id} && $users_dms->{int03} == 2){
|
||||
$dbt->update_one($dbh,$update_users,"c_id4trans=$R::c_id4trans,tpl_id4trans=$R::tpl_id4trans") if(looks_like_number($R::c_id4trans) && looks_like_number($R::tpl_id4trans));
|
||||
if($R::ct_trans =~ /set_workflow2invoice|set_workflow2storno/){
|
||||
$users_dms = $dbt->select_users($dbh,$users_sharee->{c_id},"and cookie='$coo'");
|
||||
|
||||
if($R::ct_trans eq "new_trans" && $node_meta->{main_id} && $node_meta->{main_id} >= 200000){
|
||||
$feedb = $pl->new_contenttrans($q,$users_dms,$node_meta);
|
||||
$dbt->update_one($dbh,$update_users,"c_id4trans=$feedb->{c_id},tpl_id4trans=$feedb->{template_id}") if(looks_like_number($feedb->{c_id}) && looks_like_number($feedb->{template_id}));
|
||||
$users_dms = $dbt->select_users($dbh,$users_sharee->{c_id},"and cookie='$coo'");
|
||||
}
|
||||
elsif($R::ct_trans =~ /set_workflow2invoice|set_workflow2storno/){
|
||||
$return = $pl->set_workflow($q,$users_dms,$R::c_id4trans,$R::set_main_id4workflow) if(looks_like_number($R::c_id4trans) && looks_like_number($R::tpl_id4trans) && looks_like_number($R::set_main_id4workflow));
|
||||
}elsif($R::ct_trans =~ /set_accounting2invoice/){
|
||||
}
|
||||
elsif($R::ct_trans =~ /set_accounting2invoice/){
|
||||
$return = $pl->set_accounting2invoice($q,$users_dms,$R::c_id4trans,$R::set_main_id4workflow) if(looks_like_number($R::c_id4trans) && looks_like_number($R::tpl_id4trans) && looks_like_number($R::set_main_id4workflow));
|
||||
}elsif($R::ct_trans =~ /save_text|save_adr/){
|
||||
}
|
||||
elsif($R::ct_trans =~ /save_text|save_adr/){
|
||||
$feedb = $pl->save_text2contenttrans($q,$users_dms,$R::c_id4trans) if(looks_like_number($R::c_id4trans));
|
||||
}
|
||||
elsif($R::c_id && $R::ct_trans eq "remove_chk4rel"){
|
||||
my $delete_key = "delete_trans";
|
||||
$feedb->{message} = "failure::Datensatz wirklich löschen. ::?ct_trans=$delete_key\&exit_box2=1\&c_id=$R::c_id ::löschen";
|
||||
}
|
||||
elsif($R::c_id && $R::ct_trans eq "delete_trans"){
|
||||
$feedb = $pl->delete_content($node_meta,$R::c_id);
|
||||
$dbt->update_one($dbh,$update_users,"c_id4trans=0,tpl_id4trans=0");
|
||||
$users_dms = $dbt->select_users($dbh,$users_sharee->{c_id},"and cookie='$coo'");
|
||||
}
|
||||
#not used because of attachement
|
||||
elsif($R::ct_trans =~ /email_generate/ && $R::c_id4trans && $R::email_select){
|
||||
#my $sendref = $pl->prepare_email(\%varenv,$R::c_id4trans,$R::email_select);
|
||||
|
@ -469,18 +487,31 @@ sub handler {
|
|||
my $ck4ex = "@R::ck4ex" || "";
|
||||
$return = $pl->operator_accounting($q,$users_dms,$users_sharee,$R::accounting_type,$ck4ex);
|
||||
}
|
||||
#on prepaid account
|
||||
elsif($R::ct_trans eq "save_pos" && $R::tpl_id4trans == 219 && $R::c_idpos){
|
||||
#position management in invoices
|
||||
elsif($R::trans2edit eq "transpos" && $R::select_part){
|
||||
$feedb = $pl->insert_contenttranspos($q,$users_dms->{u_id});
|
||||
}
|
||||
elsif($R::ct_trans eq "save_pos" && $R::tpl_id4trans =~ /218|219/ && $R::c_idpos){
|
||||
$feedb = $pl->save_contenttranspos($q,$R::c_idpos,$users_dms->{u_id});
|
||||
}
|
||||
#should do all else invoice text save , without positions and booking payment
|
||||
elsif($R::ct_trans || $R::set_state || $R::v_abschluss || $R::trans2edit){
|
||||
if($R::ct_trans !~ /_pos|open/ && looks_like_number($R::c_id4trans) && !$R::v_abschluss && !$R::trans2edit){
|
||||
$feedb = $pl->save_text2contenttrans($q,$users_dms,$R::c_id4trans);
|
||||
}
|
||||
#in future the prelogic modul should be disabled at all
|
||||
$return .= "|";
|
||||
$return .= $pre->preinit($q,$node_meta,$users_dms);
|
||||
elsif($R::ct_trans eq "delete_pos" && $R::c_idpos){
|
||||
$feedb = $pl->delete_contenttranspos($q,$R::c_idpos,$users_dms->{u_id});
|
||||
}
|
||||
elsif($R::set_state && $R::c_id4trans){
|
||||
$feedb = $pay->book_payment($q,\%varenv,$node_meta,$users_dms);
|
||||
}
|
||||
elsif($R::print_pdfview && $R::c_id4trans){
|
||||
$feedb = $pay->print_pdf($q,\%varenv,$node_meta,$users_dms,$feedb);
|
||||
}
|
||||
elsif($R::send_invoice_cms && $R::cms_message_key && $R::c_id4trans){
|
||||
$feedb = $pay->send_invoice_cms($q,\%varenv,$node_meta,$users_dms,$feedb);
|
||||
}
|
||||
elsif($R::close_trans){
|
||||
$feedb = $pay->close_transactions($q,\%varenv,$node_meta,$users_dms);
|
||||
if($feedb->{u_rows}){
|
||||
print redirect("$varenv{wwwhost}/DMS/Faktura/Verkaufsjournal?redirected=1");
|
||||
exit 0;
|
||||
}
|
||||
}
|
||||
}elsif($R::ct_trans){
|
||||
$feedb->{message} = "failure::Abbruch. Schreibender Zugriff \"Faktura\" verweigert.";
|
||||
|
@ -495,7 +526,7 @@ sub handler {
|
|||
|
||||
#DMS insert part or fee
|
||||
if($node_meta->{ct_table} eq "contenttranspos" && $R::insert_contenttranspos){
|
||||
$feedb = $pl->insert_contenttranspos($q,$R::cc_id,$R::ca_id,$R::ct_id,$users_dms->{u_id});
|
||||
$feedb = $pl->insert_contenttranspos($q,$users_dms->{u_id});
|
||||
}
|
||||
|
||||
$users_dms = $dbt->select_users($dbh,$users_dms->{u_id},"");#just to get update after save
|
||||
|
@ -562,7 +593,7 @@ sub handler {
|
|||
owner => $aowner,
|
||||
c_id => $users_sharee->{c_id}
|
||||
};
|
||||
my $vde_on_fail = $users_sharee->{int12} || 3;#keep last or set 3
|
||||
my $vde_on_fail = $users_sharee->{int12} || 1;#keep last or set 1
|
||||
|
||||
#SEPA, done in payone Payment
|
||||
#CC
|
||||
|
@ -767,7 +798,11 @@ sub handler {
|
|||
print redirect("$varenv{wwwhost}/$varenv{mandant}/Account/$varenv{accounting_3}?cum=2\&sharee_edit=send_email_send_sms$session_and\&$returnwww");#send both
|
||||
exit 0;
|
||||
}
|
||||
elsif($payable_check){
|
||||
elsif($payable_check && $payable_check == 1){
|
||||
print redirect("$varenv{wwwhost}/$varenv{mandant}/Account/$varenv{accounting_2}?cum=2-$payable_check$session_and\&$returnwww");
|
||||
exit 0;
|
||||
}
|
||||
elsif($payable_check && $payable_check == 2){
|
||||
print redirect("$varenv{wwwhost}/$varenv{mandant}/Account/$varenv{accounting_3}?cum=2-$payable_check$session_and\&$returnwww");
|
||||
exit 0;
|
||||
}
|
||||
|
|
|
@ -38,17 +38,359 @@ sub new {
|
|||
return $self;
|
||||
}
|
||||
|
||||
my $ua = LWP::UserAgent->new(
|
||||
ssl_opts => {
|
||||
SSL_version => 'TLSv12:!SSLv2:!SSLv3:!TLSv1:!TLSv11',
|
||||
#book_payment is like payone_capture with additional payment-types
|
||||
sub book_payment {
|
||||
my $self = shift;
|
||||
my $q = shift;
|
||||
my $varenv = shift;
|
||||
my $node_meta = shift;
|
||||
my $users_dms = shift;
|
||||
|
||||
$q->import_names('R');
|
||||
my $dbh = "";
|
||||
my $feedb = {
|
||||
u_rows => 0,
|
||||
message => "",
|
||||
exit_code => 1,
|
||||
};
|
||||
|
||||
my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime;
|
||||
open(EMA, ">> $varenv->{logdir}/book_payment.log");
|
||||
print EMA "\n*** $now_dt invoice pdf print c_id4trans:$R::c_id4trans\n" . Dumper($q) . "\n";
|
||||
|
||||
my $pref_ctt = {
|
||||
table => "contenttrans",
|
||||
fetch => "one",
|
||||
c_id => $R::c_id4trans,
|
||||
};
|
||||
my $ctt = { c_id => 0 };
|
||||
$ctt = $dbt->fetch_record($dbh,$pref_ctt) if($R::c_id4trans);
|
||||
|
||||
my $update_ctt = {
|
||||
table => "contenttrans",
|
||||
mtime => "now()",
|
||||
owner => $users_dms->{u_id},
|
||||
};
|
||||
|
||||
my $node_faktura = $dbt->get_node($dbh,$dbt->{shareedms_conf}->{faktura});
|
||||
#invoice number counter. Take last number from node.invoice_nr and increment it
|
||||
if($node_faktura->{invoice_nr} > 0 && $ctt->{c_id} && $ctt->{ct_name} !~ /\d/){
|
||||
my $nextNr = $node_faktura->{invoice_nr};
|
||||
$update_ctt->{ct_name} = "$nextNr";
|
||||
$update_ctt->{barcode} = "$nextNr";
|
||||
my $update_node = {
|
||||
table => "nodes",
|
||||
main_id => "$dbt->{shareedms_conf}->{faktura}",
|
||||
change => "no_time",
|
||||
};
|
||||
my $invoice_nr = $node_faktura->{invoice_nr} + 1;
|
||||
$dbt->update_one($dbh,$update_node,"invoice_nr='$invoice_nr'");
|
||||
}
|
||||
|
||||
print EMA "Used invoice c_id:$ctt->{c_id} with invoice nr:$ctt->{ct_name} OR nextNr: $update_ctt->{ct_name}\n";
|
||||
|
||||
#Set sum values and book payment depending by selected payment-type "state"
|
||||
if($ctt->{c_id} && !$ctt->{close_time}){
|
||||
|
||||
my $pref_adr = {
|
||||
table => "contentadr",
|
||||
fetch => "one",
|
||||
c_id => $ctt->{int10},
|
||||
};
|
||||
my $ctadr = { c_id => 0 };
|
||||
$ctadr = $dbt->fetch_tablerecord($dbh,$pref_adr) if($ctt->{int10});
|
||||
print EMA "Used adr c_id:$ctadr->{c_id} by ctt.int10: $ctt->{int10}\n";
|
||||
|
||||
my $sum_paid = "null";
|
||||
my $sum_operatorcredit = "null";
|
||||
my $sumgeb_teil = "null";
|
||||
my $sumgeb_bank = "null";
|
||||
my $state = $R::state || "";
|
||||
$update_ctt->{state} = "$state";
|
||||
$update_ctt->{int14} = 2;#set OPOS
|
||||
|
||||
if($R::sum_paid){
|
||||
$sum_paid = $R::sum_paid;
|
||||
$sum_paid =~ s/,/\./;
|
||||
$update_ctt->{int01} = $sum_paid;
|
||||
}
|
||||
);
|
||||
$ua->agent("sharee payone POST API");
|
||||
|
||||
if($R::sum_operatorcredit){
|
||||
$sum_operatorcredit = $R::sum_operatorcredit;
|
||||
$sum_operatorcredit =~ s/,/\./;
|
||||
$update_ctt->{int02} = $sum_operatorcredit;
|
||||
$update_ctt->{int14} = "null";
|
||||
}
|
||||
|
||||
if($R::sumgeb_teil){
|
||||
$sumgeb_teil = $R::sumgeb_teil;
|
||||
$sumgeb_teil =~ s/,/\./;
|
||||
$update_ctt->{int08} = $sumgeb_teil;
|
||||
}
|
||||
|
||||
if($R::sumgeb_bank){
|
||||
$sumgeb_bank = $R::sumgeb_bank;
|
||||
$sumgeb_bank =~ s/,/\./;
|
||||
$update_ctt->{int07} = $sumgeb_bank;
|
||||
}
|
||||
|
||||
$feedb->{u_rows} = $dbt->update_record($dbh,$update_ctt,$ctt);
|
||||
|
||||
#$R::state alias payment-type
|
||||
if($R::state =~ /payone/){
|
||||
|
||||
if(!$ctt->{txt16}){
|
||||
#preauth
|
||||
if($ctadr->{ct_name} =~ /\w{2}-\d+/){
|
||||
my $payoneret = $self->preauthorizationSEPA_main($varenv,$ctadr,$ctt,$users_dms->{u_id});
|
||||
sleep 2;
|
||||
}elsif(length($ctadr->{ct_name}) >= 19){
|
||||
my $payoneret = $self->preauthorizationCC_main($varenv,$ctadr,$ctt,$users_dms->{u_id});
|
||||
sleep 2;
|
||||
}
|
||||
$ctt = $dbt->fetch_record($dbh,$pref_ctt);#re-read values
|
||||
|
||||
#SEPA capture
|
||||
if($ctt->{txt16} && $R::state =~ /SEPA/){#SEPA
|
||||
my $payoneret = $self->captureSEPA_main($varenv,$ctadr,$ctt,$users_dms->{u_id});
|
||||
}
|
||||
#CC capture
|
||||
elsif($ctt->{txt16} && $R::state =~ /Kreditkarte/){#CC
|
||||
my $payoneret = $self->captureCC_main($varenv,$ctadr,$ctt,$users_dms->{u_id});
|
||||
}
|
||||
else{
|
||||
$feedb->{message} = "failure::Achtung, die payone Vorautorisierung hat keine TXID geliefert. Der Geldeinzug war somit nicht möglich (TXID:$ctt->{txt16} && $R::state).";
|
||||
}
|
||||
}else{
|
||||
$feedb->{message} = "failure::Abbruch, payone Geldeinzug nicht ausgeführt weil TXID bereits vorhanden. Hatte der Einzug bereits stattgefunden?";
|
||||
}
|
||||
|
||||
}
|
||||
elsif($ctt->{txt00} eq "Storno" || $state eq "Zahlungsausfall"){
|
||||
$update_ctt->{int14} = "null";
|
||||
$update_ctt->{pay_time} = "now()";
|
||||
$feedb->{u_rows} = $dbt->update_record($dbh,$update_ctt,$ctt);
|
||||
#delete OPOS at all
|
||||
#$db->updater($table,"barcode",$ctt->{barcode},"int14","null","","","","","");
|
||||
$dbt->update_one($dbh,$update_ctt,"int14=null");
|
||||
}
|
||||
elsif($state eq "fehlgeschlagener Einzug"){
|
||||
$update_ctt->{int14} = "null";
|
||||
$update_ctt->{pay_time} = "now()";
|
||||
$feedb->{u_rows} = $dbt->update_record($dbh,$update_ctt,$ctt);
|
||||
}
|
||||
elsif($ctt->{txt00} eq "Rechnung" && $R::sum_paid <= 0){
|
||||
$update_ctt->{int14} = "null";
|
||||
$update_ctt->{pay_time} = "now()";
|
||||
$feedb->{u_rows} = $dbt->update_record($dbh,$update_ctt,$ctt);
|
||||
}
|
||||
|
||||
$ctt = $dbt->fetch_record($dbh,$pref_ctt);#re-read values
|
||||
|
||||
#print pdf and messaging
|
||||
if($ctt->{c_id}){
|
||||
my $praefix = "$ctt->{txt00}-$varenv->{praefix}";
|
||||
my $lang_ctt = $ctt->{txt11} || "de";
|
||||
$varenv->{cms} = $dbt->fetch_cms($dbh,{ lang => $lang_ctt });
|
||||
my $sum_paid = $R::sum_paid || 0;
|
||||
$sum_paid =~ s/,/\./;
|
||||
|
||||
#print pdf
|
||||
if($R::print_pdf){
|
||||
$feedb = $self->print_pdf($q,$varenv,$node_meta,$users_dms,$feedb);
|
||||
}
|
||||
|
||||
#send_invoice after book payment
|
||||
if(-f "$varenv->{basedir}/pdfinvoice/$praefix-$ctt->{ct_name}.pdf" && (($R::set_state eq "buchen" && $R::send_invoice && $ctt->{int01} && $ctt->{int01} != 0) || ($R::send_invoice_again))){
|
||||
|
||||
my $cms_message_key = "email-invoice";
|
||||
if(!$varenv->{cms}->{$cms_message_key}->{txt}){
|
||||
$feedb->{message} = "failure::Achtung, CMS-Text '$cms_message_key' ist nicht vorhanden. Es wurde keine eMail versandt!";
|
||||
}elsif($sum_paid != $ctt->{int01}){
|
||||
$feedb->{message} = "failure::Achtung, die Summe der Positionen $sum_paid enstpricht nicht der Rechnung-Summe $ctt->{int01}. Die Rechnung muss vor dem eMail versand erst gebucht werden!";
|
||||
}else{
|
||||
system("$dbt->{copri_conf}->{basedir}/$varenv->{syshost}/src/scripts/mailTransportcms.pl '$varenv->{syshost}' 'send_invoice' '$ctt->{int10}' '$ctt->{c_id}' '' '$cms_message_key' '1'");
|
||||
print EMA "---> send_invoice $praefix-$ctt->{ct_name}.pdf email command: $dbt->{copri_conf}->{basedir}/$varenv->{syshost}/src/scripts/mailTransportcms.pl '$varenv->{syshost}' 'send_invoice' '$ctt->{int10}' '$ctt->{c_id}' '' '$cms_message_key' '1'\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}#end print pdf and messaging
|
||||
|
||||
}else{
|
||||
$feedb->{message} = "failure::Buchung abbgebrochen. Die Rechnung ist bereits abgeschlossen oder nicht vorhanden ($ctt->{c_id} > 0 && $ctt->{ct_name} && !$ctt->{close_time})";
|
||||
}
|
||||
|
||||
close EMA;
|
||||
return $feedb;
|
||||
}#end book_payment
|
||||
|
||||
|
||||
#ported from payone_post.pl
|
||||
#SEPA
|
||||
#Request "managemandate"
|
||||
#print pdf
|
||||
sub print_pdf {
|
||||
my $self = shift;
|
||||
my $q = shift;
|
||||
my $varenv = shift;
|
||||
my $node_meta = shift;
|
||||
my $users_dms = shift;
|
||||
my $feedb = shift;
|
||||
|
||||
$q->import_names('R');
|
||||
my $dbh = "";
|
||||
|
||||
my $pref_ctt = {
|
||||
table => "contenttrans",
|
||||
fetch => "one",
|
||||
c_id => $R::c_id4trans,
|
||||
};
|
||||
my $ctt = { c_id => 0 };
|
||||
$ctt = $dbt->fetch_record($dbh,$pref_ctt) if($R::c_id4trans);
|
||||
|
||||
open(EMA, ">> $varenv->{logdir}/copri-print.log");
|
||||
if($ctt->{c_id}){
|
||||
|
||||
my $api_file = "/var/www/copri4/shareeconf/apikeys.cfg";
|
||||
my $aconf = Config::General->new($api_file);
|
||||
my %apikeyconf = $aconf->getall;
|
||||
|
||||
my $mandant_id = 100002;
|
||||
my $print_return = "";
|
||||
my $lang_ctt = $ctt->{txt11} || "de";
|
||||
my $praefix = "$ctt->{txt00}-$varenv->{praefix}";
|
||||
|
||||
my $psize="A4";
|
||||
my $topdf = "$varenv->{basedir}/src/wkhtmltopdf-amd64";
|
||||
|
||||
#without system() because we have to wait until PDF is ready
|
||||
$print_return = `$topdf --page-size $psize "$varenv->{wwwhost}/Printpreview?printer_id=PDF\&mandant_main_id=$mandant_id\&main_id=$node_meta->{main_id}\&ct_name2print=$ctt->{ct_name}\&c_id4trans=$ctt->{c_id}\&u_id=$users_dms->{u_id}\&pkey=$apikeyconf{pdfprinter}->{pkey}" "$varenv->{pdf}/$praefix-$ctt->{ct_name}.pdf" 2>&1`;
|
||||
$feedb->{exit_code} = $?;
|
||||
|
||||
my $filesize = -s "$varenv->{pdf}/$praefix-$ctt->{ct_name}.pdf";
|
||||
print EMA "$topdf --page-size $psize $varenv->{wwwhost}/Printpreview?printer_id=PDF\&mandant_main_id=$mandant_id\&main_id=$node_meta->{main_id}\&ct_name2print=$ctt->{ct_name}\&c_id4trans=$ctt->{c_id}\&u_id=$users_dms->{u_id}\&pkey=$apikeyconf{pdfprinter}->{pkey} $varenv->{pdf}/$praefix-$ctt->{ct_name}.pdf\nreturn: $print_return\nfilesize: $filesize\nexit_code: $feedb->{exit_code}\n\n";
|
||||
|
||||
if($R::print_pdfview){
|
||||
if( -f "$varenv->{basedir}/pdf/$praefix-$ctt->{ct_name}.pdf"){
|
||||
print "<script type=\"text/javascript\">window.open('$varenv->{wwwhost}/FileOut?file=$praefix-$ctt->{ct_name}.pdf');</script>";
|
||||
}else{
|
||||
$feedb->{message} = "failure::PDF konnte nicht generiert werden, bitte Info an: admin\@sharee.bike\n $varenv->{wwwhost}/pdf/$praefix-$ctt->{ct_name}.pdf";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
close EMA;
|
||||
return $feedb;
|
||||
}#end print_pdf
|
||||
|
||||
#send_invoice_cms for variable ticket-mailing
|
||||
sub send_invoice_cms {
|
||||
my $self = shift;
|
||||
my $q = shift;
|
||||
my $varenv = shift;
|
||||
my $node_meta = shift;
|
||||
my $users_dms = shift;
|
||||
my $feedb = shift;
|
||||
$q->import_names('R');
|
||||
my $dbh = "";
|
||||
|
||||
my $pref_ctt = {
|
||||
table => "contenttrans",
|
||||
fetch => "one",
|
||||
c_id => $R::c_id4trans,
|
||||
};
|
||||
my $ctt = { c_id => 0 };
|
||||
$ctt = $dbt->fetch_record($dbh,$pref_ctt) if($R::c_id4trans);
|
||||
|
||||
if($ctt->{c_id}){
|
||||
my $praefix = "$ctt->{txt00}-$varenv->{praefix}";
|
||||
my $lang_ctt = $ctt->{txt11} || "de";
|
||||
$varenv->{cms} = $dbt->fetch_cms($dbh,{ lang => $lang_ctt });
|
||||
my $sum_paid = $R::sum_paid || 0;
|
||||
$sum_paid =~ s/,/\./;
|
||||
|
||||
#print pdf
|
||||
if($R::print_pdf){
|
||||
$feedb = $self->print_pdf($q,$varenv,$node_meta,$users_dms,$feedb);
|
||||
}
|
||||
|
||||
my $cms_message_key = $R::cms_message_key;
|
||||
if(!$varenv->{cms}->{$cms_message_key}->{txt}){
|
||||
$feedb->{message} = "failure::Achtung, CMS-Text '$cms_message_key' ist nicht vorhanden. Es wurde keine eMail versandt!";
|
||||
}if($sum_paid != $ctt->{int01}){
|
||||
$feedb->{message} = "failure::Achtung, die Summe der Positionen $sum_paid enstpricht nicht der Rechnung-Summe $ctt->{int01}. Die Rechnung muss vor dem eMail versand erst gebucht werden!";
|
||||
}else{
|
||||
my $with_pdf = "";
|
||||
$with_pdf = 1 if(-f "$varenv->{basedir}/pdfinvoice/$praefix-$ctt->{ct_name}.pdf" && $R::print_pdf);
|
||||
system("$dbt->{copri_conf}->{basedir}/$varenv->{syshost}/src/scripts/mailTransportcms.pl '$varenv->{syshost}' 'send_invoice_cms' '$ctt->{int10}' '$ctt->{c_id}' '' '$cms_message_key' '$with_pdf'");
|
||||
}
|
||||
}
|
||||
|
||||
return $feedb;
|
||||
}#end send_invoice_cms
|
||||
|
||||
|
||||
#Tagesabschluss
|
||||
sub close_transactions {
|
||||
my $self = shift;
|
||||
my $q = shift;
|
||||
my $varenv = shift;
|
||||
my $node_meta = shift;
|
||||
my $users_dms = shift;
|
||||
|
||||
$q->import_names('R');
|
||||
my $dbh = "";
|
||||
my $feedb = {
|
||||
u_rows => 0,
|
||||
message => "",
|
||||
};
|
||||
|
||||
#could be Kunden-Faktura 100002
|
||||
my $adr_close = {
|
||||
c_id => 3,
|
||||
txt01 => '',
|
||||
txt02 => '',
|
||||
txt03 => '',
|
||||
txt06 => '',
|
||||
txt07 => '',
|
||||
txt08 => '',
|
||||
txt10 => '',
|
||||
txt11 => '',
|
||||
};
|
||||
|
||||
my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime;
|
||||
open(EMA, ">> $varenv->{logdir}/close_transactions.log");
|
||||
print EMA "\n*** $now_dt close_transactions\n" . Dumper($q) . "\n";
|
||||
|
||||
my $journal_id = "300011";
|
||||
my $journal_tpl = "209";
|
||||
my $ct_id = $dbt->insert_contenttrans($dbh,$adr_close,$journal_id,$journal_tpl,"",$users_dms->{u_id});
|
||||
my $pref = {
|
||||
table => "contenttrans",
|
||||
fetch => "one",
|
||||
main_id => $journal_id,
|
||||
template_id => $journal_tpl,
|
||||
c_id => $ct_id,
|
||||
};
|
||||
|
||||
my $ctt = { c_id => 0 };
|
||||
$ctt = $dbt->fetch_record($dbh,$pref) if($pref->{c_id});
|
||||
if($ctt->{c_id}){
|
||||
my $pref_close = {
|
||||
table => "contenttrans",
|
||||
close_id => $ctt->{c_id},
|
||||
main_id => $journal_id,
|
||||
template_id => $journal_tpl,
|
||||
source_main_id => '300008,300009,300011',#Rechnung,Storno,Verkaufsjournal
|
||||
source_template_id => 218,
|
||||
};
|
||||
$feedb->{u_rows} += $dbt->update_close_transactions($dbh,$pref_close);
|
||||
}
|
||||
|
||||
close EMA;
|
||||
return $feedb;
|
||||
}#end close_transactions
|
||||
|
||||
|
||||
#SEPA request "managemandate"
|
||||
sub managemandate_main {
|
||||
my $self = shift;
|
||||
my $varenv = shift;
|
||||
|
@ -95,7 +437,7 @@ sub managemandate_main {
|
|||
$payoneret = $self->rpc("managemandate",$varenv,$request,$ctadr,$ctt,$owner) if($request);
|
||||
}
|
||||
return $payoneret;
|
||||
}
|
||||
}#end SEPA request "managemandate"
|
||||
|
||||
|
||||
#Request "preauthorizationSEPA"
|
||||
|
@ -422,6 +764,13 @@ sub rpc {
|
|||
my $payoneret = "";
|
||||
my $dbh = "";
|
||||
|
||||
my $ua = LWP::UserAgent->new(
|
||||
ssl_opts => {
|
||||
SSL_version => 'TLSv12:!SSLv2:!SSLv3:!TLSv1:!TLSv11',
|
||||
}
|
||||
);
|
||||
$ua->agent("sharee payone POST API");
|
||||
|
||||
#payone API URL
|
||||
my $payoneLive = 1;
|
||||
my $httpReqServer = "https://api.pay1.de/post-gateway/";
|
||||
|
@ -569,7 +918,7 @@ sub rpc {
|
|||
print FILE "payone RPC end\n\n" if($debug);
|
||||
|
||||
close(FILE) if($debug);
|
||||
#set contentadr owner and mtime only if Vde or payone-return will be set by payone id's
|
||||
#set contentadr owner and mtime only if vde or payone-return will be set by payone id's
|
||||
if((($update_adr->{int12} && $update_adr->{int12} > 0) || $update_adr->{txt28}) && ($owner == 178 || $owner == 179)){
|
||||
$update_adr->{owner} = "$owner";
|
||||
$update_adr->{mtime} = "now()";
|
||||
|
@ -616,12 +965,11 @@ sub pdfmandat {
|
|||
}
|
||||
close EMA;
|
||||
return "$varenv->{basedir}/pdfinvoice/SEPA-Lastschriftmandat-$varenv->{dbname}-$ctadr->{ct_name}.pdf";
|
||||
}
|
||||
#end ported from payone_post.pl
|
||||
#
|
||||
}#end SEPA PDFGenerator
|
||||
|
||||
|
||||
#jused by payone_cron.pl
|
||||
sub payone_capture(){
|
||||
sub payone_capture {
|
||||
my $self = shift;
|
||||
my $varenv = shift;
|
||||
my $ctf = shift;
|
||||
|
@ -632,7 +980,6 @@ sub payone_capture(){
|
|||
|
||||
my $lang = "de";
|
||||
my $mandant_id = 100002;
|
||||
#my $main_id = 300008;#Rechnung
|
||||
my $main_id = $ctt->{main_id};
|
||||
my $retval = "";
|
||||
my $return_text = "";
|
||||
|
@ -649,10 +996,7 @@ sub payone_capture(){
|
|||
int14 => 2,
|
||||
};
|
||||
|
||||
|
||||
my $node_faktura = $dbt->get_node($dbh,$dbt->{shareedms_conf}->{faktura});
|
||||
my $node = $dbt->get_node($dbh,$main_id);#Rechnung node
|
||||
|
||||
if($node_faktura->{invoice_nr} > 0){
|
||||
if($ctt->{ct_name} !~ /\d/){
|
||||
my $nextNr = $node_faktura->{invoice_nr};
|
||||
|
|
|
@ -66,7 +66,7 @@ sub prepaid_request {
|
|||
fetch => "one",
|
||||
main_id => 300023,
|
||||
template_id => 219,#prepaid tpl
|
||||
ca_id => "$ctadr->{c_id}",
|
||||
int10 => "$ctadr->{c_id}",
|
||||
state => "is::null",
|
||||
close_time => "is::null",
|
||||
};
|
||||
|
@ -134,7 +134,7 @@ sub longterm_occupied {
|
|||
my $dt1 = DateTime->now(time_zone => "Europe/Berlin");
|
||||
|
||||
my $cttpos = { c_id => 0 };
|
||||
$cttpos = $dbt->collect_transpos($dbh,$search);
|
||||
$cttpos = $dbt->collect_transpos($dbh,$search,1);
|
||||
my $longterm_ctadr = {};
|
||||
my $posting = {
|
||||
78 => 'email',
|
||||
|
@ -295,6 +295,39 @@ sub new_content {
|
|||
return $feedb;
|
||||
}
|
||||
|
||||
|
||||
#insert new_trans
|
||||
sub new_contenttrans {
|
||||
my $self = shift;
|
||||
my $q = shift;
|
||||
my $users_dms = shift;
|
||||
my $node_meta = shift;
|
||||
$q->import_names('R');
|
||||
my $dbh = "";
|
||||
my $feedb = { message => "" };
|
||||
|
||||
my $insert_ctt = {
|
||||
table => "$node_meta->{ct_table}",
|
||||
itime => 'now()',
|
||||
mtime => 'now()',
|
||||
owner => "$users_dms->{u_id}",
|
||||
ct_name => "---",
|
||||
template_id => "$node_meta->{template_id}",
|
||||
main_id => "$node_meta->{main_id}",
|
||||
txt00 => "$node_meta->{node_name}",
|
||||
};
|
||||
my $c_idnew = 0;
|
||||
$c_idnew = $dbt->insert_contentoid($dbh,$insert_ctt,"");
|
||||
|
||||
if($c_idnew){
|
||||
$feedb->{c_id} = $c_idnew;
|
||||
$feedb->{template_id} = $node_meta->{template_id};
|
||||
$feedb->{i_rows} = $i_rows;
|
||||
}
|
||||
return $feedb;
|
||||
}#end new_contenttrans
|
||||
|
||||
|
||||
#save content or contentuser
|
||||
sub save_content {
|
||||
my $self = shift;
|
||||
|
@ -510,7 +543,7 @@ sub save_text2contenttrans {
|
|||
$update_ctt->{$_} = "$valxx";
|
||||
}
|
||||
}
|
||||
elsif($_ =~ /int|time/){
|
||||
elsif($_ =~ /int|ca_id|time/){
|
||||
if(!$valxx){
|
||||
$update_ctt->{$_} = "null";
|
||||
}else{
|
||||
|
@ -547,56 +580,53 @@ sub save_text2contenttrans {
|
|||
sub insert_contenttranspos {
|
||||
my $self = shift;
|
||||
my $q = shift;
|
||||
my $cc_id = shift || "";#part
|
||||
my $ca_id = shift || "";#adr
|
||||
my $ct_id = shift || "";#invoice
|
||||
my $owner = shift || "";
|
||||
|
||||
$q->import_names('R');
|
||||
my $dbh = "";
|
||||
my $feedb = { message => "" };
|
||||
my $feedb = { i_rows => 0,
|
||||
pos_id => 0,
|
||||
message => "",
|
||||
};
|
||||
|
||||
if(looks_like_number($cc_id) && looks_like_number($ca_id) && looks_like_number($ct_id)){
|
||||
if((looks_like_number($R::c_id) || looks_like_number($R::json_select)) && looks_like_number($R::c_id4trans)){
|
||||
my $pref = {
|
||||
table => "contenttrans",
|
||||
table_pos => "contenttranspos",
|
||||
fetch => "one",
|
||||
template_id => "218",#Mietjournal tpl_id
|
||||
ct_id => $ct_id,
|
||||
"ct.state" => "is::null",
|
||||
};
|
||||
table => "contenttrans",
|
||||
fetch => "one",
|
||||
c_id => $R::c_id4trans,
|
||||
"ct.state" => "is::null",
|
||||
};
|
||||
|
||||
my $ctpos = { c_id => 0 };
|
||||
$ctpos = $dbt->collect_post($dbh,$pref);
|
||||
|
||||
if($ctpos->{c_id}){
|
||||
my $ctt = { c_id => 0 };
|
||||
$ctt = $dbt->fetch_tablerecord($dbh,$pref);
|
||||
|
||||
if($ctt->{c_id}){
|
||||
my $pref_cc = {
|
||||
table => "content",
|
||||
fetch => "one",
|
||||
template_id => "IN::(229)",
|
||||
c_id => $cc_id,
|
||||
};
|
||||
table => "content",
|
||||
fetch => "one",
|
||||
template_id => "IN::(224,229)",
|
||||
};
|
||||
|
||||
$pref_cc->{c_id} = $R::c_id if($R::c_id);
|
||||
$pref_cc->{barcode} = $R::json_select if($R::json_select);
|
||||
my $cc_part = { c_id => 0 };
|
||||
$cc_part = $dbt->fetch_record($dbh,$pref_cc);
|
||||
$cc_part = $dbt->fetch_record($dbh,$pref_cc) if($R::c_id || $R::json_select);
|
||||
|
||||
my $pref_ca = {
|
||||
table => "contentadr",
|
||||
fetch => "one",
|
||||
template_id => "202",
|
||||
c_id => "$ca_id",
|
||||
};
|
||||
my $pref_adr = {
|
||||
table => "contentadr",
|
||||
fetch => "one",
|
||||
c_id => "$ctt->{int10}",
|
||||
};
|
||||
my $ctadr = { c_id => 0 };
|
||||
$ctadr = $dbt->fetch_record($dbh,$pref_ca);
|
||||
$ctadr = $dbt->fetch_tablerecord($dbh,$pref_adr) if($ctt->{int10});
|
||||
|
||||
my $pos_id = 0;
|
||||
if($cc_part->{int02}){
|
||||
$pos_id = $dbt->insert_pos($dbh,$ct_id,$cc_part,"",$ctadr,"","",$cc_part->{barcode},"0",$owner,"");
|
||||
$feedb->{pos_id} = $dbt->insert_pos($dbh,$R::c_id4trans,$cc_part,"",$ctadr,"","",$cc_part->{barcode},"0",$owner,"");
|
||||
}else{
|
||||
$feedb->{message} = "failure::Fehler, VK Preis von Artikel Nr. $cc_part->{barcode} nicht definiert.";
|
||||
$feedb->{message} = "failure::Fehler, Artikel nicht vorhanden oder Preis nicht definiert.";
|
||||
}
|
||||
if($pos_id > 0){
|
||||
$i_rows += 1;
|
||||
if($feedb->{pos_id} > 0){
|
||||
$feedb->{i_rows} += 1;
|
||||
$dbt->update_content4comp($dbh,$cc_part->{c_id},"-","1");
|
||||
$feedb->{message} = "Artikel Nr. $cc_part->{barcode} erfolgreich hinzugefügt.";
|
||||
}
|
||||
|
@ -604,9 +634,8 @@ sub insert_contenttranspos {
|
|||
$feedb->{message} = "failure::Fehler, die Rechnung ist bereits gebucht. Das hinzufügen einer weiteren Rechnungsposition wird somit abgelehnt.";
|
||||
}
|
||||
}else{
|
||||
$feedb->{message} = "failure::Fehler, es fehlt mindestens ein Key! ($cc_id && $ca_id && $ct_id)";
|
||||
$feedb->{message} = "failure::Fehler, es fehlt mindestens ein Key! ($R::c_id && $R::c_id4trans)";
|
||||
}
|
||||
$feedb->{u_rows} = $u_rows;
|
||||
return $feedb;
|
||||
}#end insert_contenttranspos
|
||||
|
||||
|
@ -849,6 +878,21 @@ sub save_contenttranspos {
|
|||
return $feedb;
|
||||
}#end save_contenttranspos
|
||||
|
||||
#delete_contenttranspos
|
||||
sub delete_contenttranspos {
|
||||
my $self = shift;
|
||||
my $q = shift;
|
||||
my $c_id = shift;
|
||||
my $owner = shift;
|
||||
my $dbh = "";
|
||||
my $feedb = { d_rows => 0,
|
||||
message => "",
|
||||
};
|
||||
$feedb->{d_rows} = $dbt->delete_content($dbh,"contenttranspos",$c_id);
|
||||
return $feedb;
|
||||
}#end delete_contenttranspos
|
||||
|
||||
|
||||
#set Faktura workflow like Rechnung to Storno
|
||||
sub set_workflow {
|
||||
my $self = shift;
|
||||
|
@ -1578,11 +1622,17 @@ sub export_csv {
|
|||
my $node_meta = shift;
|
||||
my $users_dms = shift;
|
||||
my $ct4rel = shift || {};
|
||||
my $bike_nodes = shift || {};
|
||||
my $coo = shift || "";
|
||||
|
||||
my $time = time;
|
||||
my %varenv = $cf->envonline();
|
||||
my $table = $node_meta->{ct_table} || "content";
|
||||
my $scol = "c_id";
|
||||
if($users_dms->{"col_sort_$table"}){
|
||||
$scol = $users_dms->{"col_sort_$table"};
|
||||
}
|
||||
|
||||
my $feedb = { message => "" };
|
||||
$node_meta->{tpl_order} =~ s/txt06=[\w\s=]+,/byte01=Ilockit Token,/ if($node_meta->{tpl_id} == 205);
|
||||
my @tpl_order = split(/,/,$node_meta->{tpl_order});
|
||||
|
@ -1600,7 +1650,7 @@ sub export_csv {
|
|||
|
||||
|
||||
foreach my $id (sort {
|
||||
if($users_dms->{sort_updown} eq "down"){
|
||||
if($users_dms->{"sort_updown_$table"} eq "down"){
|
||||
if ($scol =~ /barcode|int/) {
|
||||
$ct4rel->{$b}->{$scol} <=> $ct4rel->{$a}->{$scol}
|
||||
}else{
|
||||
|
@ -1620,6 +1670,25 @@ sub export_csv {
|
|||
if($key =~ /byte/){
|
||||
my $K_int = unpack "H*", $ct4rel->{$id}->{$key};
|
||||
push @line, $K_int;
|
||||
}elsif($ct4rel->{$id}->{template_id} == 225 && $key eq "txt24"){
|
||||
my $flotten = "";
|
||||
foreach my $rid (sort { $bike_nodes->{$a}->{node_name} cmp $bike_nodes->{$b}->{node_name} } keys (%$bike_nodes)){
|
||||
$flotten .= "$bike_nodes->{$rid}->{node_name}\n" if($ct4rel->{$id}->{$key} =~ /$bike_nodes->{$rid}->{main_id}/);
|
||||
}
|
||||
push @line, $flotten;
|
||||
}elsif($ct4rel->{$id}->{template_id} == 225 && $key eq "txt25"){
|
||||
my %station_filter_hash = ();
|
||||
if($ct4rel->{$id}->{txt25} && $ct4rel->{$id}->{txt25} =~ /\d\s\d/){
|
||||
%station_filter_hash = map { $_ => 1 } split(/\s+/,$ct4rel->{$id}->{txt25});
|
||||
}elsif($ct4rel->{$id}->{txt25} && $ct4rel->{$id}->{txt25} =~ /(\d+)/){
|
||||
$station_filter_hash{$1} = 1;
|
||||
}
|
||||
my $station_filter = "";
|
||||
foreach my $type_id (keys (%station_filter_hash)){
|
||||
$station_filter .= "$dbt->{copri_conf}->{type_id}->{$type_id}\n";
|
||||
}
|
||||
|
||||
push @line, $station_filter;
|
||||
}else{
|
||||
push @line, $ct4rel->{$id}->{$key};
|
||||
}
|
||||
|
|
|
@ -1,759 +0,0 @@
|
|||
package Prelogic;
|
||||
#
|
||||
#Deprecated module, please use Prelib.pm
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
|
||||
#
|
||||
#should be refactored
|
||||
#
|
||||
use strict;
|
||||
use warnings;
|
||||
use POSIX;
|
||||
use CGI;
|
||||
use CGI::Carp qw(fatalsToBrowser);
|
||||
use CGI ':standard';
|
||||
use Date::Calc qw(:all);
|
||||
use Scalar::Util qw(looks_like_number);
|
||||
use DateTime;
|
||||
use DateTime::Format::Pg;
|
||||
use Data::Dumper;
|
||||
use Lib::Config;
|
||||
use Mod::Buttons;
|
||||
use Mod::Libenz;
|
||||
use Mod::Libenzdb;
|
||||
use Mod::DBtank;
|
||||
use Mod::Payment;
|
||||
use Mod::Pricing;
|
||||
|
||||
sub new {
|
||||
my $class = shift;
|
||||
my $self = {};
|
||||
bless($self,$class);
|
||||
return $self;
|
||||
}
|
||||
|
||||
#Template
|
||||
sub preinit(){
|
||||
my $self = shift;
|
||||
my $q = shift;
|
||||
my $node_meta = shift;
|
||||
my $users_dms = shift;
|
||||
|
||||
$q->import_names('R');
|
||||
my @keywords = $q->param;
|
||||
my $cf = new Config;
|
||||
my $lb = new Libenz;
|
||||
my $db = new Libenzdb;
|
||||
my $dbt = new DBtank;
|
||||
my $but = new Buttons;
|
||||
my $payone = new Payment;
|
||||
my $pri = new Pricing;
|
||||
|
||||
my %ib = $but->ibuttons();
|
||||
my %varenv = $cf->envonline();
|
||||
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 $lang = "de";
|
||||
my $c_id = $R::c_id || "0";#c_id aus content
|
||||
my $time = time();
|
||||
my $now_date = strftime "%Y-%m-%d", localtime;
|
||||
my $today = strftime("%d.%m.%Y",localtime(time));
|
||||
my $today4db = strftime("%Y-%m-%d %H:%M",localtime(time));
|
||||
my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime;
|
||||
my $day = strftime "%d", localtime;
|
||||
my $mon = strftime "%m", localtime;
|
||||
my $year = strftime "%Y", localtime;
|
||||
my $i_rows=0;
|
||||
my $u_rows=0;
|
||||
my $d_rows=0;
|
||||
my $dbh = "";
|
||||
my $api_file = "/var/www/copri4/shareeconf/apikeys.cfg";
|
||||
my $aconf = Config::General->new($api_file);
|
||||
my %apikeyconf = $aconf->getall;
|
||||
|
||||
open(FILE,">>$varenv{logdir}/Prelogic.log");
|
||||
print FILE "\n*--> $now_dt| u_id: $users_dms->{u_id}" . Dumper($q) . "\n";
|
||||
|
||||
|
||||
if(!$users_dms->{u_id}){
|
||||
return "failure::Fehler<br /> Die Sitzung wurde unterbrochen.";
|
||||
}
|
||||
|
||||
if((!looks_like_number($R::c_id4trans) || !looks_like_number($R::tpl_id4trans)) && ($R::ct_trans !~ /delete_trans|new_trans/) && !$R::v_abschluss){
|
||||
print FILE Dumper($q);
|
||||
return "failure::Fehler<br /> Daten ID's nicht vollständig (if((!looks_like_number($R::c_id4trans) || !looks_like_number($R::tpl_id4trans)) && ($R::ct_trans !~ /delete_trans|new_trans/) && !$R::v_abschluss))";
|
||||
}
|
||||
|
||||
#international buttons
|
||||
my ($key,$val,$ib_key);
|
||||
while (($key,$val) = each(%ib)) {
|
||||
$ib_key = $key if($R::ct_trans eq $val);
|
||||
}
|
||||
$ib_key = $R::ct_trans if(!$ib_key);
|
||||
my ($ct_last,$c_idnew);
|
||||
|
||||
my $table = "contenttrans";
|
||||
my $ctt = $db->get_content1($table,$R::c_id4trans);
|
||||
my $buchen_mtime = $lb->time4de($ctt->{mtime});
|
||||
|
||||
my $mandant_main_id = 100002;
|
||||
my $parent_trans = $db->get_node3("$mandant_main_id","Faktura","$lang") if($mandant_main_id);
|
||||
|
||||
if(!$parent_trans->{main_id}){
|
||||
return "failure::Fehler<br /> keine eindeutige Modulzuweisung vorhanden.";
|
||||
}
|
||||
my $rel = $db->get_rel4tpl4nd($parent_trans->{main_id},$lang,$R::c_id4trans);
|
||||
$rel = $db->get_rel4tpl4nd("",$lang,$R::c_id4trans,$rel->{template_id}) if($R::c_id4trans > "0");
|
||||
|
||||
my $ct_name = $q->escapeHTML("$R::ct_name");
|
||||
my $barcode=0;
|
||||
my $s_owner_id=0;
|
||||
|
||||
if($R::s_start_date_time && $varenv{dataflow} =~ /wiki/){
|
||||
$db->users_up("cal_start","$R::s_start_date_time",$users_dms->{u_id});
|
||||
}
|
||||
if($R::s_end_date_time && $varenv{dataflow} =~ /wiki/){
|
||||
$db->users_up("cal_end","$R::s_end_date_time",$users_dms->{u_id});
|
||||
}
|
||||
if($R::view_list && $varenv{dataflow} =~ /wiki/){
|
||||
$db->users_up("view_list","$R::view_list",$users_dms->{u_id});
|
||||
}
|
||||
|
||||
|
||||
|
||||
#OPEN/CLOSE
|
||||
if($R::ct_trans eq "open"){
|
||||
$db->update_users4trans($R::c_id4trans,$R::tpl_id4trans,"",$users_dms->{u_id});
|
||||
$users_dms = $db->select_users($users_dms->{u_id});
|
||||
}elsif($R::ct_trans eq "close"){
|
||||
$db->update_users4trans("0","0","",$users_dms->{u_id});
|
||||
$users_dms = $db->select_users($users_dms->{u_id});
|
||||
}
|
||||
|
||||
|
||||
#NEW contenttrans
|
||||
if($ib_key =~ /^new_/){
|
||||
$ct_name = "----" if(!$ct_name);
|
||||
my $foreign_key;
|
||||
my $sort;
|
||||
my $main_id = $R::main_id;
|
||||
if($ib_key =~ /new_trans/){
|
||||
$table = "contenttrans";
|
||||
$foreign_key="ct_id";
|
||||
$main_id = $parent_trans->{main_id} if(!$R::main_id);
|
||||
}
|
||||
my $node = $db->get_node4multi($main_id,$lang);
|
||||
|
||||
if($table && $main_id){
|
||||
my $rel = $db->get_rel4tpl($main_id,$lang);
|
||||
$c_idnew = $db->insert_content2($table,$ct_name,$users_dms->{u_id},"");
|
||||
$i_rows += 1 if($c_idnew > 0);
|
||||
my $rel_id = $db->insert_relationlist($table,$rel->{main_id},$lang,$c_idnew,$rel->{tpl_id},$foreign_key);
|
||||
$rel->{content_id} = $c_idnew; #notwendig bei prozeduralem $R::select_part
|
||||
$db->update_content4change($table,$c_idnew,"",$parent_trans->{parent_id},"int09");#mandant_main_id
|
||||
$db->update_content4change($table,$c_idnew,"",$node->{main_id},"int12");#zusätzl. Formtyp
|
||||
$db->update_content4change($table,$c_idnew,"",$node->{node_name},"txt00");#node_name
|
||||
$db->update_users4trans($c_idnew,$R::tpl_id4trans,"",$users_dms->{u_id});
|
||||
}else{
|
||||
return "failure::Fehler, Datensatz kann nicht angelegt werden weil folgende Informationen fehlen: ($main_id)";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
###ADD PARTS/DATE TO Transactions
|
||||
#FIXME, refactorit
|
||||
if((($ib_key =~ /add_transpos|add_transdate/) || ($R::select_part && ($R::spart_ct_name || $R::json_select))) && (!$ctt->{close_time})){
|
||||
$table = "contenttranspos";
|
||||
|
||||
my $zcolumn = "barcode";
|
||||
my $zcontent = "$R::spart_ct_name" || "$R::json_select";
|
||||
|
||||
#get part for adding and get from_main_id
|
||||
my $ct_name = "$R::spart_ct_name" || "$R::json_select" || "";#turn-around!§$
|
||||
my $c_id = "$R::c_id" || "";
|
||||
my $ct = { c_id => 0 };
|
||||
$ct = $db->get_ctrel2("content","$ct_name","","$lang","","$c_id","224,229","$zcolumn","$zcontent","");
|
||||
|
||||
$ct_name = $ct->{ct_name} if($ct->{ct_name});
|
||||
|
||||
if($ct->{main_id}){
|
||||
$users_dms = $db->select_users($users_dms->{u_id}) if($ib_key =~ /new_/);#nur bei new_ mit save_
|
||||
if(!$R::c_id4trans && $ib_key !~ /new_transdate/){
|
||||
return "failure::Zu welchem Vorgang soll die Aktion verknüpft werden? Bitte erst den entsprechenden Vorgang öffnen.";
|
||||
}
|
||||
}
|
||||
|
||||
if($ct->{barcode} && $ct->{barcode} > 0 && $rel->{content_id}){
|
||||
$ct->{int02} = $ct->{int02} * -1 if($ct->{template_id} == 224 && $ct->{int02} > 0);#Gutscheine
|
||||
|
||||
#Add Parts from content to contenttranspos#################
|
||||
my $pos_id = 0;
|
||||
|
||||
my $ctt = { c_id => 0 };
|
||||
if(looks_like_number($R::c_id4trans)){
|
||||
my $pref_ctt = {
|
||||
table => "contenttrans",
|
||||
fetch => "one",
|
||||
c_id => $R::c_id4trans,
|
||||
};
|
||||
$ctt = $dbt->fetch_tablerecord($dbh,$pref_ctt);
|
||||
}
|
||||
my $ctadr = { c_id => $ctt->{int10} };
|
||||
$pos_id = $dbt->insert_pos($dbh,$ctt->{c_id},$ct,"",$ctadr,"","","","0",$users_dms->{u_id},"");
|
||||
|
||||
$i_rows += 1 if($pos_id > 0);
|
||||
$dbt->update_content4comp($dbh,$ct->{c_id},"-","1");
|
||||
return "pos_id=$pos_id";#new return-code to get opened Part-Position in Transposition
|
||||
}else{
|
||||
return "failure::Die Artikelnummer konnte nicht gefunden werden.<br /> ::$varenv{wwwhost}/DMS/Waren::Waren verwalten";
|
||||
}
|
||||
}
|
||||
#####
|
||||
|
||||
#UPDATE CONTENT
|
||||
#print "@keywords ";
|
||||
if($ib_key =~ /save/){
|
||||
$c_id = $R::c_id if($ib_key eq "save");#only in journal edit
|
||||
my $table = "contenttrans";
|
||||
if($ib_key eq "save_adr" || $ib_key =~ /save_text/){
|
||||
$table = "contenttrans";
|
||||
$c_id = "$R::c_id4trans";
|
||||
}elsif($ib_key eq "save_pos"){
|
||||
$table = "contenttranspos";
|
||||
$c_id = $R::c_idpos || $R::pos_id;
|
||||
}
|
||||
|
||||
#Miet- bzw. BaseVA- Zeitraum
|
||||
if($ib_key =~ /save_pos/ && $R::c_idpos && $R::start_date =~ /\d{1,2}\.\d{1,2}\.\d{4}/ && $R::end_date =~ /\d{1,2}\.\d{1,2}\.\d{4}/){
|
||||
my $pos_id = $R::c_idpos;
|
||||
my $start_date = "$3-$2-$1" if($R::start_date =~ /(\d{1,2})\.(\d{1,2})\.(\d{4})/);
|
||||
my $end_date = "$3-$2-$1" if($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="";
|
||||
$start_time = "$start_date $s_hh:$s_mi:00" if("$start_date $s_hh:$s_mi" =~ /\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}/);
|
||||
$end_time = "$end_date $e_hh:$e_mi:00" if("$end_date $e_hh:$e_mi" =~ /\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}/);
|
||||
|
||||
if($start_time && $end_time){
|
||||
my $dtnow = DateTime->now( time_zone => "Europe/Berlin" );
|
||||
my $dt0 = DateTime::Format::Pg->parse_datetime($start_time);
|
||||
my $dt1 = DateTime::Format::Pg->parse_datetime($end_time);
|
||||
|
||||
if($dt0 < $dtnow && $dt1 < $dtnow){
|
||||
|
||||
my $pref = {
|
||||
table => "contenttrans",
|
||||
table_pos => "contenttranspos",
|
||||
fetch => "one",
|
||||
template_id => "218",#Mietjournal tpl_id
|
||||
c_id => $pos_id,
|
||||
"ct.close_time" => "is::null",
|
||||
};
|
||||
|
||||
my $record_pos = {};
|
||||
my $pricing = {};
|
||||
my $counting = {};
|
||||
$record_pos = $dbt->collect_post($dbh,$pref);
|
||||
|
||||
my $update_pos = {
|
||||
table => "contenttranspos",
|
||||
start_time => "$start_time",
|
||||
end_time => "$end_time",
|
||||
owner_end => $users_dms->{u_id},
|
||||
mtime => "now()",
|
||||
};
|
||||
my $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);
|
||||
|
||||
#int03 only used for tarif counting backwards compatibility
|
||||
#$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}));
|
||||
$update_pos->{int41} = "$counting->{int41}" if(looks_like_number($counting->{int41}));
|
||||
|
||||
$update_pos->{int10} = 1;
|
||||
$update_pos->{int04} = $R::int04 if(looks_like_number($R::int04));
|
||||
|
||||
if($R::cc_id =~/^\d+$/){
|
||||
my $ctpref = {
|
||||
table => "content",
|
||||
fetch => "one",
|
||||
c_id => $R::cc_id,
|
||||
};
|
||||
my $ctbike = $dbt->fetch_tablerecord($dbh,$ctpref);
|
||||
|
||||
if($ctbike->{int10} && ($ctbike->{int10} == 2 || $ctbike->{int10} == 3)){
|
||||
$db->updater("content","c_id",$R::cc_id,"int10","1",$users_dms->{u_id});
|
||||
if($R::int04 =~/^\d+$/){
|
||||
$db->updater("content","c_id",$R::cc_id,"int04","$R::int04",$users_dms->{u_id});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$rows = $dbt->update_record($dbh,$update_pos,$record_pos);
|
||||
$db->updater("contenttrans","c_id",$ctt->{c_id},"start_time","$start_time",$users_dms->{u_id});
|
||||
$db->updater("contenttrans","c_id",$ctt->{c_id},"end_time","$end_time",$users_dms->{u_id});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#hidden select keys to delete first, marked with off_ (Project.pm)
|
||||
foreach(@keywords){
|
||||
if($_ =~ /off_(txt\d+)/){
|
||||
$db->updater("$table","c_id",$c_id,"$1","");
|
||||
}
|
||||
}
|
||||
|
||||
my $ct_exist2;
|
||||
$ct_exist2 = $db->get_content2($table,$ct_name) if($ct_name);
|
||||
$ct_exist2 = $db->get_content1($table,$c_id) if($c_id);
|
||||
if($ct_exist2->{ct_name} && ($ct_exist2->{c_id} ne $c_id)){
|
||||
return "failure::$ct_exist2->{ct_name} - $ct_exist2->{c_id} - $c_id<br /> content name exists";
|
||||
}elsif($c_id){
|
||||
$users_dms = $db->select_users($users_dms->{u_id});#to get new cal_start
|
||||
my $j=0;
|
||||
foreach(@keywords){
|
||||
$j++;
|
||||
my $val = $q->param($_);
|
||||
my $valxx = $q->escapeHTML("$val");
|
||||
my @val = $q->param($_);
|
||||
$valxx = $q->escapeHTML("@val");
|
||||
$_ =~ s/col_//;
|
||||
$ct_exist2->{$_} =~ s/^\s+//; $ct_exist2->{$_} =~ s/\s+$//;
|
||||
$valxx =~ s/^\s+//; $valxx =~ s/\s+$//;
|
||||
$valxx .= ".00" if($valxx =~ /^\d+$/ && $_ =~ /int\d+/);
|
||||
#print "|$_:$ct_exist2->{$_} -- $valxx|<br>";
|
||||
if("$ct_exist2->{$_}" ne "$valxx"){
|
||||
if($_ eq "ct_name" && $valxx && $table){
|
||||
$u_rows +=$db->updater("$table","c_id",$c_id,"$_","$valxx");
|
||||
}
|
||||
if($_ =~ /txt21|txt6/ && $table){
|
||||
$db->update_content4change2($table,$c_id,"$R::txt61,$R::txt62,$R::txt63,$R::txt64,$R::txt65,$R::txt66,$R::txt67,$R::txt68,$R::txt69","txt21")
|
||||
}elsif($_ =~ /txt(\d+)$/ && $table){
|
||||
$valxx = "null" if(!$valxx);#for empty
|
||||
my $txtxx = $valxx;
|
||||
$u_rows +=$db->updater("$table","c_id",$c_id,"$_","$valxx");
|
||||
}
|
||||
|
||||
if($_ =~ /mtime|warn_time/ && $table){
|
||||
my $timexx = $valxx;
|
||||
$u_rows += $db->update_content4change($table,$c_id,$ct_name,$timexx,$_,$users_dms->{u_id}) if($timexx =~ /\d{1,2}\.\d{1,2}\.\d{2,4}\s\d{1,2}:\d{1,2}/ || $timexx =~ /\d{1,2}\.\d{1,2}\.\d{2,4}$/);
|
||||
}
|
||||
if($_ =~ /state/ && $table){
|
||||
my $state = $valxx;
|
||||
$u_rows += $db->update_content4change($table,$c_id,$ct_name,$state,$_,$users_dms->{u_id});
|
||||
}
|
||||
if($_ =~ /(xml_export)/ && $table){#boolean
|
||||
my $key = $1;
|
||||
my $value = $valxx || "f";
|
||||
$u_rows += $db->update_content4change($table,$c_id,$ct_name,$value,$key,$users_dms->{u_id});
|
||||
}
|
||||
if($_ =~ /int(\d+)/ && $table){
|
||||
$valxx =~ s/,/./;
|
||||
$valxx =~ s/\.00//;
|
||||
$valxx = "null" if(!$valxx);#for empty
|
||||
my $intxx = $valxx;
|
||||
#Ausgaben trigger
|
||||
if($ib_key eq "save_pos" && $_ eq "int02" && $intxx =~ /-\d/){
|
||||
$u_rows += $db->update_content4change($table,$c_id,$ct_name,$intxx,"int02",$users_dms->{u_id});
|
||||
}elsif($ib_key eq "save_pos" && $_ eq "int03"){
|
||||
#Warenbestands trigger
|
||||
my $op="+";
|
||||
$op = $1 if($intxx =~ s/(-|\+)//);
|
||||
if($op =~ /-/){
|
||||
return "failure::Bitte einen fiktiven Artikel unter \"Ausgaben\" verwenden.";
|
||||
}
|
||||
my $add_menge="0";
|
||||
#differenz, es wird nur der zuwachs verwendet
|
||||
$ct_exist2->{$_} = 0 if(!$ct_exist2->{$_});
|
||||
$add_menge = - $ct_exist2->{$_} + $intxx if($op eq "+");
|
||||
my $rows = $db->update_content4comp("contenttranspos",$R::ct_name,$R::c_idpos,"$op","$add_menge","");
|
||||
if($rows){
|
||||
$u_rows += $db->update_content4comp("content",$R::ct_name,"$R::cc_id","-","$add_menge","","");
|
||||
}
|
||||
}else{
|
||||
$u_rows +=$db->updater("$table","c_id",$c_id,"$_","$valxx");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#delete ask
|
||||
if("$ib_key" eq "remove_chk4rel" && $R::main_id && $R::c_id && $R::template_id && $R::rel_id){
|
||||
my $node_names; my $i=0;
|
||||
return "failure::Datensatz wirklich löschen. ::?ct_trans=delete_trans\&exit_box2=1\&c_id=$R::c_id\&rel_id=$R::rel_id ::löschen"
|
||||
}
|
||||
|
||||
#delete Only relation ... without content
|
||||
if("$ib_key" eq "delete_rel4ct" && $R::main_id && $R::rel_id){
|
||||
$d_rows += $db->delete_relation($R::main_id,$lang,$R::rel_id);
|
||||
$db->cleanup_users($users_dms->{u_id}) if($users_dms->{u_id});
|
||||
}
|
||||
|
||||
#DELETE abschluss
|
||||
if($ib_key eq "delete" || $ib_key =~ /delete_tver/){
|
||||
$table = "contenttrans";
|
||||
$table = "contenttver" if($ib_key =~ /delete_tver/);
|
||||
$d_rows += $db->delete_content("$table","$R::c_id");
|
||||
$db->update_users4trans("0","0","",$users_dms->{u_id});
|
||||
}
|
||||
|
||||
#DELETE
|
||||
if($ib_key =~ /delete_trans/){
|
||||
my $c_id4del = $R::c_id4trans || $R::c_id;
|
||||
$table = "contenttrans" if($ib_key =~ /delete_trans/);
|
||||
my $ctt = $db->get_content1("$table","$c_id4del");
|
||||
|
||||
$d_rows += $db->delete_content($table,$ctt->{c_id});
|
||||
$db->update_users4trans("0","0","",$users_dms->{u_id});
|
||||
print $q->div({-class=>'elementwhite'},"2... redirecting to ... or CLICK ", $q->a({href=>"$varenv{wwwhost}$script$path"},"$varenv{wwwhost}/DMS/Faktura"));
|
||||
print redirect("$varenv{wwwhost}/DMS/Faktura?redirected=1\&return=0-0-0|$i_rows-$u_rows-$d_rows");
|
||||
exit 0;
|
||||
}
|
||||
|
||||
my $pos_id = $R::c_idpos || $R::pos_id;
|
||||
#DELETE pos
|
||||
if($ib_key =~ /delete_pos/ && $pos_id){
|
||||
$table = "contenttranspos";
|
||||
my $cttpos = $db->get_content1($table,$pos_id);
|
||||
|
||||
$d_rows += $db->delete_content("$table","$pos_id");
|
||||
$ct_name = $1 if($R::ct_name =~ /^(\d+)/);
|
||||
$u_rows += $db->update_content4comp("content",$ct_name,"$cttpos->{cc_id}","+","$cttpos->{int03}","","");
|
||||
}
|
||||
###
|
||||
|
||||
#Auftragsstatus
|
||||
if($R::order_state && $R::c_id4trans){
|
||||
my $table = "contenttrans";
|
||||
$u_rows += $db->updater($table,"c_id",$R::c_id4trans,"txt22","$R::txt22",$users_dms->{u_id});
|
||||
}
|
||||
if($R::warning_state && $R::c_id4trans){
|
||||
my $table = "contenttrans";
|
||||
$u_rows += $db->updater($table,"c_id",$R::c_id4trans,"txt19","$R::txt19",$users_dms->{u_id});
|
||||
}
|
||||
|
||||
###SET Relation (like move doc-type)
|
||||
#executed by Terminal submit-buttons
|
||||
#2. counter for WaWi and ReNr
|
||||
if((!$R::close_time && $R::set_main_id) && ($R::set_relation || $R::set_state || $R::open_set_main_id > 300000 || $R::ct_trans =~ /print_pdf/i)){
|
||||
if($R::open_set_main_id){
|
||||
$R::set_main_id = $R::open_set_main_id;
|
||||
$users_dms = $db->select_users($users_dms->{u_id});
|
||||
}
|
||||
my $c_id = $R::c_id4trans || "";#Document id
|
||||
return "failure::Abbruch, die Aktion konnte keinem Dokument zugeordnet werden. Arbeiten Sie mit mehreren Browser-Tabs? Bitte multiple COPRI Tabs schließen und anschließend das Verkauf-Terminal neu öffnen." if(!$c_id);
|
||||
|
||||
my $table = "contenttrans";
|
||||
my $ctt = { c_id => 0 };
|
||||
my $rel = $db->get_rel4tpl("",$lang,$R::c_id4trans,$R::tpl_id4trans);
|
||||
$ctt = $db->get_content1("contenttrans",$rel->{content_id});
|
||||
return "failure::Bitte erst einen Formular-Typ wählen" if($R::set_main_id <= "300000");
|
||||
$u_rows += $db->update_relation2("",$lang,$R::set_main_id,"",$rel->{rel_id}) if(!$R::close_time && $rel->{rel_id});
|
||||
|
||||
my $node_faktura = $dbt->get_node($dbh,$dbt->{shareedms_conf}->{faktura});
|
||||
my $node = $dbt->get_node($dbh,$R::set_main_id);
|
||||
|
||||
my $update_ctt = {
|
||||
table => "contenttrans",
|
||||
mtime => "now()",
|
||||
owner => $users_dms->{u_id},
|
||||
};
|
||||
|
||||
print FILE "c_id4trans:$R::c_id4trans,tpl_id4trans:$R::tpl_id4trans by condition: ($node_faktura->{invoice_nr} > 0) && $ctt->{ct_name} !~ /\d/)\n old-relation $rel->{main_id} \n new-relation $R::set_main_id\n";
|
||||
if($node_faktura->{invoice_nr} > 0 && $ctt->{c_id} > 0 && $ctt->{ct_name} !~ /\d/){
|
||||
|
||||
my $nextNr = $node_faktura->{invoice_nr};
|
||||
$update_ctt->{ct_name} = "$nextNr";
|
||||
$update_ctt->{barcode} = "$nextNr";
|
||||
my $update_node = {
|
||||
table => "nodes",
|
||||
main_id => "$dbt->{shareedms_conf}->{faktura}",
|
||||
change => "no_time",
|
||||
};
|
||||
my $invoice_nr = $node_faktura->{invoice_nr} + 1;
|
||||
$dbt->update_one($dbh,$update_node,"invoice_nr='$invoice_nr'");
|
||||
|
||||
$update_ctt->{int12} = $node->{main_id};
|
||||
$update_ctt->{txt00} = $node->{node_name};
|
||||
$u_rows += $dbt->update_record($dbh,$update_ctt,$ctt);
|
||||
|
||||
}
|
||||
|
||||
|
||||
#SET state alias Zahlung buchen
|
||||
if($R::set_state && !$R::close_time){
|
||||
|
||||
my $sum_paid = "null";
|
||||
my $sum_operatorcredit = "null";
|
||||
my $sumgeb_teil = "null";
|
||||
my $sumgeb_bank = "null";
|
||||
my $state = $R::state || "";
|
||||
$update_ctt->{state} = "$state";
|
||||
$update_ctt->{int14} = 2;#set OPOS
|
||||
|
||||
if($R::set_state eq "buchen" && $R::sum_paid){
|
||||
$sum_paid = $R::sum_paid;
|
||||
$sum_paid =~ s/,/\./;
|
||||
$update_ctt->{int01} = $sum_paid;
|
||||
}
|
||||
|
||||
if($R::set_state eq "buchen" && $R::sum_operatorcredit){
|
||||
$sum_operatorcredit = $R::sum_operatorcredit;
|
||||
$sum_operatorcredit =~ s/,/\./;
|
||||
$update_ctt->{int02} = $sum_operatorcredit;
|
||||
$update_ctt->{int14} = "null";
|
||||
}
|
||||
|
||||
if($R::set_state eq "buchen" && $R::sumgeb_teil){
|
||||
$sumgeb_teil = $R::sumgeb_teil;
|
||||
$sumgeb_teil =~ s/,/\./;
|
||||
$update_ctt->{int08} = $sumgeb_teil;
|
||||
}
|
||||
|
||||
if($R::set_state eq "buchen" && $R::sumgeb_bank){
|
||||
$sumgeb_bank = $R::sumgeb_bank;
|
||||
$sumgeb_bank =~ s/,/\./;
|
||||
$update_ctt->{int07} = $sumgeb_bank;
|
||||
}
|
||||
|
||||
$u_rows += $dbt->update_record($dbh,$update_ctt,$ctt);
|
||||
|
||||
if($state =~ /payone/){
|
||||
my $ctadr = $db->get_content1("contentadr",$ctt->{int10});
|
||||
|
||||
$ctt->{payone_reset} = 0;
|
||||
if($R::payone_reset){
|
||||
#after delete preauth after 0€ capture sets new TXID and increment reference
|
||||
$ctt->{payone_reset} = $R::payone_reset;
|
||||
$ctt->{int01} = 0;
|
||||
$ctt->{sequence} = $ctt->{int18} || 1;
|
||||
$ctt->{sequence}++;
|
||||
if($ctt->{txt16} && $R::state =~ /SEPA/){#SEPA 0
|
||||
my $payoneret = $payone->captureSEPA_main(\%varenv,$ctadr,$ctt,$users_dms->{u_id});
|
||||
}
|
||||
if($ctt->{txt16} && $R::state =~ /Kreditkarte/){#CC 0
|
||||
my $payoneret = $payone->captureCC_main(\%varenv,$ctadr,$ctt,$users_dms->{u_id});
|
||||
}
|
||||
$ctt = $db->get_content1("contenttrans",$ctt->{c_id});
|
||||
}
|
||||
|
||||
if($state !~ /Zahlungseingang/ && !$ctt->{txt16}){
|
||||
if($ctadr->{ct_name} =~ /\w{2}-\d+/){
|
||||
my $payoneret = $payone->preauthorizationSEPA_main(\%varenv,$ctadr,$ctt,$users_dms->{u_id});
|
||||
sleep 2;
|
||||
}elsif(length($ctadr->{ct_name}) >= 19){
|
||||
my $payoneret = $payone->preauthorizationCC_main(\%varenv,$ctadr,$ctt,$users_dms->{u_id});
|
||||
sleep 2;
|
||||
}
|
||||
|
||||
$ctt = $db->get_content1("contenttrans",$ctt->{c_id});
|
||||
$ctt->{sequence} = $R::payone_sequence || 1;
|
||||
|
||||
#SEPA capture
|
||||
if($ctt->{txt16} && $R::state =~ /SEPA/){#SEPA
|
||||
my $payoneret = $payone->captureSEPA_main(\%varenv,$ctadr,$ctt,$users_dms->{u_id});
|
||||
}
|
||||
#CC capture
|
||||
elsif($ctt->{txt16} && $R::state =~ /Kreditkarte/){#CC
|
||||
my $payoneret = $payone->captureCC_main(\%varenv,$ctadr,$ctt,$users_dms->{u_id});
|
||||
}
|
||||
else{
|
||||
my $return_text = "payone capture fails, errorcode ($ctadr->{int03} && TXID:$ctt->{txt16} && $R::state).";
|
||||
$update_ctt->{txt23} = "$now_dt $return_text\n" . $ctt->{txt23};
|
||||
$dbt->update_record($dbh,$update_ctt,$ctt);
|
||||
#return "failure::$return_text";
|
||||
|
||||
}
|
||||
}else{
|
||||
return "failure::Payone Geldeinzug nicht ausgeführt weil TXID bereits vorhanden. Hatte der Einzug bereits stattgefunden?";
|
||||
}
|
||||
}elsif($ctt->{txt00} eq "Storno" || $state eq "Zahlungsausfall"){
|
||||
$update_ctt->{int14} = "null";
|
||||
$update_ctt->{pay_time} = "now()";
|
||||
$u_rows += $dbt->update_record($dbh,$update_ctt,$ctt);
|
||||
#delete OPOS at all
|
||||
$db->updater($table,"barcode",$ctt->{barcode},"int14","null","","","","","");
|
||||
}elsif($state eq "fehlgeschlagener Einzug"){
|
||||
$update_ctt->{int14} = "null";
|
||||
$update_ctt->{pay_time} = "now()";
|
||||
$u_rows += $dbt->update_record($dbh,$update_ctt,$ctt);
|
||||
}elsif($ctt->{txt00} eq "Rechnung" && $R::sum_paid <= 0){
|
||||
$update_ctt->{int14} = "null";
|
||||
$update_ctt->{pay_time} = "now()";
|
||||
$u_rows += $dbt->update_record($dbh,$update_ctt,$ctt);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
###end SET Relation or state (V Terminal submit's)
|
||||
|
||||
my $c_id4print = "";
|
||||
$c_id4print = $R::c_id4trans if(looks_like_number($R::c_id4trans));
|
||||
if($c_id4print){
|
||||
open(EMA, ">> $varenv{logdir}/copri-print.log");
|
||||
print EMA "$today4db\n";
|
||||
|
||||
my $print_return = "";
|
||||
my $exit_code = 1;
|
||||
|
||||
my $ctt = { c_id => 0 };
|
||||
my $pref_ctt = {
|
||||
table => "contenttrans",
|
||||
fetch => "one",
|
||||
c_id => $R::c_id4trans,
|
||||
};
|
||||
$ctt = $dbt->fetch_tablerecord($dbh,$pref_ctt);
|
||||
my $lang_ctt = $ctt->{txt11} || "de";#2023-08-10
|
||||
|
||||
my $praefix = "$ctt->{txt00}-$varenv{praefix}";#like Rechnung-sharee_operator
|
||||
|
||||
|
||||
#PDF generate
|
||||
if($R::ct_trans =~ /print_pdf/ || $R::print_pdf){
|
||||
my $psize="A4";
|
||||
my $topdf = "$varenv{basedir}/src/wkhtmltopdf-amd64";
|
||||
|
||||
#without system() because we have to wait until PDF is ready
|
||||
$print_return = `$topdf --page-size $psize "$varenv{wwwhost}$script/Printpreview?printer_id=$R::printer_id\&mandant_main_id=$mandant_main_id\&main_id=$node_meta->{main_id}\&ct_name2print=$ctt->{ct_name}\&c_id4trans=$c_id4print\&u_id=$users_dms->{u_id}\&pkey=$apikeyconf{pdfprinter}->{pkey}" "$varenv{pdf}/$praefix-$ctt->{ct_name}.pdf" 2>&1`;
|
||||
$exit_code = $?;
|
||||
|
||||
my $filesize = -s "$varenv{pdf}/$praefix-$ctt->{ct_name}.pdf";
|
||||
print EMA "$topdf --page-size $psize $varenv{wwwhost}$script/Printpreview?printer_id=$R::printer_id\&mandant_main_id=$mandant_main_id\&main_id=$node_meta->{main_id}\&ct_name2print=$ctt->{ct_name}\&c_id4trans=$c_id4print\&u_id=$users_dms->{u_id}\&pkey=$apikeyconf{pdfprinter}->{pkey} $varenv{pdf}/$praefix-$ctt->{ct_name}.pdf\nreturn: $print_return\nfilesize: $filesize\nexit_code: $exit_code\nset_state: $R::set_state\n";
|
||||
|
||||
#no redirect
|
||||
if($R::ct_trans eq "print_pdf"){
|
||||
if( -f "$varenv{basedir}/pdf/$praefix-$ctt->{ct_name}.pdf"){
|
||||
print "<script type=\"text/javascript\">window.open('$varenv{wwwhost}/FileOut?file=$praefix-$ctt->{ct_name}.pdf');</script>";
|
||||
}else{
|
||||
return "failure::PDF konnte nicht generiert werden, bitte Info an: admin\@sharee.bike\n $varenv{wwwhost}/pdf/$praefix-$ctt->{ct_name}.pdf";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#PDF will be generated by "print_pdf" in context "buchen"
|
||||
#"send_invoice_again" will use formarly generated PDF
|
||||
if(-f "$varenv{basedir}/pdfinvoice/$praefix-$ctt->{ct_name}.pdf" && (($R::set_state eq "buchen" && $R::send_invoice && $ctt->{int01} && $ctt->{int01} != 0) || ($ib_key eq "send_invoice_again"))){
|
||||
my $sum_paid = $R::sum_paid || 0;
|
||||
$sum_paid =~ s/,/\./;
|
||||
|
||||
my $cms_message_key = "email-invoice";
|
||||
$varenv{cms} = $dbt->fetch_cms($dbh,{ lang => $lang_ctt });
|
||||
if(!$varenv{cms}->{$cms_message_key}->{txt}){
|
||||
return "failure::Achtung, CMS-Text '$cms_message_key' ist nicht vorhanden. Es wurde keine eMail versandt!";
|
||||
}
|
||||
if($sum_paid != $ctt->{int01}){
|
||||
return "failure::Achtung, die Summe der Positionen $sum_paid enstpricht nicht der Rechnung-Summe $ctt->{int01}. Die Rechnung muss vor dem eMail versand erst gebucht werden!";
|
||||
}
|
||||
|
||||
system("$dbt->{copri_conf}->{basedir}/$varenv{syshost}/src/scripts/mailTransportcms.pl '$varenv{syshost}' 'send_invoice' '$ctt->{int10}' '$ctt->{c_id}' '' '$cms_message_key' '1'");
|
||||
print EMA "---> Prelogic send_invoice $praefix-$ctt->{ct_name}.pdf email command: $dbt->{copri_conf}->{basedir}/$varenv{syshost}/src/scripts/mailTransportcms.pl '$varenv{syshost}' 'send_invoice' '$ctt->{int10}' '$ctt->{c_id}' '' '$cms_message_key' '1'\n";
|
||||
}
|
||||
|
||||
#send_invoice_cms
|
||||
if($ib_key eq "send_invoice_cms" && $R::cms_message_key){
|
||||
my $sum_paid = $R::sum_paid || 0;
|
||||
$sum_paid =~ s/,/\./;
|
||||
|
||||
$varenv{cms} = $dbt->fetch_cms($dbh,{ lang => $lang_ctt });
|
||||
if(!$varenv{cms}->{$R::cms_message_key}->{txt}){
|
||||
return "failure::Achtung, CMS-Text '$R::cms_message_key' ist nicht vorhanden. Es wurde keine eMail versandt!";
|
||||
}
|
||||
if($sum_paid != $ctt->{int01}){
|
||||
return "failure::Achtung, die Summe der Positionen $sum_paid enstpricht nicht der Rechnung-Summe $ctt->{int01}. Die Rechnung muss vor dem eMail versand erst gebucht werden!";
|
||||
}
|
||||
|
||||
my $with_pdf = "";
|
||||
$with_pdf = 1 if(-f "$varenv{basedir}/pdfinvoice/$praefix-$ctt->{ct_name}.pdf" && $R::print_pdf);
|
||||
system("$dbt->{copri_conf}->{basedir}/$varenv{syshost}/src/scripts/mailTransportcms.pl '$varenv{syshost}' 'send_invoice_cms' '$ctt->{int10}' '$ctt->{c_id}' '' '$R::cms_message_key' '$with_pdf'");
|
||||
print EMA "---> Prelogic send_invoice_cms $praefix-$ctt->{ct_name}.pdf email command: $dbt->{copri_conf}->{basedir}/$varenv{syshost}/src/scripts/mailTransportcms.pl '$varenv{syshost}' 'send_invoice_cms' '$ctt->{int10}' '$ctt->{c_id}' '' '$R::cms_message_key' '$with_pdf'\n";
|
||||
}
|
||||
|
||||
close EMA;
|
||||
}#end c_id4print
|
||||
|
||||
#SET Tagesabschluss
|
||||
if($R::v_abschluss){
|
||||
my $journal_tpl="209";
|
||||
my $journal_id="300011";
|
||||
|
||||
#test node
|
||||
my $n_exist = $db->get_node4multi($journal_id,$lang);
|
||||
my $t_exist = $db->get_tpl($journal_tpl);
|
||||
if(!$n_exist->{n_id} || !$t_exist->{tpl_id}){
|
||||
return "failure::Die Journal Konfiguration ist fehlerhaft.";
|
||||
}
|
||||
|
||||
#collect sub-nodes
|
||||
#TODO
|
||||
my $main_ids = "300008,300009,300011";#Rechnung,Storno,Verkaufsjournal
|
||||
#my $main_ids = "$parent_trans->{main_id},";
|
||||
#$main_ids .= $db->collect_noderec($parent_trans->{main_id},$lang,"nothing") if($parent_trans->{main_id});
|
||||
#$main_ids =~ s/,$//;
|
||||
|
||||
my $tpl_vk = "218";
|
||||
my $table = "contenttrans";
|
||||
my $sum_start = $R::sum_start || "0";
|
||||
my $sum_kasse = $R::sum_kasse || "0";
|
||||
$sum_start = $lb->checkint($sum_start);
|
||||
$sum_kasse = $lb->checkint($sum_kasse);
|
||||
my $c_id4kasse = "";
|
||||
my $c_id4abschluss = $db->get_content6("$table","close_time","null","state","Tagesabschluss","int09","$parent_trans->{parent_id}","","","$s_owner_id");
|
||||
if($journal_id){
|
||||
if($c_id4abschluss->{c_id} && $c_id4abschluss->{c_id} > 0){
|
||||
$c_id4kasse = $c_id4abschluss->{c_id};
|
||||
}else{
|
||||
$ct_name = "--- auto ct_name = c_id ---";
|
||||
$c_id4kasse = $db->insert_content2($table,$ct_name,$users_dms->{u_id},"Tagesabschluss");
|
||||
$i_rows += 1 if($c_id4kasse > 0);
|
||||
$db->update_content4change("contenttrans",$c_id4kasse,"$c_id4kasse");
|
||||
$db->update_content4change("contenttrans",$c_id4kasse,"",$parent_trans->{parent_id},"int09");#mandant_main_id
|
||||
$db->update_content4change("contenttrans",$c_id4kasse,"",$c_id4kasse,"int11");#last_ab
|
||||
$db->update_content4change("contenttrans",$c_id4kasse,"",$journal_id,"int12");#main_id
|
||||
|
||||
$db->update_content4change("contenttrans",$c_id4kasse,"",$n_exist->{node_name},"txt00");#node_name
|
||||
my $rel_id = $db->insert_relationlist($table,$journal_id,$lang,$c_id4kasse,$tpl_vk,"ct_id");
|
||||
}
|
||||
$u_rows += $db->update_kasse($table,$c_id4kasse,$sum_kasse,$sum_start);
|
||||
|
||||
if($journal_id && $journal_tpl && $R::close_trans){
|
||||
my $opos="null";
|
||||
$u_rows += $db->update_tagesabschluss($table,$c_id4kasse,$journal_id,$journal_tpl,$tpl_vk,$parent_trans->{parent_id},"$main_ids","$s_owner_id","$opos");
|
||||
|
||||
print $q->div({-class=>'elementwhite'},"1... redirecting to ... or CLICK ", $q->a({href=>"$varenv{wwwhost}/DMS/Faktura/Verkaufsjournal"},"$varenv{wwwhost}/DMS/Faktura/Verkaufsjournal"));
|
||||
print redirect("$varenv{wwwhost}/DMS/Faktura/Verkaufsjournal?redirected=1\&return=0-0-0|$i_rows-$u_rows-$d_rows");
|
||||
exit 0;
|
||||
}
|
||||
}
|
||||
$db->cleanup_users($users_dms->{u_id});
|
||||
}
|
||||
close(FILE);
|
||||
###
|
||||
return "$i_rows-$u_rows-$d_rows";
|
||||
}
|
||||
1;
|
|
@ -70,7 +70,7 @@ sub count_freedrental {
|
|||
open(FILE,">>$varenv->{logdir}/count_freedrental.log") if($debug);
|
||||
print FILE "\n*-->$today4db $varenv->{dbname}\n" if($debug);
|
||||
print FILE Dumper($q) if($debug);
|
||||
print FILE "--> pos.c_id:$pos->{c_id}, user:$pos->{ca_id}, bike:$pos->{ct_name} rental_minute_all: $pricing->{rentalog}->{rental_minute_all} >= 5\n" if($debug);
|
||||
print FILE "--> pos.c_id:$pos->{c_id}, ca_id:$ca_id=pos.ca_id:$pos->{ca_id}, bike:$pos->{ct_name} rental_minute_all: $pricing->{rentalog}->{rental_minute_all} >= 5\n" if($debug);
|
||||
|
||||
#2023-10-10 changed from 0min to rental_minute_all >= 5min to keep freed time on rentals >=5min
|
||||
#freed mangement will be only dony on accountable rental
|
||||
|
@ -99,6 +99,7 @@ sub count_freedrental {
|
|||
|
||||
my $record_pos = { c_id => 0 };
|
||||
$record_pos = $dbt->fetch_tablerecord($dbh,$pref_pos);
|
||||
print FILE Dumper($pref_pos) . "\n" if($debug);
|
||||
foreach my $pid (sort { $record_pos->{$a}->{c_id} <=> $record_pos->{$b}->{c_id} } keys (%$record_pos)){
|
||||
$freed_count++;
|
||||
if($freed_count > $max_freed_count && $pos->{c_id} != $record_pos->{$pid}->{c_id}){
|
||||
|
@ -115,6 +116,8 @@ sub count_freedrental {
|
|||
print FILE "--> NO further freed_time available on c_id=$record_pos->{$pid}->{c_id}\n" if($debug);
|
||||
}
|
||||
|
||||
}else{
|
||||
print FILE "--> NO freed_count if($freed_count > $max_freed_count && $pos->{c_id} != $record_pos->{$pid}->{c_id})\n" if($debug);
|
||||
}
|
||||
$further_freedtime_available = 0 if($freed_count >= $max_freed_count);
|
||||
print FILE "if($freed_count >= $max_freed_count && $pos->{c_id} != $record_pos->{$pid}->{c_id})\nfurther_freedtime_available:$further_freedtime_available\n" if($debug);
|
||||
|
|
|
@ -473,6 +473,14 @@ sub save_account(){
|
|||
my $vde_on_fail = 0;
|
||||
$vde_on_fail = 2 if($valxx && $valxx == 1);
|
||||
$update_adr->{$_} = $vde_on_fail;
|
||||
}elsif($_ =~ /^int03/){
|
||||
#on payment-type change set vde=3
|
||||
if($ctadr->{int03} && $ctadr->{int03} != $valxx){
|
||||
$update_adr->{$_} = $valxx;
|
||||
$update_adr->{int12} = 3;
|
||||
}else{
|
||||
$update_adr->{$_} = $valxx;
|
||||
}
|
||||
}elsif($_ =~ /^int|barcode/){
|
||||
$update_adr->{$_} = $valxx;
|
||||
}elsif($_ eq "ct_name" && $R::base_edit){
|
||||
|
@ -733,8 +741,7 @@ sub save_transact(){
|
|||
fetch => "one",
|
||||
main_id => 300008,
|
||||
template_id => 218,
|
||||
ca_id => "$ctadr_operator->{c_id}",
|
||||
#int10 => "$ctadr_operator->{c_id}",#deprecated
|
||||
int10 => "$ctadr_operator->{c_id}",
|
||||
state => "is::null",
|
||||
close_time => "is::null",
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue