Revision 7942a6ac
Von Moritz Bunkus vor fast 16 Jahren hinzugefügt
SL/IC.pm | ||
---|---|---|
$main::lxdebug->leave_sub();
|
||
}
|
||
|
||
sub update_prices {
|
||
sub _create_filter_for_priceupdate {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($self, $myconfig, $form) = @_;
|
||
my $self = shift;
|
||
my $myconfig = \%main::myconfig;
|
||
my $form = $main::form;
|
||
|
||
my @where_values;
|
||
my $where = '1 = 1';
|
||
my $var;
|
||
|
||
my $group;
|
||
my $limit;
|
||
foreach my $item (qw(partnumber drawing microfiche make model pg.partsgroup)) {
|
||
my $column = $item;
|
||
$column =~ s/.*\.//;
|
||
next unless ($form->{$column});
|
||
|
||
if ($item ne 'make') {
|
||
foreach my $item (qw(partnumber drawing microfiche make model pg.partsgroup)) {
|
||
my $column = $item;
|
||
$column =~ s/.*\.//;
|
||
next unless ($form->{$column});
|
||
$where .= qq| AND $item ILIKE ?|;
|
||
push(@where_values, '%' . $form->{$column} . '%');
|
||
}
|
||
$where .= qq| AND $item ILIKE ?|;
|
||
push(@where_values, '%' . $form->{$column} . '%');
|
||
}
|
||
|
||
# special case for description
|
||
if ($form->{description}
|
||
&& !( $form->{bought} || $form->{sold} || $form->{onorder}
|
||
|| $form->{ordered} || $form->{rfq} || $form->{quoted})) {
|
||
$where .= qq| AND (p.description ILIKE ?)|;
|
||
push(@where_values, '%' . $form->{description} . '%');
|
||
}
|
||
foreach my $item (qw(description serialnumber)) {
|
||
next unless ($form->{$item});
|
||
|
||
# special case for serialnumber
|
||
if ($form->{l_serialnumber} && $form->{serialnumber}) {
|
||
$where .= qq| AND serialnumber ILIKE ?|;
|
||
push(@where_values, '%' . $form->{serialnumber} . '%');
|
||
$where .= qq| AND (${item} ILIKE ?)|;
|
||
push(@where_values, '%' . $form->{$item} . '%');
|
||
}
|
||
|
||
|
||
# items which were never bought, sold or on an order
|
||
if ($form->{itemstatus} eq 'orphaned') {
|
||
$form->{onhand} = $form->{short} = 0;
|
||
$form->{bought} = $form->{sold} = 0;
|
||
$form->{onorder} = $form->{ordered} = 0;
|
||
$form->{rfq} = $form->{quoted} = 0;
|
||
|
||
$form->{transdatefrom} = $form->{transdateto} = "";
|
||
|
||
$where .=
|
||
qq| AND (p.onhand = 0)
|
||
AND p.id NOT IN
|
||
... | ... | |
UNION
|
||
SELECT DISTINCT parts_id FROM orderitems
|
||
)|;
|
||
}
|
||
|
||
if ($form->{itemstatus} eq 'active') {
|
||
} elsif ($form->{itemstatus} eq 'active') {
|
||
$where .= qq| AND p.obsolete = '0'|;
|
||
}
|
||
|
||
if ($form->{itemstatus} eq 'obsolete') {
|
||
} elsif ($form->{itemstatus} eq 'obsolete') {
|
||
$where .= qq| AND p.obsolete = '1'|;
|
||
$form->{onhand} = $form->{short} = 0;
|
||
}
|
||
|
||
if ($form->{itemstatus} eq 'onhand') {
|
||
} elsif ($form->{itemstatus} eq 'onhand') {
|
||
$where .= qq| AND p.onhand > 0|;
|
||
}
|
||
|
||
if ($form->{itemstatus} eq 'short') {
|
||
} elsif ($form->{itemstatus} eq 'short') {
|
||
$where .= qq| AND p.onhand < p.rop|;
|
||
|
||
}
|
||
|
||
foreach my $column (qw(make model)) {
|
||
... | ... | |
push(@where_values, '%' . $form->{$column} . '%');
|
||
}
|
||
|
||
$main::lxdebug->leave_sub();
|
||
|
||
return ($where, @where_values);
|
||
}
|
||
|
||
sub get_num_matches_for_priceupdate {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my $self = shift;
|
||
|
||
my $myconfig = \%main::myconfig;
|
||
my $form = $main::form;
|
||
|
||
my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig);
|
||
|
||
my ($where, @where_values) = $self->_create_filter_for_priceupdate();
|
||
|
||
my $num_updated = 0;
|
||
my $query;
|
||
|
||
for my $column (qw(sellprice listprice)) {
|
||
next if ($form->{$column} eq "");
|
||
|
||
$query =
|
||
qq|SELECT COUNT(*)
|
||
FROM parts
|
||
WHERE id IN
|
||
(SELECT p.id
|
||
FROM parts p
|
||
LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id)
|
||
WHERE $where)|;
|
||
my ($result) = selectfirst_array_query($from, $dbh, $query, @where_values);
|
||
$num_updated += $result if (0 <= $result);
|
||
}
|
||
|
||
$query =
|
||
qq|SELECT COUNT(*)
|
||
FROM prices
|
||
WHERE parts_id IN
|
||
(SELECT p.id
|
||
FROM parts p
|
||
LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id)
|
||
WHERE $where) AND (pricegroup_id = ?)|;
|
||
my $sth = prepare_query($form, $dbh, $query);
|
||
|
||
for my $i (1 .. $form->{price_rows}) {
|
||
next if ($form->{"price_$i"} eq "");
|
||
|
||
my ($result) = do_statement($form, $sth, $query, @where_values, conv_i($form->{"pricegroup_id_$i"}));
|
||
$num_updated += $result if (0 <= $result);
|
||
}
|
||
$sth->finish();
|
||
|
||
$main::lxdebug->leave_sub();
|
||
|
||
return $num_updated;
|
||
}
|
||
|
||
sub update_prices {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($self, $myconfig, $form) = @_;
|
||
|
||
my ($where, @where_values) = $self->_create_filter_for_priceupdate();
|
||
my $num_updated = 0;
|
||
|
||
# connect to database
|
||
my $dbh = $form->dbconnect_noauto($myconfig);
|
||
|
||
... | ... | |
FROM parts p
|
||
LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id)
|
||
WHERE $where)|;
|
||
do_query($from, $dbh, $query, $value, @where_values);
|
||
my $result = do_query($from, $dbh, $query, $value, @where_values);
|
||
$num_updated += $result if (0 <= $result);
|
||
}
|
||
|
||
my $q_add =
|
||
... | ... | |
next if ($form->{"price_$i"} eq "");
|
||
|
||
my $value = $form->parse_amount($myconfig, $form->{"price_$i"});
|
||
my $result;
|
||
|
||
if ($form->{"pricegroup_type_$i"} eq "percent") {
|
||
do_statement($form, $sth_multiply, $q_multiply, ($value / 100) + 1, @where_values, conv_i($form->{"pricegroup_id_$i"}));
|
||
$result = do_statement($form, $sth_multiply, $q_multiply, ($value / 100) + 1, @where_values, conv_i($form->{"pricegroup_id_$i"}));
|
||
} else {
|
||
do_statement($form, $sth_add, $q_add, $value, @where_values, conv_i($form->{"pricegroup_id_$i"}));
|
||
$result = do_statement($form, $sth_add, $q_add, $value, @where_values, conv_i($form->{"pricegroup_id_$i"}));
|
||
}
|
||
|
||
$num_updated += $result if (0 <= $result);
|
||
}
|
||
|
||
$sth_add->finish();
|
||
... | ... | |
|
||
$main::lxdebug->leave_sub();
|
||
|
||
return $rc;
|
||
return $num_updated;
|
||
}
|
||
|
||
sub create_links {
|
bin/mozilla/ic.pl | ||
---|---|---|
|
||
$auth->assert('part_service_assembly_edit');
|
||
|
||
my @errors = ();
|
||
my $value_found = false;
|
||
|
||
foreach my $idx (qw(sellprice listprice), (1..$form->{price_rows})) {
|
||
my $name = $idx =~ m/\d/ ? $form->{"pricegroup_${idx}"} : $idx eq 'sellprice' ? $locale->text('Sell Price') : $locale->text('List Price');
|
||
my $type = $idx =~ m/\d/ ? $form->{"pricegroup_type_${idx}"} : $form->{"${idx}_type"};
|
||
my $value_idx = $idx =~ m/\d/ ? "price_${idx}" : $idx;
|
||
my $value = $form->parse_amount(\%myconfig, $form->{$value_idx});
|
||
|
||
if ((0 > $value) && ($type eq 'percent')) {
|
||
push @errors, $locale->text('You cannot adjust the price for pricegroup "#1" by a negative percentage.', $name);
|
||
|
||
} elsif (!$value && ($form->{$value_idx} ne '')) {
|
||
push @errors, $locale->text('No valid number entered for pricegroup "#1".', $name);
|
||
|
||
} elsif (0 < $value) {
|
||
$value_found = 1;
|
||
}
|
||
}
|
||
|
||
push @errors, $locale->text('No prices will be updated because no prices have been entered.') if (!$value_found);
|
||
|
||
my $num_matches = IC->get_num_matches_for_priceupdate();
|
||
|
||
$form->header();
|
||
|
||
if (@errors) {
|
||
$form->show_generic_error(join('<br>', @errors), 'back_button' => 1);
|
||
}
|
||
|
||
$form->{nextsub} = "update_prices";
|
||
$form->header;
|
||
|
||
map { delete $form->{$_} } qw(action header);
|
||
|
||
print $form->parse_html_template('ic/confirm_price_update', { HIDDENS => [ map { name => $_, value => $form->{$_} }, keys %$form ] });
|
||
print $form->parse_html_template('ic/confirm_price_update', { HIDDENS => [ map { name => $_, value => $form->{$_} }, keys %$form ],
|
||
num_matches => $num_matches });
|
||
|
||
$lxdebug->leave_sub();
|
||
}
|
||
... | ... | |
|
||
$auth->assert('part_service_assembly_edit');
|
||
|
||
if (IC->update_prices(\%myconfig, \%$form)) {
|
||
$form->redirect($form->{update_count} . $locale->text('prices updated!'));
|
||
my $num_updated = IC->update_prices(\%myconfig, \%$form);
|
||
|
||
if (-1 != $num_updated) {
|
||
$form->redirect($locale->text('#1 prices were updated.', $num_updated));
|
||
} else {
|
||
$form->error($locale->text('Could not update prices!'));
|
||
}
|
locale/de/all | ||
---|---|---|
' Date missing!' => ' Datum fehlt!',
|
||
' Part Number missing!' => ' Artikelnummer fehlt!',
|
||
' missing!' => ' fehlt!',
|
||
'#1 prices were updated.' => '#1 Preise wurden aktualisiert.',
|
||
'<%account_number%> -- Your account number' => '<%account_number%> -- Ihre Kontonummer',
|
||
'<%bank%> -- Your bank' => '<%bank%> -- Der Name Ihrer Bank',
|
||
'<%bank_code%> -- Your bank code' => '<%bank_code%> -- Die Bankleitzahl Ihrer Bank',
|
||
... | ... | |
'Application Error. No Format given' => 'Fehler in der Anwendung. Das Ausgabeformat fehlt.',
|
||
'Application Error. Wrong Format' => 'Fehler in der Anwendung. Falsches Format: ',
|
||
'Applying [% HTML.escape(file) %]:' => 'Führe [% HTML.escape(file) %] aus:',
|
||
'Approximately #1 prices will be updated.' => 'Ungef?hr #1 Preise werden aktualisiert.',
|
||
'Apr' => 'Apr',
|
||
'April' => 'April',
|
||
'Ar aging on %s' => 'Offene Forderungen zum %s',
|
||
... | ... | |
'Are you sure you want to delete Quotation Number' => 'Sind Sie sicher, dass Angebotnummer gel?scht werden soll?',
|
||
'Are you sure you want to delete Transaction' => 'Buchung wirklich l?schen?',
|
||
'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?',
|
||
'Are you sure you want to update the prices' => 'Sind Sie sicher, dass Sie die Preise aktualisieren wollen?',
|
||
'Are you sure you want to update the prices' => 'Sind Sie sicher, dass Sie die Preise aktualisieren wollen',
|
||
'Article Code' => 'Artikelk?rzel',
|
||
'Article Code missing!' => 'Artikelk?rzel fehlt',
|
||
'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.',
|
||
... | ... | |
'No licenses were found that match the search criteria.' => 'Es wurden keine Lizenzen gefunden, auf die die Suchkriterien zutreffen.',
|
||
'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'Es wurde kein oder ein unbekanntes Authentifizierungsmodul in "config/authentication.pl" angegeben.',
|
||
'No part was found matching the search parameters.' => 'Es wurde kein Artikel gefunden, auf den die Suchparameter zutreffen.',
|
||
'No prices will be updated because no prices have been entered.' => 'Es werden keine Preise aktualisiert, weil keine g?ltigen Preis?nderungen eingegeben wurden.',
|
||
'No problems were recognized.' => 'Es wurden keine Probleme gefunden.',
|
||
'No unknown units where found.' => 'Es wurden keine unbekannten Einheiten gefunden.',
|
||
'No user has been selected.' => 'Es wurde kein Benutzer ausgewählt.',
|
||
'No valid number entered for pricegroup "#1".' => 'F?r Preisgruppe "#1" wurde keine g?ltige Nummer eingegeben.',
|
||
'No vendor has been selected yet.' => 'Es wurde noch kein Lieferant ausgew?hlt.',
|
||
'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.',
|
||
'No.' => 'Position',
|
||
... | ... | |
'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.',
|
||
'You can only delete datasets that are not in use.' => 'Sie können nur Datenbanken löschen, die momentan nicht in Benutzung sind.',
|
||
'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:',
|
||
'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.',
|
||
'You cannot continue before all required modules are installed.' => 'Sie können nicht fortfahren, bevor alle benötigten Pakete installiert sind.',
|
||
'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 cannot create an invoice for delivery orders for different customers.' => 'Sie k?nnen keine Rechnung zu Lieferscheinen f?r verschiedene Kunden erstellen.',
|
||
... | ... | |
'pos_eur' => 'E/?R',
|
||
'pos_ustva' => 'UStVA',
|
||
'posted!' => 'gebucht',
|
||
'prices updated!' => ' Preise aktualisiert!',
|
||
'print' => 'drucken',
|
||
'proforma' => 'Proforma',
|
||
'project_list' => 'projektliste',
|
locale/de/ic | ||
---|---|---|
$self->{texts} = {
|
||
' Date missing!' => ' Datum fehlt!',
|
||
' Part Number missing!' => ' Artikelnummer fehlt!',
|
||
'#1 prices were updated.' => '#1 Preise wurden aktualisiert.',
|
||
'*/' => '*/',
|
||
'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.',
|
||
'ADDED' => 'Hinzugef?gt',
|
||
... | ... | |
'No customer has been selected yet.' => 'Es wurde noch kein Kunde ausgew?hlt.',
|
||
'No or an unknown authenticantion module specified in "config/authentication.pl".' => 'Es wurde kein oder ein unbekanntes Authentifizierungsmodul in "config/authentication.pl" angegeben.',
|
||
'No part was found matching the search parameters.' => 'Es wurde kein Artikel gefunden, auf den die Suchparameter zutreffen.',
|
||
'No prices will be updated because no prices have been entered.' => 'Es werden keine Preise aktualisiert, weil keine g?ltigen Preis?nderungen eingegeben wurden.',
|
||
'No valid number entered for pricegroup "#1".' => 'F?r Preisgruppe "#1" wurde keine g?ltige Nummer eingegeben.',
|
||
'No vendor has been selected yet.' => 'Es wurde noch kein Lieferant ausgew?hlt.',
|
||
'No.' => 'Position',
|
||
'Nov' => 'Nov',
|
||
... | ... | |
'Warehouse management' => 'Lagerverwaltung/Bestandsver?nderung',
|
||
'Weight' => 'Gewicht',
|
||
'Yes' => 'Ja',
|
||
'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.',
|
||
'You do not have the permissions to access this function.' => 'Sie verfügen nicht über die notwendigen Rechte, um auf diese Funktion zuzugreifen.',
|
||
'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.',
|
||
'Zipcode' => 'PLZ',
|
||
... | ... | |
'packing_list' => 'Versandliste',
|
||
'part_list' => 'warenliste',
|
||
'pick_list' => 'Entnahmeliste',
|
||
'prices updated!' => ' Preise aktualisiert!',
|
||
'proforma' => 'Proforma',
|
||
'purchase_order' => 'Auftrag',
|
||
'report_generator_dispatch_to is not defined.' => 'report_generator_dispatch_to ist nicht definiert.',
|
templates/webpages/ic/confirm_price_update_de.html | ||
---|---|---|
|
||
<h2 class="confirm">Best?tigen Sie!</h2>
|
||
|
||
<h4>Sind Sie sicher, dass Sie die Preise aktualisieren wollen?</h4>
|
||
<p>
|
||
[% LxERP.format_string('Ungef?hr #1 Preise werden aktualisiert.', num_matches) %]
|
||
</p>
|
||
|
||
<p>Sind Sie sicher, dass Sie die Preise aktualisieren wollen?</p>
|
||
|
||
<p>
|
||
<input name="action" class="submit" type="submit" value="Weiter">
|
templates/webpages/ic/confirm_price_update_master.html | ||
---|---|---|
|
||
<h2 class="confirm"><translate>Confirm!</translate></h2>
|
||
|
||
<h4><translate>Are you sure you want to update the prices</translate></h4>
|
||
<p>
|
||
[% LxERP.format_string('<translate>Approximately #1 prices will be updated.</translate>', num_matches) %]
|
||
</p>
|
||
|
||
<p><translate>Are you sure you want to update the prices</translate>?</p>
|
||
|
||
<p>
|
||
<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.