Lp 1859701 user/zbanks/lpXXXX-cash-reports
authorZavier Banks <zbanks@catalyte.io>
Wed, 29 Jan 2020 17:23:55 +0000 (17:23 +0000)
committerZavier Banks <zbanks@catalyte.io>
Wed, 29 Jan 2020 17:23:55 +0000 (17:23 +0000)
Currently porting over the dojo UI into the Angular UI.

Signed-off-by: Zavier Banks <zbanks@catalyte.io>
Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/cash-reports.component.html
Open-ILS/src/eg2/src/app/staff/admin/local/cash-reports/cash-reports.component.ts

index 40af477..260f7d7 100644 (file)
@@ -2,36 +2,57 @@
 <eg-staff-banner bannerText="Cash Reports" i18n-bannerText>
 </eg-staff-banner>
 
-<div>
-    <div class="row">
-        <div class="input-group">
-            <div class="input-group-prepend">
-                <div class="input-group-text" i18n>Start Date</div> 
-                <eg-date-select (onChangeAsDate)="onStartDateChange($event)"></eg-date-select>
+<div class="mb-5 text-center">
+    <div>
+        <div class="row col-lg-7 ml-auto mr-auto">
+            <div class="input-group col-lg-4 ml-auto mr-auto">
+                <div class="input-group-prepend">
+                    <div class="input-group-text" i18n>Start Date</div> 
+                    <eg-date-select [initialDate]="today" (onChangeAsYmd)="onStartDateChange($event)"></eg-date-select>
+                </div>
             </div>
-        </div>
-        <div class="input-group">
-            <div class="input-group-prepend">
-                <div class="input-group-text" i18n>End Date</div> 
-                <eg-date-select (onChangeAsDate)="onEndDateChange($event)"></eg-date-select>
+            <div class="input-group col-lg-4 ml-auto mr-auto">
+                <div class="input-group-prepend">
+                    <div class="input-group-text" i18n>End Date</div> 
+                    <eg-date-select [initialDate]="today" (onChangeAsYmd)="onEndDateChange($event)"></eg-date-select>
+                </div>
             </div>
         </div>
-    </div>
-    <div class="input-group">
-        <div class="input-group-prepend">
-            <div class="input-group-text" i18n>Org Select</div>
-            <eg-org-select (onChange)="onOrgChange($event)"></eg-org-select>
+        <div class="input-group mt-4 mb-3">
+            <div class="input-group-prepend col-lg-2 ml-auto mr-auto">
+                <div class="input-group-text" i18n>View reports for</div>
+                <eg-org-select [applyDefault]="true" (onChange)="onOrgChange($event)"></eg-org-select>
+            </div>
         </div>
     </div>
+    <button class="btn btn-primary col-lg-1" (click)="searchForData(startDate, endDate)">Submit</button>
+</div>
+<div class="mb-5">
+    <h3 class="text-center">Desk Payments</h3>
+    <eg-grid #deskPaymentgrid
+      [disableSelect]="true"
+      [disablePaging]="true"
+      [dataSource]="deskPaymentDataSource"
+      [sortable]="false">
+        <eg-grid-column [label]="'Workstation'" [name]="'workstation'" [index]="true" ></eg-grid-column>
+        <eg-grid-column [label]="'Cash Payment'" [name]="'cash_payment'" ></eg-grid-column>
+        <eg-grid-column [label]="'Check Payment'" [name]="'check_payment'" ></eg-grid-column>
+        <eg-grid-column [label]="'Credit Card Payment'" [name]="'credit_card_payment'" ></eg-grid-column>
+    </eg-grid>
+</div>
+<hr/>
+<div class="mb-3">
+    <h3 class="text-center">User Payments</h3>
+    <eg-grid #userPaymentgrid
+      [disableSelect]="true"
+      [disablePaging]="true"
+      [dataSource]="userPaymentDataSource"
+      [sortable]="false">
+        <eg-grid-column [label]="'User'" [name]="'usr'" [index]="true" ></eg-grid-column>
+        <eg-grid-column [label]="'Forgive Payment'" [name]="'forgive_payment'" ></eg-grid-column>
+        <eg-grid-column [label]="'Work Payment'" [name]="'work_payment'" ></eg-grid-column>
+        <eg-grid-column [label]="'Credit Payment'" [name]="'credit_payment'" ></eg-grid-column>
+        <eg-grid-column [label]="'Goods Payment'" [name]="'goods_payment'" ></eg-grid-column>
+        <eg-grid-column [label]="'Account Adjustment'" [name]="'account_adjustment'" ></eg-grid-column>
+    </eg-grid>
 </div>
