Revision 91ab1ef6
Von Sven Schöling vor mehr als 17 Jahren hinzugefügt
SL/Common.pm | ||
---|---|---|
return $employees;
|
||
}
|
||
|
||
sub retrieve_customers_or_vendors {
|
||
$main::lxdebug->enter_sub();
|
||
|
||
my ($self, $myconfig, $form, $order_by, $order_dir, $is_vendor, $allow_both) = @_;
|
||
|
||
my $dbh = $form->dbconnect($myconfig);
|
||
|
||
my (@filter_values, $filter);
|
||
if ($form->{"name"}) {
|
||
$filter .= " AND (TABLE.name ILIKE ?)";
|
||
push(@filter_values, '%' . $form->{"name"} . '%');
|
||
}
|
||
if (!$form->{"obsolete"}) {
|
||
$filter .= " AND NOT TABLE.obsolete";
|
||
}
|
||
substr($filter, 1, 3) = "WHERE" if ($filter);
|
||
|
||
$order_by =~ s/[^a-zA-Z_]//g;
|
||
$order_dir = $order_dir ? "ASC" : "DESC";
|
||
|
||
my (@queries, @query_parameters);
|
||
|
||
if ($allow_both || !$is_vendor) {
|
||
my $c_filter = $filter;
|
||
$c_filter =~ s/TABLE/c/g;
|
||
push(@queries, qq|SELECT
|
||
c.id, c.name, 0 AS customer_is_vendor,
|
||
c.street, c.zipcode, c.city,
|
||
ct.cp_greeting, ct.cp_title, ct.cp_givenname, ct.cp_name
|
||
FROM customer c
|
||
LEFT JOIN contacts ct ON (c.id = ct.cp_cv_id)
|
||
$c_filter|);
|
||
push(@query_parameters, @filter_values);
|
||
}
|
||
|
||
if ($allow_both || $is_vendor) {
|
||
my $v_filter = $filter;
|
||
$v_filter =~ s/TABLE/v/g;
|
||
push(@queries, qq|SELECT
|
||
v.id, v.name, 1 AS customer_is_vendor,
|
||
v.street, v.zipcode, v.city,
|
||
ct.cp_greeting, ct.cp_title, ct.cp_givenname, ct.cp_name
|
||
FROM vendor v
|
||
LEFT JOIN contacts ct ON (v.id = ct.cp_cv_id)
|
||
$v_filter|);
|
||
push(@query_parameters, @filter_values);
|
||
}
|
||
|
||
my $query = join(" UNION ", @queries) . " ORDER BY $order_by $order_dir";
|
||
my $sth = $dbh->prepare($query);
|
||
$sth->execute(@query_parameters) || $form->dberror($query . " (" . join(", ", @query_parameters) . ")");
|
||
my $customers = [];
|
||
while (my $ref = $sth->fetchrow_hashref()) {
|
||
push(@{$customers}, $ref);
|
||
}
|
||
$sth->finish();
|
||
$dbh->disconnect();
|
||
|
||
$main::lxdebug->leave_sub();
|
||
|
||
return $customers;
|
||
}
|
||
|
||
sub retrieve_delivery_customer {
|
||
$main::lxdebug->enter_sub();
|
||
|
SL/Form.pm | ||
---|---|---|
|
||
$file = $self->_prepare_html_template($file, $additional_params);
|
||
|
||
my $template = Template->new({ 'INTERPOLATE' => 0,
|
||
'EVAL_PERL' => 0,
|
||
'ABSOLUTE' => 1,
|
||
'CACHE_SIZE' => 0,
|
||
'PLUGIN_BASE' => 'SL::Template::Plugin',
|
||
my $template = Template->new({ 'INTERPOLATE' => 0,
|
||
'EVAL_PERL' => 0,
|
||
'ABSOLUTE' => 1,
|
||
'CACHE_SIZE' => 0,
|
||
'PLUGIN_BASE' => 'SL::Template::Plugin',
|
||
'INCLUDE_PATH' => '.:templates/webpages',
|
||
}) || die;
|
||
|
||
map { $additional_params->{$_} ||= $self->{$_} } keys %{ $self };
|
SL/Template/Plugin/LxERP.pm | ||
---|---|---|
|
||
use base qw( Template::Plugin );
|
||
use Template::Plugin;
|
||
use List::Util qw(first);
|
||
|
||
sub new {
|
||
my $class = shift;
|
bin/mozilla/common.pl | ||
---|---|---|
$lxdebug->leave_sub();
|
||
}
|
||
|
||
## Customers/Vendors
|
||
|
||
sub check_customer_or_vendor {
|
||
$lxdebug->enter_sub();
|
||
|
||
my ($field, $cov_selected_nextsub, $is_vendor) = @_;
|
||
|
||
if ($form->{"f_${field}"} eq $form->{"f_old_${field}"}) {
|
||
$lxdebug->leave_sub();
|
||
return 1;
|
||
}
|
||
|
||
my $type = $is_vendor ? $locale->text("vendor") : $locale->text("customer");
|
||
|
||
my $old_form = save_form();
|
||
$form->{"name"} = $form->{"f_${field}"};
|
||
$form->{"obsolete"} = 1;
|
||
my $covs;
|
||
$covs = Common->retrieve_customers_or_vendors(\%myconfig, $form, "name", 1, $is_vendor);
|
||
restore_form($old_form);
|
||
|
||
if (0 == scalar(@{$covs})) {
|
||
$form->header();
|
||
$form->show_generic_error(sprintf($locale->text("There is no %s whose name matches '%s'."), $type, $form->{"f_${field}"}));
|
||
|
||
$lxdebug->leave_sub();
|
||
return 0;
|
||
|
||
}
|
||
|
||
if (1 != scalar(@{$covs})) {
|
||
# If there is more than one CoV with the same name
|
||
# then we have to check if the ID is set, too. Otherwise
|
||
# we'd be stuck in an endless loop.
|
||
if ($form->{"f_${field}_id"}) {
|
||
foreach my $cov (@{$covs}) {
|
||
if (($form->{"f_${field}_id"} == $cov->{"id"}) &&
|
||
($form->{"f_${field}"} eq $cov->{"name"})) {
|
||
$lxdebug->leave_sub();
|
||
return 1;
|
||
}
|
||
}
|
||
}
|
||
|
||
$form->{"cov_selected_nextsub"} = $cov_selected_nextsub;
|
||
$form->{"check_cov_field"} = $field;
|
||
select_customer_or_vendor("cov_selected", $is_vendor, @{$covs});
|
||
$lxdebug->leave_sub();
|
||
return 0;
|
||
}
|
||
|
||
$form->{"f_${field}_id"} = $covs->[0]->{"id"};
|
||
$form->{"f_${field}"} = $covs->[0]->{"name"};
|
||
|
||
$lxdebug->leave_sub();
|
||
|
||
return 1;
|
||
}
|
||
|
||
sub select_customer_or_vendor {
|
||
$lxdebug->enter_sub();
|
||
|
||
my ($callback_sub, $is_vendor, @covs) = @_;
|
||
|
||
my $old_form = save_form();
|
||
|
||
if (0 == scalar(@covs)) {
|
||
delete($form->{"name"});
|
||
$form->{"obsolete"} = 1;
|
||
my $c = Common->retrieve_customers_or_vendors(\%myconfig, $form, "name", 1, $is_vendor);
|
||
restore_form($old_form);
|
||
@covs = @{$c};
|
||
}
|
||
|
||
$form->header();
|
||
print($form->parse_html_template("generic/select_customer_or_vendor",
|
||
{ "COVS" => \@covs,
|
||
"old_form" => $old_form,
|
||
"title" => $is_vendor ? $locale->text("Select a vendor") : $locale->text("Select a customer"),
|
||
"nextsub" => "select_cov_internal",
|
||
"callback_sub" => $callback_sub }));
|
||
|
||
$lxdebug->leave_sub();
|
||
}
|
||
|
||
sub cov_selected {
|
||
$lxdebug->enter_sub();
|
||
my ($new_id, $new_name) = @_;
|
||
|
||
my $field = $form->{"check_cov_field"};
|
||
delete($form->{"check_cov_field"});
|
||
|
||
$form->{"f_${field}_id"} = $new_id;
|
||
$form->{"f_${field}"} = $new_name;
|
||
$form->{"f_old_${field}"} = $new_name;
|
||
|
||
&{ $form->{"cov_selected_nextsub"} }();
|
||
|
||
$lxdebug->leave_sub();
|
||
}
|
||
|
||
sub select_cov_internal {
|
||
$lxdebug->enter_sub();
|
||
|
||
my ($new_id, $new_name, $callback_sub);
|
||
|
||
my $new_id = $form->{"new_id_" . $form->{"selection"}};
|
||
my $new_name = $form->{"new_name_" . $form->{"selection"}};
|
||
my $callback_sub = $form->{"callback_sub"};
|
||
|
||
restore_form($form->{"old_form"});
|
||
|
||
&{ $callback_sub }($new_id, $new_name);
|
||
|
||
$lxdebug->leave_sub();
|
||
}
|
||
|
||
sub select_part {
|
||
$lxdebug->enter_sub();
|
||
|
||
... | ... | |
$lxdebug->leave_sub();
|
||
}
|
||
|
||
sub cov_selection_internal {
|
||
$lxdebug->enter_sub();
|
||
|
||
$order_by = "name";
|
||
$order_by = $form->{"order_by"} if (defined($form->{"order_by"}));
|
||
$order_dir = 1;
|
||
$order_dir = $form->{"order_dir"} if (defined($form->{"order_dir"}));
|
||
|
||
my $type = $form->{"is_vendor"} ? $locale->text("vendor") : $locale->text("customer");
|
||
|
||
$covs = Common->retrieve_customers_or_vendors(\%myconfig, $form, $order_by, $order_dir, $form->{"is_vendor"}, $form->{"allow_both"});
|
||
map({ $covs->[$_]->{"selected"} = $_ ? 0 : 1; } (0..$#{$covs}));
|
||
if (0 == scalar(@{$covs})) {
|
||
$form->show_generic_information(sprintf($locale->text("No %s was found matching the search parameters."), $type));
|
||
} elsif (1 == scalar(@{$covs})) {
|
||
$onload = "cov_selected('1')";
|
||
}
|
||
|
||
my $callback = "$form->{script}?action=cov_selection_internal&";
|
||
map({ $callback .= "$_=" . $form->escape($form->{$_}) . "&" }
|
||
(qw(login path password name input_name input_id is_vendor allow_both), grep({ /^[fl]_/ } keys %$form)));
|
||
|
||
my @header_sort = qw(name address contact);
|
||
my %header_title = ( "name" => $locale->text("Name"),
|
||
"address" => $locale->text("Address"),
|
||
"contact" => $locale->text("Contact"),
|
||
);
|
||
|
||
my @header =
|
||
map(+{ "column_title" => $header_title{$_},
|
||
"column" => $_,
|
||
"callback" => $callback . "order_by=${_}&order_dir=" . ($order_by eq $_ ? 1 - $order_dir : $order_dir),
|
||
},
|
||
@header_sort);
|
||
|
||
foreach my $cov (@{ $covs }) {
|
||
$cov->{address} = "$cov->{street}, $cov->{zipcode} $cov->{city}";
|
||
$cov->{address} =~ s{^,}{}x;
|
||
$cov->{address} =~ s{\ +}{\ }gx;
|
||
|
||
$cov->{contact} = join " ", map { $cov->{$_} } qw(cp_greeting cp_title cp_givenname cp_name);
|
||
$cov->{contact} =~ s{\ +}{\ }gx;
|
||
}
|
||
|
||
$form->{"title"} = $form->{is_vendor} ? $locale->text("Select a vendor") : $locale->text("Select a customer");
|
||
$form->header();
|
||
print($form->parse_html_template("generic/cov_selection", { "HEADER" => \@header,
|
||
"COVS" => $covs,
|
||
"onload" => $onload }));
|
||
|
||
$lxdebug->leave_sub();
|
||
}
|
||
|
||
sub check_cov2 {
|
||
$lxdebug->enter_sub();
|
||
|
||
my $callback_sub = shift;
|
||
|
||
if (!$form->{customer}
|
||
|| ($form->{customer} eq $form->{old_customer})
|
||
|| ("$form->{customer}--$form->{customer_id}" eq $form->{old_customer})) {
|
||
$lxdebug->leave_sub();
|
||
return;
|
||
}
|
||
|
||
$old_name = $form->{name};
|
||
$form->{name} = $form->{customer};
|
||
|
||
my $covs = Common->retrieve_customers_or_vendors(\%myconfig, $form, "name", "ASC", 0, 1);
|
||
|
||
$form->{name} = $old_name;
|
||
|
||
if (0 == scalar @{$covs}) {
|
||
$form->show_generic_information(sprintf($locale->text("No %s was found matching the search parameters."), $type));
|
||
|
||
} elsif (1 == scalar @{ $covs }) {
|
||
$form->{customer} = $covs->[0]->{name};
|
||
$form->{old_customer} = $covs->[0]->{name};
|
||
$form->{customer_id} = $covs->[0]->{id};
|
||
$form->{customer_is_vendor} = $covs->[0]->{customer_is_vendor};
|
||
|
||
} else {
|
||
$form->{new_cov_nextsub} = $callback_sub;
|
||
|
||
delete @{$form}{qw(customer customer_is_vendor customer_id old_customer action)};
|
||
my @hidden = map { { 'key' => $_, 'value' => $form->{$_} } } grep { '' eq ref $form->{$_} } keys %{ $form };
|
||
|
||
foreach my $cov (@{ $covs }) {
|
||
$cov->{address} = "$cov->{street}, $cov->{zipcode} $cov->{city}";
|
||
$cov->{address} =~ s{^,}{}x;
|
||
$cov->{address} =~ s{\ +}{\ }gx;
|
||
|
||
$cov->{contact} = join " ", map { $cov->{$_} } qw(cp_greeting cp_title cp_givenname cp_name);
|
||
$cov->{contact} =~ s{\ +}{\ }gx;
|
||
}
|
||
|
||
$form->{title} = $locale->text("Select a vendor or customer");
|
||
$form->header();
|
||
|
||
print $form->parse_html_template("generic/cov_selection2", { "COVS" => $covs, "HIDDEN" => \@hidden });
|
||
|
||
exit 0;
|
||
}
|
||
|
||
$lxdebug->leave_sub();
|
||
}
|
||
|
||
sub cov_selected2 {
|
||
$lxdebug->enter_sub();
|
||
|
||
if (!$form->{new_cov} || !$form->{new_cov_nextsub}) {
|
||
$form->error($locale->text('No customer has been selected.'));
|
||
}
|
||
|
||
map { $form->{$_} = $form->{"new_cov_${_}_$form->{new_cov}"} } qw(customer customer_id customer_is_vendor);
|
||
$form->{old_customer} = $form->{customer};
|
||
|
||
&{ $form->{new_cov_nextsub} }();
|
||
|
||
$lxdebug->leave_sub();
|
||
}
|
||
|
||
sub select_item_selection_internal {
|
||
$lxdebug->enter_sub();
|
||
|
||
@items = SystemBrace->retrieve_select_items(\%myconfig, $form, $form->{"select_item_type"});
|
||
if (0 == scalar(@items)) {
|
||
$form->show_generic_information($locale->text("No item was found."));
|
||
} elsif (1 == scalar(@items)) {
|
||
$onload = "select_item_selected('1')";
|
||
}
|
||
|
||
$form->{"title"} = $locale->text("Select an entry");
|
||
$form->header();
|
||
print($form->parse_html_template("generic/select_item_selection", { "SELECT_ITEMS" => \@items,
|
||
"onload" => $onload }));
|
||
|
||
$lxdebug->leave_sub();
|
||
}
|
||
1;
|
bin/mozilla/invoice_io.pl | ||
---|---|---|
# Eintrag fuer Version 2.2.0 geaendert #
|
||
# neue Optik im Rechnungsformular #
|
||
########################################
|
||
sub display_row {
|
||
$lxdebug->enter_sub();
|
||
my $numrows = shift;
|
||
|
||
my $is_sales =
|
||
(substr($form->{type}, 0, 6) eq "sales_")
|
||
|| (($form->{type} eq "invoice") && ($form->{script} eq "is.pl"))
|
||
|| ($form->{type} eq 'credit_note');
|
||
|
||
if ($lizenzen && $form->{vc} eq "customer") {
|
||
if ($form->{type} =~ /sales_order/) {
|
||
@column_index = (runningnumber, partnumber, description, ship, qty);
|
||
} elsif ($form->{type} =~ /sales_quotation/) {
|
||
@column_index = (runningnumber, partnumber, description, qty);
|
||
} else {
|
||
@column_index = (runningnumber, partnumber, description, qty);
|
||
}
|
||
} else {
|
||
if ( ($form->{type} =~ /purchase_order/)
|
||
|| ($form->{type} =~ /sales_order/)) {
|
||
@column_index = (runningnumber, partnumber, description, ship, qty);
|
||
} else {
|
||
@column_index = (runningnumber, partnumber, description, qty);
|
||
}
|
||
}
|
||
############## ENDE Neueintrag ##################
|
||
|
||
my $dimension_units = AM->retrieve_units(\%myconfig, $form, "dimension");
|
||
my $service_units = AM->retrieve_units(\%myconfig, $form, "service");
|
||
my $all_units = AM->retrieve_units(\%myconfig, $form);
|
||
|
||
my %price_factors = map { $_->{id} => $_->{factor} } @{ $form->{ALL_PRICE_FACTORS} };
|
||
|
||
push @column_index, qw(unit);
|
||
|
||
#for pricegroups column
|
||
if ( $form->{type} =~ (/sales_quotation/)
|
||
or (($form->{level} =~ /Sales/) and ($form->{type} =~ /invoice/))
|
||
or (($form->{level} eq undef) and ($form->{type} =~ /invoice/))
|
||
or ($form->{type} =~ /sales_order/)) {
|
||
push @column_index, qw(sellprice_pg);
|
||
}
|
||
|
||
push @column_index, qw(sellprice);
|
||
|
||
if ($form->{vc} eq 'customer') {
|
||
push @column_index, qw(discount);
|
||
}
|
||
|
||
push @column_index, "linetotal";
|
||
|
||
my $colspan = $#column_index + 1;
|
||
|
||
$form->{invsubtotal} = 0;
|
||
map { $form->{"${_}_base"} = 0 } (split(/ /, $form->{taxaccounts}));
|
||
|
||
########################################
|
||
# Eintrag fuer Version 2.2.0 geaendert #
|
||
# neue Optik im Rechnungsformular #
|
||
########################################
|
||
$column_data{runningnumber} = qq|<th align="left" nowrap width="5%" class="listheading">| . $locale->text('No.') . qq|</th>|;
|
||
$column_data{partnumber} = qq|<th align="left" nowrap width="12%" class="listheading">| . $locale->text('Number') . qq|</th>|;
|
||
$column_data{description} = qq|<th align="left" nowrap width="30%" class="listheading">| . $locale->text('Part Description') . qq|</th>|;
|
||
if ($form->{"type"} eq "purchase_order") {
|
||
$column_data{ship} = qq|<th align="left" nowrap width="5%" class="listheading">| . $locale->text('Ship rcvd') . qq|</th>|;
|
||
} else {
|
||
$column_data{ship} = qq|<th align="left" nowrap width="5%" class="listheading">| . $locale->text('Ship') . qq|</th>|;
|
||
}
|
||
$column_data{qty} = qq|<th align="left" nowrap width="5%" class="listheading">| . $locale->text('Qty') . qq|</th>|;
|
||
$column_data{unit} = qq|<th align="left" nowrap width="20%" class="listheading">| . $locale->text('Unit') . qq|</th>|;
|
||
$column_data{license} = qq|<th align="left" nowrap width="10%" class="listheading">| . $locale->text('License') . qq|</th>|;
|
||
$column_data{serialnr} = qq|<th align="left" nowrap width="10%" class="listheading">| . $locale->text('Serial No.') . qq|</th>|;
|
||
$column_data{projectnr} = qq|<th align="left" nowrap width="10%" class="listheading">| . $locale->text('Project') . qq|</th>|;
|
||
$column_data{sellprice} = qq|<th align="left" nowrap width="15%" class="listheading">| . $locale->text('Price') . qq|</th>|;
|
||
$column_data{sellprice_pg} = qq|<th align="left" nowrap width="15%" class="listheading">| . $locale->text('Pricegroup') . qq|</th>|;
|
||
$column_data{discount} = qq|<th align="left" nowrap width="5%" class="listheading">| . $locale->text('Discount') . qq|</th>|;
|
||
$column_data{linetotal} = qq|<th align="left" nowrap width="10%" class="listheading">| . $locale->text('Extended') . qq|</th>|;
|
||
$column_data{bin} = qq|<th align="left" nowrap width="10%" class="listheading">| . $locale->text('Bin') . qq|</th>|;
|
||
############## ENDE Neueintrag ##################
|
||
|
||
$myconfig{"show_form_details"} = 1
|
||
unless (defined($myconfig{"show_form_details"}));
|
||
$form->{"show_details"} = $myconfig{"show_form_details"}
|
||
unless (defined($form->{"show_details"}));
|
||
$form->{"show_details"} = $form->{"show_details"} ? 1 : 0;
|
||
my $show_details_new = 1 - $form->{"show_details"};
|
||
my $show_details_checked = $form->{"show_details"} ? "checked" : "";
|
||
|
||
print qq|
|
||
<tr>
|
||
<td>| . $cgi->hidden("-name" => "show_details", "-value" => $form->{show_details}) . qq|
|
||
<input type="checkbox" id="cb_show_details" onclick="show_form_details($show_details_new);" $show_details_checked>
|
||
<label for="cb_show_details">| . $locale->text("Show details") . qq|</label><br>
|
||
<table width="100%">
|
||
<tr class="listheading">|;
|
||
|
||
map { print "\n$column_data{$_}" } @column_index;
|
||
|
||
print qq|
|
||
</tr>
|
||
|;
|
||
|
||
$runningnumber = $locale->text('No.');
|
||
$deliverydate = $locale->text('Delivery Date');
|
||
$serialnumber = $locale->text('Serial No.');
|
||
$projectnumber = $locale->text('Project');
|
||
$partsgroup = $locale->text('Group');
|
||
$reqdate = $locale->text('Reqdate');
|
||
|
||
$delvar = 'deliverydate';
|
||
|
||
if ($form->{type} =~ /_order$/ || $form->{type} =~ /_quotation$/) {
|
||
$deliverydate = $locale->text('Required by');
|
||
$delvar = 'reqdate';
|
||
}
|
||
|
||
$form->{marge_total} = 0;
|
||
$form->{sellprice_total} = 0;
|
||
$form->{lastcost_total} = 0;
|
||
my %projectnumber_labels = ();
|
||
my @projectnumber_values = ("");
|
||
foreach my $item (@{ $form->{"ALL_PROJECTS"} }) {
|
||
push(@projectnumber_values, $item->{"id"});
|
||
$projectnumber_labels{$item->{"id"}} = $item->{"projectnumber"};
|
||
}
|
||
|
||
for $i (1 .. $numrows) {
|
||
|
||
# undo formatting
|
||
map {
|
||
$form->{"${_}_$i"} =
|
||
$form->parse_amount(\%myconfig, $form->{"${_}_$i"})
|
||
} qw(qty ship discount sellprice price_new price_old) unless ($form->{simple_save});
|
||
|
||
if (!$form->{"unit_old_$i"}) {
|
||
# Neue Ware aus der Datenbank. In diesem Fall ist unit_$i die
|
||
# Einheit, wie sie in den Stammdaten hinterlegt wurde.
|
||
# Es sollte also angenommen werden, dass diese ausgewaehlt war.
|
||
$form->{"unit_old_$i"} = $form->{"unit_$i"};
|
||
}
|
||
|
||
# Die zuletzt ausgewaehlte mit der aktuell ausgewaehlten Einheit
|
||
# vergleichen und bei Unterschied den Preis entsprechend umrechnen.
|
||
$form->{"selected_unit_$i"} = $form->{"unit_$i"} unless ($form->{"selected_unit_$i"});
|
||
|
||
my $check_units = $form->{"inventory_accno_$i"} ? $dimension_units : $service_units;
|
||
if (!$check_units->{$form->{"selected_unit_$i"}} ||
|
||
($check_units->{$form->{"selected_unit_$i"}}->{"base_unit"} ne
|
||
$all_units->{$form->{"unit_old_$i"}}->{"base_unit"})) {
|
||
# Die ausgewaehlte Einheit ist fuer diesen Artikel nicht gueltig
|
||
# (z.B. Dimensionseinheit war ausgewaehlt, es handelt sich aber
|
||
# um eine Dienstleistung). Dann keinerlei Umrechnung vornehmen.
|
||
$form->{"unit_old_$i"} = $form->{"selected_unit_$i"} = $form->{"unit_$i"};
|
||
}
|
||
if ((!$form->{"prices_$i"}) || ($form->{"new_pricegroup_$i"} == $form->{"old_pricegroup_$i"})) {
|
||
if ($form->{"unit_old_$i"} ne $form->{"selected_unit_$i"}) {
|
||
my $basefactor = 1;
|
||
if (defined($all_units->{$form->{"unit_old_$i"}}->{"factor"}) &&
|
||
$all_units->{$form->{"unit_old_$i"}}->{"factor"}) {
|
||
$basefactor = $all_units->{$form->{"selected_unit_$i"}}->{"factor"} /
|
||
$all_units->{$form->{"unit_old_$i"}}->{"factor"};
|
||
}
|
||
$form->{"sellprice_$i"} *= $basefactor;
|
||
$form->{"unit_old_$i"} = $form->{"selected_unit_$i"};
|
||
}
|
||
}
|
||
|
||
($dec) = ($form->{"sellprice_$i"} =~ /\.(\d+)/);
|
||
$decimalplaces = max length($dec), 2;
|
||
|
||
$price_factor = $price_factors{$form->{"price_factor_id_$i"}} || 1;
|
||
$discount = (100 - $form->{"discount_$i"} * 1) / 100;
|
||
|
||
$linetotal = $form->round_amount($form->{"sellprice_$i"} * $form->{"qty_$i"} * $discount / $price_factor, $decimalplaces);
|
||
|
||
my $real_sellprice = $form->{"sellprice_$i"} * $discount / $price_factor;
|
||
|
||
# marge calculations
|
||
my ($marge_font_start, $marge_font_end);
|
||
|
||
$form->{"lastcost_$i"} *= 1;
|
||
|
||
$marge_price_factor = $form->{"marge_price_factor_$i"} * 1 || 1;
|
||
|
||
if ($real_sellprice && ($form->{"qty_$i"} * 1)) {
|
||
$form->{"marge_percent_$i"} = ($real_sellprice - $form->{"lastcost_$i"} / $marge_price_factor) * 100 / $real_sellprice;
|
||
$myconfig{"marge_percent_warn"} = 15 unless (defined($myconfig{"marge_percent_warn"}));
|
||
|
||
if ($form->{"id_$i"} &&
|
||
($form->{"marge_percent_$i"} < (1 * $myconfig{"marge_percent_warn"}))) {
|
||
$marge_font_start = "<font color=\"#ff0000\">";
|
||
$marge_font_end = "</font>";
|
||
}
|
||
|
||
} else {
|
||
$form->{"marge_percent_$i"} = 0;
|
||
}
|
||
|
||
my $marge_adjust_credit_note = $form->{type} eq 'credit_note' ? -1 : 1;
|
||
$form->{"marge_total_$i"} = ($real_sellprice - $form->{"lastcost_$i"} / $marge_price_factor) * $form->{"qty_$i"} * $marge_adjust_credit_note;
|
||
$form->{"marge_total"} += $form->{"marge_total_$i"};
|
||
$form->{"lastcost_total"} += $form->{"lastcost_$i"} * $form->{"qty_$i"} / $marge_price_factor;
|
||
$form->{"sellprice_total"} += $real_sellprice * $form->{"qty_$i"};
|
||
|
||
map { $form->{"${_}_$i"} = $form->format_amount(\%myconfig, $form->{"${_}_$i"}, 2) } qw(marge_total marge_percent);
|
||
|
||
# convert " to "
|
||
map { $form->{"${_}_$i"} =~ s/\"/"/g }
|
||
qw(partnumber description unit unit_old);
|
||
|
||
########################################
|
||
# Eintrag fuer Version 2.2.0 geaendert #
|
||
# neue Optik im Rechnungsformular #
|
||
########################################
|
||
$column_data{runningnumber} =
|
||
qq|<td><input name="runningnumber_$i" size="5" value="$i"></td>|; # HuT
|
||
############## ENDE Neueintrag ##################
|
||
|
||
$column_data{partnumber} =
|
||
qq|<td><input name="partnumber_$i" size=12 value="$form->{"partnumber_$i"}"></td>|;
|
||
|
||
if (($rows = $form->numtextrows($form->{"description_$i"}, 30, 6)) > 1) {
|
||
$column_data{description} =
|
||
qq|<td><textarea name="description_$i" rows="$rows" cols="30" wrap="soft">| . H($form->{"description_$i"}) . qq|</textarea><button type="button" onclick="set_longdescription_window('longdescription_$i')">| . $locale->text('L') . qq|</button></td>|;
|
||
} else {
|
||
$column_data{description} =
|
||
qq|<td><input name="description_$i" size="30" value="| . $form->quote($form->{"description_$i"}) . qq|"><button type="button" onclick="set_longdescription_window('longdescription_$i')">| . $locale->text('L') . qq|</button></td>|;
|
||
}
|
||
|
||
(my $qty_dec) = ($form->{"qty_$i"} =~ /\.(\d+)/);
|
||
$qty_dec = length $qty_dec;
|
||
|
||
$column_data{qty} =
|
||
qq|<td align="right"><input name="qty_$i" size="5" value="|
|
||
. $form->format_amount(\%myconfig, $form->{"qty_$i"}, $qty_dec) .qq|">|;
|
||
if ($form->{"formel_$i"}) {
|
||
$column_data{qty} .= qq|<button type="button" onclick="calculate_qty_selection_window('qty_$i','alu_$i', 'formel_$i', $i)">| . $locale->text('*/') . qq|</button>|
|
||
. $cgi->hidden("-name" => "formel_$i", "-value" => $form->{"formel_$i"}) . $cgi->hidden("-name" => "alu_$i", "-value" => $form->{"alu_$i"});
|
||
}
|
||
$column_data{qty} .= qq|</td>|;
|
||
$column_data{ship} =
|
||
qq|<td align="right"><input name="ship_$i" size=5 value="|
|
||
. $form->format_amount(\%myconfig, $form->{"ship_$i"})
|
||
. qq|"></td>|;
|
||
|
||
my $is_part = $form->{"inventory_accno_$i"};
|
||
my $is_assembly = $form->{"assembly_$i"};
|
||
my $is_assigned = $form->{"id_$i"};
|
||
my $this_unit = $form->{"unit_$i"};
|
||
if ($form->{"selected_unit_$i"} && $this_unit &&
|
||
$all_units->{$form->{"selected_unit_$i"}} && $all_units->{$this_unit} &&
|
||
($all_units->{$form->{"selected_unit_$i"}}->{"base_unit"} eq $all_units->{$this_unit}->{"base_unit"})) {
|
||
$this_unit = $form->{"selected_unit_$i"};
|
||
} elsif (!$is_assigned ||
|
||
($is_part && !$this_unit && ($all_units->{$this_unit} && ($all_units->{$this_unit}->{"base_unit"} eq $all_units->{"kg"}->{"base_unit"})))) {
|
||
$this_unit = "kg";
|
||
}
|
||
|
||
my $price_factor_select;
|
||
if (0 < scalar @{ $form->{ALL_PRICE_FACTORS} }) {
|
||
my @values = ('', map { $_->{id} } @{ $form->{ALL_PRICE_FACTORS} });
|
||
my %labels = map { $_->{id} => $_->{description} } @{ $form->{ALL_PRICE_FACTORS} };
|
||
|
||
$price_factor_select =
|
||
NTI($cgi->popup_menu('-name' => "price_factor_id_$i",
|
||
'-default' => $form->{"price_factor_id_$i"},
|
||
'-values' => \@values,
|
||
'-labels' => \%labels,
|
||
'-style' => 'width:90px'))
|
||
. ' ';
|
||
}
|
||
|
||
$column_data{"unit"} = "<td>" .
|
||
$price_factor_select .
|
||
AM->unit_select_html($is_part || $is_assembly ? $dimension_units :
|
||
$is_assigned ? $service_units : $all_units,
|
||
"unit_$i", $this_unit,
|
||
$is_assigned ? $form->{"unit_$i"} : undef)
|
||
. "</td>";
|
||
|
||
# build in drop down list for pricesgroups
|
||
if ($form->{"prices_$i"}) {
|
||
if ($form->{"new_pricegroup_$i"} != $form->{"old_pricegroup_$i"}) {
|
||
$price_tmp = $form->format_amount(\%myconfig, $form->{"price_new_$i"}, $decimalplaces);
|
||
} else {
|
||
$price_tmp = $form->format_amount(\%myconfig, $form->{"sellprice_$i"}, $decimalplaces);
|
||
}
|
||
|
||
$column_data{sellprice_pg} =
|
||
qq|<td align="right"><select name="sellprice_pg_$i">$form->{"prices_$i"}</select></td>|;
|
||
$column_data{sellprice} =
|
||
qq|<td><input name="sellprice_$i" size="10" value="$price_tmp" onBlur=\"check_right_number_format(this)\"></td>|;
|
||
} else {
|
||
|
||
# for last row and report
|
||
# set pricegroup drop down list from report menu
|
||
if ($form->{"sellprice_$i"} != 0) {
|
||
$prices =
|
||
qq|<option value="$form->{"sellprice_$i"}--$form->{"pricegroup_id_$i"}" selected>$form->{"pricegroup_$i"}</option>\n|;
|
||
|
||
$form->{"pricegroup_old_$i"} = $form->{"pricegroup_id_$i"};
|
||
|
||
$column_data{sellprice_pg} =
|
||
qq|<td align="right"><select name="sellprice_pg_$i">$prices</select></td>|;
|
||
|
||
} else {
|
||
|
||
# for last row
|
||
$column_data{sellprice_pg} = qq|<td align="right"> </td>|;
|
||
}
|
||
|
||
$column_data{sellprice} =
|
||
qq|<td><input name="sellprice_$i" size="10" onBlur=\"check_right_number_format(this)\" value="|
|
||
. $form->format_amount(\%myconfig, $form->{"sellprice_$i"},
|
||
$decimalplaces)
|
||
. qq|"></td>|;
|
||
}
|
||
$column_data{discount} =
|
||
qq|<td align="right"><input name="discount_$i" size=3 value="|
|
||
. $form->format_amount(\%myconfig, $form->{"discount_$i"})
|
||
. qq|"></td>|;
|
||
$column_data{linetotal} =
|
||
qq|<td align="right">|
|
||
. $form->format_amount(\%myconfig, $linetotal, 2)
|
||
. qq|</td>|;
|
||
$column_data{bin} = qq|<td>$form->{"bin_$i"}</td>|;
|
||
|
||
########################################
|
||
# Eintrag fuer Version 2.2.0 geaendert #
|
||
# neue Optik im Rechnungsformular #
|
||
########################################
|
||
# if ($lizenzen && $form->{type} eq "invoice" && $form->{vc} eq "customer") {
|
||
# $column_data{license} = qq|<td><select name="licensenumber_$i">$form->{"lizenzen_$i"}></select></td>|;
|
||
# }
|
||
#
|
||
# if ($form->{type} !~ /_quotation/) {
|
||
# $column_data{serialnr} = qq|<td><input name="serialnumber_$i" size=10 value="$form->{"serialnumber_$i"}"></td>|;
|
||
# }
|
||
#
|
||
# $column_data{projectnr} = qq|<td><input name="projectnumber_$i" size=10 value="$form->{"projectnumber_$i"}"></td>|;
|
||
############## ENDE Neueintrag ##################
|
||
my $j = $i % 2;
|
||
print qq|
|
||
|
||
<tr valign="top" class="listrow$j">|;
|
||
|
||
map { print "\n$column_data{$_}" } @column_index;
|
||
|
||
print("</tr>\n" .
|
||
$cgi->hidden("-name" => "unit_old_$i",
|
||
"-value" => $form->{"selected_unit_$i"})
|
||
. "\n" .
|
||
$cgi->hidden("-name" => "price_new_$i",
|
||
"-value" => $form->format_amount(\%myconfig, $form->{"price_new_$i"}))
|
||
. "\n");
|
||
map({ print($cgi->hidden("-name" => $_, "-value" => $form->{$_}) . "\n"); }
|
||
("orderitems_id_$i", "bo_$i", "pricegroup_old_$i", "price_old_$i",
|
||
"id_$i", "inventory_accno_$i", "bin_$i", "partsgroup_$i", "partnotes_$i",
|
||
"income_accno_$i", "expense_accno_$i", "listprice_$i", "assembly_$i",
|
||
"taxaccounts_$i", "ordnumber_$i", "transdate_$i", "cusordnumber_$i",
|
||
"longdescription_$i", "basefactor_$i", "marge_total_$i", "marge_percent_$i", "lastcost_$i",
|
||
"marge_price_factor_$i"));
|
||
|
||
########################################
|
||
# Eintrag fuer Version 2.2.0 geaendert #
|
||
# neue Optik im Rechnungsformular #
|
||
########################################
|
||
|
||
my $row_style_attr =
|
||
'style="display:none;"' if (!$form->{"show_details"});
|
||
|
||
# print second row
|
||
print qq|
|
||
<tr class="listrow$j" $row_style_attr>
|
||
<td colspan="$colspan">
|
||
|;
|
||
if ($lizenzen && $form->{type} eq "invoice" && $form->{vc} eq "customer") {
|
||
my $selected = $form->{"licensenumber_$i"};
|
||
my $lizenzen_quoted;
|
||
$form->{"lizenzen_$i"} =~ s/ selected//g;
|
||
$form->{"lizenzen_$i"} =~
|
||
s/value="${selected}"\>/value="${selected}" selected\>/;
|
||
$lizenzen_quoted = $form->{"lizenzen_$i"};
|
||
$lizenzen_quoted =~ s/\"/"/g;
|
||
print qq|
|
||
<b>Lizenz\#</b> <select name="licensenumber_$i" size="1">
|
||
$form->{"lizenzen_$i"}
|
||
</select>
|
||
<input type="hidden" name="lizenzen_$i" value="${lizenzen_quoted}">
|
||
|;
|
||
}
|
||
if ($form->{type} !~ /_quotation/) {
|
||
print qq|
|
||
<b>$serialnumber</b> <input name="serialnumber_$i" size="15" value="$form->{"serialnumber_$i"}">|;
|
||
}
|
||
|
||
print qq|<b>$projectnumber</b> | .
|
||
NTI($cgi->popup_menu('-name' => "project_id_$i",
|
||
'-values' => \@projectnumber_values,
|
||
'-labels' => \%projectnumber_labels,
|
||
'-default' => $form->{"project_id_$i"}));
|
||
|
||
if ($form->{type} eq 'invoice' or $form->{type} =~ /order/) {
|
||
my $reqdate_term =
|
||
($form->{type} eq 'invoice')
|
||
? 'deliverydate'
|
||
: 'reqdate'; # invoice uses a different term for the same thing.
|
||
print qq|
|
||
<b>${$reqdate_term}</b> <input name="${reqdate_term}_$i" size="11" onBlur="check_right_date_format(this)" value="$form->{"${reqdate_term}_$i"}">
|
||
|;
|
||
}
|
||
my $subtotalchecked = ($form->{"subtotal_$i"}) ? "checked" : "";
|
||
print qq|
|
||
<b>|.$locale->text('Subtotal').qq|</b> <input type="checkbox" name="subtotal_$i" value="1" $subtotalchecked>
|
||
|;
|
||
|
||
if ($form->{"id_$i"} && $is_sales) {
|
||
my $marge_price_factor;
|
||
|
||
$form->{"marge_price_factor_$i"} *= 1;
|
||
|
||
if ($form->{"marge_price_factor_$i"} && (1 != $form->{"marge_price_factor_$i"})) {
|
||
$marge_price_factor = '/' . $form->format_amount(\%myconfig, $form->{"marge_price_factor_$i"});
|
||
}
|
||
|
||
print qq|
|
||
${marge_font_start}<b>| . $locale->text('Ertrag') . qq|</b> $form->{"marge_total_$i"} $form->{"marge_percent_$i"} % ${marge_font_end}|;
|
||
}
|
||
print qq|
|
||
<b>| . $locale->text('LP') . qq|</b> | . $form->format_amount(\%myconfig, $form->{"listprice_$i"}, 2) . qq|
|
||
<b>| . $locale->text('EK') . qq|</b> | . $form->format_amount(\%myconfig, $form->{"lastcost_$i"}, 2) . $marge_price_factor;
|
||
|
||
|
||
print qq|
|
||
</td>
|
||
</tr>
|
||
|;
|
||
|
||
############## ENDE Neueintrag ##################
|
||
|
||
map { $form->{"${_}_base"} += $linetotal }
|
||
(split(/ /, $form->{"taxaccounts_$i"}));
|
||
|
||
$form->{invsubtotal} += $linetotal;
|
||
}
|
||
|
||
print qq|
|
||
</table>
|
||
</td>
|
||
</tr>
|
||
|;
|
||
|
||
if (0 != ($form->{sellprice_total} * 1)) {
|
||
$form->{marge_percent} = ($form->{sellprice_total} - $form->{lastcost_total}) / $form->{sellprice_total} * 100;
|
||
}
|
||
|
||
$lxdebug->leave_sub();
|
||
}
|
||
#sub display_row {
|
||
# $lxdebug->enter_sub();
|
||
# my $numrows = shift;
|
||
#
|
||
# my $is_sales =
|
||
# (substr($form->{type}, 0, 6) eq "sales_")
|
||
# || (($form->{type} eq "invoice") && ($form->{script} eq "is.pl"))
|
||
# || ($form->{type} eq 'credit_note');
|
||
#
|
||
# if ($lizenzen && $form->{vc} eq "customer") {
|
||
# if ($form->{type} =~ /sales_order/) {
|
||
# @column_index = (runningnumber, partnumber, description, ship, qty);
|
||
# } elsif ($form->{type} =~ /sales_quotation/) {
|
||
# @column_index = (runningnumber, partnumber, description, qty);
|
||
# } else {
|
||
# @column_index = (runningnumber, partnumber, description, qty);
|
||
# }
|
||
# } else {
|
||
# if ( ($form->{type} =~ /purchase_order/)
|
||
# || ($form->{type} =~ /sales_order/)) {
|
||
# @column_index = (runningnumber, partnumber, description, ship, qty);
|
||
# } else {
|
||
# @column_index = (runningnumber, partnumber, description, qty);
|
||
# }
|
||
# }
|
||
############### ENDE Neueintrag ##################
|
||
#
|
||
# my $dimension_units = AM->retrieve_units(\%myconfig, $form, "dimension");
|
||
# my $service_units = AM->retrieve_units(\%myconfig, $form, "service");
|
||
# my $all_units = AM->retrieve_units(\%myconfig, $form);
|
||
#
|
||
# my %price_factors = map { $_->{id} => $_->{factor} } @{ $form->{ALL_PRICE_FACTORS} };
|
||
#
|
||
# push @column_index, qw(unit);
|
||
#
|
||
# #for pricegroups column
|
||
# if ( $form->{type} =~ (/sales_quotation/)
|
||
# or (($form->{level} =~ /Sales/) and ($form->{type} =~ /invoice/))
|
||
# or (($form->{level} eq undef) and ($form->{type} =~ /invoice/))
|
||
# or ($form->{type} =~ /sales_order/)) {
|
||
# push @column_index, qw(sellprice_pg);
|
||
# }
|
||
#
|
||
# push @column_index, qw(sellprice);
|
||
#
|
||
# if ($form->{vc} eq 'customer') {
|
||
# push @column_index, qw(discount);
|
||
# }
|
||
#
|
||
# push @column_index, "linetotal";
|
||
#
|
||
# my $colspan = $#column_index + 1;
|
||
#
|
||
# $form->{invsubtotal} = 0;
|
||
# map { $form->{"${_}_base"} = 0 } (split(/ /, $form->{taxaccounts}));
|
||
#
|
||
#########################################
|
||
# # Eintrag fuer Version 2.2.0 geaendert #
|
||
# # neue Optik im Rechnungsformular #
|
||
#########################################
|
||
# $column_data{runningnumber} = qq|<th align="left" nowrap width="5%" class="listheading">| . $locale->text('No.') . qq|</th>|;
|
||
# $column_data{partnumber} = qq|<th align="left" nowrap width="12%" class="listheading">| . $locale->text('Number') . qq|</th>|;
|
||
# $column_data{description} = qq|<th align="left" nowrap width="30%" class="listheading">| . $locale->text('Part Description') . qq|</th>|;
|
||
# if ($form->{"type"} eq "purchase_order") {
|
||
# $column_data{ship} = qq|<th align="left" nowrap width="5%" class="listheading">| . $locale->text('Ship rcvd') . qq|</th>|;
|
||
# } else {
|
||
# $column_data{ship} = qq|<th align="left" nowrap width="5%" class="listheading">| . $locale->text('Ship') . qq|</th>|;
|
||
# }
|
||
# $column_data{qty} = qq|<th align="left" nowrap width="5%" class="listheading">| . $locale->text('Qty') . qq|</th>|;
|
||
# $column_data{unit} = qq|<th align="left" nowrap width="20%" class="listheading">| . $locale->text('Unit') . qq|</th>|;
|
||
# $column_data{license} = qq|<th align="left" nowrap width="10%" class="listheading">| . $locale->text('License') . qq|</th>|;
|
||
# $column_data{serialnr} = qq|<th align="left" nowrap width="10%" class="listheading">| . $locale->text('Serial No.') . qq|</th>|;
|
||
# $column_data{projectnr} = qq|<th align="left" nowrap width="10%" class="listheading">| . $locale->text('Project') . qq|</th>|;
|
||
# $column_data{sellprice} = qq|<th align="left" nowrap width="15%" class="listheading">| . $locale->text('Price') . qq|</th>|;
|
||
# $column_data{sellprice_pg} = qq|<th align="left" nowrap width="15%" class="listheading">| . $locale->text('Pricegroup') . qq|</th>|;
|
||
# $column_data{discount} = qq|<th align="left" nowrap width="5%" class="listheading">| . $locale->text('Discount') . qq|</th>|;
|
||
# $column_data{linetotal} = qq|<th align="left" nowrap width="10%" class="listheading">| . $locale->text('Extended') . qq|</th>|;
|
||
# $column_data{bin} = qq|<th align="left" nowrap width="10%" class="listheading">| . $locale->text('Bin') . qq|</th>|;
|
||
############### ENDE Neueintrag ##################
|
||
#
|
||
# $myconfig{"show_form_details"} = 1
|
||
# unless (defined($myconfig{"show_form_details"}));
|
||
# $form->{"show_details"} = $myconfig{"show_form_details"}
|
||
# unless (defined($form->{"show_details"}));
|
||
# $form->{"show_details"} = $form->{"show_details"} ? 1 : 0;
|
||
# my $show_details_new = 1 - $form->{"show_details"};
|
||
# my $show_details_checked = $form->{"show_details"} ? "checked" : "";
|
||
#
|
||
# print qq|
|
||
# <tr>
|
||
# <td>| . $cgi->hidden("-name" => "show_details", "-value" => $form->{show_details}) . qq|
|
||
# <input type="checkbox" id="cb_show_details" onclick="show_form_details($show_details_new);" $show_details_checked>
|
||
# <label for="cb_show_details">| . $locale->text("Show details") . qq|</label><br>
|
||
# <table width="100%">
|
||
# <tr class="listheading">|;
|
||
#
|
||
# map { print "\n$column_data{$_}" } @column_index;
|
||
#
|
||
# print qq|
|
||
# </tr>
|
||
#|;
|
||
#
|
||
# $runningnumber = $locale->text('No.');
|
||
# $deliverydate = $locale->text('Delivery Date');
|
||
# $serialnumber = $locale->text('Serial No.');
|
||
# $projectnumber = $locale->text('Project');
|
||
# $partsgroup = $locale->text('Group');
|
||
# $reqdate = $locale->text('Reqdate');
|
||
#
|
||
# $delvar = 'deliverydate';
|
||
#
|
||
# if ($form->{type} =~ /_order$/ || $form->{type} =~ /_quotation$/) {
|
||
# $deliverydate = $locale->text('Required by');
|
||
# $delvar = 'reqdate';
|
||
# }
|
||
#
|
||
# $form->{marge_total} = 0;
|
||
# $form->{sellprice_total} = 0;
|
||
# $form->{lastcost_total} = 0;
|
||
# my %projectnumber_labels = ();
|
||
# my @projectnumber_values = ("");
|
||
# foreach my $item (@{ $form->{"ALL_PROJECTS"} }) {
|
||
# push(@projectnumber_values, $item->{"id"});
|
||
# $projectnumber_labels{$item->{"id"}} = $item->{"projectnumber"};
|
||
# }
|
||
#
|
||
# for $i (1 .. $numrows) {
|
||
#
|
||
# # undo formatting
|
||
# map {
|
||
# $form->{"${_}_$i"} =
|
||
# $form->parse_amount(\%myconfig, $form->{"${_}_$i"})
|
||
# } qw(qty ship discount sellprice price_new price_old) unless ($form->{simple_save});
|
||
#
|
||
# if (!$form->{"unit_old_$i"}) {
|
||
# # Neue Ware aus der Datenbank. In diesem Fall ist unit_$i die
|
||
# # Einheit, wie sie in den Stammdaten hinterlegt wurde.
|
||
# # Es sollte also angenommen werden, dass diese ausgewaehlt war.
|
||
# $form->{"unit_old_$i"} = $form->{"unit_$i"};
|
||
# }
|
||
#
|
||
# # Die zuletzt ausgewaehlte mit der aktuell ausgewaehlten Einheit
|
||
# # vergleichen und bei Unterschied den Preis entsprechend umrechnen.
|
||
# $form->{"selected_unit_$i"} = $form->{"unit_$i"} unless ($form->{"selected_unit_$i"});
|
||
#
|
||
# my $check_units = $form->{"inventory_accno_$i"} ? $dimension_units : $service_units;
|
||
# if (!$check_units->{$form->{"selected_unit_$i"}} ||
|
||
# ($check_units->{$form->{"selected_unit_$i"}}->{"base_unit"} ne
|
||
# $all_units->{$form->{"unit_old_$i"}}->{"base_unit"})) {
|
||
# # Die ausgewaehlte Einheit ist fuer diesen Artikel nicht gueltig
|
||
# # (z.B. Dimensionseinheit war ausgewaehlt, es handelt sich aber
|
||
# # um eine Dienstleistung). Dann keinerlei Umrechnung vornehmen.
|
||
# $form->{"unit_old_$i"} = $form->{"selected_unit_$i"} = $form->{"unit_$i"};
|
||
# }
|
||
# if ((!$form->{"prices_$i"}) || ($form->{"new_pricegroup_$i"} == $form->{"old_pricegroup_$i"})) {
|
||
# if ($form->{"unit_old_$i"} ne $form->{"selected_unit_$i"}) {
|
||
# my $basefactor = 1;
|
||
# if (defined($all_units->{$form->{"unit_old_$i"}}->{"factor"}) &&
|
||
# $all_units->{$form->{"unit_old_$i"}}->{"factor"}) {
|
||
# $basefactor = $all_units->{$form->{"selected_unit_$i"}}->{"factor"} /
|
||
# $all_units->{$form->{"unit_old_$i"}}->{"factor"};
|
||
# }
|
||
# $form->{"sellprice_$i"} *= $basefactor;
|
||
# $form->{"unit_old_$i"} = $form->{"selected_unit_$i"};
|
||
# }
|
||
# }
|
||
#
|
||
# ($dec) = ($form->{"sellprice_$i"} =~ /\.(\d+)/);
|
||
# $decimalplaces = max length($dec), 2;
|
||
#
|
||
# $price_factor = $price_factors{$form->{"price_factor_id_$i"}} || 1;
|
||
# $discount = (100 - $form->{"discount_$i"} * 1) / 100;
|
||
#
|
||
# $linetotal = $form->round_amount($form->{"sellprice_$i"} * $form->{"qty_$i"} * $discount / $price_factor, $decimalplaces);
|
||
#
|
||
# my $real_sellprice = $form->{"sellprice_$i"} * $discount / $price_factor;
|
||
#
|
||
# # marge calculations
|
||
# my ($marge_font_start, $marge_font_end);
|
||
#
|
||
# $form->{"lastcost_$i"} *= 1;
|
||
#
|
||
# $marge_price_factor = $form->{"marge_price_factor_$i"} * 1 || 1;
|
||
#
|
||
# if ($real_sellprice && ($form->{"qty_$i"} * 1)) {
|
||
# $form->{"marge_percent_$i"} = ($real_sellprice - $form->{"lastcost_$i"} / $marge_price_factor) * 100 / $real_sellprice;
|
||
# $myconfig{"marge_percent_warn"} = 15 unless (defined($myconfig{"marge_percent_warn"}));
|
||
#
|
||
# if ($form->{"id_$i"} &&
|
||
# ($form->{"marge_percent_$i"} < (1 * $myconfig{"marge_percent_warn"}))) {
|
||
# $marge_font_start = "<font color=\"#ff0000\">";
|
||
# $marge_font_end = "</font>";
|
||
# }
|
||
#
|
||
# } else {
|
||
# $form->{"marge_percent_$i"} = 0;
|
||
# }
|
||
#
|
||
# my $marge_adjust_credit_note = $form->{type} eq 'credit_note' ? -1 : 1;
|
||
# $form->{"marge_total_$i"} = ($real_sellprice - $form->{"lastcost_$i"} / $marge_price_factor) * $form->{"qty_$i"} * $marge_adjust_credit_note;
|
||
# $form->{"marge_total"} += $form->{"marge_total_$i"};
|
||
# $form->{"lastcost_total"} += $form->{"lastcost_$i"} * $form->{"qty_$i"} / $marge_price_factor;
|
||
# $form->{"sellprice_total"} += $real_sellprice * $form->{"qty_$i"};
|
||
#
|
||
# map { $form->{"${_}_$i"} = $form->format_amount(\%myconfig, $form->{"${_}_$i"}, 2) } qw(marge_total marge_percent);
|
||
#
|
||
# # convert " to "
|
||
# map { $form->{"${_}_$i"} =~ s/\"/"/g }
|
||
# qw(partnumber description unit unit_old);
|
||
#
|
||
#########################################
|
||
# # Eintrag fuer Version 2.2.0 geaendert #
|
||
# # neue Optik im Rechnungsformular #
|
||
#########################################
|
||
# $column_data{runningnumber} =
|
||
# qq|<td><input name="runningnumber_$i" size="5" value="$i"></td>|; # HuT
|
||
############### ENDE Neueintrag ##################
|
||
#
|
||
# $column_data{partnumber} =
|
||
# qq|<td><input name="partnumber_$i" size=12 value="$form->{"partnumber_$i"}"></td>|;
|
||
#
|
||
# if (($rows = $form->numtextrows($form->{"description_$i"}, 30, 6)) > 1) {
|
||
# $column_data{description} =
|
||
# qq|<td><textarea name="description_$i" rows="$rows" cols="30" wrap="soft">| . H($form->{"description_$i"}) . qq|</textarea><button type="button" onclick="set_longdescription_window('longdescription_$i')">| . $locale->text('L') . qq|</button></td>|;
|
||
# } else {
|
||
# $column_data{description} =
|
||
# qq|<td><input name="description_$i" size="30" value="| . $form->quote($form->{"description_$i"}) . qq|"><button type="button" onclick="set_longdescription_window('longdescription_$i')">| . $locale->text('L') . qq|</button></td>|;
|
||
# }
|
||
#
|
||
# (my $qty_dec) = ($form->{"qty_$i"} =~ /\.(\d+)/);
|
||
# $qty_dec = length $qty_dec;
|
||
#
|
||
# $column_data{qty} =
|
||
# qq|<td align="right"><input name="qty_$i" size="5" value="|
|
||
# . $form->format_amount(\%myconfig, $form->{"qty_$i"}, $qty_dec) .qq|">|;
|
||
# if ($form->{"formel_$i"}) {
|
||
# $column_data{qty} .= qq|<button type="button" onclick="calculate_qty_selection_window('qty_$i','alu_$i', 'formel_$i', $i)">| . $locale->text('*/') . qq|</button>|
|
||
# . $cgi->hidden("-name" => "formel_$i", "-value" => $form->{"formel_$i"}) . $cgi->hidden("-name" => "alu_$i", "-value" => $form->{"alu_$i"});
|
||
# }
|
||
# $column_data{qty} .= qq|</td>|;
|
||
# $column_data{ship} =
|
||
# qq|<td align="right"><input name="ship_$i" size=5 value="|
|
||
# . $form->format_amount(\%myconfig, $form->{"ship_$i"})
|
||
# . qq|"></td>|;
|
||
#
|
||
# my $is_part = $form->{"inventory_accno_$i"};
|
||
# my $is_assembly = $form->{"assembly_$i"};
|
||
# my $is_assigned = $form->{"id_$i"};
|
||
# my $this_unit = $form->{"unit_$i"};
|
||
# if ($form->{"selected_unit_$i"} && $this_unit &&
|
||
# $all_units->{$form->{"selected_unit_$i"}} && $all_units->{$this_unit} &&
|
||
# ($all_units->{$form->{"selected_unit_$i"}}->{"base_unit"} eq $all_units->{$this_unit}->{"base_unit"})) {
|
||
# $this_unit = $form->{"selected_unit_$i"};
|
||
# } elsif (!$is_assigned ||
|
||
# ($is_part && !$this_unit && ($all_units->{$this_unit} && ($all_units->{$this_unit}->{"base_unit"} eq $all_units->{"kg"}->{"base_unit"})))) {
|
||
# $this_unit = "kg";
|
||
# }
|
||
#
|
||
# my $price_factor_select;
|
||
# if (0 < scalar @{ $form->{ALL_PRICE_FACTORS} }) {
|
||
# my @values = ('', map { $_->{id} } @{ $form->{ALL_PRICE_FACTORS} });
|
||
# my %labels = map { $_->{id} => $_->{description} } @{ $form->{ALL_PRICE_FACTORS} };
|
||
#
|
||
# $price_factor_select =
|
||
# NTI($cgi->popup_menu('-name' => "price_factor_id_$i",
|
||
# '-default' => $form->{"price_factor_id_$i"},
|
||
# '-values' => \@values,
|
||
# '-labels' => \%labels,
|
||
# '-style' => 'width:90px'))
|
||
# . ' ';
|
||
# }
|
||
#
|
||
# $column_data{"unit"} = "<td>" .
|
||
# $price_factor_select .
|
||
# AM->unit_select_html($is_part || $is_assembly ? $dimension_units :
|
||
# $is_assigned ? $service_units : $all_units,
|
||
# "unit_$i", $this_unit,
|
||
# $is_assigned ? $form->{"unit_$i"} : undef)
|
||
# . "</td>";
|
||
#
|
||
# # build in drop down list for pricesgroups
|
||
# if ($form->{"prices_$i"}) {
|
||
# if ($form->{"new_pricegroup_$i"} != $form->{"old_pricegroup_$i"}) {
|
||
# $price_tmp = $form->format_amount(\%myconfig, $form->{"price_new_$i"}, $decimalplaces);
|
||
# } else {
|
||
# $price_tmp = $form->format_amount(\%myconfig, $form->{"sellprice_$i"}, $decimalplaces);
|
||
# }
|
||
#
|
||
# $column_data{sellprice_pg} =
|
||
# qq|<td align="right"><select name="sellprice_pg_$i">$form->{"prices_$i"}</select></td>|;
|
||
# $column_data{sellprice} =
|
||
# qq|<td><input name="sellprice_$i" size="10" value="$price_tmp" onBlur=\"check_right_number_format(this)\"></td>|;
|
||
# } else {
|
||
#
|
||
# # for last row and report
|
||
# # set pricegroup drop down list from report menu
|
||
# if ($form->{"sellprice_$i"} != 0) {
|
||
# $prices =
|
||
# qq|<option value="$form->{"sellprice_$i"}--$form->{"pricegroup_id_$i"}" selected>$form->{"pricegroup_$i"}</option>\n|;
|
||
#
|
||
# $form->{"pricegroup_old_$i"} = $form->{"pricegroup_id_$i"};
|
||
#
|
||
# $column_data{sellprice_pg} =
|
||
# qq|<td align="right"><select name="sellprice_pg_$i">$prices</select></td>|;
|
||
#
|
||
# } else {
|
||
#
|
||
# # for last row
|
||
# $column_data{sellprice_pg} = qq|<td align="right"> </td>|;
|
||
# }
|
||
#
|
||
# $column_data{sellprice} =
|
||
# qq|<td><input name="sellprice_$i" size="10" onBlur=\"check_right_number_format(this)\" value="|
|
||
# . $form->format_amount(\%myconfig, $form->{"sellprice_$i"},
|
||
# $decimalplaces)
|
||
# . qq|"></td>|;
|
||
# }
|
||
# $column_data{discount} =
|
||
# qq|<td align="right"><input name="discount_$i" size=3 value="|
|
||
# . $form->format_amount(\%myconfig, $form->{"discount_$i"})
|
||
# . qq|"></td>|;
|
||
# $column_data{linetotal} =
|
||
# qq|<td align="right">|
|
||
# . $form->format_amount(\%myconfig, $linetotal, 2)
|
||
# . qq|</td>|;
|
||
# $column_data{bin} = qq|<td>$form->{"bin_$i"}</td>|;
|
||
#
|
||
#########################################
|
||
# # Eintrag fuer Version 2.2.0 geaendert #
|
||
# # neue Optik im Rechnungsformular #
|
||
#########################################
|
||
# # if ($lizenzen && $form->{type} eq "invoice" && $form->{vc} eq "customer") {
|
||
# # $column_data{license} = qq|<td><select name="licensenumber_$i">$form->{"lizenzen_$i"}></select></td>|;
|
||
# # }
|
||
# #
|
||
# # if ($form->{type} !~ /_quotation/) {
|
||
# # $column_data{serialnr} = qq|<td><input name="serialnumber_$i" size=10 value="$form->{"serialnumber_$i"}"></td>|;
|
||
# # }
|
||
# #
|
||
# # $column_data{projectnr} = qq|<td><input name="projectnumber_$i" size=10 value="$form->{"projectnumber_$i"}"></td>|;
|
||
############### ENDE Neueintrag ##################
|
||
# my $j = $i % 2;
|
||
# print qq|
|
||
#
|
||
# <tr valign="top" class="listrow$j">|;
|
||
#
|
||
# map { print "\n$column_data{$_}" } @column_index;
|
||
#
|
||
# print("</tr>\n" .
|
||
# $cgi->hidden("-name" => "unit_old_$i",
|
||
# "-value" => $form->{"selected_unit_$i"})
|
||
# . "\n" .
|
||
# $cgi->hidden("-name" => "price_new_$i",
|
||
# "-value" => $form->format_amount(\%myconfig, $form->{"price_new_$i"}))
|
||
# . "\n");
|
||
# map({ print($cgi->hidden("-name" => $_, "-value" => $form->{$_}) . "\n"); }
|
||
# ("orderitems_id_$i", "bo_$i", "pricegroup_old_$i", "price_old_$i",
|
||
# "id_$i", "inventory_accno_$i", "bin_$i", "partsgroup_$i", "partnotes_$i",
|
||
# "income_accno_$i", "expense_accno_$i", "listprice_$i", "assembly_$i",
|
||
# "taxaccounts_$i", "ordnumber_$i", "transdate_$i", "cusordnumber_$i",
|
||
# "longdescription_$i", "basefactor_$i", "marge_total_$i", "marge_percent_$i", "lastcost_$i",
|
||
# "marge_price_factor_$i"));
|
||
#
|
||
#########################################
|
||
# # Eintrag fuer Version 2.2.0 geaendert #
|
||
# # neue Optik im Rechnungsformular #
|
||
#########################################
|
||
#
|
||
# my $row_style_attr =
|
||
# 'style="display:none;"' if (!$form->{"show_details"});
|
||
#
|
||
# # print second row
|
||
# print qq|
|
||
# <tr class="listrow$j" $row_style_attr>
|
||
# <td colspan="$colspan">
|
||
#|;
|
||
# if ($lizenzen && $form->{type} eq "invoice" && $form->{vc} eq "customer") {
|
||
# my $selected = $form->{"licensenumber_$i"};
|
||
# my $lizenzen_quoted;
|
||
# $form->{"lizenzen_$i"} =~ s/ selected//g;
|
||
# $form->{"lizenzen_$i"} =~
|
||
# s/value="${selected}"\>/value="${selected}" selected\>/;
|
||
# $lizenzen_quoted = $form->{"lizenzen_$i"};
|
||
# $lizenzen_quoted =~ s/\"/"/g;
|
||
# print qq|
|
||
# <b>Lizenz\#</b> <select name="licensenumber_$i" size="1">
|
||
# $form->{"lizenzen_$i"}
|
||
# </select>
|
||
# <input type="hidden" name="lizenzen_$i" value="${lizenzen_quoted}">
|
||
#|;
|
||
# }
|
||
# if ($form->{type} !~ /_quotation/) {
|
||
# print qq|
|
||
# <b>$serialnumber</b> <input name="serialnumber_$i" size="15" value="$form->{"serialnumber_$i"}">|;
|
||
# }
|
||
#
|
||
# print qq|<b>$projectnumber</b> | .
|
||
# NTI($cgi->popup_menu('-name' => "project_id_$i",
|
||
# '-values' => \@projectnumber_values,
|
||
# '-labels' => \%projectnumber_labels,
|
||
# '-default' => $form->{"project_id_$i"}));
|
||
#
|
||
# if ($form->{type} eq 'invoice' or $form->{type} =~ /order/) {
|
||
# my $reqdate_term =
|
||
# ($form->{type} eq 'invoice')
|
||
# ? 'deliverydate'
|
||
# : 'reqdate'; # invoice uses a different term for the same thing.
|
||
# print qq|
|
||
# <b>${$reqdate_term}</b> <input name="${reqdate_term}_$i" size="11" onBlur="check_right_date_format(this)" value="$form->{"${reqdate_term}_$i"}">
|
||
#|;
|
||
# }
|
||
# my $subtotalchecked = ($form->{"subtotal_$i"}) ? "checked" : "";
|
||
# print qq|
|
||
# <b>|.$locale->text('Subtotal').qq|</b> <input type="checkbox" name="subtotal_$i" value="1" $subtotalchecked>
|
||
#|;
|
||
#
|
||
# if ($form->{"id_$i"} && $is_sales) {
|
||
# my $marge_price_factor;
|
||
#
|
||
# $form->{"marge_price_factor_$i"} *= 1;
|
||
#
|
||
# if ($form->{"marge_price_factor_$i"} && (1 != $form->{"marge_price_factor_$i"})) {
|
||
# $marge_price_factor = '/' . $form->format_amount(\%myconfig, $form->{"marge_price_factor_$i"});
|
||
# }
|
||
#
|
||
# print qq|
|
||
# ${marge_font_start}<b>| . $locale->text('Ertrag') . qq|</b> $form->{"marge_total_$i"} $form->{"marge_percent_$i"} % ${marge_font_end}|;
|
||
# }
|
||
# print qq|
|
||
# <b>| . $locale->text('LP') . qq|</b> | . $form->format_amount(\%myconfig, $form->{"listprice_$i"}, 2) . qq|
|
||
# <b>| . $locale->text('EK') . qq|</b> | . $form->format_amount(\%myconfig, $form->{"lastcost_$i"}, 2) . $marge_price_factor;
|
||
#
|
||
#
|
||
# print qq|
|
||
# </td>
|
||
# </tr>
|
||
#|;
|
||
#
|
||
############### ENDE Neueintrag ##################
|
||
#
|
||
# map { $form->{"${_}_base"} += $linetotal }
|
||
# (split(/ /, $form->{"taxaccounts_$i"}));
|
||
#
|
||
# $form->{invsubtotal} += $linetotal;
|
||
# }
|
||
#
|
||
# print qq|
|
||
# </table>
|
||
# </td>
|
||
# </tr>
|
||
#|;
|
||
#
|
||
# if (0 != ($form->{sellprice_total} * 1)) {
|
||
# $form->{marge_percent} = ($form->{sellprice_total} - $form->{lastcost_total}) / $form->{sellprice_total} * 100;
|
||
# }
|
||
#
|
||
# $lxdebug->leave_sub();
|
||
#}
|
||
|
||
sub set_pricegroup {
|
||
$lxdebug->enter_sub();
|
bin/mozilla/io.pl | ||
---|---|---|
# Eintrag fuer Version 2.2.0 geaendert #
|
||
# neue Optik im Rechnungsformular #
|
||
########################################
|
||
sub display_row {
|
||
$lxdebug->enter_sub();
|
||
my $numrows = shift;
|
||
|
||
# column_index
|
||
my @header_sort = qw(runningnumber partnumber description ship qty unit sellprice_pg sellprice discount linetotal);
|
||
my @HEADER = (
|
||
{ id => 'runningnumber', width => 5, value => $locale->text('No.'), display => 1, },
|
||
{ id => 'partnumber', width => 12, value => $locale->text('Number'), display => 1, },
|
||
{ id => 'description', width => 30, value => $locale->text('Part Description'), display => 1, },
|
||
{ id => 'ship', width => 5, value => ($form->{type} eq 'purchase_order' ? $locale->text('Ship rcvd') : $locale->text('Ship')),
|
||
display => $form->{type} =~ /sales_order/ || ($form->{type} =~ /purchase_order/ && !($lizenzen && $form->{vc} eq "customer")) , },
|
||
{ id => 'qty', width => 5, value => $locale->text('Qty'), display => 1, },
|
||
{ id => 'unit', width => 5, value => $locale->text('Unit'), display => 1, },
|
||
{ id => 'license', width => 10, value => $locale->text('License'), display => 0, },
|
||
{ id => 'serialnr', width => 10, value => $locale->text('Serial No.'), display => 0, },
|
||
{ id => 'projectnr', width => 10, value => $locale->text('Project'), display => 0, },
|
||
{ id => 'sellprice', width => 15, value => $locale->text('Price'), display => 1, },
|
||
{ id => 'sellprice_pg', width => 15, value => $locale->text('Pricegroup'), display => $form->{type} =~ /^sales_/, },
|
||
{ id => 'discount', width => 5, value => $locale->text('Discount'), display => $form->{vc} eq 'customer', },
|
||
{ id => 'linetotal', width => 10, value => $locale->text('Extended'), display => 1, },
|
||
{ id => 'bin', width => 10, value => $locale->text('Bin'), display => 0, },
|
||
);
|
||
my @column_index = map { $_->{id} } grep { $_->{display} } @HEADER;
|
||
|
||
# cache units
|
||
my $dimension_units = AM->retrieve_units(\%myconfig, $form, "dimension");
|
||
my $service_units = AM->retrieve_units(\%myconfig, $form, "service");
|
||
my $all_units = AM->retrieve_units(\%myconfig, $form);
|
||
|
||
my $colspan = scalar @column_index;
|
||
|
||
$form->{invsubtotal} = 0;
|
||
map { $form->{"${_}_base"} = 0 } (split(/ /, $form->{taxaccounts}));
|
||
|
||
# about details
|
||
$myconfig{show_form_details} = 1 unless (defined($myconfig{show_form_details}));
|
||
$form->{show_details} = $myconfig{show_form_details} unless (defined($form->{show_details}));
|
||
# /about details
|
||
|
||
# translations, unused commented out
|
||
# $runningnumber = $locale->text('No.');
|
||
$deliverydate = $locale->text('Delivery Date');
|
||
$serialnumber = $locale->text('Serial No.');
|
||
$projectnumber = $locale->text('Project');
|
||
# $partsgroup = $locale->text('Group');
|
||
$reqdate = $locale->text('Reqdate');
|
||
$deliverydate = $locale->text('Required by');
|
||
|
||
# special alignings
|
||
my %align = map { $_ => 'right' } qw(qty ship right sellprice_pg discount linetotal);
|
||
|
||
$form->{marge_total} = 0;
|
||
$form->{sellprice_total} = 0;
|
||
$form->{lastcost_total} = 0;
|
||
my %projectnumber_labels = ();
|
||
my @projectnumber_values = ("");
|
||
|
||
foreach my $item (@{ $form->{"ALL_PROJECTS"} }) {
|
||
push(@projectnumber_values, $item->{"id"});
|
||
$projectnumber_labels{$item->{"id"}} = $item->{"projectnumber"};
|
||
}
|
||
|
||
# rows
|
||
for $i (1 .. $numrows) {
|
||
|
||
# undo formatting
|
||
map { $form->{"${_}_$i"} = $form->parse_amount(\%myconfig, $form->{"${_}_$i"}) } qw(qty ship discount sellprice price_new price_old) unless ($form->{simple_save});
|
||
|
||
# unit begin
|
||
$form->{"unit_old_$i"} ||= $form->{"unit_$i"};
|
||
$form->{"selected_unit_$i"} ||= $form->{"unit_$i"};
|
||
|
||
my $local_units = $form->{"inventory_accno_$i"} || $form->{"assembly_$i"} ? $dimension_units
|
||
: $form->{"id_$i"} ? $service_units
|
||
: $all_units;
|
||
if ( !$local_units->{$form->{"selected_unit_$i"}} # Die ausgewaehlte Einheit ist fuer diesen Artikel nicht gueltig
|
||
|| !AM->convert_unit($form->{"selected_unit_$i"}, $form->{"unit_old_$i"}, $all_units)) { # (z.B. Dimensionseinheit war ausgewaehlt, es handelt sich aber
|
||
$form->{"unit_old_$i"} = $form->{"selected_unit_$i"} = $form->{"unit_$i"}; # um eine Dienstleistung). Dann keinerlei Umrechnung vornehmen.
|
||
}
|
||
# adjust prices by unit, ignore if pricegroup changed
|
||
if ((!$form->{"prices_$i"}) || ($form->{"new_pricegroup_$i"} == $form->{"old_pricegroup_$i"})) {
|
||
$form->{"sellprice_$i"} *= AM->convert_unit($form->{"selected_unit_$i"}, $form->{"unit_old_$i"}, $all_units) || 1;
|
||
$form->{"unit_old_$i"} = $form->{"selected_unit_$i"};
|
||
}
|
||
my $this_unit = $form->{"unit_$i"};
|
||
$this_unit = $form->{"selected_unit_$i"} if AM->convert_unit($this_unit, $form->{"selected_unit_$i"}, $all_units);
|
||
$this_unit ||= "kg";
|
||
|
||
$column_data{"unit"} = AM->unit_select_html($local_units, "unit_$i", $this_unit, $form->{"id_$i"} ? $form->{"unit_$i"} : undef);
|
||
# / unit ending
|
||
|
||
$form->{"sellprice_$i"} =~ /\.(\d+)/;
|
||
$decimalplaces = max 2, length $1;
|
||
|
||
$discount = $form->round_amount($form->{"sellprice_$i"} * $form->{"discount_$i"} / 100, $decimalplaces);
|
||
$linetotal = $form->round_amount($form->{"sellprice_$i"} - $discount, $decimalplaces);
|
||
$linetotal = $form->round_amount($linetotal * $form->{"qty_$i"}, 2);
|
||
|
||
# convert " to "
|
||
map { $form->{"${_}_$i"} =~ s/\"/"/g } qw(partnumber description unit unit_old);
|
||
|
||
$column_data{runningnumber} = $cgi->textfield(-name => "runningnumber_$i", -size => 5, -value => $i); # HuT
|
||
$column_data{partnumber} = $cgi->textfield(-name => "partnumber_$i", -size => 12, -value => $form->{"partnumber_$i"});
|
||
$column_data{description} = ((($rows = $form->numtextrows($form->{"description_$i"}, 30, 6)) > 1) # if description is too large, use a textbox instead
|
||
? $cgi->textarea( -name => "description_$i", -default => H($form->{"description_$i"}), -rows => $rows, -columns => 30)
|
||
: $cgi->textfield(-name => "description_$i", -size => 30, -value => $form->quote($form->{"description_$i"})))
|
||
. $cgi->button(-value => $locale->text('L'), -onClick => "set_longdescription_window('longdescription_$i')");
|
||
|
||
$form->{"qty_$i"} =~ /\.(\d+)/;
|
||
my $qty_dec = length $1;
|
||
|
||
$column_data{qty} = $cgi->textfield(-name => "qty_$i", -size => 5, -value => $form->format_amount(\%myconfig, $form->{"qty_$i"}, $qty_dec));
|
||
$column_data{qty} .= $cgi->button(-onclick => "calculate_qty_selection_window('qty_$i','alu_$i', 'formel_$i', $i)", -value => $locale->text('*/'))
|
||
. $cgi->hidden(-name => "formel_$i", -value => $form->{"formel_$i"}) . $cgi->hidden("-name" => "alu_$i", "-value" => $form->{"alu_$i"})
|
||
if $form->{"formel_$i"};
|
||
$column_data{ship} = $cgi->textfield(-name => "ship_$i", -size => 5, -value => $form->format_amount(\%myconfig, $form->{"ship_$i"}));
|
||
|
||
# build in drop down list for pricesgroups
|
||
if ($form->{"prices_$i"}) {
|
||
$column_data{sellprice_pg} = qq|<select name="sellprice_pg_$i">$form->{"prices_$i"}</select>|;
|
||
$column_data{sellprice} = $cgi->textfield(-name => "sellprice_$i", -size => 10, -onBlur => 'check_right_number_format(this)', -value =>
|
||
(($form->{"new_pricegroup_$i"} != $form->{"old_pricegroup_$i"})
|
||
? $form->format_amount(\%myconfig, $form->{"price_new_$i"}, $decimalplaces)
|
||
: $form->format_amount(\%myconfig, $form->{"sellprice_$i"}, $decimalplaces)));
|
||
} else {
|
||
# for last row and report
|
||
# set pricegroup drop down list from report menu
|
||
if ($form->{"sellprice_$i"} != 0) {
|
||
$form->{"pricegroup_old_$i"} = $form->{"pricegroup_id_$i"};
|
||
my $default_option = $form->{"sellprice_$i"}.'--'.$form->{"pricegroup_id_$i"};
|
||
$column_data{sellprice_pg} = NTI($cgi->popup_menu("sellpricepg_$i", [ $default_option ], $default_option, { $default_option => $form->{"pricegroup_$i"} || '' }));
|
||
} else {
|
||
$column_data{sellprice_pg} = qq| |;
|
||
}
|
||
$column_data{sellprice} = $cgi->textfield(-name => "sellprice_$i", -size => 10, -onBlur => "check_right_number_format(this)", -value =>
|
||
$form->format_amount(\%myconfig, $form->{"sellprice_$i"}, $decimalplaces));
|
||
}
|
||
$column_data{discount} = $cgi->textfield(-name => "discount_$i", -size => 3, -value => $form->format_amount(\%myconfig, $form->{"discount_$i"}));
|
||
$column_data{linetotal} = $form->format_amount(\%myconfig, $linetotal, 2);
|
||
$column_data{bin} = $form->{"bin_$i"};
|
||
|
||
my @ROW1 = map { value => $column_data{$_}, align => $align{$_} }, @column_index;
|
||
|
||
# second row
|
||
my @ROW2 = ();
|
||
push @ROW2, { value => qq|<b>$serialnumber</b> <input name="serialnumber_$i" size="15" value="$form->{"serialnumber_$i"}">| }
|
||
if $form->{type} !~ /_quotation/;
|
||
push @ROW2, { value => qq|<b>$projectnumber</b> | . NTI($cgi->popup_menu('-name' => "project_id_$i", '-values' => \@projectnumber_values,
|
||
'-labels' => \%projectnumber_labels, '-default' => $form->{"project_id_$i"})) };
|
||
push @ROW2, { value => qq|<b>$reqdate</b> <input name="reqdate_$i" size="11" onBlur="check_right_date_format(this)" value="$form->{"reqdate_$i"}">| }
|
||
if $form->{type} =~ /order/;
|
||
push @ROW2, { value => sprintf qq|<b>%s</b> <input type="checkbox" name="subtotal_$i" value="1" %s>|,
|
||
$locale->text('Subtotal'), $form->{"subtotal_$i"} ? 'checked' : '' };
|
||
|
||
# begin marge calculations
|
||
my $marge_color;
|
||
my $real_sellprice = $form->{"sellprice_$i"} - $discount;
|
||
|
||
$form->{"lastcost_$i"} *= 1;
|
||
$form->{"marge_percent_$i"} = 0;
|
||
|
||
if ($real_sellprice && ($form->{"qty_$i"} * 1)) {
|
||
$form->{"marge_percent_$i"} = ($real_sellprice - $form->{"lastcost_$i"}) * 100 / $real_sellprice;
|
||
$myconfig{marge_percent_warn} ||= 15;
|
||
$marge_color = 'color="#ff0000"' if $form->{"id_$i"} && ($form->{"marge_percent_$i"} < (1 * $myconfig{marge_percent_warn}));
|
||
}
|
||
|
||
my $marge_adjust_credit_note = $form->{type} eq 'credit_note' ? -1 : 1;
|
||
$form->{"marge_absolut_$i"} = ($real_sellprice - $form->{"lastcost_$i"}) * $form->{"qty_$i"} * $marge_adjust_credit_note;
|
Auch abrufbar als: Unified diff
Um die Benutzung des Template Systems mal ein wenig zu foerdern.
Die bin/mozilla/oe.pl noch einmal umgeschrieben, so dass jetzt noch mehr Funktionen ins Frontend ausgelagert sind.
Ein neues Highlight ist die template/generic/multibox.html, die es erlaubt aus wenigen Steuerkommandos ein HTML-Eingabefeld zu erstellen, was bei kleinen Datenmengen als Dropdownbox erscheint, udn bei grossen asl Textfeld, mit dazugehörigem Popup-Button, um eine Auswahlliste aufzumachen. Saemtliche Funktionen lassen sich ueber Perlfunktionsreferenzen wieder zurück ins Backend leiten, und dort wieder mit komplexer Logik füllen. Dokumentation ist im Template direkt enthalten.
Die Customer/Vendor Eingabe macht auch gleich Gebrauch davon und erzeugt bei zu grosser Anzahl ein Textfeld, und daneben einen Suchbutton, der die passenden Kunden in einer Liste anzeigt.
Der "Kundendetails"-Button wurde von "?" umbenannt in "D" (immernoch gruselig)
Auf Wunsch von Moritz habe ich die display_row von bin/mozilla/oe.pl wieder verlagert in die bin/mozilla/io.pl, und dafuer die Version in bin/mozilla/invoice_io.pl deaktiviert.