| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| import {Inject, Injectable} from '@angular/core'; |
| import {HttpClients} from '../http/http.service'; |
| import {Teller} from './domain/teller.model'; |
| import {Observable} from 'rxjs/Observable'; |
| import {TellerManagementCommand} from './domain/teller-management-command.model'; |
| import {TellerBalanceSheet} from './domain/teller-balance-sheet.model'; |
| import {TellerAuthentication} from './domain/teller-authentication.model'; |
| import {RequestOptionsArgs, URLSearchParams} from '@angular/http'; |
| import {TellerTransactionCosts} from './domain/teller-transaction-costs.model'; |
| import {TellerTransaction} from './domain/teller-transaction.model'; |
| import {TellerDenomination} from './domain/teller-denomination.model'; |
| |
| @Injectable() |
| export class TellerService { |
| |
| constructor(private http: HttpClients, @Inject('tellerBaseUrl') private baseUrl: string) { |
| } |
| |
| create(officeIdentifier: string, teller: Teller): Observable<void> { |
| return this.http.post(`${this.baseUrl}/offices/${officeIdentifier}/teller`, teller); |
| } |
| |
| find(officeIdentifier: string, tellerCode: string): Observable<Teller> { |
| return this.http.get(`${this.baseUrl}/offices/${officeIdentifier}/teller/${tellerCode}`); |
| } |
| |
| fetch(officeIdentifier: string): Observable<Teller[]> { |
| return this.http.get(`${this.baseUrl}/offices/${officeIdentifier}/teller`); |
| } |
| |
| change(officeIdentifier: string, teller: Teller): Observable<void> { |
| return this.http.put(`${this.baseUrl}/offices/${officeIdentifier}/teller/${teller.code}`, teller); |
| } |
| |
| createCommand(officeIdentifier: string, tellerCode: string, tellerManagementCommand: TellerManagementCommand): Observable<void> { |
| return this.http.post(`${this.baseUrl}/offices/${officeIdentifier}/teller/${tellerCode}/commands`, tellerManagementCommand); |
| } |
| |
| getBalance(officeIdentifier: string, tellerCode: string): Observable<TellerBalanceSheet> { |
| return this.http.get(`${this.baseUrl}/offices/${officeIdentifier}/teller/${tellerCode}/balance`); |
| } |
| |
| unlockDrawer(tellerCode: string, tellerAuthentication: TellerAuthentication): Observable<Teller> { |
| return this.http.post(`${this.baseUrl}/teller/${tellerCode}/drawer`, tellerAuthentication, undefined, true); |
| } |
| |
| executeCommand(tellerCode: string, command: string): Observable<void> { |
| const params = new URLSearchParams(); |
| params.append('command', command); |
| |
| const requestOptions: RequestOptionsArgs = { |
| params |
| }; |
| |
| return this.http.post(`${this.baseUrl}/teller/${tellerCode}`, {}, requestOptions); |
| } |
| |
| createTransaction(tellerCode: string, tellerTransaction: TellerTransaction): Observable<TellerTransactionCosts> { |
| return this.http.post(`${this.baseUrl}/teller/${tellerCode}/transactions`, tellerTransaction); |
| } |
| |
| confirmTransaction(tellerCode: string, tellerTransactionIdentifier: string, command: string, |
| chargesIncluded?: boolean): Observable<void> { |
| const params = new URLSearchParams(); |
| params.append('command', command); |
| params.append('charges', chargesIncluded ? 'included' : 'excluded'); |
| |
| const requestOptions: RequestOptionsArgs = { |
| params |
| }; |
| |
| return this.http.post(`${this.baseUrl}/teller/${tellerCode}/transactions/${tellerTransactionIdentifier}`, {}, requestOptions); |
| } |
| |
| getTransactions(tellerCode: string): Observable<TellerTransaction[]> { |
| return this.http.get(`${this.baseUrl}/teller/${tellerCode}/transactions`); |
| } |
| |
| saveTellerDenomination(officeIdentifier: string, tellerCode: string, tellerDenomination: TellerDenomination): Observable<void> { |
| return this.http.post(`${this.baseUrl}/offices/${officeIdentifier}/teller/${tellerCode}/denominations`, tellerDenomination); |
| } |
| |
| fetchTellerDenominations(officeIdentifier: string, tellerCode: string): Observable<TellerDenomination[]> { |
| return this.http.get(`${this.baseUrl}/offices/${officeIdentifier}/teller/${tellerCode}/denominations`); |
| } |
| |
| } |