mirror of
https://github.com/frappe/books.git
synced 2024-09-20 11:29:00 +00:00
refactor: move init code out of initFyo
- initFyo just contains the global fyo object
This commit is contained in:
parent
2ad80001ee
commit
eba755dd11
132
src/initFyo.ts
132
src/initFyo.ts
@ -1,130 +1,8 @@
|
|||||||
import { Fyo } from 'fyo';
|
import { Fyo } from 'fyo';
|
||||||
import { ConfigFile, ConfigKeys } from 'fyo/core/types';
|
|
||||||
import { getRegionalModels, models } from 'models';
|
/**
|
||||||
import { ModelNameEnum } from 'models/types';
|
* Global fyo: this is meant to be used only by the app. For
|
||||||
import { getRandomString, getValueMapFromList } from 'utils';
|
* testing purposes a separate instance of fyo should be initialized.
|
||||||
|
*/
|
||||||
|
|
||||||
export const fyo = new Fyo({ isTest: false, isElectron: true });
|
export const fyo = new Fyo({ isTest: false, isElectron: true });
|
||||||
|
|
||||||
async function closeDbIfConnected() {
|
|
||||||
if (!fyo.db.isConnected) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
await fyo.db.purgeCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function initializeInstance(
|
|
||||||
dbPath: string,
|
|
||||||
isNew: boolean,
|
|
||||||
countryCode: string,
|
|
||||||
fyo: Fyo
|
|
||||||
) {
|
|
||||||
if (isNew) {
|
|
||||||
await closeDbIfConnected();
|
|
||||||
countryCode = await fyo.db.createNewDatabase(dbPath, countryCode);
|
|
||||||
} else if (!fyo.db.isConnected) {
|
|
||||||
countryCode = await fyo.db.connectToDatabase(dbPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
const regionalModels = await getRegionalModels(countryCode);
|
|
||||||
await fyo.initializeAndRegister(models, regionalModels);
|
|
||||||
|
|
||||||
await setSingles(fyo);
|
|
||||||
await setCreds(fyo);
|
|
||||||
await setVersion(fyo);
|
|
||||||
setDeviceId(fyo);
|
|
||||||
await setInstanceId(fyo);
|
|
||||||
await setOpenCount(fyo);
|
|
||||||
await setCurrencySymbols(fyo);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function setSingles(fyo: Fyo) {
|
|
||||||
await fyo.doc.getDoc(ModelNameEnum.AccountingSettings);
|
|
||||||
await fyo.doc.getDoc(ModelNameEnum.GetStarted);
|
|
||||||
await fyo.doc.getDoc(ModelNameEnum.Defaults);
|
|
||||||
await fyo.doc.getDoc(ModelNameEnum.Misc);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function setCreds(fyo: Fyo) {
|
|
||||||
const email = (await fyo.getValue(
|
|
||||||
ModelNameEnum.AccountingSettings,
|
|
||||||
'email'
|
|
||||||
)) as string | undefined;
|
|
||||||
const user = fyo.auth.user;
|
|
||||||
fyo.auth.user = email ?? user;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function setVersion(fyo: Fyo) {
|
|
||||||
const version = (await fyo.getValue(
|
|
||||||
ModelNameEnum.SystemSettings,
|
|
||||||
'version'
|
|
||||||
)) as string | undefined;
|
|
||||||
|
|
||||||
const { appVersion } = fyo.store;
|
|
||||||
if (version !== appVersion) {
|
|
||||||
const systemSettings = await fyo.doc.getDoc(ModelNameEnum.SystemSettings);
|
|
||||||
await systemSettings?.setAndSync('version', appVersion);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function setDeviceId(fyo: Fyo) {
|
|
||||||
let deviceId = fyo.config.get(ConfigKeys.DeviceId) as string | undefined;
|
|
||||||
if (deviceId === undefined) {
|
|
||||||
deviceId = getRandomString();
|
|
||||||
fyo.config.set(ConfigKeys.DeviceId, deviceId);
|
|
||||||
}
|
|
||||||
|
|
||||||
fyo.store.deviceId = deviceId;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function setInstanceId(fyo: Fyo) {
|
|
||||||
const systemSettings = await fyo.doc.getDoc(ModelNameEnum.SystemSettings);
|
|
||||||
if (!systemSettings.instanceId) {
|
|
||||||
await systemSettings.setAndSync('instanceId', getRandomString());
|
|
||||||
}
|
|
||||||
|
|
||||||
fyo.store.instanceId = (await fyo.getValue(
|
|
||||||
ModelNameEnum.SystemSettings,
|
|
||||||
'instanceId'
|
|
||||||
)) as string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function setCurrencySymbols(fyo: Fyo) {
|
|
||||||
const currencies = (await fyo.db.getAll(ModelNameEnum.Currency, {
|
|
||||||
fields: ['name', 'symbol'],
|
|
||||||
})) as { name: string; symbol: string }[];
|
|
||||||
|
|
||||||
fyo.currencySymbols = getValueMapFromList(
|
|
||||||
currencies,
|
|
||||||
'name',
|
|
||||||
'symbol'
|
|
||||||
) as Record<string, string | undefined>;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function setOpenCount(fyo: Fyo) {
|
|
||||||
const misc = await fyo.doc.getDoc(ModelNameEnum.Misc);
|
|
||||||
let openCount = misc.openCount as number | null;
|
|
||||||
|
|
||||||
if (typeof openCount !== 'number') {
|
|
||||||
openCount = getOpenCountFromFiles(fyo);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof openCount !== 'number') {
|
|
||||||
openCount = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
openCount += 1;
|
|
||||||
await misc.setAndSync('openCount', openCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getOpenCountFromFiles(fyo: Fyo) {
|
|
||||||
const configFile = fyo.config.get(ConfigKeys.Files, []) as ConfigFile[];
|
|
||||||
for (const file of configFile) {
|
|
||||||
if (file.id === fyo.singles.SystemSettings?.instanceId) {
|
|
||||||
return file.openCount ?? 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
@ -11,8 +11,8 @@ import { AccountRootTypeEnum } from 'models/baseModels/Account/types';
|
|||||||
import { AccountingSettings } from 'models/baseModels/AccountingSettings/AccountingSettings';
|
import { AccountingSettings } from 'models/baseModels/AccountingSettings/AccountingSettings';
|
||||||
import { numberSeriesDefaultsMap } from 'models/baseModels/Defaults/Defaults';
|
import { numberSeriesDefaultsMap } from 'models/baseModels/Defaults/Defaults';
|
||||||
import { ModelNameEnum } from 'models/types';
|
import { ModelNameEnum } from 'models/types';
|
||||||
import { initializeInstance, setCurrencySymbols } from 'src/initFyo';
|
|
||||||
import { createRegionalRecords } from 'src/regional';
|
import { createRegionalRecords } from 'src/regional';
|
||||||
|
import { initializeInstance, setCurrencySymbols } from 'src/utils/initialization';
|
||||||
import { getRandomString } from 'utils';
|
import { getRandomString } from 'utils';
|
||||||
import { defaultUOMs } from 'utils/defaults';
|
import { defaultUOMs } from 'utils/defaults';
|
||||||
import { getCountryCodeFromCountry, getCountryInfo } from 'utils/misc';
|
import { getCountryCodeFromCountry, getCountryInfo } from 'utils/misc';
|
||||||
|
128
src/utils/initialization.ts
Normal file
128
src/utils/initialization.ts
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
import { Fyo } from 'fyo';
|
||||||
|
import { ConfigFile, ConfigKeys } from 'fyo/core/types';
|
||||||
|
import { getRegionalModels, models } from 'models/index';
|
||||||
|
import { ModelNameEnum } from 'models/types';
|
||||||
|
import { getRandomString, getValueMapFromList } from 'utils/index';
|
||||||
|
|
||||||
|
export async function initializeInstance(
|
||||||
|
dbPath: string,
|
||||||
|
isNew: boolean,
|
||||||
|
countryCode: string,
|
||||||
|
fyo: Fyo
|
||||||
|
) {
|
||||||
|
if (isNew) {
|
||||||
|
await closeDbIfConnected(fyo);
|
||||||
|
countryCode = await fyo.db.createNewDatabase(dbPath, countryCode);
|
||||||
|
} else if (!fyo.db.isConnected) {
|
||||||
|
countryCode = await fyo.db.connectToDatabase(dbPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
const regionalModels = await getRegionalModels(countryCode);
|
||||||
|
await fyo.initializeAndRegister(models, regionalModels);
|
||||||
|
|
||||||
|
await setSingles(fyo);
|
||||||
|
await setCreds(fyo);
|
||||||
|
await setVersion(fyo);
|
||||||
|
setDeviceId(fyo);
|
||||||
|
await setInstanceId(fyo);
|
||||||
|
await setOpenCount(fyo);
|
||||||
|
await setCurrencySymbols(fyo);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function closeDbIfConnected(fyo: Fyo) {
|
||||||
|
if (!fyo.db.isConnected) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await fyo.db.purgeCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function setSingles(fyo: Fyo) {
|
||||||
|
await fyo.doc.getDoc(ModelNameEnum.AccountingSettings);
|
||||||
|
await fyo.doc.getDoc(ModelNameEnum.GetStarted);
|
||||||
|
await fyo.doc.getDoc(ModelNameEnum.Defaults);
|
||||||
|
await fyo.doc.getDoc(ModelNameEnum.Misc);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function setCreds(fyo: Fyo) {
|
||||||
|
const email = (await fyo.getValue(
|
||||||
|
ModelNameEnum.AccountingSettings,
|
||||||
|
'email'
|
||||||
|
)) as string | undefined;
|
||||||
|
const user = fyo.auth.user;
|
||||||
|
fyo.auth.user = email ?? user;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function setVersion(fyo: Fyo) {
|
||||||
|
const version = (await fyo.getValue(
|
||||||
|
ModelNameEnum.SystemSettings,
|
||||||
|
'version'
|
||||||
|
)) as string | undefined;
|
||||||
|
|
||||||
|
const { appVersion } = fyo.store;
|
||||||
|
if (version !== appVersion) {
|
||||||
|
const systemSettings = await fyo.doc.getDoc(ModelNameEnum.SystemSettings);
|
||||||
|
await systemSettings?.setAndSync('version', appVersion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setDeviceId(fyo: Fyo) {
|
||||||
|
let deviceId = fyo.config.get(ConfigKeys.DeviceId) as string | undefined;
|
||||||
|
if (deviceId === undefined) {
|
||||||
|
deviceId = getRandomString();
|
||||||
|
fyo.config.set(ConfigKeys.DeviceId, deviceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
fyo.store.deviceId = deviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function setInstanceId(fyo: Fyo) {
|
||||||
|
const systemSettings = await fyo.doc.getDoc(ModelNameEnum.SystemSettings);
|
||||||
|
if (!systemSettings.instanceId) {
|
||||||
|
await systemSettings.setAndSync('instanceId', getRandomString());
|
||||||
|
}
|
||||||
|
|
||||||
|
fyo.store.instanceId = (await fyo.getValue(
|
||||||
|
ModelNameEnum.SystemSettings,
|
||||||
|
'instanceId'
|
||||||
|
)) as string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function setCurrencySymbols(fyo: Fyo) {
|
||||||
|
const currencies = (await fyo.db.getAll(ModelNameEnum.Currency, {
|
||||||
|
fields: ['name', 'symbol'],
|
||||||
|
})) as { name: string; symbol: string }[];
|
||||||
|
|
||||||
|
fyo.currencySymbols = getValueMapFromList(
|
||||||
|
currencies,
|
||||||
|
'name',
|
||||||
|
'symbol'
|
||||||
|
) as Record<string, string | undefined>;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function setOpenCount(fyo: Fyo) {
|
||||||
|
const misc = await fyo.doc.getDoc(ModelNameEnum.Misc);
|
||||||
|
let openCount = misc.openCount as number | null;
|
||||||
|
|
||||||
|
if (typeof openCount !== 'number') {
|
||||||
|
openCount = getOpenCountFromFiles(fyo);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof openCount !== 'number') {
|
||||||
|
openCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
openCount += 1;
|
||||||
|
await misc.setAndSync('openCount', openCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getOpenCountFromFiles(fyo: Fyo) {
|
||||||
|
const configFile = fyo.config.get(ConfigKeys.Files, []) as ConfigFile[];
|
||||||
|
for (const file of configFile) {
|
||||||
|
if (file.id === fyo.singles.SystemSettings?.instanceId) {
|
||||||
|
return file.openCount ?? 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user