X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Foe.pl;h=0bcb897bf98c446facfb361ab7fe7d92a46b4e8c;hb=c57ef415561fbdbbf95e45516dc71a643e22369a;hp=563e94bcce2ea7cdccf262802c3501f152ef2e35;hpb=606e7e2575ff6112e8e45acf0e74e87faa5cfa7c;p=kivitendo-erp.git diff --git a/bin/mozilla/oe.pl b/bin/mozilla/oe.pl index 563e94bcc..0bcb897bf 100644 --- a/bin/mozilla/oe.pl +++ b/bin/mozilla/oe.pl @@ -153,6 +153,8 @@ sub edit { check_oe_access(); + $form->{taxincluded_changed_by_user} = 1; + # show history button $form->{javascript} = qq||; #/show hhistory button @@ -181,7 +183,8 @@ sub edit { my ($language_id, $printer_id); if ($form->{print_and_save}) { - $form->{action} = "print"; + $form->{action} = "dispatcher"; + $form->{action_print} = "1"; $form->{resubmit} = 1; $language_id = $form->{language_id}; $printer_id = $form->{printer_id}; @@ -238,14 +241,15 @@ sub order_links { $form->{"$form->{vc}_id"} ||= $form->{"all_$form->{vc}"}->[0]->{id} if $form->{"all_$form->{vc}"}; - $form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded cp_id intnotes)); - $form->{shipto} = 1 if $form->{id}; + $form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded cp_id intnotes shipto_id currency)); + $form->{shipto} = 1 if $form->{id} || $form->{convert_from_oe_ids}; # get customer / vendor IR->get_vendor(\%myconfig, \%$form) if $form->{type} =~ /(purchase_order|request_quotation)/; IS->get_customer(\%myconfig, \%$form) if $form->{type} =~ /sales_(order|quotation)/; - $form->restore_vars(qw(payment_id language_id taxzone_id intnotes cp_id)); + $form->restore_vars(qw(payment_id language_id taxzone_id intnotes cp_id shipto_id)); + $form->restore_vars(qw(currency)) if $form->{id}; $form->restore_vars(qw(taxincluded)) if $form->{id}; $form->restore_vars(qw(salesman_id)) if $editing; $form->{forex} = $form->{exchangerate}; @@ -297,7 +301,7 @@ sub form_header { my $form = $main::form; my %myconfig = %main::myconfig; my $locale = $main::locale; - my $cgi = $main::cgi; + my $cgi = $::request->{cgi}; check_oe_access(); @@ -316,7 +320,7 @@ sub form_header { # openclosed checkboxes my @tmp; push @tmp, sprintf qq||, - $form->{"delivered"} ? "checked" : "", $locale->text('Delivered') if $form->{"type"} =~ /_order$/; + $form->{"delivered"} ? "checked" : "", $locale->text('Delivery Order created') if $form->{"type"} =~ /_order$/; push @tmp, sprintf qq||, $form->{"closed"} ? "checked" : "", $locale->text('Closed') if $form->{id}; $TMPL_VAR{openclosed} = sprintf qq|%s\n|, 2 * scalar @tmp, join "\n", @tmp if @tmp; @@ -325,13 +329,9 @@ sub form_header { my @old_project_ids = ($form->{"globalproject_id"}, grep { $_ } map { $form->{"project_id_$_"} } 1..$form->{"rowcount"}); my $vc = $form->{vc} eq "customer" ? "customers" : "vendors"; - $form->get_lists("contacts" => "ALL_CONTACTS", - "shipto" => "ALL_SHIPTO", - "projects" => { "key" => "ALL_PROJECTS", + $form->get_lists("projects" => { "key" => "ALL_PROJECTS", "all" => 0, "old_id" => \@old_project_ids }, - "employees" => "ALL_EMPLOYEES", - "salesmen" => "ALL_SALESMEN", "taxzones" => "ALL_TAXZONES", "payments" => "ALL_PAYMENTS", "currencies" => "ALL_CURRENCIES", @@ -341,9 +341,21 @@ sub form_header { "price_factors" => "ALL_PRICE_FACTORS"); # label subs + $TMPL_VAR{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all(query => [ or => [ id => $::form->{employee_id}, deleted => 0 ] ]); + $TMPL_VAR{ALL_SALESMEN} = SL::DB::Manager::Employee->get_all(query => [ or => [ id => $::form->{salesman_id}, deleted => 0 ] ]); + $TMPL_VAR{ALL_SHIPTO} = SL::DB::Manager::Shipto->get_all(query => [ + or => [ trans_id => $::form->{"$::form->{vc}_id"} * 1, and => [ shipto_id => $::form->{shipto_id} * 1, trans_id => undef ] ] + ]); + $TMPL_VAR{ALL_CONTACTS} = SL::DB::Manager::Contact->get_all(query => [ + or => [ + cp_cv_id => $::form->{"$::form->{vc}_id"} * 1, + and => [ + cp_cv_id => undef, + cp_id => $::form->{cp_id} * 1 + ] + ] + ]); $TMPL_VAR{sales_employee_labels} = sub { $_[0]->{name} || $_[0]->{login} }; - $TMPL_VAR{shipto_labels} = sub { join "; ", grep { $_ } map { $_[0]->{"shipto${_}" } } qw(name department_1 street city) }; - $TMPL_VAR{contact_labels} = sub { join(', ', $_[0]->{"cp_name"}, $_[0]->{"cp_givenname"}) . ($_[0]->{cp_abteilung} ? " ($_[0]->{cp_abteilung})" : "") }; $TMPL_VAR{department_labels} = sub { "$_[0]->{description}--$_[0]->{id}" }; # vendor/customer @@ -360,7 +372,9 @@ sub form_header { $form->{currency} = $form->{defaultcurrency} unless $form->{currency}; $TMPL_VAR{show_exchangerate} = $form->{currency} ne $form->{defaultcurrency}; $TMPL_VAR{currencies} = NTI($cgi->popup_menu('-name' => 'currency', '-default' => $form->{"currency"}, - '-values' => \@values, '-labels' => \%labels)) if scalar @values; + '-values' => \@values, '-labels' => \%labels, + '-onchange' => "document.getElementById('update_button').click();" + )) if scalar @values; push @custom_hiddens, "forex"; push @custom_hiddens, "exchangerate" if $form->{forex}; @@ -388,14 +402,21 @@ sub form_header { } } - my $onload = ($form->{resubmit} && ($form->{format} eq "html")) ? "window.open('about:blank','Beleg'); document.oe.target = 'Beleg';document.oe.submit()" - : ($form->{resubmit}) ? "document.oe.submit()" - : ($creditwarning) ? "alert('$credittext')" - : ""; + my $dispatch_to_popup = ''; + if ($form->{resubmit} && ($form->{format} eq "html")) { + $dispatch_to_popup = "window.open('about:blank','Beleg'); document.oe.target = 'Beleg';"; + $dispatch_to_popup .= "document.do.submit();"; + } elsif ($form->{resubmit}) { + # emulate click for resubmitting actions + $dispatch_to_popup = "document.oe.${_}.click(); " for grep { /^action_/ } keys %$form; + $dispatch_to_popup .= "document.oe.submit();"; + } elsif ($creditwarning) { + $::request->{layout}->add_javascripts_inline("alert('$credittext')"); + } - $onload .= qq|;setupDateFormat('|. $myconfig{dateformat} .qq|', '|. $locale->text("Falsches Datumsformat!") .qq|')|; - $onload .= qq|;setupPoints('|. $myconfig{numberformat} .qq|', '|. $locale->text("wrongformat") .qq|')|; - $TMPL_VAR{onload} = $onload; + $::request->{layout}->add_javascripts_inline("\$(function(){$dispatch_to_popup})"); + $TMPL_VAR{dateformat} = $myconfig{dateformat}; + $TMPL_VAR{numberformat} = $myconfig{numberformat}; if ($form->{type} eq 'sales_order') { if (!$form->{periodic_invoices_config}) { @@ -418,7 +439,7 @@ sub form_header { title creditlimit creditremaining tradediscount business max_dunning_level dunning_amount shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact shiptophone shiptofax - shiptodepartment_1 shiptodepartment_2 shiptoemail + shiptodepartment_1 shiptodepartment_2 shiptoemail shiptocp_gender message email subject cc bcc taxpart taxservice taxaccounts cursor_fokus), @custom_hiddens, map { $_.'_rate', $_.'_description' } split / /, $form->{taxaccounts} ]; # deleted: discount @@ -453,8 +474,16 @@ sub form_footer { my $introws = max 2, $form->numtextrows($form->{intnotes}, 35, 8); $rows = max $rows, $introws; - $TMPL_VAR{notes} = qq||; - $TMPL_VAR{intnotes} = qq||; + $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->{taxincluded}) { @@ -516,22 +545,22 @@ sub form_footer { sub update { $main::lxdebug->enter_sub(); - my ($recursive_call) = shift; + my ($recursive_call) = @_; my $form = $main::form; my %myconfig = %main::myconfig; check_oe_access(); -# $main::lxdebug->message(0, Dumper($form)); - set_headings($form->{"id"} ? "edit" : "add"); - map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } qw(exchangerate) unless $recursive_call; $form->{update} = 1; &check_name($form->{vc}); + if (!$form->{forex}) { # read exchangerate from input field (not hidden) + map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } qw(exchangerate) unless $recursive_call; + } my $buysell = 'buy'; $buysell = 'sell' if ($form->{vc} eq 'vendor'); $form->{forex} = $form->check_exchangerate(\%myconfig, $form->{currency}, $form->{transdate}, $buysell); @@ -551,10 +580,13 @@ sub update { &check_form; } else { + my $mode; if ($form->{type} =~ /^sales/) { IS->retrieve_item(\%myconfig, \%$form); + $mode = 'IS'; } else { IR->retrieve_item(\%myconfig, \%$form); + $mode = 'IR'; } my $rows = scalar @{ $form->{item_list} }; @@ -572,7 +604,7 @@ sub update { if ($rows > 1) { - &select_item; + select_item(mode => $mode); ::end_of_request(); } else { @@ -687,22 +719,19 @@ sub search { # setup vendor / customer data $form->all_vc(\%myconfig, $form->{vc}, ($form->{vc} eq 'customer') ? "AR" : "AP"); $form->get_lists("projects" => { "key" => "ALL_PROJECTS", "all" => 1 }, - "employees" => "ALL_EMPLOYEES", - "salesmen" => "ALL_SALESMEN", "departments" => "ALL_DEPARTMENTS", "$form->{vc}s" => "ALL_VC"); + $form->{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all(query => [ deleted => 0 ]); # constants and subs for template $form->{jsscript} = 1; - $form->{employee_labels} = sub { $_[0]->{"name"} || $_[0]->{"login"} }; $form->{vc_keys} = sub { "$_[0]->{name}--$_[0]->{id}" }; - $form->{salesman_labels} = $form->{employee_labels}; $form->header(); print $form->parse_html_template('oe/search', { %myconfig, - is_order => $form->{type} =~ /_order/, + is_order => scalar($form->{type} =~ /_order/), }); $main::lxdebug->leave_sub(); @@ -735,7 +764,7 @@ sub orders { my $form = $main::form; my %myconfig = %main::myconfig; my $locale = $main::locale; - my $cgi = $main::cgi; + my $cgi = $::request->{cgi}; check_oe_access(); @@ -752,6 +781,7 @@ sub orders { my @columns = ( "transdate", "reqdate", "id", $ordnumber, + "customernumber", "name", "netamount", "tax", "amount", "curr", "employee", @@ -811,6 +841,7 @@ sub orders { 'ordnumber' => { 'text' => $locale->text('Order'), }, 'quonumber' => { 'text' => $form->{type} eq "request_quotation" ? $locale->text('RFQ') : $locale->text('Quotation'), }, 'name' => { 'text' => $form->{vc} eq 'customer' ? $locale->text('Customer') : $locale->text('Vendor'), }, + 'customernumber' => { 'text' => $locale->text('Customer Number'), }, 'netamount' => { 'text' => $locale->text('Amount'), }, 'tax' => { 'text' => $locale->text('Tax'), }, 'amount' => { 'text' => $locale->text('Total'), }, @@ -821,7 +852,7 @@ sub orders { 'globalprojectnumber' => { 'text' => $locale->text('Project Number'), }, 'transaction_description' => { 'text' => $locale->text('Transaction description'), }, 'open' => { 'text' => $locale->text('Open'), }, - 'delivered' => { 'text' => $locale->text('Delivered'), }, + 'delivered' => { 'text' => $locale->text('Delivery Order created'), }, 'marge_total' => { 'text' => $locale->text('Ertrag'), }, 'marge_percent' => { 'text' => $locale->text('Ertrag prozentual'), }, 'vcnumber' => { 'text' => $form->{vc} eq 'customer' ? $locale->text('Customer Number') : $locale->text('Vendor Number'), }, @@ -867,7 +898,7 @@ sub orders { }; push @options, $locale->text('Open') if $form->{open}; push @options, $locale->text('Closed') if $form->{closed}; - push @options, $locale->text('Delivered') if $form->{delivered}; + push @options, $locale->text('Delivery Order created') if $form->{delivered}; push @options, $locale->text('Not delivered') if $form->{notdelivered}; push @options, $locale->text('Periodic invoices active') if $form->{periodic_invoices_actibe}; @@ -1194,7 +1225,7 @@ sub save { $form->{simple_save} = 1; if(!$form->{print_and_save}) { - delete @{$form}{ary_diff([keys %{ $form }], [qw(login stylesheet id script type cursor_fokus)])}; + delete @{$form}{ary_diff([keys %{ $form }], [qw(login id script type cursor_fokus)])}; edit(); ::end_of_request(); } @@ -1202,56 +1233,28 @@ sub save { } sub delete { - $main::lxdebug->enter_sub(); - - my $form = $main::form; - my $locale = $main::locale; + $::lxdebug->enter_sub; check_oe_access(); - $form->header; - - my ($msg, $ordnumber); - if ($form->{type} =~ /_order$/) { - $msg = $locale->text('Are you sure you want to delete Order Number'); - $ordnumber = 'ordnumber'; - } else { - $msg = $locale->text('Are you sure you want to delete Quotation Number'); - $ordnumber = 'quonumber'; - } - - print qq| - - -
{script}> -|; + $::form->header; # delete action variable - map { delete $form->{$_} } qw(action header); + delete $::form->{$_} for qw(action header); - foreach my $key (keys %$form) { - next if (($key eq 'login') || ($key eq 'password') || ('' ne ref $form->{$key})); - $form->{$key} =~ s/\"/"/g; - print qq|\n|; + 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 qq| -

| . $locale->text('Confirm!') . qq|

- -

$msg $form->{$ordnumber}

-

- - - -

+ print $::form->parse_html_template('oe/delete', { + hiddens => \@hiddens, + is_order => scalar($::form->{type} =~ /_order$/), + }); - - -|; - $main::lxdebug->leave_sub(); + $::lxdebug->leave_sub; } sub delete_order_quotation { @@ -1320,7 +1323,10 @@ sub invoice { $form->{quodate} = $form->{transdate}; } - my $payment_id = $form->{payment_id} if $form->{payment_id}; + my $payment_id; + if ($form->{payment_id}) { + $payment_id = $form->{payment_id}; + } # if the name changed get new values if (&check_name($form->{vc})) { @@ -1429,10 +1435,6 @@ sub invoice { $dec_qty = length $dec_qty; $form->{"qty_$i"} = $form->format_amount(\%myconfig, $form->{"qty_$i"}, $dec_qty); - - map { $form->{"${_}_$i"} =~ s/\"/"/g } - qw(partnumber description unit); - } # show pricegroup in newly loaded invoice when creating invoice from quotation/order @@ -1457,8 +1459,6 @@ sub backorder_exchangerate { $form->header; print qq| - -
{script}> |; @@ -1510,9 +1510,6 @@ sub backorder_exchangerate { . $locale->text('Continue') . qq|">
- - - |; $main::lxdebug->leave_sub(); @@ -1627,11 +1624,25 @@ sub save_as_new { delete($form->{$idx}); } - # clear reqdate unless changed - if ($form->{reqdate} && $form->{id}) { + # clear reqdate and transdate unless changed + if ( $form->{reqdate} && $form->{id} ) { my $saved_order = OE->retrieve_simple(id => $form->{id}); - if ($saved_order && $saved_order->{reqdate} eq $form->{reqdate}) { - delete $form->{reqdate}; + if ( $saved_order && $saved_order->{reqdate} eq $form->{reqdate} && $saved_order->{transdate} eq $form->{transdate} ) { + + my $dbh = $form->get_standard_dbh; + + my $wday = (localtime(time))[6]; + my $next_workday = $wday == 5 ? 3 : $wday == 6 ? 2 : 1; + + my $query = 'SELECT + date(current_date + interval \''. $next_workday .' days\') AS reqdate, + date(current_date) AS transdate'; + my $ref = selectfirst_hashref_query($form, $dbh, $query); + + map( + { $form->{$_} = $ref->{$_} } + keys %{$ref} + ); } } @@ -1786,9 +1797,11 @@ sub poso { map { delete $form->{$_} } qw(id subject message cc bcc printed emailed queued customer vendor creditlimit creditremaining discount tradediscount oldinvtotal delivered ordnumber); # if purchase_order was generated from sales_order, use lastcost_$i as sellprice_$i + # also reset discounts if ( $form->{sales_order_to_purchase_order} ) { for my $i (1 .. $form->{rowcount}) { $form->{"sellprice_${i}"} = $form->format_amount(\%myconfig,$form->{"lastcost_${i}"}); + $form->{"discount_${i}"} = 0; }; }; @@ -1864,6 +1877,9 @@ sub delivery_order { map { $form->{$_} = $old_values{$_} if ($old_values{$_}) } keys %old_values; + for my $i (1 .. $form->{rowcount}) { + (my $dummy, $form->{"pricegroup_id_$i"}) = split /--/, $form->{"sellprice_pg_$i"}; + } update(); $main::lxdebug->leave_sub(); @@ -1983,7 +1999,7 @@ sub edit_periodic_invoices_config { $::form->{AR} = [ grep { $_->{link} =~ m/(?:^|:)AR(?::|$)/ } @{ $::form->{ALL_CHARTS} } ]; $::form->{title} = $::locale->text('Edit the configuration for periodic invoices'); - $::form->header(); + $::form->header(no_layout => 1); print $::form->parse_html_template('oe/edit_periodic_invoices_config', $config); $::lxdebug->leave_sub(); @@ -2023,7 +2039,6 @@ 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)) { if ($::form->{"action_${action}"}) { - $::form->{dispatched_action} = $action; call_sub($action); return; }