zgo/src/app/settings/settings.component.ts

187 lines
5.2 KiB
TypeScript
Raw Normal View History

2021-10-28 20:34:48 +00:00
import { Inject, Component, OnInit, OnDestroy, ViewEncapsulation } from '@angular/core';
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
2022-03-07 19:46:00 +00:00
import { MatSlideToggleChange } from '@angular/material/slide-toggle';
2022-07-13 12:20:47 +00:00
import { UntypedFormBuilder, Validators, UntypedFormGroup, FormControl } from '@angular/forms';
2022-08-10 19:12:28 +00:00
import { Observable } from 'rxjs';
import { Owner } from '../owner.model';
2022-08-10 19:12:28 +00:00
import { XeroService } from '../xero.service';
2022-08-09 22:23:58 +00:00
import { NotifierService } from '../notifier.service';
import { faCopy } from '@fortawesome/free-solid-svg-icons';
2021-10-28 20:34:48 +00:00
@Component({
selector: 'app-settings',
templateUrl: './settings.component.html',
styleUrls: ['/settings.component.css']
})
export class SettingsComponent implements OnInit {
// ------------------------------------
//
faCopy = faCopy;
// ------------------------------------
2022-07-13 12:20:47 +00:00
settingsForm: UntypedFormGroup;
2021-10-28 20:34:48 +00:00
owner: Owner;
2022-03-07 19:46:00 +00:00
useZats: boolean;
proVersion: boolean = false;
useVKey: boolean = false;
2022-09-06 20:44:01 +00:00
linkMsg: string = 'Link to Xero';
xeroAccCod: string = '';
saveAccOk: boolean = false;
2021-11-22 20:37:45 +00:00
coins = [
{
label: 'US Dollar',
symbol: 'usd'
},{
label: 'Euro',
symbol: 'eur'
},{
label: 'British Pound',
symbol: 'gbp'
},{
label: 'Canadian Dollar',
symbol: 'cad'
},{
label: 'Australian Dollar',
symbol: 'aud'
2022-09-06 15:06:22 +00:00
},{
label: 'New Zealand Dollar',
symbol: 'nzd'
2021-11-22 20:37:45 +00:00
}
];
2022-08-09 22:23:58 +00:00
xeroLink: string = '';
localToken: string = '';
2022-08-10 19:12:28 +00:00
clientId: string = '';
clientIdUpdate: Observable<string>;
2022-09-06 20:44:01 +00:00
accCodeUpdate: Observable<string>;
linked2Xero : boolean = false;
pmtServiceURL : string = '';
2021-10-28 20:34:48 +00:00
constructor(
private notifierService : NotifierService,
2022-07-13 12:20:47 +00:00
private fb: UntypedFormBuilder,
2022-08-10 19:12:28 +00:00
public xeroService: XeroService,
2021-10-28 20:34:48 +00:00
private dialogRef: MatDialogRef<SettingsComponent>,
@Inject(MAT_DIALOG_DATA) public data: Owner) {
this.useZats = data.zats;
this.useVKey = data.payconf;
this.settingsForm = fb.group({
name: [data.name, Validators.required],
currency: [data.currency, Validators.required],
useZats: [data.zats, Validators.required],
useVKey: [data.payconf, Validators.required],
// proVersion: [data.invoices, Validators.required],
vKey: [data.viewkey]
});
if (data.payconf) {
this.settingsForm.get('vKey')!.enable();
}
this.owner = data;
this.proVersion = this.owner.invoices;
if ( this.owner.crmToken !== '' ) {
this.linked2Xero = true;
}
2022-08-10 19:12:28 +00:00
this.clientIdUpdate = xeroService.clientIdUpdate;
xeroService.getXeroConfig();
this.clientIdUpdate.subscribe(clientId => {
this.clientId = clientId;
2022-09-07 22:00:01 +00:00
this.xeroLink = `https://login.xero.com/identity/connect/authorize?response_type=code&client_id=${this.clientId}&redirect_uri=http%3A%2F%2Flocalhost%3A4200%2Fxeroauth&scope=accounting.transactions offline_access&state=${this.owner.address.substring(0, 6)}`
2022-08-10 19:12:28 +00:00
});
2022-09-06 20:44:01 +00:00
this.accCodeUpdate = xeroService.accCodeUpdate;
xeroService.getXeroAccountCode(this.owner.address);
this.accCodeUpdate.subscribe(accData => {
this.xeroAccCod = accData;
});
2021-10-28 20:34:48 +00:00
}
ngOnInit() {
this.settingsForm.get('vKey')!.disable();
this.linkMsg = 'Link to Xero';
this.pmtServiceURL + '';
if ( this.linked2Xero ) {
this.linkMsg = 'Relink to Xero';
this.pmtServiceURL = 'https://zgo.cash/pmtservice?owner=' +
this.owner._id +
'&invoiceNo=[INVOICENUMBER]&currency=[CURRENCY]&amount=[AMOUNTDUE]&shortCode=[SHORTCODE]';
}
2022-08-09 22:23:58 +00:00
}
safeURL(s: string){
return s.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
2021-10-28 20:34:48 +00:00
}
close() {
this.dialogRef.close();
}
closeIntegration() {
if ( this.xeroAccCod == '' )
this.notifierService
.showNotification("Warning: Payment confirmation disabled","Close",'success');
2021-10-28 20:34:48 +00:00
this.dialogRef.close();
}
save() {
this.owner.name = this.settingsForm.value.name;
2021-11-22 20:37:45 +00:00
this.owner.currency = this.settingsForm.value.currency;
this.owner.zats = this.settingsForm.value.useZats;
2022-07-20 16:10:24 +00:00
this.owner.payconf = this.settingsForm.value.useVKey;
this.owner.viewkey = this.settingsForm.value.vKey;
this.owner.invoices = this.settingsForm.value.proVersion
2021-10-28 20:34:48 +00:00
this.dialogRef.close(this.owner);
}
2022-03-07 19:46:00 +00:00
onChange(ob: MatSlideToggleChange) {
this.useZats = ob.checked;
}
onChangeProVersion(ob: MatSlideToggleChange) {
this.proVersion = ob.checked;
}
onChangeVKeyOn(ob: MatSlideToggleChange) {
// console.log("Viewing key switch is " +
// ( ob.checked ? "[ON]." : "[OFF]." ) );
this.useVKey = ob.checked;
if ( ob.checked )
2022-07-20 15:31:23 +00:00
this.settingsForm.get('vKey')!.enable();
else
2022-07-20 15:31:23 +00:00
this.settingsForm.get('vKey')!.disable();
}
saveAccCod() {
}
copyUrl() {
// console.log("Inside copyUrl()");
if (navigator.clipboard) {
};
try {
navigator.clipboard.writeText(this.pmtServiceURL);
this.notifierService
.showNotification("ZGo URL copied to Clipboard!!","Close",'success');
} catch (err) {
// console.error("Error", err);
this.notifierService
.showNotification("Functionality not available for your browser. Use send button instead.","Close",'error');
}
}
xeroAccCodChanged( arg: any ) {
// console.log("Account Code changed: " + arg.target.value);
// console.log(arg);
this.saveAccOk = (arg.target.value !== '');
}
2021-10-28 20:34:48 +00:00
}