cashdrawer summary objects
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 16 Aug 2006 17:25:43 +0000 (17:25 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 16 Aug 2006 17:25:43 +0000 (17:25 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@5534 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/examples/fm_IDL.xml
Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/money.pm

index 660fb39..3f79c77 100644 (file)
@@ -1,6 +1,21 @@
 <IDL xmlns="http://opensrf.org/spec/IDL/base/v1" xmlns:oils_persist="http://open-ils.org/spec/opensrf/IDL/persistance/v1" xmlns:oils_obj="http://open-ils.org/spec/opensrf/IDL/objects/v1">
 
        <!-- Virutal classes -->
+       <class id="mwps" oils_obj:fieldmapper="money::workstation_payment_summary" oils_persist:virtual="true">
+               <fields>
+                       <field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
+                       <field name="ischanged" oils_obj:array_position="1" oils_persist:virtual="true" />
+                       <field name="isdeleted" oils_obj:array_position="2" oils_persist:virtual="true" />
+                       <field name="workstation" oils_obj:array_position="3" oils_persist:virtual="true" />
+                       <field name="cash_payment" oils_obj:array_position="4" oils_persist:virtual="true" />
+                       <field name="check_payment" oils_obj:array_position="5" oils_persist:virtual="true" />
+                       <field name="credit_card_payment" oils_obj:array_position="6" oils_persist:virtual="true" />
+               </fields>
+               <links>
+                       <link field="workstation" reltype="has_a" key="id" map="" class="aws"/>
+               </links>
+       </class>
+
        <class id="brn" oils_obj:fieldmapper="biblio::record_node" oils_persist:virtual="true">
                <fields>
                        <field name="isnew" oils_obj:array_position="0" oils_persist:virtual="true" />
index 396c1e5..838578d 100644 (file)
@@ -106,4 +106,56 @@ __PACKAGE__->register_method(
        argc            => 3,
 );
 
+sub ou_desk_payments {
+       my $self = shift;
+       my $client = shift;
+       my $lib = shift;
+       my $startdate = shift;
+       my $enddate = shift;
+
+       my $sql = <<'   SQL';
+
+SELECT *
+  FROM crosstab($$
+        SELECT ws.id,
+               p.payment_type,
+               SUM(COALESCE(p.amount,0.0))
+         FROM  money.desk_payment_view p
+               JOIN actor.workstation ws ON (ws.id = p.cash_drawer)
+         WHERE p.payment_ts >= ?
+               AND p.payment_ts < ?::TIMESTAMPTZ + INTERVAL '1 day'
+               AND p.voided IS FALSE
+               AND ws.owning_lib = ?
+        GROUP BY 1, 2
+        ORDER BY 1,2
+       $$) AS X(
+         workstation int,
+         cash_payment numeric(10,2),
+         check_payment numeric(10,2),
+         credit_card_payment numeric(10,2) );
+
+       SQL
+
+       my $rows = money::payment->db_Main->selectall_arrayref( $sql, {}, $startdate, $enddate, $lib );
+
+       for my $r (@$rows) {
+               my $x = new Fieldmapper::money::workstation_payment_summary;
+               $x->workstation( actor::workstation->retrieve($$r[0])->to_fieldmapper );
+               $x->cash_payment($$r[1]);
+               $x->check_payment($$r[2]);
+               $x->credit_card_payment($$r[3]);
+
+               $client->respond($x);
+       }
+
+       return undef;
+}
+__PACKAGE__->register_method(
+       method          => 'ou_desk_payments',
+       api_name        => 'open-ils.storage.money.org_unit.desk_payments',
+       stream          => 1,
+       argc            => 3,
+);
+
+
 1;