2
0
mirror of https://github.com/frappe/books.git synced 2024-09-20 03:29:00 +00:00

refactor: move init code out of initFyo

- initFyo just contains the global fyo object
This commit is contained in:
18alantom 2022-10-29 13:18:37 +05:30
parent 2ad80001ee
commit eba755dd11
3 changed files with 134 additions and 128 deletions

View File

@ -1,130 +1,8 @@
import { Fyo } from 'fyo';
import { ConfigFile, ConfigKeys } from 'fyo/core/types';
import { getRegionalModels, models } from 'models';
import { ModelNameEnum } from 'models/types';
import { getRandomString, getValueMapFromList } from 'utils';
export const fyo = new Fyo({ isTest: false, isElectron: true });
/**
* Global fyo: this is meant to be used only by the app. For
* testing purposes a separate instance of fyo should be initialized.
*/
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;
}
export const fyo = new Fyo({ isTest: false, isElectron: true });

View File

@ -11,8 +11,8 @@ import { AccountRootTypeEnum } from 'models/baseModels/Account/types';
import { AccountingSettings } from 'models/baseModels/AccountingSettings/AccountingSettings';
import { numberSeriesDefaultsMap } from 'models/baseModels/Defaults/Defaults';
import { ModelNameEnum } from 'models/types';
import { initializeInstance, setCurrencySymbols } from 'src/initFyo';
import { createRegionalRecords } from 'src/regional';
import { initializeInstance, setCurrencySymbols } from 'src/utils/initialization';
import { getRandomString } from 'utils';
import { defaultUOMs } from 'utils/defaults';
import { getCountryCodeFromCountry, getCountryInfo } from 'utils/misc';

128
src/utils/initialization.ts Normal file
View 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;
}