Revision 626e0240
Von Stephan Köhler vor etwa 19 Jahren hinzugefügt
SL/Form.pm | ||
---|---|---|
1 |
#=====================================================================
|
|
1 |
#==================================================================== |
|
2 | 2 |
# LX-Office ERP |
3 | 3 |
# Copyright (C) 2004 |
4 | 4 |
# Based on SQL-Ledger Version 2.1.9 |
... | ... | |
1277 | 1277 |
$main::lxdebug->enter_sub(); |
1278 | 1278 |
|
1279 | 1279 |
my ($self, $dbh, $curr, $transdate, $fld) = @_; |
1280 |
|
|
1281 |
unless ($transdate) { |
|
1282 |
$main::lxdebug->leave_sub(); |
|
1283 |
return ""; |
|
1284 |
} |
|
1280 | 1285 |
|
1281 | 1286 |
my $query = qq|SELECT e.$fld FROM exchangerate e |
1282 | 1287 |
WHERE e.curr = '$curr' |
SL/OE.pm | ||
---|---|---|
1 |
#=====================================================================
|
|
1 |
#==================================================================== |
|
2 | 2 |
# LX-Office ERP |
3 | 3 |
# Copyright (C) 2004 |
4 | 4 |
# Based on SQL-Ledger Version 2.1.9 |
... | ... | |
459 | 459 |
return $rc; |
460 | 460 |
} |
461 | 461 |
|
462 |
# this function closes multiple orders given in $form->{ordnumber_#}. |
|
463 |
# use this for multiple orders that don't have to be saved back |
|
464 |
# single orders should use OE::save instead. |
|
465 |
sub close_orders { |
|
466 |
$main::lxdebug->enter_sub(); |
|
467 |
|
|
468 |
my ($self, $myconfig ,$form) = @_; |
|
469 |
|
|
470 |
# get ids from $form |
|
471 |
map { push @ids, $form->{"ordnumber_$_"} if $form->{"ordnumber_$_"} } (1 .. $form->{rowcount}); |
|
472 |
|
|
473 |
my $dbh = $form->dbconnect($myconfig); |
|
474 |
$query = qq|UPDATE oe SET |
|
475 |
closed = TRUE |
|
476 |
WHERE ordnumber IN (|.join(', ', map{ $dbh->quote($_) }@ids).qq|)|; |
|
477 |
$dbh->do($query) || $form->dberror($query); |
|
478 |
$dbh->disconnect; |
|
479 |
|
|
480 |
$main::lxdebug->leave_sub(); |
|
481 |
} |
|
482 |
|
|
462 | 483 |
sub delete { |
463 | 484 |
$main::lxdebug->enter_sub(); |
464 | 485 |
|
... | ... | |
539 | 560 |
|
540 | 561 |
my $query; |
541 | 562 |
|
563 |
# translate the ids (given by id_# and trans_id_#) into one array of ids, so we can join them later |
|
564 |
map { push @ids, $form->{"trans_id_$_"} if ($form->{"id_$_"}) } (1 .. $form->{"rowcount"}); |
|
565 |
|
|
566 |
# if called in multi id mode, and still only got one id, switch back to single id |
|
567 |
if ($form->{"rowcount"} and $#ids == 0) { |
|
568 |
$form->{"id"} = $ids[0]; |
|
569 |
undef @ids; |
|
570 |
} |
|
571 |
|
|
542 | 572 |
if ($form->{id}) { |
543 | 573 |
|
544 | 574 |
# get default accounts and last order number |
... | ... | |
578 | 608 |
|
579 | 609 |
($form->{currency}) = split /:/, $form->{currencies}; |
580 | 610 |
|
581 |
if ($form->{id}) { |
|
611 |
if ($form->{id} or @ids) {
|
|
582 | 612 |
|
583 |
# retrieve order |
|
584 |
$query = qq|SELECT o.cp_id,o.ordnumber, o.transdate, o.reqdate, |
|
613 |
# retrieve order for single id |
|
614 |
# NOTE: this query is intended to fetch all information only ONCE. |
|
615 |
# so if any of these infos is important (or even different) for any item, |
|
616 |
# it will be killed out and then has to be fetched from the item scope query further down |
|
617 |
$query = qq|SELECT o.cp_id, o.ordnumber, o.transdate, o.reqdate, |
|
585 | 618 |
o.taxincluded, o.shippingpoint, o.shipvia, o.notes, o.intnotes, |
586 | 619 |
o.curr AS currency, e.name AS employee, o.employee_id, |
587 | 620 |
o.$form->{vc}_id, cv.name AS $form->{vc}, o.amount AS invtotal, |
... | ... | |
591 | 624 |
JOIN $form->{vc} cv ON (o.$form->{vc}_id = cv.id) |
592 | 625 |
LEFT JOIN employee e ON (o.employee_id = e.id) |
593 | 626 |
LEFT JOIN department d ON (o.department_id = d.id) |
594 |
WHERE o.id = $form->{id}|; |
|
595 |
$sth = $dbh->prepare($query); |
|
596 |
$sth->execute || $form->dberror($query); |
|
627 |
|. ($form->{id} |
|
628 |
? qq|WHERE o.id = $form->{id}| |
|
629 |
: qq|WHERE o.id IN (|.join(', ', @ids).qq|)| |
|
630 |
); |
|
597 | 631 |
|
598 |
$ref = $sth->fetchrow_hashref(NAME_lc); |
|
599 |
map { $form->{$_} = $ref->{$_} } keys %$ref; |
|
600 |
$sth->finish; |
|
632 |
#$main::lxdebug->message(0, $query); |
|
601 | 633 |
|
602 |
$query = qq|SELECT s.* FROM shipto s |
|
603 |
WHERE s.trans_id = $form->{id}|; |
|
604 | 634 |
$sth = $dbh->prepare($query); |
605 | 635 |
$sth->execute || $form->dberror($query); |
606 | 636 |
|
607 | 637 |
$ref = $sth->fetchrow_hashref(NAME_lc); |
608 | 638 |
map { $form->{$_} = $ref->{$_} } keys %$ref; |
609 |
$sth->finish; |
|
610 |
|
|
611 |
# get printed, emailed and queued |
|
612 |
$query = qq|SELECT s.printed, s.emailed, s.spoolfile, s.formname |
|
613 |
FROM status s |
|
614 |
WHERE s.trans_id = $form->{id}|; |
|
615 |
$sth = $dbh->prepare($query); |
|
616 |
$sth->execute || $form->dberror($query); |
|
617 | 639 |
|
640 |
# destroy all entries for multiple ids that yield different information |
|
618 | 641 |
while ($ref = $sth->fetchrow_hashref(NAME_lc)) { |
619 |
$form->{printed} .= "$ref->{formname} " if $ref->{printed}; |
|
620 |
$form->{emailed} .= "$ref->{formname} " if $ref->{emailed}; |
|
621 |
$form->{queued} .= "$ref->{formname} $ref->{spoolfile} " |
|
622 |
if $ref->{spoolfile}; |
|
642 |
map { undef $form->{$_} if ($ref->{$_} ne $form->{$_}) } keys %$ref; |
|
623 | 643 |
} |
644 |
|
|
645 |
# if not given, fill transdate with current_date |
|
646 |
$form->{transdate} = $form->current_date($myconfig) unless $form->{transdate}; |
|
647 |
|
|
624 | 648 |
$sth->finish; |
625 |
map { $form->{$_} =~ s/ +$//g } qw(printed emailed queued); |
|
649 |
|
|
650 |
# shipto and pinted/mailed/queued status makes only sense for single id retrieve |
|
651 |
if (!@ids) { |
|
652 |
$query = qq|SELECT s.* FROM shipto s |
|
653 |
WHERE s.trans_id = $form->{id}|; |
|
654 |
$sth = $dbh->prepare($query); |
|
655 |
$sth->execute || $form->dberror($query); |
|
656 |
|
|
657 |
$ref = $sth->fetchrow_hashref(NAME_lc); |
|
658 |
map { $form->{$_} = $ref->{$_} } keys %$ref; |
|
659 |
$sth->finish; |
|
660 |
|
|
661 |
# get printed, emailed and queued |
|
662 |
$query = qq|SELECT s.printed, s.emailed, s.spoolfile, s.formname |
|
663 |
FROM status s |
|
664 |
WHERE s.trans_id = $form->{id}|; |
|
665 |
$sth = $dbh->prepare($query); |
|
666 |
$sth->execute || $form->dberror($query); |
|
667 |
|
|
668 |
while ($ref = $sth->fetchrow_hashref(NAME_lc)) { |
|
669 |
$form->{printed} .= "$ref->{formname} " if $ref->{printed}; |
|
670 |
$form->{emailed} .= "$ref->{formname} " if $ref->{emailed}; |
|
671 |
$form->{queued} .= "$ref->{formname} $ref->{spoolfile} " if $ref->{spoolfile}; |
|
672 |
} |
|
673 |
$sth->finish; |
|
674 |
map { $form->{$_} =~ s/ +$//g } qw(printed emailed queued); |
|
675 |
} # if !@ids |
|
626 | 676 |
|
627 | 677 |
my %oid = ('Pg' => 'oid', |
628 | 678 |
'Oracle' => 'rowid'); |
629 | 679 |
|
630 | 680 |
# retrieve individual items |
681 |
# this query looks up all information about the items |
|
682 |
# stuff different from the whole will not be overwritten, but saved with a suffix. |
|
631 | 683 |
$query = qq|SELECT o.id AS orderitems_id, |
632 | 684 |
c1.accno AS inventory_accno, |
633 | 685 |
c2.accno AS income_accno, |
634 | 686 |
c3.accno AS expense_accno, |
687 |
oe.ordnumber, oe.transdate, oe.cusordnumber, |
|
635 | 688 |
p.partnumber, p.assembly, o.description, o.qty, |
636 | 689 |
o.sellprice, o.parts_id AS id, o.unit, o.discount, p.bin, p.notes AS partnotes, |
637 | 690 |
o.reqdate, o.project_id, o.serialnumber, o.ship, |
... | ... | |
639 | 692 |
pg.partsgroup, o.pricegroup_id, (SELECT pricegroup FROM pricegroup WHERE id=o.pricegroup_id) as pricegroup |
640 | 693 |
FROM orderitems o |
641 | 694 |
JOIN parts p ON (o.parts_id = p.id) |
695 |
JOIN oe ON (o.trans_id = oe.id) |
|
642 | 696 |
LEFT JOIN chart c1 ON (p.inventory_accno_id = c1.id) |
643 | 697 |
LEFT JOIN chart c2 ON (p.income_accno_id = c2.id) |
644 | 698 |
LEFT JOIN chart c3 ON (p.expense_accno_id = c3.id) |
645 | 699 |
LEFT JOIN project pr ON (o.project_id = pr.id) |
646 | 700 |
LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id) |
647 |
WHERE o.trans_id = $form->{id} |
|
701 |
|. ($form->{id} |
|
702 |
? qq|WHERE o.trans_id = $form->{id}| |
|
703 |
: qq|WHERE o.trans_id IN (|.join(", ", @ids).qq|)| |
|
704 |
).qq| |
|
648 | 705 |
ORDER BY o.$oid{$myconfig->{dbdriver}}|; |
706 |
|
|
649 | 707 |
$sth = $dbh->prepare($query); |
650 | 708 |
$sth->execute || $form->dberror($query); |
651 | 709 |
|
bin/mozilla/io.pl | ||
---|---|---|
357 | 357 |
<input type=hidden name="listprice_$i" value="$form->{"listprice_$i"}"> |
358 | 358 |
<input type=hidden name="assembly_$i" value="$form->{"assembly_$i"}"> |
359 | 359 |
<input type=hidden name="taxaccounts_$i" value="$form->{"taxaccounts_$i"}"> |
360 |
<input type=hidden name="ordnumber_$i" value="$form->{"ordnumber_$i"}"> |
|
361 |
<input type=hidden name="transdate_$i" value="$form->{"transdate_$i"}"> |
|
362 |
<input type=hidden name="cusordnumber_$i" value="$form->{"cusordnumber_$i"}"> |
|
360 | 363 |
|
361 | 364 |
|; |
362 | 365 |
|
bin/mozilla/oe.pl | ||
---|---|---|
1 |
#===================================================================== |
|
1 |
# #=====================================================================
|
|
2 | 2 |
# LX-Office ERP |
3 | 3 |
# Copyright (C) 2004 |
4 | 4 |
# Based on SQL-Ledger Version 2.1.9 |
... | ... | |
77 | 77 |
sub edit { |
78 | 78 |
$lxdebug->enter_sub(); |
79 | 79 |
|
80 |
# editing without stuff to edit? try adding it first |
|
81 |
if ($form->{rowcount}) { |
|
82 |
map {$id++ if $form->{"id_$_"}} (1 .. $form->{rowcount}); |
|
83 |
if (!$id) { |
|
84 |
# reset rowcount |
|
85 |
undef $form->{rowcount}; |
|
86 |
&add; |
|
87 |
return; |
|
88 |
} |
|
89 |
} else { |
|
90 |
if (!$form->{id}) { |
|
91 |
&add; |
|
92 |
return; |
|
93 |
} |
|
94 |
} |
|
95 |
|
|
80 | 96 |
if ($form->{type} eq 'purchase_order') { |
81 | 97 |
$form->{title} = $locale->text('Edit Purchase Order'); |
82 | 98 |
$form->{heading} = $locale->text('Purchase Order'); |
... | ... | |
121 | 137 |
|
122 | 138 |
OE->retrieve(\%myconfig, \%$form); |
123 | 139 |
|
140 |
# if multiple rowcounts (== collective order) then check if the |
|
141 |
# there were more than one customer (in that case OE::retrieve removes |
|
142 |
# the content from the field) |
|
143 |
if ($form->{rowcount} && $form->{type} eq 'sales_order' && $form->{customer} eq '') { |
|
144 |
# $main::lxdebug->message(0, "Detected Edit order with concurrent customers"); |
|
145 |
$form->error($locale->text('Collective Orders only work for orders from one customer!')); |
|
146 |
} |
|
147 |
|
|
124 | 148 |
$taxincluded = $form->{taxincluded}; |
125 | 149 |
$form->{shipto} = 1 if $form->{id}; |
126 | 150 |
|
... | ... | |
197 | 221 |
$form->{media} = "screen"; |
198 | 222 |
$form->{formname} = $form->{type}; |
199 | 223 |
|
200 |
if ($form->{id}) { |
|
201 |
|
|
202 | 224 |
map { $form->{$_} =~ s/\"/"/g } |
203 | 225 |
qw(ordnumber quonumber shippingpoint shipvia notes intnotes shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact); |
204 | 226 |
|
205 | 227 |
foreach $ref (@{ $form->{form_details} }) { |
206 |
$i++; |
|
207 |
map { $form->{"${_}_$i"} = $ref->{$_} } keys %{$ref}; |
|
208 |
$form->{"discount_$i"} = |
|
209 |
$form->format_amount(\%myconfig, $form->{"discount_$i"} * 100); |
|
228 |
$form->{rowcount} = ++$i; |
|
210 | 229 |
|
211 |
($dec) = ($form->{"sellprice_$i"} =~ /\.(\d+)/); |
|
212 |
$dec = length $dec; |
|
213 |
$decimalplaces = ($dec > 2) ? $dec : 2; |
|
214 |
|
|
215 |
$form->{"sellprice_$i"} = |
|
216 |
$form->format_amount(\%myconfig, $form->{"sellprice_$i"}, |
|
217 |
$decimalplaces); |
|
218 |
|
|
219 |
(my $dec_qty) = ($form->{"qty_$i"} =~ /\.(\d+)/); |
|
220 |
$dec_qty = length $dec_qty; |
|
221 |
|
|
222 |
$form->{"qty_$i"} = $form->format_amount(\%myconfig, $form->{"qty_$i"}, $dec_qty); |
|
223 |
|
|
224 |
map { $form->{"${_}_$i"} =~ s/\"/"/g } |
|
225 |
qw(partnumber description unit); |
|
226 |
$form->{rowcount} = $i; |
|
230 |
map { $form->{"${_}_$i"} = $ref->{$_} } keys %{$ref}; |
|
227 | 231 |
} |
228 |
} elsif ($form->{rowcount}) { |
|
232 |
|
|
229 | 233 |
for my $i (1 .. $form->{rowcount}) { |
230 | 234 |
$form->{"discount_$i"} = |
231 | 235 |
$form->format_amount(\%myconfig, $form->{"discount_$i"} * 100); |
232 | 236 |
|
233 |
($dec) = ($form->{"sellprice_$i"} =~ /\.(\d+)/); |
|
237 |
($dec) = ($form->{"sellprice_$i"} =~ /\.(\d+)/);
|
|
234 | 238 |
$dec = length $dec; |
235 | 239 |
$decimalplaces = ($dec > 2) ? $dec : 2; |
236 | 240 |
|
... | ... | |
245 | 249 |
map { $form->{"${_}_$i"} =~ s/\"/"/g } |
246 | 250 |
qw(partnumber description unit); |
247 | 251 |
} |
248 |
} |
|
249 | 252 |
|
250 | 253 |
$lxdebug->leave_sub(); |
251 | 254 |
} |
... | ... | |
860 | 863 |
. $locale->text('Order') . qq|"> |
861 | 864 |
|; |
862 | 865 |
} |
866 |
} elsif ($form->{type} =~ /sales_order$/ && $form->{rowcount}) { |
|
867 |
print qq| |
|
868 |
<br>Workflow $form->{heading}<br> |
|
869 |
<input class=submit type=submit name=action value="| |
|
870 |
. $locale->text('Save as new') . qq|"> |
|
871 |
<input class=submit type=submit name=action value="| |
|
872 |
. $locale->text('Invoice') . qq|"> |
|
873 |
|; |
|
863 | 874 |
} |
875 |
|
|
864 | 876 |
|
865 | 877 |
if ($form->{menubar}) { |
866 | 878 |
require "$form->{path}/menu.pl"; |
... | ... | |
1312 | 1324 |
} |
1313 | 1325 |
} |
1314 | 1326 |
|
1327 |
# only show checkboxes if gotten here via sales_order form. |
|
1328 |
if ($form->{type} =~ /sales_order/) { |
|
1329 |
unshift @column_index, "ids"; |
|
1330 |
} |
|
1331 |
|
|
1315 | 1332 |
if ($form->{l_subtotal} eq 'Y') { |
1316 | 1333 |
$callback .= "&l_subtotal=Y"; |
1317 | 1334 |
$href .= "&l_subtotal=Y"; |
... | ... | |
1384 | 1401 |
$column_header{employee} = |
1385 | 1402 |
qq|<th><a class=listheading href=$href&sort=employee>$employee</a></th>|; |
1386 | 1403 |
|
1404 |
$column_header{ids} = qq|<th></th>|; |
|
1405 |
|
|
1387 | 1406 |
if ($form->{ $form->{vc} }) { |
1388 | 1407 |
$option = $locale->text(ucfirst $form->{vc}); |
1389 | 1408 |
$option .= " : $form->{$form->{vc}}"; |
... | ... | |
1423 | 1442 |
print qq| |
1424 | 1443 |
<body> |
1425 | 1444 |
|
1445 |
<form method="post" action="oe.pl"> |
|
1426 | 1446 |
<table width=100%> |
1427 | 1447 |
<tr> |
1428 | 1448 |
<th class=listtop>$form->{title}</th> |
... | ... | |
1443 | 1463 |
|; |
1444 | 1464 |
|
1445 | 1465 |
# add sort and escape callback |
1446 |
$callback = $form->escape($callback . "&sort=$form->{sort}"); |
|
1466 |
$callback_escaped = $form->escape($callback . "&sort=$form->{sort}");
|
|
1447 | 1467 |
|
1448 | 1468 |
if (@{ $form->{OE} }) { |
1449 | 1469 |
$sameitem = $form->{OE}->[0]->{ $form->{sort} }; |
... | ... | |
1455 | 1475 |
$warehouse = $form->escape($form->{warehouse}); |
1456 | 1476 |
|
1457 | 1477 |
foreach $oe (@{ $form->{OE} }) { |
1478 |
$form->{rowcount} = ++$j; |
|
1458 | 1479 |
|
1459 | 1480 |
if ($form->{l_subtotal} eq 'Y') { |
1460 | 1481 |
if ($sameitem ne $oe->{ $form->{sort} }) { |
... | ... | |
1483 | 1504 |
$subtotalnetamount += $oe->{netamount}; |
1484 | 1505 |
$subtotalamount += $oe->{amount}; |
1485 | 1506 |
|
1507 |
$column_data{ids} = qq|<td><input name="id_$j" class=checkbox type=checkbox><input type="hidden" name="trans_id_$j" value="$oe->{id}"></td>|; |
|
1486 | 1508 |
$column_data{id} = "<td>$oe->{id}</td>"; |
1487 | 1509 |
$column_data{transdate} = "<td>$oe->{transdate} </td>"; |
1488 | 1510 |
$column_data{reqdate} = "<td>$oe->{reqdate} </td>"; |
1489 | 1511 |
|
1490 | 1512 |
$column_data{$ordnumber} = |
1491 |
"<td><a href=oe.pl?path=$form->{path}&action=$action&type=$form->{type}&id=$oe->{id}&warehouse=$warehouse&vc=$form->{vc}&login=$form->{login}&password=$form->{password}&callback=$callback>$oe->{$ordnumber}</a></td>"; |
|
1513 |
"<td><a href=oe.pl?path=$form->{path}&action=$action&type=$form->{type}&id=$oe->{id}&warehouse=$warehouse&vc=$form->{vc}&login=$form->{login}&password=$form->{password}&callback=$callback_escaped>$oe->{$ordnumber}</a></td>";
|
|
1492 | 1514 |
$column_data{name} = "<td>$oe->{name}</td>"; |
1493 | 1515 |
|
1494 | 1516 |
$column_data{employee} = "<td>$oe->{employee} </td>"; |
... | ... | |
1546 | 1568 |
<tr> |
1547 | 1569 |
<td><hr size=3 noshade></td> |
1548 | 1570 |
</tr> |
1549 |
</table> |
|
1571 |
</table>|; |
|
1572 |
|
|
1573 |
# multiple invoice edit button only if gotten there via sales_order form. |
|
1574 |
|
|
1575 |
if ($form->{type} =~ /sales_order/) { |
|
1576 |
print qq| |
|
1577 |
<input type="hidden" name="path" value="$form->{path}"> |
|
1578 |
<input class"submit" type="submit" name="action" value="| |
|
1579 |
. $locale->text('Continue') .qq|"> |
|
1580 |
<input type="hidden" name="nextsub" value="edit"> |
|
1581 |
<input type="hidden" name="type" value="$form->{type}"> |
|
1582 |
<input type="hidden" name="warehouse" value="$warehouse"> |
|
1583 |
<input type="hidden" name="vc" value="$form->{vc}"> |
|
1584 |
<input type="hidden" name="login" value="$form->{login}"> |
|
1585 |
<input type="hidden" name="password" value="$form->{password}"> |
|
1586 |
<input type="hidden" name="callback" value="$callback"> |
|
1587 |
<input type="hidden" name="rowcount" value="$form->{rowcount}">|; |
|
1588 |
} |
|
1589 |
|
|
1590 |
print qq| |
|
1591 |
</form> |
|
1550 | 1592 |
|
1551 | 1593 |
<br> |
1552 | 1594 |
<form method=post action=$form->{script}> |
... | ... | |
1751 | 1793 |
$lxdebug->enter_sub(); |
1752 | 1794 |
|
1753 | 1795 |
if ($form->{type} =~ /_order$/) { |
1754 |
$form->isblank("ordnumber", $locale->text('Order Number missing!')); |
|
1755 |
$form->isblank("transdate", $locale->text('Order Date missing!')); |
|
1796 |
# these checks only apply if the items don't bring their own ordnumbers/transdates. |
|
1797 |
# The if clause ensures that by searching for empty ordnumber_#/transdate_# fields. |
|
1798 |
$form->isblank("ordnumber", $locale->text('Order Number missing!')) if ( +{ map { $form->{"ordnumber_$_"}, 1 } ( 1 .. $form->{rowcount}-1 ) }->{''} ); |
|
1799 |
$form->isblank("transdate", $locale->text('Order Date missing!')) if ( +{ map { $form->{"transdate_$_"}, 1 } ( 1 .. $form->{rowcount}-1 ) }->{''} ); |
|
1756 | 1800 |
|
1757 | 1801 |
} else { |
1758 | 1802 |
$form->isblank("quonumber", $locale->text('Quotation Number missing!')); |
... | ... | |
1788 | 1832 |
|
1789 | 1833 |
# close orders/quotations |
1790 | 1834 |
$form->{closed} = 1; |
1791 |
OE->save(\%myconfig, \%$form); |
|
1835 |
|
|
1836 |
# save order iff one ordnumber has been given |
|
1837 |
# if not it's most likely a collective order, which can't be saved back |
|
1838 |
# so they just have to be closed |
|
1839 |
if ($form->{ordnumber} ne '') { |
|
1840 |
OE->save(\%myconfig, \%$form); |
|
1841 |
} else { |
|
1842 |
OE->close_orders(\%myconfig, \%$form); |
|
1843 |
} |
|
1792 | 1844 |
|
1793 | 1845 |
$form->{transdate} = $form->{invdate} = $form->current_date(\%myconfig); |
1794 | 1846 |
$form->{duedate} = |
locale/de/admin | ||
---|---|---|
39 | 39 |
'Hostname missing!' => 'Computername fehlt!', |
40 | 40 |
'Incorrect Password!' => 'Ung?ltiges Passwort!', |
41 | 41 |
'Language' => 'Sprache', |
42 |
'Leave host and port field empty unless you want to make a remote connection.' => 'Leave host and port field empty unless you want to make a remote connection.', |
|
42 | 43 |
'Lock System' => 'System sperren', |
43 | 44 |
'Lockfile created!' => 'System gesperrt!', |
44 | 45 |
'Lockfile removed!' => 'System entsperrt!', |
... | ... | |
70 | 71 |
'Templates' => 'Vorlagen', |
71 | 72 |
'The following Datasets are not in use and can be deleted' => 'Die folgenden Datenbanken sind nicht in Verwendung und k?nnen gel?scht werden', |
72 | 73 |
'The following Datasets need to be updated' => 'Folgende Datenbanken m?ssen aktualisiert werden', |
73 |
'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!' => 'In diesem Schritt werden bestehende Datenbanken gesucht. Es werden noch keine ?nderungen vorgenommen!',
|
|
74 |
'To add a user to a group edit a name, change the login name and save. A new user with the same variables will then be saved under the new login name.' => 'Um einer Gruppe einen neuen Benutzer hinzuzuf?gen, ?ndern und speichern Sie am einfachsten einen bestehenden Zugriffsnamen. Unter dem neuen Namen wird dann ein Benutzer mit denselben Einstellungen angelegt.',
|
|
74 |
'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!' => 'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!',
|
|
75 |
'To add a user to a group edit a name, change the login name and save. A new user with the same variables will then be saved under the new login name.' => 'To add a user to a group edit a name, change the login name and save. A new user with the same variables will then be saved under the new login name.',
|
|
75 | 76 |
'Unlock System' => 'System entsperren', |
76 | 77 |
'Update Dataset' => 'Datenbank aktualisieren', |
77 | 78 |
'Use Templates' => 'benutze Vorlagen', |
... | ... | |
81 | 82 |
'Ust-IDNr' => 'USt-IdNr.', |
82 | 83 |
'Version' => 'Version', |
83 | 84 |
'WEBDAV-Zugriff' => 'WEBDAV-Zugriff', |
85 |
'You must enter a host and port for local and remote connections!' => 'You must enter a host and port for local and remote connections!', |
|
84 | 86 |
'does not exist' => 'existiert nicht', |
85 | 87 |
'is already a member!' => 'ist bereits ein Mitglied!', |
86 | 88 |
'localhost' => 'lokaler Rechner', |
locale/de/all | ||
---|---|---|
174 | 174 |
'Closed' => 'Geschlossen', |
175 | 175 |
'Code' => 'kode', |
176 | 176 |
'Code missing!' => 'kode fehlt!', |
177 |
'Collective Orders only work for orders from one customer!' => 'Sammelauftr?ge funktionieren nur f?r Auftr?ge von einem Kunden!', |
|
177 | 178 |
'Comment' => 'Kommentar', |
178 | 179 |
'Company' => 'Firma', |
179 | 180 |
'Company Name' => 'Firmenname', |
... | ... | |
429 | 430 |
'Last Sales Quotation Number' => 'Letzte Angebotsnummer', |
430 | 431 |
'Last Service Number' => 'Letzte Dienstleistungsnr.', |
431 | 432 |
'Last Vendor Number' => 'Letzte Lieferantennummer', |
433 |
'Leave host and port field empty unless you want to make a remote connection.' => '', |
|
432 | 434 |
'Liability' => 'Passiva', |
433 | 435 |
'License' => 'Lizenz', |
434 | 436 |
'License key' => 'Lizenzschl?ssel', |
... | ... | |
707 | 709 |
'The following Datasets are not in use and can be deleted' => 'Die folgenden Datenbanken sind nicht in Verwendung und k?nnen gel?scht werden', |
708 | 710 |
'The following Datasets need to be updated' => 'Folgende Datenbanken m?ssen aktualisiert werden', |
709 | 711 |
'The licensing module has been deactivated in lx-erp.conf.' => 'Das Lizenzverwaltungsmodul wurde in lx-erp.conf deaktiviert.', |
712 |
'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!' => '', |
|
710 | 713 |
'Title' => 'Titel', |
711 | 714 |
'To' => 'An', |
715 |
'To add a user to a group edit a name, change the login name and save. A new user with the same variables will then be saved under the new login name.' => '', |
|
712 | 716 |
'Top 100' => 'Top 100', |
713 | 717 |
'Top 100 hinzufuegen' => 'Top 100 hinzuf?gen', |
714 | 718 |
'Top Level' => 'Hauptartikelbezeichnung', |
... | ... | |
776 | 780 |
'Yes' => 'Ja', |
777 | 781 |
'You are logged out!' => 'Auf Wiedersehen!', |
778 | 782 |
'You did not enter a name!' => 'Sie haben keinen Namen eingegeben!', |
783 |
'You must enter a host and port for local and remote connections!' => '', |
|
779 | 784 |
'Zeitraum' => 'Zeitraum', |
780 | 785 |
'Zipcode' => 'PLZ', |
781 | 786 |
'accrual' => 'Bilanzierung (Soll-Versteuerung)', |
locale/en_GB/all | ||
---|---|---|
114 | 114 |
'Click on login name to edit!' => '', |
115 | 115 |
'Close Books up to' => '', |
116 | 116 |
'Closed' => '', |
117 |
'Collective Orders only work for orders from one customer!' => '', |
|
117 | 118 |
'Company' => '', |
118 | 119 |
'Compare to' => '', |
119 | 120 |
'Confirm!' => '', |
Auch abrufbar als: Unified diff
Merge von 681 aus unstable: Sammelauftraege + Bugfix
Feature Sammelauftraege
- Kann jetzt mehrere Auftraege in der Suchmaske anwaehlen und zusammenfassen zu einem Sammelauftrag.
- Kann diesen Sammelauftrag als neu speichern und eine Rechnung dafuer ausstellen.
- Kann die folgende Rechnung wiederum speichern und buchen.
- Wird Sammelauftraege mit nur einem Auftrag abfangen und wie gehabt als einzelnen behandeln.
- Wird soviele Daten wie moeglich im Header des Sammelauftrags beibehalten, wobei customer, ordnumber und transdate eindeutig sein m
uessen.
- transdate und ordnumber werden bei Bedarf ueberschrieben, nicht eindeutiger customer wird mit Fehlermeldung quittiert
Zusaetzlich:
- Bugfix in Form::get_exchangerate, genauso gefixt wie in Form::check_exchangerate
- neue Routine OE:close_orders, die genau das tut.
- Der Versuch oe::edit ohne eine id aufzurufen wird nun auf oe::add umgeleitet