+
+
+
+ |
+ . $locale->text('Payments') . qq| |
+
+|;
+} else {
print qq|
@@ -692,6 +995,7 @@ sub form_footer {
. $locale->text('Incoming Payments') . qq|
|
|;
+}
if ($form->{currency} eq $form->{defaultcurrency}) {
@column_index = qw(datepaid source memo paid AR_paid);
@@ -714,6 +1018,8 @@ sub form_footer {
";
+ my @triggers = ();
+
$form->{paidaccounts}++ if ($form->{"paid_$form->{paidaccounts}"});
for $i (1 .. $form->{paidaccounts}) {
@@ -726,8 +1032,10 @@ sub form_footer {
# format amounts
$totalpaid += $form->{"paid_$i"};
- $form->{"paid_$i"} =
- $form->format_amount(\%myconfig, $form->{"paid_$i"}, 2);
+ if ($form->{"paid_$i"}) {
+ $form->{"paid_$i"} =
+ $form->format_amount(\%myconfig, $form->{"paid_$i"}, 2);
+ }
$form->{"exchangerate_$i"} =
$form->format_amount(\%myconfig, $form->{"exchangerate_$i"});
@@ -752,7 +1060,8 @@ sub form_footer {
$column_data{"AR_paid_$i"} =
qq| | |;
$column_data{"datepaid_$i"} =
- qq|{"datepaid_$i"}> | |;
+ qq|{"datepaid_$i"}>
+ | |;
$column_data{"source_$i"} =
qq| | |;
$column_data{"memo_$i"} =
@@ -761,6 +1070,7 @@ sub form_footer {
map { print qq|$column_data{"${_}_$i"}\n| } @column_index;
print "
\n";
+ push(@triggers, "datepaid_$i", "BL", "trigger_datepaid_$i");
}
print qq|
@@ -791,31 +1101,38 @@ sub form_footer {
if ($form->{id}) {
print qq|
-
+ . $locale->text('E-mail') . qq|"> |;
+ print qq| | unless ($form->{storno});
+ print qq|
|;
-
- if (!$form->{revtrans}) {
- if (!$form->{locked}) {
- print qq|
-
-
+ print qq|
|;
- }
- }
+ if ($form->{id} && !($form->{type} eq "credit_note")) {
+ print qq|
+
+|;
+ }
+ if ($form->{radier}) {
+ print qq|
+
+|;
+ }
+
if ($invdate > $closedto) {
print qq|
-
|;
@@ -823,7 +1140,7 @@ sub form_footer {
} else {
if ($invdate > $closedto) {
- print qq|text('Update') . qq|">
@@ -834,21 +1151,34 @@ sub form_footer {
|;
+ . $locale->text('Post') . qq|"> | .
+ NTI($cgi->submit('-name' => 'action', '-value' => $locale->text('Save draft'),
+ '-class' => 'submit'));
}
}
- if ($form->{menubar}) {
- require "$form->{path}/menu.pl";
- &menubar;
+ # button for saving history
+ if($form->{id} ne "") {
+ print qq|
+ |;
}
+ # /button for saving history
- print qq|
+
+ print $form->write_trigger(\%myconfig, scalar(@triggers) / 3, @triggers) .
+ qq|
{rowcount}>
-
+|
+. $cgi->hidden('-name' => 'draft_id', '-default' => [$form->{draft_id}])
+. $cgi->hidden('-name' => 'draft_description', '-default' => [$form->{draft_description}])
+. qq|
{path}>
{login}>
{password}>
@@ -871,9 +1201,10 @@ sub update {
if ($form->{second_run}) {
$form->{print_and_post} = 0;
}
- &check_name(customer);
- &check_project;
+ $form->{update} = 1;
+
+ &check_name(customer);
$form->{exchangerate} = $exchangerate
if (
@@ -911,7 +1242,7 @@ sub update {
$form->{creditremaining} += ($form->{oldinvtotal} - $form->{oldtotalpaid});
&check_form;
- } else {
+ } else {
IS->retrieve_item(\%myconfig, \%$form);
@@ -930,14 +1261,19 @@ sub update {
} else {
- $sellprice = $form->format_amount(\%myconfig, $form->{"sellprice_$i"});
+ $sellprice = $form->parse_amount(\%myconfig, $form->{"sellprice_$i"});
map { $form->{item_list}[$i]{$_} =~ s/\"/"/g }
qw(partnumber description unit);
map { $form->{"${_}_$i"} = $form->{item_list}[0]{$_} }
keys %{ $form->{item_list}[0] };
+ if ($form->{"part_payment_id_$i"} ne "") {
+ $form->{payment_id} = $form->{"part_payment_id_$i"};
+ }
- $form->{"discount_$i"} = $form->{discount} * 100;
+ if ($form->{"not_discountable_$i"}) {
+ $form->{"discount_$i"} = 0;
+ }
$s = ($sellprice) ? $sellprice : $form->{"sellprice_$i"};
($dec) = ($s =~ /\.(\d+)/);
@@ -1021,6 +1357,37 @@ sub update {
$lxdebug->leave_sub();
}
+sub post_payment {
+ $lxdebug->enter_sub();
+ for $i (1 .. $form->{paidaccounts}) {
+ if ($form->{"paid_$i"}) {
+ $datepaid = $form->datetonum($form->{"datepaid_$i"}, \%myconfig);
+
+ $form->isblank("datepaid_$i", $locale->text('Payment date missing!'));
+
+ $form->error($locale->text('Cannot post payment for a closed period!'))
+ if ($datepaid <= $closedto);
+
+ if ($form->{currency} ne $form->{defaultcurrency}) {
+ $form->{"exchangerate_$i"} = $form->{exchangerate}
+ if ($invdate == $datepaid);
+ $form->isblank("exchangerate_$i",
+ $locale->text('Exchangerate for payment missing!'));
+ }
+ }
+ }
+
+ ($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!'));
+
+
+ $lxdebug->leave_sub();
+}
+
sub post {
$lxdebug->enter_sub();
$form->isblank("invdate", $locale->text('Invoice Date missing!'));
@@ -1047,7 +1414,7 @@ sub post {
if ($form->{currency} ne $form->{defaultcurrency});
for $i (1 .. $form->{paidaccounts}) {
- if ($form->{"paid_$i"}) {
+ if ($form->parse_amount(\%myconfig, $form->{"paid_$i"})) {
$datepaid = $form->datetonum($form->{"datepaid_$i"}, \%myconfig);
$form->isblank("datepaid_$i", $locale->text('Payment date missing!'));
@@ -1073,16 +1440,43 @@ sub post {
# get new invnumber in sequence if no invnumber is given or if posasnew was requested
if (!$form->{invnumber} || $form->{postasnew}) {
- $form->{invnumber} = $form->update_defaults(\%myconfig, "invnumber")
+ if ($form->{type} eq "credit_note") {
+ $form->{invnumber} = $form->update_defaults(\%myconfig, "cnnumber");
+ } else {
+ $form->{invnumber} = $form->update_defaults(\%myconfig, "invnumber");
+ }
}
+ relink_accounts();
if ($print_post) {
if (!(IS->post_invoice(\%myconfig, \%$form))) {
$form->error($locale->text('Cannot post invoice!'));
}
+ remove_draft() if $form->{remove_draft};
+ # saving the history
+ if(!exists $form->{addition}) {
+ $form->{addition} = "PRINTED AND POSTED";
+ $form->save_history($form->dbconnect(\%myconfig));
+ }
+ # /saving the history
+
} else {
- $form->redirect(
- $form->{label} . " $form->{invnumber} " . $locale->text('posted!'))
- if (IS->post_invoice(\%myconfig, \%$form));
+ if (IS->post_invoice(\%myconfig, \%$form)){
+ remove_draft() if $form->{remove_draft};
+ # saving the history
+ if(!exists $form->{addition}) {
+ if($form->{storno}) {
+ $form->{addition} = "STORNO";
+ }
+ else {
+ $form->{addition} = "POSTED";
+ }
+ $form->save_history($form->dbconnect(\%myconfig));
+ }
+ # /saving the history
+
+ $form->redirect(
+ $form->{label} . " $form->{invnumber} " . $locale->text('posted!'));
+ }
$form->error($locale->text('Cannot post invoice!'));
}
@@ -1102,6 +1496,35 @@ sub print_and_post {
}
+sub use_as_template {
+ $lxdebug->enter_sub();
+
+ 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}--;
+ $form->{invdate} = $form->current_date(\%myconfig);
+ &display_form;
+
+ $lxdebug->leave_sub();
+}
+
+sub storno {
+ $lxdebug->enter_sub();
+
+ if ($form->{storno}) {
+ $form->error($locale->text('Cannot storno storno invoice!'));
+ }
+
+ $form->{storno_id} = $form->{id};
+ $form->{storno} = 1;
+ $form->{id} = "";
+ $form->{invnumber} = "Storno zu " . $form->{invnumber};
+
+ &post();
+ $lxdebug->leave_sub();
+
+}
+
sub preview {
$lxdebug->enter_sub();
@@ -1153,11 +1576,71 @@ sub delete {
$lxdebug->leave_sub();
}
-sub yes {
+sub credit_note {
$lxdebug->enter_sub();
- $form->redirect($locale->text('Invoice deleted!'))
- if (IS->delete_invoice(\%myconfig, \%$form, $spool));
+ $form->{transdate} = $form->{invdate} = $form->current_date(\%myconfig);
+ $form->{duedate} =
+ $form->current_date(\%myconfig, $form->{invdate}, $form->{terms} * 1);
+
+ $form->{id} = '';
+ $form->{rowcount}--;
+ $form->{shipto} = 1;
+
+
+ $form->{title} = $locale->text('Add Credit Note');
+ $form->{script} = 'is.pl';
+ $script = "is";
+ $buysell = 'buy';
+
+
+ # bo creates the id, reset it
+ map { delete $form->{$_} }
+ qw(id invnumber subject message cc bcc printed emailed queued);
+ $form->{ $form->{vc} } =~ s/--.*//g;
+ $form->{type} = "credit_note";
+
+
+ map { $form->{"select$_"} = "" } ($form->{vc}, currency);
+
+ map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) }
+ qw(creditlimit creditremaining);
+
+ $currency = $form->{currency};
+ &invoice_links;
+
+ $form->{currency} = $currency;
+ $form->{exchangerate} = "";
+ $form->{forex} = "";
+ $form->{exchangerate} = $exchangerate
+ if (
+ $form->{forex} = (
+ $exchangerate =
+ $form->check_exchangerate(
+ \%myconfig, $form->{currency}, $form->{invdate}, $buysell
+ )));
+
+ $form->{creditremaining} -= ($form->{oldinvtotal} - $form->{ordtotal});
+
+ &prepare_invoice;
+
+
+ &display_form;
+
+ $lxdebug->leave_sub();
+}
+
+sub yes {
+ $lxdebug->enter_sub();
+ if (IS->delete_invoice(\%myconfig, \%$form, $spool)) {
+ # saving the history
+ if(!exists $form->{addition}) {
+ $form->{addition} = "DELETED";
+ $form->save_history($form->dbconnect(\%myconfig));
+ }
+ # /saving the history
+ $form->redirect($locale->text('Invoice deleted!'));
+ }
$form->error($locale->text('Cannot delete invoice!'));
$lxdebug->leave_sub();
|