use DateTime;
use List::MoreUtils qw(uniq);
use List::Util qw(max sum);
+use List::UtilsBy qw(sort_by);
use English qw(-no_match_vars);
use SL::DB::Default;
# show history button
$form->{javascript} = qq|<script type="text/javascript" src="js/show_history.js"></script>|;
- #/show hhistory button
my ($language_id, $printer_id);
if ($form->{print_and_post}) {
$form->restore_vars(qw(salesman_id)) if $editing;
- # build vendor/customer drop down comatibility... don't ask
+ # build vendor/customer drop down compatibility... don't ask
if (@{ $form->{"all_customer"} }) {
$form->{"selectcustomer"} = 1;
$form->{customer} = qq|$form->{customer}--$form->{"customer_id"}|;
]);
$TMPL_VAR{ALL_PROJECTS} = SL::DB::Manager::Project->get_all_sorted(query => \@conditions);
+ $form->{ALL_PROJECTS} = $TMPL_VAR{ALL_PROJECTS}; # make projects available for second row drop-down in io.pl
$TMPL_VAR{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all_sorted(query => [ or => [ id => $::form->{employee_id}, deleted => 0 ] ]);
$TMPL_VAR{ALL_SALESMEN} = SL::DB::Manager::Employee->get_all_sorted(query => [ or => [ id => $::form->{salesman_id}, deleted => 0 ] ]);
$TMPL_VAR{ALL_SHIPTO} = SL::DB::Manager::Shipto->get_all_sorted(query => [
$TMPL_VAR{HIDDENS} = [qw(
id action type media format queued printed emailed title vc discount
title creditlimit creditremaining tradediscount business closedto locked shipped storno storno_id
- max_dunning_level dunning_amount
+ max_dunning_level dunning_amount dunning_description
shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact shiptophone shiptofax
shiptoemail shiptodepartment_1 shiptodepartment_2 shiptocp_gender message email subject cc bcc taxaccounts cursor_fokus
convert_from_do_ids convert_from_oe_ids convert_from_ar_ids useasnew
$main::lxdebug->leave_sub();
}
+sub _sort_payments {
+ my @fields = qw(acc_trans_id gldate datepaid source memo paid AR_paid);
+ my @payments =
+ grep { $_->{paid} != 0 }
+ map {
+ my $idx = $_;
+ +{ map { ($_ => delete($::form->{"${_}_${idx}"})) } @fields }
+ } (1..$::form->{paidaccounts});
+
+ @payments = sort_by { DateTime->from_kivitendo($_->{datepaid}) } @payments;
+
+ $::form->{paidaccounts} = max scalar(@payments), 1;
+
+ foreach my $idx (1 .. scalar(@payments)) {
+ my $payment = $payments[$idx - 1];
+ $::form->{"${_}_${idx}"} = $payment->{$_} for @fields;
+ }
+}
+
sub form_footer {
$main::lxdebug->enter_sub();
}
# payments
+ _sort_payments();
+
my $totalpaid = 0;
$form->{paidaccounts}++ if ($form->{"paid_$form->{paidaccounts}"});
$form->{paid_indices} = [ 1 .. $form->{paidaccounts} ];
show_delete => ($::instance_conf->get_is_changeable == 2)
? ($form->current_date(\%myconfig) eq $form->{gldate})
: ($::instance_conf->get_is_changeable == 1),
+ today => DateTime->today,
});
##print $form->parse_html_template('is/_payments'); # parser
##print $form->parse_html_template('webdav/_list'); # parser
($form->{AR}) = split /--/, $form->{AR};
($form->{AR_paid}) = split /--/, $form->{AR_paid};
relink_accounts();
- $form->redirect($locale->text('Payment posted!'))
- if (IS->post_payment(\%myconfig, \%$form));
- $form->error($locale->text('Cannot post payment!'));
-
+ if ( IS->post_payment(\%myconfig, \%$form) ) {
+ $form->{snumbers} = qq|invnumber_| . $form->{invnumber};
+ $form->{what_done} = 'invoice';
+ $form->{addition} = "PAYMENT POSTED";
+ $form->save_history;
+ $form->redirect($locale->text('Payment posted!'))
+ } else {
+ $form->error($locale->text('Cannot post payment!'));
+ };
$main::lxdebug->leave_sub();
}
remove_draft() if $form->{remove_draft};
if(!exists $form->{addition}) {
- $form->{snumbers} = 'invnumber' .'_'. $form->{invnumber}; # ($form->{type} eq 'credit_note' ? 'cnnumber' : 'invnumber') .'_'. $form->{invnumber};
- $form->{addition} = $form->{print_and_post} ? "PRINTED AND POSTED" :
- $form->{storno} ? "STORNO" :
- "POSTED";
+ $form->{snumbers} = 'invnumber' .'_'. $form->{invnumber}; # ($form->{type} eq 'credit_note' ? 'cnnumber' : 'invnumber') .'_'. $form->{invnumber};
+ $form->{what_done} = 'invoice';
+ $form->{addition} = $form->{print_and_post} ? "PRINTED AND POSTED" :
+ $form->{storno} ? "STORNO" :
+ "POSTED";
$form->save_history;
}
$form->{action} = 'edit';
$form->{script} = 'is.pl';
$form->{saved_message} = $form->{label} . " $form->{invnumber} " . $locale->text('posted!');
- $form->{callback} = build_std_url(qw(action edit id saved_message));
+ $form->{callback} = build_std_url(qw(action edit id callback saved_message));
$form->redirect;
}
}
# save the history of invoice being stornoed
- $form->{snumbers} = qq|invnumber_| . $form->{invnumber};
- $form->{addition} = "STORNO";
+ $form->{snumbers} = qq|invnumber_| . $form->{invnumber};
+ $form->{what_done} = 'invoice';
+ $form->{addition} = "STORNO";
$form->save_history;
map({ my $key = $_; delete($form->{$key}) unless (grep({ $key eq $_ } qw(id login password type))); } keys(%{ $form }));
if (IS->delete_invoice(\%myconfig, \%$form)) {
# saving the history
if(!exists $form->{addition}) {
- $form->{snumbers} = 'invnumber' .'_'. $form->{invnumber}; # ($form->{type} eq 'credit_note' ? 'cnnumber' : 'invnumber') .'_'. $form->{invnumber};
- $form->{addition} = "DELETED";
+ $form->{snumbers} = 'invnumber' .'_'. $form->{invnumber}; # ($form->{type} eq 'credit_note' ? 'cnnumber' : 'invnumber') .'_'. $form->{invnumber};
+ $form->{what_done} = 'invoice';
+ $form->{addition} = "DELETED";
$form->save_history;
}
# /saving the history