_control_error($form, $file_name, sprintf($locale->text("Missing 'description' field."))) ;
}
+ delete @{$control}{qw(depth applied)};
+
+ my @unknown_keys = grep { !m{^ (?: depends | description | file | ignore | locales | may_fail | priority | tag ) $}x } keys %{ $control };
+ if (@unknown_keys) {
+ _control_error($form, $file_name, sprintf($locale->text("Unknown control fields: #1", join(' ', sort({ lc $a cmp lc $b } @unknown_keys)))));
+ }
+
$control->{"priority"} *= 1;
$control->{"priority"} ||= 1000;
$control->{"file"} = $file;
- delete @{$control}{qw(depth applied)};
-
$all_controls{$control->{"tag"}} = $control;
close(IN);
'Units that have already been used (e.g. for parts and services or in invoices or warehouse transactions) cannot be changed.' => 'Einheiten, die bereits in Benutzung sind (z.B. bei einer Warendefinition, einer Rechnung oder bei einer Lagerbuchung) können nachträglich nicht mehr verändert werden.',
'Unknown Category' => 'Unbekannte Kategorie',
'Unknown Link' => 'Unbekannte Verknüpfung',
+ 'Unknown control fields: #1' => 'Unbekannte Kontrollfelder: #1',
'Unknown dependency \'%s\'.' => 'Unbekannte Abhängigkeit \'%s\'.',
'Unknown module: #1' => 'Unbekanntes Modul #1',
'Unknown problem type.' => 'Unbekannter Problem-Typ',
-- @tag: add_api_token
-- @description: Feld 'api_token' in 'session' ergänzen
-- @depends:
--- @charset: utf-8
ALTER TABLE auth.session ADD COLUMN api_token text;
-- @tag: add_batch_printing_to_full_access
-- @description: Gruppe "Vollzugriff" Recht auf Stapeldruck-Menü gewähren
-- @depends:
--- @charset: utf-8
DELETE FROM auth.group_rights
WHERE ("right" = 'batch_printing')
AND group_id = (
-- @tag: add_master_rights
-- @description: Rechte in die Datenbank migrieren
-- @depends: release_3_2_0
--- @charset: utf-8
-- @locales: Master Data
-- @locales: Create customers and vendors. Edit all vendors. Edit only customers where salesman equals employee (login)
-- @locales: Create customers and vendors. Edit all vendors. Edit all customers
-- @tag: password_hashing
-- @description: Explicitely set a password hashing algorithm
-- @depends:
--- @charset: utf-8
UPDATE auth."user"
SET password = '{CRYPT}' || password
WHERE NOT (password IS NULL)
-- @tag: release_3_0_0
-- @description: Abhängigkeitsscript für Release 3.0.0
-- @depends: remove_menustyle_v4 remove_menustyle_xml add_batch_printing_to_full_access auth_schema_normalization_1 session_content_auto_restore add_api_token password_hashing
--- @charset: utf-8
-- @tag: release_3_2_0
-- @description: Abhängigkeitsscript für Release 3.2.0, bzw. vergessene 3.1.0
-- @depends: release_3_0_0 clients_webdav foreign_key_constraints_on_delete clients
--- @charset: utf-8
-- @tag: release_3_3_0
-- @description: Abhängigkeitsscript für Release 3.3.0
-- @depends: release_3_2_0 sales_letter_rights delivery_plan_rights requirement_spec_rights delivery_process_value bank_transaction_rights details_and_report_of_parts productivity_rights rights_for_showing_ar_and_ap_transactions
--- @charset: utf-8
-- @tag: release_3_4_0
-- @description: Abhängigkeitsscript für Release 3.4.0
-- @depends: release_3_3_0 client_task_server remove_insecurely_hashed_passwords session_content_primary_key
--- @charset: utf-8
-- @tag: release_3_5_0
-- @description: Abhängigkeitsscript für Release 3.5.0
-- @depends: release_3_4_0 record_links_rights other_file_sources2 mail_journal_rights purchase_letter_rights rename_general_ledger_rights all_drafts_edit
--- @charset: utf-8
-- @tag: remove_insecurely_hashed_passwords
-- @description: Passwörter löschen, die mit unsicheren Hash-Verfahren gehasht wurden
-- @depends: release_3_3_0
--- @charset: utf-8
UPDATE auth.user
SET password = '*'
WHERE (password IS NOT NULL)
-- @tag: remove_menustyle_v4
-- @description: Menütyp "CSS (oben, neu)" wurde entfernt; also durch v3 ersetzen
-- @depends:
--- @charset: utf-8
UPDATE auth.user_config
SET cfg_value = 'v3'
WHERE ((cfg_key = 'menustyle')
-- @tag: remove_menustyle_xml
-- @description: Menütyp "XUL/XML" wurde entfernt; also durch v3 ersetzen
-- @depends:
--- @charset: utf-8
UPDATE auth.user_config
SET cfg_value = 'v3'
WHERE ((cfg_key = 'menustyle')
-- @tag: rename_general_ledger_rights
-- @description: Umbennenung des general ledger Rechts
-- @depends: split_transaction_rights
--- @charset: utf-8
-- @locales: AP/AR Aging & Journal
UPDATE auth.master_rights SET description='AP/AR Aging & Journal' WHERE name='general_ledger';
-- @tag: session_content_auto_restore
-- @description: Spalte "auto_restore" in auth.session_content
-- @depends:
--- @charset: utf-8
ALTER TABLE auth.session_content ADD COLUMN auto_restore boolean;
UPDATE auth.session_content SET auto_restore = FALSE;
# @tag: split_transaction_rights
# @description: Finanzbuchhaltungsrechte für Buchungen aufspalten
# @depends: release_3_4_0 master_rights_position_gaps
-# @charset: utf-8
# @locales: General Ledger Transaction
# @locales: AR Transactions
# @locales: AP Transactions
-- @tag: bank_accounts_unique_chart_constraint
-- @description: Bankkonto - Constraint für eindeutiges Konto
-- @depends: release_3_2_0 bank_accounts
--- @encoding: utf-8
ALTER TABLE bank_accounts ADD CONSTRAINT chart_id_unique UNIQUE (chart_id);
-- @tag: bankaccounts_reconciliation
-- @description: Kontenabgleichsststartdatum und -saldo
-- @depends: release_3_2_0
--- @encoding: utf-8
ALTER TABLE bank_accounts ADD COLUMN reconciliation_starting_date DATE;
ALTER TABLE bank_accounts ADD COLUMN reconciliation_starting_balance numeric(15,5);
-- @tag: bankaccounts_sortkey_and_obsolete
-- @description: Bankkonto - Sortierreihenfolge und Ungültig
-- @depends: release_3_2_0
--- @encoding: utf-8
-- default false needed so that get_all_sorted( query => [ obsolete => 0 ] ) works
ALTER TABLE bank_accounts ADD COLUMN obsolete BOOLEAN NOT NULL DEFAULT false;
-- @tag: chart_pos_er
-- @description: pos_er Feld in Konten für die Position ind er Erfolgsrechnung
-- @depends: release_3_3_0
--- @encoding: utf-8
-- @may_fail: 1
ALTER TABLE chart ADD COLUMN pos_er INTEGER;
-- @tag: check_bin_belongs_to_wh_trigger
-- @description: Trigger, um sicher zu stellen, dass ein angegebener Lagerplatz auch zum Lager gehört.
-- @depends: delivery_orders warehouse
--- @encoding: utf-8
CREATE FUNCTION check_bin_belongs_to_wh() RETURNS "trigger"
AS 'BEGIN
-- @tag: csv_import_reports_add_numheaders
-- @description: Anzahl der Header-Zeilen in Csv Import Report speichern
-- @depends: csv_import_report_cache
--- @encoding: utf-8
ALTER TABLE csv_import_reports ADD COLUMN numheaders INTEGER;
UPDATE csv_import_reports SET numheaders = 1;
-- @tag: custom_variable_partsgroups
-- @description: Beziehung zwischen cvar configs und partsgroups für Filter nach Warengruppen
-- @depends: release_3_1_0
--- @charset: utf-8
CREATE TABLE custom_variable_config_partsgroups (
custom_variable_config_id integer NOT NULL,
-- @tag: customer_vendor_shipto_add_gln
-- @description: Spalte für GLN bei Kunde/Lieferant und Lieferadresse
-- @depends: release_3_3_0
--- @encoding: utf-8
ALTER TABLE customer ADD COLUMN gln TEXT;
ALTER TABLE vendor ADD COLUMN gln TEXT;
-- @tag: defaults_add_quick_search_modules
-- @description: Mandantenkonfiguration für Schnellsuche
-- @depends: release_3_4_0
--- @encoding: utf-8
ALTER TABLE defaults ADD COLUMN quick_search_modules TEXT[];
-- @tag: defaults_drop_delivery_plan_calculate_transferred_do
-- @description: Entferne Einstellung für Lieferplan, nur ausgelagerte Lieferscheine zu berücksichtigen
-- @depends: defaults_add_delivery_plan_config
--- @encoding: utf-8
ALTER TABLE defaults DROP COLUMN delivery_plan_calculate_transferred_do;
-- @tag: defaults_order_warn_duplicate_parts
-- @description: Mandantenkonfiguration: Warnung bei doppelten Artikeln in Aufträgen
-- @depends: release_3_3_0
--- @encoding: utf-8
ALTER TABLE defaults ADD COLUMN order_warn_duplicate_parts BOOLEAN DEFAULT TRUE;
-- @tag: delete_translations_on_delivery_term_delete
-- @description: Übersetzungen löschen, wenn Lieferbedingung gelöscht wird
-- @depends: delivery_terms
--- @encoding: utf-8
CREATE OR REPLACE FUNCTION generic_translations_delete_on_delivery_terms_delete_trigger()
RETURNS TRIGGER AS $$
-- @tag: delete_translations_on_payment_term_delete
-- @description: Übersetzungen löschen, wenn Lieferbedingung gelöscht wird
-- @depends: payment_terms_translation2
--- @encoding: utf-8
CREATE OR REPLACE FUNCTION generic_translations_delete_on_payment_terms_delete_trigger()
RETURNS TRIGGER AS $$
-- @tag: delete_translations_on_tax_delete
-- @description: Übersetzungen löschen, wenn Steuer gelöscht wird
-- @depends: release_3_0_0
--- @encoding: utf-8
CREATE OR REPLACE FUNCTION generic_translations_delete_on_tax_delete_trigger()
RETURNS TRIGGER AS $$
-- @tag: delivery_terms
-- @description: Neue Tabelle und Spalten für Lieferbedingungen
-- @depends: release_3_0_0
--- @encoding: utf-8
CREATE TABLE delivery_terms (
id integer NOT NULL DEFAULT nextval('id'),
-- @tag: drop_gifi_2
-- @description: Spalte gifi_accno vollständig entfernen
-- @depends: release_3_0_0 drop_gifi
--- @encoding: utf-8
ALTER TABLE "vendor" DROP COLUMN "gifi_accno";
-- @description: Obsolete Felder in employee entfernt und Datenfelder zum Speichern für die Historie der Mitarbeiter (nach Löschen eines Benutzer) hinzugefügt. Aktuell alle Felder die der Benutzer unter persönliche Einstellungen ändern kann
-- @depends: release_3_0_0
-- @ignore: 0
--- @charset: utf-8
ALTER TABLE employee DROP COLUMN addr1;
ALTER TABLE employee DROP COLUMN addr2;
ALTER TABLE employee DROP COLUMN addr3;
-- @tag: files
-- @description: Tabelle für Files
--- @charset: UTF-8
-- @depends: release_3_4_1
CREATE TABLE files(
id SERIAL PRIMARY KEY,
-- @tag: first_aggregator
-- @description: SQL Aggregat Funktion FIRST
-- @depends: release_3_0_0
--- @encoding: utf-8
CREATE OR REPLACE FUNCTION public.first_agg ( anyelement, anyelement )
RETURNS anyelement LANGUAGE SQL IMMUTABLE STRICT AS $$
-- @tag: get_shipped_qty_config
-- @description: Mandantenweite Konfiguration für das Verhalten von Liefermengenabgleich
-- @depends: release_3_4_1
--- @encoding: utf-8
ALTER TABLE defaults ADD COLUMN shipped_qty_require_stock_out BOOLEAN NOT NULL DEFAULT FALSE;
ALTER TABLE defaults ADD COLUMN shipped_qty_fill_up BOOLEAN NOT NULL DEFAULT TRUE;
-- @tag: inventory_fix_shippingdate_assemblies
-- @description: Shippingdate für assemblies und assembly_items nachträglich wie itime setzen.
-- @depends: release_3_4_0 warehouse transfer_type_assembled
--- @encoding: utf-8
update inventory set shippingdate = itime where comment ilike 'Verbraucht %' and shippingdate is null;
update inventory set shippingdate = itime where shippingdate is null and parts_id in (select id from parts where assembly);
-- @tag: inventory_shippingdate_not_null
-- @description: shippingdate not null, leeres shippingdate für nachträglich wie itime setzen
-- @depends: release_3_4_0 inventory_fix_shippingdate_assemblies
--- @encoding: utf-8
UPDATE inventory SET shippingdate = itime WHERE shippingdate IS NULL;
ALTER TABLE inventory ALTER COLUMN shippingdate SET NOT NULL;
# @tag: invoice_positions
# @description: Spalte für Positionen der Einträge in Rechnungen
# @depends: release_3_1_0
-# @encoding: utf-8
package SL::DBUpgrade2::invoice_positions;
use strict;
-- @tag: invoices_amount_paid_not_null
-- @description: Bei Rechnungen die drei Spalten "amount", "netamount" und "paid" auf NOT NULL setzen
-- @depends: release_3_2_0
--- @encoding: utf-8
UPDATE ar SET amount = 0 WHERE amount IS NULL;
ALTER TABLE ar ALTER COLUMN amount SET NOT NULL;
-- @tag: letter_date_type
-- @description: Briefe: Datumsfeld als Datum speichern
-- @depends: release_3_2_0 letter
--- @encoding: utf-8
ALTER TABLE letter ADD column date_date DATE;
UPDATE letter SET date_date = date::DATE;
ALTER TABLE letter DROP COLUMN date;
-- @tag: letter_vendorletter
-- @description: Briefe jetzt auch für Lieferanten
-- @depends: release_3_4_1
--- @encoding: utf-8
ALTER TABLE letter ALTER COLUMN customer_id DROP NOT NULL;
ALTER TABLE letter ADD COLUMN vendor_id INTEGER REFERENCES vendor(id);
-- @tag: oe_customer_vendor_fkeys
-- @description: Foreign Keys für customer und vendor in oe
-- @depends: release_2_6_3
--- @timestamp: 1317380460
UPDATE oe SET customer_id = NULL WHERE customer_id = 0;
UPDATE oe SET vendor_id = NULL WHERE vendor_id = 0;
# @tag: orderitems_delivery_order_items_positions
# @description: Spalte für Positionen der Einträge in Angeboten/Auftträgen und Lieferscheinen.
# @depends: release_3_1_0
-# @encoding: utf-8
package SL::DBUpgrade2::orderitems_delivery_order_items_positions;
use strict;
-- @tag: partsgroup_sortkey_obsolete
-- @description: Sortierreihenfolge und ungültig für Warengruppen
--- @charset: UTF-8
-- @depends: release_3_4_1
-- @ignore: 0
-- @tag: payment_terms_obsolete
-- @description: Zahlungsbedingungen ungültig setzen
--- @charset: UTF-8
-- @depends: release_3_4_1
-- @ignore: 0
-- @tag: periodic_invoices_first_billing_date
-- @description: Wiederkehrende Rechnungen: Feld für erstes Rechnungsdatum
-- @depends: periodic_invoices
--- @charset: utf-8
ALTER TABLE periodic_invoices_configs ADD COLUMN first_billing_date DATE;
-- @tag: price_rules
-- @description: Preismatrix Tabellen
-- @depends: release_3_1_0
--- @encoding: utf-8
CREATE TABLE price_rules (
id SERIAL PRIMARY KEY,
-- @tag: price_source_client_config
-- @description: Preisquellen: Preisquellen ausschaltbar per Mandant
-- @depends: release_3_1_0
--- @encoding: utf-8
ALTER TABLE defaults ADD disabled_price_sources TEXT[];
-- @tag: pricegroup_sortkey_obsolete
-- @description: Sortierreihenfolge und ungültig für Preisgruppen
--- @charset: UTF-8
-- @depends: release_3_4_1
-- @ignore: 0
-- @tag: project_mtime_trigger
-- @description: mtime-Trigger für Tabelle project hinzufügen.
-- @depends: release_3_3_0
--- @encoding: utf-8
CREATE TRIGGER mtime_project BEFORE UPDATE ON project FOR EACH ROW EXECUTE PROCEDURE set_mtime();
-- @tag: recorditem_active_record_source
-- @description: Preisquellen: Rabatte
-- @depends: release_3_1_0 recorditem_active_price_source
--- @encoding: utf-8
ALTER TABLE orderitems ADD COLUMN active_discount_source TEXT NOT NULL DEFAULT '';
ALTER TABLE delivery_order_items ADD COLUMN active_discount_source TEXT NOT NULL DEFAULT '';
-- @tag: recorditem_active_price_source
-- @description: Preisquelle in Belegpositionen
-- @depends: release_3_1_0
--- @encoding: utf-8
ALTER TABLE orderitems ADD COLUMN active_price_source TEXT NOT NULL DEFAULT '';
ALTER TABLE delivery_order_items ADD COLUMN active_price_source TEXT NOT NULL DEFAULT '';
-- @tag: remove_redundant_customer_vendor_delete_triggers
-- @description: Entfernt doppelte/falsche Trigger zum Aufräumen nach dem Löschen von Kunden/Lieferanten
-- @depends: release_3_1_0
--- @encoding: utf-8
-- drop triggers
DROP TRIGGER IF EXISTS del_customer ON customer;
-- @tag: remove_redundant_cvar_delete_triggers
-- @description: Entfernt doppelte Trigger zum Löschen von benutzerdefinierten Variablen
-- @depends: custom_variables_delete_via_trigger custom_variables_delete_via_trigger_2 delete_cvars_on_trans_deletion
--- @encoding: utf-8
-- drop triggers
DROP TRIGGER IF EXISTS delete_orderitems_dependencies ON orderitems;
-- @tag: sales_quotation_order_probability_expected_billing_date
--- @charset: utf-8
-- @description: Weitere Felder im Angebot: Angebotswahrscheinlichkeit, voraussichtliches Abrechnungsdatum
ALTER TABLE oe
ADD COLUMN order_probability INTEGER,
-- @tag: shop_parts
-- @description: Add tables for part information for shop
--- @charset: UTF-8
-- @depends: release_3_5_0 shops
-- @ignore: 0
-- @tag:shopimages
-- @description: Tabelle für Shopbilder und zusätzliche Konfiguration und valid_type für Filemanagement
--- @charset: UTF-8
-- @depends: release_3_5_0 files shop_parts
-- @ignore: 0
-- @tag:shopimages_2
-- @description: Umbennung der Spalten für Weite und Breite in die Weite und Breite des orginal Bildes
--- @charset: UTF-8
-- @depends: release_3_5_0 files shop_parts shopimages
-- @ignore: 0
-- @tag:shopimages_3
-- @description: Neue Spalte object_id um eine group_by Klausel zu haben für act_as_list
--- @charset: UTF-8
-- @depends: release_3_5_0 files shop_parts shopimages
-- @ignore: 0
-- @tag: shop_1
-- @description: Add tables for part information for shop
--- @charset: UTF-8
-- @depends: shops
-- @ignore: 0
-- @tag: shop_2
-- @description: Add tables for part information for shop
--- @charset: UTF-8
-- @depends: shops
-- @ignore: 0
-- @tag: shop_3
-- @description: Add columns itime and mtime and transaction_description for table shops
--- @charset: UTF-8
-- @depends: shops
-- @ignore: 0
-- @tag: transfer_out_sales_invoice
-- @description: Felder für das Feature "Auslagern beim Buchen von Verkaufsrechnungen".
-- @depends: warehouse_add_delivery_order_items_stock_id
--- @encoding: utf-8
ALTER TABLE inventory ADD COLUMN invoice_id INTEGER REFERENCES invoice(id);
ALTER TABLE defaults ADD COLUMN is_transfer_out BOOLEAN NOT NULL DEFAULT FALSE;
-- @tag: transfer_type_assembled
-- @description: Transfertyp "gefertigt" wird benötigt.
-- @depends: release_3_4_0 warehouse
--- @encoding: utf-8
INSERT INTO transfer_type (direction, description, sortkey) VALUES ('in', 'assembled', (SELECT COALESCE(MAX(sortkey), 0) + 1 FROM transfer_type));
-- @tag: trigram_indices
-- @description: Trigram Indizes für häufig durchsuchte Spalten
-- @depends: release_3_5_0 shops
--- @encoding: utf-8
-- @ignore: 1
-- @tag: trigram_indices_webshop
-- @description: Trigram Indizes für Fuzzysearch bei der Kundensuche im Shopmodul
-- @depends: release_3_5_0 shops
--- @encoding: utf-8
-- @ignore: 1
CREATE INDEX customer_street_gin_trgm_idx ON customer USING gin (street gin_trgm_ops);
-- @tag: user_preferences
-- @description: Benutzereinstellungen
-- @depends: release_3_4_1
--- @encoding: utf-8
CREATE TABLE user_preferences (
id SERIAL PRIMARY KEY,