1 #=====================================================================
4 # Based on SQL-Ledger Version 2.1.9
5 # Web http://www.lx-office.org
6 ######################################################################
8 # Stuff that can be used from other modules
10 ######################################################################
18 $lxdebug->enter_sub();
22 my $old_form = $yaml->dump($form);
23 $old_form =~ s|!|!!|g;
24 $old_form =~ s|\n|!n|g;
25 $old_form =~ s|\r|!r|g;
27 $lxdebug->leave_sub();
33 $lxdebug->enter_sub();
35 my ($old_form, $no_delete) = @_;
37 map({ delete($form->{$_}); } keys(%{$form})) unless ($no_delete);
38 $old_form =~ s|!r|\r|g;
39 $old_form =~ s|!n|\n|g;
40 $old_form =~ s|!!|!|g;
41 my $new_form = YAML::Load($old_form);
42 map({ $form->{$_} = $new_form->{$_}; } keys(%{$new_form}));
44 $lxdebug->leave_sub();
48 $lxdebug->enter_sub();
50 my $url = "$form->{script}?";
52 foreach my $key ((qw(login password path), @_)) {
54 $url .= "&" unless ($first);
60 $url .= "${key}=" . E($form->{$key});
64 $lxdebug->leave_sub();
70 $lxdebug->enter_sub();
72 my ($callback_sub, @employees) = @_;
74 if (0 == scalar(@employees)) {
75 @employees = SystemBrace->get_all_employees(\%myconfig, $form);
78 my $old_form = save_form();
81 print($form->parse_html_template("generic/select_employee",
82 { "EMPLOYEES" => \@employees,
83 "old_form" => $old_form,
84 "title" => $locale->text("Select an employee"),
85 "nextsub" => "select_employee_internal",
86 "callback_sub" => $callback_sub }));
88 $lxdebug->leave_sub();
91 sub select_employee_internal {
92 $lxdebug->enter_sub();
94 my ($new_id, $new_name, $callback_sub);
96 my $new_id = $form->{"new_id_" . $form->{"selection"}};
97 my $new_name = $form->{"new_name_" . $form->{"selection"}};
98 my $callback_sub = $form->{"callback_sub"};
100 restore_form($form->{"old_form"});
102 &{ $callback_sub }($new_id, $new_name);
104 $lxdebug->leave_sub();
108 $lxdebug->enter_sub();
110 my ($callback_sub, @parts) = @_;
112 my $remap_parts_id = 0;
113 if (defined($parts[0]->{"parts_id"}) && !defined($parts[0]->{"id"})) {
115 map({ $_->{"id"} = $_->{"parts_id"}; } @parts);
118 my $remap_partnumber = 0;
119 if (defined($parts[0]->{"partnumber"}) && !defined($parts[0]->{"number"})) {
120 $remap_partnumber = 1;
121 map({ $_->{"number"} = $_->{"partnumber"}; } @parts);
125 if (defined($parts[0]->{"chargenumber"})) {
127 map({ $_->{"has_charge"} = 1; } @parts);
130 my $old_form = save_form();
133 print($form->parse_html_template("generic/select_part",
134 { "PARTS" => \@parts,
135 "old_form" => $old_form,
136 "title" => $locale->text("Select a part"),
137 "nextsub" => "select_part_internal",
138 "callback_sub" => $callback_sub,
139 "has_charge" => $has_charge,
140 "remap_parts_id" => $remap_parts_id,
141 "remap_partnumber" => $remap_partnumber }));
143 $lxdebug->leave_sub();
146 sub select_part_internal {
147 $lxdebug->enter_sub();
149 my ($new_item, $callback_sub);
151 my $re = "^new_.*_" . $form->{"selection"};
156 $new_item->{$key} = $form->{$_};
157 } grep(/$re/, keys(%{$form})));
159 if ($form->{"remap_parts_id"}) {
160 $new_item->{"parts_id"} = $new_item->{"id"};
161 delete($new_item->{"id"});
163 if ($form->{"remap_partnumber"}) {
164 $new_item->{"partnumber"} = $new_item->{"number"};
165 delete($new_item->{"number"});
168 my $callback_sub = $form->{"callback_sub"};
170 restore_form($form->{"old_form"});
172 &{ $callback_sub }($new_item);
174 $lxdebug->leave_sub();
177 sub part_selection_internal {
178 $lxdebug->enter_sub();
180 $order_by = "description";
181 $order_by = $form->{"order_by"} if (defined($form->{"order_by"}));
183 $order_dir = $form->{"order_dir"} if (defined($form->{"order_dir"}));
185 $parts = Common->retrieve_parts(\%myconfig, $form, $order_by, $order_dir);
186 map({ $parts->[$_]->{"selected"} = $_ ? 0 : 1; } (0..$#{$parts}));
187 if (0 == scalar(@{$parts})) {
188 $form->show_generic_information($locale->text("No part was found matching the search parameters."));
189 } elsif (1 == scalar(@{$parts})) {
190 $onload = "part_selected('1')";
193 my $callback = "$form->{script}?action=part_selection_internal&";
194 map({ $callback .= "$_=" . $form->escape($form->{$_}) . "&" }
195 (qw(login path password partnumber description input_partnumber input_description input_partsid), grep({ /^[fl]_/ } keys %$form)));
197 my @header_sort = qw(partnumber description);
198 my %header_title = ( "partnumber" => $locale->text("Part Number"),
199 "description" => $locale->text("Part description"),
203 map(+{ "column_title" => $header_title{$_},
205 "callback" => $callback . "order_by=${_}&order_dir=" . ($order_by eq $_ ? 1 - $order_dir : $order_dir),
209 $form->{"title"} = $locale->text("Select a part");
211 print($form->parse_html_template("generic/part_selection", { "HEADER" => \@header,
213 "onload" => $onload }));
215 $lxdebug->leave_sub();
218 sub project_selection_internal {
219 $lxdebug->enter_sub();
221 $order_by = "description";
222 $order_by = $form->{"order_by"} if (defined($form->{"order_by"}));
224 $order_dir = $form->{"order_dir"} if (defined($form->{"order_dir"}));
226 $projects = Common->retrieve_projects(\%myconfig, $form, $order_by, $order_dir);
227 map({ $projects->[$_]->{"selected"} = $_ ? 0 : 1; } (0..$#{$projects}));
228 if (0 == scalar(@{$projects})) {
229 $form->show_generic_information($locale->text("No project was found matching the search parameters."));
230 } elsif (1 == scalar(@{$projects})) {
231 $onload = "project_selected('1')";
234 my $callback = "$form->{script}?action=project_selection_internal&";
235 map({ $callback .= "$_=" . $form->escape($form->{$_}) . "&" }
236 (qw(login path password projectnumber description input_projectnumber input_description input_project_id), grep({ /^[fl]_/ } keys %$form)));
238 my @header_sort = qw(projectnumber description);
239 my %header_title = ( "projectnumber" => $locale->text("Project Number"),
240 "description" => $locale->text("Project description"),
244 map(+{ "column_title" => $header_title{$_},
246 "callback" => $callback . "order_by=${_}&order_dir=" . ($order_by eq $_ ? 1 - $order_dir : $order_dir),
250 $form->{"title"} = $locale->text("Select a project");
252 print($form->parse_html_template("generic/project_selection", { "HEADER" => \@header,
253 "PROJECTS" => $projects,
254 "onload" => $onload }));
256 $lxdebug->leave_sub();
259 sub employee_selection_internal {
260 $lxdebug->enter_sub();
263 $order_by = $form->{"order_by"} if (defined($form->{"order_by"}));
265 $order_dir = $form->{"order_dir"} if (defined($form->{"order_dir"}));
267 $employees = Common->retrieve_employees(\%myconfig, $form, $order_by, $order_dir);
268 map({ $employees->[$_]->{"selected"} = $_ ? 0 : 1; } (0..$#{$employees}));
269 if (0 == scalar(@{$employees})) {
270 $form->show_generic_information($locale->text("No employee was found matching the search parameters."));
271 } elsif (1 == scalar(@{$employees})) {
272 $onload = "employee_selected('1')";
275 my $callback = "$form->{script}?action=employee_selection_internal&";
276 map({ $callback .= "$_=" . $form->escape($form->{$_}) . "&" }
277 (qw(login path password name input_name input_id), grep({ /^[fl]_/ } keys %$form)));
279 my @header_sort = qw(name);
280 my %header_title = ( "name" => $locale->text("Name"),
284 map(+{ "column_title" => $header_title{$_},
286 "callback" => $callback . "order_by=${_}&order_dir=" . ($order_by eq $_ ? 1 - $order_dir : $order_dir),
290 $form->{"title"} = $locale->text("Select an employee");
292 print($form->parse_html_template("generic/employee_selection", { "HEADER" => \@header,
293 "EMPLOYEES" => $employees,
294 "onload" => $onload }));
296 $lxdebug->leave_sub();
299 sub delivery_customer_selection {
300 $lxdebug->enter_sub();
303 $order_by = $form->{"order_by"} if (defined($form->{"order_by"}));
305 $order_dir = $form->{"order_dir"} if (defined($form->{"order_dir"}));
307 $delivery = Common->retrieve_delivery_customer(\%myconfig, $form, $order_by, $order_dir);
308 map({ $delivery->[$_]->{"selected"} = $_ ? 0 : 1; } (0..$#{$delivery}));
309 if (0 == scalar(@{$delivery})) {
310 $form->show_generic_information($locale->text("No Customer was found matching the search parameters."));
311 } elsif (1 == scalar(@{$delivery})) {
312 $onload = "customer_selected('1')";
315 my $callback = "$form->{script}?action=delivery_customer_selection&";
316 map({ $callback .= "$_=" . $form->escape($form->{$_}) . "&" }
317 (qw(login path password name input_name input_id), grep({ /^[fl]_/ } keys %$form)));
319 my @header_sort = qw(name customernumber address);
320 my %header_title = ( "name" => $locale->text("Name"),
321 "customernumber" => $locale->text("Customer Number"),
322 "address" => $locale->text("Address"),
326 map(+{ "column_title" => $header_title{$_},
328 "callback" => $callback . "order_by=${_}&order_dir=" . ($order_by eq $_ ? 1 - $order_dir : $order_dir),
332 $form->{"title"} = $locale->text("Select a Customer");
334 print($form->parse_html_template("generic/select_delivery_customer", { "HEADER" => \@header,
335 "DELIVERY" => $delivery,
336 "onload" => $onload }));
338 $lxdebug->leave_sub();
341 sub vendor_selection {
342 $lxdebug->enter_sub();
345 $order_by = $form->{"order_by"} if (defined($form->{"order_by"}));
347 $order_dir = $form->{"order_dir"} if (defined($form->{"order_dir"}));
349 $vendor = Common->retrieve_vendor(\%myconfig, $form, $order_by, $order_dir);
350 map({ $vendor->[$_]->{"selected"} = $_ ? 0 : 1; } (0..$#{$vendor}));
351 if (0 == scalar(@{$vendor})) {
352 $form->show_generic_information($locale->text("No Vendor was found matching the search parameters."));
353 } elsif (1 == scalar(@{$vendor})) {
354 $onload = "vendor_selected('1')";
357 my $callback = "$form->{script}?action=vendor_selection&";
358 map({ $callback .= "$_=" . $form->escape($form->{$_}) . "&" }
359 (qw(login path password name input_name input_id), grep({ /^[fl]_/ } keys %$form)));
361 my @header_sort = qw(name customernumber address);
362 my %header_title = ( "name" => $locale->text("Name"),
363 "customernumber" => $locale->text("Customer Number"),
364 "address" => $locale->text("Address"),
368 map(+{ "column_title" => $header_title{$_},
370 "callback" => $callback . "order_by=${_}&order_dir=" . ($order_by eq $_ ? 1 - $order_dir : $order_dir),
374 $form->{"title"} = $locale->text("Select a Customer");
376 print($form->parse_html_template("generic/select_vendor", { "HEADER" => \@header,
378 "onload" => $onload }));
380 $lxdebug->leave_sub();
384 $lxdebug->enter_sub();
386 my @variable_sort = ();
387 my %variable_list = ();
389 $form->{formel} =~ s/\r\n//g;
391 my ($variable_string, $formel) = split /###/,$form->{formel};
394 split /;/, $variable_string;
396 my($name, $valueunit) = split /=/,$item;
397 my($value, $unit) = split / /, $valueunit;
399 push(@variable_sort, $value);
400 $variable_list{$value} = $name;
401 $unit_list{$value} = $unit;
404 my @header_sort = qw(variable value unit);
405 my %header_title = ( "variable" => $locale->text("Variable"),
406 "value" => $locale->text("Value"),
407 "unit" => $locale->text("Unit"),
410 my @variable = map(+{ "description" => $variable_list{$_},
412 "unit" => $unit_list{$_} }, @variable_sort);
415 map(+{ "column_title" => $header_title{$_},
419 $form->{formel} = $formel;
420 $form->{"title"} = $locale->text("Please enter values");
422 print($form->parse_html_template("generic/calculate_qty", { "HEADER" => \@header,
423 "VARIABLES" => \@variable,
424 "onload" => $onload }));
426 $lxdebug->leave_sub();
429 sub set_longdescription {
430 $lxdebug->enter_sub();
433 my $callback = "$form->{script}?action=set_longdescription&";
434 map({ $callback .= "$_=" . $form->escape($form->{$_}) . "&" }
435 (qw(login path password name input_name input_id), grep({ /^[fl]_/ } keys %$form)));
437 $form->{"title"} = $locale->text("Enter longdescription");
439 print($form->parse_html_template("generic/set_longdescription"));
441 $lxdebug->leave_sub();
445 return $form->quote_html($_[0]);
449 return $form->quote($_[0]);
453 return $form->escape($_[0]);
459 $element =~ s/tabindex\s*=\s*"\d+"//;
464 $lxdebug->enter_sub();
466 my ($dateformat, $longformat, @indices) = @_;
468 $dateformat = $myconfig{"dateformat"} unless ($dateformat);
470 foreach my $idx (@indices) {
471 next unless (defined($form->{$idx}));
473 if (!ref($form->{$idx})) {
474 $form->{$idx} = $locale->reformat_date(\%myconfig, $form->{$idx},
475 $dateformat, $longformat);
477 } elsif (ref($form->{$idx}) eq "ARRAY") {
478 for (my $i = 0; $i < scalar(@{$form->{$idx}}); $i++) {
479 $form->{$idx}->[$i] =
480 $locale->reformat_date(\%myconfig, $form->{$idx}->[$i],
481 $dateformat, $longformat);
486 $lxdebug->leave_sub();
489 sub reformat_numbers {
490 $lxdebug->enter_sub();
492 my ($numberformat, $places, @indices) = @_;
494 return $lxdebug->leave_sub()
495 if (!$numberformat || ($numberformat eq $myconfig{"numberformat"}));
497 foreach my $idx (@indices) {
498 next unless (defined($form->{$idx}));
500 if (!ref($form->{$idx})) {
501 $form->{$idx} = $form->parse_amount(\%myconfig, $form->{$idx});
503 } elsif (ref($form->{$idx}) eq "ARRAY") {
504 for (my $i = 0; $i < scalar(@{$form->{$idx}}); $i++) {
505 $form->{$idx}->[$i] =
506 $form->parse_amount(\%myconfig, $form->{$idx}->[$i]);
511 my $saved_numberformat = $myconfig{"numberformat"};
512 $myconfig{"numberformat"} = $numberformat;
514 foreach my $idx (@indices) {
515 next unless (defined($form->{$idx}));
517 if (!ref($form->{$idx})) {
518 $form->{$idx} = $form->format_amount(\%myconfig, $form->{$idx}, $places);
520 } elsif (ref($form->{$idx}) eq "ARRAY") {
521 for (my $i = 0; $i < scalar(@{$form->{$idx}}); $i++) {
522 $form->{$idx}->[$i] =
523 $form->format_amount(\%myconfig, $form->{$idx}->[$i], $places);
528 $myconfig{"numberformat"} = $saved_numberformat;
530 $lxdebug->leave_sub();
534 $lxdebug->enter_sub();
535 my $dbh = $form->dbconnect(\%myconfig);
537 $form->{title} = $locale->text("History");
539 print $form->parse_html_template( "common/show_history", {
540 "DATEN" => $form->get_history($dbh,$form->{input_name}),
541 "SUCCESS" => ($form->get_history($dbh,$form->{input_name}) ne "0")
545 $lxdebug->leave_sub();