X-Git-Url: http://wagnertech.de/git?p=kivitendo-erp.git;a=blobdiff_plain;f=SL%2FOE.pm;fp=SL%2FOE.pm;h=4ce1b10351b37c485fb0cb83ba7a93095c9d1531;hp=6b4831267aa64a57c257d8aff3bab70450e17b85;hb=b293ff8ad52fc76ba0c44783e3982418114d6b08;hpb=d4925a8b60f04674885e30d9316dc0263f8b9a84 diff --git a/SL/OE.pm b/SL/OE.pm index 6b4831267..4ce1b1035 100644 --- a/SL/OE.pm +++ b/SL/OE.pm @@ -44,6 +44,7 @@ use SL::DB::Order; use SL::DB::PeriodicInvoicesConfig; use SL::DB::Project; use SL::DB::ProjectType; +use SL::DB::RequirementSpecOrder; use SL::DB::Status; use SL::DB::Tax; use SL::DBUtils; @@ -115,6 +116,13 @@ sub transactions { } } + my ($phone_notes_columns, $phone_notes_join); + $form->{phone_notes} = trim($form->{phone_notes}); + if ($form->{phone_notes}) { + $phone_notes_columns = qq| , phone_notes.subject AS phone_notes_subject, phone_notes.body AS phone_notes_body |; + $phone_notes_join = qq| JOIN notes phone_notes ON (o.id = phone_notes.trans_id AND phone_notes.trans_module LIKE 'oe') |; + } + $query = qq|SELECT o.id, o.ordnumber, o.transdate, o.reqdate, | . qq| o.amount, ct.${vc}number, ct.name, o.netamount, o.${vc}_id, o.globalproject_id, | . @@ -132,6 +140,7 @@ sub transactions { qq| ct.${vc}number AS vcnumber, ct.country, ct.ustid, ct.business_id, | . qq| tz.description AS taxzone | . $periodic_invoices_columns . + $phone_notes_columns . qq| , o.order_probability, o.expected_billing_date, (o.netamount * o.order_probability / 100) AS expected_netamount | . qq|FROM oe o | . qq|JOIN $vc ct ON (o.${vc}_id = ct.id) | . @@ -145,6 +154,7 @@ sub transactions { qq|LEFT JOIN tax_zones tz ON (o.taxzone_id = tz.id) | . qq|LEFT JOIN department ON (o.department_id = department.id) | . qq|$periodic_invoices_joins | . + $phone_notes_join . qq|WHERE (o.quotation = ?) |; push(@values, $quotation); @@ -191,7 +201,8 @@ SQL push(@values, (like($form->{"cp_name"}))x2); } - if ( !(($vc eq 'customer' && $main::auth->assert('sales_all_edit', 1)) || ($vc eq 'vendor' && $main::auth->assert('purchase_all_edit', 1))) ) { + if ( !( ($vc eq 'customer' && ($main::auth->assert('sales_all_edit', 1) || $main::auth->assert('sales_order_view', 1))) + || ($vc eq 'vendor' && ($main::auth->assert('purchase_all_edit', 1) || $main::auth->assert('purchase_order_view', 1))) ) ) { $query .= " AND o.employee_id = (select id from employee where login= ?)"; push @values, $::myconfig{login}; } @@ -302,6 +313,54 @@ SQL push(@values, like($form->{intnotes})); } + if ($form->{phone_notes}) { + $query .= qq| AND (phone_notes.subject ILIKE ? OR phone_notes.body ILIKE ?)|; + push(@values, like($form->{phone_notes}), like($form->{phone_notes})); + } + + $form->{fulltext} = trim($form->{fulltext}); + if ($form->{fulltext}) { + my @fulltext_fields = qw(o.notes + o.intnotes + o.shippingpoint + o.shipvia + o.transaction_description + o.quonumber + o.ordnumber + o.cusordnumber); + $query .= ' AND ('; + $query .= join ' ILIKE ? OR ', @fulltext_fields; + $query .= ' ILIKE ?'; + + $query .= <{fulltext})) for 1 .. (scalar @fulltext_fields) + 5; + } + if ($form->{parts_partnumber}) { $query .= <{type} =~ m{order} ? 'ordnumber' : 'quonumber'; my $trans_number = SL::TransNumber->new(type => $form->{type}, dbh => $dbh, number => $form->{$number_field}, id => $form->{id}); $form->{$number_field} ||= $trans_number->create_unique; # set $form->{ordnumber} or $form->{quonumber} + my $is_new = !$form->{id}; if ($form->{id}) { $query = qq|DELETE FROM custom_variables @@ -753,7 +813,7 @@ SQL customer_id = ?, amount = ?, netamount = ?, reqdate = ?, tax_point = ?, 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 = ?,delivery_term_id = ?, + taxzone_id = ?, shipto_id = ?, billing_address_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 = ? , order_probability = ?, expected_billing_date = ? WHERE id = ?|; @@ -768,7 +828,7 @@ SQL $form->{delivered} ? "t" : "f", $form->{proforma} ? 't' : 'f', $quotation, conv_i($form->{department_id}), conv_i($form->{language_id}), conv_i($form->{taxzone_id}), - conv_i($form->{shipto_id}), conv_i($form->{payment_id}), + conv_i($form->{shipto_id}), conv_i($form->{billing_address_id}), conv_i($form->{payment_id}), conv_i($form->{delivery_vendor_id}), conv_i($form->{delivery_customer_id}), conv_i($form->{delivery_term_id}), @@ -832,11 +892,77 @@ SQL config_yaml => $form->{periodic_invoices_config}) if ($form->{type} eq 'sales_order'); + $self->_link_created_sales_order_to_requirement_specs_for_sales_quotations( + type => $form->{type}, + converted_from_ids => \@convert_from_oe_ids, + sales_order_id => $form->{id}, + is_new => $is_new, + ); + + $self->_set_project_in_linked_requirement_spec( + type => $form->{type}, + project_id => $form->{globalproject_id}, + sales_order_id => $form->{id}, + ); + $main::lxdebug->leave_sub(); return 1; } +sub _link_created_sales_order_to_requirement_specs_for_sales_quotations { + my ($self, %params) = @_; + + # If this is a sales order created from a sales quotation and if + # that sales quotation was created from a requirement spec document + # then link the newly created sales order to the requirement spec + # document, too. + + return if !$params{is_new}; + return if $params{type} ne 'sales_order'; + return if !@{ $params{converted_from_ids} }; + + my $oe_objects = SL::DB::Manager::Order->get_all(where => [ id => $params{converted_from_ids} ]); + my @sales_quotations = grep { $_->is_type('sales_quotation') } @{ $oe_objects }; + + return if !@sales_quotations; + + my $rs_orders = SL::DB::Manager::RequirementSpecOrder->get_all(where => [ order_id => [ map { $_->id } @sales_quotations ] ]); + + return if !@{ $rs_orders }; + + $rs_orders->[0]->db->with_transaction(sub { + foreach my $rs_order (@{ $rs_orders }) { + SL::DB::RequirementSpecOrder->new( + order_id => $params{sales_order_id}, + requirement_spec_id => $rs_order->requirement_spec_id, + version_id => $rs_order->version_id, + )->save; + } + + 1; + }); +} + +sub _set_project_in_linked_requirement_spec { + my ($self, %params) = @_; + + return if $params{type} ne 'sales_order'; + return if !$params{project_id} || !$params{sales_order_id}; + + my $query = <get_standard_dbh, $query, $params{project_id}, $params{sales_order_id}); +} + sub save_periodic_invoices_config { my ($self, %params) = @_; @@ -1032,7 +1158,7 @@ sub _retrieve { o.closed, o.reqdate, o.tax_point, o.quonumber, o.department_id, o.cusordnumber, o.mtime, o.itime, 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.delivery_customer_id, o.delivery_vendor_id, o.proforma, o.shipto_id, o.billing_address_id, o.globalproject_id, o.delivered, o.transaction_description, o.delivery_term_id, o.itime::DATE AS insertdate, o.order_probability, o.expected_billing_date FROM oe o