use SL::File;
use SL::PriceSource;
use SL::Presenter::Part;
+use SL::Util qw(trim);
+use SL::DB::AuthUser;
use SL::DB::Contact;
use SL::DB::Currency;
use SL::DB::Customer;
+use SL::DB::DeliveryOrder::TypeData qw();
use SL::DB::Default;
use SL::DB::Language;
use SL::DB::Printer;
if ($form->{formname} eq "invoice") {
$form->{label} = $locale->text('Invoice');
}
+
+ if ($form->{formname} eq "invoice_for_advance_payment") {
+ $form->{label} = $locale->text('Invoice for Advance Payment');
+ }
+
+ if ($form->{formname} eq "final_invoice") {
+ $form->{label} = $locale->text('Final Invoice');
+ }
+
if ($form->{formname} eq 'sales_order') {
$inv = "ord";
$due = "req";
}
$form->{TEMPLATE_DRIVER_OPTIONS} = { };
- if (any { $form->{type} eq $_ } qw(sales_quotation sales_order sales_delivery_order invoice request_quotation purchase_order purchase_delivery_order credit_note)) {
+ if (any { $form->{type} eq $_ } qw(sales_quotation sales_order sales_delivery_order invoice invoice_for_advance_payment final_invoice request_quotation purchase_order purchase_delivery_order credit_note)) {
$form->{TEMPLATE_DRIVER_OPTIONS}->{variable_content_types} = $form->get_variable_content_types();
}
sales_quotation => 'OrderItem',
request_quotation => 'OrderItem',
invoice => 'InvoiceItem',
+ invoice_for_advance_payment => 'InvoiceItem',
+ final_invoice => 'InvoiceItem',
credit_note => 'InvoiceItem',
purchase_invoice => 'InvoiceItem',
purchase_delivery_order => 'DeliveryOrderItem',
}
$obj->items(@items) if @items;
- $obj->is_sales(!!$obj->customer_id) if $class eq 'SL::DB::DeliveryOrder';
+
+ if ($class eq 'SL::DB::DeliveryOrder' && !$obj->order_type) {
+ $obj->order_type(SL::DB::DeliveryOrder::TypeData::validate_type($::form->{type}));
+ }
if ($class eq 'SL::DB::Invoice') {
my $paid = $factor *
$body_params{fallback_translation_type} = "preset_text_invoice";
}
- $::form->{all_employees} = SL::DB::Manager::Employee->get_all(query => [ deleted => 0 ]);
+ my @employees_with_email = grep {
+ my $user = SL::DB::Manager::AuthUser->find_by(login => $_->login);
+ $user && !!trim($user->get_config_value('email'));
+ } @{ SL::DB::Manager::Employee->get_all_sorted(query => [ deleted => 0 ]) };
+
my $email_form = {
to => $email,
cc => $email_cc,
};
my %files = _get_files_for_email_dialog();
+
+ my $all_partner_email_addresses;
+ $all_partner_email_addresses = SL::DB::Customer->load_cached($::form->{vc_id})->get_all_email_addresses() if 'customer' eq $::form->{vc};
+ $all_partner_email_addresses = SL::DB::Vendor ->load_cached($::form->{vc_id})->get_all_email_addresses() if 'vendor' eq $::form->{vc};
+
my $html = $::form->parse_html_template("common/_send_email_dialog", {
- email_form => $email_form,
- show_bcc => $::auth->assert('email_bcc', 'may fail'),
- FILES => \%files,
- is_customer => $::form->{vc} eq 'customer',
+ email_form => $email_form,
+ show_bcc => $::auth->assert('email_bcc', 'may fail'),
+ FILES => \%files,
+ is_customer => $::form->{vc} eq 'customer',
is_invoice_mail => ($record_email && $::form->{type} eq 'invoice'),
- ALL_EMPLOYEES => $::form->{all_employees},
+ ALL_EMPLOYEES => \@employees_with_email,
+ ALL_PARTNER_EMAIL_ADDRESSES => $all_partner_email_addresses,
});
print $::form->ajax_response_header, $html;
: 'is.pl';
my $email_form = delete $::form->{email_form};
+
+ if ($email_form->{additional_to}) {
+ $email_form->{to} = join ', ', grep { $_ } $email_form->{to}, @{$email_form->{additional_to}};
+ delete $email_form->{additional_to};
+ }
+
my %field_names = (to => 'email');
$::form->{ $field_names{$_} // $_ } = $email_form->{$_} for keys %{ $email_form };
$::form->{media} = 'email';
- if (($::form->{attachment_policy} // '') =~ m{^(?:old_file|no_file)$}) {
+ $::form->{attachment_policy} //= '';
+
+ # Is an old file version available?
+ my $attfile;
+ if ($::form->{attachment_policy} eq 'old_file') {
+ $attfile = SL::File->get_all(object_id => $id,
+ object_type => $type,
+ file_type => 'document',
+ print_variant => $::form->{formname},);
+ }
+
+ if ($::form->{attachment_policy} eq 'no_file' || ($::form->{attachment_policy} eq 'old_file' && $attfile)) {
$::form->send_email(\%::myconfig, 'pdf');
} else {
$::form->error($e->message);
}
}
+
+sub download_factur_x_xml {
+ my ($form) = @_;
+
+ my $record = _make_record();
+
+ die if !$record
+ || !$record->can('customer')
+ || !$record->customer
+ || !$record->can('create_pdf_a_print_options')
+ || !$record->can('create_zugferd_data')
+ || !$record->customer->create_zugferd_invoices_for_this_customer;
+
+ my $xml_content = eval { $record->create_zugferd_data };
+
+ if (my $e = SL::X::ZUGFeRDValidation->caught) {
+ $::form->error($e->message);
+ }
+
+ my $attachment_filename = $::form->generate_attachment_filename;
+ $attachment_filename =~ s{\.[^.]+$}{.xml};
+ my %headers = (
+ '-type' => 'application/xml',
+ '-connection' => 'close',
+ '-attachment' => $attachment_filename,
+ '-content-length' => length($xml_content),
+ );
+
+ print $::request->cgi->header(%headers);
+
+ $::locale->with_raw_io(\*STDOUT, sub { print $xml_content });
+}