Hilfetexte anzeigen; sehr viele Übersetzungen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 2 Mar 2011 16:55:40 +0000 (17:55 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 16 Jun 2011 07:29:54 +0000 (09:29 +0200)
SL/Controller/CsvImport.pm
SL/Controller/CsvImport/Base.pm
SL/Controller/CsvImport/CustomerVendor.pm
SL/Controller/CsvImport/Part.pm
locale/de/all
templates/webpages/csv_import/form.html

index 757110a..c2f2a6c 100644 (file)
@@ -18,7 +18,7 @@ use parent qw(SL::Controller::Base);
 use Rose::Object::MakeMethods::Generic
 (
  scalar => [ qw(type profile file all_profiles all_charsets sep_char all_sep_chars quote_char all_quote_chars escape_char all_escape_chars all_buchungsgruppen
-                import_status errors headers raw_data_headers data num_imported num_importable) ],
+                import_status errors headers raw_data_headers data num_imported num_importable worker displayable_columns) ],
 );
 
 __PACKAGE__->run_before('check_auth');
@@ -124,6 +124,8 @@ sub render_inputs {
 
   $self->all_buchungsgruppen(SL::DB::Manager::Buchungsgruppe->get_all_sorted);
 
+  $self->setup_help;
+
   $self->render('csv_import/form', title => $title);
 }
 
@@ -233,4 +235,11 @@ sub create_worker {
        :                                        die "Program logic error";
 }
 
+sub setup_help {
+  my ($self) = @_;
+
+  $self->create_worker->setup_displayable_columns;
+}
+
+
 1;
