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

480 lines
16 KiB
TypeScript

import { Inject, Component, OnInit, OnDestroy, ViewEncapsulation } from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatSlideToggleChange } from '@angular/material/slide-toggle';
import { UntypedFormBuilder, Validators, UntypedFormGroup, FormControl } from '@angular/forms';
import { Subject, Observable } from 'rxjs';
import { Owner } from '../owner.model';
import { XeroService } from '../xero.service';
import { WoocommerceService } from '../woocommerce.service';
import { NotifierService } from '../notifier.service';
import { faCopy } from '@fortawesome/free-solid-svg-icons';
import { LanguageService } from '../language.service';
@Component({
selector: 'app-settings',
templateUrl: './settings.component.html',
styleUrls: ['/settings.component.css']
})
export class SettingsComponent implements OnInit {
// ------------------------------------
//
faCopy = faCopy;
// ------------------------------------
settingsForm: UntypedFormGroup;
accCodForm: UntypedFormGroup;
owner: Owner;
useZats: boolean;
useTax: boolean;
useVat: boolean;
useTips: boolean;
proVersion: boolean = false;
linkMsg: string = '';
xeroAccCod: string = '';
saveAccOk: boolean = false;
private viewkey: string = '';
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'
},{
label: 'New Zealand Dollar',
symbol: 'nzd'
}
];
xeroLink: string = '';
localToken: string = '';
clientId: string = '';
wooOwner: string = '';
wooToken: string = '';
wooUrl: string = '';
wooOwnerUpdate: Observable<string>;
wooTokenUpdate: Observable<string>;
wooUrlUpdate: Observable<string>;
clientIdUpdate: Observable<string>;
accCodeUpdate: Observable<string>;
linked2Xero : boolean = false;
pmtServiceURL : string = '';
// -------------------------------------
//
// Language Support
//
vE = {
settingsAcodeInvalid : '',
settingsAcodeLbl : '',
settingsAcodeNotsaved : '',
settingsAcodeSaved : '',
settingsCloseBtn : '',
settingsConfirmPayments : '',
settingsCopyNotavail : '',
settingsCurrencyLbl : '',
settingsLink2Xero : '',
settingsNameLbl : '',
settingsNamePlaceholder : '',
settingsNotservClose : '',
settingsNotservError : '',
settingsNotservSuccess : '',
settingsNotservWarning : '',
settingsOwneridCopied : '',
settingsOwneridNotcopied : '',
settingsPmtservURL : '',
settingsRelink2Xero : '',
settingsSaveBtn : '',
settingsTabIntegrations : '',
settingsTabMainlbl : '',
settingsURLCopied : '',
settingsUseSatoshi : '',
settingsViewTitle : '',
settingsVkeyLbl : '',
settingsVkeyPlaceholder : '',
settingsWCClosebtn : '',
settingsWCGentoken : '',
settingsWCLbl : '',
settingsWCOwnerlbl : '',
settingsWCTokenCopied : '',
settingsWCTokenGenerated : '',
settingsWCTokenGenfail : '',
settingsWCTokenNotcopied : '',
settingsXeroClosebtn : '',
settingsXeroLbl : '',
settingsXeropmtConfirmdis : '',
settingsXeroSavebtn : '',
settingsUseTips : '',
settingsUseTax : '',
settingsUseVAT : '',
settingsSalesTaxRateLbl : '',
settingsSalesTaxRateTxt : '',
settingsSalesVATRateLbl : '',
settingsSalesVATRateTxt : ''
};
//
languageRdy = new Subject<boolean>();
vKaccess = true;
// ------------------------------------------------------------
constructor(
private languageService : LanguageService,
private notifierService : NotifierService,
private fb: UntypedFormBuilder,
public xeroService: XeroService,
public wooService: WoocommerceService,
private dialogRef: MatDialogRef<SettingsComponent>,
@Inject(MAT_DIALOG_DATA) public data: {o: Owner}) {
this.useZats = data.o.zats;
this.useTax = data.o.tax;
this.useVat = data.o.vat;
this.useTips = data.o.tips;
this.settingsForm = fb.group({
name: [data.o.name, Validators.required],
currency: [data.o.currency, Validators.required],
useZats: [data.o.zats, Validators.required],
useVKey: [data.o.payconf, Validators.required],
vKey: [data.o.viewkey],
useTips: [data.o.tips, Validators.required],
useTax: [data.o.tax, Validators.required],
taxRate: [data.o.taxValue],
useVat: [data.o.vat, Validators.required],
vatRate: [data.o.vatValue]
});
this.accCodForm = fb.group ({
xAcc: [this.xeroAccCod]
});
if (data.o.payconf) {
this.vKaccess = false;
//this.settingsForm.get('vKey')!.enable();
}
this.owner = data.o;
this.viewkey = data.o.viewkey;
this.proVersion = this.owner.invoices;
if ( this.owner.crmToken !== '' ) {
this.linked2Xero = true;
}
this.clientIdUpdate = xeroService.clientIdUpdate;
xeroService.getXeroConfig();
this.clientIdUpdate.subscribe(clientId => {
this.clientId = clientId;
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)}`
});
this.accCodeUpdate = xeroService.accCodeUpdate;
xeroService.getXeroAccountCode();
this.accCodeUpdate.subscribe(accData => {
this.xeroAccCod = accData;
//console.log("xeroAccCod -> [" + this.xeroAccCod + "]");
this.accCodForm.get('xAcc')!.setValue(this.xeroAccCod);
});
this.wooOwnerUpdate = wooService.ownerUpdate;
this.wooTokenUpdate = wooService.tokenUpdate;
this.wooUrlUpdate = wooService.siteurlUpdate;
wooService.getWooToken(this.owner._id!);
this.wooOwnerUpdate.subscribe(owData => {
this.wooOwner = owData;
});
this.wooTokenUpdate.subscribe(tkData => {
this.wooToken = tkData;
});
this.wooUrlUpdate.subscribe(uData => {
this.wooUrl = uData;
});
}
ngOnInit() {
//this.settingsForm.get('vKey')!.disable();
//
this.vKaccess = true;
this.chgUILanguage();
//console.log('SETTINGS: Return from chgUILanguage()');
//
this.languageRdy.subscribe (
data => {
this.linkMsg = this.vE.settingsLink2Xero;
this.pmtServiceURL + '';
if ( this.linked2Xero ) {
this.linkMsg = this.vE.settingsRelink2Xero; //'Relink to Xero';
this.pmtServiceURL =
'https://zgo.cash/pmtservice?owner=' +
this.owner._id +
'&invoiceNo=[INVOICENUMBER]&currency=[CURRENCY]&amount=[AMOUNTDUE]&shortCode=[SHORTCODE]';
}
});
}
safeURL(s: string){
return s.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
}
close() {
this.dialogRef.close(null);
}
closeIntegration() {
if ( (this.xeroAccCod == '') && (this.linked2Xero) )
this.notifierService
.showNotification(this.vE.settingsXeropmtConfirmdis ,
this.vE.settingsNotservClose,'warning',
this.vE.settingsNotservWarning);
this.dialogRef.close();
}
save() {
this.owner.name = this.settingsForm.value.name;
this.owner.currency = this.settingsForm.value.currency;
this.owner.zats = this.settingsForm.value.useZats;
this.owner.payconf = this.settingsForm.value.useVKey;
this.owner.viewkey = this.settingsForm.value.vKey;
this.owner.tax = this.settingsForm.value.useTax;
this.owner.taxValue = this.settingsForm.value.taxRate;
this.owner.vat = this.settingsForm.value.useVat;
this.owner.vatValue = this.settingsForm.value.vatRate;
this.owner.tips = this.settingsForm.value.useTips;
//console.log('Settings component key: ' + this.owner.viewkey);
this.dialogRef.close(this.owner);
}
onChange(ob: MatSlideToggleChange) {
this.useZats = ob.checked;
}
onChangeTax(ob: MatSlideToggleChange) {
this.useTax = ob.checked;
}
onChangeVat(ob: MatSlideToggleChange) {
this.useVat = ob.checked;
}
onChangeTips(ob: MatSlideToggleChange) {
this.useTips = ob.checked;
}
onChangeVKeyOn(ob: MatSlideToggleChange) {
// console.log("Viewing key switch is " +
// ( ob.checked ? "[ON]." : "[OFF]." ) );
if ( ob.checked ) {
//this.settingsForm.get('vKey')!.enable();
this.vKaccess = false;
} else {
//this.settingsForm.get('vKey')!.disable();
this.vKaccess = true;
}
}
copyUrl() {
// console.log("Inside copyUrl()");
if (navigator.clipboard) {
};
try {
navigator.clipboard.writeText(this.pmtServiceURL);
this.notifierService
.showNotification(this.vE.settingsURLCopied,
this.vE.settingsNotservClose,
'success',
this.vE.settingsNotservSuccess);
} catch (err) {
// console.error("Error", err);
this.notifierService
.showNotification(this.vE.settingsCopyNotavail,
this.vE.settingsNotservClose,
'error',
this.vE.settingsNotservError);
}
}
copyWooOwner(){
try {
navigator.clipboard.writeText(this.wooOwner);
this.notifierService.showNotification(this.vE.settingsOwneridCopied,
this.vE.settingsNotservClose,
"success",
this.vE.settingsNotservSuccess);
} catch (err) {
this.notifierService.showNotification(this.vE.settingsOwneridNotcopied,
this.vE.settingsNotservClose,
"error",
this.vE.settingsNotservError);
}
}
copyWooToken(){
try {
navigator.clipboard.writeText(this.wooToken);
this.notifierService.showNotification(this.vE.settingsWCTokenCopied,
this.vE.settingsNotservClose,
"success",
this.vE.settingsNotservSuccess);
} catch (err) {
this.notifierService.showNotification(this.vE.settingsWCTokenNotcopied,
this.vE.settingsNotservClose,
"error",
this.vE.settingsNotservError);
}
}
generateWooToken(){
this.wooService.createWooToken(this.owner._id!).subscribe(responseData => {
if (responseData.status == 202) {
this.notifierService.showNotification(
this.vE.settingsWCTokenGenerated,
this.vE.settingsNotservClose,
"success",
this.vE.settingsNotservSuccess);
this.wooService.getWooToken(this.owner._id!);
this.wooOwnerUpdate.subscribe(owData => {
this.wooOwner = owData;
});
this.wooTokenUpdate.subscribe(tkData => {
this.wooToken = tkData;
});
this.wooUrlUpdate.subscribe(uData => {
this.wooUrl = uData;
});
close();
} else {
this.notifierService.showNotification(
this.vE.settingsWCTokenGenfail,
this.vE.settingsNotservClose,
"error",
this.vE.settingsNotservError);
}
});
}
saveAccCod() {
this.xeroAccCod = this.accCodForm.value.xAcc;
//console.log(">>> " + this.xeroAccCod);
if ( this.xeroAccCod.length <= 10 ) {
const obs = this.xeroService
.setXeroAccountCode(this.owner.address,
this.xeroAccCod);
obs.subscribe({ next: responseData => {
if (responseData.status == 202) {
//console.log('Account saved');
this.notifierService
.showNotification(this.vE.settingsAcodeSaved,
this.vE.settingsNotservClose,
"success",
this.vE.settingsNotservSuccess);
} else {
//console.log('Account not saved -> status[' + responseData.status + ']');
this.notifierService
.showNotification(
this.vE.settingsAcodeNotsaved,
this.vE.settingsNotservClose,
"error",
this.vE.settingsNotservError);
}
},
error: error => {
//console.log('Error saving Account Code -> ' + error.msg)
}});
} else {
this.notifierService
.showNotification(
this.vE.settingsAcodeInvalid,
this.vE.settingsNotservClose,
"error",
this.vE.settingsNotservError);
};
}
/*
xeroAccCodChanged( arg: any ) {
console.log("Account Code changed: " + arg.target.value);
// console.log(arg);
this.saveAccOk = (arg.target.value != this.xeroAccCod );
}
*/
checkStatus( arg : any ) {
//console.log('onChange - checkStatus');
//console.log(arg.target.value);
this.saveAccOk = (arg.target.value != this.xeroAccCod );
}
chgUILanguage(){
//console.log('SETTINGS.chgUILanguage Called ');
this.languageService.getViewElements('settings').subscribe({
next: response => {
//console.log('Received >> ', response );
//console.log('Language Code : ', response.language);
//console.log('Component Name : ',response.component);
//console.log('Language data : ',response.data);
this.vE.settingsViewTitle = response.data.settings_view_title;
this.vE.settingsTabMainlbl = response.data.settings_tab_mainlbl;
this.vE.settingsNameLbl = response.data.settings_name_lbl;
this.vE.settingsCurrencyLbl = response.data.settings_currency_lbl;
this.vE.settingsNamePlaceholder = response.data.settings_name_placeholder;
this.vE.settingsUseSatoshi = response.data.settings_use_satoshi;
this.vE.settingsVkeyLbl = response.data.settings_vkey_lbl;
this.vE.settingsVkeyPlaceholder = response.data.settings_vkey_placeholder;
this.vE.settingsConfirmPayments = response.data.settings_confirm_payments;
this.vE.settingsCloseBtn = response.data.settings_close_btn;
this.vE.settingsSaveBtn = response.data.settings_save_btn;
this.vE.settingsTabIntegrations = response.data.settings_tab_integrations;
this.vE.settingsXeroLbl = response.data.settings_xero_lbl;
this.vE.settingsLink2Xero = response.data.settings_link_2xero;
this.vE.settingsRelink2Xero = response.data.settings_relink_2xero;
this.vE.settingsXeropmtConfirmdis = response.data.settings_xeropmt_confirmdis;
this.vE.settingsNotservClose = response.data.settings_notserv_close;
this.vE.settingsNotservWarning = response.data.settings_notserv_warning;
this.vE.settingsPmtservURL = response.data.settings_pmtserv_url;
this.vE.settingsAcodeLbl = response.data.settings_acode_lbl;
this.vE.settingsXeroClosebtn = response.data.settings_xero_closebtn;
this.vE.settingsXeroSavebtn = response.data.settings_xero_savebtn;
this.vE.settingsWCLbl = response.data.settings_wc_lbl;
this.vE.settingsWCGentoken = response.data.settings_wc_gentoken;
this.vE.settingsWCOwnerlbl = response.data.settings_wc_ownerlbl;
this.vE.settingsWCClosebtn = response.data.settings_wc_closebtn;
this.vE.settingsURLCopied = response.data.settings_url_copied;
this.vE.settingsNotservSuccess = response.data.settings_notserv_success;
this.vE.settingsNotservError = response.data.settings_notserv_error;
this.vE.settingsCopyNotavail = response.data.settings_copy_notavail;
this.vE.settingsOwneridCopied = response.data.settings_ownerid_copied;
this.vE.settingsOwneridNotcopied = response.data.settings_ownerid_notcopied;
this.vE.settingsWCTokenCopied = response.data.settings_wctoken_copied;
this.vE.settingsWCTokenNotcopied = response.data.settings_wctoken_notcopied;
this.vE.settingsWCTokenGenerated = response.data.settings_wctoken_generated;
this.vE.settingsWCTokenGenfail = response.data.settings_wctoken_genfail;
this.vE.settingsAcodeSaved = response.data.settings_acode_saved;
this.vE.settingsAcodeNotsaved = response.data.settings_acode_notsaved;
this.vE.settingsAcodeInvalid = response.data.settings_acode_invalid;
this.vE.settingsUseTips = response.data.settings_use_tips;
this.vE.settingsUseTax = response.data.settings_use_tax;
this.vE.settingsUseVAT = response.data.settings_use_vat;
this.vE.settingsSalesTaxRateLbl = response.data.settings_sales_tax_rate_lbl;
this.vE.settingsSalesTaxRateTxt = response.data.settings_sales_tax_rate_txt;
this.vE.settingsSalesVATRateLbl = response.data.settings_sales_vat_rate_lbl;
this.vE.settingsSalesVATRateTxt = response.data.settings_sales_vat_rate_txt;
//
this.languageRdy.next(true);
},
error: error => { console.log('Error >> ',error); }
});
}
}