package CVar;
use List::Util qw(first);
+use Data::Dumper;
use SL::DBUtils;
+use SL::MoreCommon qw(listify);
sub get_configs {
$main::lxdebug->enter_sub();
do_statement($form, $h_var, $q_var, @values);
$act_var = $h_var->fetchrow_hashref();
+
+ $act_var->{valid} = $self->get_custom_variables_validity(config_id => $cvar->{id}, trans_id => $params{trans_id});
}
if ($act_var) {
: $cvar->{type} eq 'number' ? $act_var->{number_value}
: $cvar->{type} eq 'bool' ? $act_var->{bool_value}
: $act_var->{text_value};
-
+ $cvar->{valid} = $act_var->{valid};
} else {
if ($cvar->{type} eq 'date') {
if ($cvar->{default_value} eq 'NOW') {
}
do_statement($form, $sth, $query, @values);
+
+ $self->save_custom_variables_validity(trans_id => $params{trans_id}, config_id => $config->{id},
+ validity => ($params{variables}->{"$params{name_prefix}cvar_$config->{name}$params{name_postfix}_valid"} ? 1 : 0)
+ );
}
$sth->finish();
foreach my $var (@{ $params{variables} }) {
$var->{HTML_CODE} = $form->parse_html_template('amcvar/render_inputs', { 'var' => $var, %options });
+ $var->{VALID_BOX} = "<input type=checkbox name='$options{name_prefix}cvar_$var->{name}$options{name_postfix}_valid'@{[!$var->{valid} ? ' checked' : '']}>";
}
$main::lxdebug->leave_sub();
return ($date_fields, $number_fields);
}
+=head2 VALIDITY
+
+Suppose the following scenario:
+
+You have a lot of parts in your database, and a set of properties cofigured. Now not every part has every of these properties, some combinations will just make no sense. In order to clean up your inputs a bit, you want to mark certain combinations as invalid, blocking them from modification and possibly display.
+
+Validity is assumed. If you modify validity, you actually save B<invalidity>.
+validity is saved as a function of config_id, and the trans_id
+
+In the naive way, disable an attribute for a specific id (simple)
+
+=cut
+sub save_custom_variables_validity {
+ $main::lxdebug->enter_sub();
+
+ my $self = shift;
+ my %params = @_;
+
+ Common::check_params(\%params, qw(config_id trans_id validity));
+
+ my $myconfig = \%main::myconfig;
+ my $form = $main::form;
+
+ my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig);
+
+ my (@where, @values);
+ add_token(\@where, \@values, col => "config_id", val => $params{config_id}, esc => \&conv_i);
+ add_token(\@where, \@values, col => "trans_id", val => $params{trans_id}, esc => \&conv_i);
+
+ my $where = scalar @where ? "WHERE " . join ' AND ', @where : '';
+ my $query = qq|DELETE FROM custom_variables_validity $where|;
+
+ do_query($form, $dbh, $query, @values);
+
+ $query =
+ qq|INSERT INTO custom_variables_validity (config_id, trans_id)
+ VALUES (?, ? )|;
+ my $sth = prepare_query($form, $dbh, $query);
+
+ unless ($params{validity}) {
+ foreach my $config_id (listify $params{config_id}) {
+ foreach my $trans_id (listify $params{trans_id}) {
+ do_statement($form, $sth, $query, conv_i($config_id), conv_i($trans_id));
+ }
+ }
+ }
+
+ $sth->finish();
+
+ $dbh->commit();
+
+ $main::lxdebug->leave_sub();
+}
+
+sub get_custom_variables_validity {
+ $main::lxdebug->enter_sub();
+
+ my $self = shift;
+ my %params = @_;
+
+ Common::check_params(\%params, qw(config_id trans_id));
+
+ my $myconfig = \%main::myconfig;
+ my $form = $main::form;
+
+ my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig);
+
+ my $query = qq|SELECT COUNT(*) FROM custom_variables_validity WHERE config_id = ? AND trans_id = ?|;
+
+ my ($validity) = selectfirst_array_query($form, $dbh, $query, conv_i($params{config_id}), conv_i($params{trans_id}));
+
+ $main::lxdebug->leave_sub();
+
+ return $validity;
+}
1;
'Active?' => 'Aktiviert?',
'Add' => 'Erfassen',
'Add ' => 'Hinzufügen',
- 'Add (Customers and Vendors)' => '',
- 'Add (Parts, services, assemblies)' => '',
- 'Add (Projects)' => '',
'Add AP Transaction' => 'Kreditorenbuchung',
'Add AR Transaction' => 'Debitorenbuchung',
'Add Account' => 'Konto erfassen',
'Add to group' => 'Zu Gruppe hinzufügen',
'Add unit' => 'Einheit hinzufügen',
'Address' => 'Adresse',
- 'Admin' => '',
'Administration' => 'Administration',
'Administration area' => 'Administrationsbereich',
'Advance turnover tax return' => 'Umsatzsteuervoranmeldung',
'Attachment name' => 'Name des Anhangs',
'Attempt to call an undefined sub named \'%s\'' => 'Es wurde versucht, eine nicht definierte Unterfunktion namens \'%s\' aufzurufen.',
'Audit Control' => 'Bücherkontrolle',
- 'Auftragschance' => '',
'Aug' => 'Aug',
'August' => 'August',
'Authentification database creation' => 'Anlegen der Datenbank zur Benutzerauthentifizierung',
'Batch Printing' => 'Druck',
'Bcc' => 'Bcc',
'Belegnummer' => 'Buchungsnummer',
- 'Benutzer' => '',
'Beratername' => 'Beratername',
'Beraternummer' => 'Beraternummer',
'Bestandskonto' => 'Bestandskonto',
- 'Bestellungen' => '',
'Bilanz' => 'Bilanz',
'Billing Address' => 'Rechnungsadresse',
'Billing/shipping address (city)' => 'Rechnungsadresse (Stadt)',
'CANCELED' => 'Storniert',
'CB Transaction' => 'SB-Buchung',
'CR' => 'H',
- 'CRM' => '',
'CRM admin' => 'Administration',
'CRM create customers, vendors and contacts' => 'Erfassen (Kunden, Lieferanten, Personen)',
'CRM follow up' => 'Wiedervorlage',
'Do you want to carry this shipping address over to the new purchase order so that the vendor can deliver the goods directly to your customer?' => 'Wollen Sie diese Lieferadresse in den neuen Lieferantenauftrag übernehmen, damit der Händler die Waren direkt an Ihren Kunden liefern kann?',
'Do you want to store the existing onhand values into a new warehouse?' => 'Möchten Sie die vorhandenen Mengendaten in ein Lager übertragen?',
'Documents in the WebDAV repository' => 'Dokumente im WebDAV-Repository',
- 'Dokumentvorlage' => '',
'Done' => 'Fertig',
'Download the backup' => 'Die Sicherungsdatei herunterladen',
'Draft saved.' => 'Entwurf gespeichert.',
'Ertrag' => 'Ertrag',
'Ertrag prozentual' => 'Ertrag prozentual',
'Escape character' => 'Escape-Zeichen',
- 'Etiketten' => '',
'Exact' => 'Genau',
'Exch' => 'Wechselkurs.',
'Exchangerate' => 'Wechselkurs',
'Group missing!' => 'Warengruppe fehlt!',
'Group saved!' => 'Warengruppe gespeichert!',
'Groups' => 'Warengruppen',
- 'Gruppen' => '',
'HTML' => 'HTML',
'HTML Templates' => 'HTML-Vorlagen',
'Has serial number' => 'Hat eine Serienummer',
'Help' => 'Hilfe',
'Here\'s an example command line:' => 'Hier ist eine Kommandozeile, die als Beispiel dient:',
'Hide by default' => 'Standardmäßig verstecken',
- 'Hilfe' => '',
'History' => 'Historie',
'History Search' => 'Historien Suche',
'History Search Engine' => 'Historien Suchmaschine',
'KNE-Export erfolgreich!' => 'KNE-Export erfolgreich!',
'KNr. beim Kunden' => 'KNr. beim Kunden',
'Keine Suchergebnisse gefunden!' => 'Keine Suchergebnisse gefunden!',
- 'Konfiguration' => '',
'Konten' => 'Konten',
'Kontonummernerweiterung (KNE)' => 'Kontonummernerweiterung (KNE)',
- 'Kunden' => '',
'L' => 'L',
'LIABILITIES' => 'PASSIVA',
'LP' => 'LP',
'License key' => 'Lizenzschlüssel',
'Licensed to' => 'Lizenziert für',
'Licenses' => 'Lizenzen',
- 'Lieferant' => '',
'Lieferungen' => 'Lieferungen',
'Limit part selection' => 'Artikelauswahl eingrenzen',
'Line Total' => 'Zeilensumme',
'Line endings' => 'Zeilenumbrüche',
- 'List (Customers and Vendors)' => '',
- 'List (Parts, services, assemblies)' => '',
- 'List (Projects)' => '',
+ 'List' => 'List',
'List Accounting Groups' => 'Buchungsgruppen anzeigen',
'List Accounts' => 'Konten anzeigen',
'List Businesses' => 'Kunden-/Lieferantentypen anzeigen',
'Lx-Office is about to update the database <b>[% HTML.escape(dbname) %]</b>. You should create a backup of the database before proceeding because the backup might not be reversible.' => 'Lx-Office wird gleich die Datenbank <b>[% HTML.escape(dbname) %]</b> aktualisieren. Sie sollten eine Sicherungskopie der Datenbank erstellen, bevor Sie fortfahren, da die Aktualisierung unter Umständen nicht umkehrbar ist.',
'Lx-Office is now able to manage warehouses instead of just tracking the amount of goods in your system.' => 'Lx-Office enthält jetzt auch echte Lagerverwaultung anstatt reiner Mengenzählung.',
'Lx-Office website' => 'Lx-Office-Webseite',
- 'MACSCAN' => '',
'MAILED' => 'Gesendet',
'MSG_BROWSER_DOES_NOT_SUPPORT_IFRAMES' => 'Ihr Browser kann leider keine eingebetteten Frames anzeigen. Bitte wählen Sie ein anderes Menü in der Benutzerkonfiguration im Administrationsmenü aus.',
'Main Preferences' => 'Grundeinstellungen',
'Mark closed' => 'Schließen',
'Marked as paid' => 'Als bezahlt markiert',
'Marked entries printed!' => 'Markierte Einträge wurden gedruckt!',
- 'Maschinen' => '',
- 'Maschinen erfassen' => '',
'Master Data' => 'Stammdaten',
'Max. Dunning Level' => 'höchste Mahnstufe',
'May' => 'Mai',
'Missing parameter #1 in call to sub #2.' => 'Fehlernder Parameter \'#1\' in Funktionsaufruf \'#2\'.',
'Missing parameter (at least one of #1) in call to sub #2.' => 'Fehlernder Parameter (mindestens einer aus \'#1\') in Funktionsaufruf \'#2\'.',
'Mitarbeiter' => 'Mitarbeiter',
- 'Mitteilungen' => '',
'Mobile1' => 'Mobile 1',
'Mobile2' => 'Mobile 2',
'Model' => 'Lieferanten-Art-Nr.',
'Nothing has been selected for transfer.' => 'Es wurde nichts zum Umlagern ausgewählt.',
'Nothing selected!' => 'Es wurde nichts ausgewählt!',
'Nothing to delete!' => 'Es konnte nichts gelöscht werden!',
- 'Notizen' => '',
'Nov' => 'Nov',
'November' => 'November',
'Now the user must select a single Buchungsgruppe for each part instead of three distinct accounts.' => 'Der Benutzer muss nun für jeden Artikel nur noch die Buchungsgruppe anstelle der drei einzelnen Konten auswählen.',
'Payment posted!' => 'Zahlung gebucht!',
'Payment terms deleted!' => 'Zahlungskonditionen gelöscht!',
'Payments' => 'Zahlungsausgänge',
- 'Pepper' => '',
'Period' => 'Zeitraum',
'Period:' => 'Zeitraum:',
'Personal settings' => 'Persönliche Einstellungen',
- 'Personen' => '',
'Pg Database Administration' => 'Datenbankadministration',
'Phone' => 'Telefon',
'Phone1' => 'Telefon 1 ',
'Save as new' => 'als neu speichern',
'Save draft' => 'Entwurf speichern',
'Saving the file \'%s\' failed. OS error message: %s' => 'Das Speichern der Datei \'%s\' schlug fehl. Fehlermeldung des Betriebssystems: %s',
- 'Schnellsuche' => '',
'Screen' => 'Bildschirm',
'Searchable' => 'Durchsuchbar',
'Select' => 'auswählen',
'Shipping Address' => 'Lieferadresse',
'Shipping Point' => 'Versandort',
'Shipto' => 'Lieferanschriften',
- 'Shop' => '',
'Shopartikel' => 'Shopartikel',
'Short' => 'Knapp',
'Show' => 'Zeigen',
'Skonto Terms' => 'Zahlungsziel Skonto',
'Sold' => 'Verkauft',
'Solution' => 'Lösung',
- 'Sonderflag' => '',
'Source' => 'Beleg',
'Source bin' => 'Quelllagerplatz',
'Spoolfile' => 'Druckdatei',
'Statement Balance' => 'Sammelrechnungsbilanz',
'Statement sent to' => 'Sammelrechnung verschickt an',
'Statements sent to printer!' => 'Sammelrechnungen an Drucker geschickt!',
- 'Status' => '',
'Step 1 of 3: Parts' => 'Schritt 1 von 3: Waren',
'Step 2 of 3: Services' => 'Schritt 2 von 3: Dienstleistungen',
'Step 3 of 3: Assemblies' => 'Schritt 3 von 3: Erzeugnisse',
'Template Code missing!' => 'Vorlagenkürzel fehlt!',
'Template database' => 'Datenbankvorlage',
'Templates' => 'Vorlagen',
- 'Termine' => '',
'Terms missing in row ' => '+Tage fehlen in Zeile ',
'Test connection' => 'Verbindung testen',
'Text field' => 'Textfeld',
'UStVa' => 'UStVa',
'UStVa Einstellungen' => 'UStVa Einstellungen',
'Unbalanced Ledger' => 'Bilanzfehler',
+ 'Unchecked custom variables will not appear in orders and invoices.' => 'Unmarkierte Variablen werden für diesen Artikel nicht in Aufträgen und Rechnungen angezeigt.',
'Unfinished follow-ups' => 'Nicht erledigte Wiedervorlagen',
'Unit' => 'Einheit',
'Unit missing.' => 'Die Einheit fehlt.',
'Warehouse management' => 'Lagerverwaltung/Bestandsveränderung',
'Warehouse saved.' => 'Lager gespeichert.',
'Warehouses' => 'Lager',
- 'Warenexport' => '',
'Warnings during template upgrade' => 'Warnungen bei Aktualisierung der Dokumentenvorlagen',
- 'Wartungsvertrag' => '',
- 'Wartungsvertrag erfassen' => '',
'WebDAV link' => 'WebDAV-Link',
'Weight' => 'Gewicht',
'Weight unit' => 'Gewichtseinheit',
'What type of item is this?' => 'Was ist dieser Artikel?',
'What\'s the <b>term</b> you\'re looking for?' => 'Nach welchem <b>Begriff</b> wollen Sie suchen?',
- 'Wiedervorlage' => '',
- 'Wissens-DB' => '',
'With Extension Of Time' => 'mit Dauerfristverlängerung',
'Workflow Delivery Order' => 'Workflow Lieferschein',
'Workflow purchase_order' => 'Workflow Lieferantenauftrag',
'down' => 'runter',
'drucken' => 'drucken',
'dunning_list' => 'mahnungsliste',
- 'eMail' => '',
'eMail Send?' => 'eMail-Versand?',
'eMail?' => 'eMail?',
'ea' => 'St.',
'emailed to' => 'gemailt an',
- 'erfassen' => '',
'female' => 'weiblich',
'follow_up_list' => 'wiedervorlageliste',
'for' => 'für',