From 607a807999fdcdbe8c15e43dd124fbe27b749651 Mon Sep 17 00:00:00 2001 From: Niclas Zimmermann Date: Mon, 15 Apr 2013 18:10:38 +0200 Subject: [PATCH] =?utf8?q?Enth=C3=A4lt=20Upgrade-Script=20f=C3=BCr=20einde?= =?utf8?q?utige=20Artikelnummern?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Dieses Upgrade Script setzt einen Unique-Constraint auf die Spale partnumer in der Tabelle parts. Falls es doppelte Artikelnummern gibt, wird das Update abgebrochen. Weiterhin wird ein neuer Nummernkreis für Erzeugnisse in die defaults eingefügt. --- locale/de/all | 8 +++ sql/Pg-upgrade2/erzeugnisnummern.pl | 62 +++++++++++++++++++ .../webpages/dbupgrade/erzeugnisnummern.html | 33 ++++++++++ 3 files changed, 103 insertions(+) create mode 100644 sql/Pg-upgrade2/erzeugnisnummern.pl create mode 100644 templates/webpages/dbupgrade/erzeugnisnummern.html diff --git a/locale/de/all b/locale/de/all index dbfe48de6..4b0b6d7cd 100644 --- a/locale/de/all +++ b/locale/de/all @@ -681,6 +681,7 @@ $self->{texts} = { 'Documentation (in German)' => 'Dokumentation', 'Documents in the WebDAV repository' => 'Dokumente im WebDAV-Repository', 'Done' => 'Fertig', + 'Double partnumbers' => 'Doppelte Artikelnummern', 'Download SEPA XML export file' => 'SEPA-XML-Exportdatei herunterladen', 'Download sample file' => 'Beispieldatei herunterladen', 'Download the backup' => 'Die Sicherungsdatei herunterladen', @@ -923,6 +924,7 @@ $self->{texts} = { 'Fristsetzung' => 'Fristsetzung', 'From' => 'Von', 'From Date' => 'Von', + 'From this version on the partnumer of articles and assemblies have to be unique.' => 'Ab dieser Version muss die Artikelnummer eindeutig sein.', 'From this version on the taxkey 0 must have a tax rate of 0 (for DATEV compatibility).' => 'Ab dieser Version muss der Steuerschlüssel 0 einen Steuersatz von 0% haben (auf Grund der DATEV-Kompatibilität).', 'Full Access' => 'Vollzugriff', 'Full Preview' => 'Alles', @@ -1384,6 +1386,7 @@ $self->{texts} = { 'Part Notes' => 'Bemerkungen', 'Part Number' => 'Artikelnummer', 'Part Number missing!' => 'Artikelnummer fehlt!', + 'Partnumber' => 'Artikelnummer', 'Partnumber must not be set to empty!' => 'Die Artikelnummer darf nicht auf leer geändert werden.', 'Partnumber not unique!' => 'Artikelnummer bereits vorhanden!', 'Parts' => 'Waren', @@ -1431,6 +1434,7 @@ $self->{texts} = { 'Please Check the bank information for each customer:' => 'Bitte überprüfen Sie die Bankinformationen der Kunden:', 'Please Check the bank information for each vendor:' => 'Bitte überprüfen Sie die Kontoinformationen der Lieferanten:', 'Please ask your administrator to create warehouses and bins.' => 'Bitten Sie Ihren Administrator, dass er Lager und Lagerplätze anlegt.', + 'Please change the partnumber of the following parts and run the update again:' => 'Bitte ändern Sie daher die Artikelnumer folgender Artikel:', 'Please contact your administrator or a service provider.' => 'Bitte kontaktieren Sie Ihren Administrator oder einen Dienstleister.', 'Please contact your administrator.' => 'Bitte wenden Sie sich an Ihren Administrator.', 'Please define a taxkey for the following taxes and run the update again:' => 'Bitte definieren Sie einen Steuerschlüssel für die folgenden Steuern und starten Sie dann das Update erneut:', @@ -1729,6 +1733,7 @@ $self->{texts} = { 'Service Items' => 'Dienstleistungen', 'Service Number missing!' => 'Dienstleistungsnummer fehlt!', 'Service unit' => 'Dienstleistungseinheit', + 'Service, assembly or part' => 'Dienstleistung, Erzeugnis oder Ware', 'Services' => 'Dienstleistungen', 'Set Language Values' => 'Spracheinstellungen', 'Set eMail text' => 'eMail Text eingeben', @@ -2077,6 +2082,7 @@ $self->{texts} = { 'There are #1 more open invoices from this vendor with other currencies.' => 'Es gibt #1 weitere offene Rechnungen von diesem Lieferanten, die in anderen Währungen ausgestellt wurden.', 'There are #1 unfinished follow-ups of which #2 are due.' => 'Es gibt #1 Wiedervorlage(n), von denen #2 fällig ist/sind.', 'There are bookings to the account 3803 after 01.01.2007. If you didn\'t change this account manually to 19% the bookings are probably incorrect.' => 'Das Konto 3803 wurde nach dem 01.01.2007 bebucht. Falls Sie dieses Konto nicht manuell auf 19% gestellt haben sind die Buchungen wahrscheinlich mit falscher Umsatzsteuer gebucht worden.', + 'There are double partnumbers in your database.' => 'In ihrer Datenbank befinden sich mehrfach vergebene Artikelnummern.', 'There are entries in tax where taxkey is NULL.' => 'In der Datenbank sind Steuern ohne Steuerschlüssel vorhanden (in der Tabelle tax Spalte taxkey).', 'There are four tax zones.' => 'Es gibt vier Steuerzonen.', 'There are invalid taxnumbers in use.' => 'Es werden ungültige Steuerautomatik-Konten benutzt.', @@ -2360,6 +2366,7 @@ $self->{texts} = { 'ap_aging_list' => 'liste_offene_verbindlichkeiten', 'ar_aging_list' => 'liste_offene_forderungen', 'as at' => 'zum Stand', + 'assembly' => 'Erzeugnis', 'assembly_list' => 'erzeugnisliste', 'averaged values, in invoice mode only useful when filtered by a part' => 'gemittelte Werte, im Rechnungsmodus nur sinnvoll wenn nach Artikel gefiltert wird', 'back' => 'zurück', @@ -2475,6 +2482,7 @@ $self->{texts} = { 'order' => 'Reihenfolge', 'our vendor number at customer' => 'Unsere Lieferanten-Nr. beim Kunden', 'parsing csv' => 'Parse CSV Daten', + 'part' => 'Ware', 'part_list' => 'Warenliste', 'percental' => 'prozentual', 'periodic' => 'Aufwandsmethode', diff --git a/sql/Pg-upgrade2/erzeugnisnummern.pl b/sql/Pg-upgrade2/erzeugnisnummern.pl new file mode 100644 index 000000000..11ba2ef84 --- /dev/null +++ b/sql/Pg-upgrade2/erzeugnisnummern.pl @@ -0,0 +1,62 @@ +# @tag: erzeugnisnummern +# @description: Erzeugnisnummern und Artikelnummern sollen eindeutig sein. +# @depends: release_3_0_0 +# @charset: utf-8 + +use utf8; +use strict; +use SL::Locale; + +die("This script cannot be run from the command line.") unless ($main::form); + +sub mydberror { + my ($msg) = @_; + die($dbup_locale->text("Database update error:") . "
$msg
" . $DBI::errstr); +} + +sub do_query { + my ($query, $may_fail) = @_; + + if (!$dbh->do($query)) { + mydberror($query) unless ($may_fail); + $dbh->rollback(); + $dbh->begin_work(); + } +} + +sub do_update { + my $query = qq|SELECT id, partnumber, description, unit, notes, assembly, ean, inventory_accno_id + FROM parts pa + WHERE (SELECT COUNT(*) + FROM parts p + WHERE p.partnumber=pa.partnumber) + > 1 + ORDER BY partnumber;|; + + my $sth = $dbh->prepare($query); + $sth->execute || $main::form->dberror($query); + + $main::form->{PARTS} = []; + while (my $ref = $sth->fetchrow_hashref("NAME_lc")) { + push @{ $main::form->{PARTS} }, $ref; + } + + if ( scalar @{ $main::form->{PARTS} } > 0 ) { + &print_error_message; + return 0; + } + + $query = qq|ALTER TABLE parts ADD UNIQUE (partnumber)|; + do_query($query); + + $query = qq|ALTER TABLE defaults ADD assemblynumber TEXT|; + do_query($query); + return 1; +}; # end do_update + + +sub print_error_message { + print $main::form->parse_html_template("dbupgrade/erzeugnisnummern"); +} + +return do_update(); diff --git a/templates/webpages/dbupgrade/erzeugnisnummern.html b/templates/webpages/dbupgrade/erzeugnisnummern.html new file mode 100644 index 000000000..6b465d00a --- /dev/null +++ b/templates/webpages/dbupgrade/erzeugnisnummern.html @@ -0,0 +1,33 @@ +[%- USE T8 %] +[% USE HTML %]
[% 'Double partnumbers' | $T8 %]
+ +
+ + +

[% 'There are double partnumbers in your database.' | $T8 %]

+

[% 'From this version on the partnumer of articles and assemblies have to be unique.' | $T8 %]

+ +

[% 'Please change the partnumber of the following parts and run the update again:' | $T8 %]

+ + + + + + + + + + + [% SET row_odd = '1' %][% FOREACH row = PARTS %] + + + + + + + + + [% END %] +
[% 'Partnumber' | $T8 %][% 'Description' | $T8 %][% 'Unit' | $T8 %][% 'Notes' | $T8 %][% 'EAN' | $T8 %][% 'Service, assembly or part' | $T8 %]
[% HTML.escape(row.partnumber) %] [% HTML.escape(row.description) %][% HTML.escape(row.unit) %][% HTML.escape(row.notes) %][% HTML.escape(row.ean) %][% IF row.assembly %] [% 'assembly' | $T8 %] [% ELSE %] [% IF row.inventory_accno_id %] [% 'part' | $T8 %] [% ELSE %] [% 'service' %] [% END %] [% END %]
+ +
-- 2.20.1