X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FHelper%2FFlattenToForm.pm;h=7a3922c994efb4a9e02a46523a5d7991e8714d9b;hb=5e9cefa2067da6326e3cb9ab6834c51f21bfca2c;hp=3cb7b5f498dddced5eee747ee0307c33c1e3246d;hpb=1c181c11d5637d4388b138942f2edcd3c97e23c4;p=kivitendo-erp.git diff --git a/SL/DB/Helper/FlattenToForm.pm b/SL/DB/Helper/FlattenToForm.pm index 3cb7b5f49..7a3922c99 100644 --- a/SL/DB/Helper/FlattenToForm.pm +++ b/SL/DB/Helper/FlattenToForm.pm @@ -5,7 +5,7 @@ use strict; use parent qw(Exporter); our @EXPORT = qw(flatten_to_form); -use List::MoreUtils qw(any); +use List::MoreUtils qw(uniq any); sub flatten_to_form { my ($self, $form, %params) = @_; @@ -18,6 +18,14 @@ sub flatten_to_form { orddate quodate reqdate gldate duedate deliverydate datepaid transdate delivery_term_id)); $form->{currency} = $form->{curr} = $self->currency_id ? $self->currency->name || '' : ''; + if ( $vc eq 'customer' ) { + $form->{customer_id} = $self->customer_id; + $form->{customer} = $self->customer->name if $self->customer; + } else { + $form->{vendor_id} = $self->vendor_id; + $form->{vendor} = $self->vendor->name if $self->vendor; + }; + if (_has($self, 'transdate')) { my $transdate_idx = ref($self) eq 'SL::DB::Order' ? ($self->quotation ? 'quodate' : 'orddate') : ref($self) eq 'SL::DB::Invoice' ? 'invdate' @@ -25,11 +33,11 @@ sub flatten_to_form { $form->{$transdate_idx} = $self->transdate->to_lxoffice; } - $form->{vc} = $vc if ref($self) =~ m{^SL::DB::(?:.*Invoice|Order)}; + $form->{vc} = $vc if ref($self) =~ m{^SL::DB::(?:.*Invoice|.*Order)}; my @vc_fields = (qw(account_number bank bank_code bic business city contact country creditlimit department_1 department_2 discount email fax gln homepage iban language name - payment_terms phone street taxnumber ustid zipcode), + phone street taxnumber ustid zipcode), "${vc}number", ($vc eq 'customer')? 'c_vendor_id': 'v_customer_id'); my @vc_prefixed_fields = qw(email fax notes number phone); @@ -55,6 +63,8 @@ sub flatten_to_form { : ref($self) eq 'SL::DB::Invoice' ? 'invoice' : ''; + my %cvar_validity = _determine_cvar_validity($self, $vc); + my $idx = 0; my $format_amounts = $params{format_amounts} ? 1 : 0; my $format_notnull = $params{format_amounts} ? 2 : 0; @@ -67,7 +77,7 @@ sub flatten_to_form { $form->{"partsgroup_${idx}"} = $item->part->partsgroup->partsgroup if _has($item->part, 'partsgroup_id'); _copy($item, $form, "${items_name}_", "_${idx}", 0, qw(id)) if $items_name; - _copy($item->part, $form, '', "_${idx}", 0, qw(id partnumber weight)); + _copy($item->part, $form, '', "_${idx}", 0, qw(id partnumber weight assembly)); _copy($item->part, $form, '', "_${idx}", 0, qw(listprice)); _copy($item, $form, '', "_${idx}", 0, qw(description project_id ship serialnumber pricegroup_id ordnumber donumber cusordnumber unit subtotal longdescription price_factor_id marge_price_factor approved_sellprice reqdate transdate @@ -77,7 +87,7 @@ sub flatten_to_form { _copy($item, $form, '', "_${idx}", $format_percent, qw(discount)); _copy($item->project, $form, 'project', "_${idx}", 0, qw(number description)) if _has($item, 'project_id'); - _copy_custom_variables($item, $form, 'ic_cvar_', "_${idx}"); + _copy_custom_variables($item, $form, 'ic_cvar_', "_${idx}", $cvar_validity{items}->{ $item->parts_id }); if (ref($self) eq 'SL::DB::Invoice') { my $date = $item->deliverydate ? $item->deliverydate->to_lxoffice : undef; @@ -86,7 +96,7 @@ sub flatten_to_form { } } - _copy_custom_variables($self, $form, 'vc_cvar_', ''); + _copy_custom_variables($self, $form, 'vc_cvar_', '', $cvar_validity{vc}); return $self; } @@ -111,13 +121,15 @@ sub _copy { } sub _copy_custom_variables { - my ($src, $form, $prefix, $postfix, $format_amounts) = @_; + my ($src, $form, $prefix, $postfix, $cvar_validity) = @_; my $obj = (any { ref($src) eq $_ } qw(SL::DB::OrderItem SL::DB::DeliveryOrderItem SL::DB::InvoiceItem)) ? $src : $src->customervendor; foreach my $cvar (@{ $obj->cvars_by_config }) { + next if $cvar_validity && !$cvar_validity->{ $cvar->config_id }; + my $value = ($cvar->config->type =~ m{^(?:bool|customer|vendor|part)$}) ? $cvar->value : $cvar->value_as_text; @@ -128,4 +140,23 @@ sub _copy_custom_variables { return $src; } +sub _determine_cvar_validity { + my ($self, $vc) = @_; + + my @part_ids = uniq map { $_->parts_id } @{ $self->items }; + my @parts = map { SL::DB::Part->new(id => $_)->load } @part_ids; + + my %item_cvar_validity; + foreach my $part (@parts) { + $item_cvar_validity{ $part->id } = { map { ($_->config_id => $_->is_valid) } @{ $part->cvars_by_config } }; + } + + my %vc_cvar_validity = map { ($_->config_id => $_->is_valid) } @{ $self->$vc->cvars_by_config }; + + return ( + items => \%item_cvar_validity, + vc => \%vc_cvar_validity, + ); +} + 1;