Revision 2efc8cbc
Von Sven Schöling vor mehr als 17 Jahren hinzugefügt
bin/mozilla/ic.pl | ||
---|---|---|
36 | 36 |
|
37 | 37 |
#use SL::PE; |
38 | 38 |
|
39 |
use strict; |
|
40 |
#use warnings; |
|
41 |
|
|
39 | 42 |
require "bin/mozilla/io.pl"; |
40 | 43 |
require "bin/mozilla/common.pl"; |
41 | 44 |
|
42 | 45 |
1; |
43 | 46 |
|
47 |
# global imports |
|
48 |
my $form = $main::form; |
|
49 |
my $locale = $main::locale; |
|
50 |
my %myconfig = %main::myconfig; |
|
51 |
my $lxdebug = $main::lxdebug; |
|
52 |
|
|
44 | 53 |
# end of main |
45 | 54 |
|
46 | 55 |
sub add { |
... | ... | |
64 | 73 |
sub search { |
65 | 74 |
$lxdebug->enter_sub(); |
66 | 75 |
|
76 |
my ($button1, $button2, $onhand, $makemodel, $serialnumber, $l_serialnumber, $toplevel, $bought); |
|
77 |
|
|
67 | 78 |
$form->{title} = (ucfirst $form->{searchitems}) . "s"; |
68 | 79 |
$form->{title} = $locale->text($form->{title}); |
69 | 80 |
|
... | ... | |
81 | 92 |
|
82 | 93 |
# use JavaScript Calendar or not |
83 | 94 |
$form->{jsscript} = 1; |
84 |
$jsscript = ""; |
|
95 |
my $jsscript = "";
|
|
85 | 96 |
if ($form->{jsscript}) { |
86 | 97 |
|
87 | 98 |
# with JavaScript Calendar |
... | ... | |
400 | 411 |
sub search_update_prices { |
401 | 412 |
$lxdebug->enter_sub(); |
402 | 413 |
|
414 |
my ($onhand, $makemodel, $serialnumber, $l_serialnumber, $toplevel, $bought); |
|
415 |
|
|
403 | 416 |
$form->{title} = $locale->text('Update prices'); |
404 | 417 |
IC->get_pricegroups(\%myconfig, \%$form); |
405 | 418 |
|
... | ... | |
537 | 550 |
<td><input name="listprice_type" class=radio type=radio value=percent checked>/<input name="listprice_type" class=radio type=radio value=absolut></td> |
538 | 551 |
</tr> |
539 | 552 |
|; |
540 |
for $i (1 .. $form->{price_rows}) { |
|
553 |
for my $i (1 .. $form->{price_rows}) {
|
|
541 | 554 |
print qq| |
542 | 555 |
<tr> |
543 | 556 |
<td width=50%><input type=hidden name="pricegroup_$i" size=30 value="$form->{"pricegroup_$i"}">$form->{"pricegroup_$i"}</td> |
... | ... | |
588 | 601 |
# delete action variable |
589 | 602 |
map { delete $form->{$_} } qw(action header); |
590 | 603 |
|
591 |
foreach $key (keys %$form) { |
|
604 |
foreach my $key (keys %$form) {
|
|
592 | 605 |
$form->{$key} =~ s/\"/"/g; |
593 | 606 |
print qq|<input type=hidden name=$key value="$form->{$key}">\n|; |
594 | 607 |
} |
... | ... | |
624 | 637 |
sub choice { |
625 | 638 |
$lxdebug->enter_sub(); |
626 | 639 |
|
640 |
my $j = $main::j; |
|
641 |
my $lastndx = $main::lastndx; |
|
642 |
|
|
643 |
my ($totop100); |
|
644 |
|
|
627 | 645 |
$form->{title} = $locale->text('Top 100 hinzufuegen'); |
628 | 646 |
|
629 | 647 |
$form->header; |
... | ... | |
642 | 660 |
print qq| |
643 | 661 |
<table> |
644 | 662 |
<tr class=listheading> |
645 |
<th class=listheading nowrap>| |
|
646 |
. $locale->text('Part Number') . qq|</th> |
|
647 |
<th class=listheading nowrap>| |
|
648 |
. $locale->text('Part Description') . qq|</th> |
|
663 |
<th class=listheading nowrap>| . $locale->text('Part Number') . qq|</th> |
|
664 |
<th class=listheading nowrap>| . $locale->text('Part Description') . qq|</th> |
|
649 | 665 |
</tr> |
650 | 666 |
<tr valign=top> |
651 | 667 |
<td><input type=text name=partnumber size=20 value=></td> |
... | ... | |
687 | 703 |
|
688 | 704 |
<input name=extras type=hidden value=$form->{extras}>|; |
689 | 705 |
|
706 |
my ($partnumber, $description, $unit, $sellprice, $soldtotal); |
|
690 | 707 |
# if choice set data |
691 | 708 |
if ($form->{ndx}) { |
692 |
for ($i = 0; $i < $form->{ndxs_counter}; $i++) { |
|
709 |
for (my $i = 0; $i < $form->{ndxs_counter}; $i++) {
|
|
693 | 710 |
|
694 | 711 |
# prepeare data |
695 | 712 |
$partnumber = $form->{"totop100_partnumber_$j"}; |
... | ... | |
713 | 730 |
|
714 | 731 |
# set data for next page |
715 | 732 |
if (($form->{ndxs_counter}) > 0) { |
716 |
for ($i = 1; ($i < $form->{ndxs_counter} + 1); $i++) { |
|
733 |
for (my $i = 1; ($i < $form->{ndxs_counter} + 1); $i++) {
|
|
717 | 734 |
$partnumber = $form->{"totop100_partnumber_$i"}; |
718 | 735 |
$description = $form->{"totop100_description_$i"}; |
719 | 736 |
$unit = $form->{"totop100_unit_$i"}; |
... | ... | |
745 | 762 |
sub list { |
746 | 763 |
$lxdebug->enter_sub(); |
747 | 764 |
|
765 |
my $lastndx = $main::lastndx; |
|
766 |
|
|
748 | 767 |
my @sortorders = ("", "partnumber", "description", "all"); |
749 | 768 |
my $sortorder = $sortorders[($form->{description} ? 2 : 0) + ($form->{partnumber} ? 1 : 0)]; |
750 | 769 |
IC->get_parts(\%myconfig, \%$form, $sortorder); |
... | ... | |
829 | 848 |
|
830 | 849 |
<input name=ndxs_counter type=hidden value=$form->{ndxs_counter}>|; |
831 | 850 |
|
832 |
$totop100 = ""; |
|
851 |
my $totop100 = "";
|
|
833 | 852 |
|
834 | 853 |
if (($form->{ndxs_counter}) > 0) { |
835 | 854 |
for ($i = 1; ($i < $form->{ndxs_counter} + 1); $i++) { |
836 |
$j1 = $form->{"totop100_partnumber_$i"}; |
|
837 |
$j2 = $form->{"totop100_description_$i"}; |
|
838 |
$j3 = $form->{"totop100_unit_$i"}; |
|
839 |
$j4 = $form->{"totop100_sellprice_$i"}; |
|
840 |
$j5 = $form->{"totop100_soldtotal_$i"}; |
|
841 |
|
|
842 |
$partnumber = $j1; |
|
843 |
$description = $j2; |
|
844 |
$unit = $j3; |
|
845 |
$sellprice = $j4; |
|
846 |
$soldtotal = $j5; |
|
855 |
|
|
856 |
# ToDO: does this really make sense? |
|
857 |
$main::partnumber = $form->{"totop100_partnumber_$i"}; |
|
858 |
$main::description = $form->{"totop100_description_$i"}; |
|
859 |
$main::unit = $form->{"totop100_unit_$i"}; |
|
860 |
$main::sellprice = $form->{"totop100_sellprice_$i"}; |
|
861 |
$main::soldtotal = $form->{"totop100_soldtotal_$i"}; |
|
847 | 862 |
|
848 | 863 |
$totop100 .= qq| |
849 | 864 |
<input type=hidden name=totop100_partnumber_$i value=$form->{"totop100_partnumber_$i"}> |
... | ... | |
876 | 891 |
|
877 | 892 |
if ($form->{ndxs_counter} > 0) { |
878 | 893 |
|
879 |
$index = $form->{ndx}; |
|
880 |
|
|
881 |
$j1 = $form->{"new_partnumber_$index"}; |
|
882 |
$form->{"totop100_partnumber_$form->{ndxs_counter}"} = $j1; |
|
883 |
$j2 = $form->{"new_description_$index"}; |
|
884 |
$form->{"totop100_description_$form->{ndxs_counter}"} = $j2; |
|
885 |
$j3 = $form->{"new_unit_$index"}; |
|
886 |
$form->{"totop100_unit_$form->{ndxs_counter}"} = $j3; |
|
887 |
$j4 = $form->{"new_sellprice_$index"}; |
|
888 |
$form->{"totop100_sellprice_$form->{ndxs_counter}"} = $j4; |
|
889 |
$j5 = $form->{"new_soldtotal_$index"}; |
|
890 |
$form->{"totop100_soldtotal_$form->{ndxs_counter}"} = $j5; |
|
894 |
my $index = $form->{ndx}; |
|
895 |
|
|
896 |
$form->{"totop100_partnumber_$form->{ndxs_counter}"} = $form->{"new_partnumber_$index"}; |
|
897 |
$form->{"totop100_description_$form->{ndxs_counter}"} = $form->{"new_description_$index"}; |
|
898 |
$form->{"totop100_unit_$form->{ndxs_counter}"} = $form->{"new_unit_$index"}; |
|
899 |
$form->{"totop100_sellprice_$form->{ndxs_counter}"} = $form->{"new_sellprice_$index"}; |
|
900 |
$form->{"totop100_soldtotal_$form->{ndxs_counter}"} = $form->{"new_soldtotal_$index"}; |
|
891 | 901 |
} #fi |
892 | 902 |
} #fi |
893 | 903 |
&addtop100(); |
... | ... | |
897 | 907 |
sub addtop100 { |
898 | 908 |
$lxdebug->enter_sub(); |
899 | 909 |
|
910 |
my ($revers, $lastsort, $callback, $option, $description, $sameitem, |
|
911 |
$partnumber, $unit, $sellprice, $soldtotal, $totop100, $onhand, $align); |
|
912 |
my (@column_index, %column_header, %column_data); |
|
913 |
my ($totalsellprice, $totallastcost, $totallistprice, $subtotalonhand, $subtotalsellprice, $subtotallastcost, $subtotallistprice); |
|
914 |
|
|
900 | 915 |
$form->{top100} = "top100"; |
901 | 916 |
$form->{l_soldtotal} = "Y"; |
902 | 917 |
$form->{soldtotal} = "soldtotal"; |
903 | 918 |
$form->{sort} = "soldtotal"; |
904 | 919 |
$form->{l_qty} = "N"; |
905 |
$callback .= "&form->{top100}=$form->{top100}"; |
|
906 | 920 |
$form->{l_linetotal} = ""; |
907 | 921 |
$form->{revers} = 1; |
908 | 922 |
$form->{number} = "position"; |
909 | 923 |
$form->{l_number} = "Y"; |
910 | 924 |
|
911 |
my $totop100 = "";
|
|
925 |
$totop100 = ""; |
|
912 | 926 |
|
913 | 927 |
$form->{title} = $locale->text('Top 100'); |
914 | 928 |
|
... | ... | |
1057 | 1071 |
$option .= $locale->text('soldtotal') . qq| : $form->{soldtotal}<br>|; |
1058 | 1072 |
} |
1059 | 1073 |
|
1060 |
@columns = $form->sort_columns( |
|
1074 |
my @columns = $form->sort_columns(
|
|
1061 | 1075 |
qw(number partnumber ean description partsgroup bin onhand rop unit listprice linetotallistprice sellprice linetotalsellprice lastcost linetotallastcost priceupdate weight image drawing microfiche invnumber ordnumber quonumber name serialnumber soldtotal) |
1062 | 1076 |
); |
1063 | 1077 |
|
... | ... | |
1097 | 1111 |
$form->{l_lastcost} = "" |
1098 | 1112 |
if ($form->{searchitems} eq 'assembly' && !$form->{bom}); |
1099 | 1113 |
|
1100 |
foreach $item (@columns) { |
|
1114 |
foreach my $item (@columns) {
|
|
1101 | 1115 |
if ($form->{"l_$item"} eq "Y") { |
1102 | 1116 |
push @column_index, $item; |
1103 | 1117 |
|
... | ... | |
1199 | 1213 |
. qq|</a></th>|; |
1200 | 1214 |
|
1201 | 1215 |
$form->header; |
1202 |
$colspan = $#column_index + 1; |
|
1216 |
my $colspan = $#column_index + 1;
|
|
1203 | 1217 |
|
1204 | 1218 |
print qq| |
1205 | 1219 |
<body> |
... | ... | |
1233 | 1247 |
|
1234 | 1248 |
# insert numbers for top100 |
1235 | 1249 |
my $j = 0; |
1236 |
foreach $ref (@{ $form->{parts} }) { |
|
1250 |
foreach my $ref (@{ $form->{parts} }) {
|
|
1237 | 1251 |
$j++; |
1238 | 1252 |
$ref->{number} = $j; |
1239 | 1253 |
} |
1240 | 1254 |
|
1241 | 1255 |
# if avaible -> insert choice here |
1242 | 1256 |
if (($form->{ndxs_counter}) > 0) { |
1243 |
for ($i = 1; ($i < $form->{ndxs_counter} + 1); $i++) { |
|
1257 |
for (my $i = 1; ($i < $form->{ndxs_counter} + 1); $i++) {
|
|
1244 | 1258 |
$partnumber = $form->{"totop100_partnumber_$i"}; |
1245 | 1259 |
$description = $form->{"totop100_description_$i"}; |
1246 | 1260 |
$unit = $form->{"totop100_unit_$i"}; |
... | ... | |
1266 | 1280 |
} #rof |
1267 | 1281 |
} #fi |
1268 | 1282 |
# build data for columns |
1269 |
foreach $ref (@{ $form->{parts} }) { |
|
1283 |
foreach my $ref (@{ $form->{parts} }) { |
|
1284 |
my $i = 0; |
|
1270 | 1285 |
|
1271 | 1286 |
if ($form->{l_subtotal} eq 'Y' && !$ref->{assemblyitem}) { |
1272 | 1287 |
if ($sameitem ne $ref->{ $form->{sort} }) { |
... | ... | |
1469 | 1484 |
$lxdebug->leave_sub(); |
1470 | 1485 |
} # end addtop100 |
1471 | 1486 |
|
1487 |
# |
|
1488 |
# Report for Wares. |
|
1489 |
# Warning, deep magic ahead. |
|
1490 |
# This function parses the requested details, sanity checks them, and converts them into a format thats usable for IC->all_parts |
|
1491 |
# |
|
1492 |
# flags coming from the form: |
|
1493 |
# hardcoded: |
|
1494 |
# searchitems=part revers=0 lastsort='' |
|
1495 |
# |
|
1496 |
# filter: |
|
1497 |
# partnumber ean description partsgroup serialnumber make model drawing microfiche |
|
1498 |
# transdatefrom transdateto |
|
1499 |
# |
|
1500 |
# radio: |
|
1501 |
# itemstatus = active | onhand | short | obsolete | orphaned |
|
1502 |
# action = continue | top100 |
|
1503 |
# |
|
1504 |
# checkboxes: |
|
1505 |
# bought sold onorder ordered rfq quoted |
|
1506 |
# l_partnumber l_description l_serialnumber l_unit l_listprice l_sellprice l_lastcost |
|
1507 |
# l_linetotal l_priceupdate l_bin l_rop l_weight l_image l_drawing l_microfiche |
|
1508 |
# l_partsgroup l_subtotal l_soldtotal l_deliverydate |
|
1509 |
# |
|
1510 |
# hiddens: |
|
1511 |
# nextsub login password revers lastsort sort ndxs_counter |
|
1512 |
# |
|
1472 | 1513 |
sub generate_report { |
1473 | 1514 |
$lxdebug->enter_sub(); |
1474 | 1515 |
|
1516 |
my ($revers, $lastsort, $description); |
|
1517 |
my (@column_index, %column_header, %column_data, @columns, @options, @callbacks); |
|
1518 |
my ($totalsellprice, $totallastcost, $totallistprice, $subtotalonhand, $subtotalsellprice, $subtotallastcost, $subtotallistprice); |
|
1519 |
my ($colspan, $sameitem, $onhand, $align); |
|
1520 |
|
|
1475 | 1521 |
$revers = $form->{revers}; |
1476 | 1522 |
$lastsort = $form->{lastsort}; |
1477 | 1523 |
|
1524 |
# sorting and direction of sorting |
|
1525 |
# ToDO: change this to the simpler field+direction method |
|
1478 | 1526 |
if (($form->{lastsort} eq "") && ($form->{sort} eq undef)) { |
1479 | 1527 |
$form->{revers} = 0; |
1480 | 1528 |
$form->{lastsort} = "partnumber"; |
1481 | 1529 |
$form->{sort} = "partnumber"; |
1482 | 1530 |
} else { |
1483 |
|
|
1484 |
# switch between backward sorting of tables |
|
1485 | 1531 |
if ($form->{lastsort} eq $form->{sort}) { |
1486 |
if ($form->{revers} == 0) { |
|
1487 |
$form->{revers} = 1; |
|
1488 |
} else { |
|
1489 |
$form->{revers} = 0; |
|
1490 |
} #fi |
|
1532 |
$form->{revers} = 1 - $form->{revers}; |
|
1491 | 1533 |
} else { |
1492 |
$form->{revers} == 0;
|
|
1534 |
$form->{revers} = 0; |
|
1493 | 1535 |
$form->{lastsort} = $form->{sort}; |
1494 | 1536 |
} #fi |
1495 | 1537 |
} #fi |
1496 | 1538 |
|
1497 |
$callback = |
|
1498 |
"$form->{script}?action=generate_report&login=$form->{login}&password=$form->{password}&searchitems=$form->{searchitems}&itemstatus=$form->{itemstatus}&bom=$form->{bom}&l_linetotal=$form->{l_linetotal}&title=" |
|
1499 |
. $form->escape($form->{title}, 1); |
|
1500 |
|
|
1501 |
# if we have a serialnumber limit search |
|
1502 |
if ($form->{serialnumber} || $form->{l_serialnumber}) { |
|
1503 |
$form->{l_serialnumber} = "Y"; |
|
1504 |
unless ( $form->{bought} |
|
1505 |
|| $form->{sold} |
|
1506 |
|| $form->{rfq} |
|
1507 |
|| $form->{quoted}) { |
|
1508 |
$form->{bought} = $form->{sold} = 1; |
|
1509 |
} |
|
1510 |
} |
|
1539 |
# special case if we have a serialnumber limit search |
|
1540 |
# serialnumbers are only given in invoices and orders, |
|
1541 |
# so they can only pop up in bought, sold, rfq, and quoted stuff |
|
1542 |
$form->{no_sn_joins} = 'Y' if ( !$form->{bought} && !$form->{sold} |
|
1543 |
&& !$form->{rfq} && !$form->{quoted} |
|
1544 |
&& ($form->{l_serialnumber} || $form->{serialnumber})); |
|
1545 |
|
|
1546 |
# special case for any checkbox of bought | sold | onorder | ordered | rfq | quoted. |
|
1547 |
# if any of these are ticked the behavior changes slightly for lastcost |
|
1548 |
# since all those are aggregation checks for the legder tables this is an internal switch |
|
1549 |
# refered to as ledgerchecks |
|
1550 |
$form->{ledgerchecks} = 'Y' if ( $form->{bought} || $form->{sold} || $form->{onorder} |
|
1551 |
|| $form->{ordered} || $form->{rfq} || $form->{quoted}); |
|
1552 |
|
|
1553 |
# if something should be aktivated if something else is active, enter it here |
|
1554 |
my %dependencies = ( |
|
1555 |
onhand => [ qw(l_onhand) ], |
|
1556 |
short => [ qw(l_onhand) ], |
|
1557 |
onorder => [ qw(l_ordnumber) ], |
|
1558 |
ordered => [ qw(l_ordnumber) ], |
|
1559 |
rfq => [ qw(l_quonumber) ], |
|
1560 |
quoted => [ qw(l_quonumber) ], |
|
1561 |
bought => [ qw(l_invnumber) ], |
|
1562 |
sold => [ qw(l_invnumber) ], |
|
1563 |
ledgerchecks => [ qw(l_name) ], |
|
1564 |
serialnumber => [ qw(l_serialnumber) ], |
|
1565 |
no_sn_joins => [ qw(bought sold) ], |
|
1566 |
); |
|
1511 | 1567 |
|
1512 |
IC->all_parts(\%myconfig, \%$form); |
|
1568 |
# these strings get displayed at the top of the results to indicate the user which switches were used |
|
1569 |
my %optiontexts = ( |
|
1570 |
active => $locale->text('Active'), |
|
1571 |
obsolete => $locale->text('Obsolete'), |
|
1572 |
orphaned => $locale->text('Orphaned'), |
|
1573 |
onhand => $locale->text('On Hand'), |
|
1574 |
short => $locale->text('Short'), |
|
1575 |
onorder => $locale->text('On Order'), |
|
1576 |
ordered => $locale->text('Ordered'), |
|
1577 |
rfq => $locale->text('RFQ'), |
|
1578 |
quoted => $locale->text('Quoted'), |
|
1579 |
bought => $locale->text('Bought'), |
|
1580 |
sold => $locale->text('Sold'), |
|
1581 |
transdatefrom => $locale->text('From') . " " . $locale->date(\%myconfig, $form->{transdatefrom}, 1), |
|
1582 |
transdateto => $locale->text('To (time)') . " " . $locale->date(\%myconfig, $form->{transdateto}, 1), |
|
1583 |
partnumber => $locale->text('Part Number') . ": '$form->{partnumber}'", |
|
1584 |
partsgroup => $locale->text('Group') . ": '$form->{partsgroup}'", |
|
1585 |
serialnumber => $locale->text('Serial Number') . ": '$form->{serialnumber}'", |
|
1586 |
description => $locale->text('Part Description') . ": '$form->{description}'", |
|
1587 |
make => $locale->text('Make') . ": '$form->{make}'", |
|
1588 |
model => $locale->text('Model') . ": '$form->{model}'", |
|
1589 |
drawing => $locale->text('Drawing') . ": '$form->{drawing}'", |
|
1590 |
microfiche => $locale->text('Microfiche') . ": '$form->{microfiche}'", |
|
1591 |
l_soldtotal => $locale->text('soldtotal'), |
|
1592 |
); |
|
1513 | 1593 |
|
1514 |
if ($form->{itemstatus} eq 'active') { |
|
1515 |
$option .= $locale->text('Active') . " : "; |
|
1516 |
} |
|
1517 |
if ($form->{itemstatus} eq 'obsolete') { |
|
1518 |
$option .= $locale->text('Obsolete') . " : "; |
|
1519 |
} |
|
1520 |
if ($form->{itemstatus} eq 'orphaned') { |
|
1521 |
$option .= $locale->text('Orphaned') . " : "; |
|
1522 |
} |
|
1523 |
if ($form->{itemstatus} eq 'onhand') { |
|
1524 |
$option .= $locale->text('On Hand') . " : "; |
|
1525 |
$form->{l_onhand} = "Y"; |
|
1526 |
} |
|
1527 |
if ($form->{itemstatus} eq 'short') { |
|
1528 |
$option .= $locale->text('Short') . " : "; |
|
1529 |
$form->{l_onhand} = "Y"; |
|
1530 |
} |
|
1531 |
if ($form->{onorder}) { |
|
1532 |
$form->{l_ordnumber} = "Y"; |
|
1533 |
$callback .= "&onorder=$form->{onorder}"; |
|
1534 |
$option .= $locale->text('On Order') . " : "; |
|
1535 |
} |
|
1536 |
if ($form->{ordered}) { |
|
1537 |
$form->{l_ordnumber} = "Y"; |
|
1538 |
$callback .= "&ordered=$form->{ordered}"; |
|
1539 |
$option .= $locale->text('Ordered') . " : "; |
|
1540 |
} |
|
1541 |
if ($form->{rfq}) { |
|
1542 |
$form->{l_quonumber} = "Y"; |
|
1543 |
$callback .= "&rfq=$form->{rfq}"; |
|
1544 |
$option .= $locale->text('RFQ') . " : "; |
|
1545 |
} |
|
1546 |
if ($form->{quoted}) { |
|
1547 |
$form->{l_quonumber} = "Y"; |
|
1548 |
$callback .= ""ed=$form->{quoted}"; |
|
1549 |
$option .= $locale->text('Quoted') . " : "; |
|
1594 |
# this local subfunction generates a callback token from the input key. |
|
1595 |
# easy to join into a callback later |
|
1596 |
sub callback_token { |
|
1597 |
map { /\w+$/; return "&$&=$form->{$&}" } @_; |
|
1550 | 1598 |
} |
1551 |
if ($form->{bought}) { |
|
1552 |
$form->{l_invnumber} = "Y"; |
|
1553 |
$callback .= "&bought=$form->{bought}"; |
|
1554 |
$option .= $locale->text('Bought') . " : "; |
|
1555 |
} |
|
1556 |
if ($form->{sold}) { |
|
1557 |
$form->{l_invnumber} = "Y"; |
|
1558 |
$callback .= "&sold=$form->{sold}"; |
|
1559 |
$option .= $locale->text('Sold') . " : "; |
|
1599 |
|
|
1600 |
my @itemstatus_keys = qw(active obsolete orphaned onhand short); |
|
1601 |
my @callback_keys = qw(onorder ordered rfq quoted bought sold partnumber partsgroup serialnumber description make model |
|
1602 |
drawing microfiche l_soldtotal l_deliverydate transdatefrom transdateto); |
|
1603 |
my $callback = "$form->{script}?action=generate_report"; |
|
1604 |
map { $callback .= "&$_=" . $form->escape($form->{$_}) } qw(login password searchitems itemstatus bom l_linetotal title); |
|
1605 |
|
|
1606 |
# calculate dependencies |
|
1607 |
for (@itemstatus_keys, @callback_keys) { |
|
1608 |
next if ($form->{itemstatus} ne $_ && !$form->{$_}); |
|
1609 |
map { $form->{$_} = 'Y' } @{ $dependencies{$_} } if $dependencies{$_}; |
|
1560 | 1610 |
} |
1561 |
if ( $form->{bought} |
|
1562 |
|| $form->{sold} |
|
1563 |
|| $form->{onorder} |
|
1564 |
|| $form->{ordered} |
|
1565 |
|| $form->{rfq} |
|
1566 |
|| $form->{quoted}) { |
|
1567 | 1611 |
|
1568 |
$form->{l_lastcost} = ""; |
|
1569 |
$form->{l_name} = "Y"; |
|
1570 |
if ($form->{transdatefrom}) { |
|
1571 |
$callback .= "&transdatefrom=$form->{transdatefrom}"; |
|
1572 |
$option .= "\n<br>" |
|
1573 |
. $locale->text('From') |
|
1574 |
. " " |
|
1575 |
. $locale->date(\%myconfig, $form->{transdatefrom}, 1); |
|
1576 |
} |
|
1577 |
if ($form->{transdateto}) { |
|
1578 |
$callback .= "&transdateto=$form->{transdateto}"; |
|
1579 |
$option .= "\n<br>" |
|
1580 |
. $locale->text('To (time)') |
|
1581 |
. " " |
|
1582 |
. $locale->date(\%myconfig, $form->{transdateto}, 1); |
|
1583 |
} |
|
1612 |
# generate callback and optionstrings |
|
1613 |
for my $key (@itemstatus_keys, @callback_keys) { |
|
1614 |
next if ($form->{itemstatus} ne $key && !$form->{$key}); |
|
1615 |
push @options, $optiontexts{$key}; |
|
1616 |
push @callbacks, callback_token($key) if grep { $_ eq $key } @callback_keys;; |
|
1584 | 1617 |
} |
1618 |
my $option = $locale->text('Options') . ': ' . join(', ', grep $_, @options) . '<br>'; |
|
1619 |
$callback .= join '', grep $_, @callbacks; |
|
1585 | 1620 |
|
1586 |
$option .= "<br>";
|
|
1621 |
$lxdebug->message(0, $callback);
|
|
1587 | 1622 |
|
1588 |
if ($form->{partnumber}) { |
|
1589 |
$callback .= "&partnumber=$form->{partnumber}"; |
|
1590 |
$option .= $locale->text('Part Number') . qq| : $form->{partnumber}<br>|; |
|
1591 |
} |
|
1592 |
if ($form->{partsgroup}) { |
|
1593 |
$callback .= "&partsgroup=$form->{partsgroup}"; |
|
1594 |
$option .= $locale->text('Group') . qq| : $form->{partsgroup}<br>|; |
|
1595 |
} |
|
1596 |
if ($form->{serialnumber}) { |
|
1597 |
$callback .= "&serialnumber=$form->{serialnumber}"; |
|
1598 |
$option .= |
|
1599 |
$locale->text('Serial Number') . qq| : $form->{serialnumber}<br>|; |
|
1600 |
} |
|
1601 |
if ($form->{description}) { |
|
1602 |
$callback .= "&description=$form->{description}"; |
|
1603 |
$description = $form->{description}; |
|
1604 |
$description =~ s/ |
|
1605 |
/<br>/g; |
|
1606 |
$option .= |
|
1607 |
$locale->text('Part Description') . qq| : $form->{description}<br>|; |
|
1608 |
} |
|
1609 |
if ($form->{make}) { |
|
1610 |
$callback .= "&make=$form->{make}"; |
|
1611 |
$option .= $locale->text('Make') . qq| : $form->{make}<br>|; |
|
1612 |
} |
|
1613 |
if ($form->{model}) { |
|
1614 |
$callback .= "&model=$form->{model}"; |
|
1615 |
$option .= $locale->text('Model') . qq| : $form->{model}<br>|; |
|
1616 |
} |
|
1617 |
if ($form->{drawing}) { |
|
1618 |
$callback .= "&drawing=$form->{drawing}"; |
|
1619 |
$option .= $locale->text('Drawing') . qq| : $form->{drawing}<br>|; |
|
1620 |
} |
|
1621 |
if ($form->{microfiche}) { |
|
1622 |
$callback .= "µfiche=$form->{microfiche}"; |
|
1623 |
$option .= $locale->text('Microfiche') . qq| : $form->{microfiche}<br>|; |
|
1624 |
} |
|
1623 |
IC->all_parts(\%myconfig, \%$form); |
|
1625 | 1624 |
|
1626 |
# table soldtotal aktive |
|
1627 |
if ($form->{l_soldtotal}) { |
|
1628 |
$callback .= "&soldtotal=$form->{soldtotal}"; |
|
1629 |
$option .= $locale->text('soldtotal') . qq| : $form->{soldtotal}<br>|; |
|
1630 |
} |
|
1625 |
# special case for lastcost |
|
1626 |
$form->{l_lastcost} = "" if $form->{ledgerchecks}; |
|
1631 | 1627 |
|
1632 |
if ($form->{l_deliverydate}) { |
|
1633 |
$callback .= "&deliverydate=$form->{deliverydate}"; |
|
1628 |
if ($form->{description}) { |
|
1629 |
$description = $form->{description}; |
|
1630 |
$description =~ s/\n/<br>/g; |
|
1634 | 1631 |
} |
1635 | 1632 |
|
1636 | 1633 |
@columns = $form->sort_columns( |
1637 |
qw(partnumber description partsgroup bin onhand rop unit listprice linetotallistprice sellprice linetotalsellprice lastcost linetotallastcost priceupdate weight image drawing microfiche invnumber ordnumber quonumber name serialnumber soldtotal deliverydate) |
|
1634 |
qw(partnumber description partsgroup bin onhand rop unit listprice linetotallistprice sellprice linetotalsellprice |
|
1635 |
lastcost linetotallastcost priceupdate weight image drawing microfiche invnumber ordnumber quonumber name serialnumber soldtotal deliverydate) |
|
1638 | 1636 |
); |
1639 | 1637 |
|
1640 | 1638 |
if ($form->{l_linetotal}) { |
... | ... | |
1673 | 1671 |
$form->{l_lastcost} = "" |
1674 | 1672 |
if ($form->{searchitems} eq 'assembly' && !$form->{bom}); |
1675 | 1673 |
|
1676 |
foreach $item (@columns) { |
|
1674 |
foreach my $item (@columns) {
|
|
1677 | 1675 |
if ($form->{"l_$item"} eq "Y") { |
1678 | 1676 |
push @column_index, $item; |
1679 | 1677 |
|
... | ... | |
1809 | 1807 |
$sameitem = $form->{parts}->[0]->{ $form->{sort} }; |
1810 | 1808 |
} |
1811 | 1809 |
|
1812 |
foreach $ref (@{ $form->{parts} }) { |
|
1810 |
foreach my $ref (@{ $form->{parts} }) { |
|
1811 |
my $i = 0; |
|
1813 | 1812 |
|
1814 | 1813 |
if ($form->{l_subtotal} eq 'Y' && !$ref->{assemblyitem}) { |
1815 | 1814 |
if ($sameitem ne $ref->{ $form->{sort} }) { |
... | ... | |
1999 | 1998 |
|
2000 | 1999 |
sub parts_subtotal { |
2001 | 2000 |
$lxdebug->enter_sub(); |
2001 |
|
|
2002 |
# imports |
|
2003 |
my %column_data = $main::column_data; |
|
2004 |
my @column_index = $main::column_index; |
|
2005 |
my $subtotalonhand = $main::subtotalonhand; |
|
2006 |
my $totalsellprice = $main::totalsellprice; |
|
2007 |
my $totallastcost = $main::totallastcost; |
|
2008 |
my $totallistprice = $main::totallistprice; |
|
2009 |
my $subtotalsellprice = $main::subtotalsellprice; |
|
2010 |
my $subtotallastcost = $main::subtotallastcost; |
|
2011 |
my $subtotallistprice = $main::subtotallistprice; |
|
2002 | 2012 |
|
2003 | 2013 |
map { $column_data{$_} = "<td> </td>" } @column_index; |
2004 | 2014 |
$subtotalonhand = 0 if ($form->{searchitems} eq 'assembly' && $form->{bom}); |
... | ... | |
2064 | 2074 |
split(/:/, $form->{currencies})); |
2065 | 2075 |
|
2066 | 2076 |
# parts and assemblies have the same links |
2067 |
$item = $form->{item}; |
|
2077 |
my $item = $form->{item};
|
|
2068 | 2078 |
if ($form->{item} eq 'assembly') { |
2069 | 2079 |
$item = 'part'; |
2070 | 2080 |
} |
2071 | 2081 |
|
2072 | 2082 |
# build the popup menus |
2073 | 2083 |
$form->{taxaccounts} = ""; |
2074 |
foreach $key (keys %{ $form->{IC_links} }) { |
|
2075 |
foreach $ref (@{ $form->{IC_links}{$key} }) { |
|
2084 |
foreach my $key (keys %{ $form->{IC_links} }) {
|
|
2085 |
foreach my $ref (@{ $form->{IC_links}{$key} }) {
|
|
2076 | 2086 |
|
2077 | 2087 |
# if this is a tax field |
2078 | 2088 |
if ($key =~ /IC_tax/) { |
... | ... | |
2126 | 2136 |
|
2127 | 2137 |
if ($form->{item} eq 'assembly') { |
2128 | 2138 |
|
2129 |
foreach $i (1 .. $form->{assembly_rows}) { |
|
2139 |
foreach my $i (1 .. $form->{assembly_rows}) {
|
|
2130 | 2140 |
if ($form->{"partsgroup_id_$i"}) { |
2131 | 2141 |
$form->{"partsgroup_$i"} = |
2132 | 2142 |
qq|$form->{"partsgroup_$i"}--$form->{"partsgroup_id_$i"}|; |
... | ... | |
2149 | 2159 |
sub form_header { |
2150 | 2160 |
$lxdebug->enter_sub(); |
2151 | 2161 |
|
2162 |
my ($payment, $rows, $notes, $description, $ean, $buchungsgruppe, $partsgroup, $group, $tax, $lastcost, $eur, $linkaccounts, $weight, $n, $rop, $bin, $vegv); |
|
2163 |
my ($notdiscountableok, $notdiscountable); |
|
2164 |
my ($formel, $imagelinks, $obsolete, $shopok, $shop); |
|
2165 |
|
|
2166 |
|
|
2152 | 2167 |
map({ $form->{$_} = $form->format_amount(\%myconfig, $form->{$_}, -2) } |
2153 | 2168 |
qw(sellprice listprice lastcost gv)); |
2154 | 2169 |
|
2155 | 2170 |
map { $form->{$_} = $form->format_amount(\%myconfig, $form->{$_}) } |
2156 | 2171 |
qw(weight rop stock); |
2157 | 2172 |
|
2158 |
foreach $item (qw(partnumber description unit notes)) { |
|
2173 |
foreach my $item (qw(partnumber description unit notes)) {
|
|
2159 | 2174 |
$form->{$item} =~ s/\"/"/g; |
2160 | 2175 |
} |
2161 | 2176 |
|
2162 | 2177 |
$payment = qq|<option value=""></option>|; |
2163 |
foreach $item (@{ $form->{payment_terms} }) { |
|
2178 |
foreach my $item (@{ $form->{payment_terms} }) {
|
|
2164 | 2179 |
if ($form->{payment_id} eq $item->{id}) { |
2165 | 2180 |
$payment .= qq|<option value="$item->{id}" selected>$item->{description}</option>|; |
2166 | 2181 |
} else { |
... | ... | |
2185 | 2200 |
|
2186 | 2201 |
$ean = qq|<input name=ean size=40 value="$form->{ean}">|; |
2187 | 2202 |
|
2188 |
foreach $item (split / /, $form->{taxaccounts}) { |
|
2203 |
foreach my $item (split / /, $form->{taxaccounts}) {
|
|
2189 | 2204 |
$form->{"IC_tax_$item"} = ($form->{"IC_tax_$item"}) ? "checked" : ""; |
2190 | 2205 |
} |
2191 | 2206 |
|
2192 | 2207 |
IC->retrieve_buchungsgruppen(\%myconfig, $form); |
2193 | 2208 |
if (@{ $form->{BUCHUNGSGRUPPEN} }) { |
2194 |
foreach $item (@{ $form->{BUCHUNGSGRUPPEN} }) { |
|
2209 |
foreach my $item (@{ $form->{BUCHUNGSGRUPPEN} }) {
|
|
2195 | 2210 |
if ($item->{id} == $form->{buchungsgruppen_id}) { |
2196 | 2211 |
$form->{selectbuchungsgruppe} .= |
2197 | 2212 |
"<option value=$item->{id} selected>$item->{description}\n"; |
... | ... | |
2211 | 2226 |
|
2212 | 2227 |
|
2213 | 2228 |
# set option |
2214 |
foreach $item (qw(IC IC_income IC_expense)) { |
|
2229 |
foreach my $item (qw(IC IC_income IC_expense)) {
|
|
2215 | 2230 |
if ($form->{$item}) { |
2216 | 2231 |
if ($form->{id} && $form->{orphaned}) { |
2217 | 2232 |
$form->{"select$item"} =~ s/ selected//; |
... | ... | |
2237 | 2252 |
} |
2238 | 2253 |
|
2239 | 2254 |
# tax fields |
2240 |
foreach $item (split / /, $form->{taxaccounts}) { |
|
2255 |
foreach my $item (split / /, $form->{taxaccounts}) {
|
|
2241 | 2256 |
$tax .= qq| |
2242 | 2257 |
<input class=checkbox type=checkbox name="IC_tax_$item" value=1 $form->{"IC_tax_$item"}> <b>$form->{"IC_tax_${item}_description"}</b> |
2243 | 2258 |
<br><input type=hidden name=IC_tax_${item}_description value="$form->{"IC_tax_${item}_description"}"> |
... | ... | |
2455 | 2470 |
# type=submit $locale->text('Edit Service') |
2456 | 2471 |
# type=submit $locale->text('Edit Assembly') |
2457 | 2472 |
# use JavaScript Calendar or not |
2473 |
my ($jsscript, $button1); |
|
2458 | 2474 |
$form->{jsscript} = 1; |
2459 | 2475 |
$jsscript = ""; |
2460 | 2476 |
if ($form->{jsscript}) { |
... | ... | |
2730 | 2746 |
sub makemodel_row { |
2731 | 2747 |
$lxdebug->enter_sub(); |
2732 | 2748 |
my ($numrows) = @_; |
2733 |
|
|
2734 |
$form->{"make_$i"} =~ s/\"/"/g; |
|
2735 |
$form->{"model_$i"} =~ s/\"/"/g; |
|
2736 |
|
|
2749 |
|
|
2737 | 2750 |
print qq| |
2738 | 2751 |
<tr> |
2739 | 2752 |
<td> |
... | ... | |
2744 | 2757 |
</tr> |
2745 | 2758 |
|; |
2746 | 2759 |
|
2747 |
for $i (1 .. $numrows) { |
|
2760 |
for my $i (1 .. $numrows) { |
|
2761 |
$form->{"make_$i"} =~ s/\"/"/g; |
|
2762 |
$form->{"model_$i"} =~ s/\"/"/g; |
|
2748 | 2763 |
print qq| |
2749 | 2764 |
<tr> |
2750 | 2765 |
<td width=50%><input name="make_$i" size=30 value="$form->{"make_$i"}"></td> |
... | ... | |
2765 | 2780 |
sub assembly_row { |
2766 | 2781 |
$lxdebug->enter_sub(); |
2767 | 2782 |
my ($numrows) = @_; |
2783 |
my (@column_index, %column_data, %column_header); |
|
2784 |
my ($nochange, $callback, $previousform, $linetotal, $href); |
|
2785 |
|
|
2786 |
my $deliverydate = $main::deliverydate; # ToDO: cjeck if this indeed comes from global context |
|
2768 | 2787 |
|
2769 | 2788 |
@column_index = |
2770 | 2789 |
qw(runningnumber qty unit bom partnumber description partsgroup total); |
... | ... | |
2785 | 2804 |
$previousform = ""; |
2786 | 2805 |
|
2787 | 2806 |
# save form variables in a previousform variable |
2788 |
foreach $key (sort keys %$form) { |
|
2807 |
foreach my $key (sort keys %$form) {
|
|
2789 | 2808 |
|
2790 | 2809 |
# escape ampersands |
2791 | 2810 |
$form->{$key} =~ s/&/%26/g; |
... | ... | |
2832 | 2851 |
</tr> |
2833 | 2852 |
|; |
2834 | 2853 |
|
2835 |
for $i (1 .. $numrows) { |
|
2854 |
for my $i (1 .. $numrows) {
|
|
2836 | 2855 |
$form->{"partnumber_$i"} =~ s/\"/"/g; |
2837 | 2856 |
|
2838 | 2857 |
$linetotal = |
... | ... | |
2933 | 2952 |
$lxdebug->enter_sub(); |
2934 | 2953 |
|
2935 | 2954 |
if ($form->{item} eq "assembly") { |
2936 |
$i = $form->{assembly_rows}; |
|
2955 |
my $i = $form->{assembly_rows};
|
|
2937 | 2956 |
|
2938 | 2957 |
# if last row is empty check the form otherwise retrieve item |
2939 | 2958 |
if ( ($form->{"partnumber_$i"} eq "") |
... | ... | |
2946 | 2965 |
|
2947 | 2966 |
IC->assembly_item(\%myconfig, \%$form); |
2948 | 2967 |
|
2949 |
$rows = scalar @{ $form->{item_list} }; |
|
2968 |
my $rows = scalar @{ $form->{item_list} };
|
|
2950 | 2969 |
|
2951 | 2970 |
if ($rows) { |
2952 | 2971 |
$form->{"qty_$i"} = 1 unless ($form->{"qty_$i"}); |
... | ... | |
2996 | 3015 |
sub save { |
2997 | 3016 |
$lxdebug->enter_sub(); |
2998 | 3017 |
|
3018 |
my ($parts_id, %newform, $previousform, $amount, $callback); |
|
3019 |
|
|
2999 | 3020 |
# check if there is a part number - commented out, cause there is an automatic allocation of numbers |
3000 | 3021 |
# $form->isblank("partnumber", $locale->text(ucfirst $form->{item}." Part Number missing!")); |
3001 | 3022 |
|
... | ... | |
3027 | 3048 |
# $locale->text('Assembly Number missing!') |
3028 | 3049 |
|
3029 | 3050 |
# save part |
3030 |
$lxdebug->message(LXDebug::DEBUG1, |
|
3031 |
"ic.pl: sellprice in save = $form->{sellprice}\n"); |
|
3032 |
$rc = IC->save(\%myconfig, \%$form); |
|
3033 |
if ($rc == 3) { |
|
3051 |
$lxdebug->message($LXDebug::DEBUG1, "ic.pl: sellprice in save = $form->{sellprice}\n"); |
|
3052 |
if (IC->save(\%myconfig, \%$form) == 3) { |
|
3034 | 3053 |
$form->error($locale->text('Partnumber not unique!')); |
3035 | 3054 |
} |
3036 | 3055 |
# saving the history |
... | ... | |
3042 | 3061 |
# /saving the history |
3043 | 3062 |
$parts_id = $form->{id}; |
3044 | 3063 |
|
3064 |
my $i; |
|
3045 | 3065 |
# load previous variables |
3046 | 3066 |
if ($form->{previousform}) { |
3047 | 3067 |
|
... | ... | |
3054 | 3074 |
map { delete $form->{$_} } keys %newform; |
3055 | 3075 |
|
3056 | 3076 |
# now take it apart and restore original values |
3057 |
foreach $item (split /&/, $previousform) { |
|
3058 |
($key, $value) = split /=/, $item, 2; |
|
3077 |
foreach my $item (split /&/, $previousform) {
|
|
3078 |
my ($key, $value) = split /=/, $item, 2;
|
|
3059 | 3079 |
$value =~ s/%26/&/g; |
3060 | 3080 |
$form->{$key} = $value; |
3061 | 3081 |
} |
... | ... | |
3093 | 3113 |
if ($form->{exchangerate} != 0) { |
3094 | 3114 |
$form->{"sellprice_$i"} /= $form->{exchangerate}; |
3095 | 3115 |
} |
3096 |
$lxdebug->message(LXDebug::DEBUG1, |
|
3097 |
qq|sellprice_$i in previousform 2 = | |
|
3098 |
. $form->{"sellprice_$i"} . qq|\n|); |
|
3116 |
$lxdebug->message($LXDebug::DEBUG1, qq|sellprice_$i in previousform 2 = | . $form->{"sellprice_$i"} . qq|\n|); |
|
3099 | 3117 |
map { $form->{"taxaccounts_$i"} .= "$_ " } split / /, |
3100 | 3118 |
$newform{taxaccount}; |
3101 | 3119 |
chop $form->{"taxaccounts_$i"}; |
3102 |
foreach $item (qw(description rate taxnumber)) { |
|
3103 |
$index = $form->{"taxaccounts_$i"} . "_$item"; |
|
3120 |
foreach my $item (qw(description rate taxnumber)) {
|
|
3121 |
my $index = $form->{"taxaccounts_$i"} . "_$item";
|
|
3104 | 3122 |
$form->{$index} = $newform{$index}; |
3105 | 3123 |
} |
3106 | 3124 |
|
... | ... | |
3135 | 3153 |
$form->{makemodel_rows}--; |
3136 | 3154 |
|
3137 | 3155 |
# put callback together |
3138 |
foreach $key (keys %$form) { |
|
3156 |
foreach my $key (keys %$form) {
|
|
3139 | 3157 |
|
3140 | 3158 |
# do single escape for Apache 2.0 |
3141 |
$value = $form->escape($form->{$key}, 1); |
|
3159 |
my $value = $form->escape($form->{$key}, 1);
|
|
3142 | 3160 |
$callback .= qq|&$key=$value|; |
3143 | 3161 |
} |
3144 | 3162 |
$form->{callback} = $callback; |
3145 | 3163 |
} |
3146 |
$lxdebug->message(LXDebug::DEBUG1, |
|
3147 |
qq|ic.pl: sellprice_$i nach sub save = | |
|
3148 |
. $form->{"sellprice_$i"} . qq|\n|); |
|
3164 |
$lxdebug->message($LXDebug::DEBUG1, qq|ic.pl: sellprice_$i nach sub save = | . $form->{"sellprice_$i"} . qq|\n|); |
|
3149 | 3165 |
|
3150 | 3166 |
# redirect |
3151 | 3167 |
$form->redirect; |
... | ... | |
3181 | 3197 |
$form->save_history($form->dbconnect(\%myconfig)); |
3182 | 3198 |
} |
3183 | 3199 |
# /saving the history |
3184 |
$rc = IC->delete(\%myconfig, \%$form); |
|
3200 |
my $rc = IC->delete(\%myconfig, \%$form);
|
|
3185 | 3201 |
|
3186 | 3202 |
# redirect |
3187 | 3203 |
$form->redirect($locale->text('Item deleted!')) if ($rc > 0); |
... | ... | |
3204 | 3220 |
<th class="listheading">| . $locale->text('Preis') . qq|</th> |
3205 | 3221 |
</tr> |
3206 | 3222 |
|; |
3207 |
for $i (1 .. $numrows) { |
|
3223 |
for my $i (1 .. $numrows) {
|
|
3208 | 3224 |
print qq| |
3209 | 3225 |
<tr> |
3210 | 3226 |
<td width=50%><input type=hidden name="pricegroup_$i" size=30 value="$form->{"pricegroup_$i"}">$form->{"pricegroup_$i"}</td> |
... | ... | |
3226 | 3242 |
sub parts_language_selection { |
3227 | 3243 |
$lxdebug->enter_sub(); |
3228 | 3244 |
|
3245 |
my $onload = $main::onload; |
|
3229 | 3246 |
|
3230 | 3247 |
my $languages = IC->retrieve_languages(\%myconfig, $form); |
3231 | 3248 |
|
Auch abrufbar als: Unified diff
ic.pl auf use strict umgeschrieben (experimentell)
ic.pl generate_reports konsistenzchecks umgeschirben, und kommentiert, wird im weiteren mit verbesserter datenbanklogik
verwendet.
SL/IC.pm: kosmetik