X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FOE.pm;h=4599443180abe803a66267c31c07d0bd20eab84c;hb=e5e96630943eecefe1090cf39f600850e8f9e291;hp=9692e48cd86f7494c755a82549ea23cb82ebd627;hpb=3649d1c496c1ab6a9959b51bc9a7ba406d1507c9;p=kivitendo-erp.git diff --git a/SL/OE.pm b/SL/OE.pm index 9692e48cd..459944318 100644 --- a/SL/OE.pm +++ b/SL/OE.pm @@ -42,6 +42,8 @@ use SL::Common; 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; @@ -402,7 +404,7 @@ sub save { 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 | . @@ -533,6 +535,23 @@ sub save { $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, @@ -625,7 +644,7 @@ SQL 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}) { @@ -634,7 +653,10 @@ SQL $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'; @@ -674,6 +696,8 @@ SQL conv_i($form->{id})); do_query($form, $dbh, $query, @values); + $form->new_lastmtime('oe'); + $form->{ordtotal} = $amount; $form->{name} = $form->{ $form->{vc} }; @@ -876,14 +900,9 @@ sub retrieve { $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 @@ -891,7 +910,9 @@ sub retrieve { (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); @@ -919,6 +940,7 @@ sub retrieve { (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, @@ -946,6 +968,8 @@ sub retrieve { 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)