X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fis.pl;h=21e35c0c88c617a037c81661030f41ffb76abc33;hb=a6cf76a2874a723b04d508c99b30f7fd5a4f6573;hp=335b86af51dbf3825d157da525e0d846842004e1;hpb=60fd91996b9b38f11519f467e8b0664448db2755;p=kivitendo-erp.git diff --git a/bin/mozilla/is.pl b/bin/mozilla/is.pl index 335b86af5..21e35c0c8 100644 --- a/bin/mozilla/is.pl +++ b/bin/mozilla/is.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 invoicing module @@ -33,7 +34,6 @@ use SL::FU; use SL::IS; -use SL::PE; use SL::OE; use SL::MoreCommon qw(restore_form save_form); use Data::Dumper; @@ -45,10 +45,12 @@ use English qw(-no_match_vars); use SL::DB::Default; use SL::DB::Customer; +use SL::DB::Department; +use SL::DB::Invoice; use SL::DB::PaymentTerm; +require "bin/mozilla/common.pl"; require "bin/mozilla/io.pl"; -require "bin/mozilla/arap.pl"; use strict; @@ -142,13 +144,6 @@ sub invoice_links { # create links $form->create_links("AR", \%myconfig, "customer"); - if ($form->{all_customer}) { - unless ($form->{customer_id}) { - $form->{customer_id} = $form->{all_customer}->[0]->{id}; - $form->{salesman_id} = $form->{all_customer}->[0]->{salesman_id}; - } - } - my $editing = $form->{id}; $form->backup_vars(qw(payment_id language_id taxzone_id salesman_id @@ -157,11 +152,6 @@ sub invoice_links { IS->get_customer(\%myconfig, \%$form); - #quote all_customer Bug 133 - foreach my $ref (@{ $form->{all_customer} }) { - $ref->{name} = $form->quote($ref->{name}); - } - $form->restore_vars(qw(id)); IS->retrieve_invoice(\%myconfig, \%$form); @@ -170,23 +160,6 @@ sub invoice_links { $form->restore_vars(qw(taxincluded)) if $form->{id}; $form->restore_vars(qw(salesman_id)) if $editing; - - # build vendor/customer drop down compatibility... don't ask - if (@{ $form->{"all_customer"} }) { - $form->{"selectcustomer"} = 1; - $form->{customer} = qq|$form->{customer}--$form->{"customer_id"}|; - } - - $form->{"oldcustomer"} = $form->{customer}; - - if ($form->{"oldcustomer"} !~ m/--\d+$/ && $form->{"customer_id"}) { - $form->{"oldcustomer"} .= qq|--$form->{"customer_id"}| - } - - -# $form->{oldcustomer} = "$form->{customer}--$form->{customer_id}"; -# $form->{selectcustomer} = 1; - $form->{employee} = "$form->{employee}--$form->{employee_id}"; # forex @@ -241,6 +214,8 @@ sub prepare_invoice { if ($form->{type} eq "credit_note") { $form->{type} = "credit_note"; $form->{formname} = "credit_note"; + } elsif ($form->{formname} eq "proforma" ) { + $form->{type} = "invoice"; } else { $form->{type} = "invoice"; $form->{formname} = "invoice"; @@ -277,6 +252,128 @@ sub prepare_invoice { $main::lxdebug->leave_sub(); } +sub setup_is_action_bar { + my $form = $::form; + my $change_never = $::instance_conf->get_is_changeable == 0; + my $change_on_same_day_only = $::instance_conf->get_is_changeable == 2 && ($form->current_date(\%::myconfig) ne $form->{gldate}); + my @req_trans_desc = qw(kivi.SalesPurchase.check_transaction_description) x!!$::instance_conf->get_require_transaction_description_ps; + + for my $bar ($::request->layout->get('actionbar')) { + $bar->add( + action => [ + t8('Update'), + submit => [ '#form', { action_update => 1 } ], + disabled => $form->{locked} ? t8('The billing period has already been locked.') : undef, + id => 'update_button', + accesskey => 'enter', + ], + + combobox => [ + action => [ + t8('Post'), + submit => [ '#form', { action_post => 1 } ], + checks => [ @req_trans_desc ], + disabled => $form->{locked} ? t8('The billing period has already been locked.') + : $form->{storno} ? t8('A canceled invoice cannot be posted.') + : ($form->{id} && $change_never) ? t8('Changing invoices has been disabled in the configuration.') + : ($form->{id} && $change_on_same_day_only) ? t8('Invoices can only be changed on the day they are posted.') + : undef, + ], + action => [ + t8('Post Payment'), + submit => [ '#form', { action_post_payment => 1 } ], + checks => [ @req_trans_desc ], + disabled => !$form->{id} ? t8('This invoice has not been posted yet.') : undef, + ], + (action => [ t8('Mark as paid'), + submit => [ '#form', { action_mark_as_paid => 1 } ], + confirm => t8('This will remove the invoice from showing as unpaid even if the unpaid amount does not match the amount. Proceed?'), + disabled => !$form->{id} ? t8('This invoice has not been posted yet.') : undef, + ]) x !!$::instance_conf->get_is_show_mark_as_paid, + ], # end of combobox "Post" + + combobox => [ + action => [ t8('Storno'), + submit => [ '#form', { action_storno => 1 } ], + confirm => t8('Do you really want to cancel this invoice?'), + checks => [ @req_trans_desc ], + disabled => !$form->{id} ? t8('This invoice has not been posted yet.') : undef, + ], + action => [ t8('Delete'), + submit => [ '#form', { action_delete => 1 } ], + confirm => t8('Do you really want to delete this object?'), + checks => [ @req_trans_desc ], + disabled => !$form->{id} ? t8('This invoice has not been posted yet.') + : $form->{locked} ? t8('The billing period has already been locked.') + : $change_never ? t8('Changing invoices has been disabled in the configuration.') + : $change_on_same_day_only ? t8('Invoices can only be changed on the day they are posted.') + : undef, + ], + ], # end of combobox "Storno" + + 'separator', + + combobox => [ + action => [ t8('Workflow') ], + action => [ + t8('Use As New'), + submit => [ '#form', { action_use_as_new => 1 } ], + disabled => !$form->{id} ? t8('This invoice has not been posted yet.') : undef, + ], + action => [ + t8('Credit Note'), + submit => [ '#form', { action_credit_note => 1 } ], + checks => [ @req_trans_desc ], + disabled => $form->{type} eq "credit_note" ? t8('Credit notes cannot be converted into other credit notes.') + : !$form->{id} ? t8('This invoice has not been posted yet.') + : undef, + ], + action => [ + t8('Sales Order'), + submit => [ '#form', { action_sales_order => 1 } ], + disabled => !$form->{id} ? t8('This invoice has not been posted yet.') : undef, + ], + ], # end of combobox "Workflow" + + combobox => [ + action => [ t8('Export') ], + action => [ + ($form->{id} ? t8('Print') : t8('Preview')), + submit => [ '#form', { action_print => 1 } ], + checks => [ @req_trans_desc ], + disabled => !$form->{id} && $form->{locked} ? t8('The billing period has already been locked.') : undef, + ], + action => [ t8('E Mail'), + submit => [ '#form', { action_print => 1 } ], + checks => [ @req_trans_desc ], + disabled => !$form->{id} ? t8('This invoice has not been posted yet.') : undef, + ], + ], # end of combobox "Export" + + combobox => [ + action => [ t8('more') ], + action => [ + t8('History'), + call => [ 'set_history_window', $form->{id} * 1, 'id' ], + disabled => !$form->{id} ? t8('This invoice has not been posted yet.') : undef, + ], + action => [ + t8('Follow-Up'), + call => [ 'follow_up_window' ], + disabled => !$form->{id} ? t8('This invoice has not been posted yet.') : undef, + ], + action => [ + t8('Drafts'), + call => [ 'kivi.Draft.popup', 'is', 'invoice', $form->{draft_id}, $form->{draft_description} ], + disabled => $form->{id} ? t8('This invoice has already been posted.') + : $form->{locked} ? t8('The billing period has already been locked.') + : undef, + ], + ], # end of combobox "more" + ); + } +} + sub form_header { $main::lxdebug->enter_sub(); @@ -290,10 +387,9 @@ sub form_header { my %TMPL_VAR = (); my @custom_hiddens; - if ($form->{id}) { - require SL::DB::Invoice; - $TMPL_VAR{invoice_obj} = SL::DB::Invoice->new(id => $form->{id})->load; - } + $TMPL_VAR{customer_obj} = SL::DB::Customer->load_cached($form->{customer_id}) if $form->{customer_id}; + $TMPL_VAR{invoice_obj} = SL::DB::Invoice->load_cached($form->{id}) if $form->{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}; @@ -301,10 +397,10 @@ sub form_header { $form->get_lists("taxzones" => ($form->{id} ? "ALL_TAXZONES" : "ALL_ACTIVE_TAXZONES"), "currencies" => "ALL_CURRENCIES", - "customers" => "ALL_CUSTOMERS", - "departments" => "all_departments", "price_factors" => "ALL_PRICE_FACTORS"); + $form->{ALL_DEPARTMENTS} = SL::DB::Manager::Department->get_all_sorted; + # Projects my @old_project_ids = uniq grep { $_ } map { $_ * 1 } ($form->{"globalproject_id"}, map { $form->{"project_id_$_"} } 1..$form->{"rowcount"}); my @old_ids_cond = @old_project_ids ? (id => \@old_project_ids) : (); @@ -338,15 +434,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('customer', '', 0, 0)"; - push @custom_hiddens, "customer_id"; - push @custom_hiddens, "oldcustomer"; - push @custom_hiddens, "selectcustomer"; # currencies and exchangerate my @values = map { $_ } @{ $form->{ALL_CURRENCIES} }; @@ -363,10 +450,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->{customer}; - $follow_up_vc =~ s/--\d*\s*$//; - $TMPL_VAR{customer_name} = $follow_up_vc; - # set option selected foreach my $item (qw(AR)) { $form->{"select$item"} =~ s/ selected//; @@ -381,9 +464,8 @@ sub form_header { push @custom_hiddens, map { "shiptocvar_" . $_->name } @{ SL::DB::Manager::CustomVariableConfig->get_all(where => [ module => 'ShipTo' ]) }; # hiddens - $form->{"action"} = "dispatcher"; $TMPL_VAR{HIDDENS} = [qw( - id action type media format queued printed emailed title vc discount + id 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 dunning_description shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptogln shiptocontact shiptophone shiptofax @@ -394,11 +476,13 @@ sub form_header { ), @custom_hiddens, map { $_.'_rate', $_.'_description', $_.'_taxnumber' } split / /, $form->{taxaccounts}]; - $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.Draft 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.File kivi.SalesPurchase kivi.Part ckeditor/ckeditor ckeditor/adapters/jquery kivi.io autocomplete_customer client_js)); $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->{duedate})->to_kivitendo if $TMPL_VAR{payment_terms_obj}; + setup_is_action_bar(); + $form->header(); print $form->parse_html_template("is/form_header", \%TMPL_VAR); @@ -447,7 +531,7 @@ sub form_footer { $form->{taxaccounts_array} = [ split(/ /, $form->{taxaccounts}) ]; if( $form->{customer_id} && !$form->{taxincluded_changed_by_user} ) { - my $customer = SL::DB::Customer->new(id => $form->{customer_id})->load(); + my $customer = SL::DB::Customer->load_cached($form->{customer_id}); $form->{taxincluded} = defined($customer->taxincluded_checked) ? $customer->taxincluded_checked : $myconfig{taxincluded_checked}; } @@ -473,7 +557,7 @@ 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; } @@ -535,16 +619,15 @@ sub form_footer { } sub mark_as_paid { - $main::lxdebug->enter_sub(); - - my $form = $main::form; - my %myconfig = %main::myconfig; + $::auth->assert('invoice_edit'); - $main::auth->assert('invoice_edit'); + SL::DB::Invoice->new(id => $::form->{id})->load->mark_as_paid; - &mark_as_paid_common(\%myconfig,"ar"); + $::form->redirect($::locale->text("Marked as paid")); +} - $main::lxdebug->leave_sub(); +sub show_draft { + update(); } sub update { @@ -561,7 +644,11 @@ sub update { my $taxincluded = $form->{taxincluded} ? "checked" : ''; $form->{update} = 1; - &check_name("customer"); + if (($form->{previous_customer_id} || $form->{customer_id}) != $form->{customer_id}) { + $::form->{salesman_id} = SL::DB::Manager::Employee->current->id if exists $::form->{salesman_id}; + + IS->get_customer(\%myconfig, $form); + } $form->{taxincluded} ||= $taxincluded; @@ -750,7 +837,7 @@ sub post { $form->{defaultcurrency} = $form->get_default_currency(\%myconfig); $form->isblank("invdate", $locale->text('Invoice Date missing!')); - $form->isblank("customer", $locale->text('Customer missing!')); + $form->isblank("customer_id", $locale->text('Customer missing!')); $form->error($locale->text('Cannot post invoice for a closed period!')) if ($form->date_closed($form->{"invdate"}, \%myconfig)); @@ -758,7 +845,7 @@ sub post { $form->{invnumber} =~ s/\s*$//g; # if oldcustomer ne customer redo form - if (&check_name('customer')) { + if (($form->{previous_customer_id} || $form->{customer_id}) != $form->{customer_id}) { &update; $::dispatcher->end_request; } @@ -830,7 +917,7 @@ sub post { relink_accounts(); my $terms = get_payment_terms_for_invoice(); - $form->{duedate} = $terms->calc_date(reference_date => $form->{invdate}, due_date => $form->{due_due})->to_kivitendo if $terms; + $form->{duedate} = $terms->calc_date(reference_date => $form->{invdate}, due_date => $form->{duedate})->to_kivitendo if $terms; # If transfer_out is requested, get rose db handle and do post and # transfer out in one transaction. Otherwise just post the invoice. @@ -880,9 +967,8 @@ sub post { if (!$form->{no_redirect_after_post}) { $form->{action} = 'edit'; $form->{script} = 'is.pl'; - $form->{saved_message} = $form->{label} . " $form->{invnumber} " . $locale->text('posted!'); $form->{callback} = build_std_url(qw(action edit id callback saved_message)); - $form->redirect; + $form->redirect($form->{label} . " $form->{invnumber} " . $locale->text('posted!')); } $main::lxdebug->leave_sub(); @@ -967,6 +1053,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 }; + # record link invoice to storno + $form->{convert_from_ar_ids} = $form->{id}; $form->{storno_id} = $form->{id}; $form->{storno} = 1; $form->{id} = ""; @@ -974,7 +1062,8 @@ sub storno { $form->{invdate} = DateTime->today->to_lxoffice; $form->{rowcount}++; # 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"}; post(); $main::lxdebug->leave_sub();