X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fis.pl;h=d0e25062a175bb275636ccb57b3404fcd3309ea1;hb=94f5cb152afa9210162295b6727801c296af0631;hp=2fd82c7b8754fe3161731b64fb94fc8ddb379a4c;hpb=581862258b9fb1d1363d6b95280074f27134b6d5;p=kivitendo-erp.git diff --git a/bin/mozilla/is.pl b/bin/mozilla/is.pl index 2fd82c7b8..d0e25062a 100644 --- a/bin/mozilla/is.pl +++ b/bin/mozilla/is.pl @@ -35,6 +35,7 @@ use SL::FU; use SL::IS; use SL::OE; +use SL::Helper::UserPreferences::DisplayPreferences; use SL::MoreCommon qw(restore_form save_form); use SL::RecordLinks; @@ -62,9 +63,10 @@ use strict; # end of main sub _may_view_or_edit_this_invoice { - return 1 if $::auth->assert('invoice_edit', 1); # may edit all invoices - return 0 if !$::form->{id}; # creating new invoices isn't allowed without invoice_edit - return 0 if !$::form->{globalproject_id}; # existing records without a project ID are not allowed + return 1 if $::auth->assert('invoice_edit', 1); # may edit all invoices + return 0 if !$::form->{id}; # creating new invoices isn't allowed without invoice_edit + return 1 if $::auth->assert('sales_invoice_view', 1); # viewing is allowed with this right + return 0 if !$::form->{globalproject_id}; # existing records without a project ID are not allowed return SL::DB::Project->new(id => $::form->{globalproject_id})->load->may_employee_view_project_invoices(SL::DB::Manager::Employee->current); } @@ -95,6 +97,9 @@ sub add { } elsif ($form->{type} eq "invoice_for_advance_payment") { $form->{title} = $locale->text('Add Invoice for Advance Payment'); + } elsif ($form->{type} eq "final_invoice") { + $form->{title} = $locale->text('Add Final Invoice'); + } else { $form->{title} = $locale->text('Add Sales Invoice'); @@ -143,6 +148,9 @@ sub edit { $form->{title} = $locale->text('Edit Invoice for Advance Payment'); $form->{title} = $locale->text('Edit Storno Invoice for Advance Payment') if $form->{storno}; + } elsif ($form->{type} eq "final_invoice") { + $form->{title} = $locale->text('Edit Final Invoice'); + } else { $form->{title} = $locale->text('Edit Sales Invoice'); $form->{title} = $locale->text('Edit Storno Invoice') if $form->{storno}; @@ -253,6 +261,10 @@ sub prepare_invoice { $form->{type} = "invoice_for_advance_payment"; $form->{formname} = "invoice_for_advance_payment"; + } elsif ($form->{type} eq "final_invoice") { + $form->{type} = "final_invoice"; + $form->{formname} = "final_invoice"; + } elsif ($form->{formname} eq "proforma" ) { $form->{type} = "invoice"; @@ -323,7 +335,14 @@ sub setup_is_action_bar { if ($form->{id} && $form->{type} eq "invoice_for_advance_payment") { my $invoice_obj = SL::DB::Invoice->load_cached($form->{id}); my $lr = $invoice_obj->linked_records(direction => 'to', to => ['Invoice']); - $has_final_invoice = any {'SL::DB::Invoice' eq ref $_ && "invoice" eq $_->invoice_type} @$lr; + $has_final_invoice = any {'SL::DB::Invoice' eq ref $_ && "final_invoice" eq $_->invoice_type} @$lr; + } + + my $is_invoice_for_advance_payment_from_order; + if ($form->{id} && $form->{type} eq "invoice_for_advance_payment") { + my $invoice_obj = SL::DB::Invoice->load_cached($form->{id}); + my $lr = $invoice_obj->linked_records(direction => 'from', from => ['Order']); + $is_invoice_for_advance_payment_from_order = scalar @$lr >= 1; } for my $bar ($::request->layout->get('actionbar')) { @@ -368,7 +387,7 @@ sub setup_is_action_bar { disabled => !$may_edit_create ? t8('You must not change this invoice.') : !$form->{id} ? t8('This invoice has not been posted yet.') : undef, - only_if => $::instance_conf->get_is_show_mark_as_paid && $form->{type} ne "invoice_for_advance_payment", + only_if => ($::instance_conf->get_is_show_mark_as_paid && $form->{type} ne "invoice_for_advance_payment") || $form->{type} eq 'final_invoice', ], ], # end of combobox "Post" @@ -414,22 +433,24 @@ sub setup_is_action_bar { t8('Further Invoice for Advance Payment'), submit => [ '#form', { action => "further_invoice_for_advance_payment" } ], checks => [ 'kivi.validate_form' ], - disabled => !$may_edit_create ? t8('You must not change this invoice.') - : !$form->{id} ? t8('This invoice has not been posted yet.') - : $has_further_invoice_for_advance_payment ? t8('This invoice has already a further invoice for advanced payment.') - : $has_final_invoice ? t8('This invoice has already a final invoice.') - : undef, + disabled => !$may_edit_create ? t8('You must not change this invoice.') + : !$form->{id} ? t8('This invoice has not been posted yet.') + : $has_further_invoice_for_advance_payment ? t8('This invoice has already a further invoice for advanced payment.') + : $has_final_invoice ? t8('This invoice has already a final invoice.') + : $is_invoice_for_advance_payment_from_order ? t8('This invoice was added from an order. See there.') + : undef, only_if => $form->{type} eq "invoice_for_advance_payment", ], action => [ t8('Final Invoice'), submit => [ '#form', { action => "final_invoice" } ], checks => [ 'kivi.validate_form' ], - disabled => !$may_edit_create ? t8('You must not change this invoice.') - : !$form->{id} ? t8('This invoice has not been posted yet.') - : $has_further_invoice_for_advance_payment ? t8('This invoice has a further invoice for advanced payment.') - : $has_final_invoice ? t8('This invoice has already a final invoice.') - : undef, + disabled => !$may_edit_create ? t8('You must not change this invoice.') + : !$form->{id} ? t8('This invoice has not been posted yet.') + : $has_further_invoice_for_advance_payment ? t8('This invoice has a further invoice for advanced payment.') + : $has_final_invoice ? t8('This invoice has already a final invoice.') + : $is_invoice_for_advance_payment_from_order ? t8('This invoice was added from an order. See there.') + : undef, only_if => $form->{type} eq "invoice_for_advance_payment", ], action => [ @@ -605,11 +626,12 @@ sub form_header { $form->{"select$item"} =~ s/option>\Q$form->{$item}\E/option selected>$form->{$item}/; } - $TMPL_VAR{is_type_invoice_for_advance_payment} = $form->{type} eq "invoice_for_advance_payment"; - $TMPL_VAR{is_type_credit_note} = $form->{type} eq "credit_note"; - $TMPL_VAR{is_format_html} = $form->{format} eq 'html'; - $TMPL_VAR{dateformat} = $myconfig{dateformat}; - $TMPL_VAR{numberformat} = $myconfig{numberformat}; + $TMPL_VAR{is_type_normal_invoice} = $form->{type} eq "invoice"; + $TMPL_VAR{is_type_credit_note} = $form->{type} eq "credit_note"; + $TMPL_VAR{is_format_html} = $form->{format} eq 'html'; + $TMPL_VAR{dateformat} = $myconfig{dateformat}; + $TMPL_VAR{numberformat} = $myconfig{numberformat}; + $TMPL_VAR{longdescription_dialog_size_percentage} = SL::Helper::UserPreferences::DisplayPreferences->new()->get_longdescription_dialog_size_percentage(); # hiddens $TMPL_VAR{HIDDENS} = [qw( @@ -749,18 +771,18 @@ sub form_footer { } print $form->parse_html_template('is/form_footer', { - is_type_invoice_for_advance_payment => ($form->{type} eq "invoice_for_advance_payment"), - is_type_credit_note => ($form->{type} eq "credit_note"), - totalpaid => $totalpaid, - paid_missing => $form->{invtotal} - $totalpaid, - print_options => setup_sales_purchase_print_options(), - show_storno => $form->{id} && !$form->{storno} && !IS->has_storno(\%myconfig, $form, "ar") && !$totalpaid, - show_delete => ($::instance_conf->get_is_changeable == 2) - ? ($form->current_date(\%myconfig) eq $form->{gldate}) - : ($::instance_conf->get_is_changeable == 1), - today => DateTime->today, - vc_obj => $form->{customer_id} ? SL::DB::Customer->load_cached($form->{customer_id}) : undef, - shipto_cvars => $shipto_cvars, + is_type_normal_invoice => ($form->{type} eq "invoice"), + is_type_credit_note => ($form->{type} eq "credit_note"), + totalpaid => $totalpaid, + paid_missing => $form->{invtotal} - $totalpaid, + print_options => setup_sales_purchase_print_options(), + show_storno => $form->{id} && !$form->{storno} && !IS->has_storno(\%myconfig, $form, "ar") && !$totalpaid, + show_delete => ($::instance_conf->get_is_changeable == 2) + ? ($form->current_date(\%myconfig) eq $form->{gldate}) + : ($::instance_conf->get_is_changeable == 1), + today => DateTime->today, + vc_obj => $form->{customer_id} ? SL::DB::Customer->load_cached($form->{customer_id}) : undef, + shipto_cvars => $shipto_cvars, }); ##print $form->parse_html_template('is/_payments'); # parser ##print $form->parse_html_template('webdav/_list'); # parser @@ -1024,6 +1046,14 @@ sub post { $form->isblank("exchangerate", $locale->text('Exchangerate missing!')) if ($form->{currency} ne $form->{defaultcurrency}); + # advance payment allows only one tax + if ($form->{type} eq 'invoice_for_advance_payment') { + my @current_taxaccounts = (split(/ /, $form->{taxaccounts})); + $form->error($locale->text('Cannot post invoice for advance payment with more than one tax')) + if (scalar @current_taxaccounts > 1); + $form->error($locale->text('Cannot post invoice for advance payment with taxincluded')) + if ($form->{taxincluded}); + } for my $i (1 .. $form->{paidaccounts}) { if ($form->parse_amount(\%myconfig, $form->{"paid_$i"})) { @@ -1197,18 +1227,13 @@ sub final_invoice { $main::auth->assert('invoice_edit'); - # search all related invoices for advance payment - # - # (order) -> invoice for adv. payment 1 -> invoice for adv. payment 2 -> invoice for adv. payment 3 -> final invoice - # - # we are currently in the last invoice for adv. payment (3 in this example) my $related_invoices = IS->_get_invoices_for_advance_payment($form->{id}); delete @{ $form }{qw(printed emailed queued invnumber invdate exchangerate forex deliverydate datepaid_1 gldate_1 acc_trans_id_1 source_1 memo_1 paid_1 exchangerate_1 AP_paid_1 storno locked)}; $form->{convert_from_ar_ids} = $form->{id}; $form->{id} = ''; - $form->{type} = 'invoice'; + $form->{type} = 'final_invoice'; $form->{title} = t8('Edit Final Invoice'); $form->{paidaccounts} = 1; $form->{invdate} = $form->current_date(\%myconfig); @@ -1236,7 +1261,7 @@ sub final_invoice { $form->{"partnumber_$i"} = $item->part->partnumber; $form->{"discount_$i"} = $item->discount*100.0; $form->{"sellprice_$i"} = $item->fxsellprice; - $form->{$_ . "_" . $i} = $item->$_ for qw(description longdescription qty price_factor_id unit sellprice active_price_source active_discount_source); + $form->{$_ . "_" . $i} = $item->$_ for qw(description longdescription qty price_factor_id unit active_price_source active_discount_source); $form->{$_ . "_" . $i} = $form->format_amount(\%myconfig, $form->{$_ . "_" . $i}) for qw(qty sellprice discount); }