import {Component, Input, OnInit, QueryList, ViewChildren} from "@angular/core"; import {DeleteDialog} from "../sharedmodules/controls/NonAngularDialogs/DeleteDialog"; import {InvoiceBuilderEventManager} from "./utils/InvoiceBuilderEventManager"; import {InvoiceDetailsItem} from "./InvoiceDetailsItem"; @Component({ selector:'invoice-details', template:`

Invoice Totals

Sub Total {{Invoice.SubTotal | formatCurrency}}
{{TaxLabel}} {{Invoice.Tax | formatCurrency}}
Paid {{Invoice.Paid | formatCurrency}}
Total Due {{Invoice.TotalDue | formatCurrency}}
`, styles:[` .rnSubTotalBox .rnSubTotalValue{ float:right; } .rnSubTotalItem{ padding:7px 12px; } .rnTotalDue{ background: #f8f8f8 none repeat scroll 0 0; font-weight: bold; border-top: 1px solid #e1e1e1; padding:7px 12px; } `] }) export class InvoiceDetails implements OnInit{ @Input() public Invoice:Invoice; @ViewChildren(InvoiceDetailsItem) detailItems:QueryList; public TaxLabel=rnparams.settings.TaxesOptions.TaxName; public TaxEnable=rnparams.settings.TaxesOptions.Enable; constructor(private eventManager:InvoiceBuilderEventManager) { this.eventManager.UpdateTotals.subscribe(()=>this.TotalRecalculated()); } public Services=rnparams.services; public ItemSelected(item:{Text:string,Value:Service}) { if(item.Value!=null) { } } public MarkAllAsDirty(){ this.detailItems.forEach(item=>item.MarkAllFieldsAsDirty()); } public get IsValid(){ let isValid=true; this.detailItems.forEach(item=>{ if(!item.IsValid) isValid=false; }); return isValid; } public async RemoveItem(row:InvoiceDetail) { if(row.Name.trim()==''||await DeleteDialog.Show(row.Name) ) { this.Invoice.Detail.splice(this.Invoice.Detail.indexOf(row), 1); this.TotalRecalculated(); } } public TotalRecalculated(){ debugger; let subTotal=0; let tax=0; let total=0; let paid=0; debugger; for(let item of this.Invoice.Detail) { subTotal+=item.SubTotal; tax+=item.TaxTotal; total+=item.Total; } for(let item of this.Invoice.Payments) { paid+=parseFloat(item.Amount.toString()); } this.Invoice.Paid=paid*-1; this.Invoice.Tax=tax; this.Invoice.SubTotal=subTotal; this.Invoice.TotalDue=subTotal+tax-paid; } AddItem() { this.Invoice.Detail.push({ Rate:0, InvoiceDetailId:0, InvoiceId:0, Name:'', Notes:'', Qty:1, Taxable:false, TaxRate:0, Total:0, SaveItem:false, SubTotal:0, TaxTotal:0 }); this.TotalRecalculated(); } ngOnInit(): void { if(this.Invoice.InvoiceId==0||this.Invoice.Detail.length==0) this.AddItem(); } }