From: Niclas Zimmermann Date: Thu, 18 Apr 2013 11:55:35 +0000 (+0200) Subject: Merge branch 'master' of github.com:kivitendo/kivitendo-erp X-Git-Tag: release-3.1.0beta1~494 X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/commitdiff_plain/6c0a55aca160c95f56fd52196d946a0708a2c7b5?hp=c322b02aa716b4c27ca66bf9b4c1177f0a0996d8 Merge branch 'master' of github.com:kivitendo/kivitendo-erp Behebt einfach nur Conflicts. Conflicts: SL/TransNumber.pm --- diff --git a/SL/AM.pm b/SL/AM.pm index af2c25f91..502ebd905 100644 --- a/SL/AM.pm +++ b/SL/AM.pm @@ -1084,6 +1084,7 @@ sub save_defaults { vendornumber = ?, articlenumber = ?, servicenumber = ?, + assemblynumber = ?, sdonumber = ?, pdonumber = ?, curr = ?, @@ -1097,6 +1098,7 @@ sub save_defaults { $form->{sqnumber}, $form->{rfqnumber}, $form->{customernumber}, $form->{vendornumber}, $form->{articlenumber}, $form->{servicenumber}, + $form->{assemblynumber}, $form->{sdonumber}, $form->{pdonumber}, $currency, $form->{businessnumber}, $form->{weightunit}, diff --git a/SL/TransNumber.pm b/SL/TransNumber.pm index 22d96cd3f..859ca6865 100644 --- a/SL/TransNumber.pm +++ b/SL/TransNumber.pm @@ -69,8 +69,9 @@ sub _get_filters { } elsif ($type =~ /part|service|assembly/) { $filters{trans_number} = "partnumber"; $filters{numberfield} = $type eq 'service' ? 'servicenumber' : 'articlenumber'; + $filters{numberfield} = $type eq 'assembly' ? 'assemblynumber' : $filters{numberfield}; $filters{table} = "parts"; - $filters{where} = $type =~/assembly/ ? 'assembly ' : 'COALESCE(inventory_accno_id, 0) ' . ($type eq 'service' ? '=' : '<>') . ' 0'; + $filters{where} = 'COALESCE(inventory_accno_id, 0) ' . ($type eq 'service' ? '= 0' : '<> 0 OR assembly'); } return %filters; @@ -129,6 +130,10 @@ SQL ($business_number) = selectfirst_array_query($form, $self->dbh, qq|SELECT customernumberinit FROM business WHERE id = ?|, $self->business_id) if $self->business_id; my $number = $business_number; ($number) = selectfirst_array_query($form, $self->dbh, qq|SELECT $filters{numberfield} FROM defaults|) if !$number; + if ($filters{numberfield} eq 'assemblynumber' and length($number) < 1) { + $filters{numberfield} = 'articlenumber'; + ($number) = selectfirst_array_query($form, $self->dbh, qq|SELECT $filters{numberfield} FROM defaults|) if !$number; + } $number ||= ''; my $sequence = SL::PrefixedNumber->new(number => $number); diff --git a/locale/de/all b/locale/de/all index fc4697814..d75c99ff3 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', @@ -924,6 +925,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', @@ -1111,6 +1113,7 @@ $self->{texts} = { 'Languages and translations' => 'Sprachen und Übersetzungen', 'Last Action' => 'Letzte Aktivität', 'Last Article Number' => 'Letzte Artikelnummer', + 'Last Assembly Number' => 'Letzte Erzeugnisnummer', 'Last Cost' => 'Einkaufspreis', 'Last Credit Note Number' => 'Letzte Gutschriftnummer', 'Last Customer Number' => 'Letzte Kundennummer', @@ -1387,6 +1390,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', @@ -1434,6 +1438,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:', @@ -1732,6 +1737,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', @@ -2080,6 +2086,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.', @@ -2365,6 +2372,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', @@ -2480,6 +2488,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/am/edit_defaults.html b/templates/webpages/am/edit_defaults.html index 36033dbdf..248953cf3 100644 --- a/templates/webpages/am/edit_defaults.html +++ b/templates/webpages/am/edit_defaults.html @@ -49,11 +49,16 @@ [% 'Last RFQ Number' | $T8 %] + [% 'Last Assembly Number' | $T8 %] + [% 'Last Sales Delivery Order Number' | $T8 %] + + + [% 'Last Purchase Delivery Order Number' | $T8 %] 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 %]
+ +