Merge branch 'b-3.6.1' of ../kivitendo-erp_20220811
[kivitendo-erp.git] / SL / Controller / Helper / ReportGenerator / ControlRow / Data.pm
diff --git a/SL/Controller/Helper/ReportGenerator/ControlRow/Data.pm b/SL/Controller/Helper/ReportGenerator/ControlRow/Data.pm
new file mode 100644 (file)
index 0000000..159249d
--- /dev/null
@@ -0,0 +1,94 @@
+package SL::Controller::Helper::ReportGenerator::ControlRow::Data;
+
+use strict;
+
+use parent qw(SL::Controller::Helper::ReportGenerator::ControlRow::Base);
+
+
+sub validate_params {
+  my ($self) = @_;
+
+  my @errors;
+  push @errors, 'type "data" needs a parameter "row" as hash ref' if !$self->params->{row} || ('HASH' ne ref $self->params->{row});
+
+  return @errors;;
+}
+
+sub set_data {
+  my ($self, $report) = @_;
+
+  my %data;
+  %data = map {
+    my $def = $self->params->{row}->{$_};
+    my $tmp;
+
+    foreach my $attr (qw(raw_data data link class align)) {
+      $tmp->{$attr} = $def->{$attr} if defined $def->{$attr};
+    }
+    $_ => $tmp;
+  } keys %{ $self->params->{row} };
+
+  $report->add_data(\%data);
+}
+
+
+1;
+
+__END__
+
+=encoding utf-8
+
+=head1 NAME
+
+SL::Controller::Helper::ReportGenerator::ControlRow::Data - an
+implementaion of a control row class to display data
+
+=head1 DESCRIPTION
+
+This class implements a control row for the report generator helper to display
+data. You can configure the way the data is displayed.
+
+=head1 SYNOPSIS
+
+  use SL::Controller::Helper::ReportGenerator;
+  use SL::Controller::Helper::ReportGenerator::ControlRow qw(make_control_row);
+
+  sub action_list {
+    my ($self) = @_;
+
+    # Set up the report generator instance. In this example this is
+    # hidden in "prepare_report".
+    my $report = $self->prepare_report;
+
+    # Get objects from database.
+    my $objects = SL::DB::Manager::TimeRecording->get_all(...);
+
+    # Add a simple data
+    my $total = $self->get_total($objects);
+    push @$objects, make_control_row(
+      "data",
+      row => { duration => { data  => $total,
+                             class => 'listtotal',
+                             link  => '#info_for_total' } }
+    );
+
+    # Let report generator create the output.
+    $self->report_generator_list_objects(
+      report  => $report,
+      objects => $objects,
+    );
+  }
+
+=head1 PARAMETERS
+
+This control row gets the paramter C<row>, which must a hash ref.
+The keys are the column names for the fields you want to show your
+data. The values are hash refs itself and can contain the keys
+C<raw_data>, C<data>, C<link>, C<class> and C<align> which are passed
+in the data added to the report.
+
+=head1 AUTHOR
+
+Bernd Bleßmann E<lt>bernd@kivitendo-premium.deE<gt>
+
+=cut