use SL::MIME;
use SL::Util qw(trim);
use SL::YAML;
+use SL::DB::AdditionalBillingAddress;
use SL::DB::History;
use SL::DB::Order;
use SL::DB::Default;
use SL::DB::Printer;
use SL::DB::Language;
use SL::DB::RecordLink;
+use SL::DB::RequirementSpec;
use SL::DB::Shipto;
use SL::DB::Translation;
my $pdf_filename = $form->generate_attachment_filename();
my $pdf;
- my @errors = generate_pdf($self->order, \$pdf, { format => $format,
- formname => $formname,
- language => $self->order->language,
- printer_id => $printer_id,
- groupitems => $groupitems });
+ my @errors = $self->generate_pdf(\$pdf, { format => $format,
+ formname => $formname,
+ language => $self->order->language,
+ printer_id => $printer_id,
+ groupitems => $groupitems });
if (scalar @errors) {
return $self->js->flash('error', t8('Conversion to PDF failed: #1', $errors[0]))->render;
}
$self->js->flash('info', t8('The PDF has been printed'));
}
- my @warnings = store_pdf_to_webdav_and_filemanagement($self->order, $pdf, $pdf_filename);
+ my @warnings = $self->store_pdf_to_webdav_and_filemanagement($pdf, $pdf_filename);
if (scalar @warnings) {
$self->js->flash('warning', $_) for @warnings;
}
my $pdf_filename = $form->generate_attachment_filename();
my $pdf;
- my @errors = generate_pdf($self->order, \$pdf, { format => $format,
- formname => $formname,
- language => $self->order->language,
- });
+ my @errors = $self->generate_pdf(\$pdf, { format => $format,
+ formname => $formname,
+ language => $self->order->language,
+ });
if (scalar @errors) {
return $self->js->flash('error', t8('Conversion to PDF failed: #1', $errors[0]))->render;
}
if (($::form->{attachment_policy} // '') !~ m{^(?:old_file|no_file)$}) {
my $pdf;
- my @errors = generate_pdf($self->order, \$pdf, {media => $::form->{media},
- format => $::form->{print_options}->{format},
- formname => $::form->{print_options}->{formname},
- language => $self->order->language,
- printer_id => $::form->{print_options}->{printer_id},
- groupitems => $::form->{print_options}->{groupitems}});
+ my @errors = $self->generate_pdf(\$pdf, {media => $::form->{media},
+ format => $::form->{print_options}->{format},
+ formname => $::form->{print_options}->{formname},
+ language => $self->order->language,
+ printer_id => $::form->{print_options}->{printer_id},
+ groupitems => $::form->{print_options}->{groupitems}});
if (scalar @errors) {
return $self->js->flash('error', t8('Conversion to PDF failed: #1', $errors[0]))->render($self);
}
- my @warnings = store_pdf_to_webdav_and_filemanagement($self->order, $pdf, $::form->{attachment_filename});
+ my @warnings = $self->store_pdf_to_webdav_and_filemanagement($pdf, $::form->{attachment_filename});
if (scalar @warnings) {
flash_later('warning', $_) for @warnings;
}
$self->js->hide('#shipto_selection');
}
+ if ($cv_method eq 'customer') {
+ my $show_hide = scalar @{ $self->order->customer->additional_billing_addresses } > 0 ? 'show' : 'hide';
+ $self->js->$show_hide('#billing_address_row');
+ }
+
$self->js->val( '#order_salesman_id', $self->order->salesman_id) if $self->order->is_sales;
$self->js
- ->replaceWith('#order_cp_id', $self->build_contact_select)
- ->replaceWith('#order_shipto_id', $self->build_shipto_select)
- ->replaceWith('#shipto_inputs ', $self->build_shipto_inputs)
- ->replaceWith('#business_info_row', $self->build_business_info_row)
- ->val( '#order_taxzone_id', $self->order->taxzone_id)
- ->val( '#order_taxincluded', $self->order->taxincluded)
- ->val( '#order_currency_id', $self->order->currency_id)
- ->val( '#order_payment_id', $self->order->payment_id)
- ->val( '#order_delivery_term_id', $self->order->delivery_term_id)
- ->val( '#order_intnotes', $self->order->intnotes)
- ->val( '#order_language_id', $self->order->$cv_method->language_id)
+ ->replaceWith('#order_cp_id', $self->build_contact_select)
+ ->replaceWith('#order_shipto_id', $self->build_shipto_select)
+ ->replaceWith('#shipto_inputs ', $self->build_shipto_inputs)
+ ->replaceWith('#order_billing_address_id', $self->build_billing_address_select)
+ ->replaceWith('#business_info_row', $self->build_business_info_row)
+ ->val( '#order_taxzone_id', $self->order->taxzone_id)
+ ->val( '#order_taxincluded', $self->order->taxincluded)
+ ->val( '#order_currency_id', $self->order->currency_id)
+ ->val( '#order_payment_id', $self->order->payment_id)
+ ->val( '#order_delivery_term_id', $self->order->delivery_term_id)
+ ->val( '#order_intnotes', $self->order->intnotes)
+ ->val( '#order_language_id', $self->order->$cv_method->language_id)
->focus( '#order_' . $self->cv . '_id')
->run('kivi.Order.update_exchangerate');
$details{payment_terms} = $cv->payment->description if $cv->payment;
$details{pricegroup} = $cv->pricegroup->pricegroup if $is_customer && $cv->pricegroup;
+ foreach my $entry (@{ $cv->additional_billing_addresses }) {
+ push @{ $details{ADDITIONAL_BILLING_ADDRESSES} }, { map { $_ => $entry->$_ } @{$entry->meta->columns} };
+ }
foreach my $entry (@{ $cv->shipto }) {
push @{ $details{SHIPTO} }, { map { $_ => $entry->$_ } @{$entry->meta->columns} };
}
);
}
+# build the selection box for the additional billing address
+#
+# Needed, if customer/vendor changed.
+sub build_billing_address_select {
+ my ($self) = @_;
+
+ select_tag('order.billing_address_id',
+ [ {displayable_id => '', id => ''}, $self->order->{$self->cv}->additional_billing_addresses ],
+ value_key => 'id',
+ title_key => 'displayable_id',
+ default => $self->order->billing_address_id,
+ with_empty => 0,
+ style => 'width: 300px',
+ );
+}
+
# build the selection box for shiptos
#
# Needed, if customer/vendor changed.
$order->intnotes($order->customervendor->notes);
- if ($order->is_sales) {
- $order->salesman_id($order->customer->salesman_id || SL::DB::Manager::Employee->current->id);
- $order->taxincluded(defined($order->customer->taxincluded_checked)
- ? $order->customer->taxincluded_checked
- : $::myconfig{taxincluded_checked});
- }
+ return if !$order->is_sales;
+ $order->salesman_id($order->customer->salesman_id || SL::DB::Manager::Employee->current->id);
+ $order->taxincluded(defined($order->customer->taxincluded_checked)
+ ? $order->customer->taxincluded_checked
+ : $::myconfig{taxincluded_checked});
+
+ my $address = $order->customer->default_billing_address;;
+ $order->billing_address_id($address ? $address->id : undef);
}
# setup custom shipto from form
# link records
if ($::form->{converted_from_oe_id}) {
my @converted_from_oe_ids = split ' ', $::form->{converted_from_oe_id};
+
foreach my $converted_from_oe_id (@converted_from_oe_ids) {
my $src = SL::DB::Order->new(id => $converted_from_oe_id)->load;
$src->update_attributes(closed => 1) if $src->type =~ /_quotation$/;
$idx++;
}
}
+
+ $self->link_requirement_specs_linking_to_created_from_objects(@converted_from_oe_ids);
}
+ $self->set_project_in_linked_requirement_specs if $self->order->globalproject_id;
+
$self->save_history('SAVED');
1;
|| (($self->type eq purchase_order_type()) && $::instance_conf->get_purchase_order_show_delete);
my @req_trans_cost_art = qw(kivi.Order.check_transport_cost_article_presence) x!!$::instance_conf->get_transport_cost_reminder_article_number_id;
+ my @req_cusordnumber = qw(kivi.Order.check_cusordnumber_presence) x($self->type eq sales_order_type() && $::instance_conf->get_order_warn_no_cusordnumber);
for my $bar ($::request->layout->get('actionbar')) {
$bar->add(
t8('Save'),
call => [ 'kivi.Order.save', 'save', $::instance_conf->get_order_warn_duplicate_parts,
$::instance_conf->get_order_warn_no_deliverydate,
- ],
- checks => [ 'kivi.Order.check_save_active_periodic_invoices', ['kivi.validate_form','#order_form'], @req_trans_cost_art ],
+ ],
+ checks => [ 'kivi.Order.check_save_active_periodic_invoices', ['kivi.validate_form','#order_form'],
+ @req_trans_cost_art, @req_cusordnumber,
+ ],
],
action => [
t8('Save as new'),
call => [ 'kivi.Order.save', 'save_as_new', $::instance_conf->get_order_warn_duplicate_parts ],
- checks => [ 'kivi.Order.check_save_active_periodic_invoices', @req_trans_cost_art ],
+ checks => [ 'kivi.Order.check_save_active_periodic_invoices',
+ @req_trans_cost_art, @req_cusordnumber,
+ ],
disabled => !$self->order->id ? t8('This object has not been saved yet.') : undef,
],
], # end of combobox "Save"
action => [
t8('Save and Quotation'),
submit => [ '#order_form', { action => "Order/sales_quotation" } ],
- checks => [ @req_trans_cost_art ],
+ checks => [ @req_trans_cost_art, @req_cusordnumber ],
only_if => (any { $self->type eq $_ } (sales_order_type())),
],
action => [
action => [
t8('Save and Purchase Order'),
call => [ 'kivi.Order.purchase_order_check_for_direct_delivery' ],
- checks => [ @req_trans_cost_art ],
+ checks => [ @req_trans_cost_art, @req_cusordnumber ],
only_if => (any { $self->type eq $_ } (sales_order_type(), request_quotation_type())),
],
action => [
call => [ 'kivi.Order.save', 'save_and_delivery_order', $::instance_conf->get_order_warn_duplicate_parts,
$::instance_conf->get_order_warn_no_deliverydate,
],
- checks => [ 'kivi.Order.check_save_active_periodic_invoices', @req_trans_cost_art ],
+ checks => [ 'kivi.Order.check_save_active_periodic_invoices',
+ @req_trans_cost_art, @req_cusordnumber,
+ ],
only_if => (any { $self->type eq $_ } (sales_order_type(), purchase_order_type()))
],
action => [
t8('Save and Invoice'),
call => [ 'kivi.Order.save', 'save_and_invoice', $::instance_conf->get_order_warn_duplicate_parts ],
- checks => [ 'kivi.Order.check_save_active_periodic_invoices', @req_trans_cost_art ],
+ checks => [ 'kivi.Order.check_save_active_periodic_invoices',
+ @req_trans_cost_art, @req_cusordnumber,
+ ],
],
action => [
t8('Save and AP Transaction'),
call => [ 'kivi.Order.save', 'preview_pdf', $::instance_conf->get_order_warn_duplicate_parts,
$::instance_conf->get_order_warn_no_deliverydate,
],
- checks => [ @req_trans_cost_art ],
+ checks => [ @req_trans_cost_art, @req_cusordnumber ],
],
action => [
t8('Save and print'),
call => [ 'kivi.Order.show_print_options', $::instance_conf->get_order_warn_duplicate_parts,
$::instance_conf->get_order_warn_no_deliverydate,
],
- checks => [ @req_trans_cost_art ],
+ checks => [ @req_trans_cost_art, @req_cusordnumber ],
],
action => [
t8('Save and E-mail'),
}
sub generate_pdf {
- my ($order, $pdf_ref, $params) = @_;
+ my ($self, $pdf_ref, $params) = @_;
+ my $order = $self->order;
my @errors = ();
my $print_form = Form->new('');
}
sub store_pdf_to_webdav_and_filemanagement {
- my($order, $content, $filename) = @_;
+ my ($self, $content, $filename) = @_;
+ my $order = $self->order;
my @errors;
# copy file to webdav folder
return @errors;
}
+sub link_requirement_specs_linking_to_created_from_objects {
+ my ($self, @converted_from_oe_ids) = @_;
+
+ return unless @converted_from_oe_ids;
+
+ my $rs_orders = SL::DB::Manager::RequirementSpecOrder->get_all(where => [ order_id => \@converted_from_oe_ids ]);
+ foreach my $rs_order (@{ $rs_orders }) {
+ SL::DB::RequirementSpecOrder->new(
+ order_id => $self->order->id,
+ requirement_spec_id => $rs_order->requirement_spec_id,
+ version_id => $rs_order->version_id,
+ )->save;
+ }
+}
+
+sub set_project_in_linked_requirement_specs {
+ my ($self) = @_;
+
+ my $rs_orders = SL::DB::Manager::RequirementSpecOrder->get_all(where => [ order_id => $self->order->id ]);
+ foreach my $rs_order (@{ $rs_orders }) {
+ next if $rs_order->requirement_spec->project_id == $self->order->globalproject_id;
+
+ $rs_order->requirement_spec->update_attributes(project_id => $self->order->globalproject_id);
+ }
+}
+
1;
__END__