Files
cbsnexora/src/app/settings/settings.service.ts
T

271 lines
6.8 KiB
TypeScript

/** Angular Imports */
import { Injectable } from '@angular/core';
import { AlertService } from 'app/core/alert/alert.service';
import { Dates } from 'app/core/utils/dates';
import { safeParse, safeParseArray, safeParseObject } from 'app/core/utils/json';
/** Environment Imports */
import { environment } from '../../environments/environment';
/**
* Settings Service
*/
@Injectable({
providedIn: 'root'
})
export class SettingsService {
public static businessDateFormat = 'yyyy-MM-dd';
public static businessDateConfigName = 'enable-business-date';
public static businessDateType = 'BUSINESS_DATE';
public static cobDateType = 'COB_DATE';
minAllowedDate = new Date(1950, 0, 1);
maxAllowedDate = new Date(2100, 0, 1);
constructor(
private alertService: AlertService,
private dateUtils: Dates
) {}
/**
* Sets date format setting throughout the app.
* @param {string} dateFormat Date Format
*/
setDateFormat(dateFormat: string) {
localStorage.setItem('mifosXDateFormat', JSON.stringify(dateFormat));
}
/**
* Sets language setting throughout the app.
* @param {any} language Language.
*/
setLanguage(language: { name: string; code: string }) {
localStorage.setItem('mifosXLanguage', JSON.stringify(language));
}
/**
* Sets decimals to Display throughout the app.
* @param {string} decimals.
*/
setDecimalToDisplay(decimals: string) {
localStorage.setItem('mifosXDecimalsToDisplay', decimals);
}
setDefaultLanguage() {
const defaultLanguage = environment.defaultLanguage ? environment.defaultLanguage : 'en-US';
this.setLanguage({
name: defaultLanguage,
code: defaultLanguage.substring(0, 2)
});
}
/**
* Sets server URL setting throughout the app.
* @param {string} url URL
*/
setServer(url: string) {
localStorage.setItem('mifosXServerURL', url);
}
/**
* Sets server URL setting throughout the app.
* @param {string[]} list List of default servers
*/
setServers(list: string[]) {
localStorage.setItem('mifosXServers', JSON.stringify(list));
}
/**
* Sets Tenant Identifiers list setting throughout the app.
* @param {string[]} list List of default tenants
*/
setTenantIdentifiers(list: string[]) {
localStorage.setItem('mifosXTenantIdentifiers', JSON.stringify(list));
}
/**
* Sets Tenant Identifier setting throughout the app.
* @param {string} Tenant Identifier
*/
setTenantIdentifier(tenantIdentifier: string) {
localStorage.setItem('mifosXTenantIdentifier', tenantIdentifier);
}
/**
* Sets server Date setting for max datepicker, default today
* @param {string} date
*/
setBusinessDate(date: string) {
localStorage.setItem('mifosXServerDate', date);
}
/**
* Sets server Date config is enabled
* @param {string} enabled
*/
setBusinessDateConfig(enabled: string) {
localStorage.setItem('mifosXServerBusinessDateEnabled', enabled);
}
/**
* Returns date format setting.
*/
get dateFormat(): string {
const parsed = safeParse<string | null>(localStorage.getItem('mifosXDateFormat'), null);
return typeof parsed === 'string' && parsed.length > 0 ? parsed : 'dd MMMM yyyy';
}
/**
* Returns language setting
*/
get language() {
if (!localStorage.getItem('mifosXLanguage')) {
this.setDefaultLanguage();
}
return safeParseObject<{ name: string; code: string } | undefined>(
localStorage.getItem('mifosXLanguage'),
undefined
);
}
get languageCode() {
const currentLanguage = this.language.code;
if (currentLanguage === 'es') {
return 'es-MX';
}
if (currentLanguage === 'en') {
return 'en-US';
}
return currentLanguage + '-' + currentLanguage.toUpperCase();
}
/**
* Returns Decimals to Display setting
*/
get decimals() {
if (!localStorage.getItem('mifosXDecimalsToDisplay')) {
return '2';
}
return localStorage.getItem('mifosXDecimalsToDisplay');
}
/**
* Returns list of default server
*/
get servers() {
return safeParseArray<string>(localStorage.getItem('mifosXServers'), []);
}
/**
* Returns server setting
*/
get server() {
if (localStorage.getItem('mifosXServerURL')) {
return localStorage.getItem('mifosXServerURL');
}
if (environment.baseApiUrl && environment.baseApiUrl !== '') {
return environment.baseApiUrl;
} else {
return this.servers[0];
}
}
/**
* Returns server url with api path without version
*/
get baseServerUrl() {
return this.server + environment.apiProvider;
}
/**
* Returns server url with api path and version
*/
get serverUrl() {
return this.server + environment.apiProvider + environment.apiVersion;
}
/**
* Returns server url with api path and version
*/
get serverHost() {
return this.server;
}
/**
* Returns current Business date server
*/
get businessDate(): Date {
return this.dateUtils.convertToDate(localStorage.getItem('mifosXServerDate'), SettingsService.businessDateFormat);
}
/**
* Returns current Business date Config if it's enabled
*/
get businessDateConfig(): any {
return localStorage.getItem('mifosXServerBusinessDateEnabled');
}
/**
* Returns min Past date
*/
get minPastDate(): Date {
return this.minAllowedDate;
}
/**
* Returns max Future date
*/
get maxFutureDate(): Date {
return this.maxAllowedDate;
}
/**
* Returns list of Tenant Identifiers
*/
get tenantIdentifiers(): any {
return safeParseArray<string>(localStorage.getItem('mifosXTenantIdentifiers'), []);
}
/**
* Returns Tenant Identifier
*/
get tenantIdentifier(): string {
return localStorage.getItem('mifosXTenantIdentifier');
}
/**
* Validate If the enable_business_date configuration is enabled or disabled.
*/
validateBusinessDateStatus(configurations: any) {
configurations.some((config: any) => {
if (config.name === SettingsService.businessDateConfigName) {
return config.enabled;
}
});
}
/**
* Get the Business Date or COB Date.
*/
getBusinessDates(businessDateData: any, dateType: string): void {
businessDateData.some((data: any) => {
if (data.type === dateType) {
const dateVal = new Date(data.date);
this.setBusinessDate(this.dateUtils.formatDate(dateVal, SettingsService.businessDateFormat));
this.alertService.alert({
type: dateType + ' Set',
message: this.dateUtils.formatDate(dateVal, this.dateFormat)
});
return;
}
});
}
setThemeDarkEnabled(enabled: boolean) {
localStorage.setItem('mifosXThemeDarkEnabled', JSON.stringify(enabled));
}
get themeDarkEnabled(): boolean {
return safeParse<boolean>(localStorage.getItem('mifosXThemeDarkEnabled'), false);
}
}