import {Component, ViewChild} from "@angular/core";
import {WpJsonApi} from "../sharedmodules/wp-elements/Services/WpJsonApi";
import {UserDialog} from "./dialogs/UserDialog";
import {ToastService} from "../sharedmodules/wp-elements/Services/ToastService";
import {FormHandlerBase} from "./FormHandlerBase";
import {InvoiceDetails} from "./InvoiceDetails";
import {Payments} from "./Payments/Payments";
@Component({
selector:'app-root',
template:`
`,
styles:[`
.rnTitle{
margin: 0;
font-size: 21px;
line-height: 1.2;
text-shadow: 1px 1px 1px #fff;
padding: 0;
font-family: HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",sans-serif;
font-weight: 400;
}
`]
})
export class InvoiceBuilderComponent extends FormHandlerBase{
public InvoiceId=rnparams.invoice_id;
public Users;
public Settings:Settings;
public Invoice:Invoice;
public IsSaving=false;
@ViewChild(InvoiceDetails) invoiceDetailComponent:InvoiceDetails;
@ViewChild(Payments) paymentsComponent:Payments;
@ViewChild('UserDialog') public dialog:UserDialog;
constructor(private ajax:WpJsonApi,private toast:ToastService){
super();
let currentDate=new Date(rnparams.current_time*1000);
let dueDate=new Date(rnparams.current_time*1000);
dueDate.setMonth(dueDate.getMonth()+1);
this.Users=rnparams.users;
if(rnparams.invoice_data!=null)
this.Invoice=rnparams.invoice_data;
else
this.Invoice={
Ref:'',
InvoiceId:0,
FormattedInvoiceNumber:'',
InvoiceNumber:0,
ClientDisplayName:'',
ClientId:null,
CreationDate:currentDate.getTime(),
Description:'',
Discount:0,
DueDate:dueDate.getTime(),
Paid:0,
Status:0,
SubTotal:0,
Tax:0,
TermsAndConditions:rnparams.settings.InvoiceOptions.TermsAndConditions,
TotalDue:0,
Detail:[],
Payments:[]
}
}
public UserCreated(user:{Label:string,Id:number}){
this.Users.push(user);
this.Invoice.ClientId=user.Id;
this.Invoice.ClientDisplayName=user.Label;
}
public CreateUser(){
this.dialog.Open();
}
async Save() {
this.invoiceDetailComponent.MarkAllAsDirty();
this.paymentsComponent.MarkAllAsDirty();
this.MarkAllFieldsAsDirty();
if(!this.IsValid||!this.invoiceDetailComponent.IsValid||!this.paymentsComponent.IsValid)
return;
this.IsSaving=true;
let tempItems=this.Invoice.Detail.slice();
let tempPayments=this.Invoice.Payments.slice();
let result= await this.ajax.Post('/invoices/save',{InvoiceData:this.Invoice});
if(result==null)
return;
try{
this.Invoice.InvoiceId=result.InvoiceId;
for(let i=0;i