+sub select_part_internal {
+ $main::lxdebug->enter_sub();
+
+ my $form = $main::form;
+
+ my ($new_item, $callback_sub);
+
+ my $re = "^new_.*_$form->{selection}\$";
+
+ foreach (grep /$re/, keys %{ $form }) {
+ my $new_key = $_;
+ $new_key =~ s/^new_//;
+ $new_key =~ s/_\d+$//;
+ $new_item->{$new_key} = $form->{$_};
+ }
+
+ if ($form->{remap_parts_id}) {
+ $new_item->{parts_id} = $new_item->{id};
+ delete $new_item->{id};
+ }
+
+ if ($form->{remap_partnumber}) {
+ $new_item->{partnumber} = $new_item->{number};
+ delete $new_item->{number};
+ }
+
+ $callback_sub = $form->{callback_sub};
+
+ restore_form($form->{old_form});
+
+ call_sub($callback_sub, $new_item);
+
+ $main::lxdebug->leave_sub();
+}
+
+sub part_selection_internal {
+ $main::lxdebug->enter_sub();
+
+ my $form = $main::form;
+ my %myconfig = %main::myconfig;
+ my $locale = $main::locale;
+
+ my $order_by = "description";
+ $order_by = $form->{"order_by"} if (defined($form->{"order_by"}));
+ my $order_dir = 1;
+ $order_dir = $form->{"order_dir"} if (defined($form->{"order_dir"}));
+
+ my %options;
+
+ foreach my $opt (split m/:/, $form->{options}) {
+ if ($opt =~ /=/) {
+ my ($key, $value) = split m/=/, $opt, 2;
+ $options{$key} = $value;
+
+ } else {
+ $options{$opt} = 1;
+ }
+ }
+
+ map { $form->{$_} = $options{$_} if ($options{$_}) } qw(no_services no_assemblies assemblies click_button);
+
+ my $parts = Common->retrieve_parts(\%myconfig, $form, $order_by, $order_dir);
+ my $onload;
+
+ if (0 == scalar(@{$parts})) {
+ $form->show_generic_information($locale->text("No part was found matching the search parameters."));
+ } elsif (1 == scalar(@{$parts})) {
+ $onload = "part_selected('1')";
+ }
+
+ map { $parts->[$_]->{selected} = $_ ? 0 : 1; } (0..$#{$parts});
+
+ my $callback = build_std_url('action=part_selection_internal', qw(partnumber description input_partnumber input_description input_partsid),
+ grep({ /^[fl]_/ } keys %{ $form }));
+
+ my @header_sort = qw(partnumber description);
+ my %header_title = ( "partnumber" => $locale->text("Part Number"),
+ "description" => $locale->text("Part Description"),
+ );
+
+ my @header =
+ map(+{ "column_title" => $header_title{$_},
+ "column" => $_,
+ "callback" => $callback . "order_by=${_}&order_dir=" . ($order_by eq $_ ? 1 - $order_dir : $order_dir),
+ },
+ @header_sort);
+
+ $form->{formname} ||= 'Form';
+
+ $form->{title} = $locale->text("Select a part");
+ $form->header();
+ print $form->parse_html_template("generic/part_selection", { "HEADER" => \@header,
+ "PARTS" => $parts,
+ "onload" => $onload });
+
+ $main::lxdebug->leave_sub();
+}
+
+# -------------------------------------------------------------------------
+
+sub delivery_customer_selection {
+ $main::lxdebug->enter_sub();
+
+ my $form = $main::form;
+ my %myconfig = %main::myconfig;
+ my $locale = $main::locale;
+
+ my $order_by = "name";
+ $order_by = $form->{"order_by"} if (defined($form->{"order_by"}));
+ my $order_dir = 1;
+ $order_dir = $form->{"order_dir"} if (defined($form->{"order_dir"}));
+
+ my $delivery = Common->retrieve_delivery_customer(\%myconfig, $form, $order_by, $order_dir);
+ map({ $delivery->[$_]->{"selected"} = $_ ? 0 : 1; } (0..$#{$delivery}));
+
+ my $onload;
+ if (0 == scalar(@{$delivery})) {
+ $form->show_generic_information($locale->text("No Customer was found matching the search parameters."));
+ } elsif (1 == scalar(@{$delivery})) {
+ $onload = "customer_selected('1')";
+ }
+
+ my $callback = "$form->{script}?action=delivery_customer_selection&";
+ map({ $callback .= "$_=" . $form->escape($form->{$_}) . "&" }
+ (qw(name input_name input_id), grep({ /^[fl]_/ } keys %$form)));
+
+ my @header_sort = qw(name customernumber address);
+ my %header_title = ( "name" => $locale->text("Name"),
+ "customernumber" => $locale->text("Customer Number"),
+ "address" => $locale->text("Address"),
+ );
+
+ my @header =
+ map(+{ "column_title" => $header_title{$_},
+ "column" => $_,
+ "callback" => $callback . "order_by=${_}&order_dir=" . ($order_by eq $_ ? 1 - $order_dir : $order_dir),
+ },
+ @header_sort);
+
+ $form->{"title"} = $locale->text("Select a Customer");
+ $form->header();
+ print $form->parse_html_template("generic/select_delivery_customer", { "HEADER" => \@header,
+ "DELIVERY" => $delivery,
+ "onload" => $onload });
+
+ $main::lxdebug->leave_sub();
+}
+
+# -------------------------------------------------------------------------
+
+sub vendor_selection {
+ $main::lxdebug->enter_sub();
+
+ my $form = $main::form;
+ my %myconfig = %main::myconfig;
+ my $locale = $main::locale;
+
+ my $order_by = "name";
+ $order_by = $form->{"order_by"} if (defined($form->{"order_by"}));
+ my $order_dir = 1;
+ $order_dir = $form->{"order_dir"} if (defined($form->{"order_dir"}));
+
+ my $vendor = Common->retrieve_vendor(\%myconfig, $form, $order_by, $order_dir);
+ map({ $vendor->[$_]->{"selected"} = $_ ? 0 : 1; } (0..$#{$vendor}));
+
+ my $onload;
+ if (0 == scalar(@{$vendor})) {
+ $form->show_generic_information($locale->text("No Vendor was found matching the search parameters."));
+ } elsif (1 == scalar(@{$vendor})) {
+ $onload = "vendor_selected('1')";
+ }
+
+ my $callback = "$form->{script}?action=vendor_selection&";
+ map({ $callback .= "$_=" . $form->escape($form->{$_}) . "&" }
+ (qw(name input_name input_id), grep({ /^[fl]_/ } keys %$form)));
+
+ my @header_sort = qw(name customernumber address);
+ my %header_title = ( "name" => $locale->text("Name"),
+ "customernumber" => $locale->text("Customer Number"),
+ "address" => $locale->text("Address"),
+ );
+
+ my @header =
+ map(+{ "column_title" => $header_title{$_},
+ "column" => $_,
+ "callback" => $callback . "order_by=${_}&order_dir=" . ($order_by eq $_ ? 1 - $order_dir : $order_dir),
+ },
+ @header_sort);
+
+ $form->{"title"} = $locale->text("Select a Customer");
+ $form->header();
+ print $form->parse_html_template("generic/select_vendor", { "HEADER" => \@header,
+ "VENDOR" => $vendor,
+ "onload" => $onload });
+
+ $main::lxdebug->leave_sub();
+}
+
+# -------------------------------------------------------------------------
+
+sub calculate_qty {
+ $main::lxdebug->enter_sub();
+
+ my $form = $main::form;
+ my $locale = $main::locale;
+
+ $form->{formel} =~ s/\r\n//g;
+
+ my ($variable_string, $formel) = split /###/,$form->{formel};
+ my @variable;
+ my $onload; # note! this sub is mostly called over a javascript invocation, and it's unlikey that onload is set.
+
+ foreach my $item (split m/;/, $variable_string) {
+ next unless $item =~ m/^ \s* (\w+) \s* = \s* (\w+) \s* (\w+) \s* $/x;
+ push @variable, {
+ description => $1,
+ name => $2,
+ unit => $3,
+ };
+ }
+
+ my @header_sort = qw(variable value unit);
+ my %header_title = (
+ variable => $locale->text("Variable"),
+ value => $locale->text("Value"),
+ unit => $locale->text("Unit"),
+ );
+ my @header = map +{
+ column_title => $header_title{$_},
+ column => $_,
+ }, @header_sort;
+
+ $form->{formel} = $formel;
+ $form->{title} = $locale->text("Please enter values");
+ $form->header();
+ print $form->parse_html_template("generic/calculate_qty", { "HEADER" => \@header,
+ "VARIABLES" => \@variable,
+ "onload" => $onload });
+
+ $main::lxdebug->leave_sub();
+}
+
+# -------------------------------------------------------------------------
+
+sub set_longdescription {
+ $main::lxdebug->enter_sub();
+
+ my $form = $main::form;
+ my $locale = $main::locale;
+
+ $form->{title} = $locale->text("Enter longdescription");
+ $form->header();
+ print $form->parse_html_template("generic/set_longdescription");
+
+ $main::lxdebug->leave_sub();
+}
+
+# -------------------------------------------------------------------------
+