From: Moritz Bunkus Date: Wed, 29 Nov 2006 14:33:31 +0000 (+0000) Subject: Interaktives Datenbankupgrade zur Einfuehrung von Mass- und Dienstleistungseinheiten. X-Git-Tag: release-2.4.0^2~145 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=3d6e7124dcbe401fe578d777f952f74055a68fd4;p=kivitendo-erp.git Interaktives Datenbankupgrade zur Einfuehrung von Mass- und Dienstleistungseinheiten. --- diff --git a/SL/User.pm b/SL/User.pm index 775453655..d756a2ac8 100644 --- a/SL/User.pm +++ b/SL/User.pm @@ -114,8 +114,12 @@ sub login { if ($self->{login}) { if ($self->{password}) { - $form->{password} = crypt $form->{password}, - substr($self->{login}, 0, 2); + if ($form->{hashed_password}) { + $form->{password} = $form->{hashed_password}; + } else { + $form->{password} = crypt($form->{password}, + substr($self->{login}, 0, 2)); + } if ($self->{password} ne $form->{password}) { $main::lxdebug->leave_sub(); return -1; @@ -169,7 +173,7 @@ sub login { $!"; map { $form->{$_} = $myconfig{$_} } - qw(dbname dbhost dbport dbdriver dbuser dbpasswd); + qw(dbname dbhost dbport dbdriver dbuser dbpasswd dbconnect); $form->{dbupdate} = "db$myconfig{dbname}"; $form->{ $form->{dbupdate} } = 1; diff --git a/css/lx-office-erp.css b/css/lx-office-erp.css index ac67cf395..8d8ad3d96 100644 --- a/css/lx-office-erp.css +++ b/css/lx-office-erp.css @@ -151,6 +151,12 @@ body.menu { } +.subsubheading { + color: black; + font-weight: bolder; + text-decoration: underline; +} + .optionen { border:dashed; /* padding-top:10px; diff --git a/locale/de/all b/locale/de/all index 87464cbbd..0ccd701ee 100644 --- a/locale/de/all +++ b/locale/de/all @@ -110,6 +110,8 @@ aktualisieren wollen?', 'Assemblies restocked!' => 'Erzeugnisse sind im Lager!', 'Assembly Number missing!' => 'Erzeugnisnummer fehlt!', 'Asset' => 'Aktiva/Mittelverwendung', + 'Assign new units' => 'Neue Einheiten zuweisen', + 'Assign units' => 'Einheiten zuweisen', 'Attach PDF:' => 'PDF anhängen', 'Attachment' => 'als Anhang', 'Audit Control' => 'Bücherkontrolle', @@ -128,6 +130,7 @@ aktualisieren wollen?', 'BLZ: ' => 'BLZ: ', 'BOM' => 'Stückliste', 'BWA' => 'BWA', + 'Back' => 'Zurück', 'Back to user config...' => 'Benutzereinstellungen', 'Backup sent to' => 'Eine Sicherungskopie wurde gesandt an', 'Balance' => 'Bilanz', @@ -259,6 +262,7 @@ aktualisieren wollen?', 'Current' => 'Betrag', 'Current / Next Level' => 'Aktuelles / Nächstes Mahnlevel', 'Current Earnings' => 'Gewinn', + 'Current unit' => 'Aktuelle Einheit', 'Customer' => 'Kunde', 'Customer Number' => 'Kundennummer', 'Customer Order Number' => 'Bestellnummer des Kunden', @@ -281,6 +285,7 @@ aktualisieren wollen?', 'Database Driver not checked!' => 'Kein Datenbanktreiber ausgewählt!', 'Database Host' => 'Datenbankcomputer', 'Database User missing!' => 'Datenbankbenutzer fehlt!', + 'Database update error:' => '', 'Datapreis' => '', 'Dataset' => 'Datenbank', 'Dataset missing!' => 'Datenbank fehlt!', @@ -317,6 +322,7 @@ aktualisieren wollen?', 'Description missing!' => 'Beschreibung fehlt.', 'Description must not be empty!' => 'Beschreibung darf nicht leer sein', 'Difference' => 'Differenz', + 'Dimension unit' => 'Maßeinheit', 'Dimension units' => 'Maßeinheiten', 'Directory' => 'Verzeichnis', 'Discount' => 'Rabatt', @@ -402,6 +408,7 @@ gestartet', 'Erlöse EU m. UStId' => 'Erlöse EU m. UStId', 'Erlöse EU o. UStId' => 'Erlöse EU o. UStId', 'Erlöse Inland' => 'Erlöse Inland', + 'Error' => 'Fehler', 'Error!' => 'Fehler!', 'Exch' => 'Wechselkurs.', 'Exchangerate' => 'Wechselkurs', @@ -429,6 +436,7 @@ gestartet', 'Finanzamt - Einstellungen' => 'Finanzamt - Einstellungen', 'Firma' => 'Firma', 'Folgekonto' => 'Folgekonto', + 'For each unit there\'s either no or exactly one base unit. If you chose a base unit then you also have to chose a factor. That way the new unit will be defined as a multiple of the base unit. The base unit must be the "smaller" one. A factor may not be less than 1. Therefore you may define "kg" with the base unit "g" and a factor of "1", but not the other way round.' => 'Einheiten haben entweder keine oder genau eine Basiseinheit, von der sie ein Vielfaches sind. Wenn Sie eine Basiseinheit auswählen, dann müssen Sie auch einen Faktor eingeben. Sie müssen Einheiten als ein Vielfaches einer kleineren Einheit eingeben. So ist die Definition von "kg" mit der Basiseinheit "g" und dem Faktor 1000 zulässig, die Definition von "g" mit der Basiseinheit "kg" und dem Faktor "0,001" hingegen nicht.', 'Foreign Exchange Gain' => 'Wechselkurserträge', 'Foreign Exchange Loss' => 'Wechselkursaufwendungen', 'Formula' => '', @@ -473,6 +481,7 @@ gestartet', 'Import Datanorm' => '', 'Impossible to create yearly Tax Report as PDF or PS.
Not yet implemented!' => 'Umsatzsteuer Jahreserklärung als PDF wird noch nicht unterstützt.
Bitte benutzen Sie das Ausgabeformat Vorschau.', 'Impossible to create yearly Tax Report via Winston.
Not yet implemented!' => 'Umsatzsteuer Jahreserklärung via Winston wird noch nicht unterstützt.
Bitte benutzen Sie das Ausgabeformat Vorschau.', + 'In Lx-Office 2.4.0 the administrator has to enter a list of units in the administrative section.' => 'In Lx-Office 2.4.0 muss der Administrator in den Systemeinstellungen eine Liste von verwendbaren Einheiten angeben.', 'In-line' => 'im Text', 'Include Exchangerate Difference' => 'Wechselkursunterschied einbeziehen', 'Include in Report' => 'In Bericht aufnehmen', @@ -489,6 +498,7 @@ gestartet', 'Interest Rate' => 'Zinssatz', 'Internal Notes' => 'interne Bemerkungen', 'Internet' => 'Internet', + 'Introduction of units' => 'Einführung von Einheiten', 'Inv. Duedate' => '', 'Invdate' => 'Rechnungsdatum', 'Invdate from' => 'Rechnungen von', @@ -510,6 +520,7 @@ gestartet', 'Invoices' => 'Rechnungen', 'Is this a summary account to record' => 'Buchungskonto in', 'Ist dies eine berichtigte Anmeldung? (Nr. 10/Zeile 15 Steuererklärung)' => 'Ist dies eine berichtigte Anmeldung? (Nr. 10/Zeile 15 Steuererklärung)', + 'It is possible to do this automatically for some units, but for others the user has to chose the new unit.' => 'Das ist für einige Einheiten automatisch möglich, aber bei anderen muss der Benutzer die neue Einheit auswählen.', 'Item deleted!' => 'Artikel gelöscht!', 'Item not on file!' => 'Dieser Artikel ist nicht in der Datenbank!', 'Jan' => 'Jan', @@ -611,6 +622,7 @@ gestartet', 'Name missing!' => 'Name fehlt!', 'Netto Terms' => 'Zahlungsziel netto', 'New Templates' => 'neue Vorlagen', + 'New unit' => 'Neue Einheit', 'Next Dunning Level' => 'Nächste Mahnstufe', 'No' => 'Nein', 'No Customer was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Endkunde gefunden', @@ -619,9 +631,11 @@ gestartet', 'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein Händler gefunden', 'No email address for' => 'Keine eMailaddresse für', 'No employee was found matching the search parameters.' => 'Es wurde kein Angestellter gefunden, auf den die Suchparameter zutreffen.', + 'No entries were found which had no unit assigned to them.' => 'Es wurden keine Einträge gefunden, denen keine Einheit zugeordnet war.', 'No licenses were found that match the search criteria.' => 'Es wurden keine Lizenzen gefunden, auf die die Suchkriterien zutreffen.', 'No part was found matching the search parameters.' => 'Es wurde kein Artikel gefunden, auf den die Suchparameter zutreffen.', 'No project was found matching the search parameters.' => 'Es wurde kein Projekt gefunden, auf das die Suchparameter zutreffen.', + 'No unknown units where found.' => 'Es wurden keine unbekannten Einheiten gefunden.', 'No.' => 'Position', 'Non-taxable Purchases' => 'Nicht zu versteuernde Einkäufe', 'Non-taxable Sales' => 'Nicht zu versteuernde Verkäufe', @@ -734,6 +748,7 @@ gestartet', 'Printer deleted!' => 'Drucker gelöscht!', 'Printer saved!' => 'Drucker gespeichert!', 'Printing ... ' => 'Es wird gedruckt.', + 'Prior to Lx-Office v2.4.0 the user could enter arbitrary strings as units for parts, services and in invoices, sales quotations etc.' => 'Vor Lx-Office 2.4.0 konnte der Benutzer bei Artikeln, Dienstleistungen und Rechnungen, Angeboten etc beliebige Einheiten angeben.', 'Private E-mail' => 'Private eMail', 'Private Phone' => 'Privates Tel.', 'Profit Center' => 'Erfolgsbereich', @@ -839,6 +854,7 @@ gestartet', 'Service' => 'Dienstleistung', 'Service Items' => 'Dienstleistungen', 'Service Number missing!' => 'Dienstleistungsnummer fehlt!', + 'Service unit' => 'Dienstleistungseinheit', 'Service units' => 'Dienstleistungseinheiten', 'Services' => 'Dienstleistungen', 'Set Language Values' => 'Spracheinstellungen', @@ -870,6 +886,9 @@ gestartet', 'Statement Balance' => 'Sammelrechnungsbilanz', 'Statement sent to' => 'Sammelrechnung verschickt an', 'Statements sent to printer!' => 'Sammelrechnungen an Drucker geschickt!', + 'Step 1 of 3: Parts' => 'Schritt 1 von 3: Waren', + 'Step 2 of 3: Services' => 'Schritt 2 von 3: Dienstleistungen', + 'Step 3 of 3: Default units' => 'Schritt 3 von 3: Standardeinheiten', 'Steuerberater/-in' => 'Steuerberater/-in', 'Steuernummer' => 'Steuernummer', 'Steuernummer: ' => 'Steuernummer: ', @@ -911,10 +930,13 @@ gestartet', 'The base unit does not exist.' => 'Die Basiseinheit existiert nicht.', 'The base unit relations must not contain loops (e.g. by saying that unit A\'s base unit is B, B\'s base unit is C and C\'s base unit is A) in row %d.' => 'Die Beziehungen der Einheiten dürfen keine Schleifen beinhalten (z.B. wenn gesagt wird, dass Einheit As Basiseinheit B, Bs Basiseinheit C und Cs Basiseinheit A ist) in Zeile %d.', 'The database update/creation did not succeed. The file contained the following error:' => 'Die Datenbankaktualisierung/erstellung schlug fehl. Die Datei enthielt den folgenden Fehler:', + 'The database upgrade for the introduction of units is now complete.' => 'Das Datenbankupgrade zwecks Einführung von Einheiten ist nun beendet.', 'The factor is missing in row %d.' => 'Der Faktor fehlt in Zeile %d.', 'The factor is missing.' => 'Der Faktor fehlt.', 'The following Datasets are not in use and can be deleted' => 'Die folgenden Datenbanken sind nicht in Verwendung und können gelöscht werden', 'The following Datasets need to be updated' => 'Folgende Datenbanken müssen aktualisiert werden', + 'The following units are unknown.' => 'Die folgenden Einheiten sind unbekannt.', + 'The following units exist already:' => 'Die folgenden Einheiten existieren bereits:', 'The formula needs the following syntax:
For regular article:
Variablename= Variable Unit;
Variablename2= Variable2 Unit2;
...
###
Variable + ( Variable2 / Variable )
Please be beware of the spaces in the formula

For alu article:
Length:
Weight/m:
Length ist total length of article and weight/m ist the weight pro meter' => 'Die Formeln müssen in der folgenden Syntax eingegeben werden:
Bei normalen Artikeln:
Variablenname= Variable Einheit;
Variablenname2= Variable2 Einheit2;
...
###
Variable + Variable2 * ( Variable - Variable2 )
Bitte achten Sie auf die Leerzeichen in der Formel

Bei Aluminiumartikeln:
Länge: x
Gewicht/m: y
x ist die Gesamtlänge des Artikels in Meter und y das Gewicht pro Meter. Es muss jeweils die Gesamtezeile eingegeben werden', 'The licensing module has been deactivated in lx-erp.conf.' => 'Das Lizenzverwaltungsmodul wurde in lx-erp.conf deaktiviert.', 'The name in row %d has already been used before.' => 'Der Name in Zeile %d wurde vorher bereits benutzt.', @@ -924,7 +946,10 @@ gestartet', 'The unit in row %d has been deleted in the meantime.' => 'Die Einheit in Zeile %d ist in der Zwischentzeit gelöscht worden.', 'The unit in row %d has been used in the meantime and cannot be changed anymore.' => 'Die Einheit in Zeile %d wurde in der Zwischenzeit benutzt und kann nicht mehr geändert werden.', 'The units have been saved.' => 'Die Einheiten wurden gespeichert.', + 'There are still entries in the database for which no unit has been assigned.' => 'Es gibt noch Einträge in der Datenbank, für die keine Einheit zugeordnet ist.', + 'These units can be based on other units so that Lx-Office can convert prices when the user switches from one unit to another.' => 'Diese Einheiten können auf anderen Einheiten basieren, sodass Lx-Office Preise umrechnen kann, wenn der Benutzer von einer Einheit zu einer anderen Wechselt.', 'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!' => 'In diesem Schritt werden bestehende Datenbanken gesucht. Es werden noch keine Änderungen vorgenommen!', + 'This upgrade script tries to map all existing units in the database to the newly created units.' => 'Dieses Update-Script versucht, alle bestehenden Einheiten automatisch in die neuen Einheiten umzuwandeln.', 'Title' => 'Titel', 'To' => 'An', 'To add a user to a group edit a name, change the login name and save. A new user with the same variables will then be saved under the new login name.' => 'Um einer Gruppe einen neuen Benutzer hinzuzufügen, ändern und speichern Sie am einfachsten einen bestehen den Zugriffsnamen. Unter dem neuen Namen wird dann ein Benutzer mit denselben Einstellungen angelegt.', @@ -1059,7 +1084,11 @@ gestartet', 'Yearly' => 'jährlich', 'Yes' => 'Ja', 'You are logged out!' => 'Auf Wiedersehen!', + 'You can also create new units now.' => 'Sie können jetzt auch neue Einheiten anlegen.', + 'You cannot continue until all unknown units have been mapped to known ones.' => 'Sie können nicht fortfahren, bis alle unbekannten Einheiten in neue Einheiten umgewandelt wurden.', 'You did not enter a name!' => 'Sie haben keinen Namen eingegeben!', + 'You have to chose a dimension unit and a service unit which will then be assigned to those entries.' => 'Sie müssen eine Maß- und eine Dienstleistungseinheit auswählen, die diesen Waren und Dienstleistungen, denen noch keine Einheit zugeordnet ist, zugeordnet wird.', + 'You have to chose which unit to save for each of them.' => 'Sie müssen für jeden Artikel die neue Einheit auswählen.', 'You must enter a host and port for local and remote connections!' => '"Rechner" und "Port" müssen für lokale und externe Verbindungen eingetragen werden!', 'Zeitraum' => 'Zeitraum', 'Zipcode' => 'PLZ', diff --git a/locale/de/dbupgrade b/locale/de/dbupgrade new file mode 100644 index 000000000..885311336 --- /dev/null +++ b/locale/de/dbupgrade @@ -0,0 +1,24 @@ +$self{texts} = { + 'A unit with this name does already exist.' => 'Eine Einheit mit diesem Namen existiert bereits.', + 'Database update error:' => 'Database update error:', + 'The base unit does not exist.' => 'Die Basiseinheit existiert nicht.', + 'The factor is missing.' => 'Der Faktor fehlt.', + 'The name is missing.' => 'Der Name fehlt.', + 'The unit has been saved.' => 'Die Einheit wurde gespeichert.', +}; + +$self{subs} = { + 'mydberror' => 'mydberror', + 'myshowerror' => 'myshowerror', + 'update_units' => 'update_units', + 'update_units_add_unit' => 'update_units_add_unit', + 'update_units_assign_known' => 'update_units_assign_known', + 'update_units_assign_units' => 'update_units_assign_units', + 'update_units_set_default' => 'update_units_set_default', + 'update_units_step_3' => 'update_units_step_3', + 'update_units_steps_1_2' => 'update_units_steps_1_2', + 'einheit_hinzufügen' => 'add_unit', + 'einheiten_zuweisen' => 'assign_units', +}; + +1; diff --git a/sql/Pg-upgrade/Pg-upgrade-2.2.0.25-2.2.0.26.pl b/sql/Pg-upgrade/Pg-upgrade-2.2.0.25-2.2.0.26.pl new file mode 100644 index 000000000..1d7f9a1d6 --- /dev/null +++ b/sql/Pg-upgrade/Pg-upgrade-2.2.0.25-2.2.0.26.pl @@ -0,0 +1,297 @@ +#!/usr/bin/perl + +die("This script cannot be run from the command line.") unless ($main::form); + +use SL::AM; + +%dbup_myconfig = (); +map({ $dbup_myconfig{$_} = $main::form->{$_}; } + qw(dbname dbuser dbpasswd dbhost dbport dbconnect)); + +sub mydberror { + my ($dbup_locale, $msg) = @_; + die($dbup_locale->text("Database update error:") . + "
$msg
" . $DBI::errstr); +} + +sub myshowerror { + my ($msg) = @_; + + print($main::form->parse_html_template("dbupgrade/units_error", + { "message" => $msg })); + return 2; +} + +sub update_units_add_unit { + my ($dbup_locale, $dbh) = @_; + + my $form = $main::form; + + return 0 unless ($form->{"new_name"}); + + return myshowerror($dbup_locale->text("The name is missing.")) + if ($form->{"new_name"} eq ""); + my $units = AM->retrieve_units(\%dbup_myconfig, $form); + return myshowerror($dbup_locale->text("A unit with this name does already exist.")) + if ($units->{$form->{"new_name"}}); + $units = AM->retrieve_units(\%dbup_myconfig, $form, $form->{"unit_type"}); + + my ($base_unit, $factor); + if ($form->{"new_base_unit"}) { + return myshowerror($dbup_locale->text("The base unit does not exist.")) + unless (defined($units->{$form->{"new_base_unit"}})); + + return myshowerror($dbup_locale->text("The factor is missing.")) + if ($form->{"new_factor"} eq ""); + $factor = $form->parse_amount(\%dbup_myconfig, $form->{"new_factor"}); + return myshowerror($dbup_locale->text("The factor is missing.")) + unless ($factor); + $base_unit = $form->{"new_base_unit"}; + } + + my $query = "INSERT INTO units " . + "(name, base_unit, factor, type) " . + "VALUES (?, ?, ?, ?)"; + $dbh->do($query, undef, $form->{"new_name"}, $base_unit, $factor, + $form->{"unit_type"}) || + mydberror($dbup_locale, $query . + " ($form->{new_name}, $base_unit, $factor, $form->{unit_type})"); + $dbh->commit(); + $dbh->begin_work(); + + $form->{"saved_message"} = $dbup_locale->text("The unit has been saved."); + + return 0; +} + +sub update_units_assign_units { + my ($dbup_locale, $dbh) = @_; + + my ($query, $sth, @values); + + my $form = $main::form; + + foreach my $table (qw(parts invoice orderitems rmaitems)) { + $query = "UPDATE $table SET unit = ? WHERE lower(unit) = ?"; + $sth = $dbh->prepare($query); + + for (my $i = 1; $i <= $form->{"rowcount"}; $i++) { + next unless ($form->{"new_unit_$i"} && $form->{"old_unit_$i"}); + @values = ($form->{"new_unit_$i"}, lc($form->{"old_unit_$i"})); + $sth->execute(@values) || + mydberror($dbup_locale, $query . " (" . join(", ", @values) . ")"); + } + } + + $sth->finish(); + $dbh->commit(); + $dbh->begin_work(); +} + +sub update_units_assign_known { + my ($dbup_locale, $dbh) = @_; + + my $form = $main::form; + + my %unit_name_mapping = ( + "st" => "Stck", + "st." => "Stck", + "pc" => "Stck", + "pcs" => "Stck", + "ea" => "Stck", + ); + + my $i = 1; + foreach my $k (keys(%unit_name_mapping)) { + $form->{"old_unit_$i"} = $k; + $form->{"new_unit_$i"} = $unit_name_mapping{$k}; + $i++; + } + $form->{"rowcount"} = scalar(keys(%unit_name_mapping)); + + update_units_assign_units($dbup_locale, $dbh); +} + +sub update_units_steps_1_2 { + my ($dbup_locale, $dbh) = @_; + + my (%unknown_dimension_units, %unknown_service_units); + + my $form = $main::form; + + foreach my $table (qw(parts invoice orderitems rmaitems)) { + my ($query, $sth, $ref); + + if ($table eq "parts") { + $query = "SELECT unit, inventory_accno_id FROM parts " . + "WHERE NOT ((unit = '') OR unit ISNULL OR " . + " unit IN (SELECT name FROM units))"; + + } else { + $query = "SELECT t.unit, p.inventory_accno_id " . + "FROM $table t " . + "LEFT JOIN parts p ON p.id = t.parts_id " . + "WHERE NOT ((t.unit = '') OR t.unit ISNULL OR " . + " t.unit IN (SELECT name FROM units))"; + } + $sth = $dbh->prepare($query); + $sth->execute() || mydberror($dbup_locale, $query); + + while ($ref = $sth->fetchrow_hashref()) { + if ($ref->{"inventory_accno_id"}) { + $unknown_dimension_units{$ref->{"unit"}} = 1; + + } else { + $unknown_service_units{$ref->{"unit"}} = 1; + } + } + + $sth->finish(); + } + + if (scalar(keys(%unknown_dimension_units)) != 0) { + my $units = AM->retrieve_units(\%dbup_myconfig, $form, "dimension"); + my $ddbox = AM->unit_select_data($units, undef, 1); + + my @unknown_parts; + map({ push(@unknown_parts, { "name" => $_, "NEW_UNITS" => $ddbox }); } + sort({ lc($a) cmp lc($b) } keys(%unknown_dimension_units))); + + print($form->parse_html_template("dbupgrade/units_parts", + { "NEW_BASE_UNIT_DDBOX" => $ddbox, + "UNKNOWN_PART_UNITS" => \@unknown_parts, + })); + + return 2; + + } else { + print($form->parse_html_template("dbupgrade/units_parts_done")); + } + + if (scalar(keys(%unknown_service_units)) != 0) { + my $units = AM->retrieve_units(\%dbup_myconfig, $form, "service"); + my $ddbox = AM->unit_select_data($units, undef, 1); + + my @unknown_services; + map({ push(@unknown_services, { "name" => $_, "NEW_UNITS" => $ddbox }); } + sort({ lc($a) cmp lc($b) } keys(%unknown_service_units))); + + print($form->parse_html_template("dbupgrade/units_services", + { "NEW_BASE_UNIT_DDBOX" => $ddbox, + "UNKNOWN_PART_UNITS" => \@unknown_services, + })); + + return 2; + + } else { + print($form->parse_html_template("dbupgrade/units_services_done")); + } + + return 0; +} + +sub update_units_step_3 { + my ($dbup_locale, $dbh) = @_; + + my $form = $main::form; + + my $query = "SELECT "; + foreach my $table (qw(parts invoice orderitems rmaitems)) { + $query .= "(SELECT COUNT(*) FROM $table " . + "WHERE (unit ISNULL) OR (unit = '')) +"; + } + substr($query, -1, 1) = "AS has_unassigned"; + my ($has_unassigned) = $dbh->selectrow_array($query); + + if ($has_unassigned) { + my $dimension_units = AM->retrieve_units(\%dbup_myconfig, $form, + "dimension"); + my $dimension_ddbox = AM->unit_select_data($dimension_units); + + my $service_units = AM->retrieve_units(\%dbup_myconfig, $form, "service"); + my $service_ddbox = AM->unit_select_data($service_units); + + print($form->parse_html_template("dbupgrade/units_set_default", + { "DIMENSION_DDBOX" => $dimension_ddbox, + "SERVICE_DDBOX" => $service_ddbox })); + return 2; + + } else { + print($form->parse_html_template("dbupgrade/units_set_default_done")); + return 1; + } +} + +sub update_units_set_default { + my ($dbup_locale, $dbh) = @_; + + my $form = $main::form; + + foreach my $table (qw(parts invoice orderitems rmaitems)) { + my $base_query = "UPDATE $table SET unit = " . + $dbh->quote($form->{"default_service_unit"}) . " " . + "WHERE ((unit ISNULL) OR (unit = '')) AND "; + my $query; + + if ($table eq "parts") { + $query = "UPDATE $table SET unit = " . + $dbh->quote($form->{"default_dimension_unit"}) . " " . + "WHERE ((unit ISNULL) OR (unit = '')) AND (inventory_accno_id > 0)"; + } else { + $query = "UPDATE $table SET unit = " . + $dbh->quote($form->{"default_dimension_unit"}) . " " . + "WHERE ((unit ISNULL) OR (unit = '')) AND " . + "parts_id IN (SELECT id FROM parts WHERE (inventory_accno_id > 0))"; + } + + $dbh->do($query) || mydberror($dbup_locale, $query); + + if ($table eq "parts") { + $query = "UPDATE $table SET unit = " . + $dbh->quote($form->{"default_service_unit"}) . " " . + "WHERE ((unit ISNULL) OR (unit = '')) AND " . + "(inventory_accno_id ISNULL) OR (inventory_accno_id = 0)"; + } else { + $query = "UPDATE $table SET unit = " . + $dbh->quote($form->{"default_service_unit"}) . " " . + "WHERE ((unit ISNULL) OR (unit = '')) AND " . + "parts_id IN (SELECT id FROM parts " . + "WHERE (inventory_accno_id ISNULL) OR (inventory_accno_id = 0))"; + } + + $dbh->do($query) || mydberror($dbup_locale, $query); + } +} + +sub update_units { + my (@dbh) = @_; + + my $form = $main::form; + + my $res; + + my $dbup_locale = Locale->new($main::language, "dbupgrade"); + + print($form->parse_html_template("dbupgrade/units_header")); + + if ($form->{"action2"} eq "add_unit") { + $res = update_units_add_unit($dbup_locale, $dbh); + return $res if ($res); + + } elsif ($form->{"action2"} eq "assign_units") { + update_units_assign_units($dbup_locale, $dbh); + + } elsif ($form->{"action2"} eq "set_default") { + update_units_set_default($dbup_locale, $dbh); + + } + + update_units_assign_known($dbup_locale, $dbh); + + $res = update_units_steps_1_2($dbup_locale, $dbh); + return $res if ($res); + + return update_units_step_3($dbup_locale, $dbh); +} + +update_units($dbh); diff --git a/templates/webpages/dbupgrade/units_error_de.html b/templates/webpages/dbupgrade/units_error_de.html new file mode 100644 index 000000000..4c785a841 --- /dev/null +++ b/templates/webpages/dbupgrade/units_error_de.html @@ -0,0 +1,5 @@ +

Fehler:

+ +
+ +
diff --git a/templates/webpages/dbupgrade/units_error_master.html b/templates/webpages/dbupgrade/units_error_master.html new file mode 100644 index 000000000..d62657e88 --- /dev/null +++ b/templates/webpages/dbupgrade/units_error_master.html @@ -0,0 +1,5 @@ +

Error:

+ +
+ +
diff --git a/templates/webpages/dbupgrade/units_header_de.html b/templates/webpages/dbupgrade/units_header_de.html new file mode 100644 index 000000000..e035ef342 --- /dev/null +++ b/templates/webpages/dbupgrade/units_header_de.html @@ -0,0 +1,14 @@ +
Einführung von Einheiten
+ +

+ Vor Lx-Office 2.4.0 konnte der Benutzer bei Artikeln, Dienstleistungen und Rechnungen, Angeboten etc beliebige Einheiten angeben. + In Lx-Office 2.4.0 muss der Administrator in den Systemeinstellungen eine Liste von verwendbaren Einheiten angeben. + Diese Einheiten können auf anderen Einheiten basieren, sodass Lx-Office Preise umrechnen kann, wenn der Benutzer von einer Einheit zu einer anderen Wechselt. +

+ +

+ Dieses Update-Script versucht, alle bestehenden Einheiten automatisch in die neuen Einheiten umzuwandeln. + Das ist für einige Einheiten automatisch möglich, aber bei anderen muss der Benutzer die neue Einheit auswählen. + Sie können nicht fortfahren, bis alle unbekannten Einheiten in neue Einheiten umgewandelt wurden. + Sie können jetzt auch neue Einheiten anlegen. +

diff --git a/templates/webpages/dbupgrade/units_header_master.html b/templates/webpages/dbupgrade/units_header_master.html new file mode 100644 index 000000000..c0bc13c2f --- /dev/null +++ b/templates/webpages/dbupgrade/units_header_master.html @@ -0,0 +1,22 @@ +
Introduction of units
+ +

+ Prior to Lx-Office v2.4.0 the user could enter arbitrary + strings as units for parts, services and in invoices, sales quotations + etc. + In Lx-Office 2.4.0 the administrator has to enter a list + of units in the administrative section. + These units can be based on other units so that Lx-Office + can convert prices when the user switches from one unit to + another. +

+ +

+ This upgrade script tries to map all existing units in the + database to the newly created units. + It is possible to do this automatically for some units, + but for others the user has to chose the new unit. + You cannot continue until all unknown units have been + mapped to known ones. + You can also create new units now. +

diff --git a/templates/webpages/dbupgrade/units_parts_de.html b/templates/webpages/dbupgrade/units_parts_de.html new file mode 100644 index 000000000..954a786e0 --- /dev/null +++ b/templates/webpages/dbupgrade/units_parts_de.html @@ -0,0 +1,83 @@ +
Schritt 1 von 3: Waren
+ +
+ + + + + + + + + +

+
+ +
Einheit hinzufügen
+ +

+ Einheiten haben entweder keine oder genau eine Basiseinheit, von der sie ein Vielfaches sind. Wenn Sie eine Basiseinheit auswählen, dann müssen Sie auch einen Faktor eingeben. Sie müssen Einheiten als ein Vielfaches einer kleineren Einheit eingeben. So ist die Definition von "kg" mit der Basiseinheit "g" und dem Faktor 1000 zulässig, die Definition von "g" mit der Basiseinheit "kg" und dem Faktor "0,001" hingegen nicht. +

+ +

+ Die folgenden Einheiten existieren bereits: + ; +

+ +
+ + + + + + + + + + + + + + +
Einheit
Basiseinheit + +
Faktor
+ + + +
+ +
Neue Einheiten zuweisen
+ +

+ Die folgenden Einheiten sind unbekannt. + Sie müssen für jeden Artikel die neue Einheit auswählen. +

+ + + + + + + + + + + + + +
Aktuelle EinheitNeue Einheit
+ + + + +
+ + + +
+ diff --git a/templates/webpages/dbupgrade/units_parts_done_de.html b/templates/webpages/dbupgrade/units_parts_done_de.html new file mode 100644 index 000000000..3fb2784fe --- /dev/null +++ b/templates/webpages/dbupgrade/units_parts_done_de.html @@ -0,0 +1,3 @@ +
Schritt 1 von 3: Waren
+ +

Es wurden keine unbekannten Einheiten gefunden.

diff --git a/templates/webpages/dbupgrade/units_parts_done_master.html b/templates/webpages/dbupgrade/units_parts_done_master.html new file mode 100644 index 000000000..908a7a70f --- /dev/null +++ b/templates/webpages/dbupgrade/units_parts_done_master.html @@ -0,0 +1,3 @@ +
Step 1 of 3: Parts
+ +

No unknown units where found.

diff --git a/templates/webpages/dbupgrade/units_parts_master.html b/templates/webpages/dbupgrade/units_parts_master.html new file mode 100644 index 000000000..345565851 --- /dev/null +++ b/templates/webpages/dbupgrade/units_parts_master.html @@ -0,0 +1,89 @@ +
Step 1 of 3: Parts
+ +
+ + + + + + + + + +

+
+ +
Add unit
+ +

+ For each unit there's either no or exactly one base + unit. If you chose a base unit then you also have to chose a + factor. That way the new unit will be defined as a multiple of the + base unit. The base unit must be the "smaller" one. A + factor may not be less than 1. Therefore you may define + "kg" with the base unit "g" and a factor of + "1", but not the other way round. +

+ +

+ The following units exist already: + ; +

+ +
+ + + + + + + + + + + + + + +
Unit
Base unit + +
Factor
+ + + +
+ +
Assign new units
+ +

+ The following units are unknown. + You have to chose which unit to save for each of them. +

+ + + + + + + + + + + + + +
Current unitNew unit
+ + + + +
+ + + +
+ diff --git a/templates/webpages/dbupgrade/units_services_de.html b/templates/webpages/dbupgrade/units_services_de.html new file mode 100644 index 000000000..662dbaa68 --- /dev/null +++ b/templates/webpages/dbupgrade/units_services_de.html @@ -0,0 +1,83 @@ +
Schritt 2 von 3: Dienstleistungen
+ +
+ + + + + + + + + +

+
+ +
Einheit hinzufügen
+ +

+ Einheiten haben entweder keine oder genau eine Basiseinheit, von der sie ein Vielfaches sind. Wenn Sie eine Basiseinheit auswählen, dann müssen Sie auch einen Faktor eingeben. Sie müssen Einheiten als ein Vielfaches einer kleineren Einheit eingeben. So ist die Definition von "kg" mit der Basiseinheit "g" und dem Faktor 1000 zulässig, die Definition von "g" mit der Basiseinheit "kg" und dem Faktor "0,001" hingegen nicht. +

+ +

+ Die folgenden Einheiten existieren bereits: + ; +

+ +
+ + + + + + + + + + + + + + +
Einheit
Basiseinheit + +
Faktor
+ + + +
+ +
Neue Einheiten zuweisen
+ +

+ Die folgenden Einheiten sind unbekannt. + Sie müssen für jeden Artikel die neue Einheit auswählen. +

+ + + + + + + + + + + + + +
Aktuelle EinheitNeue Einheit
+ + + + +
+ + + +
+ diff --git a/templates/webpages/dbupgrade/units_services_done_de.html b/templates/webpages/dbupgrade/units_services_done_de.html new file mode 100644 index 000000000..fd671a03b --- /dev/null +++ b/templates/webpages/dbupgrade/units_services_done_de.html @@ -0,0 +1,3 @@ +
Schritt 2 von 3: Dienstleistungen
+ +

Es wurden keine unbekannten Einheiten gefunden.

diff --git a/templates/webpages/dbupgrade/units_services_done_master.html b/templates/webpages/dbupgrade/units_services_done_master.html new file mode 100644 index 000000000..21aef1410 --- /dev/null +++ b/templates/webpages/dbupgrade/units_services_done_master.html @@ -0,0 +1,3 @@ +
Step 2 of 3: Services
+ +

No unknown units where found.

diff --git a/templates/webpages/dbupgrade/units_services_master.html b/templates/webpages/dbupgrade/units_services_master.html new file mode 100644 index 000000000..65ded52a6 --- /dev/null +++ b/templates/webpages/dbupgrade/units_services_master.html @@ -0,0 +1,89 @@ +
Step 2 of 3: Services
+ +
+ + + + + + + + + +

+
+ +
Add unit
+ +

+ For each unit there's either no or exactly one base + unit. If you chose a base unit then you also have to chose a + factor. That way the new unit will be defined as a multiple of the + base unit. The base unit must be the "smaller" one. A + factor may not be less than 1. Therefore you may define + "kg" with the base unit "g" and a factor of + "1", but not the other way round. +

+ +

+ The following units exist already: + ; +

+ +
+ + + + + + + + + + + + + + +
Unit
Base unit + +
Factor
+ + + +
+ +
Assign new units
+ +

+ The following units are unknown. + You have to chose which unit to save for each of them. +

+ + + + + + + + + + + + + +
Current unitNew unit
+ + + + +
+ + + +
+ diff --git a/templates/webpages/dbupgrade/units_set_default_de.html b/templates/webpages/dbupgrade/units_set_default_de.html new file mode 100644 index 000000000..a93d5aa71 --- /dev/null +++ b/templates/webpages/dbupgrade/units_set_default_de.html @@ -0,0 +1,39 @@ +
Schritt 3 von 3: Standardeinheiten
+ +
+ + + + + + + + +

+ Es gibt noch Einträge in der Datenbank, für die keine Einheit zugeordnet ist. + Sie müssen eine Maß- und eine Dienstleistungseinheit auswählen, die diesen Waren und Dienstleistungen, denen noch keine Einheit zugeordnet ist, zugeordnet wird. +

+ + + + + + + + + + + +
Maßeinheit: + +
Dienstleistungseinheit: + +
+ +

+ +
diff --git a/templates/webpages/dbupgrade/units_set_default_done_de.html b/templates/webpages/dbupgrade/units_set_default_done_de.html new file mode 100644 index 000000000..799ba6fc1 --- /dev/null +++ b/templates/webpages/dbupgrade/units_set_default_done_de.html @@ -0,0 +1,7 @@ +
Schritt 3 von 3: Standardeinheiten
+ +

Es wurden keine Einträge gefunden, denen keine Einheit zugeordnet war.

+ +

Das Datenbankupgrade zwecks Einführung von Einheiten ist nun beendet.

+ +
diff --git a/templates/webpages/dbupgrade/units_set_default_done_master.html b/templates/webpages/dbupgrade/units_set_default_done_master.html new file mode 100644 index 000000000..0a6801dcb --- /dev/null +++ b/templates/webpages/dbupgrade/units_set_default_done_master.html @@ -0,0 +1,7 @@ +
Step 3 of 3: Default units
+ +

No entries were found which had no unit assigned to them.

+ +

The database upgrade for the introduction of units is now complete.

+ +
diff --git a/templates/webpages/dbupgrade/units_set_default_master.html b/templates/webpages/dbupgrade/units_set_default_master.html new file mode 100644 index 000000000..8452c4fbb --- /dev/null +++ b/templates/webpages/dbupgrade/units_set_default_master.html @@ -0,0 +1,41 @@ +
Step 3 of 3: Default units
+ +
+ + + + + + + + +

+ There are still entries in the database for which no unit + has been assigned. + You have to chose a dimension unit and a service unit + which will then be assigned to those entries. +

+ + + + + + + + + + + +
Dimension unit: + +
Service unit: + +
+ +

+ +