X-Git-Url: http://wagnertech.de/git?p=kivitendo-erp.git;a=blobdiff_plain;f=SL%2FDB%2FOrder.pm;fp=SL%2FDB%2FOrder.pm;h=fdaa1e8bf2f69ce65546e01ee6c71c5fcbd8a0b5;hp=fe0b32153870d19f231d87741cc73dcc87e63a98;hb=b293ff8ad52fc76ba0c44783e3982418114d6b08;hpb=d4925a8b60f04674885e30d9316dc0263f8b9a84 diff --git a/SL/DB/Order.pm b/SL/DB/Order.pm index fe0b32153..fdaa1e8bf 100644 --- a/SL/DB/Order.pm +++ b/SL/DB/Order.pm @@ -47,6 +47,16 @@ __PACKAGE__->meta->add_relationship( class => 'SL::DB::Exchangerate', column_map => { currency_id => 'currency_id', transdate => 'transdate' }, }, + phone_notes => { + type => 'one to many', + class => 'SL::DB::Note', + column_map => { id => 'trans_id' }, + query_args => [ trans_module => 'oe' ], + manager_args => { + with_objects => [ 'employee' ], + sort_by => 'notes.itime', + } + }, ); SL::DB::Helper::Attr::make(__PACKAGE__, daily_exchangerate => 'numeric'); @@ -238,8 +248,23 @@ sub convert_to_invoice { my $invoice; if (!$self->db->with_transaction(sub { require SL::DB::Invoice; - $invoice = SL::DB::Invoice->new_from($self)->post(%params) || die; + $invoice = SL::DB::Invoice->new_from($self, %params)->post || die; $self->link_to_record($invoice); + # TODO extend link_to_record for items, otherwise long-term no d.r.y. + foreach my $item (@{ $invoice->items }) { + foreach (qw(orderitems)) { + if ($item->{"converted_from_${_}_id"}) { + die unless $item->{id}; + RecordLinks->create_links('mode' => 'ids', + 'from_table' => $_, + 'from_ids' => $item->{"converted_from_${_}_id"}, + 'to_table' => 'invoice', + 'to_id' => $item->{id}, + ) || die; + delete $item->{"converted_from_${_}_id"}; + } + } + } $self->update_attributes(closed => 1); 1; })) { @@ -328,21 +353,21 @@ sub new_from { } my %args = ( map({ ( $_ => $source->$_ ) } qw(amount cp_id currency_id cusordnumber customer_id delivery_customer_id delivery_term_id delivery_vendor_id - department_id employee_id exchangerate globalproject_id intnotes marge_percent marge_total language_id netamount notes + department_id exchangerate globalproject_id intnotes marge_percent marge_total language_id netamount notes ordnumber payment_id quonumber reqdate salesman_id shippingpoint shipvia taxincluded tax_point taxzone_id - transaction_description vendor_id + transaction_description vendor_id billing_address_id )), quotation => !!($destination_type =~ m{quotation$}), closed => 0, delivered => 0, transdate => DateTime->today_local, + employee => SL::DB::Manager::Employee->current, ); if ( $is_abbr_any->(qw(sopo poso)) ) { $args{ordnumber} = undef; $args{quonumber} = undef; $args{reqdate} = DateTime->today_local->next_workday(); - $args{employee} = SL::DB::Manager::Employee->current; } if ( $is_abbr_any->(qw(sopo)) ) { $args{customer_id} = undef; @@ -448,7 +473,7 @@ sub new_from_multi { order_probability expected_billing_date)) { $attributes{$attr} = undef if any { ($sources->[0]->$attr//'') ne ($_->$attr//'') } @$sources; } - foreach my $attr (qw(cp_id currency_id employee_id salesman_id department_id + foreach my $attr (qw(cp_id currency_id salesman_id department_id delivery_customer_id delivery_vendor_id shipto_id globalproject_id exchangerate)) { $attributes{$attr} = undef if any { ($sources->[0]->$attr||0) != ($_->$attr||0) } @$sources; @@ -463,6 +488,9 @@ sub new_from_multi { # no periodic invoice config for new order $attributes{periodic_invoices_config} = undef; + # set emplyee to the current one + $attributes{employee} = SL::DB::Manager::Employee->current; + # copy global ordnumber, transdate, cusordnumber into item scope # unless already present there foreach my $attr (qw(ordnumber transdate cusordnumber)) { @@ -598,7 +626,7 @@ L. That invoice is posted, and C<$self> is linked to the new invoice via L. C<$self>'s C attribute is set to C, and C<$self> is saved. -The arguments in C<%params> are passed to L. +The arguments in C<%params> are passed to L. Returns the new invoice instance on success and C on failure. The whole process is run inside a transaction. On failure