-
-<eg-grid #deskPaymentgrid [idlClass]="deskIdlClass"
-  [dataSource]="deskPaymentDataSource"
-  [sortable]="true">
-</eg-grid>
-
-<eg-grid #userPaymentgrid [idlClass]="userIdlClass"
-  [dataSource]="userPaymentDataSource"
-  [sortable]="true">
-</eg-grid>
-
index c7ee206..7b4d63a 100644 (file)
@@ -2,23 +2,40 @@ import {Pager} from '@eg/share/util/pager';
 import {Component, OnInit, Input, ViewChild} from '@angular/core';
 import {GridComponent} from '@eg/share/grid/grid.component';
 import {GridDataSource, GridColumn, GridRowFlairEntry} from '@eg/share/grid/grid';
-import {PcrudService} from '@eg/core/pcrud.service';
+import {IdlService} from '@eg/core/idl.service';
 import {NetService} from '@eg/core/net.service';
 import {AuthService} from '@eg/core/auth.service';
+import {OrgService} from '@eg/core/org.service';
+
+
+class DeskTotals {
+    cash_payment = 0;
+    check_payment = 0;
+    credit_card_payment = 0;
+};
+
+class UserTotals {
+    forgive_payment = 0;
+    work_payment = 0;
+    credit_payment = 0;
+    goods_payment = 0;
+};
 
 @Component({
     templateUrl: './cash-reports.component.html'
 })
