X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/4dbb09950c9f5596646537c12d991c99086fe7c1..fbcd5580:/bin/mozilla/ir.pl diff --git a/bin/mozilla/ir.pl b/bin/mozilla/ir.pl index f6df8494b..748191059 100644 --- a/bin/mozilla/ir.pl +++ b/bin/mozilla/ir.pl @@ -24,840 +24,863 @@ # 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 # #====================================================================== - +use SL::FU; use SL::IR; -use SL::PE; +use SL::IS; +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/common.pl"; -require "$form->{path}/io.pl"; -require "$form->{path}/arap.pl"; +use strict; 1; + # end of main +sub add { + $main::lxdebug->enter_sub(); + my $form = $main::form; + my $locale = $main::locale; -sub add { - $lxdebug->enter_sub(); + $main::auth->assert('vendor_invoice_edit'); + + if (!$::instance_conf->get_allow_new_purchase_invoice) { + $::form->show_generic_error($::locale->text("You do not have the permissions to access this function.")); + } + + $form->{show_details} = $::myconfig{show_form_details}; - $form->{title} = $locale->text('Add Vendor Invoice'); + $form->{title} = $locale->text('Record Vendor Invoice'); &invoice_links; &prepare_invoice; &display_form; - - $lxdebug->leave_sub(); -} + $main::lxdebug->leave_sub(); +} sub edit { - $lxdebug->enter_sub(); + $main::lxdebug->enter_sub(); + + my $form = $main::form; + my $locale = $main::locale; + + $main::auth->assert('vendor_invoice_edit'); + + $form->{show_details} = $::myconfig{show_form_details}; + + # show history button + $form->{javascript} = qq||; + #/show hhistory button $form->{title} = $locale->text('Edit Vendor Invoice'); &invoice_links; &prepare_invoice; &display_form; - - $lxdebug->leave_sub(); -} + $main::lxdebug->leave_sub(); +} sub invoice_links { - $lxdebug->enter_sub(); + $main::lxdebug->enter_sub(); + + my $form = $main::form; + my %myconfig = %main::myconfig; + + $main::auth->assert('vendor_invoice_edit'); + + $form->{vc} = 'vendor'; # create links - $form->{webdav} = $webdav; - - # set jscalendar - $form->{jscalendar} = $jscalendar; - $form->create_links("AP", \%myconfig, "vendor"); - if ($form->{all_vendor}) { - unless ($form->{vendor_id}) { - $form->{vendor_id} = $form->{all_vendor}->[0]->{id}; - } - } - - $cp_id = $form->{cp_id}; + $form->backup_vars(qw(payment_id language_id taxzone_id + currency delivery_term_id intnotes cp_id)); + IR->get_vendor(\%myconfig, \%$form); IR->retrieve_invoice(\%myconfig, \%$form); - $form->{cp_id} = $cp_id; - - # currencies - @curr = split /:/, $form->{currencies}; - chomp $curr[0]; - $form->{defaultcurrency} = $curr[0]; - map { $form->{selectcurrency} .= ""; } + next unless $form->{acc_trans}{$key}; + if ($key eq "AP_paid") { - for $i (1 .. scalar @{ $form->{acc_trans}{$key} }) { - $form->{"AP_paid_$i"} = "$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}"; - # reverse paid - $form->{"paid_$i"} = $form->{acc_trans}{$key}->[$i-1]->{amount}; - $form->{"datepaid_$i"} = $form->{acc_trans}{$key}->[$i-1]->{transdate}; - $form->{"forex_$i"} = $form->{"exchangerate_$i"} = $form->{acc_trans}{$key}->[$i-1]->{exchangerate}; - $form->{"source_$i"} = $form->{acc_trans}{$key}->[$i-1]->{source}; - $form->{"memo_$i"} = $form->{acc_trans}{$key}->[$i-1]->{memo}; - - $form->{paidaccounts} = $i; + for my $i (1 .. scalar @{ $form->{acc_trans}{$key} }) { + $form->{"AP_paid_$i"} = + "$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}"; + + $form->{"acc_trans_id_$i"} = $form->{acc_trans}{$key}->[$i - 1]->{acc_trans_id}; + # reverse paid + $form->{"paid_$i"} = $form->{acc_trans}{$key}->[$i - 1]->{amount}; + $form->{"datepaid_$i"} = + $form->{acc_trans}{$key}->[$i - 1]->{transdate}; + $form->{"gldate_$i"} = $form->{acc_trans}{$key}->[$i - 1]->{gldate}; + $form->{"forex_$i"} = $form->{"exchangerate_$i"} = + $form->{acc_trans}{$key}->[$i - 1]->{exchangerate}; + $form->{"source_$i"} = $form->{acc_trans}{$key}->[$i - 1]->{source}; + $form->{"memo_$i"} = $form->{acc_trans}{$key}->[$i - 1]->{memo}; + + $form->{paidaccounts} = $i; } } else { - $form->{$key} = "$form->{acc_trans}{$key}->[0]->{accno}--$form->{acc_trans}{$key}->[0]->{description}"; + $form->{$key} = + "$form->{acc_trans}{$key}->[0]->{accno}--$form->{acc_trans}{$key}->[0]->{description}"; } - + } $form->{paidaccounts} = 1 unless (exists $form->{paidaccounts}); $form->{AP} = $form->{AP_1} unless $form->{id}; - $form->{locked} = ($form->datetonum($form->{invdate}, \%myconfig) <= $form->datetonum($form->{closedto}, \%myconfig)); - - $lxdebug->leave_sub(); + $form->{locked} = + ($form->datetonum($form->{invdate}, \%myconfig) <= + $form->datetonum($form->{closedto}, \%myconfig)); + + $main::lxdebug->leave_sub(); } +sub prepare_invoice { + $main::lxdebug->enter_sub(); + my $form = $main::form; + my %myconfig = %main::myconfig; -sub prepare_invoice { - $lxdebug->enter_sub(); + $main::auth->assert('vendor_invoice_edit'); + + $form->{type} = "purchase_invoice"; if ($form->{id}) { - + map { $form->{$_} =~ s/\"/"/g } qw(invnumber ordnumber quonumber); - foreach $ref (@{ $form->{invoice_details} }) { + my $i = 0; + foreach my $ref (@{ $form->{invoice_details} }) { $i++; - map { $form->{"${_}_$i"} = $ref->{$_} } keys %{ $ref }; - - ($dec) = ($form->{"sellprice_$i"} =~ /\.(\d+)/); - $dec = length $dec; - $decimalplaces = ($dec > 2) ? $dec : 2; - - $form->{"sellprice_$i"} = $form->format_amount(\%myconfig, $form->{"sellprice_$i"}, $decimalplaces); - $form->{"qty_$i"} = $form->format_amount(\%myconfig, ($form->{"qty_$i"} * -1)); + map { $form->{"${_}_$i"} = $ref->{$_} } keys %{$ref}; + # übernommen aus is.pl Fix für Bug 1642. Nebenwirkungen? jb 12.5.2011 + # getestet: Lieferantenauftrag -> Rechnung i.O. + # Lieferantenauftrag -> Lieferschein -> Rechnung i.O. + # Werte: 20% (Lieferantenrabatt), 12,4% individuell und 0,4 individuell s.a. + # Screenshot zu Bug 1642 + $form->{"discount_$i"} = $form->format_amount(\%myconfig, $form->{"discount_$i"} * 100); + + my ($dec) = ($form->{"sellprice_$i"} =~ /\.(\d+)/); + $dec = length $dec; + my $decimalplaces = ($dec > 2) ? $dec : 2; + + $form->{"sellprice_$i"} = + $form->format_amount(\%myconfig, $form->{"sellprice_$i"}, + $decimalplaces); + + (my $dec_qty) = ($form->{"qty_$i"} =~ /\.(\d+)/); + $dec_qty = length $dec_qty; + + $form->{"qty_$i"} = + $form->format_amount(\%myconfig, ($form->{"qty_$i"} * -1), $dec_qty); $form->{rowcount} = $i; } } - - $lxdebug->leave_sub(); -} - + $main::lxdebug->leave_sub(); +} sub form_header { - $lxdebug->enter_sub(); - - # set option selected - foreach $item (qw(AP vendor currency department contact)) { + $main::lxdebug->enter_sub(); + + my $form = $main::form; + my %myconfig = %main::myconfig; + my $locale = $main::locale; + my $cgi = $::request->{cgi}; + + $main::auth->assert('vendor_invoice_edit'); + + 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}; + + $form->{defaultcurrency} = $form->get_default_currency(\%myconfig); + + 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("taxzones" => ($form->{id} ? "ALL_TAXZONES" : "ALL_ACTIVE_TAXZONES"), + "currencies" => "ALL_CURRENCIES", + "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 => [ + cp_cv_id => $::form->{"$::form->{vc}_id"} * 1, + and => [ + cp_cv_id => undef, + cp_id => $::form->{cp_id} * 1 + ] + ] + ]); + + # currencies and exchangerate + my @values = map { $_ } @{ $form->{ALL_CURRENCIES} }; + my %labels = map { $_ => $_ } @{ $form->{ALL_CURRENCIES} }; + $form->{currency} = $form->{defaultcurrency} unless $form->{currency}; + # show_exchangerate is also later needed in another template + $form->{show_exchangerate} = $form->{currency} ne $form->{defaultcurrency}; + $TMPL_VAR{currencies} = NTI($cgi->popup_menu('-name' => 'currency', '-default' => $form->{"currency"}, + '-values' => \@values, '-labels' => \%labels, + '-onchange' => "document.getElementById('update_button').click();" + )) if scalar @values; + push @custom_hiddens, "forex"; + push @custom_hiddens, "exchangerate" if $form->{forex}; + + $TMPL_VAR{creditwarning} = ($form->{creditlimit} != 0) && ($form->{creditremaining} < 0) && !$form->{update}; + $TMPL_VAR{is_credit_remaining_negativ} = $form->{creditremaining} =~ /-/; + +# set option selected + foreach my $item (qw(AP)) { $form->{"select$item"} =~ s/ selected//; $form->{"select$item"} =~ s/option>\Q$form->{$item}\E/option selected>$form->{$item}/; } - - $form->{exchangerate} = $form->format_amount(\%myconfig, $form->{exchangerate}); - - $form->{creditlimit} = $form->format_amount(\%myconfig, $form->{creditlimit}, 0, "0"); - $form->{creditremaining} = $form->format_amount(\%myconfig, $form->{creditremaining}, 0, "0"); - - #build contacts - if ($form->{all_contacts}) { - - $form->{selectcontact} = ""; - foreach $item (@{$form->{all_contacts}}) { - if ($form->{cp_id} == $item->{cp_id}) - { - $form->{selectcontact} .= "