reporting stuff ...
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 28 Sep 2006 08:04:26 +0000 (08:04 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 28 Sep 2006 08:04:26 +0000 (08:04 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@6245 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/examples/fm_IDL.xml
Open-ILS/examples/reporter-sql-builder-test.pl
Open-ILS/src/perlmods/OpenILS/Reporter/SQLBuilder.pm
Open-ILS/src/sql/Pg/reporter-schema.sql

index d3ef5a9..e625bc3 100644 (file)
                        <field name="excel_format" oils_obj:array_position="9" oils_persist:virtual="false" reporter:datatype="bool"/>
                        <field name="csv_format" oils_obj:array_position="10" oils_persist:virtual="false" reporter:datatype="bool"/>
                        <field name="html_format" oils_obj:array_position="11" oils_persist:virtual="false" reporter:datatype="bool"/>
-                       <field name="error_code" oils_obj:array_position="12" oils_persist:virtual="false" />
+                       <field name="error_code" oils_obj:array_position="12" oils_persist:virtual="false" reporter:datatype="int"/>
                        <field name="error_text" oils_obj:array_position="13" oils_persist:virtual="false" />
                        <field name="report" oils_obj:array_position="14" oils_persist:virtual="false" />
                        <field name="folder" oils_obj:array_position="15" oils_persist:virtual="false" />
+                       <field name="chart_pie" oils_obj:array_position="16" oils_persist:virtual="false" reporter:datatype="bool"/>
+                       <field name="chart_bar" oils_obj:array_position="17" oils_persist:virtual="false" reporter:datatype="bool"/>
+                       <field name="chart_line" oils_obj:array_position="18" oils_persist:virtual="false" reporter:datatype="bool"/>
                </fields>
                <links>
                        <link field="runner" reltype="has_a" key="id" map="" class="au"/>
index c388e11..36828b6 100755 (executable)
@@ -95,5 +95,6 @@ my $r = OpenILS::Reporter::SQLBuilder->new;
 $r->register_params( $params );
 my $rs = $r->parse_report( $report );
 
+print "Column Labels: " . join(', ', $rs->column_label_list) . "\n";
 print $rs->toSQL;
 
index d3f1ff3..0532d32 100644 (file)
@@ -58,7 +58,10 @@ sub parse_report {
                ->set_from( $report->{from} )
                ->set_where( $report->{where} )
                ->set_having( $report->{having} )
-               ->set_order_by( $report->{order_by} );
+               ->set_order_by( $report->{order_by} )
+               ->set_pivot_data( $report->{pivot_data} )
+               ->set_pivot_label( $report->{pivot_label} )
+               ->set_pivot_default( $report->{pivot_default} );
 
        return $rs;
 }
@@ -75,6 +78,42 @@ sub is_subquery {
        return $self->{_is_subquery};
 }
 
+sub pivot_data {
+       my $self = shift;
+       return $self->{_pivot_data};
+}
+
+sub pivot_label {
+       my $self = shift;
+       return $self->{_pivot_label};
+}
+
+sub pivot_default {
+       my $self = shift;
+       return $self->{_pivot_label};
+}
+
+sub set_pivot_default {
+       my $self = shift;
+       my $p = shift;
+       $self->{_pivot_default} = $p if (defined $p);
+       return $self;
+}
+
+sub set_pivot_data {
+       my $self = shift;
+       my $p = shift;
+       $self->{_pivot_data} = $p if (defined $p);
+       return $self;
+}
+
+sub set_pivot_label {
+       my $self = shift;
+       my $p = shift;
+       $self->{_pivot_label} = $p if (defined $p);
+       return $self;
+}
+
 sub set_subquery_alias {
        my $self = shift;
        my $alias = shift;
@@ -147,6 +186,29 @@ sub set_order_by {
        return $self;
 }
 
+sub column_label_list {
+       my $self = shift;
+
+       my @labels;
+       push @labels, $self->resolve_param( $_->{_alias} ) for ( @{ $self->{_select} } );
+       return @labels;
+}
+
+sub group_by_list {
+       my $self = shift;
+       my $base = shift;
+       $base = 1 unless (defined $base);
+
+       my $gcount = $base;
+       my @group_by;
+       for my $c ( @{ $self->{_select} } ) {
+               push @group_by, $gcount if (!$c->is_aggregate);
+               $gcount++;
+       }
+
+       return @group_by;
+}
+
 sub toSQL {
        my $self = shift;
 
@@ -162,12 +224,7 @@ sub toSQL {
        $sql .= "  FROM\t" . $self->{_from}->toSQL . "\n" if ($self->{_from});
        $sql .= "  WHERE\t" . join("\n\tAND ", map { $_->toSQL } @{ $self->{_where} }) . "\n" if (@{ $self->{_where} });
 
-       my $gcount = 1;
-       my @group_by;
-       for my $c ( @{ $self->{_select} } ) {
-               push @group_by, $gcount if (!$c->is_aggregate);
-               $gcount++;
-       }
+       my @group_by = $self->group_by_list;
 
        $sql .= '  GROUP BY ' . join(', ', @group_by) . "\n" if (@group_by);
        $sql .= "  HAVING " . join("\n\tAND ", map { $_->toSQL } @{ $self->{_having} }) . "\n" if (@{ $self->{_having} });
index ca26e1c..2421580 100644 (file)
@@ -77,6 +77,9 @@ CREATE TABLE reporter.schedule (
        excel_format    BOOL                            NOT NULL DEFAULT TRUE,
        html_format     BOOL                            NOT NULL DEFAULT TRUE,
        csv_format      BOOL                            NOT NULL DEFAULT TRUE,
+       chart_pie       BOOL                            NOT NULL DEFAULT FALSE,
+       chart_bar       BOOL                            NOT NULL DEFAULT FALSE,
+       chart_line      BOOL                            NOT NULL DEFAULT FALSE,
        error_code      INT,
        error_text      TEXT
 );