-
 export class CashReportsComponent implements OnInit {
     initDone = false;
     deskPaymentDataSource: GridDataSource = new GridDataSource();
     userPaymentDataSource: GridDataSource = new GridDataSource();
-    deskIdlClass = 'mwps';
-    userIdlClass = 'mups';
-    selectedOrg: any;
-    startDate: any;
-    endDate: any;
+    deskIdlClass = 'mbp';
+    userIdlClass = 'mbp';
+    selectedOrg = this.org.get(this.auth.user().ws_ou());
+    today = new Date();
+    startDate = `${this.today.getFullYear()}-${String(this.today.getMonth() + 1).padStart(2, '0')}-${String(this.today.getDate()).padStart(2, '0')}`;
+    endDate = `${this.today.getFullYear()}-${String(this.today.getMonth() + 1).padStart(2, '0')}-${String(this.today.getDate()).padStart(2, '0')}`;
+    deskTotals = new DeskTotals();
+    userTotals = new UserTotals();
 
     // Default sort field, used when no grid sorting is applied.
     @Input() sortField: string;
@@ -27,29 +44,88 @@ export class CashReportsComponent implements OnInit {
     @ViewChild('userPaymentgrid', { static: true }) userPaymentgrid: GridComponent;
 
     constructor(
-        private pcrud: PcrudService, 
+        private idl: IdlService,
         private net: NetService,
+        private org: OrgService,
         private auth: AuthService){}
 
-    ngOnInit() {}
+    ngOnInit() {
+        this.searchForData(this.startDate, this.endDate);
+    }
+
+    searchForData(start, end) {
+        this.fillGridData(this.deskIdlClass, 'deskPaymentDataSource',
+        this.net.request(
+            'open-ils.circ',
+            'open-ils.circ.money.org_unit.desk_payments',
+            this.auth.token(), this.selectedOrg.id(), start, end));
+        this.fillGridData(this.userIdlClass,'userPaymentDataSource',
+        this.net.request(
+            'open-ils.circ',
+            'open-ils.circ.money.org_unit.user_payments',
+            this.auth.token(), this.selectedOrg.id(), start, end));
+    }
+
+    fillGridData(idlClass, dataSource, data) {
+        data.subscribe((result) => {
+            let dataForTotal;
+            if (idlClass === this.deskIdlClass) {
+                dataForTotal = this.getDeskTotal(result);
+            } else if(idlClass === this.userIdlClass) {
+                dataForTotal = this.getUserTotal(result);
+            }
+            if(result.length > 0) {
+                result.push(dataForTotal);
+            }
+            console.log(result)
+            this[dataSource].data = result;
+            //this[dataSource].requestPage(new Pager());
+            // this[dataSource].getRows = (pager: Pager, sort: any[]) => {
+            //     const searchOps = {
+            //         offset: pager.offset,
+            //         limit: pager.limit
+            //     };
+            //     return new Observable(() => {
+            //         return result;
+            //     });
+            // };
+            // this.deskPaymentgrid.reload();
+            // this.userPaymentgrid.reload();
+        });
+    }
 
-    findGridData(idlClass, dataSource) {
-    this[dataSource].getRows = (pager: Pager, sort: any[]) => {
-        const orderBy: any = {};
-        if (sort.length) {
-            // Sort specified from grid
-            orderBy[idlClass] = sort[0].name + ' ' + sort[0].dir;
-        } else if (this.sortField) {
-            // Default sort field
-            orderBy[idlClass] = this.sortField;
-        };
-        const searchOps = {
-            offset: pager.offset,
-            limit: pager.limit,
-            order_by: orderBy
-        };
-        return this.pcrud.retrieveAll(idlClass, searchOps, {fleshSelectors: true});
-        };
+    getDeskTotal(idlObjects) {
+        this.deskTotals = new DeskTotals();
+        if(idlObjects.length > 0) {
+            let idlObjectFormat = this.idl.create("mwps")
+            idlObjects.forEach((idlObject) => {
+                this.deskTotals['cash_payment'] += parseFloat(idlObject.cash_payment());
+                this.deskTotals['check_payment'] += parseFloat(idlObject.check_payment());
+                this.deskTotals['credit_card_payment'] += parseFloat(idlObject.credit_card_payment());
+            });
+            idlObjectFormat.cash_payment(this.deskTotals['cash_payment']);
+            idlObjectFormat.check_payment(this.deskTotals['check_payment']);
+            idlObjectFormat.credit_card_payment(this.deskTotals['credit_card_payment']);
+            return idlObjectFormat;
+        }
+    }
+
+    getUserTotal(idlObjects) {
+        this.userTotals = new UserTotals();
+        if(idlObjects.length > 0) {
+            let idlObjectFormat = this.idl.create("mups")
+            idlObjects.forEach((idlObject) => {
+                this.userTotals['forgive_payment'] += parseFloat(idlObject.forgive_payment());
+                this.userTotals['work_payment'] += parseFloat(idlObject.work_payment());
+                this.userTotals['credit_payment'] += parseFloat(idlObject.credit_payment());
+                this.userTotals['goods_payment'] += parseFloat(idlObject.goods_payment());
+            });
+            idlObjectFormat.forgive_payment(this.userTotals['forgive_payment']);
+            idlObjectFormat.work_payment(this.userTotals['work_payment']);
+            idlObjectFormat.credit_payment(this.userTotals['credit_payment']);
+            idlObjectFormat.goods_payment(this.userTotals['goods_payment']);
+            return idlObjectFormat;
+        }
     }
 
     onStartDateChange(date) {
@@ -62,14 +138,6 @@ export class CashReportsComponent implements OnInit {
 
     onOrgChange(org) {
         this.selectedOrg = org;
-        console.log(this.selectedOrg)
-        this.findGridData(this.deskIdlClass,'deskPaymentDataSource');
-        this.findGridData(this.userIdlClass,'userPaymentDataSource');
-        this.net.request('open-ils.circ', 'open-ils.circ.money.org_unit.user_payments', this.auth.token(), this.selectedOrg.id(), this.startDate, this.endDate).subscribe(result=>{
-            console.log(result);
-        });
-        this.net.request('open-ils.circ', 'open-ils.circ.money.org_unit.user_payments', this.auth.token(), this.selectedOrg.id(), this.startDate, this.endDate).subscribe(result=>{
-            console.log(result);
-        });
+        this.searchForData(this.startDate, this.endDate);
     }
 }