'sales_quotation' => 'sales_quotation_edit',
};
+my $oe_view_access_map = {
+ 'sales_order' => 'sales_order_edit | sales_order_view',
+ 'purchase_order' => 'purchase_order_edit | purchase_order_view',
+ 'request_quotation' => 'request_quotation_edit | request_quotation_view',
+ 'sales_quotation' => 'sales_quotation_edit | sales_quotation_view',
+};
+
sub check_oe_access {
+ my (%params) = @_;
my $form = $main::form;
- my $right = $oe_access_map->{$form->{type}};
+ my $right = ($params{with_view}) ? $oe_view_access_map->{$form->{type}} : $oe_access_map->{$form->{type}};
$right ||= 'DOES_NOT_EXIST';
$main::auth->assert($right);
$form->{show_details} = $::myconfig{show_form_details};
- &order_links;
+ order_links(is_new => 1);
&prepare_order;
&display_form;
sub order_links {
$main::lxdebug->enter_sub();
+ my (%params) = @_;
+
my $form = $main::form;
my %myconfig = %main::myconfig;
my $locale = $main::locale;
$form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded cp_id intnotes shipto_id delivery_term_id currency));
# get customer / vendor
- IR->get_vendor(\%myconfig, \%$form) if $form->{type} =~ /(purchase_order|request_quotation)/;
- IS->get_customer(\%myconfig, \%$form) if $form->{type} =~ /sales_(order|quotation)/;
+ if ($form->{type} =~ /(purchase_order|request_quotation)/) {
+ IR->get_vendor(\%myconfig, \%$form);
+ } else {
+ IS->get_customer(\%myconfig, \%$form);
+ $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 shipto_id delivery_term_id));
$form->restore_vars(qw(currency)) if $form->{id};
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);
+ }
}
if (!$form->{forex}) { # read exchangerate from input field (not hidden)
my %myconfig = %main::myconfig;
my $locale = $main::locale;
- check_oe_access();
+ check_oe_access(with_view => 1);
if ($form->{type} eq 'purchase_order') {
$form->{vc} = 'vendor';
my $locale = $main::locale;
my $cgi = $::request->{cgi};
- check_oe_access();
+ my %params = @_;
+ check_oe_access(with_view => 1);
my $ordnumber = ($form->{type} =~ /_order$/) ? "ordnumber" : "quonumber";
($form->{ $form->{vc} }, $form->{"$form->{vc}_id"}) = split(/--/, $form->{ $form->{vc} });
-
report_generator_set_default_sort('transdate', 1);
-
OE->transactions(\%myconfig, \%$form);
$form->{rowcount} = scalar @{ $form->{OE} };
"country", "shippingpoint",
"taxzone", "insertdate",
"order_probability", "expected_billing_date", "expected_netamount",
- "payment_terms",
+ "payment_terms", "intnotes",
);
# only show checkboxes if gotten here via sales_order form.
reqdatefrom reqdateto projectnumber project_id periodic_invoices_active periodic_invoices_inactive
business_id shippingpoint taxzone_id reqdate_unset_or_old insertdatefrom insertdateto
order_probability_op order_probability_value expected_billing_date_from expected_billing_date_to
- parts_partnumber parts_description all department_id);
+ parts_partnumber parts_description all department_id intnotes);
push @hidden_variables, map { "cvar_$_->{name}" } @ct_searchable_custom_variables;
my @keys_for_url = grep { $form->{$_} } @hidden_variables;
push @keys_for_url, 'taxzone_id' if $form->{taxzone_id} ne ''; # taxzone_id could be 0
- my $href = build_std_url('action=orders', @keys_for_url);
+ my $href = $params{want_binary_pdf} ? '' : build_std_url('action=orders', @keys_for_url);
my %column_defs = (
'ids' => { 'text' => '', },
'expected_billing_date' => { 'text' => $locale->text('Exp. bill. date'), },
'expected_netamount' => { 'text' => $locale->text('Exp. netamount'), },
'payment_terms' => { 'text' => $locale->text('Payment Terms'), },
+ 'intnotes' => { 'text' => $locale->text('Internal Notes'), },
%column_defs_cvars,
);
- foreach my $name (qw(id transdate reqdate quonumber ordnumber cusordnumber name employee salesman shipvia transaction_description shippingpoint taxzone insertdate payment_terms department)) {
+ foreach my $name (qw(id transdate reqdate quonumber ordnumber cusordnumber name employee salesman shipvia transaction_description shippingpoint taxzone insertdate payment_terms department intnotes)) {
my $sortdir = $form->{sort} eq $name ? 1 - $form->{sortdir} : $form->{sortdir};
$column_defs{$name}->{link} = $href . "&sort=$name&sortdir=$sortdir";
}
push @options, $locale->text('Order Number') . " : $form->{ordnumber}" if $form->{ordnumber};
push @options, $locale->text('Customer Order Number') . " : $form->{cusordnumber}" if $form->{cusordnumber};
push @options, $locale->text('Notes') . " : $form->{notes}" if $form->{notes};
+ push @options, $locale->text('Internal Notes') . " : $form->{intnotes}" if $form->{intnotes};
push @options, $locale->text('Transaction description') . " : $form->{transaction_description}" if $form->{transaction_description};
push @options, $locale->text('Quick Search') . " : $form->{all}" if $form->{all};
push @options, $locale->text('Shipping Point') . " : $form->{shippingpoint}" if $form->{shippingpoint};
my $idx = 1;
- my $edit_url = ($::instance_conf->get_feature_experimental_order)
+ my $edit_url = $params{want_binary_pdf}
+ ? ''
+ : ($::instance_conf->get_feature_experimental_order)
? build_std_url('script=controller.pl', 'action=Order/edit', 'type')
: build_std_url('action=edit', 'type', 'vc');
-
foreach my $oe (@{ $form->{OE} }) {
map { $oe->{$_} *= $oe->{exchangerate} } @subtotal_columns;
'align' => 'center',
};
- $row->{$ordnumber}->{link} = $edit_url . "&id=" . E($oe->{id}) . "&callback=${callback}";
+ $row->{$ordnumber}->{link} = $edit_url . "&id=" . E($oe->{id}) . "&callback=${callback}" unless $params{want_binary_pdf};
my $row_set = [ $row ];
$report->add_separator();
$report->add_data(create_subtotal_row(\%totals, \@columns, \%column_alignment, \@subtotal_columns, 'listtotal'));
-
+ if ($params{want_binary_pdf}) {
+ $report->generate_with_headers();
+ return $report->generate_pdf_content(want_binary_pdf => 1);
+ }
setup_oe_orders_action_bar();
$report->generate_with_headers();
IS->get_customer(\%myconfig, $form) if $vc eq 'customer';
IR->get_vendor(\%myconfig, $form) if $vc eq 'vendor';
+ $::form->{billing_address_id} = $::form->{default_billing_address_id};
+
update();
$::dispatcher->end_request;
}
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;
$::dispatcher->end_request;
}
- _oe_remove_delivered_or_billed_rows(id => $form->{id}, type => 'billed');
+ _oe_remove_delivered_or_billed_rows(id => $form->{id}, type => 'billed') if $form->{new_invoice_type} ne 'final_invoice';
$form->{cp_id} *= 1;
if ( $form->{type} eq 'sales_order'
|| $form->{type} eq 'sales_quotation') {
- $form->{title} = $locale->text('Add Sales Invoice');
+ $form->{title} = ($form->{new_invoice_type} eq 'invoice_for_advance_payment') ? $locale->text('Add Invoice for Advance Payment')
+ : ($form->{new_invoice_type} eq 'final_invoice') ? $locale->text('Add Final Invoice')
+ : $locale->text('Add Sales Invoice');
$form->{script} = 'is.pl';
$script = "is";
$buysell = 'buy';
# bo creates the id, reset it
map { delete $form->{$_} } qw(id subject message cc bcc printed emailed queued);
$form->{ $form->{vc} } =~ s/--.*//g;
- $form->{type} = "invoice";
+ $form->{type} = $form->{new_invoice_type} || "invoice";
# locale messages
$main::locale = Locale->new("$myconfig{countrycode}", "$script");
if ( $saved_order && $saved_order->{reqdate} eq $form->{reqdate} && $saved_order->{transdate} eq $form->{transdate} ) {
my $extra_days = $form->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval :
$form->{type} eq 'sales_order' ? $::instance_conf->get_delivery_date_interval : 1;
+
+ if ( ($form->{type} eq 'sales_order' && !$::instance_conf->get_deliverydate_on)
+ || ($form->{type} eq 'sales_quotation' && !$::instance_conf->get_reqdate_on)) {
+ $form->{reqdate} = '';
+ } else {
$form->{reqdate} = DateTime->today_local->next_workday(extra_days => $extra_days)->to_kivitendo;
+ }
$form->{transdate} = DateTime->today_local->to_kivitendo;
}
}
-
# update employee
$form->get_employee();
my $order = SL::DB::Order->new(id => $::form->{id})->load;
$order->flatten_to_form($::form, format_amounts => 1);
+ $::form->{taxincluded_changed_by_user} = 1;
# hack: add partsgroup for first row if it does not exists,
# because _remove_billed_or_delivered_rows and _remove_full_delivered_rows