index 7d966c1..a52201b 100644 (file)
@@ -13,7 +13,7 @@ use parent qw(Rose::Object);
 use Rose::Object::MakeMethods::Generic
 (
  scalar                  => [ qw(controller file csv) ],
- 'scalar --get_set_init' => [ qw(profile existing_objects class manager_class cvar_columns all_cvar_configs all_languages payment_terms_by) ],
+ 'scalar --get_set_init' => [ qw(profile displayable_columns existing_objects class manager_class cvar_columns all_cvar_configs all_languages payment_terms_by) ],
 );
 
 sub run {
@@ -145,6 +145,39 @@ sub init_profile {
   $self->profile(\%profile);
 }
 
+sub add_displayable_columns {
+  my ($self, @columns) = @_;
+
+  my @cols       = @{ $self->controller->displayable_columns || [] };
+  my %ex_col_map = map { $_->{name} => $_ } @cols;
+
+  foreach my $column (@columns) {
+    if ($ex_col_map{ $column->{name} }) {
+      @{ $ex_col_map{ $column->{name} } }{ keys %{ $column } } = @{ $column }{ keys %{ $column } };
+    } else {
+      push @cols, $column;
+    }
+  }
+
+  $self->controller->displayable_columns([ sort { $a->{name} cmp $b->{name} } @cols ]);
+}
+
+sub setup_displayable_columns {
+  my ($self) = @_;
+
+  $self->add_displayable_columns(map { { name => $_ } } keys %{ $self->profile });
+}
+
+sub add_cvar_columns_to_displayable_columns {
+  my ($self) = @_;
+
+  return unless $self->can('all_cvar_configs');
+
+  $self->add_displayable_columns(map { { name        => 'cvar_' . $_->name,
+                                         description => $::locale->text('#1 (custom variable)', $_->description) } }
+                                     @{ $self->all_cvar_configs });
+}
+
 sub init_existing_objects {
   my ($self) = @_;
 
index 2fec131..df36d1d 100644 (file)
@@ -201,6 +201,13 @@ sub init_profile {
   return $profile;
 }
 
+sub setup_displayable_columns {
+  my ($self) = @_;
+
+  $self->SUPER::setup_displayable_columns;
+  $self->add_cvar_columns_to_displayable_columns;
+}
+
 # TODO:
 # salesman_id -- Kunden mit Typ 'Verkäufer', falls $::vertreter an ist, ansonsten Employees
 
index af3b107..69b1d45 100644 (file)
@@ -369,7 +369,7 @@ sub init_profile {
   my ($self) = @_;
 
   my $profile = $self->SUPER::init_profile;
-  delete @{$profile}{qw(type priceupdate)};
+  delete @{$profile}{qw(alternate assembly bom expense_accno_id income_accno_id inventory_accno_id makemodel priceupdate stockable type)};
 
   return $profile;
 }
@@ -386,4 +386,57 @@ sub save_objects {
   $self->SUPER::save_objects(data => $without_number);
 }
 
+sub setup_displayable_columns {
+  my ($self) = @_;
+
+  $self->SUPER::setup_displayable_columns;
+  $self->add_cvar_columns_to_displayable_columns;
+
+  $self->add_displayable_columns({ name => 'bin',                description => $::locale->text('Bin')                          },
+                                 { name => 'binding_max_qty',    description => $::locale->text('Binding Max Qty')              },
+                                 { name => 'buchungsgruppen_id', description => $::locale->text('Buchungsgruppe (database ID)') },
+                                 { name => 'buchungsgruppe',     description => $::locale->text('Buchungsgruppe (name)')        },
+                                 { name => 'description',        description => $::locale->text('Description')                  },
+                                 { name => 'drawing',            description => $::locale->text('Drawing')                      },
+                                 { name => 'ean',                description => $::locale->text('EAN')                          },
+                                 { name => 'formel',             description => $::locale->text('Formula')                      },
+                                 { name => 'gv',                 description => $::locale->text('Business Volume')              },
+                                 { name => 'has_sernumber',      description => $::locale->text('Has serial number')            },
+                                 { name => 'image',              description => $::locale->text('Image')                        },
+                                 { name => 'lastcost',           description => $::locale->text('Last Cost')                    },
+                                 { name => 'listprice',          description => $::locale->text('List Price')                   },
+                                 { name => 'microfiche',         description => $::locale->text('Microfiche')                   },
+                                 { name => 'min_sellprice',      description => $::locale->text('Minimum Sell Price')           },
+                                 { name => 'not_discountable',   description => $::locale->text('Not Discountable')             },
+                                 { name => 'notes',              description => $::locale->text('Notes')                        },
+                                 { name => 'obsolete',           description => $::locale->text('Obsolete')                     },
+                                 { name => 'onhand',             description => $::locale->text('On Hand')                      },
+                                 { name => 'packing_type_id',    description => $::locale->text('Packing type (database ID)')   },
+                                 { name => 'packing_type',       description => $::locale->text('Packing type (name)')          },
+                                 { name => 'partnumber',         description => $::locale->text('Part Number')                  },
+                                 { name => 'partsgroup_id',      description => $::locale->text('Partsgroup (database ID)')     },
+                                 { name => 'partsgroup',         description => $::locale->text('Partsgroup (name)')            },
+                                 { name => 'payment_id',         description => $::locale->text('Payment terms (database ID)')  },
+                                 { name => 'payment',            description => $::locale->text('Payment terms (name)')         },
+                                 { name => 'price_factor_id',    description => $::locale->text('Price factor (database ID)')   },
+                                 { name => 'price_factor',       description => $::locale->text('Price factor (name)')          },
+                                 { name => 'rop',                description => $::locale->text('ROP')                          },
+                                 { name => 'sellprice',          description => $::locale->text('Sellprice')                    },
+                                 { name => 'shop',               description => $::locale->text('Shopartikel')                  },
+                                 { name => 'unit',               description => $::locale->text('Unit')                         },
+                                 { name => 've',                 description => $::locale->text('Verrechnungseinheit')          },
+                                 { name => 'weight',             description => $::locale->text('Weight')                       },
+                                );
+
+  foreach my $language (@{ $self->all_languages }) {
+    $self->add_displayable_columns({ name        => 'description_' . $language->article_code,
+                                     description => $::locale->text('Description (translation for #1)', $language->description) },
+                                   { name        => 'notes_' . $language->article_code,
+                                     description => $::locale->text('Notes (translation for #1)', $language->description) });
+  }
+}
+
+# TODO:
+# Preisgruppen
+
 1;
index fe5b595..9207559 100644 (file)
@@ -13,6 +13,7 @@ $self->{texts} = {
   ' Date missing!'              => ' Datum fehlt!',
   ' Part Number missing!'       => ' Artikelnummer fehlt!',
   ' missing!'                   => ' fehlt!',
+  '#1 (custom variable)'        => '#1 (benutzerdefinierte Variable)',
   '#1 of #2 importable objects were imported.' => '#1 von #2 importierbaren Objekten wurden importiert.',
   '#1 prices were updated.'     => '#1 Preise wurden aktualisiert.',
   '*/'                          => '*/',
@@ -274,6 +275,7 @@ $self->{texts} = {
   'Bin From'                    => 'Quelllagerplatz',
   'Bin List'                    => 'Lagerliste',
   'Bin To'                      => 'Ziellagerplatz',
+  'Binding Max Qty'             => '',
   'Binding to the LDAP server as "#1" failed. Please check config/lx_office.conf.' => 'Die Anmeldung am LDAP-Server als "#1" schlug fehl. Bitte &uuml;berpr&uuml;fen Sie die Angaben in config/lx_office.conf.',
   'Bins saved.'                 => 'Lagerpl&auml;tze gespeichert.',
   'Bins that have been used in the past cannot be deleted anymore. For these bins there\'s no checkbox in the &quot;Delete&quot; column.' => 'Lagerpl&auml;tze, die bereits benutzt wurden, k&ouml;nnen nicht mehr gel&ouml;scht werden. Deswegen fehlt bei ihnen die Checkbox in der Spalte &quot;L&ouml;schen&quot;.',
@@ -291,6 +293,8 @@ $self->{texts} = {
   'Bought'                      => 'Gekauft',
   'Buchungsdatum'               => 'Buchungsdatum',
   'Buchungsgruppe'              => 'Buchungsgruppe',
+  'Buchungsgruppe (database ID)' => 'Buchungsgruppe (Datenbank-ID)',
+  'Buchungsgruppe (name)'       => 'Buchungsgruppe (Name)',
   'Buchungsgruppen'             => 'Buchungsgruppen',
   'Buchungskonto'               => 'Buchungskonto',
   'Buchungsnummer'              => 'Buchungsnummer',
@@ -387,6 +391,7 @@ $self->{texts} = {
   'Close Window'                => 'Fenster Schlie&szlig;en',
   'Closed'                      => 'Geschlossen',
   'Collective Orders only work for orders from one customer!' => 'Sammelaufträge funktionieren nur für Aufträge von einem Kunden!',
+  'Column name'                 => 'Spaltenname',
   'Comma'                       => 'Komma',
   'Comment'                     => 'Kommentar',
   'Company'                     => 'Firma',
@@ -564,6 +569,7 @@ $self->{texts} = {
   'Deposit'                     => 'Gutschrift',
   'Description'                 => 'Beschreibung',
   'Description (Click on Description for details)' => 'Beschreibung (Klick öffnet einzelne Kontendetails)',
+  'Description (translation for #1)' => 'Beschreibung (Übersetzung für #1)',
   'Description missing!'        => 'Beschreibung fehlt.',
   'Description must not be empty!' => 'Beschreibung darf nicht leer sein',
   'Destination BIC'             => 'Ziel-BIC',
@@ -728,9 +734,18 @@ $self->{texts} = {
   'Error message from the database driver:' => 'Fehlermeldung des Datenbanktreibers:',
   'Error when saving: #1'       => 'Fehler beim Speichern: #2',
   'Error!'                      => 'Fehler!',
+  'Error: Buchungsgruppe missing or invalid' => 'Fehler: Buchungsgruppe fehlt oder ungültig',
   'Error: Customer/vendor not found' => 'Fehler: Kunde/Lieferant nicht gefunden',
   'Error: Gender (cp_gender) missing or invalid' => 'Fehler: Geschlecht (cp_gender) fehlt oder ungültig',
+  'Error: Invalid business'     => 'Fehler: Kunden-/Lieferantentyp ungültig',
+  'Error: Invalid language'     => 'Fehler: Sprache ungültig',
+  'Error: Invalid packing type' => 'Fehler: Packtyp ungültig',
+  'Error: Invalid part type'    => 'Fehler: Artikeltyp ungültig',
+  'Error: Invalid parts group'  => 'Fehler: Warengruppe ungültig',
+  'Error: Invalid payment terms' => 'Fehler: Zahlungsbedingungen ungültig',
+  'Error: Invalid price factor' => 'Fehler: Preisfaktor ungültig',
   'Error: Name missing'         => 'Fehler: Name fehlt',
+  'Error: Unit missing or invalid' => 'Fehler: Einheit fehlt oder ungültig',
   'Errors'                      => 'Fehler',
   'Ertrag'                      => 'Ertrag',
   'Ertrag prozentual'           => 'Ertrag prozentual',
@@ -849,8 +864,10 @@ $self->{texts} = {
   'Headings'                    => 'Überschriften',
   'Help'                        => 'Hilfe',
   'Help Template Variables'     => 'Hilfe zu Dokumenten-Variablen',
+  'Help on column names'        => 'Hilfe zu Spaltennamen',
   'Here\'s an example command line:' => 'Hier ist eine Kommandozeile, die als Beispiel dient:',
   'Hide by default'             => 'Standardm&auml;&szlig;ig verstecken',
+  'Hide help text'              => 'Hilfetext vergeben',
   'History'                     => 'Historie',
   'History Search'              => 'Historien Suche',
   'History Search Engine'       => 'Historien Suchmaschine',
@@ -964,7 +981,6 @@ $self->{texts} = {
   'Konten'                      => 'Konten',
   'Kontonummernerweiterung (KNE)' => 'Kontonummernerweiterung (KNE)',
   'L'                           => 'L',
-  'LANGUAGES'                   => '',
   'LIABILITIES'                 => 'PASSIVA',
   'LP'                          => 'LP',
   'LaTeX Templates'             => 'LaTeX-Vorlagen',
@@ -1068,6 +1084,7 @@ $self->{texts} = {
   'May'                         => 'Mai',
   'May '                        => 'Mai',
   'May set the BCC field when sending emails' => 'Beim Verschicken von Emails das Feld \'BCC\' setzen',
+  'Meaning'                     => 'Bedeutung',
   'Medium Number'               => 'Datentr&auml;gernummer',
   'Memo'                        => 'Memo',
   'Menu'                        => 'Men&uuml;',
@@ -1075,6 +1092,7 @@ $self->{texts} = {
   'Method'                      => 'Verfahren',
   'Microfiche'                  => 'Mikrofilm',
   'Minimum Amount'              => 'Mindestbetrag',
+  'Minimum Sell Price'          => '',
   'Miscellaneous'               => 'Verschiedenes',
   'Missing \'description\' field.' => 'Fehlendes Feld \'description\'.',
   'Missing \'tag\' field.'      => 'Fehlendes Feld \'tag\'.',
@@ -1165,6 +1183,7 @@ $self->{texts} = {
   'Note: For Firefox 4 and later the menu XUL menu requires the addon <a href="#1">Remote XUL Manager</a> and the Lx-Office server to be white listed.' => 'Bitte beachten: Ab Firefox 4 benötigt das XUL Menü das Addon <a href="#1">Remote XUL Manager</a>, in dem der Lx-Office Server eingetragen sein muss.',
   'Note: Taxkeys must have a "valid from" date, and will not behave correctly without.' => 'Hinweis: Steuerschlüssel sind fehlerhaft ohne "Gültig ab" Datum',
   'Notes'                       => 'Bemerkungen',
+  'Notes (translation for #1)'  => 'Bemerkungen (Übersetzung für #1)',
   'Notes (will appear on hard copy)' => 'Bemerkungen',
   'Nothing has been selected for removal.' => 'Es wurde nichts f&uuml;r eine Entnahme ausgew&auml;hlt.',
   'Nothing has been selected for transfer.' => 'Es wurde nichts zum Umlagern ausgew&auml;hlt.',
@@ -1235,6 +1254,8 @@ $self->{texts} = {
   'POSTED AS NEW'               => 'Als neu gebucht',
   'PRINTED'                     => 'Gedruckt',
   'Packing Lists'               => 'Lieferschein',
+  'Packing type (database ID)'  => 'Pack-Typ (Datenbank-ID)',
+  'Packing type (name)'         => 'Pack-Typ (Name)',
   'Page #1/#2'                  => 'Seite #1/#2',
   'Paid'                        => 'bezahlt',
   'Part'                        => 'Ware',
@@ -1250,6 +1271,8 @@ $self->{texts} = {
   'Parts must have an entry type.' => 'Waren m&uuml;ssen eine Buchungsgruppe haben.',
   'Parts with existing part numbers' => 'Artikel mit existierender Artikelnummer',
   'Parts, services and assemblies' => 'Waren, Dienstleistungen und Erzeugnisse',
+  'Partsgroup (database ID)'    => 'Warengruppe (Datenbank-ID)',
+  'Partsgroup (name)'           => 'Warengruppe (Name)',
   'Password'                    => 'Passwort',
   'Payables'                    => 'Verbindlichkeiten',
   'Payment'                     => 'Zahlungsausgang',
@@ -1262,7 +1285,9 @@ $self->{texts} = {
   'Payment list as PDF'         => 'Zahlungsliste als PDF',
   'Payment posted!'             => 'Zahlung gebucht!',
   'Payment terms'               => 'Zahlungsbedingungen',
-  'Payments'                    => 'Zahlungsausgänge',
+  'Payment terms (database ID)' => 'Zahlungsbedingungen (Datenbank-ID)',
+  'Payment terms (name)'        => 'Zahlungsbedingungen (Name)',
+  'Payments'                    => 'Zahlungsausgünge',
   'Per. Inv.'                   => 'Wied. Rech.',
   'Period'                      => 'Zeitraum',
   'Period:'                     => 'Zeitraum:',
@@ -1327,6 +1352,8 @@ $self->{texts} = {
   'Price'                       => 'Preis',
   'Price Factor'                => 'Preisfaktor',
   'Price Factors'               => 'Preisfaktoren',
+  'Price factor (database ID)'  => 'Preisfaktor (Datenbank-ID)',
+  'Price factor (name)'         => 'Preisfaktor (Name)',
   'Price factor deleted!'       => 'Preisfaktor gel&ouml;scht.',
   'Price factor saved!'         => 'Preisfaktor gespeichert.',
   'Pricegroup'                  => 'Preisgruppe',
@@ -1529,6 +1556,7 @@ $self->{texts} = {
   'Selection'                   => 'Auswahlbox',
   'Selection fields: The option field must contain the available options for the selection. Options are separated by \'##\', for example \'Early##Normal##Late\'.' => 'Auswahlboxen: Das Optionenfeld muss die f&uuml;r die Auswahl verf&uuml;gbaren Eintr&auml;ge enthalten. Die Eintr&auml;ge werden mit \'##\' voneinander getrennt. Beispiel: \'Fr&uuml;h##Normal##Sp&auml;t\'.',
   'Sell Price'                  => 'Verkaufspreis',
+  'Sellprice'                   => '',
   'Sellprice adjustment'        => 'Verkaufspreis: Preisanpassung',
   'Sellprice significant places' => 'Verkaufspreis: Nachkommastellen',
   'Semicolon'                   => 'Semikolon',
@@ -1563,6 +1591,7 @@ $self->{texts} = {
   'Show custom variable search inputs' => 'Suchoptionen für Benutzerdefinierte Variablen verstecken',
   'Show details'                => 'Detailsanzeige',
   'Show follow ups...'          => 'Zeige Wiedervorlagen...',
+  'Show help text'              => 'Hilfetext anzeigen',
   'Show old dunnings'           => 'Alte Mahnungen anzeigen',
   'Show overdue sales quotations and requests for quotations...' => 'Überfällige Angebote und Preisanfragen anzeigen...',
   'Show your TODO list after loggin in' => 'Aufgabenliste nach dem Anmelden anzeigen',
index 5c26509..1fed864 100644 (file)
 
   <hr>
 
+  <h2>[%- LxERP.t8('Help on column names') %]</h2>
+
+  <div class="help_toggle">
+   <a href="#" onClick="javascript:$('.help_toggle').toggle()">[% LxERP.t8("Show help text") %]</a>
+  </div>
+
+  <div class="help_toggle" style="display:none">
+   <p><a href="#" onClick="javascript:$('.help_toggle').toggle()">[% LxERP.t8("Hide help text") %]</a></p>
+
+   <p><b>Dieser Hilfetext wird demnaechst noch verbessert und wandert vermutlich in ein Popup.</b></p>
+
+   <table>
+    <tr class="listheading">
+     <th>[%- LxERP.t8('Column name') %]</th>
+     <th>[%- LxERP.t8('Meaning') %]</th>
+    </tr>
+
+    [%- FOREACH row = SELF.displayable_columns %]
+     <tr class="listrow[% loop.count % 2 %]">
+      <td>[%- HTML.escape(row.name) %]</td>
+      <td>[%- HTML.escape(row.description) %]</td>
+     </tr>
+    [%- END %]
+   </table>
+  </div>
+
+  <hr>
+
   <h2>[%- LxERP.t8('Settings') %]</h2>
 
   <table>