#======================================================================
use POSIX qw(strftime);
+use List::Util qw(sum);
use SL::AR;
+use SL::FU;
use SL::IS;
use SL::PE;
use SL::ReportGenerator;
sub add {
$lxdebug->enter_sub();
+ $auth->assert('general_ledger');
+
return $lxdebug->leave_sub() if (load_draft_maybe());
# saving the history
# /saving the history
$form->{title} = "Add";
- $form->{callback} =
- "$form->{script}?action=add&login=$form->{login}&password=$form->{password}"
- unless $form->{callback};
+ $form->{callback} = "ar.pl?action=add" unless $form->{callback};
AR->get_transdate(\%myconfig, $form);
$form->{initial_transdate} = $form->{transdate};
sub edit {
$lxdebug->enter_sub();
+
+ $auth->assert('general_ledger');
+
# show history button
$form->{javascript} = qq|<script type="text/javascript" src="js/show_history.js"></script>|;
#/show hhistory button
sub display_form {
$lxdebug->enter_sub();
+ $auth->assert('general_ledger');
+
&form_header;
&form_footer;
sub create_links {
$lxdebug->enter_sub();
+ $auth->assert('general_ledger');
+
my ($duedate, $taxincluded, @curr);
$form->create_links("AR", \%myconfig, "customer");
sub form_header {
$lxdebug->enter_sub();
+ $auth->assert('general_ledger');
+
my ($title, $readonly, $exchangerate, $rows);
my ($taxincluded, $notes, $department, $customer, $employee, $amount, $project);
my ($jsscript, $button1, $button2, $onload);
qq|<td><input name=duedate id=duedate size=11 title="$myconfig{dateformat}" value="$form->{duedate}" onBlur=\"check_right_date_format(this)\"></td>|;
}
+ my $follow_up_vc = $form->{customer};
+ $follow_up_vc =~ s/--.*?//;
+ my $follow_up_trans_info = "$form->{invnumber} ($follow_up_vc)";
+
$form->{javascript} .=
qq|<script type="text/javascript" src="js/common.js"></script>| .
- qq|<script type="text/javascript" src="js/show_vc_details.js"></script>|;
+ qq|<script type="text/javascript" src="js/show_vc_details.js"></script>| .
+ qq|<script type="text/javascript" src="js/follow_up.js"></script>|;
$form->header;
$onload = qq|focus()|;
<input type=hidden name=closedto value=$form->{closedto}>
<input type=hidden name=locked value=$form->{locked}>
<input type=hidden name=title value="$title">
+<input type="hidden" name="follow_up_trans_id_1" value="| . H($form->{id}) . qq|">
+<input type="hidden" name="follow_up_trans_type_1" value="ar_transaction">
+<input type="hidden" name="follow_up_trans_info_1" value="| . H($follow_up_trans_info) . qq|">
+<input type="hidden" name="follow_up_rowcount" value="1">
| . ($form->{saved_message} ? qq|<p>$form->{saved_message}</p>| : "") . qq|
sub form_footer {
$lxdebug->enter_sub();
+ $auth->assert('general_ledger');
+
my ($transdate, $closedto);
+ my $follow_ups_block;
+ if ($form->{id}) {
+ my $follow_ups = FU->follow_ups('trans_id' => $form->{id});
+
+ if (@{ $follow_ups} ) {
+ my $num_due = sum map { $_->{due} * 1 } @{ $follow_ups };
+ $follow_ups_block = qq|<p>| . $locale->text("There are #1 unfinished follow-ups of which #2 are due.", scalar @{ $follow_ups }, $num_due) . qq|</p>|;
+ }
+ }
+
print qq|
+$follow_ups_block
+
<input name=gldate type=hidden value="| . Q($form->{gldate}) . qq|">
<input name=callback type=hidden value="$form->{callback}">
-
-<input type=hidden name=login value=$form->{login}>
-<input type=hidden name=password value=$form->{password}>
|
. $cgi->hidden('-name' => 'draft_id', '-default' => [$form->{draft_id}])
. $cgi->hidden('-name' => 'draft_description', '-default' => [$form->{draft_description}])
<input class=submit type=submit name=action value="| . $locale->text('Use As Template') . qq|"> |;
}
print qq|
- <input class=submit type=submit name=action value="| . $locale->text('Post Payment') . qq|"> |;
+ <input class=submit type=submit name=action value="| . $locale->text('Post Payment') . qq|">
+ <input type="button" class="submit" onclick="follow_up_window()" value="|
+ . $locale->text('Follow-Up')
+ . qq|"> |;
} else {
if ($transdate > $closedto) {
sub mark_as_paid {
$lxdebug->enter_sub();
+
+ $auth->assert('general_ledger');
+
&mark_as_paid_common(\%myconfig,"ar");
+
$lxdebug->leave_sub();
}
sub update {
$lxdebug->enter_sub();
+ $auth->assert('general_ledger');
+
my $display = shift;
my ($totaltax, $exchangerate, $totalpaid);
sub post_payment {
$lxdebug->enter_sub();
+ $auth->assert('general_ledger');
+
$form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
for my $i (1 .. $form->{paidaccounts}) {
}
sub _post {
+
+ $auth->assert('general_ledger');
+
# inline post
post(1);
}
sub post {
$lxdebug->enter_sub();
+ $auth->assert('general_ledger');
+
my ($inline) = @_;
my ($datepaid);
sub post_as_new {
$lxdebug->enter_sub();
+ $auth->assert('general_ledger');
+
$form->{postasnew} = 1;
# saving the history
if(!exists $form->{addition} && $form->{id} ne "") {
sub use_as_template {
$lxdebug->enter_sub();
+ $auth->assert('general_ledger');
+
map { delete $form->{$_} } qw(printed emailed queued invnumber invdate deliverydate id datepaid_1 source_1 memo_1 paid_1 exchangerate_1 AP_paid_1 storno);
$form->{paidaccounts} = 1;
$form->{rowcount}--;
sub delete {
$lxdebug->enter_sub();
+ $auth->assert('general_ledger');
+
$form->{title} = $locale->text('Confirm!');
$form->header;
|;
foreach my $key (keys %$form) {
+ next if (($key eq 'login') || ($key eq 'password') || ('' ne ref $form->{$key}));
$form->{$key} =~ s/\"/"/g;
print qq|<input type=hidden name=$key value="$form->{$key}">\n|;
}
sub yes {
$lxdebug->enter_sub();
+
+ $auth->assert('general_ledger');
+
if (AR->delete_transaction(\%myconfig, \%$form)) {
# saving the history
if(!exists $form->{addition}) {
sub search {
$lxdebug->enter_sub();
+ $auth->assert('general_ledger | invoice_edit');
+
my ($customer, $department);
my ($jsscript, $button1, $button2, $onload);
<input type=hidden name=nextsub value=$form->{nextsub}>
-<input type=hidden name=login value=$form->{login}>
-<input type=hidden name=password value=$form->{password}>
-
<br>
<input class=submit type=submit name=action value="|
. $locale->text('Continue') . qq|">
sub ar_transactions {
$lxdebug->enter_sub();
+ $auth->assert('general_ledger | invoice_edit');
+
my ($callback, $href, @columns);
$form->{customer} = $form->unescape($form->{customer});
map { $subtotals{$_} += $ar->{$_};
$totals{$_} += $ar->{$_} } @subtotal_columns;
- $subtotals{marge_percent} = $subtotals{marge_total} / $subtotals{netamount} * 100;
- $totals{marge_percent} = $totals{marge_total} / $totals{netamount} * 100;
+ $subtotals{marge_percent} = $subtotals{netamount} ? ($subtotals{marge_total} * 100 / $subtotals{netamount}) : 0;
+ $totals{marge_percent} = $totals{netamount} ? ($totals{marge_total} * 100 / $totals{netamount} ) : 0;
map { $ar->{$_} = $form->format_amount(\%myconfig, $ar->{$_}, 2) } qw(netamount tax amount paid due marge_total marge_percent);
sub storno {
$lxdebug->enter_sub();
+ $auth->assert('general_ledger');
+
# don't cancel cancelled transactions
if (IS->has_storno(\%myconfig, $form, 'ar')) {
$form->{title} = $locale->text("Cancel Accounts Receivables Transaction");