X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=bin%2Fmozilla%2Fir.pl;h=5691c443e8dc4235fa6461b317be02ebf22e47c2;hb=ee56f1b20ab915671ded297f593c0e2e245bad70;hp=2a3c59f419747a200243413f5664d53b37310039;hpb=281696eb5e8c1a2ca203907cbff7d18052037b2f;p=kivitendo-erp.git
diff --git a/bin/mozilla/ir.pl b/bin/mozilla/ir.pl
index 2a3c59f41..5691c443e 100644
--- a/bin/mozilla/ir.pl
+++ b/bin/mozilla/ir.pl
@@ -24,7 +24,8 @@
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1335, USA.
#======================================================================
#
# Inventory received module
@@ -34,15 +35,15 @@
use SL::FU;
use SL::IR;
use SL::IS;
-use SL::PE;
use SL::DB::Default;
+use SL::DB::Department;
+use SL::DB::PurchaseInvoice;
+use SL::DB::Vendor;
use List::Util qw(max sum);
+use List::UtilsBy qw(sort_by);
require "bin/mozilla/io.pl";
-require "bin/mozilla/invoice_io.pl";
-require "bin/mozilla/arap.pl";
require "bin/mozilla/common.pl";
-require "bin/mozilla/drafts.pl";
use strict;
@@ -62,7 +63,7 @@ sub add {
$::form->show_generic_error($::locale->text("You do not have the permissions to access this function."));
}
- return $main::lxdebug->leave_sub() if (load_draft_maybe());
+ $form->{show_details} = $::myconfig{show_form_details};
$form->{title} = $locale->text('Record Vendor Invoice');
@@ -81,6 +82,8 @@ sub edit {
$main::auth->assert('vendor_invoice_edit');
+ $form->{show_details} = $::myconfig{show_form_details};
+
# show history button
$form->{javascript} = qq||;
#/show hhistory button
@@ -105,21 +108,8 @@ sub invoice_links {
$form->{vc} = 'vendor';
# create links
- $form->{webdav} = $::instance_conf->get_webdav;
-
$form->create_links("AP", \%myconfig, "vendor");
- #quote all_vendor Bug 133
- foreach my $ref (@{ $form->{all_vendor} }) {
- $ref->{name} = $form->quote($ref->{name});
- }
-
- if ($form->{all_vendor}) {
- unless ($form->{vendor_id}) {
- $form->{vendor_id} = $form->{all_vendor}->[0]->{id};
- }
- }
-
$form->backup_vars(qw(payment_id language_id taxzone_id
currency delivery_term_id intnotes cp_id));
@@ -132,25 +122,6 @@ sub invoice_links {
my @curr = $form->get_all_currencies();
map { $form->{selectcurrency} .= "$_\n" } @curr;
- $form->{oldvendor} = "$form->{vendor}--$form->{vendor_id}";
-
- # build vendor/customer drop down comatibility... don't ask
- if (@{ $form->{"all_vendor"} || [] }) {
- $form->{"selectvendor"} = 1;
- $form->{vendor} = qq|$form->{vendor}--$form->{vendor_id}|;
- }
-
- # departments
- if ($form->{all_departments}) {
- $form->{selectdepartment} = " \n";
- $form->{department} = "$form->{department}--$form->{department_id}";
-
- map {
- $form->{selectdepartment} .=
- " $_->{description}--$_->{id}\n"
- } (@{ $form->{all_departments} || [] });
- }
-
# forex
$form->{forex} = $form->{exchangerate};
my $exchangerate = ($form->{exchangerate}) ? $form->{exchangerate} : 1;
@@ -258,6 +229,8 @@ sub form_header {
my %TMPL_VAR = ();
my @custom_hiddens;
+ $TMPL_VAR{invoice_obj} = SL::DB::PurchaseInvoice->load_cached($form->{id}) if $form->{id};
+ $TMPL_VAR{vendor_obj} = SL::DB::Vendor->load_cached($form->{vendor_id}) if $form->{vendor_id};
$form->{employee_id} = $form->{old_employee_id} if $form->{old_employee_id};
$form->{salesman_id} = $form->{old_salesman_id} if $form->{old_salesman_id};
@@ -266,15 +239,11 @@ sub form_header {
my @old_project_ids = ($form->{"globalproject_id"});
map { push @old_project_ids, $form->{"project_id_$_"} if $form->{"project_id_$_"}; } 1..$form->{"rowcount"};
- $form->get_lists("projects" => { "key" => "ALL_PROJECTS",
- "all" => 0,
- "old_id" => \@old_project_ids },
- "taxzones" => "ALL_TAXZONES",
+ $form->get_lists("taxzones" => ($form->{id} ? "ALL_TAXZONES" : "ALL_ACTIVE_TAXZONES"),
"currencies" => "ALL_CURRENCIES",
- "vendors" => "ALL_VENDORS",
- "departments" => "all_departments",
"price_factors" => "ALL_PRICE_FACTORS");
+ $TMPL_VAR{ALL_DEPARTMENTS} = SL::DB::Manager::Department->get_all_sorted;
$TMPL_VAR{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all_sorted(query => [ or => [ id => $::form->{employee_id}, deleted => 0 ] ]);
$TMPL_VAR{ALL_CONTACTS} = SL::DB::Manager::Contact->get_all_sorted(query => [
or => [
@@ -285,15 +254,6 @@ sub form_header {
]
]
]);
- $TMPL_VAR{department_labels} = sub { "$_[0]->{description}--$_[0]->{id}" };
-
- # customer
- $TMPL_VAR{vc_keys} = sub { "$_[0]->{name}--$_[0]->{id}" };
- $TMPL_VAR{vclimit} = $myconfig{vclimit};
- $TMPL_VAR{vc_select} = "customer_or_vendor_selection_window('vendor', '', 1, 0)";
- push @custom_hiddens, "vendor_id";
- push @custom_hiddens, "oldvendor";
- push @custom_hiddens, "selectvendor";
# currencies and exchangerate
my @values = map { $_ } @{ $form->{ALL_CURRENCIES} };
@@ -311,10 +271,6 @@ sub form_header {
$TMPL_VAR{creditwarning} = ($form->{creditlimit} != 0) && ($form->{creditremaining} < 0) && !$form->{update};
$TMPL_VAR{is_credit_remaining_negativ} = $form->{creditremaining} =~ /-/;
- my $follow_up_vc = $form->{vendor};
- $follow_up_vc =~ s/--\d*\s*$//;
- $TMPL_VAR{vendor_name} = $follow_up_vc;
-
# set option selected
foreach my $item (qw(AP)) {
$form->{"select$item"} =~ s/ selected//;
@@ -331,16 +287,16 @@ sub form_header {
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
- shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact shiptophone shiptofax
+ shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptogln shiptocontact shiptophone shiptofax
shiptoemail shiptodepartment_1 shiptodepartment_2 message email subject cc bcc taxaccounts cursor_fokus
- convert_from_do_ids convert_from_oe_ids show_details gldate useasnew
+ convert_from_do_ids convert_from_oe_ids convert_from_ap_ids show_details gldate useasnew
), @custom_hiddens,
map { $_.'_rate', $_.'_description', $_.'_taxnumber' } split / /, $form->{taxaccounts}];
$TMPL_VAR{payment_terms_obj} = get_payment_terms_for_invoice();
$form->{duedate} = $TMPL_VAR{payment_terms_obj}->calc_date(reference_date => $form->{invdate}, due_date => $form->{due_due})->to_kivitendo if $TMPL_VAR{payment_terms_obj};
- $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.SalesPurchase ckeditor/ckeditor ckeditor/adapters/jquery kivi.io autocomplete_customer autocomplete_part client_js));
+ $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.Draft kivi.SalesPurchase ckeditor/ckeditor ckeditor/adapters/jquery kivi.io autocomplete_customer autocomplete_part autocomplete_project client_js));
$form->header();
@@ -349,6 +305,25 @@ sub form_header {
$main::lxdebug->leave_sub();
}
+sub _sort_payments {
+ my @fields = qw(acc_trans_id gldate datepaid source memo paid AP_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();
@@ -386,11 +361,13 @@ sub form_footer {
# follow ups
if ($form->{id}) {
- $form->{follow_ups} = FU->follow_ups('trans_id' => $form->{id}) || [];
+ $form->{follow_ups} = FU->follow_ups('trans_id' => $form->{id}, 'not_done' => 1) || [];
$form->{follow_ups_unfinished} = ( sum map { $_->{due} * 1 } @{ $form->{follow_ups} } ) || 0;
}
# payments
+ _sort_payments();
+
my $totalpaid = 0;
$form->{paidaccounts}++ if ($form->{"paid_$form->{paidaccounts}"});
$form->{paid_indices} = [ 1 .. $form->{paidaccounts} ];
@@ -409,6 +386,14 @@ sub form_footer {
($form->current_date(\%myconfig) eq $form->{"gldate_$i"}));
}
+ $form->error($locale->text('Cannot post transaction above the maximum future booking date!'))
+ if ($form->date_max_future($form->{"datepaid_$i"}, \%myconfig));
+
+ #deaktivieren von Zahlungen ausserhalb der Bücherkontrolle
+ if ($form->date_closed($form->{"gldate_$i"})) {
+ $form->{"changeable_$i"} = 0;
+ }
+
$form->{"selectAP_paid_$i"} = $form->{selectAP_paid};
if (!$form->{"AP_paid_$i"}) {
$form->{"selectAP_paid_$i"} =~ s/option>$accno_arap--(.*?)>/option selected>$accno_arap--$1>/;
@@ -429,6 +414,7 @@ sub form_footer {
show_delete => ($::instance_conf->get_ir_changeable == 2)
? ($form->current_date(\%myconfig) eq $form->{gldate})
: ($::instance_conf->get_ir_changeable == 1),
+ today => DateTime->today,
});
##print $form->parse_html_template('ir/_payments'); # parser
##print $form->parse_html_template('webdav/_list'); # parser
@@ -437,16 +423,15 @@ sub form_footer {
}
sub mark_as_paid {
- $main::lxdebug->enter_sub();
-
- my $form = $main::form;
- my %myconfig = %main::myconfig;
+ $::auth->assert('vendor_invoice_edit');
- $main::auth->assert('vendor_invoice_edit');
+ SL::DB::PurchaseInvoice->new(id => $::form->{id})->load->mark_as_paid;
- &mark_as_paid_common(\%myconfig,"ap");
+ $::form->redirect($::locale->text("Marked as paid"));
+}
- $main::lxdebug->leave_sub();
+sub show_draft {
+ update();
}
sub update {
@@ -457,7 +442,9 @@ sub update {
$main::auth->assert('vendor_invoice_edit');
- &check_name('vendor');
+ if (($form->{previous_vendor_id} || $form->{vendor_id}) != $form->{vendor_id}) {
+ IR->get_vendor(\%myconfig, $form);
+ }
if (!$form->{forex}) { # read exchangerate from input field (not hidden)
$form->{exchangerate} = $form->parse_amount(\%myconfig, $form->{exchangerate});
@@ -499,7 +486,7 @@ sub update {
if ($rows > 1) {
select_item(mode => 'IR', pre_entered_qty => $form->{"qty_$i"});
- ::end_of_request();
+ $::dispatcher->end_request;
} else {
@@ -595,7 +582,8 @@ sub storno {
$form->{paidaccounts} = 0;
map { my $key = $_; delete $form->{$key} if grep { $key =~ /^$_/ } qw(datepaid_ gldate_ acc_trans_id_ source_ memo_ paid_ exchangerate_ AR_paid_) } keys %{ $form };
# set new ids for storno invoice
- delete $form->{"invoice_id_$_"} for 1 .. $form->{"rowcount"};
+ # set new persistent ids for storno invoice items
+ $form->{"converted_from_invoice_id_$_"} = delete $form->{"invoice_id_$_"} for 1 .. $form->{"rowcount"};
# saving the history
if(!exists $form->{addition} && $form->{id} ne "") {
@@ -606,6 +594,8 @@ sub storno {
}
# /saving the history
+ # record link invoice to storno
+ $form->{convert_from_ap_ids} = $form->{id};
$form->{storno_id} = $form->{id};
$form->{storno} = 1;
$form->{id} = "";
@@ -647,6 +637,7 @@ sub post_payment {
$main::auth->assert('vendor_invoice_edit');
+ $form->mtime_ischanged('ap') ;
$form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
for my $i (1 .. $form->{paidaccounts}) {
if ($form->{"paid_$i"}) {
@@ -654,8 +645,13 @@ sub post_payment {
$form->isblank("datepaid_$i", $locale->text('Payment date missing!'));
+ $form->error($locale->text('Cannot post transaction above the maximum future booking date!'))
+ if ($form->date_max_future($form->{"datepaid_$i"}, \%myconfig));
+
+ #Zusätzlich noch das Buchungsdatum in die Bücherkontrolle einbeziehen
+ # (Dient zur Prüfung ob ZE oder ZA geprüft werden soll)
$form->error($locale->text('Cannot post payment for a closed period!'))
- if ($form->date_closed($form->{"datepaid_$i"}, \%myconfig));
+ if ($form->date_closed($form->{"datepaid_$i"}) && !$form->date_closed($form->{"gldate_$i"}, \%myconfig));
if ($form->{currency} ne $form->{defaultcurrency}) {
# $form->{"exchangerate_$i"} = $form->{exchangerate} if ($invdate == $datepaid); # invdate isn't set here
@@ -706,19 +702,20 @@ sub post {
$main::auth->assert('vendor_invoice_edit');
+ $form->mtime_ischanged('ap');
$form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
$form->isblank("invdate", $locale->text('Invoice Date missing!'));
- $form->isblank("vendor", $locale->text('Vendor missing!'));
+ $form->isblank("vendor_id", $locale->text('Vendor missing!'));
$form->isblank("invnumber", $locale->text('Invnumber missing!'));
$form->{invnumber} =~ s/^\s*//g;
$form->{invnumber} =~ s/\s*$//g;
# if the vendor changed get new values
- if (&check_name('vendor')) {
+ if (($form->{previous_vendor_id} || $form->{vendor_id}) != $form->{vendor_id}) {
&update;
- ::end_of_request();
+ $::dispatcher->end_request;
}
if ($myconfig{mandatory_departments} && !$form->{department_id}) {
@@ -749,8 +746,13 @@ sub post {
$form->isblank("datepaid_$i", $locale->text('Payment date missing!'));
+ $form->error($locale->text('Cannot post transaction above the maximum future booking date!'))
+ if ($form->date_max_future($form->{"datepaid_$i"}, \%myconfig));
+
+ #Zusätzlich noch das Buchungsdatum in die Bücherkontrolle einbeziehen
+ # (Dient zur Prüfung ob ZE oder ZA geprüft werden soll)
$form->error($locale->text('Cannot post payment for a closed period!'))
- if ($form->date_closed($form->{"datepaid_$i"}, \%myconfig));
+ if ($form->date_closed($form->{"datepaid_$i"}) && !$form->date_closed($form->{"gldate_$i"}, \%myconfig));
if ($form->{currency} ne $form->{defaultcurrency}) {
$form->{"exchangerate_$i"} = $form->{exchangerate}
@@ -778,7 +780,6 @@ sub post {
$form->save_history;
}
# /saving the history
- remove_draft() if $form->{remove_draft};
$form->redirect( $locale->text('Invoice')
. " $form->{invnumber} "
. $locale->text('posted!'));
@@ -825,6 +826,27 @@ sub delete {
$main::lxdebug->leave_sub();
}
+sub display_form {
+ $::lxdebug->enter_sub;
+
+ $::auth->assert('vendor_invoice_edit');
+
+ relink_accounts();
+
+ my $new_rowcount = $::form->{"rowcount"} * 1 + 1;
+ $::form->{"project_id_${new_rowcount}"} = $::form->{"globalproject_id"};
+
+ $::form->language_payment(\%::myconfig);
+
+ Common::webdav_folder($::form);
+
+ form_header();
+ display_row(++$::form->{rowcount});
+ form_footer();
+
+ $::lxdebug->leave_sub;
+}
+
sub yes {
$main::lxdebug->enter_sub();