use Carp;
use POSIX qw(strftime);
+use SL::DB::Order;
use SL::DO;
use SL::FU;
use SL::OE;
$main::auth->assert($right);
}
+sub check_oe_conversion_to_sales_invoice_allowed {
+ return 1 if $::form->{type} !~ m/^sales/;
+ return 1 if ($::form->{type} =~ m/quotation/) && $::instance_conf->get_allow_sales_invoice_from_sales_quotation;
+ return 1 if ($::form->{type} =~ m/order/) && $::instance_conf->get_allow_sales_invoice_from_sales_order;
+
+ $::form->show_generic_error($::locale->text("You do not have the permissions to access this function."));
+
+ return 0;
+}
+
sub set_headings {
$main::lxdebug->enter_sub();
# Container for template variables. Unfortunately this has to be
# visible in form_footer too, so package local level and not my here.
%TMPL_VAR = ();
+ if ($form->{id}) {
+ my $obj = SL::DB::Order->new(id => $form->{id})->load;
+ $TMPL_VAR{warn_save_active_periodic_invoice} =
+ $obj->is_type('sales_order')
+ && $obj->periodic_invoices_config
+ && $obj->periodic_invoices_config->active
+ && ( !$obj->periodic_invoices_config->end_date
+ || ($obj->periodic_invoices_config->end_date > DateTime->today_local))
+ && $obj->periodic_invoices_config->get_previous_billed_period_start_date;
+
+ $TMPL_VAR{oe_obj} = $obj;
+ }
$form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
}
}
- $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.SalesPurchase show_form_details show_history show_vc_details));
+ $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.SalesPurchase show_form_details show_history show_vc_details ckeditor/ckeditor ckeditor/adapters/jquery));
$form->header;
if ($form->{CFDD_shipto} && $form->{CFDD_shipto_id} ) {
"cusordnumber", "customernumber",
"name", "netamount",
"tax", "amount",
+ "remaining_netamount", "remaining_amount",
"curr", "employee",
"salesman",
"shipvia", "globalprojectnumber",
'netamount' => { 'text' => $locale->text('Amount'), },
'tax' => { 'text' => $locale->text('Tax'), },
'amount' => { 'text' => $locale->text('Total'), },
+ 'remaining_amount' => { 'text' => $locale->text('Remaining Amount'), },
+ 'remaining_netamount' => { 'text' => $locale->text('Remaining Net Amount'), },
'curr' => { 'text' => $locale->text('Curr'), },
'employee' => { 'text' => $locale->text('Employee'), },
'salesman' => { 'text' => $locale->text('Salesman'), },
$column_defs{$name}->{link} = $href . "&sort=$name&sortdir=$sortdir";
}
- my %column_alignment = map { $_ => 'right' } qw(netamount tax amount curr);
+ my %column_alignment = map { $_ => 'right' } qw(netamount tax amount curr remaining_amount remaining_netamount);
$form->{"l_type"} = "Y";
map { $column_defs{$_}->{visible} = $form->{"l_${_}"} ? 1 : 0 } @columns;
# escape callback for href
my $callback = $form->escape($href);
- my @subtotal_columns = qw(netamount amount marge_total marge_percent);
+ my @subtotal_columns = qw(netamount amount marge_total marge_percent remaining_amount remaining_netamount);
my %totals = map { $_ => 0 } @subtotal_columns;
my %subtotals = map { $_ => 0 } @subtotal_columns;
$subtotals{marge_percent} = $subtotals{netamount} ? ($subtotals{marge_total} * 100 / $subtotals{netamount}) : 0;
$totals{marge_percent} = $totals{netamount} ? ($totals{marge_total} * 100 / $totals{netamount} ) : 0;
- map { $oe->{$_} = $form->format_amount(\%myconfig, $oe->{$_}, 2) } qw(netamount tax amount marge_total marge_percent);
+ map { $oe->{$_} = $form->format_amount(\%myconfig, $oe->{$_}, 2) } qw(netamount tax amount marge_total marge_percent remaining_amount remaining_netamount);
my $row = { };
my $locale = $main::locale;
check_oe_access();
+ check_oe_conversion_to_sales_invoice_allowed();
$main::auth->assert($form->{type} eq 'purchase_order' || $form->{type} eq 'request_quotation' ? 'vendor_invoice_edit' : 'invoice_edit');
$form->{old_salesman_id} = $form->{salesman_id};
if ('HASH' ne ref $config) {
$config = { periodicity => 'y',
- start_date_as_date => $::form->{transdate},
+ start_date_as_date => $::form->{transdate} || $::form->current_date,
extend_automatically_by => 12,
active => 1,
};
}
- $config->{periodicity} = 'm' if none { $_ eq $config->{periodicity} } qw(m q y);
+ $config->{periodicity} = 'm' if none { $_ eq $config->{periodicity} } qw(m q b y);
$::form->get_lists(printers => "ALL_PRINTERS",
charts => { key => 'ALL_CHARTS',
my $config = { active => $::form->{active} ? 1 : 0,
terminated => $::form->{terminated} ? 1 : 0,
- periodicity => (any { $_ eq $::form->{periodicity} } qw(m q y)) ? $::form->{periodicity} : 'm',
+ periodicity => (any { $_ eq $::form->{periodicity} } qw(m q b y)) ? $::form->{periodicity} : 'm',
start_date_as_date => $::form->{start_date_as_date},
end_date_as_date => $::form->{end_date_as_date},
+ first_billing_date_as_date => $::form->{first_billing_date_as_date},
print => $::form->{print} ? 1 : 0,
printer_id => $::form->{print} ? $::form->{printer_id} * 1 : undef,
copies => $::form->{copies} * 1 ? $::form->{copies} : 1,