Revision 7942a6ac
Von Moritz Bunkus vor mehr als 15 Jahren hinzugefügt
SL/IC.pm | ||
---|---|---|
997 | 997 |
$main::lxdebug->leave_sub(); |
998 | 998 |
} |
999 | 999 |
|
1000 |
sub update_prices {
|
|
1000 |
sub _create_filter_for_priceupdate {
|
|
1001 | 1001 |
$main::lxdebug->enter_sub(); |
1002 | 1002 |
|
1003 |
my ($self, $myconfig, $form) = @_; |
|
1003 |
my $self = shift; |
|
1004 |
my $myconfig = \%main::myconfig; |
|
1005 |
my $form = $main::form; |
|
1006 |
|
|
1004 | 1007 |
my @where_values; |
1005 | 1008 |
my $where = '1 = 1'; |
1006 |
my $var; |
|
1007 | 1009 |
|
1008 |
my $group; |
|
1009 |
my $limit; |
|
1010 |
foreach my $item (qw(partnumber drawing microfiche make model pg.partsgroup)) { |
|
1011 |
my $column = $item; |
|
1012 |
$column =~ s/.*\.//; |
|
1013 |
next unless ($form->{$column}); |
|
1010 | 1014 |
|
1011 |
if ($item ne 'make') { |
|
1012 |
foreach my $item (qw(partnumber drawing microfiche make model pg.partsgroup)) { |
|
1013 |
my $column = $item; |
|
1014 |
$column =~ s/.*\.//; |
|
1015 |
next unless ($form->{$column}); |
|
1016 |
$where .= qq| AND $item ILIKE ?|; |
|
1017 |
push(@where_values, '%' . $form->{$column} . '%'); |
|
1018 |
} |
|
1015 |
$where .= qq| AND $item ILIKE ?|; |
|
1016 |
push(@where_values, '%' . $form->{$column} . '%'); |
|
1019 | 1017 |
} |
1020 | 1018 |
|
1021 |
# special case for description |
|
1022 |
if ($form->{description} |
|
1023 |
&& !( $form->{bought} || $form->{sold} || $form->{onorder} |
|
1024 |
|| $form->{ordered} || $form->{rfq} || $form->{quoted})) { |
|
1025 |
$where .= qq| AND (p.description ILIKE ?)|; |
|
1026 |
push(@where_values, '%' . $form->{description} . '%'); |
|
1027 |
} |
|
1019 |
foreach my $item (qw(description serialnumber)) { |
|
1020 |
next unless ($form->{$item}); |
|
1028 | 1021 |
|
1029 |
# special case for serialnumber |
|
1030 |
if ($form->{l_serialnumber} && $form->{serialnumber}) { |
|
1031 |
$where .= qq| AND serialnumber ILIKE ?|; |
|
1032 |
push(@where_values, '%' . $form->{serialnumber} . '%'); |
|
1022 |
$where .= qq| AND (${item} ILIKE ?)|; |
|
1023 |
push(@where_values, '%' . $form->{$item} . '%'); |
|
1033 | 1024 |
} |
1034 | 1025 |
|
1035 | 1026 |
|
1036 | 1027 |
# items which were never bought, sold or on an order |
1037 | 1028 |
if ($form->{itemstatus} eq 'orphaned') { |
1038 |
$form->{onhand} = $form->{short} = 0; |
|
1039 |
$form->{bought} = $form->{sold} = 0; |
|
1040 |
$form->{onorder} = $form->{ordered} = 0; |
|
1041 |
$form->{rfq} = $form->{quoted} = 0; |
|
1042 |
|
|
1043 |
$form->{transdatefrom} = $form->{transdateto} = ""; |
|
1044 |
|
|
1045 | 1029 |
$where .= |
1046 | 1030 |
qq| AND (p.onhand = 0) |
1047 | 1031 |
AND p.id NOT IN |
... | ... | |
1052 | 1036 |
UNION |
1053 | 1037 |
SELECT DISTINCT parts_id FROM orderitems |
1054 | 1038 |
)|; |
1055 |
} |
|
1056 | 1039 |
|
1057 |
if ($form->{itemstatus} eq 'active') { |
|
1040 |
} elsif ($form->{itemstatus} eq 'active') {
|
|
1058 | 1041 |
$where .= qq| AND p.obsolete = '0'|; |
1059 |
} |
|
1060 | 1042 |
|
1061 |
if ($form->{itemstatus} eq 'obsolete') { |
|
1043 |
} elsif ($form->{itemstatus} eq 'obsolete') {
|
|
1062 | 1044 |
$where .= qq| AND p.obsolete = '1'|; |
1063 |
$form->{onhand} = $form->{short} = 0; |
|
1064 |
} |
|
1065 | 1045 |
|
1066 |
if ($form->{itemstatus} eq 'onhand') { |
|
1046 |
} elsif ($form->{itemstatus} eq 'onhand') {
|
|
1067 | 1047 |
$where .= qq| AND p.onhand > 0|; |
1068 |
} |
|
1069 | 1048 |
|
1070 |
if ($form->{itemstatus} eq 'short') { |
|
1049 |
} elsif ($form->{itemstatus} eq 'short') {
|
|
1071 | 1050 |
$where .= qq| AND p.onhand < p.rop|; |
1051 |
|
|
1072 | 1052 |
} |
1073 | 1053 |
|
1074 | 1054 |
foreach my $column (qw(make model)) { |
... | ... | |
1077 | 1057 |
push(@where_values, '%' . $form->{$column} . '%'); |
1078 | 1058 |
} |
1079 | 1059 |
|
1060 |
$main::lxdebug->leave_sub(); |
|
1061 |
|
|
1062 |
return ($where, @where_values); |
|
1063 |
} |
|
1064 |
|
|
1065 |
sub get_num_matches_for_priceupdate { |
|
1066 |
$main::lxdebug->enter_sub(); |
|
1067 |
|
|
1068 |
my $self = shift; |
|
1069 |
|
|
1070 |
my $myconfig = \%main::myconfig; |
|
1071 |
my $form = $main::form; |
|
1072 |
|
|
1073 |
my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); |
|
1074 |
|
|
1075 |
my ($where, @where_values) = $self->_create_filter_for_priceupdate(); |
|
1076 |
|
|
1077 |
my $num_updated = 0; |
|
1078 |
my $query; |
|
1079 |
|
|
1080 |
for my $column (qw(sellprice listprice)) { |
|
1081 |
next if ($form->{$column} eq ""); |
|
1082 |
|
|
1083 |
$query = |
|
1084 |
qq|SELECT COUNT(*) |
|
1085 |
FROM parts |
|
1086 |
WHERE id IN |
|
1087 |
(SELECT p.id |
|
1088 |
FROM parts p |
|
1089 |
LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id) |
|
1090 |
WHERE $where)|; |
|
1091 |
my ($result) = selectfirst_array_query($from, $dbh, $query, @where_values); |
|
1092 |
$num_updated += $result if (0 <= $result); |
|
1093 |
} |
|
1094 |
|
|
1095 |
$query = |
|
1096 |
qq|SELECT COUNT(*) |
|
1097 |
FROM prices |
|
1098 |
WHERE parts_id IN |
|
1099 |
(SELECT p.id |
|
1100 |
FROM parts p |
|
1101 |
LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id) |
|
1102 |
WHERE $where) AND (pricegroup_id = ?)|; |
|
1103 |
my $sth = prepare_query($form, $dbh, $query); |
|
1104 |
|
|
1105 |
for my $i (1 .. $form->{price_rows}) { |
|
1106 |
next if ($form->{"price_$i"} eq ""); |
|
1107 |
|
|
1108 |
my ($result) = do_statement($form, $sth, $query, @where_values, conv_i($form->{"pricegroup_id_$i"})); |
|
1109 |
$num_updated += $result if (0 <= $result); |
|
1110 |
} |
|
1111 |
$sth->finish(); |
|
1112 |
|
|
1113 |
$main::lxdebug->leave_sub(); |
|
1114 |
|
|
1115 |
return $num_updated; |
|
1116 |
} |
|
1117 |
|
|
1118 |
sub update_prices { |
|
1119 |
$main::lxdebug->enter_sub(); |
|
1120 |
|
|
1121 |
my ($self, $myconfig, $form) = @_; |
|
1122 |
|
|
1123 |
my ($where, @where_values) = $self->_create_filter_for_priceupdate(); |
|
1124 |
my $num_updated = 0; |
|
1125 |
|
|
1080 | 1126 |
# connect to database |
1081 | 1127 |
my $dbh = $form->dbconnect_noauto($myconfig); |
1082 | 1128 |
|
... | ... | |
1098 | 1144 |
FROM parts p |
1099 | 1145 |
LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id) |
1100 | 1146 |
WHERE $where)|; |
1101 |
do_query($from, $dbh, $query, $value, @where_values); |
|
1147 |
my $result = do_query($from, $dbh, $query, $value, @where_values); |
|
1148 |
$num_updated += $result if (0 <= $result); |
|
1102 | 1149 |
} |
1103 | 1150 |
|
1104 | 1151 |
my $q_add = |
... | ... | |
1123 | 1170 |
next if ($form->{"price_$i"} eq ""); |
1124 | 1171 |
|
1125 | 1172 |
my $value = $form->parse_amount($myconfig, $form->{"price_$i"}); |
1173 |
my $result; |
|
1126 | 1174 |
|
1127 | 1175 |
if ($form->{"pricegroup_type_$i"} eq "percent") { |
1128 |
do_statement($form, $sth_multiply, $q_multiply, ($value / 100) + 1, @where_values, conv_i($form->{"pricegroup_id_$i"})); |
|
1176 |
$result = do_statement($form, $sth_multiply, $q_multiply, ($value / 100) + 1, @where_values, conv_i($form->{"pricegroup_id_$i"}));
|
|
1129 | 1177 |
} else { |
1130 |
do_statement($form, $sth_add, $q_add, $value, @where_values, conv_i($form->{"pricegroup_id_$i"})); |
|
1178 |
$result = do_statement($form, $sth_add, $q_add, $value, @where_values, conv_i($form->{"pricegroup_id_$i"}));
|
|
1131 | 1179 |
} |
1180 |
|
|
1181 |
$num_updated += $result if (0 <= $result); |
|
1132 | 1182 |
} |
1133 | 1183 |
|
1134 | 1184 |
$sth_add->finish(); |
... | ... | |
1139 | 1189 |
|
1140 | 1190 |
$main::lxdebug->leave_sub(); |
1141 | 1191 |
|
1142 |
return $rc;
|
|
1192 |
return $num_updated;
|
|
1143 | 1193 |
} |
1144 | 1194 |
|
1145 | 1195 |
sub create_links { |
bin/mozilla/ic.pl | ||
---|---|---|
131 | 131 |
|
132 | 132 |
$auth->assert('part_service_assembly_edit'); |
133 | 133 |
|
134 |
my @errors = (); |
|
135 |
my $value_found = false; |
|
136 |
|
|
137 |
foreach my $idx (qw(sellprice listprice), (1..$form->{price_rows})) { |
|
138 |
my $name = $idx =~ m/\d/ ? $form->{"pricegroup_${idx}"} : $idx eq 'sellprice' ? $locale->text('Sell Price') : $locale->text('List Price'); |
|
139 |
my $type = $idx =~ m/\d/ ? $form->{"pricegroup_type_${idx}"} : $form->{"${idx}_type"}; |
|
140 |
my $value_idx = $idx =~ m/\d/ ? "price_${idx}" : $idx; |
|
141 |
my $value = $form->parse_amount(\%myconfig, $form->{$value_idx}); |
|
142 |
|
|
143 |
if ((0 > $value) && ($type eq 'percent')) { |
|
144 |
push @errors, $locale->text('You cannot adjust the price for pricegroup "#1" by a negative percentage.', $name); |
|
145 |
|
|
146 |
} elsif (!$value && ($form->{$value_idx} ne '')) { |
|
147 |
push @errors, $locale->text('No valid number entered for pricegroup "#1".', $name); |
|
148 |
|
|
149 |
} elsif (0 < $value) { |
|
150 |
$value_found = 1; |
|
151 |
} |
|
152 |
} |
|
153 |
|
|
154 |
push @errors, $locale->text('No prices will be updated because no prices have been entered.') if (!$value_found); |
|
155 |
|
|
156 |
my $num_matches = IC->get_num_matches_for_priceupdate(); |
|
157 |
|
|
158 |
$form->header(); |
|
159 |
|
|
160 |
if (@errors) { |
|
161 |
$form->show_generic_error(join('<br>', @errors), 'back_button' => 1); |
|
162 |
} |
|
163 |
|
|
134 | 164 |
$form->{nextsub} = "update_prices"; |
135 |
$form->header; |
|
136 | 165 |
|
137 | 166 |
map { delete $form->{$_} } qw(action header); |
138 | 167 |
|
139 |
print $form->parse_html_template('ic/confirm_price_update', { HIDDENS => [ map { name => $_, value => $form->{$_} }, keys %$form ] }); |
|
168 |
print $form->parse_html_template('ic/confirm_price_update', { HIDDENS => [ map { name => $_, value => $form->{$_} }, keys %$form ], |
|
169 |
num_matches => $num_matches }); |
|
140 | 170 |
|
141 | 171 |
$lxdebug->leave_sub(); |
142 | 172 |
} |
... | ... | |
146 | 176 |
|
147 | 177 |
$auth->assert('part_service_assembly_edit'); |
148 | 178 |
|
149 |
if (IC->update_prices(\%myconfig, \%$form)) { |
|
150 |
$form->redirect($form->{update_count} . $locale->text('prices updated!')); |
|
179 |
my $num_updated = IC->update_prices(\%myconfig, \%$form); |
|
180 |
|
|
181 |
if (-1 != $num_updated) { |
|
182 |
$form->redirect($locale->text('#1 prices were updated.', $num_updated)); |
|
151 | 183 |
} else { |
152 | 184 |
$form->error($locale->text('Could not update prices!')); |
153 | 185 |
} |
locale/de/all | ||
---|---|---|
9 | 9 |
' Date missing!' => ' Datum fehlt!', |
10 | 10 |
' Part Number missing!' => ' Artikelnummer fehlt!', |
11 | 11 |
' missing!' => ' fehlt!', |
12 |
'#1 prices were updated.' => '#1 Preise wurden aktualisiert.', |
|
12 | 13 |
'<%account_number%> -- Your account number' => '<%account_number%> -- Ihre Kontonummer', |
13 | 14 |
'<%bank%> -- Your bank' => '<%bank%> -- Der Name Ihrer Bank', |
14 | 15 |
'<%bank_code%> -- Your bank code' => '<%bank_code%> -- Die Bankleitzahl Ihrer Bank', |
... | ... | |
176 | 177 |
'Application Error. No Format given' => 'Fehler in der Anwendung. Das Ausgabeformat fehlt.', |
177 | 178 |
'Application Error. Wrong Format' => 'Fehler in der Anwendung. Falsches Format: ', |
178 | 179 |
'Applying [% HTML.escape(file) %]:' => 'Führe [% HTML.escape(file) %] aus:', |
180 |
'Approximately #1 prices will be updated.' => 'Ungef?hr #1 Preise werden aktualisiert.', |
|
179 | 181 |
'Apr' => 'Apr', |
180 | 182 |
'April' => 'April', |
181 | 183 |
'Ar aging on %s' => 'Offene Forderungen zum %s', |
... | ... | |
185 | 187 |
'Are you sure you want to delete Quotation Number' => 'Sind Sie sicher, dass Angebotnummer gel?scht werden soll?', |
186 | 188 |
'Are you sure you want to delete Transaction' => 'Buchung wirklich l?schen?', |
187 | 189 |
'Are you sure you want to remove the marked entries from the queue?' => 'Sind Sie sicher, dass die markierten Eintr?ge von der Warteschlange gel?scht werden sollen?', |
188 |
'Are you sure you want to update the prices' => 'Sind Sie sicher, dass Sie die Preise aktualisieren wollen?',
|
|
190 |
'Are you sure you want to update the prices' => 'Sind Sie sicher, dass Sie die Preise aktualisieren wollen', |
|
189 | 191 |
'Article Code' => 'Artikelk?rzel', |
190 | 192 |
'Article Code missing!' => 'Artikelk?rzel fehlt', |
191 | 193 |
'As a result, the saved onhand values of the present goods can be stored into a warehouse designated by you, or will be reset for a proper warehouse tracking' => 'Als Konsequenz können die gespeicherten Mengen entweder in ein Lager überführt werden, oder für eine frische Lagerverwaltung resettet werden.', |
... | ... | |
996 | 998 |
'No licenses were found that match the search criteria.' => 'Es wurden keine Lizenzen gefunden, auf die die Suchkriterien zutreffen.', |
997 | 999 |
'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'Es wurde kein oder ein unbekanntes Authentifizierungsmodul in "config/authentication.pl" angegeben.', |
998 | 1000 |
'No part was found matching the search parameters.' => 'Es wurde kein Artikel gefunden, auf den die Suchparameter zutreffen.', |
1001 |
'No prices will be updated because no prices have been entered.' => 'Es werden keine Preise aktualisiert, weil keine g?ltigen Preis?nderungen eingegeben wurden.', |
|
999 | 1002 |
'No problems were recognized.' => 'Es wurden keine Probleme gefunden.', |
1000 | 1003 |
'No unknown units where found.' => 'Es wurden keine unbekannten Einheiten gefunden.', |
1001 | 1004 |
'No user has been selected.' => 'Es wurde kein Benutzer ausgewählt.', |
1005 |
'No valid number entered for pricegroup "#1".' => 'F?r Preisgruppe "#1" wurde keine g?ltige Nummer eingegeben.', |
|
1002 | 1006 |
'No vendor has been selected yet.' => 'Es wurde noch kein Lieferant ausgew?hlt.', |
1003 | 1007 |
'No warehouse has been created yet or the quantity of the bins is not configured yet.' => 'Es wurde noch kein Lager angelegt, bzw. die dazugehörigen Lagerplätze sind noch nicht konfiguriert.', |
1004 | 1008 |
'No.' => 'Position', |
... | ... | |
1737 | 1741 |
'You can either create a new database or chose an existing database.' => 'Sie k?nnen entweder eine neue Datenbank erstellen oder eine existierende ausw?hlen.', |
1738 | 1742 |
'You can only delete datasets that are not in use.' => 'Sie können nur Datenbanken löschen, die momentan nicht in Benutzung sind.', |
1739 | 1743 |
'You can use the following strings in the long description and all translations. They will be replaced by their actual values by Lx-Office before they\'re output.' => 'Sie können im Langtext und allen ?bersetzungen die folgenden Variablen benutzen, die vor der Ausgabe von Lx-Office automatisch ersetzt werden:', |
1744 |
'You cannot adjust the price for pricegroup "#1" by a negative percentage.' => 'Sie k?nnen den Preis f?r Preisgruppe "#1" um einen negativen Prozentwert anpassen.', |
|
1740 | 1745 |
'You cannot continue before all required modules are installed.' => 'Sie können nicht fortfahren, bevor alle benötigten Pakete installiert sind.', |
1741 | 1746 |
'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.', |
1742 | 1747 |
'You cannot create an invoice for delivery orders for different customers.' => 'Sie k?nnen keine Rechnung zu Lieferscheinen f?r verschiedene Kunden erstellen.', |
... | ... | |
1841 | 1846 |
'pos_eur' => 'E/?R', |
1842 | 1847 |
'pos_ustva' => 'UStVA', |
1843 | 1848 |
'posted!' => 'gebucht', |
1844 |
'prices updated!' => ' Preise aktualisiert!', |
|
1845 | 1849 |
'print' => 'drucken', |
1846 | 1850 |
'proforma' => 'Proforma', |
1847 | 1851 |
'project_list' => 'projektliste', |
locale/de/ic | ||
---|---|---|
3 | 3 |
$self->{texts} = { |
4 | 4 |
' Date missing!' => ' Datum fehlt!', |
5 | 5 |
' Part Number missing!' => ' Artikelnummer fehlt!', |
6 |
'#1 prices were updated.' => '#1 Preise wurden aktualisiert.', |
|
6 | 7 |
'*/' => '*/', |
7 | 8 |
'A temporary file could not be created. Please verify that the directory "#1" is writeable by the webserver.' => 'Eine tempor?re Datei konnte nicht angelegt werden. Bitte stellen Sie sicher, dass das Verzeichnis "#1" vom Webserver beschrieben werden darf.', |
8 | 9 |
'ADDED' => 'Hinzugef?gt', |
... | ... | |
172 | 173 |
'No customer has been selected yet.' => 'Es wurde noch kein Kunde ausgew?hlt.', |
173 | 174 |
'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'Es wurde kein oder ein unbekanntes Authentifizierungsmodul in "config/authentication.pl" angegeben.', |
174 | 175 |
'No part was found matching the search parameters.' => 'Es wurde kein Artikel gefunden, auf den die Suchparameter zutreffen.', |
176 |
'No prices will be updated because no prices have been entered.' => 'Es werden keine Preise aktualisiert, weil keine g?ltigen Preis?nderungen eingegeben wurden.', |
|
177 |
'No valid number entered for pricegroup "#1".' => 'F?r Preisgruppe "#1" wurde keine g?ltige Nummer eingegeben.', |
|
175 | 178 |
'No vendor has been selected yet.' => 'Es wurde noch kein Lieferant ausgew?hlt.', |
176 | 179 |
'No.' => 'Position', |
177 | 180 |
'Nov' => 'Nov', |
... | ... | |
303 | 306 |
'Warehouse management' => 'Lagerverwaltung/Bestandsver?nderung', |
304 | 307 |
'Weight' => 'Gewicht', |
305 | 308 |
'Yes' => 'Ja', |
309 |
'You cannot adjust the price for pricegroup "#1" by a negative percentage.' => 'Sie k?nnen den Preis f?r Preisgruppe "#1" um einen negativen Prozentwert anpassen.', |
|
306 | 310 |
'You do not have the permissions to access this function.' => 'Sie verfügen nicht über die notwendigen Rechte, um auf diese Funktion zuzugreifen.', |
307 | 311 |
'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Ihre PostgreSQL-Installation benutzt UTF-8 als Zeichensatz. Sie m?ssen deshalb Lx-Office so konfigurieren, dass es ebenfalls UTF-8 als Zeichensatz benutzt.', |
308 | 312 |
'Zipcode' => 'PLZ', |
... | ... | |
326 | 330 |
'packing_list' => 'Versandliste', |
327 | 331 |
'part_list' => 'warenliste', |
328 | 332 |
'pick_list' => 'Entnahmeliste', |
329 |
'prices updated!' => ' Preise aktualisiert!', |
|
330 | 333 |
'proforma' => 'Proforma', |
331 | 334 |
'purchase_order' => 'Auftrag', |
332 | 335 |
'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to ist nicht definiert.', |
templates/webpages/ic/confirm_price_update_de.html | ||
---|---|---|
10 | 10 |
|
11 | 11 |
<h2 class="confirm">Best?tigen Sie!</h2> |
12 | 12 |
|
13 |
<h4>Sind Sie sicher, dass Sie die Preise aktualisieren wollen?</h4> |
|
13 |
<p> |
|
14 |
[% LxERP.format_string('Ungef?hr #1 Preise werden aktualisiert.', num_matches) %] |
|
15 |
</p> |
|
16 |
|
|
17 |
<p>Sind Sie sicher, dass Sie die Preise aktualisieren wollen?</p> |
|
14 | 18 |
|
15 | 19 |
<p> |
16 | 20 |
<input name="action" class="submit" type="submit" value="Weiter"> |
templates/webpages/ic/confirm_price_update_master.html | ||
---|---|---|
10 | 10 |
|
11 | 11 |
<h2 class="confirm"><translate>Confirm!</translate></h2> |
12 | 12 |
|
13 |
<h4><translate>Are you sure you want to update the prices</translate></h4> |
|
13 |
<p> |
|
14 |
[% LxERP.format_string('<translate>Approximately #1 prices will be updated.</translate>', num_matches) %] |
|
15 |
</p> |
|
16 |
|
|
17 |
<p><translate>Are you sure you want to update the prices</translate>?</p> |
|
14 | 18 |
|
15 | 19 |
<p> |
16 | 20 |
<input name="action" class="submit" type="submit" value="<translate>Continue</translate>"> |
Auch abrufbar als: Unified diff
Bessere Abfragen und (Fehler-)Meldungen bei Preisupdates.
Fix für Bugs 480.