use SL::CVar;
use SL::DB::Order;
use SL::DB::PeriodicInvoicesConfig;
+use SL::DB::Project;
+use SL::DB::ProjectType;
use SL::DB::Status;
use SL::DB::Tax;
use SL::DBUtils;
my $number_field = $form->{type} =~ m{order} ? 'ordnumber' : 'quonumber';
my $trans_number = SL::TransNumber->new(type => $form->{type}, dbh => $dbh, number => $form->{$number_field}, id => $form->{id});
- $form->{$number_field} ||= $trans_number->create_unique;
+ $form->{$number_field} ||= $trans_number->create_unique; # set $form->{ordnumber} or $form->{quonumber}
if ($form->{id}) {
$query = qq|DELETE FROM shipto | .
$pricegroup_id *= 1;
$pricegroup_id = undef if !$pricegroup_id;
+ # force new project, if not set yet
+ if ($::instance_conf->get_order_always_project && !$form->{"globalproject_id"} && ($form->{type} eq 'sales_order')) {
+ require SL::DB::Customer;
+ my $customer = SL::DB::Manager::Customer->find_by(id => $form->{customer_id});
+ die "Can't find customer" unless $customer;
+ my $new_project = SL::DB::Project->new(
+ projectnumber => $form->{ordnumber},
+ description => $customer->name,
+ customer_id => $customer->id,
+ active => 1,
+ project_type_id => $::instance_conf->get_project_type_id,
+ project_status_id => $::instance_conf->get_project_status_id,
+ );
+ $new_project->save;
+ $form->{"globalproject_id"} = $new_project->id;
+ };
+
CVar->get_non_editable_ic_cvars(form => $form,
dbh => $dbh,
row => $i,
my $tax = 0;
map { $tax += $form->round_amount($taxaccounts{$_}, 2) } keys %taxaccounts;
- $amount = $form->round_amount($netamount + $tax, 2);
+ $amount = $form->round_amount($netamount + $tax, 2, 1);
$netamount = $form->round_amount($netamount, 2);
if ($form->{currency} eq $form->{defaultcurrency}) {
$exchangerate = $form->check_exchangerate($myconfig, $form->{currency}, $form->{transdate}, ($form->{vc} eq 'customer') ? 'buy' : 'sell');
}
- $form->{exchangerate} = $exchangerate || $form->parse_amount($myconfig, $form->{exchangerate});
+ # from inputfield (exchangerate) or hidden (forex)
+ my $exchangerate_from_form = $form->{forex} || $form->parse_amount($myconfig, $form->{exchangerate});
+
+ $form->{exchangerate} = $exchangerate || $exchangerate_from_form;
my $quotation = $form->{type} =~ /_order$/ ? 'f' : 't';
conv_i($form->{id}));
do_query($form, $dbh, $query, @values);
+ $form->new_lastmtime('oe');
+
$form->{ordtotal} = $amount;
$form->{name} = $form->{ $form->{vc} };
$form->{useasnew} = 1 if $is_collective_order == 1;
if (!$form->{id}) {
- my $extra_days = $form->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval : 1;
- my $next_workday = DateTime->today_local->add(days => $extra_days);
- my $day_of_week = $next_workday->day_of_week;
-
- $next_workday->add(days => (8 - $day_of_week)) if $day_of_week >= 6;
-
+ my $extra_days = $form->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval : 1;
+ $form->{reqdate} = DateTime->today_local->next_workday(extra_days => $extra_days)->to_kivitendo;
$form->{transdate} = DateTime->today_local->to_kivitendo;
- $form->{reqdate} = $next_workday->to_kivitendo;
}
# get default accounts
(SELECT c.accno FROM chart c WHERE d.income_accno_id = c.id) AS income_accno,
(SELECT c.accno FROM chart c WHERE d.expense_accno_id = c.id) AS expense_accno,
(SELECT c.accno FROM chart c WHERE d.fxgain_accno_id = c.id) AS fxgain_accno,
- (SELECT c.accno FROM chart c WHERE d.fxloss_accno_id = c.id) AS fxloss_accno
+ (SELECT c.accno FROM chart c WHERE d.fxloss_accno_id = c.id) AS fxloss_accno,
+ (SELECT c.accno FROM chart c WHERE d.rndgain_accno_id = c.id) AS rndgain_accno,
+ (SELECT c.accno FROM chart c WHERE d.rndloss_accno_id = c.id) AS rndloss_accno
$query_add
FROM defaults d|;
my $ref = selectfirst_hashref_query($form, $dbh, $query);
(SELECT cu.name FROM currencies cu WHERE cu.id=o.currency_id) AS currency, e.name AS employee, o.employee_id, o.salesman_id,
o.${vc}_id, cv.name AS ${vc}, o.amount AS invtotal,
o.closed, o.reqdate, o.quonumber, o.department_id, o.cusordnumber,
+ o.mtime, o.itime,
d.description AS department, o.payment_id, o.language_id, o.taxzone_id,
o.delivery_customer_id, o.delivery_vendor_id, o.proforma, o.shipto_id,
o.globalproject_id, o.delivered, o.transaction_description, o.delivery_term_id,
map { $form->{$_} = '' if ($ref->{$_} ne $form->{$_}) } keys %$ref;
}
}
+ $form->{mtime} ||= $form->{itime};
+ $form->{lastmtime} = $form->{mtime};
# if not given, fill transdate with current_date
$form->{transdate} = $form->current_date($myconfig)