]> wagnertech.de Git - mfinanz.git/blobdiff - SL/Controller/FinancialControllingReport.pm
Finanzcontrollingbericht: bezahlte Beträge als Netto und nicht Brutto berechnen
[mfinanz.git] / SL / Controller / FinancialControllingReport.pm
index 988d619e2232ef5d5dd95d271de24dc05258826a..165a649c7b4ff8cefc579023dd90068091a887ba 100644 (file)
@@ -100,7 +100,8 @@ sub prepare_report {
     ordnumber               => { obj_link => sub { $self->link_to($_[0])                                              }  },
     customer                => {      sub => sub { $_[0]->customer->name                                              },
                                  obj_link => sub { $self->link_to($_[0]->customer)                                    }  },
-    globalprojectnumber     => {      sub => sub { $_[0]->globalproject_id ? $_[0]->globalproject->projectnumber : '' }  },
+    globalprojectnumber     => {      sub => sub { $_[0]->globalproject_id ? $_[0]->globalproject->projectnumber : '' },
+                                 obj_link => sub { $self->link_to($_[0]->globalproject)                               }  },
     globalproject_type      => { text     => $::locale->text('Project type'),
                                  sub      => sub { $_[0]->globalproject_id ? $_[0]->globalproject->project_type->description : '' }  },
   );
@@ -137,13 +138,18 @@ sub calculate_data {
   my ($self) = @_;
 
   foreach my $order (@{ $self->{orders} }) {
-    my $delivery_orders = $order->linked_records(direction => 'to', to => 'DeliveryOrder', via => 'Order', query => [ '!customer_id' => undef ]);
-    my $invoices        = $order->linked_records(direction => 'to', to => 'Invoice',       via => [ 'Order', 'DeliveryOrder' ]);
-
-    $order->{delivered_amount}  = sum map { $self->sum_relevant_items(order => $order, other => $_, by_order => 1) } @{ $delivery_orders };
-    $order->{billed_amount}     = sum map { $self->sum_relevant_items(order => $order, other => $_)                } @{ $invoices        };
-    $order->{paid_amount}       = sum map { $_->paid                                                               } @{ $invoices        };
-    my $billed_amount           = sum map { $_->netamount                                                          } @{ $invoices        };
+    my @delivery_orders = @{ $order->linked_records(direction => 'to', to => 'DeliveryOrder', via => 'Order', query => [ '!customer_id' => undef ]) };
+    my @invoices        = @{ $order->linked_records(direction => 'to', to => 'Invoice',       via => [ 'Order', 'DeliveryOrder' ])                  };
+
+    @invoices = (
+      grep({ !$_->storno_id } @invoices),
+      map({ @{ $_->storno_invoices } } grep { $_->storno && !$_->storno_id } @invoices),
+    );
+
+    $order->{delivered_amount}  = sum map { $self->sum_relevant_items(order => $order, other => $_, by_order => 1) } @delivery_orders;
+    $order->{billed_amount}     = sum map { $self->sum_relevant_items(order => $order, other => $_)                } @invoices;
+    $order->{paid_amount}       = sum map { $_->paid * $_->netamount / (($_->amount * 1) || ($_->netamount * 1) || 1) } @invoices;
+    my $billed_amount           = sum map { $_->netamount                                                          } @invoices;
     $order->{other_amount}      = $billed_amount             - $order->{billed_amount};
     $order->{billable_amount}   = $order->{delivered_amount} - $order->{billed_amount};
 
@@ -242,6 +248,10 @@ sub link_to {
     my $id     = $object->id;
     return "ct.pl?action=$action&id=$id&db=customer";
   }
+  if ($object->isa('SL::DB::Project')) {
+    my $id     = $object->id;
+    return "controller.pl?action=Project/$action&id=$id";
+  }
 }
 
 1;