Revision 52d18c01
Von Jan Büren vor mehr als 11 Jahren hinzugefügt
SL/Controller/ClientConfig.pm | ||
---|---|---|
43 | 43 |
|
44 | 44 |
map { $self->{$_} = SL::DB::Default->get->$_ } qw(sales_order_show_delete purchase_order_show_delete sales_delivery_order_show_delete purchase_delivery_order_show_delete); |
45 | 45 |
|
46 |
# All warehouse / transfer default values |
|
47 |
map { $self->{$_} = SL::DB::Default->get->$_ } qw(transfer_default transfer_default_use_master_default_bin transfer_default_ignore_onhand |
|
48 |
warehouse_id_ignore_onhand bin_id_ignore_onhand warehouse_id bin_id); |
|
49 |
|
|
50 |
# for the default warehouse and bin we get the list and |
|
51 |
# set a empty value with warehouse_id and bin_id = 0 |
|
46 | 52 |
map { $self->{$_} = SL::DB::Default->get->$_ } qw(warehouse_id bin_id); |
47 | 53 |
$::form->get_lists('warehouses' => { 'key' => 'WAREHOUSES', |
48 | 54 |
'bins' => 'BINS', }); |
... | ... | |
51 | 57 |
my $no_default_bin_entry = { 'id' => '0', description => '--', 'BINS' => [ { id => '0', description => ''} ] }; |
52 | 58 |
push @ { $self->{WAREHOUSES} }, $no_default_bin_entry; |
53 | 59 |
|
60 |
# set defaults to empty |
|
54 | 61 |
if (my $max = scalar @{ $self->{WAREHOUSES} }) { |
55 | 62 |
$self->{warehouse_id} ||= $self->{WAREHOUSES}->[$max -1]->{id}; |
56 | 63 |
$self->{bin_id} ||= $self->{WAREHOUSES}->[$max -1]->{BINS}->[0]->{id}; |
64 |
$self->{warehouse_id_ignore_onhand} ||= $self->{WAREHOUSES}->[$max -1]->{id}; |
|
65 |
$self->{bin_id_ignore_onhand} ||= $self->{WAREHOUSES}->[$max -1]->{BINS}->[0]->{id}; |
|
57 | 66 |
} |
58 | 67 |
|
59 | 68 |
$self->{show_weight} = SL::DB::Default->get->show_weight; |
... | ... | |
84 | 93 |
undef $::form->{warehouse_id}; |
85 | 94 |
undef $::form->{bin_id}; |
86 | 95 |
} |
87 |
map { SL::DB::Default->get->update_attributes($_ => $::form->{$_}); } qw(warehouse_id bin_id); |
|
96 |
# undef warehouse_id_ignore_onhand if the empty value is selected |
|
97 |
if ( ($::form->{warehouse_id_ignore_onhand} == 0) && ($::form->{bin_id_ignore_onhand} == 0) ) { |
|
98 |
undef $::form->{warehouse_id_ignore_onhand}; |
|
99 |
undef $::form->{bin_id_ignore_onhand}; |
|
100 |
} |
|
101 |
|
|
102 |
# All warehouse / transfer default values |
|
103 |
map { SL::DB::Default->get->update_attributes($_ => $::form->{$_}); } qw(transfer_default transfer_default_use_master_default_bin transfer_default_ignore_onhand |
|
88 | 104 |
|
89 | 105 |
SL::DB::Default->get->update_attributes('show_weight' => $::form->{show_weight}); |
90 | 106 |
|
SL/DB/MetaSetup/Default.pm | ||
---|---|---|
71 | 71 |
bin_id => { type => 'integer' }, |
72 | 72 |
currency_id => { type => 'integer', not_null => 1 }, |
73 | 73 |
show_weight => { type => 'boolean', default => 'false', not_null => 1 }, |
74 |
], |
|
74 |
transfer_default => { type => 'boolean', default => 'true' }, |
|
75 |
transfer_default_use_master_default_bin => { type => 'boolean', default => 'false' }, |
|
76 |
transfer_default_ignore_onhand => { type => 'boolean', default => 'false' }, |
|
77 |
warehouse_id_ignore_onhand => { type => 'integer' }, |
|
78 |
bin_id_ignore_onhand => { type => 'integer' }, |
|
79 |
], |
|
75 | 80 |
|
76 | 81 |
primary_key_columns => [ 'id' ], |
77 | 82 |
|
78 | 83 |
allow_inline_column_values => 1, |
79 |
|
|
80 | 84 |
foreign_keys => [ |
81 | 85 |
bin => { |
82 | 86 |
class => 'SL::DB::Bin', |
83 | 87 |
key_columns => { bin_id => 'id' }, |
84 | 88 |
}, |
85 | 89 |
|
86 |
warehouse => {
|
|
87 |
class => 'SL::DB::Warehouse',
|
|
88 |
key_columns => { warehouse_id => 'id' },
|
|
90 |
bin_obj => {
|
|
91 |
class => 'SL::DB::Bin',
|
|
92 |
key_columns => { bin_id_ignore_onhand => 'id' },
|
|
89 | 93 |
}, |
94 |
|
|
90 | 95 |
currency => { |
91 | 96 |
class => 'SL::DB::Currency', |
92 | 97 |
key_columns => { currency_id => 'id' }, |
93 | 98 |
}, |
99 |
|
|
100 |
warehouse => { |
|
101 |
class => 'SL::DB::Warehouse', |
|
102 |
key_columns => { warehouse_id => 'id' }, |
|
103 |
}, |
|
104 |
|
|
105 |
warehouse_obj => { |
|
106 |
class => 'SL::DB::Warehouse', |
|
107 |
key_columns => { warehouse_id_ignore_onhand => 'id' }, |
|
108 |
}, |
|
94 | 109 |
], |
95 | 110 |
); |
96 | 111 |
|
SL/InstanceConfiguration.pm | ||
---|---|---|
153 | 153 |
my ($self) = @_; |
154 | 154 |
return ($self->{data}->{bin_id}); |
155 | 155 |
} |
156 |
sub get_default_warehouse_id_ignore_onhand { |
|
157 |
my ($self) = @_; |
|
158 |
return ($self->{data}->{warehouse_id_ignore_onhand}); |
|
159 |
} |
|
160 |
|
|
161 |
sub get_default_bin_id_ignore_onhand { |
|
162 |
my ($self) = @_; |
|
163 |
return ($self->{data}->{bin_id_ignore_onhand}); |
|
164 |
} |
|
165 |
|
|
166 |
|
|
167 |
sub get_transfer_default { |
|
168 |
my ($self) = @_; |
|
169 |
return ($self->{data}->{transfer_default}); |
|
170 |
} |
|
171 |
|
|
172 |
sub get_transfer_default_use_master_default_bin { |
|
173 |
my ($self) = @_; |
|
174 |
return ($self->{data}->{transfer_default_use_master_default_bin}); |
|
175 |
} |
|
176 |
|
|
177 |
sub get_transfer_default_ignore_onhand { |
|
178 |
my ($self) = @_; |
|
179 |
return ($self->{data}->{transfer_default_ignore_onhand}); |
|
180 |
} |
|
181 |
|
|
156 | 182 |
|
157 | 183 |
1; |
158 | 184 |
|
... | ... | |
274 | 300 |
|
275 | 301 |
Returns the default bin_id |
276 | 302 |
|
303 |
=item C<get_default_warehouse_id_ignore_onhand> |
|
304 |
|
|
305 |
Returns the default warehouse_id for transfers without checking the |
|
306 |
current stock quantity |
|
307 |
|
|
308 |
=item C<get_default_bin_id_ignore_onhand> |
|
309 |
|
|
310 |
Returns the default bin_id for transfers without checking the. |
|
311 |
current stock quantity |
|
312 |
|
|
313 |
|
|
314 |
|
|
315 |
=item C<get_transfer_default> |
|
316 |
|
|
317 |
=item C<get_transfer_default_use_master_default_bin> |
|
318 |
|
|
319 |
=item C<get_transfer_default_ignore_onhand> |
|
320 |
|
|
321 |
Returns the default behavior for the transfer out default feature (true or false) |
|
322 |
|
|
323 |
|
|
277 | 324 |
=back |
278 | 325 |
|
279 | 326 |
=head1 BUGS |
SL/WH.pm | ||
---|---|---|
914 | 914 |
|
915 | 915 |
return $part_description; |
916 | 916 |
} |
917 |
# |
|
918 |
# Eingabe: Teilenummer, Lagerplatz_Id (bin_id) |
|
919 |
# Ausgabe: Die maximale Anzahl der Teile in diesem Lagerplatz |
|
920 |
# Bzw. Fehler, falls Chargen oder bestbefore |
|
921 |
# bei eingelagerten Teilen definiert sind. |
|
922 |
# |
|
923 |
sub get_max_qty_parts_bin { |
|
924 |
$main::lxdebug->enter_sub(); |
|
925 |
|
|
926 |
my $self = shift; |
|
927 |
my %params = @_; |
|
928 |
|
|
929 |
Common::check_params(\%params, qw(parts_id bin_id)); #die brauchen wir |
|
930 |
|
|
931 |
my $myconfig = \%main::myconfig; |
|
932 |
my $form = $main::form; |
|
933 |
|
|
934 |
my $dbh = $params{dbh} || $form->get_standard_dbh(); |
|
935 |
|
|
936 |
my $query = qq| SELECT SUM(qty), chargenumber, bestbefore FROM inventory where parts_id = ? |
|
937 |
AND bin_id = ? GROUP BY chargenumber, bestbefore|; |
|
938 |
|
|
939 |
my $sth_QTY = prepare_execute_query($form, $dbh, $query, ,$params{parts_id}, $params{bin_id}); #info: aufruf an DBUtils.pm |
|
917 | 940 |
|
941 |
my $max_qty_parts = 0; #Initialisierung mit 0 |
|
942 |
# falls derselbe artikel mehrmals eingelagert ist |
|
943 |
# chargennummer, muss entsprechend händisch agiert werden |
|
944 |
my $i = 0; |
|
945 |
my $error; |
|
946 |
while (my $ref = $sth_QTY->fetchrow_hashref()) { # wir laufen über alle Haltbarkeiten und Chargen(s.a. SQL-Query oben) |
|
947 |
$max_qty_parts += $ref->{sum}; |
|
948 |
$i++; |
|
949 |
if ($ref->{chargenumber} || $ref->{bestbefore}){ |
|
950 |
$error=1; |
|
951 |
} |
|
952 |
} |
|
953 |
#if ($i < 1){ |
|
954 |
# $error = 2; |
|
955 |
#} |
|
956 |
|
|
957 |
$main::lxdebug->leave_sub(); |
|
958 |
|
|
959 |
return ($max_qty_parts, $error); |
|
960 |
} |
|
918 | 961 |
|
919 | 962 |
1; |
920 | 963 |
|
bin/mozilla/do.pl | ||
---|---|---|
340 | 340 |
|
341 | 341 |
$form->{PRINT_OPTIONS} = print_options('inline' => 1); |
342 | 342 |
|
343 |
print $form->parse_html_template('do/form_footer'); |
|
343 |
print $form->parse_html_template('do/form_footer', |
|
344 |
{transfer_default => ($::instance_conf->get_transfer_default)}); |
|
344 | 345 |
|
345 | 346 |
$main::lxdebug->leave_sub(); |
346 | 347 |
} |
... | ... | |
1520 | 1521 |
my $form = $main::form; |
1521 | 1522 |
my $locale = $main::locale; |
1522 | 1523 |
|
1523 |
foreach my $action (qw(update ship_to print e_mail save transfer_out transfer_in mark_closed save_as_new invoice delete)) { |
|
1524 |
foreach my $action (qw(update ship_to print e_mail save transfer_out transfer_out_default |
|
1525 |
transfer_in transfer_in_default mark_closed save_as_new invoice delete)) { |
|
1524 | 1526 |
if ($form->{"action_${action}"}) { |
1525 | 1527 |
call_sub($action); |
1526 | 1528 |
return; |
... | ... | |
1529 | 1531 |
|
1530 | 1532 |
$form->error($locale->text('No action defined.')); |
1531 | 1533 |
} |
1534 |
|
|
1535 |
sub transfer_out_default { |
|
1536 |
$main::lxdebug->enter_sub(); |
|
1537 |
|
|
1538 |
my $form = $main::form; |
|
1539 |
|
|
1540 |
transfer_in_out_default('direction' => 'out'); |
|
1541 |
|
|
1542 |
$main::lxdebug->leave_sub(); |
|
1543 |
} |
|
1544 |
|
|
1545 |
sub transfer_in_default { |
|
1546 |
$main::lxdebug->enter_sub(); |
|
1547 |
|
|
1548 |
my $form = $main::form; |
|
1549 |
|
|
1550 |
transfer_in_out_default('direction' => 'in'); |
|
1551 |
|
|
1552 |
$main::lxdebug->leave_sub(); |
|
1553 |
} |
|
1554 |
|
|
1555 |
# Falls das Standardlagerverfahren aktiv ist, wird |
|
1556 |
# geprüft, ob alle Standardlagerplätze für die Auslager- |
|
1557 |
# artikel vorhanden sind UND ob die Warenmenge ausreicht zum |
|
1558 |
# Auslagern. Falls nicht wird entsprechend eine Fehlermeldung |
|
1559 |
# generiert. Offen Chargennummer / bestbefore wird nicht berücksichtigt |
|
1560 |
sub transfer_in_out_default { |
|
1561 |
$main::lxdebug->enter_sub(); |
|
1562 |
|
|
1563 |
my $form = $main::form; |
|
1564 |
my %myconfig = %main::myconfig; |
|
1565 |
my $locale = $main::locale; |
|
1566 |
my %params = @_; |
|
1567 |
|
|
1568 |
my (%missing_default_bins, %qty_parts, @all_requests, %part_info_map, $default_warehouse_id, $default_bin_id); |
|
1569 |
|
|
1570 |
Common::check_params(\%params, qw(direction)); |
|
1571 |
|
|
1572 |
# entsprechende defaults holen, falls standardlagerplatz verwendet werden soll |
|
1573 |
if ($::instance_conf->get_transfer_default_use_master_default_bin) { |
|
1574 |
$default_warehouse_id = $::instance_conf->get_default_warehouse_id; |
|
1575 |
$default_bin_id = $::instance_conf->get_default_bin_id; |
|
1576 |
} |
|
1577 |
|
|
1578 |
|
|
1579 |
my @part_ids = map { $form->{"id_${_}"} } (1 .. $form->{rowcount}); |
|
1580 |
if (@part_ids) { |
|
1581 |
my $units = AM->retrieve_units(\%myconfig, $form); |
|
1582 |
%part_info_map = IC->get_basic_part_info('id' => \@part_ids); |
|
1583 |
foreach my $i (1 .. $form->{rowcount}) { |
|
1584 |
next unless ($form->{"id_$i"}); |
|
1585 |
my $base_unit_factor = $units->{ $part_info_map{$form->{"id_$i"}}->{unit} }->{factor} || 1; |
|
1586 |
my $qty = $form->parse_amount(\%myconfig, $form->{"qty_$i"}) * $units->{$form->{"unit_$i"}}->{factor} / $base_unit_factor; |
|
1587 |
$qty_parts{$form->{"id_$i"}} += $qty; |
|
1588 |
|
|
1589 |
|
|
1590 |
$part_info_map{$form->{"id_$i"}}{bin_id} ||= $default_bin_id; |
|
1591 |
$part_info_map{$form->{"id_$i"}}{warehouse_id} ||= $default_warehouse_id; |
|
1592 |
|
|
1593 |
push @all_requests, { |
|
1594 |
'chargenumber' => '', #?? die müsste entsprechend geholt werden |
|
1595 |
#'bestbefore' => undef, # TODO wird nicht berücksichtigt |
|
1596 |
'bin_id' => $part_info_map{$form->{"id_$i"}}{bin_id}, |
|
1597 |
'qty' => $qty, |
|
1598 |
'parts_id' => $form->{"id_$i"}, |
|
1599 |
'comment' => 'Default transfer DO', |
|
1600 |
'ok' => 1, |
|
1601 |
'unit' => $part_info_map{$form->{"id_$i"}}{unit}, |
|
1602 |
'warehouse_id' => $part_info_map{$form->{"id_$i"}}{warehouse_id}, |
|
1603 |
'oe_id' => $form->{id}, |
|
1604 |
'project_id' => $form->{"project_id_$i"} ? $form->{"project_id_$i"} : $form->{globalproject_id} |
|
1605 |
}; |
|
1606 |
} |
|
1607 |
|
|
1608 |
# jetzt wird erst überprüft, ob die Stückzahl entsprechend stimmt. |
|
1609 |
if ($params{direction} eq 'out') { # wird nur für ausgehende Mengen benötigit |
|
1610 |
foreach my $key (keys %qty_parts) { |
|
1611 |
|
|
1612 |
$missing_default_bins{$key}{missing_bin} = 1 unless ($part_info_map{$key}{bin_id}); |
|
1613 |
next unless ($part_info_map{$key}{bin_id}); # abbruch |
|
1614 |
|
|
1615 |
my ($max_qty, $error) = WH->get_max_qty_parts_bin(parts_id => $key, bin_id => $part_info_map{$key}{bin_id}); |
|
1616 |
if ($error == 1) { |
|
1617 |
# wir können nicht entscheiden, welche charge oder mhd (bestbefore) ausgewählt sein soll |
|
1618 |
# deshalb rückmeldung nach oben geben, manuell auszulagern |
|
1619 |
# TODO Bei nur einem Treffer mit Charge oder bestbefore wäre das noch möglich |
|
1620 |
$missing_default_bins{$key}{chargenumber} = 1; |
|
1621 |
} |
|
1622 |
if ($max_qty < $qty_parts{$key}){ |
|
1623 |
$missing_default_bins{$key}{missing_qty} = $max_qty - $qty_parts{$key}; |
|
1624 |
} |
|
1625 |
} |
|
1626 |
} |
|
1627 |
} # if @parts_id |
|
1628 |
|
|
1629 |
# Abfrage für Fehlerbehandlung (nur bei direction == out) |
|
1630 |
if (scalar (keys %missing_default_bins)) { |
|
1631 |
my $fehlertext; |
|
1632 |
foreach my $fehler (keys %missing_default_bins) { |
|
1633 |
|
|
1634 |
my $ware = WH->get_part_description(parts_id => $fehler); |
|
1635 |
if ($missing_default_bins{$fehler}{missing_bin}){ |
|
1636 |
$fehlertext .= "Kein Standardlagerplatz definiert bei $ware <br>"; |
|
1637 |
} |
|
1638 |
if ($missing_default_bins{$fehler}{missing_qty}) { # missing_qty |
|
1639 |
$fehlertext .= "Es fehlen " . $missing_default_bins{$fehler}{missing_qty}*-1 . |
|
1640 |
" von $ware auf dem Standard-Lagerplatz " . $part_info_map{$fehler}{bin} . " zum Auslagern<br>"; |
|
1641 |
} |
|
1642 |
if ($missing_default_bins{$fehler}{chargenumber}){ |
|
1643 |
$fehlertext .= "Die Ware hat eine Chargennummer oder eine Mindesthaltbarkeit definiert. |
|
1644 |
Hier kann man nicht automatisch entscheiden. |
|
1645 |
Bitte diesen Lieferschein manuell auslagern. |
|
1646 |
Bei: $ware"; |
|
1647 |
} |
|
1648 |
# auslagern soll immer gehen, auch wenn nicht genügend auf lager ist. |
|
1649 |
# der lagerplatz ist hier extra konfigurierbar, bspw. Lager-Korrektur mit |
|
1650 |
# Lagerplatz Lagerplatz-Korrektur |
|
1651 |
my $default_warehouse_id_ignore_onhand = $::instance_conf->get_default_warehouse_id_ignore_onhand; |
|
1652 |
my $default_bin_id_ignore_onhand = $::instance_conf->get_default_bin_id_ignore_onhand; |
|
1653 |
if ($::instance_conf->get_transfer_default_ignore_onhand && $default_bin_id_ignore_onhand) { |
|
1654 |
# entsprechende defaults holen |
|
1655 |
# falls chargenumber, bestbefore oder anzahl nicht stimmt, auf automatischen |
|
1656 |
# lagerplatz wegbuchen! |
|
1657 |
foreach (@all_requests) { |
|
1658 |
if ($_->{parts_id} eq $fehler){ |
|
1659 |
$_->{bin_id} = $default_bin_id_ignore_onhand; |
|
1660 |
$_->{warehouse_id} = $default_warehouse_id_ignore_onhand; |
|
1661 |
} |
|
1662 |
} |
|
1663 |
} else { |
|
1664 |
#$main::lxdebug->message(0, 'Fehlertext: ' . $fehlertext); |
|
1665 |
$form->show_generic_error($locale->text("Cannot transfer. <br> Reason:<br>#1", $fehlertext ), 'back_button' => 1); |
|
1666 |
} |
|
1667 |
} |
|
1668 |
} |
|
1669 |
|
|
1670 |
|
|
1671 |
# hier der eigentliche fallunterschied für in oder out |
|
1672 |
my $prefix = $params{direction} eq 'in' ? 'in' : 'out'; |
|
1673 |
|
|
1674 |
# dieser array_ref ist für DO->save da: |
|
1675 |
# einmal die all_requests in YAML verwandeln, damit delivery_order_items_stock |
|
1676 |
# gefüllt werden kann. |
|
1677 |
my $i = 1; |
|
1678 |
foreach (@all_requests){ |
|
1679 |
$form->{"stock_${prefix}_$i"} = YAML::Dump([$_]); |
|
1680 |
$i++; |
|
1681 |
} |
|
1682 |
|
|
1683 |
save(no_redirect => 1); # Wir können auslagern, deshalb beleg speichern |
|
1684 |
# und in delivery_order_items_stock speichern |
|
1685 |
DO->transfer_in_out('direction' => $prefix, |
|
1686 |
'requests' => \@all_requests); |
|
1687 |
|
|
1688 |
SL::DB::DeliveryOrder->new(id => $form->{id})->load->update_attributes(delivered => 1); |
|
1689 |
|
|
1690 |
$form->{callback} = 'do.pl?action=edit&type=sales_delivery_order&id=' . $form->escape($form->{id}) if $params{direction} eq 'out'; |
|
1691 |
$form->{callback} = 'do.pl?action=edit&type=purchase_delivery_order&id=' . $form->escape($form->{id}) if $params{direction} eq 'in'; |
|
1692 |
$form->redirect; |
|
1693 |
|
|
1694 |
} |
doc/changelog | ||
---|---|---|
4 | 4 |
|
5 | 5 |
|
6 | 6 |
|
7 |
Größere neue Features: |
|
8 |
|
|
9 |
- Lagerverwaltung sinnvoller mit Stammdaten verknüpft |
|
10 |
Freitextfeld-Lagerplatz in Stammdaten durch Lager und Lagerplatz ersetzt. |
|
11 |
Entsprechende Vorauswahl beim Einkaufslieferschein. Der Standardlagerplatz wird |
|
12 |
schon direkt vorausgewählt. |
|
13 |
Ferner wird der Standardlagerplatz unter Lager -> Einlagern entsprechend auch |
|
14 |
vorausgewählt. |
|
15 |
Den Standardlagerplatz kann man unter Mandantenkonfiguration voreinstellen. |
|
16 |
Der voreingestellte Standardlagerplatz ist dann die Vorauswahl für neu angelegte |
|
17 |
Waren. |
|
18 |
Sowohl Einkaufs- als auch Verkaufslieferschein haben einen neue Funktion, |
|
19 |
Ein- / Auslagern über Standardlagerplatz. Diese Funktion ist an- bzw. |
|
20 |
abschaltbar in der Mandatenkonfiguration (standardmässig an). |
|
21 |
Die Funktion lässt sich noch wie folgt konfigurieren: |
|
22 |
- Falls kein Standardlagerplatz in den Stammdaten hinterlegt ist, verwende den |
|
23 |
vorkonfigurierten Standardlagerplatz. |
|
24 |
- Falls der Bestand nicht ausreicht zum Auslagern oder eine Mindesthaltbarkeit, bzw. |
|
25 |
Chargennummer vergeben (welches ein Abbruchkriterium beim Auslagern ist), lager dennoch |
|
26 |
aus und verwende hierfür den vorkonfigurierte Fehlbestands-, bzw. Fehlbuchungslagerplatz. |
|
27 |
|
|
28 |
|
|
7 | 29 |
|
8 | 30 |
|
9 | 31 |
Kleinere neue Features und Detailverbesserungen: |
... | ... | |
14 | 36 |
da hier die Code-Anpassungen vergessen wurde. |
15 | 37 |
- Offene Forderungen / Verbindlichkeiten |
16 | 38 |
Stichtagsbezogene Auswahl korrekt mit Fälligkeit verrechnet |
17 |
|
|
18 |
|
|
19 | 39 |
2012-12-10 - Release 3.0.0 |
20 | 40 |
|
21 | 41 |
Größere neue Features: |
locale/de/all | ||
---|---|---|
400 | 400 |
'Cannot save preferences!' => 'Einstellungen können nicht gespeichert werden!', |
401 | 401 |
'Cannot save quotation!' => 'Angebot kann nicht gespeichert werden!', |
402 | 402 |
'Cannot storno storno invoice!' => 'Kann eine Stornorechnung nicht stornieren', |
403 |
'Cannot transfer. <br> Reason:<br>#1' => 'Kann nicht auslagern. <br>Grund:<br>#1', |
|
403 | 404 |
'Carry over shipping address' => 'Lieferadresse übernehmen', |
404 | 405 |
'Cash' => 'Zahlungsverkehr', |
405 | 406 |
'Cc' => 'Cc', |
... | ... | |
617 | 618 |
'Default (no language selected)' => 'Standard (keine Sprache ausgewählt)', |
618 | 619 |
'Default Accounts' => 'Standardkonten', |
619 | 620 |
'Default Bin' => 'Standard-Lagerplatz', |
621 |
'Default Bin with ignoring onhand' => 'Standard-Lagerplatz für Lagerbewegungen ohne Überprüfung auf verfügbare Menge ', |
|
620 | 622 |
'Default Customer/Vendor Language' => 'Standard-Kunden-/Lieferantensprache', |
623 |
'Default Transfer' => 'Ein- / Auslagern über Standardlagerplätze', |
|
624 |
'Default Transfer Out always succeed. The current part onhand is ignored and the inventory can have negative stocks (not recommended).' => 'Auslagern über Standardlagerplatz funktioniert immer (verfügbare Menge wird nicht geprüft). Die Lagerbewegung wird auf den unten konfigurierten Lagerplatz gebucht (nicht empfohlen).', |
|
625 |
'Default Transfer Out with negative inventory' => 'Standard-Auslagern ohne Prüfung auf Bestand', |
|
626 |
'Default Transfer with Master Bin' => 'Standardlagerplatz für Standard-Auslagern verwenden, falls keiner für die Ware explizit definiert wurde', |
|
621 | 627 |
'Default Warehouse' => 'Standard-Lager', |
628 |
'Default Warehouse with ignoring on hand' => 'Standardlager für Auslagern ohne Prüfung auf Bestand', |
|
622 | 629 |
'Default buchungsgruppe' => 'Standardbuchungsgruppe', |
623 | 630 |
'Default currency' => 'Standardwährung', |
624 | 631 |
'Default currency missing!' => 'Standardwährung fehlt!', |
... | ... | |
1007 | 1014 |
'III' => 'III', |
1008 | 1015 |
'IV' => 'IV', |
1009 | 1016 |
'If checked the taxkey will not be exported in the DATEV Export, but only IF chart taxkeys differ from general ledger taxkeys' => 'Falls angehakt wird der DATEV-Steuerschlüssel bei Buchungen auf dieses Konto nicht beim DATEV-Export mitexportiert, allerdings nur wenn zusätzlich der Konto-Steuerschlüssel vom Buchungs (Hauptbuch) Steuerschlüssel abweicht', |
1017 |
'If configured this bin will be preselected for all new parts. Also this bin will be used as the master default bin, if default transfer out with master bin is activated.' => 'Falls konfiguriert, wird dieses Lager mit Lagerplatz für neu angelegte Waren vorausgewählt.', |
|
1010 | 1018 |
'If the article type is set to \'mixed\' then a column called \'type\' must be present.' => 'Falls der Artikeltyp auf \'gemischt\' gestellt wird, muss eine Spalte namens \'type\' vorhanden sein.', |
1011 | 1019 |
'If the automatic creation of invoices for fees and interest is switched on for a dunning level then the following accounts will be used for the invoice.' => 'Wenn das automatische Erstellen einer Rechnung über Mahngebühren und Zinsen für ein Mahnlevel aktiviert ist, so werden die folgenden Konten für die Rechnung benutzt.', |
1012 | 1020 |
'If the database user listed above does not have the right to create a database then enter the name and password of the superuser below:' => 'Falls der oben genannte Datenbankbenutzer nicht die Berechtigung zum Anlegen neuer Datenbanken hat, so können Sie hier den Namen und das Passwort des Datenbankadministratoraccounts angeben:', |
1021 |
'If the default transfer out always succeed use this bin for negative stock quantity.' => 'Standardlagerplatz für Auslagern ohne Prüfung auf Bestand', |
|
1013 | 1022 |
'If you chose to let kivitendo do the migration then kivitendo will also remove the old member file after creating a backup copy of it in the directory "#1".' => 'Falls Sie sich entscheiden, kivitendo die Migration durchführen zu lassen, so wird kivitendo ein Backup der alten Dateien im Verzeichnis "#1" erstellen und die Dateien anschließend löschen.', |
1014 | 1023 |
'If you enter values for the part number and / or part description then only those bins containing parts whose part number or part description match your input will be shown.' => 'Wenn Sie für die Artikelnummer und / oder die Beschreibung etwas eingeben, so werden nur die Lagerplätze angezeigt, in denen Waren eingelagert sind, die Ihre Suchbegriffe enthalten.', |
1015 | 1024 |
'If you have not chosen for example the category revenue for a tax and you choose an revenue account to create a transfer in the general ledger, this tax will not be displayed in the tax dropdown.' => 'Wenn Sie z.B. die Kategory Erlös für eine Steuer nicht gewählt haben und ein Erlöskonto beim Erstellen einer Dialogbuchung wählen, wird diese Steuer auch nicht im Dropdown-Menü für die Steuern angezeigt.', |
... | ... | |
1807 | 1816 |
'Show Filter' => 'Filter zeigen', |
1808 | 1817 |
'Show Salesman' => 'Verkäufer anzeigen', |
1809 | 1818 |
'Show TODO list' => 'Aufgabenliste anzeigen', |
1819 |
'Show Transfer via default' => 'Ein- / Auslagern über Standardlagerplatz anzeigen', |
|
1810 | 1820 |
'Show by default' => 'Standardmäßig anzeigen', |
1811 | 1821 |
'Show custom variable search inputs' => 'Suchoptionen für Benutzerdefinierte Variablen verstecken', |
1812 | 1822 |
'Show delete button in purchase delivery orders?' => 'Soll der "Löschen"-Knopf bei Einkaufslieferscheinen angezeigt werden?', |
... | ... | |
2169 | 2179 |
'This installation uses an unknown chart of accounts ("#1"). This database upgrade cannot create standard buchungsgruppen automatically.' => 'Diese Installation benutzt einen unbekannten Kontenrahmen ("#1"). Dieses Datenbankupgrade kann die Standardbuchungsgruppen nicht automatisch anlegen.', |
2170 | 2180 |
'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!', |
2171 | 2181 |
'This is a very critical problem.' => 'Dieses Problem ist sehr schwerwiegend.', |
2182 |
'This is the default bin for ignoring onhand' => 'Standardlagerplatz für Auslagern ohne Bestandsprüfung', |
|
2172 | 2183 |
'This is the default bin for parts' => 'Standard-Lagerplatz für Stammdaten/Waren', |
2173 | 2184 |
'This list is capped at 15 items to keep it fast. If you need a full list, please use reports.' => 'Diese Liste ist auf 15 Zeilen begrenzt. Wenn Sie eine vollständige Liste benötigen, erstellen Sie bitte einen Bericht.', |
2174 | 2185 |
'This means that the user has created an AP transaction and chosen a taxkey for sales taxes, or that he has created an AR transaction and chosen a taxkey for input taxes.' => 'Das bedeutet, dass ein Benutzer eine Kreditorenbuchung angelegt und in ihr einen Umsatzsteuer-Steuerschlüssel verwendet oder eine Debitorenbuchung mit Vorsteuer-Steuerschlüssel angelegt hat.', |
... | ... | |
2226 | 2237 |
'Transfer To Stock' => 'Lagereingang', |
2227 | 2238 |
'Transfer from warehouse' => 'Quelllager', |
2228 | 2239 |
'Transfer in' => 'Einlagern', |
2240 |
'Transfer in via default' => 'Einlagern über Standard-Lagerplatz', |
|
2229 | 2241 |
'Transfer out' => 'Auslagern', |
2242 |
'Transfer out via default' => 'Auslagern über Standard-Lagerplatz', |
|
2230 | 2243 |
'Transfer qty' => 'Umlagermenge', |
2231 | 2244 |
'Translation' => 'Übersetzung', |
2232 | 2245 |
'Trial Balance' => 'Summen- und Saldenliste', |
... | ... | |
2283 | 2296 |
'Uploaded on #1, size #2 kB' => 'Am #1 hochgeladen, Größe #2 kB', |
2284 | 2297 |
'Use As New' => 'Als neu verwenden', |
2285 | 2298 |
'Use Templates' => 'Benutze Vorlagen', |
2299 |
'Use master default bin for Default Transfer, if no default bin for the part is configured' => 'Standardlagerplatz für Ein- / Auslagern über Standard-Lagerplatz, falls für die Ware kein expliziter Lagerplatz konfiguriert ist', |
|
2286 | 2300 |
'User' => 'Benutzer', |
2287 | 2301 |
'User Config' => 'Einstellungen', |
2288 | 2302 |
'User Login' => 'Als Benutzer anmelden', |
templates/webpages/client_config/form.html | ||
---|---|---|
1 | 1 |
[%- USE T8 %][%- USE L %][% USE LxERP %][% USE HTML %] |
2 |
[%- USE JavaScript -%] |
|
3 |
<script type="text/javascript" src="js/common.js"></script> |
|
4 |
<script type="text/javascript" src="js/parts_language_selection.js"></script> |
|
5 |
<script type="text/javascript"> |
|
6 |
<!-- |
|
7 |
warehouses = new Array(); |
|
8 |
[%- USE WAREHOUSES_it = Iterator(SELF.WAREHOUSES) %][%- FOREACH warehouse = WAREHOUSES_it %] |
|
9 |
warehouses[[% WAREHOUSES_it.count - 1 %]] = new Array(); |
|
10 |
warehouses[[% WAREHOUSES_it.count - 1 %]]['id'] = [% warehouse.id %]; |
|
11 |
warehouses[[% WAREHOUSES_it.count - 1 %]]['bins'] = new Array(); |
|
12 |
[% USE BINS_it = Iterator(warehouse.BINS) %][% FOREACH bin = BINS_it %] |
|
13 |
warehouses[[% WAREHOUSES_it.count - 1 %]]['bins'][[% BINS_it.count - 1 %]] = new Array(); |
|
14 |
warehouses[[% WAREHOUSES_it.count - 1 %]]['bins'][[% BINS_it.count - 1 %]]['description'] = "[% JavaScript.escape(bin.description) %]"; |
|
15 |
warehouses[[% WAREHOUSES_it.count - 1 %]]['bins'][[% BINS_it.count - 1 %]]['id'] = [% bin.id %]; |
|
16 |
[% END %] |
|
17 |
[% END %] |
|
2 | 18 |
|
3 |
[% PROCESS 'common/select_warehouse_bin.html' WAREHOUSES=SELF.WAREHOUSES warehouse_id=SELF.warehouse_id bin_id=SELF.bin_id %] |
|
19 |
function warehouse_selected(warehouse_id, bin_id, bin_id_name) { |
|
20 |
|
|
21 |
// bin_id_name is optional and only used in client_config.html |
|
22 |
var bin_id_name = bin_id_name || 'bin_id'; |
|
23 |
|
|
24 |
var control = document.getElementById(bin_id_name); |
|
25 |
|
|
26 |
for (var i = control.options.length - 1; i >= 0; i--) { |
|
27 |
control.options[i] = null; |
|
28 |
} |
|
29 |
|
|
30 |
var warehouse_index = 0; |
|
31 |
|
|
32 |
for (i = 0; i < warehouses.length; i++) |
|
33 |
if (warehouses[i]['id'] == warehouse_id) { |
|
34 |
warehouse_index = i; |
|
35 |
break; |
|
36 |
} |
|
37 |
|
|
38 |
var warehouse = warehouses[warehouse_index]; |
|
39 |
var bin_index = 0; |
|
40 |
|
|
41 |
for (i = 0; i < warehouse['bins'].length; i++) |
|
42 |
if (warehouse['bins'][i]['id'] == bin_id) { |
|
43 |
bin_index = i; |
|
44 |
break; |
|
45 |
} |
|
46 |
|
|
47 |
for (i = 0; i < warehouse['bins'].length; i++) { |
|
48 |
control.options[i] = new Option(warehouse['bins'][i]['description'], warehouse['bins'][i]['id']); |
|
49 |
} |
|
50 |
|
|
51 |
|
|
52 |
control.options[bin_index].selected = true; |
|
53 |
} |
|
54 |
|
|
55 |
$(function() { |
|
56 |
warehouse_selected([% SELF.warehouse_id %], [% SELF.bin_id %], 'bin_id'); |
|
57 |
warehouse_selected([% SELF.warehouse_id_ignore_onhand %], [% SELF.bin_id_ignore_onhand %], 'bin_id_ignore_onhand'); |
|
58 |
}) |
|
59 |
--> |
|
60 |
</script> |
|
4 | 61 |
<h1>[% title | html %]</h1> |
5 | 62 |
|
6 | 63 |
[% PROCESS 'common/flash.html' %] |
... | ... | |
163 | 220 |
<th colspan="3">[% 'Warehouse' | $T8 %]</th> |
164 | 221 |
</tr> |
165 | 222 |
<tr> |
223 |
<td align="right">[% 'Default Transfer' | $T8 %]</td> |
|
224 |
<td> |
|
225 |
[% L.yes_no_tag('transfer_default', SELF.transfer_default) %] |
|
226 |
</td> |
|
227 |
<td> |
|
228 |
[% 'Show Transfer via default' | $T8 %]<br> |
|
229 |
</td> |
|
230 |
</tr> |
|
231 |
<tr> |
|
232 |
<td align="right">[% 'Default Transfer with Master Bin' | $T8 %]</td> |
|
233 |
<td> |
|
234 |
[% L.yes_no_tag('transfer_default_use_master_default_bin', SELF.transfer_default_use_master_default_bin) %] |
|
235 |
</td> |
|
236 |
<td> |
|
237 |
[% 'Use master default bin for Default Transfer, if no default bin for the part is configured' | $T8 %]<br> |
|
238 |
</td> |
|
239 |
</tr> |
|
240 |
<tr> |
|
241 |
<td align="right">[% 'Default Transfer Out with negative inventory' | $T8 %]</td> |
|
242 |
<td> |
|
243 |
[% L.yes_no_tag('transfer_default_ignore_onhand', SELF.transfer_default_ignore_onhand) %] |
|
244 |
</td> |
|
245 |
<td> |
|
246 |
[% 'Default Transfer Out always succeed. The current part onhand is ignored and the inventory can have negative stocks (not recommended).' | $T8 %]<br> |
|
247 |
</td> |
|
248 |
</tr> |
|
249 |
|
|
250 |
<tr> </tr> |
|
251 |
<tr> |
|
252 |
<th align="right" nowrap="true">[% 'Default Warehouse' | $T8 %]</th> |
|
253 |
<td> |
|
254 |
<select name="warehouse_id" onchange="warehouse_selected(warehouses[this.selectedIndex]['id'], 0)"> |
|
255 |
[%- FOREACH warehouse = SELF.WAREHOUSES %] |
|
256 |
<option value="[% HTML.escape(warehouse.id) %]"[% IF SELF.warehouse_id == warehouse.id %] selected[% END %]>[% warehouse.description %]</option> |
|
257 |
[%- END %] |
|
258 |
</select> |
|
259 |
</td> |
|
260 |
<td> |
|
261 |
[% 'This is the default bin for parts' | $T8 %]<br> |
|
262 |
[% 'If configured this bin will be preselected for all new parts. Also this bin will be used as the master default bin, if default transfer out with master bin is activated.' | $T8 %]<br> |
|
263 |
</td> |
|
264 |
</tr> |
|
265 |
<tr> |
|
266 |
<th align="right" nowrap="true">[% 'Default Bin' | $T8 %]</th> |
|
267 |
<td><select id="bin_id" name="bin_id"></select></td> |
|
268 |
</tr> |
|
269 |
<tr> |
|
270 |
<th align="right" nowrap="true">[% 'Default Warehouse with ignoring on hand' | $T8 %]</th> |
|
271 |
<td> |
|
272 |
<select name="warehouse_id_ignore_onhand" onchange="warehouse_selected(warehouses[this.selectedIndex]['id'], 0, 'bin_id_ignore_onhand')"> |
|
273 |
[%- FOREACH warehouse = SELF.WAREHOUSES %] |
|
274 |
<option value="[% HTML.escape(warehouse.id) %]"[% IF SELF.warehouse_id_ignore_onhand == warehouse.id %] selected[% END %]>[% warehouse.description %]</option> |
|
275 |
[%- END %] |
|
276 |
</select> |
|
277 |
</td> |
|
278 |
<td> |
|
279 |
[% 'This is the default bin for ignoring onhand' | $T8 %]<br> |
|
280 |
[% 'If the default transfer out always succeed use this bin for negative stock quantity.' | $T8 %]<br> |
|
281 |
</td> |
|
282 |
</tr> |
|
283 |
<tr> |
|
284 |
<th align="right" nowrap="true">[% 'Default Bin with ignoring onhand' | $T8 %]</th> |
|
285 |
<td><select id="bin_id_ignore_onhand" name="bin_id_ignore_onhand"></select></td> |
|
286 |
</tr> |
|
287 |
<tr> |
|
166 | 288 |
<td align="right">[% 'Show Bestbefore' | $T8 %]</td> |
167 | 289 |
<td> |
168 | 290 |
[% L.yes_no_tag('show_bestbefore', SELF.show_bestbefore) %] |
... | ... | |
177 | 299 |
[% 'Any stock contents containing a best before date will be impossible to stock out otherwise.' | $T8 %] |
178 | 300 |
</td> |
179 | 301 |
</tr> |
180 |
<tr> </tr> |
|
181 |
<tr> </tr> |
|
182 |
<tr> |
|
183 |
<th align="right" nowrap="true">[% 'Default Warehouse' | $T8 %]</th> |
|
184 |
<td> |
|
185 |
<select name="warehouse_id" onchange="warehouse_selected(warehouses[this.selectedIndex]['id'], 0)"> |
|
186 |
[%- FOREACH warehouse = SELF.WAREHOUSES %] |
|
187 |
<option value="[% HTML.escape(warehouse.id) %]"[% IF SELF.warehouse_id == warehouse.id %] selected[% END %]>[% warehouse.description %]</option> |
|
188 |
[%- END %] |
|
189 |
</select> |
|
190 |
</td> |
|
191 |
<td> |
|
192 |
[% 'This is the default bin for parts' | $T8 %]<br> |
|
193 |
</td> |
|
194 |
</tr> |
|
195 |
<tr> |
|
196 |
<th align="right" nowrap="true">[% 'Default Bin' | $T8 %]</th> |
|
197 |
<td><select id="bin_id" name="bin_id"></select></td> |
|
198 |
</tr> |
|
199 |
|
|
200 |
|
|
201 | 302 |
<tr class='listheading'> |
202 | 303 |
<th colspan="3">[% 'Weight' | $T8 %]</th> |
203 | 304 |
</tr> |
templates/webpages/do/form_footer.html | ||
---|---|---|
69 | 69 |
<input class="submit" type="submit" name="action_save" value="[% 'Save' | $T8 %]"> |
70 | 70 |
[%- IF vc == 'customer' %] |
71 | 71 |
<input class="submit" type="submit" name="action_transfer_out" onclick="return check_transfer_qty()" value="[% 'Transfer out' | $T8 %]"> |
72 |
[% IF transfer_default %] |
|
73 |
<input class="submit" type="submit" name="action_transfer_out_default" value="[% 'Transfer out via default' | $T8 %]"> |
|
74 |
[%- END %] |
|
72 | 75 |
[%- ELSE %] |
73 | 76 |
<input class="submit" type="submit" name="action_transfer_in" onclick="return check_transfer_qty()" value="[% 'Transfer in' | $T8 %]"> |
77 |
[% IF transfer_default %] |
|
78 |
<input class="submit" type="submit" name="action_transfer_in_default" value="[% 'Transfer in via default' | $T8 %]"> |
|
79 |
[%- END %] |
|
74 | 80 |
[%- END %] |
75 | 81 |
[%- END %] |
76 | 82 |
[%- IF id %] |
Auch abrufbar als: Unified diff
Verkaufs- und Einkaufslieferschein um Standardlagerverfahren erweitert (#2284)
s.a. Changelog, bzw. Trac-Eintrag 2284 hierzu.