1 import {Injectable} from '@angular/core';
2 import {IdlObject} from '@eg/core/idl.service';
3 import {NetService} from '@eg/core/net.service';
4 import {AuthService} from '@eg/core/auth.service';
5 import {PatronService} from '@eg/staff/share/patron/patron.service';
7 const PATRON_FLESH_FIELDS = [
26 interface PatronStats {
27 fines: {balance_owed: number};
30 claims_returned: number,
39 export class PatronManagerService {
42 patronStats: PatronStats;
44 // Value for YAOUS circ.do_not_tally_claims_returned
45 noTallyClaimsReturned = false;
47 // Value for YAOUS circ.tally_lost
53 private net: NetService,
54 private auth: AuthService,
55 public patronService: PatronService
58 loadPatron(id: number): Promise<any> {
62 return this.net.request(
64 'open-ils.actor.user.fleshed.retrieve',
65 this.auth.token(), id, PATRON_FLESH_FIELDS).toPromise()
66 .then(patron => this.patron = patron)
67 .then(_ => this.getPatronStats(id))
68 .then(_ => this.loaded = true);
71 getPatronStats(id: number): Promise<any> {
73 return this.net.request(
75 'open-ils.actor.user.opac.vital_stats.authoritative',
76 this.auth.token(), id).toPromise()
78 .then((stats: PatronStats) => {
80 // force numeric values
81 stats.fines.balance_owed = Number(stats.fines.balance_owed);
83 Object.keys(stats.checkouts).forEach(key =>
84 stats.checkouts[key] = Number(stats.checkouts[key]));
86 stats.checkouts.total_out = stats.checkouts.out +
87 stats.checkouts.overdue + stats.checkouts.long_overdue
89 if (!this.noTallyClaimsReturned) {
90 stats.checkouts.total_out += stats.checkouts.claims_returned;
94 stats.checkouts.total_out += stats.checkouts.lost
97 return this.patronStats = stats;