X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Foe.pl;h=3a35b890618ced3ef9129cfda2029c2a6d6b59c0;hb=e112111e80aafcd8f3c86b4ba2a5c5fe3db4b5c2;hp=a6050945c63d4ffbdb8d918b67e21995be036588;hpb=4486e3bc8eb00c37cf8029e663eb94b4b9c5346a;p=kivitendo-erp.git diff --git a/bin/mozilla/oe.pl b/bin/mozilla/oe.pl index a6050945c..3a35b8906 100644 --- a/bin/mozilla/oe.pl +++ b/bin/mozilla/oe.pl @@ -31,6 +31,8 @@ # Quotation module #====================================================================== + +use Carp; use POSIX qw(strftime); use SL::DO; @@ -42,9 +44,11 @@ use SL::MoreCommon qw(ary_diff); use SL::PE; use SL::ReportGenerator; use List::MoreUtils qw(any none); -use List::Util qw(max reduce sum); +use List::Util qw(min max reduce sum); use Data::Dumper; +use SL::DB::Customer; + require "bin/mozilla/io.pl"; require "bin/mozilla/arap.pl"; require "bin/mozilla/reportgenerator.pl"; @@ -225,8 +229,7 @@ sub order_links { $form->all_vc(\%myconfig, $form->{vc}, ($form->{vc} eq 'customer') ? "AR" : "AP"); # retrieve order/quotation - $form->{webdav} = $::lx_office_conf{features}->{webdav}; - $form->{jsscript} = 1; + $form->{webdav} = $::instance_conf->get_webdav; my $editing = $form->{id}; @@ -314,9 +317,6 @@ sub form_header { $form->{employee_id} = $form->{old_employee_id} if $form->{old_employee_id}; $form->{salesman_id} = $form->{old_salesman_id} if $form->{old_salesman_id}; - # use JavaScript Calendar or not - $form->{jsscript} = 1; - # openclosed checkboxes my @tmp; push @tmp, sprintf qq||, @@ -411,7 +411,7 @@ sub form_header { # emulate click for resubmitting actions $dispatch_to_popup = "document.oe.${_}.click(); " for grep { /^action_/ } keys %$form; } elsif ($creditwarning) { - $::request->{layout}->add_javascripts_inline("alert('$credittext')"); + $::request->{layout}->add_javascripts_inline("alert('$credittext');"); } $::request->{layout}->add_javascripts_inline("\$(function(){$dispatch_to_popup})"); @@ -477,12 +477,9 @@ sub form_footer { $TMPL_VAR{notes} = qq||; $TMPL_VAR{intnotes} = qq||; - my $paymet_id = $::form->{payment_id}; - IS->get_customer(\%myconfig, $::form) if $form->{type} =~ /sales_(order|quotation)/; - $::form->{payment_id} = $paymet_id; - - if ( $form->{vc} eq 'customer' && !$form->{taxincluded_changed_by_user} ) { - $form->{taxincluded} = defined($form->{taxincluded_checked}) ? $form->{taxincluded_checked} : $myconfig{taxincluded_checked}; + if( $form->{customer_id} && !$form->{taxincluded_changed_by_user} ) { + my $customer = SL::DB::Customer->new(id => $form->{customer_id})->load(); + $form->{taxincluded} = defined($customer->taxincluded_checked) ? $customer->taxincluded_checked : $myconfig{taxincluded_checked}; } if (!$form->{taxincluded}) { @@ -527,7 +524,7 @@ sub form_footer { print $form->parse_html_template("oe/form_footer", { %TMPL_VAR, - webdav => $::lx_office_conf{features}->{webdav}, + webdav => $::instance_conf->get_webdav, print_options => print_options(inline => 1), label_edit => $locale->text("Edit the $form->{type}"), label_workflow => $locale->text("Workflow $form->{type}"), @@ -600,7 +597,11 @@ sub update { $form->{"lastcost_$i"} = $form->parse_amount(\%myconfig, $form->{"lastcost_$i"}); if ($rows) { - $form->{"qty_$i"} = 1 unless ($form->parse_amount(\%myconfig, $form->{"qty_$i"})); + + $form->{"qty_$i"} = $form->parse_amount(\%myconfig, $form->{"qty_$i"}); + if( !$form->{"qty_$i"} ) { + $form->{"qty_$i"} = 1; + } if ($rows > 1) { @@ -720,11 +721,11 @@ sub search { $form->all_vc(\%myconfig, $form->{vc}, ($form->{vc} eq 'customer') ? "AR" : "AP"); $form->get_lists("projects" => { "key" => "ALL_PROJECTS", "all" => 1 }, "departments" => "ALL_DEPARTMENTS", - "$form->{vc}s" => "ALL_VC"); + "$form->{vc}s" => "ALL_VC", + "business_types" => "ALL_BUSINESS_TYPES"); $form->{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all(query => [ deleted => 0 ]); # constants and subs for template - $form->{jsscript} = 1; $form->{vc_keys} = sub { "$_[0]->{name}--$_[0]->{id}" }; $form->header(); @@ -829,7 +830,8 @@ sub orders { my @hidden_variables = map { "l_${_}" } @columns; push @hidden_variables, "l_subtotal", $form->{vc}, qw(l_closed l_notdelivered open closed delivered notdelivered ordnumber quonumber transaction_description transdatefrom transdateto type vc employee_id salesman_id - reqdatefrom reqdateto projectnumber project_id periodic_invoices_active periodic_invoices_inactive); + reqdatefrom reqdateto projectnumber project_id periodic_invoices_active periodic_invoices_inactive + business_id); my $href = build_std_url('action=orders', grep { $form->{$_} } @hidden_variables); @@ -902,6 +904,11 @@ sub orders { push @options, $locale->text('Not delivered') if $form->{notdelivered}; push @options, $locale->text('Periodic invoices active') if $form->{periodic_invoices_actibe}; + if ($form->{business_id}) { + my $vc_type_label = $form->{vc} eq 'customer' ? $locale->text('Customer type') : $locale->text('Vendor type'); + push @options, $vc_type_label . " : " . SL::DB::Business->new(id => $form->{business_id})->load->description; + } + $report->set_options('top_info_text' => join("\n", @options), 'raw_top_info_text' => $form->parse_html_template('oe/orders_top'), 'raw_bottom_info_text' => $form->parse_html_template('oe/orders_bottom', { 'SHOW_CONTINUE_BUTTON' => $allow_multiple_orders }), @@ -1208,6 +1215,7 @@ sub save { } + # value of $ordnumber is ordnumber or quonumber $form->{$ordnumber} = $form->update_defaults(\%myconfig, $numberfld) unless $form->{$ordnumber}; @@ -1217,7 +1225,12 @@ sub save { # saving the history if(!exists $form->{addition}) { - $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber}; + if ( $form->{formname} eq 'sales_quotation' or $form->{formname} eq 'request_quotation' ) { + $form->{snumbers} = qq|quonumber_| . $form->{quonumber}; + } elsif ( $form->{formname} eq 'sales_order' or $form->{formname} eq 'purchase_order') { + $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber}; + }; + $form->{what_done} = $form->{formname}; $form->{addition} = "SAVED"; $form->save_history; } @@ -1233,31 +1246,6 @@ sub save { } sub delete { - $::lxdebug->enter_sub; - - check_oe_access(); - - $::form->header; - - # delete action variable - delete $::form->{$_} for qw(action header); - - my @hiddens; - for my $key (keys %$::form) { - next if $key eq 'login' || $key eq 'password' || '' ne ref $::form->{$key}; - push @hiddens, { key => $key, value => $::form->{$key} }; - } - - print $::form->parse_html_template('oe/delete', { - hiddens => \@hiddens, - is_order => scalar($::form->{type} =~ /_order$/), - }); - - - $::lxdebug->leave_sub; -} - -sub delete_order_quotation { $main::lxdebug->enter_sub(); my $form = $main::form; @@ -1335,6 +1323,8 @@ sub invoice { ::end_of_request(); } + _oe_remove_delivered_or_billed_rows(id => $form->{id}, type => 'billed'); + $form->{cp_id} *= 1; for my $i (1 .. $form->{rowcount}) { @@ -1614,7 +1604,7 @@ sub save_as_new { $form->{saveasnew} = 1; map { delete $form->{$_} } qw(printed emailed queued delivered closed); - # Let Lx-Office assign a new order number if the user hasn't changed the + # Let kivitendo assign a new order number if the user hasn't changed the # previous one. If it has been changed manually then use it as-is. my $idx = $form->{type} =~ /_quotation$/ ? "quonumber" : "ordnumber"; $form->{$idx} =~ s/^\s*//g; @@ -1870,6 +1860,8 @@ sub delivery_order { $form->{old_employee_id} = $form->{employee_id}; $form->{old_salesman_id} = $form->{salesman_id}; + _oe_remove_delivered_or_billed_rows(id => $form->{id}, type => 'delivered'); + # reset delete @{$form}{qw(id subject message cc bcc printed emailed queued creditlimit creditremaining discount tradediscount oldinvtotal closed delivered)}; @@ -2043,6 +2035,32 @@ sub save_periodic_invoices_config { $::lxdebug->leave_sub(); } +sub _oe_remove_delivered_or_billed_rows { + my (%params) = @_; + + return if !$params{id} || !$params{type}; + + my $ord_quot = SL::DB::Order->new(id => $params{id})->load; + return if !$ord_quot; + + my %args = ( + direction => 'to', + to => $params{type} eq 'delivered' ? 'DeliveryOrder' : 'Invoice', + via => [ $params{type} eq 'delivered' ? qw(Order) : qw(Order DeliveryOrder) ], + ); + + my %handled_base_qtys; + foreach my $record (@{ $ord_quot->linked_records(%args) }) { + next if $ord_quot->is_sales != $record->is_sales; + + foreach my $item (@{ $record->items }) { + $handled_base_qtys{ $item->parts_id } += $item->qty * $item->unit_obj->base_factor; + } + } + + _remove_billed_or_delivered_rows(quantities => \%handled_base_qtys); +} + sub dispatcher { foreach my $action (qw(delete delivery_order e_mail invoice print purchase_order purchase_order quotation request_for_quotation sales_order sales_order save save_and_close save_as_new ship_to update)) {