1 <eg-prompt-dialog #annotateDialog
2 i18n-dialogBody dialogBody="Please Annotate This Payment">
5 <eg-alert-dialog #maxPayDialog
6 i18n-dialogBody dialogBody="Payments over 100,000 are denied by policy.">
9 <eg-alert-dialog #errorDialog i18n-dialogTitle dialogTitle="Error">
12 <eg-confirm-dialog #warnPayDialog
13 i18n-dialogBody i18n-dialogTitle dialogTitle="Confirm Payment Amount"
14 dialogBody="Are you sure you want to apply a payment of {{paymentAmount | currency}}?">
17 <eg-confirm-dialog #voidBillsDialog
18 i18n-dialogBody i18n-dialogTitle dialogTitle="Void Billings"
19 dialogBody="Are you sure you would like to void {{voidAmount | currency}}
20 in bills for the selected transactions?">
23 <eg-confirm-dialog #adjustToZeroDialog *ngIf="billGrid"
24 i18n-dialogBody i18n-dialogTitle dialogTitle="Adjust To Zero"
25 dialogBody="Are you sure you would like to adjust to zero the balance
26 on transactions {{billGrid.context.rowSelector.selected().join(',')}}?">
29 <eg-confirm-dialog #refundDialog *ngIf="billGrid"
30 i18n-dialogBody i18n-dialogTitle dialogTitle="Adjust To Zero"
31 dialogBody="Are you sure you would like to refund excess payment on
32 transaction(s) {{billGrid.context.rowSelector.selected().join(',')}}?
33 This action will simply put the amount in the Payment Pending column as
34 a negative value. You must still select Apply Payment! Certain types of
35 payments may not be refunded. The refund may be applied to checked
36 transactions that follow the refunded transaction.">
40 <eg-credit-card-dialog [patron]="patron()" #creditCardDialog>
41 </eg-credit-card-dialog>
43 <eg-add-billing-dialog [patronId]="patronId" #billingDialog>
44 </eg-add-billing-dialog>
48 <ng-container *ngIf="summary">
49 <div class="row border-bottom border-secondary pb-2 pt-2 mb-4">
50 <div class="col-lg-3 pr-0 mr-0 border-right">
51 <div class="d-flex pt-1 pb-1 striped">
52 <div class="flex-4" i18n>Total Owed:</div>
54 [ngClass]="{'font-weight-bold' : summary.balance_owed() > 0}">
55 {{summary.balance_owed() || 0 | currency}}</div>
57 <div class="d-flex pt-1 pb-1">
58 <div class="flex-4" i18n>Total Billed:</div>
59 <div class="flex-1">{{summary.total_owed() || 0 | currency}}</div>
61 <div class="d-flex pt-1 pb-1 striped">
62 <div class="flex-4" i18n>Total Paid/Credited:</div>
63 <div class="flex-1">{{summary.total_paid() || 0 | currency}}</div>
67 <div class="col-lg-3 pr-0 mr-0 border-right">
68 <div class="d-flex pt-1 pb-1 striped">
69 <div class="flex-4" i18n>Owed for Selected:</div>
70 <div class="flex-1">{{owedSelected() | currency}}</div>
72 <div class="d-flex pt-1 pb-1">
73 <div class="flex-4" i18n>Billed for Selected:</div>
74 <div class="flex-1">{{billedSelected() | currency}}</div>
76 <div class="d-flex pt-1 pb-1 striped">
77 <div class="flex-4" i18n>Paid/Credited for Selected:</div>
78 <div class="flex-1">{{paidSelected() | currency}}</div>
82 <div class="col-lg-3 pr-0 mr-0 border-right">
83 <div class="d-flex pt-1 pb-1 striped">
84 <div class="flex-4" i18n>Refunds Available:</div>
85 <div class="flex-1">{{refundsAvailable() | currency}}</div>
87 <div class="d-flex pt-1 pb-1">
88 <div class="flex-4" i18n>Credit Available:</div>
89 <div class="flex-1">{{patron().credit_forward_balance() | currency}}</div>
91 <div class="d-flex pt-1 pb-1 striped">
92 <div class="flex-4" i18n>Session Voided:</div>
93 <div class="flex-1">{{sessionVoided | currency}}</div>
97 <div class="col-lg-3 pr-0 mr-0">
98 <div class="d-flex pt-1 pb-1 striped">
99 <div class="flex-4"> </div>
100 <div class="flex-1"> </div>
102 <div class="d-flex pt-1 pb-1">
103 <div class="flex-4" i18n>Pending Payment:</div>
104 <div class="flex-1 font-weight-bold">{{pendingPayment() | currency}}</div>
106 <div class="d-flex pt-1 pb-1 striped">
107 <div class="flex-4" i18n>Pending Change:</div>
108 <div class="flex-1 font-weight-bold">{{pendingChange() | currency}}</div>
114 <!-- BILL PAY FORM -->
116 <h3 i18n>Pay Bill</h3>
118 <div class="row bg-light border border-dark rounded pt-2 pb-2 mt-2 mb-4 payment-form">
119 <div class="col-lg-12 d-flex form-inline form-validated">
120 <div class="flex-1"></div>
121 <div class="ml-2"><label for="payment-type" i18n>Payment Type:</label></div>
123 <select [(ngModel)]="paymentType" class="form-control" id="payment-type">
124 <option value="cash_payment" i18n>Cash</option>
125 <option value="check_payment" i18n>Check</option>
126 <option value="credit_card_payment" i18n>Credit Card</option>
127 <option value="debit_card_payment" i18n>Debit Card</option>
128 <option value="credit_payment" i18n>Patron Credit</option>
129 <option value="work_payment" i18n>Work</option>
130 <option value="forgive_payment" i18n>Forgive</option>
131 <option value="goods_payment" i18n>Goods</option>
134 <div class="ml-2"><label for="check-number" i18n>Check Number:</label></div>
136 <input type="text" class="form-control" [(ngModel)]="checkNumber"
137 id="check-number" [disabled]="paymentType !== 'check_payment'"/>
139 <div class="ml-2"><label for="pay-amount" i18n>Payment Received:</label></div>
141 <input type="number" class="form-control" [(ngModel)]="paymentAmount"
142 (ngModelChange)="updatePendingColumn()" id="pay-amount" [min]="0"/>
144 <div class="ml-2 form-check form-check-inline">
145 <input class="form-check-input" type="checkbox"
146 (ngModelChange)="applySetting('eg.circ.bills.annotatepayment', $event)"
147 id="annotate" [(ngModel)]="annotatePayment"/>
148 <label class="form-check-label" for="annotate" i18n>Annotate</label>
151 <button class="btn btn-outline-dark" (click)="applyPayment()"
152 [disabled]="disablePayment()" i18n>Apply Payment</button>
159 <ng-template #titleTemplate let-r="row">
160 <ng-container *ngIf="r.record_id">
161 <a routerLink="/staff/catalog/record/{{r.record_id}}">{{r.title}}</a>
163 <ng-container *ngIf="!r.record_id">{{r.title}}</ng-container>
166 <ng-template #barcodeTemplate let-r="row">
167 <ng-container *ngIf="r.copy_id">
168 <a href="/eg/staff/cat/item/{{r.copy_id}}">{{r.copy_barcode}}</a>
172 <eg-grid #billGrid idlClass="mbt" [dataSource]="gridDataSource"
173 persistKey="circ.patron.bills" [sortable]="true" [disablePaging]="true"
174 (onRowActivate)="showStatement($event)"
175 [cellClassCallback]="cellClassCallback"
176 [reloadOnColumnChange]="true"
177 [showDeclaredFieldsOnly]="true"
178 [rowClassCallback]="rowClassCallback"
179 [rowFlairIsEnabled]="true"
180 [rowFlairCallback]="rowFlairCallback"
181 [cellTextGenerator]="cellTextGenerator">
183 <eg-grid-toolbar-button i18n-label label="Add Billing"
184 (onClick)="addBilling()"></eg-grid-toolbar-button>
186 <eg-grid-toolbar-button i18n-label label="History"
187 routerLink="/staff/circ/patron/{{patronId}}/bills/history/transactions">
188 </eg-grid-toolbar-button>
190 <eg-grid-toolbar-button i18n-label label="Select All Refunds"
191 (onClick)="selectRefunds()"></eg-grid-toolbar-button>
193 <!-- ACTIONS FOR SELECTED -->
195 <eg-grid-toolbar-action
196 i18n-label label="Full Details" (onClick)="showStatement($event[0])">
197 </eg-grid-toolbar-action>
199 <eg-grid-toolbar-action
200 i18n-label label="Print Bills" (onClick)="printBills($event)">
201 </eg-grid-toolbar-action>
203 <eg-grid-toolbar-action
204 i18n-label label="Void All Billings" (onClick)="voidBillings($event)">
205 </eg-grid-toolbar-action>
207 <eg-grid-toolbar-action
208 i18n-label label="Adjust To Zero" (onClick)="adjustToZero($event)">
209 </eg-grid-toolbar-action>
211 <eg-grid-toolbar-action
212 i18n-label label="Add Billing" (onClick)="addBillingForXact($event)">
213 </eg-grid-toolbar-action>
215 <eg-grid-toolbar-action i18n-label label="Refund" (onClick)="refund($event)">
216 </eg-grid-toolbar-action>
220 <eg-grid-column name="balance_owed" path="summary.balance_owed" datatype="money"
221 [required]="true" label="Balance Owed" i18n-label></eg-grid-column>
223 <eg-grid-column name="total_owed" path="summary.total_owed"
224 datatype="money" [required]="true" label="Total Billed" i18n-label></eg-grid-column>
226 <eg-grid-column name="total_paid" path="summary.total_paid" datatype="money"
227 [required]="true" label="Total Paid" i18n-label></eg-grid-column>
229 <eg-grid-column path="summary.xact_type"
230 label="Type" i18n-label></eg-grid-column>
232 <eg-grid-column name="last_billing_ts" path="summary.last_billing_ts"
233 [required]="true" label="Last Billed" i18n-label>
236 <eg-grid-column name="copy_barcode" label="Item Barcode" i18n-label
237 path="circulation.target_copy.barcode" [cellTemplate]="barcodeTemplate">
240 <eg-grid-column name="call_number_label"
241 path="circulation.target_copy.call_number.label"
242 i18n-label label="Call Number" [hidden]="true"></eg-grid-column>
244 <eg-grid-column path="circulation.due_date" label="Due Date" i18n-label
245 timezoneContextOrg="circulation.circ_lib" dateOnlyIntervalField="circulation.duration"
246 datatype="timestamp" [required]="true"></eg-grid-column>
248 <eg-grid-column path="circulation.stop_fines" [required]="true"
249 label="Stop Fines" i18n-label></eg-grid-column>
251 <eg-grid-column i18n-label label="Title" name="title"
252 [cellTemplate]="titleTemplate"
253 path="circulation.target_copy.call_number.record.simple_record.title">
256 <eg-grid-column name="last_billing_note" path="summary.last_billing_note"
257 [required]="true" label="Last Billing Note" i18n-label></eg-grid-column>
259 <eg-grid-column name="paymentPending" datatype="money"
260 label="Payment Pending" i18n-label></eg-grid-column>
264 <eg-grid-column path="id" [index]="true" [required]="true"
265 [hidden]="true" label="Bill #" i18n-label> </eg-grid-column>
267 <eg-grid-column path="xact_start" datatype="timestamp" [datePlusTime]="true"
268 [required]="true" [hidden]="true" label="Start" i18n-label></eg-grid-column>
270 <eg-grid-column name="last_billing_type" path="summary.last_billing_type"
271 [hidden]="true" [required]="true" label="Last Billing Type" i18n-label></eg-grid-column>
273 <eg-grid-column name="last_payment_type" path="summary.last_payment_type"
274 [hidden]="true" [required]="true" label="Last Payment Type" i18n-label></eg-grid-column>
276 <eg-grid-column name="last_payment_ts" path="summary.last_payment_ts"
277 [hidden]="true" [required]="true" [datePlusTime]="true" label="Last Payment Time" i18n-label>
280 <eg-grid-column name="billingLocation"
281 [hidden]="true" label="Billing Location" i18n-label></eg-grid-column>
283 <eg-grid-column path="circulation.target_copy.call_number.prefix.label"
284 i18n-label label="CN Prefix" [hidden]="true"></eg-grid-column>
285 <eg-grid-column path="circulation.target_copy.call_number.suffix.label"
286 i18n-label label="CN Suffix" [hidden]="true"></eg-grid-column>
288 <eg-grid-column i18n-label label="Owning Library" [hidden]="true"
289 path="circulation.target_copy.call_number.owning_lib.shortname">
292 <eg-grid-column i18n-label label="Checkout/Renewal Library" [hidden]="true"
293 path="circulation.circ_lib.shortname">
296 <eg-grid-column i18n-label label="Checkin Date" [hidden]="true"
297 path="circulation.checkin_time">
300 <eg-grid-column name="copy_id" path="circulation.target_copy.id"
301 [required]="true" [hidden]="true"></eg-grid-column>
303 <eg-grid-column path="circulation.target_copy.location.name"
304 [hidden]="true" label="Shelving Location" i18n-label></eg-grid-column>
307 <eg-grid-column name="record_id"
308 path="circulation.target_copy.call_number.record.id"
309 [required]="true" [hidden]="true"></eg-grid-column>
312 <eg-grid-column [hidden]="true" label="Author" i18n-label
313 path="circulation.target_copy.call_number.record.simple_record.author">
316 <eg-grid-column [hidden]="true" label="Grocery Billing Location"
317 [required]="true" i18n-label path="grocery.billing_location.shortname">
320 <eg-grid-column [hidden]="true" label="Circulation Billing Location"
321 [required]="true" i18n-label path="circulation.circ_lib.shortname">
324 <eg-grid-column path="usr" [hidden]="true"></eg-grid-column>
325 <eg-grid-column path="unrecovered" [hidden]="true"></eg-grid-column>
329 <div class="row mt-2">
330 <div class="col-lg-12 d-flex">
331 <div class="flex-1"></div>
332 <div class="d-flex flex-colum justify-content-end">
333 <div class="form-check form-check-inline">
334 <input class="form-check-input" type="checkbox" id="patron-credit-cbox"
335 [(ngModel)]="convertChangeToCredit"/>
336 <label class="form-check-label" for="patron-credit-cbox" i18n>
337 Convert Change To Patron Credit
341 <div class="d-flex flex-colum justify-content-end">
342 <div class="form-check form-check-inline ml-2">
343 <input class="form-check-input" type="checkbox" id="receipt-on-payment-cbox"
344 (ngModelChange)="applySetting('circ.bills.receiptonpay', $event)"
345 [(ngModel)]="receiptOnPayment"/>
346 <label class="form-check-label" for="receipt-on-payment-cbox" i18n>
351 <div class="form-inline ml-2">
352 <div class="input-group">
353 <div class="input-group-prepend">
354 <span class="input-group-text" i18n># Receipts</span>
356 <input type="number" class="form-control num-receipts" [(ngModel)]="numReceipts"/>