use List::MoreUtils qw(uniq);
use List::Util qw(max sum);
use POSIX qw(strftime);
-use YAML;
+use SL::Controller::DeliveryOrder;
use SL::DB::DeliveryOrder;
+use SL::DB::DeliveryOrder::TypeData qw(:types validate_type);
use SL::DO;
use SL::IR;
use SL::IS;
use SL::MoreCommon qw(ary_diff restore_form save_form);
use SL::ReportGenerator;
use SL::WH;
+use SL::YAML;
use Sort::Naturally ();
require "bin/mozilla/common.pl";
require "bin/mozilla/io.pl";
# end of main
+sub check_do_access_for_edit {
+ validate_type($::form->{type});
+
+ my $right = SL::DB::DeliveryOrder::TypeData::get3($::form->{type}, "rights", "edit");
+ $main::auth->assert($right);
+}
+
sub check_do_access {
- $main::auth->assert($main::form->{type} . '_edit');
+ validate_type($::form->{type});
+
+ my $right = SL::DB::DeliveryOrder::TypeData::get3($::form->{type}, "rights", "view");
+ $main::auth->assert($right);
}
sub set_headings {
sub add {
$main::lxdebug->enter_sub();
- check_do_access();
+ check_do_access_for_edit();
if (($::form->{type} =~ /purchase/) && !$::instance_conf->get_allow_new_purchase_invoice) {
$::form->show_generic_error($::locale->text("You do not have the permissions to access this function."));
$form->{show_details} = $::myconfig{show_form_details};
$form->{callback} = build_std_url('action=add', 'type', 'vc') unless ($form->{callback});
- order_links();
+ order_links(is_new => 1);
prepare_order();
display_form();
check_do_access();
+ my %params = @_;
my $form = $main::form;
my %myconfig = %main::myconfig;
} else {
IS->get_customer(\%myconfig, \%$form);
$form->{discount} = $form->{customer_discount};
+ $form->{billing_address_id} = $form->{default_billing_address_id} if $params{is_new};
}
$form->restore_vars(qw(payment_id language_id taxzone_id intnotes cp_id delivery_term_id));
my @req_trans_desc = qw(kivi.SalesPurchase.check_transaction_description) x!!$::instance_conf->get_require_transaction_description_ps;
my $is_customer = $::form->{vc} eq 'customer';
+ my $undo_date = DateTime->today->subtract(days => $::instance_conf->get_undo_transfer_interval);
+ my $insertdate = DateTime->from_kivitendo($::form->{insertdate});
+ my $undo_transfer = 0;
+ if (ref $undo_date eq 'DateTime' && ref $insertdate eq 'DateTime') {
+ $undo_transfer = $insertdate > $undo_date;
+ }
+
+ my $may_edit_create = $::auth->assert(SL::DB::DeliveryOrder::TypeData::get3($::form->{type}, "rights", "edit"), 1);
+
for my $bar ($::request->layout->get('actionbar')) {
$bar->add(
action =>
[ t8('Update'),
submit => [ '#form', { action => "update" } ],
+ disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.') : undef,
+ id => 'update_button',
accesskey => 'enter',
],
action => [
t8('Save'),
submit => [ '#form', { action => "save" } ],
- checks => [ @req_trans_desc ],
- disabled => $::form->{delivered} ? t8('This record has already been delivered.') : undef,
+ checks => [ 'kivi.validate_form' ],
+ disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.')
+ : $::form->{delivered} ? t8('This record has already been delivered.')
+ : undef,
],
action => [
t8('Save as new'),
submit => [ '#form', { action => "save_as_new" } ],
- checks => [ @req_trans_desc ],
- disabled => !$::form->{id},
+ checks => [ 'kivi.validate_form' ],
+ disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.')
+ : !$::form->{id},
],
action => [
t8('Mark as closed'),
submit => [ '#form', { action => "mark_closed" } ],
- checks => [ @req_trans_desc ],
+ checks => [ 'kivi.validate_form' ],
confirm => t8('This will remove the delivery order from showing as open even if contents are not delivered. Proceed?'),
- disabled => !$::form->{id} ? t8('This record has not been saved yet.')
+ disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.')
+ : !$::form->{id} ? t8('This record has not been saved yet.')
: $::form->{closed} ? t8('This record has already been closed.')
: undef,
],
t8('Delete'),
submit => [ '#form', { action => "delete" } ],
confirm => t8('Do you really want to delete this object?'),
- disabled => !$::form->{id} ? t8('This record has not been saved yet.')
+ disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.')
+ : !$::form->{id} ? t8('This record has not been saved yet.')
: $::form->{delivered} ? t8('This record has already been delivered.')
: ($::form->{vc} eq 'customer' && !$::instance_conf->get_sales_delivery_order_show_delete) ? t8('Deleting this type of record has been disabled in the configuration.')
: ($::form->{vc} eq 'vendor' && !$::instance_conf->get_purchase_delivery_order_show_delete) ? t8('Deleting this type of record has been disabled in the configuration.')
action => [
t8('Transfer out'),
submit => [ '#form', { action => "transfer_out" } ],
- checks => [ @req_trans_desc, @transfer_qty ],
- disabled => $::form->{delivered} ? t8('This record has already been delivered.') : undef,
+ checks => [ 'kivi.validate_form', @transfer_qty ],
+ disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.')
+ : $::form->{delivered} ? t8('This record has already been delivered.')
+ : undef,
only_if => $is_customer,
],
action => [
t8('Transfer out via default'),
submit => [ '#form', { action => "transfer_out_default" } ],
- checks => [ @req_trans_desc, @transfer_qty ],
- disabled => $::form->{delivered} ? t8('This record has already been delivered.') : undef,
+ checks => [ 'kivi.validate_form' ],
+ disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.')
+ : $::form->{delivered} ? t8('This record has already been delivered.')
+ : undef,
only_if => $is_customer && $::instance_conf->get_transfer_default,
],
action => [
t8('Transfer in'),
- submit => [ '#form', { action => "transfer_in"> 1 } ],
- checks => [ @req_trans_desc, @transfer_qty ],
- disabled => $::form->{delivered} ? t8('This record has already been delivered.') : undef,
+ submit => [ '#form', { action => "transfer_in" } ],
+ checks => [ 'kivi.validate_form', @transfer_qty ],
+ disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.')
+ : $::form->{delivered} ? t8('This record has already been delivered.')
+ : undef,
only_if => !$is_customer,
],
action => [
t8('Transfer in via default'),
submit => [ '#form', { action => "transfer_in_default" } ],
- checks => [ @req_trans_desc, @transfer_qty ],
- disabled => $::form->{delivered} ? t8('This record has already been delivered.') : undef,
+ checks => [ 'kivi.validate_form' ],
+ disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.')
+ : $::form->{delivered} ? t8('This record has already been delivered.')
+ : undef,
only_if => !$is_customer && $::instance_conf->get_transfer_default,
],
+ action => [
+ t8('Undo Transfer'),
+ submit => [ '#form', { action => "delete_transfers" } ],
+ checks => [ 'kivi.validate_form' ],
+ only_if => $::form->{delivered},
+ disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.')
+ : !$undo_transfer ? t8('Transfer date exceeds the maximum allowed interval.')
+ : undef,
+ ],
], # end of combobox "Transfer out"
t8('Invoice'),
submit => [ '#form', { action => "invoice" } ],
disabled => !$::form->{id} ? t8('This record has not been saved yet.') : undef,
+ confirm => $::form->{delivered} ? undef
+ : ($::form->{vc} eq 'customer' && $::instance_conf->get_sales_delivery_order_check_stocked) ? t8('This record has not been stocked out. Proceed?')
+ : ($::form->{vc} eq 'vendor' && $::instance_conf->get_purchase_delivery_order_check_stocked) ? t8('This record has not been stocked in. Proceed?')
+ : undef,
],
combobox => [
action => [ t8('Export') ],
action => [
t8('Print'),
- call => [ 'kivi.SalesPurchase.show_print_dialog' ],
- checks => [ @req_trans_desc ],
+ call => [ 'kivi.SalesPurchase.show_print_dialog' ],
+ checks => [ 'kivi.validate_form' ],
+ disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.') : undef,
],
action => [
t8('E Mail'),
call => [ 'kivi.SalesPurchase.show_email_dialog' ],
- checks => [ @req_trans_desc ],
+ checks => [ 'kivi.validate_form' ],
+ disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.')
+ : !$::form->{id} ? t8('This record has not been saved yet.')
+ : undef,
],
], # end of combobox "Export"
], # end if combobox "more"
);
}
+ $::request->layout->add_javascripts('kivi.Validator.js');
}
sub setup_do_search_action_bar {
t8('Search'),
submit => [ '#form' ],
accesskey => 'enter',
+ checks => [ 'kivi.validate_form' ],
],
);
}
+ $::request->layout->add_javascripts('kivi.Validator.js');
}
sub setup_do_orders_action_bar {
$bar->add(
action => [
t8('New invoice'),
- submit => [ '#orders_form' ],
- checks => [ 'kivi.DeliveryOrder.multi_invoice_check_delivery_orders_selected' ],
+ submit => [ '#form', { action => 'invoice_multi' } ],
+ checks => [ [ 'kivi.check_if_entries_selected', '#form tbody input[type=checkbox]' ] ],
accesskey => 'enter',
],
+ action => [
+ t8('Print'),
+ call => [ 'kivi.SalesPurchase.show_print_dialog', 'js:kivi.MassDeliveryOrderPrint.submitMultiOrders' ],
+ checks => [ [ 'kivi.check_if_entries_selected', '#form tbody input[type=checkbox]' ] ],
+ ],
);
}
}
my $class = "SL::DB::" . ($form->{vc} eq 'customer' ? 'Customer' : 'Vendor');
$form->{VC_OBJ} = $class->load_cached($form->{ $form->{vc} . '_id' });
- $form->{employee_id} = $form->{old_employee_id} if $form->{old_employee_id};
- $form->{salesman_id} = $form->{old_salesman_id} if $form->{old_salesman_id};
+ $form->{CONTACT_OBJ} = $form->{cp_id} ? SL::DB::Contact->load_cached($form->{cp_id}) : undef;
+ my $current_employee = SL::DB::Manager::Employee->current;
+ $form->{employee_id} = $form->{old_employee_id} if $form->{old_employee_id};
+ $form->{salesman_id} = $form->{old_salesman_id} if $form->{old_salesman_id};
+ $form->{employee_id} ||= $current_employee->id;
+ $form->{salesman_id} ||= $current_employee->id;
my $vc = $form->{vc} eq "customer" ? "customers" : "vendors";
$form->get_lists("price_factors" => "ALL_PRICE_FACTORS",
"business_types" => "ALL_BUSINESS_TYPES",
);
- $form->{ALL_DEPARTMENTS} = SL::DB::Manager::Department->get_all;
+ $form->{ALL_DEPARTMENTS} = SL::DB::Manager::Department->get_all_sorted;
+ $form->{ALL_LANGUAGES} = SL::DB::Manager::Language->get_all_sorted;
# Projects
my @old_project_ids = uniq grep { $_ } map { $_ * 1 } ($form->{"globalproject_id"}, map { $form->{"project_id_$_"} } 1..$form->{"rowcount"});
if ($form->{resubmit} && ($form->{format} eq "html")) {
$dispatch_to_popup = "window.open('about:blank','Beleg'); document.do.target = 'Beleg';";
$dispatch_to_popup .= "document.do.submit();";
- } elsif ($form->{resubmit}) {
+ } elsif ($form->{resubmit} && $form->{action_print}) {
# emulate click for resubmitting actions
- $dispatch_to_popup = "document.do.${_}.click(); " for grep { /^action_/ } keys %$form;
+ $dispatch_to_popup = "kivi.SalesPurchase.show_print_dialog(); kivi.SalesPurchase.print_record();";
}
$::request->{layout}->add_javascripts_inline("\$(function(){$dispatch_to_popup});");
- $form->{follow_up_trans_info} = $form->{donumber} .'('. $form->{VC_OBJ}->name .')';
+ $form->{follow_up_trans_info} = $form->{donumber} .'('. $form->{VC_OBJ}->name .')' if $form->{VC_OBJ};
- $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.File kivi.MassDeliveryOrderPrint kivi.SalesPurchase kivi.Part ckeditor/ckeditor ckeditor/adapters/jquery kivi.io autocomplete_customer));
-
- my @custom_hidden;
- push @custom_hidden, map { "shiptocvar_" . $_->name } @{ SL::DB::Manager::CustomVariableConfig->get_all(where => [ module => 'ShipTo' ]) };
-
- $::form->{HIDDENS} = [ map { +{ name => $_, value => $::form->{$_} } } (@custom_hidden) ];
+ $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.File kivi.MassDeliveryOrderPrint kivi.SalesPurchase kivi.Part kivi.CustomerVendor kivi.Validator ckeditor/ckeditor ckeditor/adapters/jquery kivi.io));
setup_do_action_bar();
$form->{PRINT_OPTIONS} = setup_sales_purchase_print_options();
$form->{ALL_DELIVERY_TERMS} = SL::DB::Manager::DeliveryTerm->get_all_sorted();
+ my $shipto_cvars = SL::DB::Shipto->new->cvars_by_config;
+ foreach my $var (@{ $shipto_cvars }) {
+ my $name = "shiptocvar_" . $var->config->name;
+ $var->value($form->{$name}) if exists $form->{$name};
+ }
+
print $form->parse_html_template('do/form_footer',
- {transfer_default => ($::instance_conf->get_transfer_default)});
+ {transfer_default => ($::instance_conf->get_transfer_default),
+ shipto_cvars => $shipto_cvars});
$main::lxdebug->leave_sub();
}
if (($form->{"previous_${vc}_id"} || $form->{"${vc}_id"}) != $form->{"${vc}_id"}) {
$::form->{salesman_id} = SL::DB::Manager::Employee->current->id if exists $::form->{salesman_id};
- IS->get_customer(\%myconfig, $form) if $vc eq 'customer';
- IR->get_vendor(\%myconfig, $form) if $vc eq 'vendor';
+ if ($vc eq 'customer') {
+ IS->get_customer(\%myconfig, $form);
+ $::form->{billing_address_id} = $::form->{default_billing_address_id};
+ } else {
+ IR->get_vendor(\%myconfig, $form);
+ }
}
$form->{discount} = $form->{"$form->{vc}_discount"} if defined $form->{"$form->{vc}_discount"};
"all" => 1 },
"business_types" => "ALL_BUSINESS_TYPES");
$form->{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all_sorted(query => [ deleted => 0 ]);
- $form->{ALL_DEPARTMENTS} = SL::DB::Manager::Department->get_all;
+ $form->{ALL_DEPARTMENTS} = SL::DB::Manager::Department->get_all_sorted;
$form->{title} = $locale->text('Delivery Orders');
setup_do_search_action_bar();
my $locale = $main::locale;
my $cgi = $::request->{cgi};
- $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.MassDeliveryOrderPrint));
+ $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.MassDeliveryOrderPrint kivi.SalesPurchase));
($form->{ $form->{vc} }, $form->{"$form->{vc}_id"}) = split(/--/, $form->{ $form->{vc} });
report_generator_set_default_sort('transdate', 1);
push @hidden_variables, $form->{vc}, qw(l_closed l_notdelivered open closed delivered notdelivered donumber ordnumber serialnumber cusordnumber
transaction_description transdatefrom transdateto reqdatefrom reqdateto
type vc employee_id salesman_id project_id parts_partnumber parts_description
- insertdatefrom insertdateto business_id);
+ insertdatefrom insertdateto business_id all department_id);
my $href = build_std_url('action=orders', grep { $form->{$_} } @hidden_variables);
my %column_defs = (
- 'ids' => { 'text' => '<input type="checkbox" id="multi_all" value="1">', 'align' => 'center' },
+ 'ids' => { raw_header_data => SL::Presenter::Tag::checkbox_tag("", id => "multi_all", checkall => "[data-checkall=1]"), align => 'center' },
'transdate' => { 'text' => $locale->text('Delivery Order Date'), },
'reqdate' => { 'text' => $locale->text('Reqdate'), },
'id' => { 'text' => $locale->text('ID'), },
if ($form->{notdelivered}) {
push @options, $locale->text('Not delivered');
}
+ push @options, $locale->text('Quick Search') . " : $form->{all}" if $form->{all};
my $pr = SL::DB::Manager::Printer->find_by(
printer_description => $::locale->text("sales_delivery_order_printer"));
$form->{printer_id} = $pr->id;
}
+ my $print_options = SL::Helper::PrintOptions->get_print_options(
+ options => {
+ hide_language_id => 1,
+ show_bothsided => 1,
+ show_headers => 1,
+ },
+ );
+
$report->set_options('top_info_text' => join("\n", @options),
'raw_top_info_text' => $form->parse_html_template('do/orders_top'),
- 'raw_bottom_info_text' => $form->parse_html_template('do/orders_bottom', { print_options => print_options(inline => 1,hide_language_id => 1) }),
+ 'raw_bottom_info_text' => $form->parse_html_template('do/orders_bottom', { print_options => $print_options }),
'output_format' => 'HTML',
'title' => $form->{title},
'attachment_basename' => $attachment_basename . strftime('_%Y%m%d', localtime time),
my $callback = $form->escape($href);
my $edit_url = build_std_url('action=edit', 'type', 'vc');
- my $edit_order_url = build_std_url('script=oe.pl', 'type=' . ($form->{type} eq 'sales_delivery_order' ? 'sales_order' : 'purchase_order'), 'action=edit');
+ my $edit_order_url = ($::instance_conf->get_feature_experimental_order)
+ ? build_std_url('script=controller.pl', 'action=Order/edit', 'type=' . ($form->{type} eq 'sales_delivery_order' ? 'sales_order' : 'purchase_order'))
+ : build_std_url('script=oe.pl', 'action=edit', 'type=' . ($form->{type} eq 'sales_delivery_order' ? 'sales_order' : 'purchase_order'));
my $idx = 1;
my $ord_id = $dord->{id};
$row->{ids} = {
'raw_data' => $cgi->hidden('-name' => "trans_id_${idx}", '-value' => $ord_id)
- . $cgi->checkbox('-name' => "multi_id_${idx}",' id' => "multi_id_id_".$ord_id, '-value' => 1, '-label' => ''),
+ . $cgi->checkbox('-name' => "multi_id_${idx}",' id' => "multi_id_id_".$ord_id, '-value' => 1, 'data-checkall' => 1, '-label' => ''),
'valign' => 'center',
'align' => 'center',
};
- $row->{donumber}->{link} = $edit_url . "&id=" . E($dord->{id}) . "&callback=${callback}";
+ $row->{donumber}->{link} = SL::DB::DeliveryOrder::TypeData::get3($dord->{order_type}, "show_menu", "new_controller")
+ ? SL::Controller::DeliveryOrder->url_for(action => "edit", id => $dord->{id}, type => $dord->{order_type})
+ : $edit_url . "&id=" . E($dord->{id}) . "&callback=${callback}";
$row->{ordnumber}->{link} = $edit_order_url . "&id=" . E($dord->{oe_id}) . "&callback=${callback}" if $dord->{oe_id};
$report->add_data($row);
$idx++;
}
- $::request->layout->add_javascripts('kivi.DeliveryOrder.js');
-
setup_do_orders_action_bar();
- $report->generate_with_headers(action_bar => 1);
+ $report->generate_with_headers();
$main::lxdebug->leave_sub();
}
my (%params) = @_;
- check_do_access();
+ check_do_access_for_edit();
my $form = $main::form;
my %myconfig = %main::myconfig;
remove_emptied_rows();
validate_items();
+ # check for serial number if part needs one
+ for my $i (1 .. $form->{rowcount} - 1) {
+ next unless $form->{"has_sernumber_$i"};
+ $form->isblank("serialnumber_$i",
+ $locale->text('Serial Number missing in Row') . " $i");
+ }
# if the name changed get new values
my $vc = $form->{vc};
if (($form->{"previous_${vc}_id"} || $form->{"${vc}_id"}) != $form->{"${vc}_id"}) {
$::form->{salesman_id} = SL::DB::Manager::Employee->current->id if exists $::form->{salesman_id};
- IS->get_customer(\%myconfig, $form) if $vc eq 'customer';
- IR->get_vendor(\%myconfig, $form) if $vc eq 'vendor';
+ if ($vc eq 'customer') {
+ IS->get_customer(\%myconfig, $form);
+ $::form->{billing_address_id} = $::form->{default_billing_address_id};
+ } else {
+ IR->get_vendor(\%myconfig, $form);
+ }
update();
$::dispatcher->end_request;
}
$form->{id} = 0 if $form->{saveasnew};
-
+ # we rely on converted_from_orderitems, if the workflow is used
+ # be sure that at least one position is linked to the original orderitem
+ if ($form->{convert_from_oe_ids}) {
+ my $has_linked_pos;
+ for my $i (1 .. $form->{rowcount}) {
+ if ($form->{"converted_from_orderitems_id_$i"}) {
+ $has_linked_pos = 1;
+ last;
+ }
+ }
+ if (!$has_linked_pos) {
+ $form->error($locale->text('Need at least one original position for the workflow Order to Delivery Order!'));
+ }
+ }
DO->save();
# saving the history
if(!exists $form->{addition}) {
sub delete {
$main::lxdebug->enter_sub();
- check_do_access();
+ check_do_access_for_edit();
my $form = $main::form;
my %myconfig = %main::myconfig;
my $locale = $main::locale;
-
- if (DO->delete()) {
+ my $ret;
+ if ($ret = DO->delete()) {
# saving the history
if(!exists $form->{addition}) {
$form->{snumbers} = qq|donumber_| . $form->{donumber};
$::dispatcher->end_request;
}
- $form->error($locale->text('Cannot delete delivery order!'));
+ $form->error($locale->text('Cannot delete delivery order!') . $ret);
+
+ $main::lxdebug->leave_sub();
+}
+sub delete_transfers {
+ $main::lxdebug->enter_sub();
+
+ check_do_access_for_edit();
+
+ my $form = $main::form;
+ my %myconfig = %main::myconfig;
+ my $locale = $main::locale;
+ my $ret;
+
+ die "Invalid form type" unless $form->{type} =~ m/^(sales|purchase)_delivery_order$/;
+
+ if ($ret = DO->delete_transfers()) {
+ # saving the history
+ if(!exists $form->{addition}) {
+ $form->{snumbers} = qq|donumber_| . $form->{donumber};
+ $form->{addition} = "UNDO TRANSFER";
+ $form->save_history;
+ }
+ # /saving the history
+
+ flash_later('info', $locale->text("Transfer undone."));
+
+ $form->{callback} = 'do.pl?action=edit&type=' . $form->{type} . '&id=' . $form->escape($form->{id});
+ $form->redirect;
+ }
+
+ $form->error($locale->text('Cannot undo delivery order transfer!') . $ret);
$main::lxdebug->leave_sub();
}
$main::auth->assert($form->{type} eq 'purchase_delivery_order' ? 'vendor_invoice_edit' : 'invoice_edit');
+ $form->get_employee();
+
$form->{convert_from_do_ids} = $form->{id};
- $form->{deliverydate} = $form->{transdate};
+ # if we have a reqdate (Liefertermin), this is definetely the preferred
+ # deliverydate for invoices
+ $form->{deliverydate} = $form->{reqdate} || $form->{transdate};
$form->{transdate} = $form->{invdate} = $form->current_date(\%myconfig);
$form->{duedate} = $form->current_date(\%myconfig, $form->{invdate}, $form->{terms} * 1);
$form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
if ($form->{ordnumber}) {
require SL::DB::Order;
- if (my $order = SL::DB::Manager::Order->find_by(ordnumber => $form->{ordnumber})) {
+ my $vc_id = $form->{type} =~ /^sales/ ? 'customer_id' : 'vendor_id';
+ if (my $order = SL::DB::Manager::Order->find_by(ordnumber => $form->{ordnumber}, $vc_id => $form->{"$vc_id"})) {
$order->load;
$form->{orddate} = $order->transdate_as_date;
- $form->{$_} = $order->$_ for qw(payment_id salesman_id taxzone_id quonumber);
+ $form->{$_} = $order->$_ for qw(payment_id salesman_id taxzone_id quonumber taxincluded);
+ $form->{taxincluded_changed_by_user} = 1;
}
}
sub save_as_new {
$main::lxdebug->enter_sub();
- check_do_access();
+ check_do_access_for_edit();
my $form = $main::form;
my $sum = AM->sum_with_unit(map { $_->{qty}, $_->{unit} } @{ $sinfo });
my $matches = $do_qty == $sum;
- my $content = $form->format_amount_units('amount' => $sum * 1,
- 'part_unit' => $form->{"partunit_$i"},
- 'amount_unit' => $all_units->{$form->{"partunit_$i"}}->{base_unit},
- 'conv_units' => 'convertible_not_smaller',
- 'max_places' => 2);
+ my $amount_unit = $all_units->{$form->{"partunit_$i"}}->{base_unit};
+ my $content = $form->format_amount(\%::myconfig, AM->convert_unit($amount_unit, $form->{"unit_$i"}) * $sum * 1) . ' ' . $form->{"unit_$i"};
+
$content = qq|<span id="stock_in_out_qty_display_${i}">${content}</span><input type=hidden id='stock_in_out_qty_matches_$i' value='$matches'> <input type="button" onclick="open_stock_in_out_window('${in_out}', $i);" value="?">|;
$main::lxdebug->leave_sub();
my $form = $::form;
my $all_units = AM->retrieve_all_units();
my $sum = AM->sum_with_unit(map { $_->{qty}, $_->{unit} } @{ $stock_info });
- $form->{qty_display} = $form->format_amount_units(amount => $sum * 1,
- part_unit => $form->{partunit},
- amount_unit => $all_units->{ $form->{partunit} }->{base_unit},
- conv_units => 'convertible_not_smaller',
- max_places => 2);
+ my $amount_unit = $all_units->{$form->{"partunit"}}->{base_unit};
+ $form->{qty_display} = $form->format_amount(\%::myconfig, AM->convert_unit($amount_unit, $form->{"do_unit"}) * $sum * 1) . ' ' . $form->{"do_unit"};
}
sub set_stock_in {
push @{ $stock_info }, { map { $_ => $form->{"${_}_${i}"} } qw(delivery_order_items_stock_id warehouse_id bin_id chargenumber bestbefore qty unit) };
}
- $form->{stock} = YAML::Dump($stock_info);
+ $form->{stock} = SL::YAML::Dump($stock_info);
_stock_in_out_set_qty_display($stock_info);
if (!$form->{delivered}) {
foreach my $row (@contents) {
- $row->{available_qty} = $form->format_amount_units('amount' => $row->{qty} * 1,
- 'part_unit' => $part_info->{unit},
- 'conv_units' => 'convertible_not_smaller',
- 'max_places' => 2);
+ $row->{available_qty} = $form->format_amount(\%::myconfig, $row->{qty} * 1) . ' ' . $part_info->{unit};
foreach my $sinfo (@{ $stock_info }) {
next if (($row->{bin_id} != $sinfo->{bin_id}) ||
my @errors = DO->check_stock_availability('requests' => $stock_info,
'parts_id' => $form->{parts_id});
- $form->{stock} = YAML::Dump($stock_info);
+ $form->{stock} = SL::YAML::Dump($stock_info);
if (@errors) {
$form->{ERRORS} = [];
SL::DB::DeliveryOrder->new(id => $form->{id})->load->update_attributes(delivered => 1);
+ flash_later('info', $locale->text("Transfer successful"));
$form->{callback} = 'do.pl?action=edit&type=purchase_delivery_order&id=' . $form->escape($form->{id});
$form->redirect;
$binfo->{bin_description},
$request->{chargenumber} ? $locale->text('chargenumber #1', $request->{chargenumber}) : $locale->text('no chargenumber'),
$request->{bestbefore} ? $locale->text('bestbefore #1', $request->{bestbefore}) : $locale->text('no bestbefore'),
- $form->format_amount_units('amount' => $request->{sum_base_qty},
- 'part_unit' => $pinfo->{unit},
- 'conv_units' => 'convertible_not_smaller'));
+ $form->format_amount(\%::myconfig, $request->{sum_base_qty}) . ' ' . $pinfo->{unit});
} else {
push @{ $form->{ERRORS} }, $locale->text("There is not enough available of '#1' at warehouse '#2', bin '#3', #4, for the transfer of #5.",
$pinfo->{description},
$binfo->{warehouse_description},
$binfo->{bin_description},
$request->{chargenumber} ? $locale->text('chargenumber #1', $request->{chargenumber}) : $locale->text('no chargenumber'),
- $form->format_amount_units('amount' => $request->{sum_base_qty},
- 'part_unit' => $pinfo->{unit},
- 'conv_units' => 'convertible_not_smaller'));
+ $form->format_amount(\%::myconfig, $request->{sum_base_qty}) . ' ' . $pinfo->{unit});
}
}
}
SL::DB::DeliveryOrder->new(id => $form->{id})->load->update_attributes(delivered => 1);
+ flash_later('info', $locale->text("Transfer successful"));
$form->{callback} = 'do.pl?action=edit&type=sales_delivery_order&id=' . $form->escape($form->{id});
$form->redirect;
sub display_form {
$::lxdebug->enter_sub;
- $::auth->assert('purchase_delivery_order_edit | sales_delivery_order_edit');
+ check_do_access();
relink_accounts();
retrieve_partunits();
# ... and do not create a hash entry in %qty_parts below (will skip check for bins for the transfer == out case)
# ... and push only a empty (undef) element to @all_requests (will skip check for bin_id and warehouse_id and will not alter the row)
- $qty = 0 if (!$::instance_conf->get_transfer_default_services && !defined($part_info_map{$form->{"id_$i"}}->{inventory_accno_id}) && !$part_info_map{$form->{"id_$i"}}->{assembly});
+ $qty = 0 if (!$::instance_conf->get_transfer_default_services && $part_info_map{$form->{"id_$i"}}->{part_type} eq 'service');
$qty_parts{$form->{"id_$i"}} += $qty;
if ($qty == 0) {
delete $qty_parts{$form->{"id_$i"}} unless $qty_parts{$form->{"id_$i"}};
foreach (@all_requests){
$i++;
next unless scalar(%{ $_ });
- $form->{"stock_${prefix}_$i"} = YAML::Dump([$_]);
+ $form->{"stock_${prefix}_$i"} = SL::YAML::Dump([$_]);
}
save(no_redirect => 1); # Wir können auslagern, deshalb beleg speichern