X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FOE.pm;h=797eb97178c089fc8a5df87b298cfadaadae24f2;hb=9bfde8af91ac295afb6e68b8580f000fd6051f15;hp=694732e1df3395342a3764e158186b0d2ec3839f;hpb=c312836ce432677d4f7876f1e3a2b6d99f433cd6;p=kivitendo-erp.git diff --git a/SL/OE.pm b/SL/OE.pm index 694732e1d..797eb9717 100644 --- a/SL/OE.pm +++ b/SL/OE.pm @@ -43,6 +43,7 @@ use SL::CVar; use SL::DB::Order; use SL::DB::PeriodicInvoicesConfig; use SL::DB::Status; +use SL::DB::Tax; use SL::DBUtils; use SL::IC; @@ -87,7 +88,8 @@ sub transactions { qq| ex.$rate AS exchangerate, | . qq| pr.projectnumber AS globalprojectnumber, | . qq| e.name AS employee, s.name AS salesman, | . - qq| ct.${vc}number AS vcnumber, ct.country, ct.ustid | . + qq| ct.${vc}number AS vcnumber, ct.country, ct.ustid, ct.business_id, | . + qq| tz.description AS taxzone | . $periodic_invoices_columns . qq|FROM oe o | . qq|JOIN $vc ct ON (o.${vc}_id = ct.id) | . @@ -96,6 +98,7 @@ sub transactions { qq|LEFT JOIN exchangerate ex ON (ex.currency_id = o.currency_id | . qq| AND ex.transdate = o.transdate) | . qq|LEFT JOIN project pr ON (o.globalproject_id = pr.id) | . + qq|LEFT JOIN tax_zones tz ON (o.taxzone_id = tz.id) | . qq|$periodic_invoices_joins | . qq|WHERE (o.quotation = ?) |; push(@values, $quotation); @@ -126,6 +129,11 @@ SQL push @values, "%" . $form->{"projectnumber"} . "%", "%" . $form->{"projectnumber"} . "%" ; } + if ($form->{"business_id"}) { + $query .= " AND ct.business_id = ?"; + push(@values, $form->{"business_id"}); + } + if ($form->{"${vc}_id"}) { $query .= " AND o.${vc}_id = ?"; push(@values, $form->{"${vc}_id"}); @@ -186,6 +194,16 @@ SQL push(@values, conv_date($form->{reqdateto})); } + if ($form->{shippingpoint}) { + $query .= qq| AND o.shippingpoint ILIKE ?|; + push(@values, '%' . $form->{shippingpoint} . '%'); + } + + if ($form->{taxzone_id} ne '') { # taxzone_id could be 0 + $query .= qq| AND tz.id = ?|; + push(@values, $form->{taxzone_id}); + } + if ($form->{transaction_description}) { $query .= qq| AND o.transaction_description ILIKE ?|; push(@values, '%' . $form->{transaction_description} . '%'); @@ -208,7 +226,9 @@ SQL "employee" => "e.name", "salesman" => "s.name", "shipvia" => "o.shipvia", - "transaction_description" => "o.transaction_description" + "transaction_description" => "o.transaction_description", + "shippingpoint" => "o.shippingpoint", + "taxzone" => "tz.description", ); if ($form->{sort} && grep($form->{sort}, keys(%allowed_sort_columns))) { $sortorder = $allowed_sort_columns{$form->{sort}} . " ${sortdir}"; @@ -498,7 +518,7 @@ sub save { customer_id = ?, amount = ?, netamount = ?, reqdate = ?, taxincluded = ?, shippingpoint = ?, shipvia = ?, notes = ?, intnotes = ?, currency_id = (SELECT id FROM currencies WHERE name=?), closed = ?, delivered = ?, proforma = ?, quotation = ?, department_id = ?, language_id = ?, - taxzone_id = ?, shipto_id = ?, payment_id = ?, delivery_vendor_id = ?, delivery_customer_id = ?, + taxzone_id = ?, shipto_id = ?, payment_id = ?, delivery_vendor_id = ?, delivery_customer_id = ?,delivery_term_id = ?, globalproject_id = ?, employee_id = ?, salesman_id = ?, cp_id = ?, transaction_description = ?, marge_total = ?, marge_percent = ? WHERE id = ?|; @@ -515,6 +535,7 @@ sub save { conv_i($form->{shipto_id}), conv_i($form->{payment_id}), conv_i($form->{delivery_vendor_id}), conv_i($form->{delivery_customer_id}), + conv_i($form->{delivery_term_id}), conv_i($form->{globalproject_id}), conv_i($form->{employee_id}), conv_i($form->{salesman_id}), conv_i($form->{cp_id}), $form->{transaction_description}, @@ -748,7 +769,7 @@ sub retrieve { o.closed, o.reqdate, o.quonumber, o.department_id, o.cusordnumber, d.description AS department, o.payment_id, o.language_id, o.taxzone_id, o.delivery_customer_id, o.delivery_vendor_id, o.proforma, o.shipto_id, - o.globalproject_id, o.delivered, o.transaction_description + o.globalproject_id, o.delivered, o.transaction_description, o.delivery_term_id FROM oe o JOIN ${vc} cv ON (o.${vc}_id = cv.id) LEFT JOIN employee e ON (o.employee_id = e.id) @@ -1011,7 +1032,7 @@ sub order_details { my $tax_rate; my $taxamount; - my (@project_ids, %projectnumbers, %projectdescriptions); + my (@project_ids); push(@project_ids, $form->{"globalproject_id"}) if ($form->{"globalproject_id"}); @@ -1042,19 +1063,21 @@ sub order_details { push(@project_ids, $form->{"project_id_$i"}) if ($form->{"project_id_$i"}); } + my $projects = []; + my %projects_by_id; if (@project_ids) { - $query = "SELECT id, projectnumber, description FROM project WHERE id IN (" . - join(", ", map("?", @project_ids)) . ")"; - $sth = prepare_execute_query($form, $dbh, $query, @project_ids); - while (my $ref = $sth->fetchrow_hashref()) { - $projectnumbers{$ref->{id}} = $ref->{projectnumber}; - $projectdescriptions{$ref->{id}} = $ref->{description}; - } - $sth->finish(); + $projects = SL::DB::Manager::Project->get_all(query => [ id => \@project_ids ]); + %projects_by_id = map { $_->id => $_ } @$projects; } - $form->{"globalprojectnumber"} = $projectnumbers{$form->{"globalproject_id"}}; - $form->{"globalprojectdescription"} = $projectdescriptions{$form->{"globalproject_id"}}; + if ($projects_by_id{$form->{"globalproject_id"}}) { + $form->{globalprojectnumber} = $projects_by_id{$form->{"globalproject_id"}}->projectnumber; + $form->{globalprojectdescription} = $projects_by_id{$form->{"globalproject_id"}}->description; + + for (@{ $projects_by_id{$form->{"globalproject_id"}}->cvars_by_config }) { + $form->{"project_cvar_" . $_->config->name} = $_->value_as_text; + } + } $form->{discount} = []; @@ -1062,6 +1085,7 @@ sub order_details { IC->prepare_parts_for_printing(myconfig => $myconfig, form => $form); my $ic_cvar_configs = CVar->get_configs(module => 'IC'); + my $project_cvar_configs = CVar->get_configs(module => 'Projects'); my @arrays = qw(runningnumber number description longdescription qty ship unit bin @@ -1071,6 +1095,7 @@ sub order_details { price_factor price_factor_name partsgroup weight lineweight); push @arrays, map { "ic_cvar_$_->{name}" } @{ $ic_cvar_configs }; + push @arrays, map { "project_cvar_$_->{name}" } @{ $project_cvar_configs }; my @tax_arrays = qw(taxbase tax taxdescription taxrate taxnumber); @@ -1184,12 +1209,14 @@ sub order_details { $nodiscount += $linetotal; } + my $project = $projects_by_id{$form->{"project_id_$i"}} || SL::DB::Project->new; + push @{ $form->{TEMPLATE_ARRAYS}->{linetotal} }, $form->format_amount($myconfig, $linetotal, 2); push @{ $form->{TEMPLATE_ARRAYS}->{linetotal_nofmt} }, $linetotal_exact; push @{ $form->{TEMPLATE_ARRAYS}->{nodiscount_linetotal} }, $form->format_amount($myconfig, $nodiscount_linetotal, 2); push @{ $form->{TEMPLATE_ARRAYS}->{nodiscount_linetotal_nofmt} }, $nodiscount_linetotal; - push(@{ $form->{TEMPLATE_ARRAYS}->{projectnumber} }, $projectnumbers{$form->{"project_id_$i"}}); - push(@{ $form->{TEMPLATE_ARRAYS}->{projectdescription} }, $projectdescriptions{$form->{"project_id_$i"}}); + push @{ $form->{TEMPLATE_ARRAYS}->{projectnumber} }, $project->projectnumber; + push @{ $form->{TEMPLATE_ARRAYS}->{projectdescription} }, $project->description; my $lineweight = $form->{"qty_$i"} * $form->{"weight_$i"}; $totalweight += $lineweight; @@ -1261,6 +1288,8 @@ sub order_details { push @{ $form->{TEMPLATE_ARRAYS}->{"ic_cvar_$_->{name}"} }, CVar->format_to_template(CVar->parse($form->{"ic_cvar_$_->{name}_$i"}, $_), $_) for @{ $ic_cvar_configs }; + + push @{ $form->{TEMPLATE_ARRAYS}->{"project_cvar_" . $_->config->name} }, $_->value_as_text for @{ $project->cvars_by_config }; } } @@ -1279,8 +1308,11 @@ sub order_details { push(@{ $form->{TEMPLATE_ARRAYS}->{tax_nofmt} }, $taxamount); push(@{ $form->{TEMPLATE_ARRAYS}->{taxrate} }, $form->format_amount($myconfig, $form->{"${item}_rate"} * 100)); push(@{ $form->{TEMPLATE_ARRAYS}->{taxrate_nofmt} }, $form->{"${item}_rate"} * 100); - push(@{ $form->{TEMPLATE_ARRAYS}->{taxdescription} }, $form->{"${item}_description"} . q{ } . 100 * $form->{"${item}_rate"} . q{%}); push(@{ $form->{TEMPLATE_ARRAYS}->{taxnumber} }, $form->{"${item}_taxnumber"}); + + my $tax_obj = SL::DB::Manager::Tax->find_by(taxnumber => $form->{"${item}_taxnumber"}); + my $description = $tax_obj->translated_attribute('taxdescription', $form->{language_id}, 0) if $tax_obj; + push(@{ $form->{TEMPLATE_ARRAYS}->{taxdescription} }, $description . q{ } . 100 * $form->{"${item}_rate"} . q{%}); } $form->{nodiscount_subtotal} = $form->format_amount($myconfig, $form->{nodiscount_total}, 2); @@ -1311,6 +1343,9 @@ sub order_details { $dbh->disconnect; + $form->{delivery_term} = SL::DB::Manager::DeliveryTerm->find_by(id => $form->{delivery_term_id} || undef); + $form->{delivery_term}->description_long($form->{delivery_term}->translated_attribute('description_long', $form->{language_id})) if $form->{delivery_term} && $form->{language_id}; + $main::lxdebug->leave_sub(); }