import { Injectable } from '@angular/core'; import { BehaviorSubject, Observable } from 'rxjs'; import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http'; import { Order } from './order/order.model'; import { Owner } from './owner.model'; import { UserService } from './user.service'; import { ConfigData } from './configdata'; var Buffer = require('buffer/').Buffer; @Injectable({ providedIn: 'root' }) export class ReceiptService { beUrl = ConfigData.Be_URL; private dataStore: {order: Order, owner: Owner, name: string } = { name: '', owner: { _id: '', name: '', address: '', currency: 'usd', tax: false, taxValue: 0, vat: false, vatValue: 0, paid: false, zats: false, invoices: false, expiration: new Date(Date.now()).toISOString(), payconf: false, crmToken: '', viewkey: '', tips: false }, order: { address: '', session: '', timestamp: '', closed: false, currency: '', price: 0, total: 0, totalZec: 0, paid: false, externalInvoice: '', shortCode: '', token: '', lines: [ { qty: 1, name: '', cost:0 } ] } }; private _orderUpdated: BehaviorSubject = new BehaviorSubject(this.dataStore.order); public readonly orderUpdate: Observable = this._orderUpdated.asObservable(); public _nameUpdated: BehaviorSubject = new BehaviorSubject(this.dataStore.owner.name); public readonly nameUpdate: Observable= this._nameUpdated.asObservable(); //public readonly ownerUpdate; private reqHeaders: HttpHeaders; private params: HttpParams; constructor( private http: HttpClient, public userService: UserService ) { //this.session = localStorage.getItem('s4z_token'); this.params = new HttpParams(); var auth = 'Basic ' + Buffer.from(ConfigData.UsrPwd).toString('base64'); this.reqHeaders = new HttpHeaders().set('Authorization', auth); //this.ownerUpdate = userService.ownerUpdate; } getOrderById(id:string, token: string) { let obs = this.http.get<{message: string, order: any, shop: string}>(this.beUrl+'order/'+id, { headers:this.reqHeaders, params: this.params.append("token", token), observe: 'response'}); obs.subscribe((OrderDataResponse) => { if (OrderDataResponse.status == 200) { this.dataStore.order = OrderDataResponse.body!.order; this.dataStore.name = OrderDataResponse.body!.shop; this._orderUpdated.next(Object.assign({}, this.dataStore).order); this._nameUpdated.next(Object.assign({}, this.dataStore).name); } else { this._orderUpdated.next(Object.assign({}, this.dataStore).order); console.log('No order found'); } }); return obs; } }