oe: neue actionbar version prototyp
[kivitendo-erp.git] / bin / mozilla / oe.pl
index f92eea7..79cbe59 100644 (file)
@@ -43,7 +43,6 @@ use SL::OE;
 use SL::IR;
 use SL::IS;
 use SL::MoreCommon qw(ary_diff restore_form save_form);
-use SL::PE;
 use SL::ReportGenerator;
 use List::MoreUtils qw(uniq any none);
 use List::Util qw(min max reduce sum);
@@ -51,9 +50,10 @@ use Data::Dumper;
 
 use SL::DB::Customer;
 use SL::DB::TaxZone;
+use SL::DB::PaymentTerm;
 
+require "bin/mozilla/common.pl";
 require "bin/mozilla/io.pl";
-require "bin/mozilla/arap.pl";
 require "bin/mozilla/reportgenerator.pl";
 
 use strict;
@@ -241,9 +241,6 @@ sub order_links {
 
   check_oe_access();
 
-  # get customer/vendor
-  $form->all_vc(\%myconfig, $form->{vc}, ($form->{vc} eq 'customer') ? "AR" : "AP");
-
   # retrieve order/quotation
   my $editing = $form->{id};
 
@@ -256,8 +253,6 @@ sub order_links {
     if          $form->{rowcount}  && $form->{type}     eq 'sales_order'
      && defined $form->{customer}  && $form->{customer} eq '';
 
-  $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 shipto_id delivery_term_id currency));
 
   # get customer / vendor
@@ -271,18 +266,6 @@ sub order_links {
   $form->{forex}       = $form->{exchangerate};
   $form->{employee}    = "$form->{employee}--$form->{employee_id}";
 
-  # build vendor/customer drop down comatibility... don't ask
-  if (@{ $form->{"all_$form->{vc}"} || [] }) {
-    $form->{"select$form->{vc}"} = 1;
-    $form->{$form->{vc}}         = qq|$form->{$form->{vc}}--$form->{"$form->{vc}_id"}|;
-  }
-
-  $form->{"old$form->{vc}"}  = $form->{$form->{vc}};
-
-  if ($form->{"old$form->{vc}"} !~ m/--\d+$/ && $form->{"$form->{vc}_id"}) {
-    $form->{"old$form->{vc}"} .= qq|--$form->{"$form->{vc}_id"}|
-  }
-
   $main::lxdebug->leave_sub();
 }
 
@@ -353,12 +336,11 @@ sub form_header {
   my $vc = $form->{vc} eq "customer" ? "customers" : "vendors";
 
   $form->get_lists("taxzones"      => ($form->{id} ? "ALL_TAXZONES" : "ALL_ACTIVE_TAXZONES"),
-                   "payments"      => "ALL_PAYMENTS",
                    "currencies"    => "ALL_CURRENCIES",
-                   "departments"   => "ALL_DEPARTMENTS",
-                   $vc             => { key   => "ALL_" . uc($vc),
-                                        limit => $myconfig{vclimit} + 1 },
                    "price_factors" => "ALL_PRICE_FACTORS");
+  $form->{ALL_PAYMENTS} = SL::DB::Manager::PaymentTerm->get_all( where => [ or => [ obsolete => 0, id => $form->{payment_id} || undef ] ]);
+
+  $form->{ALL_DEPARTMENTS} = SL::DB::Manager::Department->get_all;
 
   # Projects
   my @old_project_ids = uniq grep { $_ } map { $_ * 1 } ($form->{"globalproject_id"}, map { $form->{"project_id_$_"} } 1..$form->{"rowcount"});
@@ -397,25 +379,10 @@ sub form_header {
     ]
   ]);
   $TMPL_VAR{sales_employee_labels} = sub { $_[0]->{name} || $_[0]->{login} };
-  $TMPL_VAR{department_labels}     = sub { "$_[0]->{description}--$_[0]->{id}" };
-
-  # vendor/customer
-  $TMPL_VAR{vc_keys} = sub { "$_[0]->{name}--$_[0]->{id}" };
-  $TMPL_VAR{vclimit} = $myconfig{vclimit};
-  $TMPL_VAR{vc_select} = "customer_or_vendor_selection_window('$form->{vc}', '', @{[ $form->{vc} eq 'vendor' ? 1 : 0 ]}, 0)";
-  push @custom_hiddens, "$form->{vc}_id";
-  push @custom_hiddens, "old$form->{vc}";
-  push @custom_hiddens, "select$form->{vc}";
 
   # currencies and exchangerate
-  my @values = map { $_ } @{ $form->{ALL_CURRENCIES} };
-  my %labels = map { $_ => $_ } @{ $form->{ALL_CURRENCIES} };
   $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,
