X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fis.pl;h=15105d31d97cbc9fd2ea8260970ffe438ded23fa;hb=9508e215c78bc172721e14d41d21858abb23672e;hp=942323fa910a74c902fe5b610cf26fb7dac7eb06;hpb=aa63ebae1c0a758ec438c594acb328b1f0e5e001;p=kivitendo-erp.git diff --git a/bin/mozilla/is.pl b/bin/mozilla/is.pl index 942323fa9..15105d31d 100644 --- a/bin/mozilla/is.pl +++ b/bin/mozilla/is.pl @@ -214,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"; @@ -250,6 +252,142 @@ 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 $payments_balanced = ($::form->{oldtotalpaid} == 0); + my $has_storno = ($::form->{storno} && !$::form->{storno_id}); + + for my $bar ($::request->layout->get('actionbar')) { + $bar->add( + action => [ + t8('Update'), + submit => [ '#form', { action => "update" } ], + disabled => $form->{locked} ? t8('The billing period has already been locked.') : undef, + id => 'update_button', + checks => [ 'kivi.validate_form' ], + accesskey => 'enter', + ], + + combobox => [ + action => [ + t8('Post'), + submit => [ '#form', { action => "post" } ], + checks => [ 'kivi.validate_form' ], + 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" } ], + checks => [ 'kivi.validate_form' ], + disabled => !$form->{id} ? t8('This invoice has not been posted yet.') : undef, + ], + action => [ t8('Mark as paid'), + submit => [ '#form', { action => "mark_as_paid" } ], + 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, + only_if => $::instance_conf->get_is_show_mark_as_paid, + ], + ], # end of combobox "Post" + + combobox => [ + action => [ t8('Storno'), + submit => [ '#form', { action => "storno" } ], + confirm => t8('Do you really want to cancel this invoice?'), + checks => [ 'kivi.validate_form' ], + disabled => !$form->{id} ? t8('This invoice has not been posted yet.') + : !$payments_balanced ? t8('Cancelling is disallowed. Either undo or balance the current payments until the open amount matches the invoice amount') + : undef, + ], + action => [ t8('Delete'), + submit => [ '#form', { action => "delete" } ], + confirm => t8('Do you really want to delete this object?'), + checks => [ 'kivi.validate_form' ], + 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.') + : $has_storno ? t8('Can only delete the "Storno zu" part of the cancellation pair.') + : undef, + ], + ], # end of combobox "Storno" + + 'separator', + + combobox => [ + action => [ t8('Workflow') ], + action => [ + t8('Use As New'), + submit => [ '#form', { action => "use_as_new" } ], + checks => [ 'kivi.validate_form' ], + disabled => !$form->{id} ? t8('This invoice has not been posted yet.') : undef, + ], + action => [ + t8('Credit Note'), + submit => [ '#form', { action => "credit_note" } ], + checks => [ 'kivi.validate_form' ], + 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 => "order" } ], + checks => [ 'kivi.validate_form' ], + 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')), + call => [ 'kivi.SalesPurchase.show_print_dialog', $form->{id} ? 'print' : 'preview' ], + checks => [ 'kivi.validate_form' ], + disabled => !$form->{id} && $form->{locked} ? t8('The billing period has already been locked.') : undef, + ], + action => [ t8('Print and Post'), + call => [ 'kivi.SalesPurchase.show_print_dialog', $form->{id} ? 'print' : 'print_and_post' ], + checks => [ 'kivi.validate_form' ], + disabled => $form->{id} ? t8('This invoice has already been posted.') : undef,, + ], + action => [ t8('E Mail'), + call => [ 'kivi.SalesPurchase.show_email_dialog' ], + checks => [ 'kivi.validate_form' ], + 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, 'glid' ], + 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" + ); + } + $::request->layout->add_javascripts('kivi.Validator.js'); +} + sub form_header { $main::lxdebug->enter_sub(); @@ -266,8 +404,11 @@ sub form_header { $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}; + my $current_employee = SL::DB::Manager::Employee->current; + $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->{employee_id} ||= $current_employee->id; + $form->{salesman_id} ||= $current_employee->id; $form->{defaultcurrency} = $form->get_default_currency(\%myconfig); @@ -337,26 +478,25 @@ sub form_header { $TMPL_VAR{dateformat} = $myconfig{dateformat}; $TMPL_VAR{numberformat} = $myconfig{numberformat}; - push @custom_hiddens, map { "shiptocvar_" . $_->name } @{ SL::DB::Manager::CustomVariableConfig->get_all(where => [ module => 'ShipTo' ]) }; - # hiddens $TMPL_VAR{HIDDENS} = [qw( - id type media format queued printed emailed title vc discount + id type queued printed emailed 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 - shiptoemail shiptodepartment_1 shiptodepartment_2 shiptocp_gender message email subject cc bcc taxaccounts cursor_fokus + taxaccounts cursor_fokus convert_from_do_ids convert_from_oe_ids convert_from_ar_ids useasnew invoice_id show_details ), @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 kivi.CustomerVendor kivi.Validator ckeditor/ckeditor ckeditor/adapters/jquery kivi.io 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); @@ -479,12 +619,13 @@ sub form_footer { is_type_credit_note => ($form->{type} eq "credit_note"), totalpaid => $totalpaid, paid_missing => $form->{invtotal} - $totalpaid, - print_options => print_options(inline => 1), + 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, }); ##print $form->parse_html_template('is/_payments'); # parser ##print $form->parse_html_template('webdav/_list'); # parser @@ -501,6 +642,9 @@ sub mark_as_paid { } sub show_draft { + # unless no lazy implementation of save draft without invdate + # set the current date like in version <= 3.4.1 + $::form->{invdate} = DateTime->today->to_lxoffice; update(); } @@ -632,7 +776,7 @@ sub update { # ask if it is a part or service item if ( $form->{"partsgroup_$i"} - && ($form->{"partsnumber_$i"} eq "") + && ($form->{"partnumber_$i" } eq "") && ($form->{"description_$i"} eq "")) { $form->{rowcount}--; $form->{"discount_$i"} = ""; @@ -791,7 +935,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. @@ -815,7 +959,7 @@ sub post { 1; }) { push @errors, $EVAL_ERROR; - die 'transaction error'; + $form->error($locale->text('Cannot post invoice and/or transfer out! Error message:') . "\n" . join("\n", @errors)); } 1; @@ -841,9 +985,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(); @@ -1065,35 +1208,9 @@ sub delete { $::form->error($::locale->text('Cannot delete invoice!')); } -sub post_and_e_mail { - e_mail(); -}; - -sub e_mail { - $main::lxdebug->enter_sub(); - - my $form = $main::form; - - $main::auth->assert('invoice_edit'); - - if (!$form->{id}) { - $form->{no_redirect_after_post} = 1; - - my $saved_form = save_form(); - - post(); - - restore_form($saved_form, 0, qw(id invnumber)); - } - - edit_e_mail(); - - $main::lxdebug->leave_sub(); -} - sub dispatcher { for my $action (qw( - print update ship_to e_mail storno post_payment use_as_new credit_note + print update ship_to storno post_payment use_as_new credit_note delete post order preview post_and_e_mail print_and_post mark_as_paid )) {