1 package SL::Controller::Helper::ReportGenerator::ControlRow;
6 use SL::Controller::Helper::ReportGenerator::ControlRow::ALL;
14 sub make_control_row {
15 my ($type, %args) = @_;
17 my $class = $SL::Controller::Helper::ReportGenerator::ControlRow::ALL::type_to_class{$type} // croak "unknown type $type";
18 my $obj = $class->new(params => \%args);
19 my @errors = $obj->validate_params;
20 croak join("\n", @errors) if @errors;
34 SL::Controller::Helper::ReportGenerator::ControlRow - an interface for
35 report generator control rows
39 ControlRow is an interface that allows generic control rows to be added
40 to objects for the C<SL::Controller::Helper::ReportGenerator>.
42 Each control row implementation can access the report and add data for a row.
46 package SL::Controller::TimeRecording;
48 use SL::Controller::Helper::ReportGenerator;
49 use SL::Controller::Helper::ReportGenerator::ControlRow qw(make_control_row);
54 # Set up the report generator instance. In this example this is
55 # hidden in "prepare_report".
56 my $report = $self->prepare_report;
58 # Get objects from database.
59 my $objects = SL::DB::Manager::TimeRecording->get_all(...);
62 push @$objects, make_control_row("separator");
65 my $total = sum0 map { _round_total($_->duration_in_hours) } @$objects;
66 push @$objects, make_control_row("simple_data", data => {duration => $total});
68 # Let report generator create the output.
69 $self->report_generator_list_objects(
76 =head1 WRITING OWN CONTROL ROW CLASSES
78 See C<SL::Controller::Helper::ReportGenerator::ControlRow::Base>.
84 =item C<make_control_row TYPE %PARAMS>
86 Returns an instance of the control row class for the given type. This
87 object can be used as an element of objects to the report generator helper
88 (see C<SL::Controller::Helper::ReportGenerator>).
90 Available types are 'separator', 'data, 'simple_data' for now.
92 C<%PARAMS> depends on the type. See also:
94 L<SL::Controller::Helper::ReportGenerator::ControlRow::ALL>
95 L<SL::Controller::Helper::ReportGenerator::ControlRow::*>
101 Bernd Bleßmann E<lt>bernd@kivitendo-premium.deE<gt>