# 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.
#======================================================================
#
# Order entry module
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);
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;
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};
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
$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();
}
$TMPL_VAR{oe_obj} = $obj;
}
+ my $warn_save_active_periodic_invoice = $TMPL_VAR{warn_save_active_periodic_invoice};
$form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
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"});
]
]);
$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};
}
}
- $::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:
+ 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 @req_trans_desc = qw(kivi.SalesPurchase.check_transaction_description) x!!$::instance_conf->get_require_transaction_description_ps;
+ my @warn_p_invoice = qw(kivi.SalesPurchase.oe_warn_save_active_periodic_invoice) x!!$warn_save_active_periodic_invoice;
+
+ my $tpca_remainder = 0;
+
+ for my $bar ($::request->layout->get('actionbar')) {
+ $bar->add_actions([ t8('Update'),
+ submit => [ '#form', { action_update => 1 } ],
+ ]);
+ $bar->add_actions("combobox");
+ $bar->actions->[-1]->add_actions([ t8('Save'),
+ submit => [ '#form', { action_save => 1 } ],
+ checks => [ @req_trans_desc, @warn_p_invoice ],
+ confirm => t8('Missing transport cost: #1 Are you sure?', $tpca_remainder),
+ ]);
+ $bar->actions->[-1]->add_actions([ t8('Save as new'),
+ submit => [ '#form', { action_save_as_new => 1 } ],
+ checks => [ @req_trans_desc ],
+ disabled => !$::form->{id},
+ ]);
+ $bar->actions->[-1]->add_actions([ t8('Save and Close'),
+ submit => [ '#form', { action_save_and_close => 1 } ],
+ checks => [ @req_trans_desc, @warn_p_invoice ],
+ confirm => t8('Missing transport cost: #1 Are you sure?', $tpca_remainder),
+ ]);
+ $bar->add_actions([ t8('Delete'),
+ submit => [ '#form', { action_delete => 1 } ],
+ confirm => t8('Do you really want to delete this object?'),
+ disabled => !$::form->{id}
+ || ($is_sales_ord && !$::instance_conf->get_sales_order_show_delete)
+ || ($is_pur_ord && !$::instance_conf->get_purchase_order_show_delete),
+ ]);
+ $bar->add_actions('separator');
+ $bar->add_actions('combobox');
+ $bar->actions->[-1]->add_actions([ t8('Workflow'),
+ disabled => 1,
+ ]);
+ $bar->actions->[-1]->add_actions([ t8('Sales Order'),
+ submit => [ '#form', { action_sales_order => 1 } ],
+ disabled => !$::form->{id},
+ ]) if $is_sales_quo;
+ $bar->actions->[-1]->add_actions([ t8('Purchase Order'),
+ submit => [ '#form', { action_sales_order => 1 } ],
+ disabled => !$::form->{id},
+ ]) if $is_req_quo;
+ $bar->actions->[-1]->add_actions([ t8('Delivery Order'),
+ submit => [ '#form', { action_delivery_order => 1 } ],
+ disabled => !$::form->{id},
+ ]) if $is_sales_ord || $is_pur_ord;
+ $bar->actions->[-1]->add_actions([ t8('Invoice'),
+ submit => [ '#form', { action_invoice => 1 } ],
+ disabled => !$::form->{id},
+ ]) if $allow_invoice;
+ $bar->actions->[-1]->add_actions([ t8('Quotation'),
+ submit => [ '#form', { action_quotation => 1 } ],
+ disabled => !$::form->{id},
+ ]);
+ $bar->actions->[-1]->add_actions([ t8('Request for Quotation'),
+ submit => [ '#form', { action_reqest_for_quotation => 1 } ],
+ disabled => !$::form->{id}
+ ]);
+ $bar->add_actions('combobox');
+ $bar->actions->[-1]->add_actions([ t8('Export'),
+ disabled => 1,
+ ]);
+ $bar->actions->[-1]->add_actions([ t8('Print'),
+ submit => [ '#form', { action_print => 1 } ],
+ checks => [ @req_trans_desc ],
+ ]);
+ $bar->actions->[-1]->add_actions([ t8('E Mail'),
+ submit => [ '#form', { action_print => 1 } ],
+ checks => [ @req_trans_desc ],
+ ]);
+ $bar->add_actions('combobox');
+ $bar->actions->[-1]->add_actions([ t8('more'),
+ disabled => 1,
+ ]);
+ $bar->actions->[-1]->add_actions([ t8('History'),
+ call => [ 'set_history_window', $::form->{id} * 1, 'id' ],
+ disabled => !$::form->{id},
+ ]);
+ $bar->actions->[-1]->add_actions([ t8('Follow-Up'),
+ call => [ 'follow_up_window' ],
+ disabled => !$::form->{id},
+ ]);
+ }
$form->header;
if ($form->{CFDD_shipto} && $form->{CFDD_shipto_id} ) {
%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) ];
%TMPL_VAR,
tpca_reminder => $tpca_reminder,
print_options => print_options(inline => 1),
- label_edit => $locale->text("Edit the $form->{type}"),
- label_workflow => $locale->text("Workflow $form->{type}"),
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$/),
$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;
$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},
$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', {
'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};
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} . '%';
}
$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!');
&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;
}
$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!');
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;
}
$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};
+
+ IS->get_customer(\%myconfig, $form) if $vc eq 'customer';
+ IR->get_vendor(\%myconfig, $form) if $vc eq 'vendor';
- # if the name changed get new values
- if (&check_name($form->{vc})) {
- $form->{payment_id} = $payment_id if $form->{payment_id} eq "";
- &update;
+ update();
$::dispatcher->end_request;
}
require "bin/mozilla/$form->{script}";
- map { $form->{"select$_"} = "" } ($form->{vc}, "currency");
-
my $currency = $form->{currency};
&invoice_links;