From 7a4e8d278f04b603d6ac6e5c51954ccd5e66b528 Mon Sep 17 00:00:00 2001 From: Rene Vergara Date: Sun, 22 Oct 2023 08:08:18 -0500 Subject: [PATCH] Display taxes on order --- src/app/order/order.component.html | 12 ++++++++ src/app/order/order.component.ts | 18 ++++++++++-- src/app/order/order.service.ts | 45 ++++++++++++++++++++++++++---- 3 files changed, 66 insertions(+), 9 deletions(-) diff --git a/src/app/order/order.component.html b/src/app/order/order.component.html index 768ffc8..4f1eaf7 100644 --- a/src/app/order/order.component.html +++ b/src/app/order/order.component.html @@ -75,6 +75,18 @@ + + Sales Tax + {{ tax / 100 | percent:'1.2-4'}} + {{ total * tax / 100 | currency: getCurrency() }} + + + + Value-Added Tax + {{ vat / 100 | percent:'1.2-4' }} + {{ total * vat / 100 | currency: getCurrency() }} + + diff --git a/src/app/order/order.component.ts b/src/app/order/order.component.ts index ecddf32..51a7051 100644 --- a/src/app/order/order.component.ts +++ b/src/app/order/order.component.ts @@ -48,6 +48,9 @@ export class OrderComponent implements OnInit{ externalInvoice: '', shortCode: '', token: '', + taxAmount: 0, + vatAmount: 0, + tipAmount: 0, lines: [ { qty: 1, @@ -58,9 +61,13 @@ export class OrderComponent implements OnInit{ }; public price: number = 1; public total: number = 0; + public tax: number = 0; + public vat: number = 0; public orderUpdate: Observable; public priceUpdate: Observable; public totalUpdate: Observable; + public taxUpdate: Observable; + public vatUpdate: Observable; // ------------------------------------ // @@ -106,9 +113,6 @@ export class OrderComponent implements OnInit{ this.orderUpdate = orderService.orderUpdate; this.orderUpdate.subscribe((order) => { this.order = order; - - //console.log('this.order > ' + JSON.stringify(this.order)); -// ------------------------------------------------ this.oLines = []; this.myLines = this.order.lines; var nl = {} as newLineItem; @@ -134,6 +138,14 @@ export class OrderComponent implements OnInit{ this.total = total; }); + this.taxUpdate = orderService.taxUpdate; + this.taxUpdate.subscribe((tax) => { + this.tax = tax; + }); + this.vatUpdate = orderService.vatUpdate; + this.vatUpdate.subscribe((vat) => { + this.vat = vat; + }); } ngOnInit() { diff --git a/src/app/order/order.service.ts b/src/app/order/order.service.ts index 0f247c5..6c7fa01 100644 --- a/src/app/order/order.service.ts +++ b/src/app/order/order.service.ts @@ -57,6 +57,9 @@ export class OrderService { externalInvoice: '', shortCode: '', token: '', + taxAmount: 0, + vatAmount: 0, + tipAmount: 0, lines: [ { qty: 1, @@ -72,6 +75,10 @@ export class OrderService { public readonly totalUpdate: Observable = this._totalUpdated.asObservable(); private _allOrdersUpdated: BehaviorSubject = new BehaviorSubject(this.dataStore.allOrders); public readonly allOrdersUpdate: Observable = this._allOrdersUpdated.asObservable(); + private _taxUpdated: BehaviorSubject = new BehaviorSubject(this.dataStore.owner.taxValue); + public readonly taxUpdate: Observable = this._taxUpdated.asObservable(); + private _vatUpdated: BehaviorSubject = new BehaviorSubject(this.dataStore.owner.vatValue); + public readonly vatUpdate: Observable = this._vatUpdated.asObservable(); public userUpdate: Observable; public ownerUpdate: Observable; private reqHeaders: HttpHeaders; @@ -95,6 +102,16 @@ export class OrderService { }); this.ownerUpdate.subscribe((owner) => { this.dataStore.owner = owner; + if (this.dataStore.owner.tax) { + this._taxUpdated.next(Object.assign({}, this.dataStore).owner.taxValue); + } else { + this._taxUpdated.next(0); + } + if (this.dataStore.owner.vat) { + this._vatUpdated.next(Object.assign({}, this.dataStore).owner.vatValue); + } else { + this._vatUpdated.next(0); + } }); } @@ -105,10 +122,10 @@ export class OrderService { if (OrderDataResponse.status == 200) { this.dataStore.order = OrderDataResponse.body!.order; this._orderUpdated.next(Object.assign({}, this.dataStore).order); - this.dataStore.order.total = 0; - for(var line of this.dataStore.order.lines) { - this.dataStore.order.total += line.qty * line.cost; - } + //this.dataStore.order.total = 0; + //for(var line of this.dataStore.order.lines) { + //this.dataStore.order.total += line.qty * line.cost; + //} this._totalUpdated.next(Object.assign({}, this.dataStore).order.total); } else { console.log('No order found'); @@ -148,6 +165,14 @@ export class OrderService { } createOrder(lineItem: LineItem) { + let localTax = 0; + let localVat = 0; + if (this.dataStore.owner.tax) { + localTax = lineItem.cost * lineItem.qty * this.dataStore.owner.taxValue / 100; + } + if (this.dataStore.owner.vat) { + localVat = lineItem.cost * lineItem.qty * this.dataStore.owner.vatValue / 100; + } var order:Order = { _id: '', address: this.dataStore.user.address, @@ -162,11 +187,13 @@ export class OrderService { externalInvoice: '', shortCode: '', token: '', + taxAmount: localTax, + vatAmount: localVat, + tipAmount: 0, lines: [lineItem] }; let obs = this.http.post<{message: string, order: Order}>(this.beUrl+'api/order', {payload: order}, { headers: this.reqHeaders, params: this.reqParams }); obs.subscribe((orderData) => { - console.log('Created order'); this.getOrder() }); @@ -192,6 +219,9 @@ export class OrderService { externalInvoice: '', shortCode: '', token: '', + taxAmount: 0, + vatAmount: 0, + tipAmount: 0, lines: [ { qty: 1, @@ -214,7 +244,7 @@ export class OrderService { this.dataStore.order.paid = paid; let obs = this.http.post(this.beUrl+'api/order', {payload: this.dataStore.order}, { headers: this.reqHeaders, params: this.reqParams }); obs.subscribe((orderData) => { - console.log('Closed order', orderData); + //console.log('Closed order', orderData); this.dataStore.order = { address: '', session: '', @@ -228,6 +258,9 @@ export class OrderService { externalInvoice: '', shortCode: '', token: '', + taxAmount: 0, + vatAmount: 0, + tipAmount: 0, lines: [ { qty: 1,