-                                                      '-onchange' => "document.getElementById('update_button').click();"
-                                     )) if scalar @values;
   push @custom_hiddens, "forex";
   push @custom_hiddens, "exchangerate" if $form->{forex};
 
@@ -468,7 +435,41 @@ sub form_header {
     }
   }
 
-  $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.SalesPurchase show_form_details show_history show_vc_details ckeditor/ckeditor ckeditor/adapters/jquery kivi.io autocomplete_customer autocomplete_part));
+  $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.SalesPurchase kivi.File kivi.Part show_form_details show_history show_vc_details ckeditor/ckeditor ckeditor/adapters/jquery kivi.io autocomplete_customer));
+
+
+  # original snippets:
+  # 'data-require-transaction-description'=INSTANCE_CONF.get_require_transaction_description_ps
+  # data-warn-save-active-periodic-invoice="1"  if warn_save_active_periodic_invoice
+  # tpca_reminder
+  my $is_sales     = scalar ($form->{type} =~ /^sales_/);              # these vars are exported, so that the template
+  my $is_order     = scalar ($form->{type} =~ /_order$/);              # may determine what to show
+  my $is_sales_quo = scalar ($form->{type} =~ /sales_quotation$/);
+  my $is_req_quo   = scalar ($form->{type} =~ /request_quotation$/);
+  my $is_sales_ord = scalar ($form->{type} =~ /sales_order$/);
+  my $is_pur_ord   = scalar ($form->{type} =~ /purchase_order$/);
+  my $allow_invoice = $is_req_quo || $is_pur_ord || ($is_sales_quo && $::instance_conf->get_allow_sales_invoice_from_sales_quotation) || ($is_sales_ord && $::instance_conf->get_allow_sales_invoice_from_sales_order);
+
+  my $tpca_remainder = 0;
+
+  $::request->layout->get('actionbar')->add_actions(
+    [ t8('Update'),                submit => [ '#form', { action_update         => 1 } ] ], # always
+    [ t8('Ship to'),               submit => [ '#form', { action_ship_to        => 1 } ] ], # always
+    [ t8('Print'),                 submit => [ '#form', { action_print          => 1 } ], checks => [ qw(require-data-dransation) ] ],
+    [ t8('E Mail'),                submit => [ '#form', { action_print          => 1 } ], checks => [ qw(require-data-dransation) ] ],
+    [ t8('Save'),                  submit => [ '#form', { action_save           => 1 } ], checks => [ qw(require-data-dransation) ], confirm => t8('Missing transport cost: #1  Are you sure?', $tpca_remainder) ], # always, optional warn_save_active_periodic_invoice,
+    [ t8('Save and Close'),        submit => [ '#form', { action_save_and_close => 1 } ], checks => [ qw(require-data-dransation) ], confirm => t8('Missing transport cost: #1  Are you sure?', $tpca_remainder) ], # always, optional warn_save_active_periodic_invoice,
+    [ t8('Follow Up'),           function => [ 'follow_up_window' ], disabled => !$::form->{id} ],
+    [ t8('History'),             function => [ 'set_history_window', $::form->{id} * 1, 'id' ], disabled => !$::form->{id} ],
+    [ t8('Save as new'),           submit => [ '#form', { action_save_as_new    => 1 } ], checks => [ qw(require-data-dransation) ], disabled => !$::form->{id} ],
+   ([ t8('Delete'),                submit => [ '#form', { action_delete         => 1 } ], disabled => !$::form->{id} ]) x!!( $::form->{id} && (!$is_sales_ord || $::instance_conf->get_sales_order_show_delete) && (!$is_pur_ord || $::instance_conf->get_purchase_order_show_delete ) ),
+   ([ t8('Sales Order'),           submit => [ '#form', { action_sales_order    => 1 } ], disabled => !$::form->{id} ]) x!!($is_sales_quo ),
+   ([ t8('Purchase Order'),        submit => [ '#form', { action_sales_order    => 1 } ], disabled => !$::form->{id} ]) x!!($is_req_quo ),
+   ([ t8('Delivery Order'),        submit => [ '#form', { action_delivery_order => 1 } ], disabled => !$::form->{id} ]) x!!(($is_sales_ord || $is_pur_ord ) ),
+   ([ t8('Invoice'),               submit => [ '#form', { action_invoice        => 1 } ], disabled => !$::form->{id} ]) x!!($allow_invoice ),
+    [ t8('Quotation'),             submit => [ '#form', { action_quotation      => 1 } ], disabled => !$::form->{id} ],
+    [ t8('Request for Quotation'), submit => [ '#form', { action_reqest_for_quotation => 1 } ], disabled => !$::form->{id} ],
+  );
 
   $form->header;
   if ($form->{CFDD_shipto} && $form->{CFDD_shipto_id} ) {
@@ -490,12 +491,12 @@ sub form_header {
 
   %TMPL_VAR = (
      %TMPL_VAR,
-     is_sales        => scalar ($form->{type} =~ /^sales_/),              # these vars are exported, so that the template
-     is_order        => scalar ($form->{type} =~ /_order$/),              # may determine what to show
-     is_sales_quo    => scalar ($form->{type} =~ /sales_quotation$/),
-     is_req_quo      => scalar ($form->{type} =~ /request_quotation$/),
-     is_sales_ord    => scalar ($form->{type} =~ /sales_order$/),
-     is_pur_ord      => scalar ($form->{type} =~ /purchase_order$/),
+     is_sales        => $is_sales,
+     is_order        => $is_order,
+     is_sales_quo    => $is_sales_quo,
+     is_req_quo      => $is_req_quo,
+     is_sales_ord    => $is_sales_ord,
+     is_pur_ord      => $is_pur_ord,
   );
 
   $TMPL_VAR{ORDER_PROBABILITIES} = [ map { { title => ($_ * 10) . '%', id => $_ * 10 } } (0..10) ];
@@ -604,7 +605,13 @@ sub update {
 
   $form->{update} = 1;
 
-  &check_name($form->{vc});
+  my $vc = $form->{vc};
+  if (($form->{"previous_${vc}_id"} || $form->{"${vc}_id"}) != $form->{"${vc}_id"}) {
+    $::form->{salesman_id} = SL::DB::Manager::Employee->current->id if exists $::form->{salesman_id};
+
+    IS->get_customer(\%myconfig, $form) if $vc eq 'customer';
+    IR->get_vendor(\%myconfig, $form)   if $vc eq 'vendor';
+  }
 
   if (!$form->{forex}) {        # read exchangerate from input field (not hidden)
     map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } qw(exchangerate) unless $recursive_call;
@@ -770,17 +777,15 @@ sub search {
     $form->{ordlabel}  = $locale->text('Quotation Number');
 
   } else {
-    $form->show_generic_error($locale->text('oe.pl::search called with unknown type'), back_button => 1);
+    $form->show_generic_error($locale->text('oe.pl::search called with unknown type'));
   }
 
   # 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 },
-                   "departments"  => "ALL_DEPARTMENTS",
-                   "$form->{vc}s" => "ALL_VC",
                    "taxzones"     => "ALL_TAXZONES",
                    "business_types" => "ALL_BUSINESS_TYPES",);
   $form->{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all_sorted(query => [ deleted => 0 ]);
+  $form->{ALL_DEPARTMENTS} = SL::DB::Manager::Department->get_all;
 
   $form->{CT_CUSTOM_VARIABLES}                  = CVar->get_configs('module' => 'CT');
   ($form->{CT_CUSTOM_VARIABLES_FILTER_CODE},
@@ -793,6 +798,8 @@ sub search {
 
   $form->{ORDER_PROBABILITIES} = [ map { { title => ($_ * 10) . '%', id => $_ * 10 } } (0..10) ];
 
+  $::request->{layout}->use_javascript(map { "${_}.js" } qw(autocomplete_project));
+
   $form->header();
 
   print $form->parse_html_template('oe/search', {
@@ -981,19 +988,11 @@ sub orders {
                                        'data'           => $form->{OE});
 
   my @options;
-  my ($department) = split m/--/, $form->{department};
 
   push @options, $locale->text('Customer')                . " : $form->{customer}"                        if $form->{customer};
   push @options, $locale->text('Vendor')                  . " : $form->{vendor}"                          if $form->{vendor};
   push @options, $locale->text('Contact Person')          . " : $form->{cp_name}"                         if $form->{cp_name};
-  push @options, $locale->text('Department')              . " : $department"                              if $form->{department};
-  if ($form->{department_id}) {
-    unless ($form->{department}) {
-      require SL::DB::Department;
-      my $department = SL::DB::Manager::Department->find_by(id => $::form->{department_id});
-      push @options, $locale->text('Department') . " : " . $department->description if $department;
-    }
-  }
+  push @options, $locale->text('Department')              . " : $form->{department}"                      if $form->{department};
   push @options, $locale->text('Order Number')            . " : $form->{ordnumber}"                       if $form->{ordnumber};
   push @options, $locale->text('Customer Order Number')   . " : $form->{cusordnumber}"                    if $form->{cusordnumber};
   push @options, $locale->text('Notes')                   . " : $form->{notes}"                           if $form->{notes};
@@ -1032,6 +1031,10 @@ sub orders {
     push @options, $locale->text('Steuersatz') . " : " . SL::DB::TaxZone->new(id => $form->{taxzone_id})->load->description;
   }
 
+  if ($form->{department_id}) {
+    push @options, $locale->text('Department') . " : " . SL::DB::Department->new(id => $form->{department_id})->load->description;
+  }
+
   if (($form->{order_probability_value} || '') ne '') {
     push @options, $::locale->text('Order probability') . ' ' . ($form->{order_probability_op} eq 'le' ? '<=' : '>=') . ' ' . $form->{order_probability_value} . '%';
   }
@@ -1184,7 +1187,7 @@ sub save_and_close {
   $form->{$idx} =~ s/\s*$//g;
 
   my $msg = ucfirst $form->{vc};
-  $form->isblank($form->{vc}, $locale->text($msg . " missing!"));
+  $form->isblank($form->{vc} . '_id', $locale->text($msg . " missing!"));
 
   # $locale->text('Customer missing!');
   # $locale->text('Vendor missing!');
@@ -1194,17 +1197,14 @@ sub save_and_close {
 
   &validate_items;
 
-  my $payment_id;
-  if($form->{payment_id}) {
-    $payment_id = $form->{payment_id};
-  }
+  my $vc = $form->{vc};
+  if (($form->{"previous_${vc}_id"} || $form->{"${vc}_id"}) != $form->{"${vc}_id"}) {
+    $::form->{salesman_id} = SL::DB::Manager::Employee->current->id if exists $::form->{salesman_id};
 
-  # if the name changed get new values
-  if (&check_name($form->{vc})) {
-    if($form->{payment_id} eq "") {
-      $form->{payment_id} = $payment_id;
-    }
-    &update;
+    IS->get_customer(\%myconfig, $form) if $vc eq 'customer';
+    IR->get_vendor(\%myconfig, $form)   if $vc eq 'vendor';
+
+    update();
     $::dispatcher->end_request;
   }
 
@@ -1291,7 +1291,7 @@ sub save {
   $form->{$idx} =~ s/\s*$//g;
 
   my $msg = ucfirst $form->{vc};
-  $form->isblank($form->{vc}, $locale->text($msg . " missing!"));
+  $form->isblank($form->{vc} . '_id', $locale->text($msg . " missing!"));
 
   # $locale->text('Customer missing!');
   # $locale->text('Vendor missing!');
@@ -1302,17 +1302,14 @@ sub save {
   remove_emptied_rows();
   &validate_items;
 
-  my $payment_id;
-  if($form->{payment_id}) {
-    $payment_id = $form->{payment_id};
-  }
+  my $vc = $form->{vc};
+  if (($form->{"previous_${vc}_id"} || $form->{"${vc}_id"}) != $form->{"${vc}_id"}) {
+    $::form->{salesman_id} = SL::DB::Manager::Employee->current->id if exists $::form->{salesman_id};
 
-  # if the name changed get new values
-  if (&check_name($form->{vc})) {
-    if($form->{payment_id} eq "") {
-      $form->{payment_id} = $payment_id;
-    }
-    &update;
+    IS->get_customer(\%myconfig, $form) if $vc eq 'customer';
+    IR->get_vendor(\%myconfig, $form)   if $vc eq 'vendor';
+
+    update();
     $::dispatcher->end_request;
   }
 
@@ -1455,15 +1452,14 @@ sub invoice {
     $form->{quodate}      = $form->{transdate};
   }
 
-  my $payment_id;
-  if ($form->{payment_id}) {
-    $payment_id = $form->{payment_id};
-  }
+  my $vc = $form->{vc};
+  if (($form->{"previous_${vc}_id"} || $form->{"${vc}_id"}) != $form->{"${vc}_id"}) {
+    $::form->{salesman_id} = SL::DB::Manager::Employee->current->id if exists $::form->{salesman_id};
 
-  # if the name changed get new values
-  if (&check_name($form->{vc})) {
-    $form->{payment_id} = $payment_id if $form->{payment_id} eq "";
-    &update;
+    IS->get_customer(\%myconfig, $form) if $vc eq 'customer';
+    IR->get_vendor(\%myconfig, $form)   if $vc eq 'vendor';
+
+    update();
     $::dispatcher->end_request;
   }
 
@@ -1529,8 +1525,6 @@ sub invoice {
 
   require "bin/mozilla/$form->{script}";
 
-  map { $form->{"select$_"} = "" } ($form->{vc}, "currency");
-
   my $currency = $form->{currency};
   &invoice_links;