Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 52d18c01

Von Jan Büren vor mehr als 11 Jahren hinzugefügt

  • ID 52d18c0134db2b418fe119723958efe8e79ac4f3
  • Vorgänger e0df6dc5
  • Nachfolger 7c452458

Verkaufs- und Einkaufslieferschein um Standardlagerverfahren erweitert (#2284)
s.a. Changelog, bzw. Trac-Eintrag 2284 hierzu.

Unterschiede anzeigen:

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 &uuml;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 &uuml;ber Mahngeb&uuml;hren und Zinsen f&uuml;r ein Mahnlevel aktiviert ist, so werden die folgenden Konten f&uuml;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&ouml;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 &quot;#1&quot;.' => '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&uuml;r die Artikelnummer und / oder die Beschreibung etwas eingeben, so werden nur die Lagerpl&auml;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&auml;&szlig;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 (&quot;#1&quot;). This database upgrade cannot create standard buchungsgruppen automatically.' => 'Diese Installation benutzt einen unbekannten Kontenrahmen (&quot;#1&quot;). 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 &Auml;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