use SL::HTML::Restrict;
use SL::IC;
use SL::TransNumber;
+use SL::Util qw(trim);
+use Text::ParseWords;
use strict;
WHERE proi.projectnumber ILIKE ? AND oi.trans_id = o.id
))
SQL
- push @values, "%" . $form->{"projectnumber"} . "%", "%" . $form->{"projectnumber"} . "%" ;
+ push @values, like($form->{"projectnumber"}), like($form->{"projectnumber"});
}
if ($form->{"business_id"}) {
} elsif ($form->{$vc}) {
$query .= " AND ct.name ILIKE ?";
- push(@values, '%' . $form->{$vc} . '%');
+ push(@values, like($form->{$vc}));
}
if ($form->{"cp_name"}) {
$query .= " AND (cp.cp_name ILIKE ? OR cp.cp_givenname ILIKE ?)";
- push(@values, ('%' . $form->{"cp_name"} . '%')x2);
+ push(@values, (like($form->{"cp_name"}))x2);
}
if (!$main::auth->assert('sales_all_edit', 1)) {
if ($form->{$ordnumber}) {
$query .= qq| AND o.$ordnumber ILIKE ?|;
- push(@values, '%' . $form->{$ordnumber} . '%');
+ push(@values, like($form->{$ordnumber}));
}
if ($form->{cusordnumber}) {
$query .= qq| AND o.cusordnumber ILIKE ?|;
- push(@values, '%' . $form->{cusordnumber} . '%');
+ push(@values, like($form->{cusordnumber}));
}
if($form->{transdatefrom}) {
if ($form->{shippingpoint}) {
$query .= qq| AND o.shippingpoint ILIKE ?|;
- push(@values, '%' . $form->{shippingpoint} . '%');
+ push(@values, like($form->{shippingpoint}));
}
if ($form->{taxzone_id} ne '') { # taxzone_id could be 0
if ($form->{transaction_description}) {
$query .= qq| AND o.transaction_description ILIKE ?|;
- push(@values, '%' . $form->{transaction_description} . '%');
+ push(@values, like($form->{transaction_description}));
}
if ($form->{periodic_invoices_active} ne $form->{periodic_invoices_inactive}) {
if (($form->{order_probability_value} || '') ne '') {
my $op = $form->{order_probability_value} eq 'le' ? '<=' : '>=';
$query .= qq| AND (o.order_probability ${op} ?)|;
- push @values, $form->{order_probability_value};
+ push @values, trim($form->{order_probability_value});
}
if ($form->{expected_billing_date_from}) {
push @values, conv_date($form->{expected_billing_date_to});
}
+ if ($form->{parts_partnumber}) {
+ $query .= <<SQL;
+ AND EXISTS (
+ SELECT orderitems.trans_id
+ FROM orderitems
+ LEFT JOIN parts ON (orderitems.parts_id = parts.id)
+ WHERE (orderitems.trans_id = o.id)
+ AND (parts.partnumber ILIKE ?)
+ LIMIT 1
+ )
+SQL
+ push @values, like($form->{parts_partnumber});
+ }
+
+ if ($form->{parts_description}) {
+ $query .= <<SQL;
+ AND EXISTS (
+ SELECT orderitems.trans_id
+ FROM orderitems
+ WHERE (orderitems.trans_id = o.id)
+ AND (orderitems.description ILIKE ?)
+ LIMIT 1
+ )
+SQL
+ push @values, like($form->{parts_description});
+ }
+
+ if ($form->{all}) {
+ my @tokens = parse_line('\s+', 0, $form->{all});
+ # ordnumber quonumber customer.name vendor.name transaction_description
+ $query .= qq| AND (
+ o.ordnumber ILIKE ? OR
+ o.quonumber ILIKE ? OR
+ ct.name ILIKE ? OR
+ o.transaction_description ILIKE ?
+ )| for @tokens;
+ push @values, (like($_))x4 for @tokens;
+ }
+
my ($cvar_where, @cvar_values) = CVar->build_filter_query('module' => 'CT',
'trans_id_field' => 'ct.id',
'filter' => $form,
$form->{$number_field} ||= $trans_number->create_unique; # set $form->{ordnumber} or $form->{quonumber}
if ($form->{id}) {
+ $query = qq|DELETE FROM custom_variables
+ WHERE (config_id IN (SELECT id FROM custom_variable_configs WHERE (module = 'ShipTo')))
+ AND (trans_id IN (SELECT shipto_id FROM shipto WHERE (module = 'OE') AND (trans_id = ?)))|;
+ do_query($form, $dbh, $query, $form->{id});
+
$query = qq|DELETE FROM shipto | .
qq|WHERE trans_id = ? AND module = 'OE'|;
do_query($form, $dbh, $query, $form->{id});
dbh => $dbh);
# link previous items with orderitems
- foreach (qw(orderitems invoice)) {
- if (!$form->{saveasnew} && !$form->{useasnew} && $form->{"converted_from_${_}_id_$i"}) {
+ # assume we have a new workflow if we link from invoice or order to quotation
+ # unluckily orderitems are used for quotation and orders - therefore one more
+ # check to be sure NOT to link from order to quotation
+ foreach (qw(orderitems)) {
+ if (!$form->{saveasnew} && !$form->{useasnew} && $form->{"converted_from_${_}_id_$i"}
+ && $form->{type} !~ 'quotation') {
RecordLinks->create_links('dbh' => $dbh,
'mode' => 'ids',
'from_table' => $_,
$form->save_status($dbh);
# Link this record to the records it was created from.
- # check every record type we may link. i am not happy with converting the string to array back
- # should be a array from the start (OE.pm -> retrieve).
- # and that i need the local array ref for close_quotation_rfqs. better ideas welcome
$form->{convert_from_oe_ids} =~ s/^\s+//;
$form->{convert_from_oe_ids} =~ s/\s+$//;
my @convert_from_oe_ids = split m/\s+/, $form->{convert_from_oe_ids};
delete $form->{convert_from_oe_ids};
- @{ $form->{convert_from_oe_ids} } = @convert_from_oe_ids;
- foreach (qw(ar oe)) {
- if (!$form->{useasnew} && $form->{"convert_from_${_}_ids"}) {
- RecordLinks->create_links('dbh' => $dbh,
- 'mode' => 'ids',
- 'from_table' => $_,
- 'from_ids' => $form->{"convert_from_${_}_ids"},
- 'to_table' => 'oe',
- 'to_id' => $form->{id},
- );
- delete $form->{"convert_from_${_}_ids"};
- }
+ if (!$form->{useasnew} && scalar @convert_from_oe_ids) {
+ RecordLinks->create_links('dbh' => $dbh,
+ 'mode' => 'ids',
+ 'from_table' => 'oe',
+ 'from_ids' => \@convert_from_oe_ids,
+ 'to_table' => 'oe',
+ 'to_id' => $form->{id},
+ );
$self->_close_quotations_rfqs('dbh' => $dbh,
'from_id' => \@convert_from_oe_ids,
- 'to_id' => $form->{id}) if $_ eq 'oe';
+ 'to_id' => $form->{id});
}
if (($form->{currency} ne $form->{defaultcurrency}) && !$exchangerate) {
if ($config_obj) {
my $config = { map { $_ => $config_obj->$_ } qw(active terminated periodicity order_value_periodicity start_date_as_date end_date_as_date first_billing_date_as_date extend_automatically_by ar_chart_id
- print printer_id copies direct_debit) };
+ print printer_id copies direct_debit send_email email_recipient_contact_id email_recipient_address email_sender email_subject email_body) };
$form->{periodic_invoices_config} = YAML::Dump($config);
}
}
map { $form->{$_} = $ref->{$_} } keys %$ref;
$sth->finish;
+ if ($form->{shipto_id}) {
+ my $cvars = CVar->get_custom_variables(
+ dbh => $dbh,
+ module => 'ShipTo',
+ trans_id => $form->{shipto_id},
+ );
+ $form->{"shiptocvar_$_->{name}"} = $_->{value} for @{ $cvars };
+ }
+
# get printed, emailed and queued
$query = qq|SELECT s.printed, s.emailed, s.spoolfile, s.formname FROM status s WHERE s.trans_id = ?|;
$sth = prepare_execute_query($form, $dbh, $query, $form->{id});
# format amounts
$form->{quototal} = $form->{ordtotal} = $form->format_amount($myconfig, $form->{ordtotal}, 2);
- if ($form->{type} =~ /_quotation/) {
- $form->set_payment_options($myconfig, $form->{quodate});
- } else {
- $form->set_payment_options($myconfig, $form->{orddate});
- }
+ $form->set_payment_options($myconfig, $form->{$form->{type} =~ /_quotation/ ? 'quodate' : 'orddate'}, $form->{type});
$form->{username} = $myconfig->{name};
$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};
+ if ($form->{delivery_term} && $form->{language_id}) {
+ $form->{delivery_term}->description_long( $form->{delivery_term}->translated_attribute('description_long', $form->{language_id}));
+ $form->{delivery_term}->description_long_invoice($form->{delivery_term}->translated_attribute('description_long_invoice', $form->{language_id}));
+ }
$form->{order} = SL::DB::Manager::Order->find_by(id => $form->{id}) if $form->{id};