X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FHelper%2FReportGenerator%2FControlRow.pm;fp=SL%2FController%2FHelper%2FReportGenerator%2FControlRow.pm;h=536dd342f7d5691a12ef1916507e2e0e65c242e4;hb=53593baa211863fbf66540cf1bcc36c8fb37257f;hp=0000000000000000000000000000000000000000;hpb=deb4d2dbb676d7d6f69dfe7815d6e0cb09bd4a44;p=kivitendo-erp.git diff --git a/SL/Controller/Helper/ReportGenerator/ControlRow.pm b/SL/Controller/Helper/ReportGenerator/ControlRow.pm new file mode 100644 index 000000000..536dd342f --- /dev/null +++ b/SL/Controller/Helper/ReportGenerator/ControlRow.pm @@ -0,0 +1,103 @@ +package SL::Controller::Helper::ReportGenerator::ControlRow; + +use strict; +use Carp; + +use SL::Controller::Helper::ReportGenerator::ControlRow::ALL; + +use Exporter 'import'; +our @EXPORT = qw( + make_control_row +); + + +sub make_control_row { + my ($type, %args) = @_; + + my $class = $SL::Controller::Helper::ReportGenerator::ControlRow::ALL::type_to_class{$type} // croak "unknown type $type"; + my $obj = $class->new(params => \%args); + my @errors = $obj->validate_params; + croak join("\n", @errors) if @errors; + + return $obj; +} + + +1; + +__END__ + +=encoding utf-8 + +=head1 NAME + +SL::Controller::Helper::ReportGenerator::ControlRow - an interface for +report generator control rows + +=head1 DESCRIPTION + +ControlRow is an interface that allows generic control rows to be added +to objects for the C. + +Each control row implementation can access the report and add data for a row. + +=head1 SYNOPSIS + + package SL::Controller::TimeRecording; + + 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 separator + push @$objects, make_control_row("separator"); + + # And a simple total + my $total = sum0 map { _round_total($_->duration_in_hours) } @$objects; + push @$objects, make_control_row("simple_data", data => {duration => $total}); + + # Let report generator create the output. + $self->report_generator_list_objects( + report => $report, + objects => $objects, + ); + } + + +=head1 WRITING OWN CONTROL ROW CLASSES + +See C. + +=head1 FUNCTIONS + +=over 4 + +=item C + +Returns an instance of the control row class for the given type. This +object can be used as an element of objects to the report generator helper +(see C). + +Available types are 'separator', 'data, 'simple_data' for now. + +C<%PARAMS> depends on the type. See also: + +L +L + +=back + +=head1 AUTHOR + +Bernd Bleßmann Ebernd@kivitendo-premium.deE + +=cut