#
#######################################################################
+use CGI;
+use CGI::Ajax;
+use List::Util qw(max);
+
+use SL::Common;
use SL::CT;
use SL::IC;
-use CGI::Ajax;
-use CGI;
require "bin/mozilla/common.pl";
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
$form->{"unit_old_$i"} = $form->{"selected_unit_$i"};
}
}
+
($dec) = ($form->{"sellprice_$i"} =~ /\.(\d+)/);
- $dec = length $dec;
- $decimalplaces = ($dec > 2) ? $dec : 2;
+ $decimalplaces = max length($dec), 2;
- $discount =
- $form->round_amount(
- $form->{"sellprice_$i"} * $form->{"discount_$i"} / 100,
- $decimalplaces);
+ $price_factor = $price_factors{$form->{"price_factor_id_$i"}} || 1;
+ $discount = (100 - $form->{"discount_$i"} * 1) / 100;
- $linetotal =
- $form->round_amount($form->{"sellprice_$i"} - $discount, $decimalplaces);
- $linetotal = $form->round_amount($linetotal * $form->{"qty_$i"}, 2);
- my $real_sellprice = $form->{"sellprice_$i"} - $discount;
+ $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"}) * 100 / $real_sellprice;
+ $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"} &&
}
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;
- $form->{"marge_total"} += $form->{"marge_absolut_$i"};
- $form->{"lastcost_total"} += $form->{"lastcost_$i"} * $form->{"qty_$i"};
+ $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_absolut marge_percent);
+ map { $form->{"${_}_$i"} = $form->format_amount(\%myconfig, $form->{"${_}_$i"}, 2) } qw(marge_total marge_percent);
# convert " to "
map { $form->{"${_}_$i"} =~ s/\"/"/g }
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"}). qq|</td>|;
+ $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"})
$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,
"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_absolut_$i", "marge_percent_$i", "lastcost_$i"));
+ "longdescription_$i", "basefactor_$i", "marge_total_$i", "marge_percent_$i", "lastcost_$i",
+ "marge_price_factor_$i"));
########################################
# Eintrag fuer Version 2.2.0 geaendert #
}
my $subtotalchecked = ($form->{"subtotal_$i"}) ? "checked" : "";
print qq|
- <b>|.$locale->text('Subtotal').qq|</b> <input type="checkbox" name="subtotal_$i" value="1" "$subtotalchecked">
+ <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_absolut_$i"} $form->{"marge_percent_$i"} % ${marge_font_end}
+ ${marge_font_start}<b>| . $locale->text('Ertrag') . qq|</b> $form->{"marge_total_$i"} $form->{"marge_percent_$i"} % ${marge_font_end}
<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);
+ <b>| . $locale->text('EK') . qq|</b> | . $form->format_amount(\%myconfig, $form->{"lastcost_$i"}, 2) . $marge_price_factor;
}
print qq|
map { $ref->{$_} =~ s/\"/"/g } qw(partnumber description unit);
- #sk tradediscount
- $ref->{sellprice} =
- $form->round_amount($ref->{sellprice} * (1 - $form->{tradediscount}), 2);
+ my $display_sellprice = $ref->{sellprice} * (1 - $form->{tradediscount});
+ $display_sellprice /= $ref->{price_factor} if ($ref->{price_factor});
+ $display_sellprice = $form->format_amount(\%myconfig, $display_sellprice, 2);
+
$column_data{ndx} =
qq|<td><input name="ndx" class="radio" type="radio" value="$i" $checked></td>|;
$column_data{partnumber} =
qq|<td><input name="new_description_$i" type="hidden" value="$ref->{description}">$ref->{description}</td>|;
$column_data{sellprice} =
qq|<td align="right"><input name="new_sellprice_$i" type="hidden" value="$ref->{sellprice}">|
- . $form->format_amount(\%myconfig, $ref->{sellprice}, 2, " ")
+ . $display_sellprice
. qq|</td>|;
$column_data{onhand} =
qq|<td align="right"><input name="new_onhand_$i" type="hidden" value="$ref->{onhand}">|
my @new_fields =
qw(bin listprice inventory_accno income_accno expense_accno unit weight
assembly taxaccounts partsgroup formel longdescription not_discountable
- part_payment_id partnotes id lastcost);
+ part_payment_id partnotes id lastcost price_factor_id price_factor);
push(@new_fields, "lizenzen") if ($lizenzen);
print join "\n", map { $cgi->hidden("-name" => "new_${_}_$i", "-value" => $ref->{$_}) } @new_fields;
# if there was a price entered, override it
$sellprice = $form->parse_amount(\%myconfig, $form->{"sellprice_$i"});
- map { $form->{"${_}_$i"} = $form->{"new_${_}_$j"} }
+ my @new_fields =
qw(id partnumber description sellprice listprice inventory_accno
income_accno expense_accno bin unit weight assembly taxaccounts
- partsgroup formel longdescription not_discountable partnotes lastcost);
+ partsgroup formel longdescription not_discountable partnotes lastcost
+ price_factor_id price_factor);
+
+ map { $form->{"${_}_$i"} = $form->{"new_${_}_$j"} } @new_fields;
+
+ $form->{"marge_price_factor_$i"} = $form->{"new_price_factor_$j"};
+
if ($form->{"part_payment_id_$i"} ne "") {
$form->{payment_id} = $form->{"part_payment_id_$i"};
}
# delete all the new_ variables
for $i (1 .. $form->{lastndx}) {
- map { delete $form->{"new_${_}_$i"} }
- qw(partnumber description sellprice bin listprice inventory_accno income_accno expense_accno unit assembly taxaccounts id);
+ map { delete $form->{"new_${_}_$i"} } @new_fields;
}
map { delete $form->{$_} } qw(ndx lastndx nextsub);
. $locale->text('Part') . qq|<br>
<input class="radio" type="radio" name="item" value="service"> |
. $locale->text('Service');
-print $cgi->hidden("-name" => "previousform", "-value" => $previousform);
-map({ print($cgi->hidden("-name" => $_, "-value" => $form->{$_})); }
- qw(rowcount vc login password));
- map({ print($cgi->hidden("-name" => $_, "-value" => $form->{"$__$i"})); }
- ("partnumber", "description"));
-print $cgi->hidden("-name" => "taxaccount2", "-value" => $form->{taxaccounts});
+
+ print $cgi->hidden("-name" => "previousform", "-value" => $previousform);
+ map { print $cgi->hidden("-name" => $_, "-value" => $form->{$_}); } qw(rowcount vc login password);
+ map { print $cgi->hidden("-name" => $_, "-value" => $form->{"${_}_$i"}); } qw(partnumber description unit sellprice price_factor_id);
+ print $cgi->hidden("-name" => "taxaccount2", "-value" => $form->{taxaccounts});
print qq|
<input type="hidden" name="nextsub" value="add">
$lxdebug->enter_sub();
my @a = ();
my $count = 0;
- my @flds = (
- qw(id partnumber description qty ship sellprice unit discount inventory_accno income_accno expense_accno listprice taxaccounts bin assembly weight projectnumber project_id oldprojectnumber runningnumber serialnumber partsgroup payment_id not_discountable shop ve gv buchungsgruppen_id language_values sellprice_pg pricegroup_old price_old price_new unit_old ordnumber transdate longdescription basefactor marge_absolut marge_percent lastcost )
- );
-
+ my @flds = (qw(id partnumber description qty ship sellprice unit discount inventory_accno income_accno expense_accno listprice taxaccounts bin assembly weight projectnumber project_id oldprojectnumber runningnumber serialnumber partsgroup payment_id not_discountable shop ve gv buchungsgruppen_id language_values sellprice_pg pricegroup_old price_old price_new unit_old ordnumber transdate longdescription basefactor marge_total marge_percent marge_price_factor lastcost price_factor_id));
# remove any makes or model rows
if ($form->{item} eq 'part') {
$form->{"email"} = $form->{"cp_email"};
}
- $form->{ $form->{vc} } =~ /--/;
- $title = $locale->text('E-mail') . " $`";
+ $title = $locale->text('E-mail') . " " . $form->get_formname_translation();
$form->{oldmedia} = $form->{media};
$form->{media} = "email";
print_form("return");
+ Common->save_email_status(\%myconfig, $form);
+
$form->{callback} = $callback;
$form->redirect();
sub print_options {
$lxdebug->enter_sub();
- my ($options) = @_;
-
- $options ||= { };
+ my %options = @_;
# names 3 parameters and returns a hashref, for use in templates
sub opthash { +{ value => shift, selected => shift, oname => shift } }
opthash("screen", $form->{OP}{screen}, $locale->text('Screen')),
(scalar @{ $form->{printers} } && $latex_templates) ?
opthash("printer", $form->{OP}{printer}, $locale->text('Printer')) : undef,
- ($latex_templates && !$options->{no_queue}) ?
+ ($latex_templates && !$options{no_queue}) ?
opthash("queue", $form->{OP}{queue}, $locale->text('Queue')) : undef
if ($form->{media} ne 'email');
push @FORMAT, grep $_,
($opendocument_templates && $openofficeorg_writer_bin && $xvfb_bin && (-x $openofficeorg_writer_bin) && (-x $xvfb_bin)
- && !$options->{no_opendocument_pdf}) ?
+ && !$options{no_opendocument_pdf}) ?
opthash("opendocument_pdf", $form->{DF}{"opendocument_pdf"}, $locale->text("PDF (OpenDocument/OASIS)")) : undef,
($latex_templates) ?
opthash("pdf", $form->{DF}{pdf}, $locale->text('PDF')) : undef,
- ($latex_templates && !$options->{no_postscript}) ?
+ ($latex_templates && !$options{no_postscript}) ?
opthash("postscript", $form->{DF}{postscript}, $locale->text('Postscript')) : undef,
- (!$options->{no_html}) ?
+ (!$options{no_html}) ?
opthash("html", $form->{DF}{html}, "HTML") : undef,
- ($opendocument_templates && !$options->{no_opendocument}) ?
+ ($opendocument_templates && !$options{no_opendocument}) ?
opthash("opendocument", $form->{DF}{opendocument}, $locale->text("OpenDocument/OASIS")) : undef;
push @LANGUAGE_ID,
- map { opthash($_->{id}, ($_->{id} eq $form->{language} ? 'selected' : ''), $_->{description}) } +{}, @{ $form->{languages} }
+ map { opthash($_->{id}, ($_->{id} eq $form->{language_id} ? 'selected' : ''), $_->{description}) } +{}, @{ $form->{languages} }
if (ref $form->{languages} eq 'ARRAY');
push @PRINTER_ID,
map { opthash($_->{id}, ($_->{id} eq $form->{printer_id} ? 'selected' : ''), $_->{printer_description}) } +{}, @{ $form->{printers} }
if ((ref $form->{printers} eq 'ARRAY') && scalar @{ $form->{printers } });
- @SELECTS = map { sname => lc $_, DATA => \@$_, show => scalar @$_ }, qw(FORMNAME LANGUAGE_ID FORMAT SENDMODE MEDIA PRINTER_ID);
+ @SELECTS = map { sname => lc $_, DATA => \@$_, show => !$options{"hide_" . lc($_)} && scalar @$_ }, qw(FORMNAME LANGUAGE_ID FORMAT SENDMODE MEDIA PRINTER_ID);
my %dont_display_groupitems = (
'dunning' => 1,
my $print_options = $form->parse_html_template("generic/print_options", { SELECTS => \@SELECTS, %template_vars } );
- if ($options->{inline}) {
+ if ($options{inline}) {
$lxdebug->leave_sub() and return $print_options;
} else {
print $print_options; $lxdebug->leave_sub();
$inv = "ord";
$due = "req";
$form->{"${inv}date"} = $form->{transdate};
- $form->{label} = $locale->text('Sales Order');
+ $form->{label} = $locale->text('Confirmation');
$numberfld = "sonumber";
$order = 1;
}
$inv = "quo";
$due = "req";
$form->{"${inv}date"} = $form->{transdate};
- $form->{label} = $locale->text('Quotation');
+ $form->{label} = $locale->text('RFQ');
$numberfld = "rfqnumber";
$order = 1;
}
} keys(%{$form})));
reformat_numbers($output_numberformat, undef,
- qw(qty),
+ qw(qty price_factor),
grep({ /^qty_\d+$/
} keys(%{$form})));