2022-04-19 05:59:36 +00:00
|
|
|
import { t } from 'fyo';
|
2022-04-24 06:48:44 +00:00
|
|
|
import { Doc } from 'fyo/model/doc';
|
2022-04-23 09:23:44 +00:00
|
|
|
import {
|
|
|
|
DependsOnMap,
|
|
|
|
FormulaMap,
|
|
|
|
ListsMap,
|
|
|
|
ValidationMap,
|
|
|
|
} from 'fyo/model/types';
|
2022-04-22 11:02:03 +00:00
|
|
|
import { validateEmail } from 'fyo/model/validationFunction';
|
2022-04-24 06:48:44 +00:00
|
|
|
import { getCountryInfo, getFiscalYear } from 'utils/misc';
|
2022-04-11 09:41:49 +00:00
|
|
|
|
|
|
|
export function getCOAList() {
|
|
|
|
return [
|
2022-04-18 11:29:20 +00:00
|
|
|
{ name: t`Standard Chart of Accounts`, countryCode: '' },
|
2022-04-11 09:41:49 +00:00
|
|
|
|
|
|
|
{ countryCode: 'ae', name: 'U.A.E - Chart of Accounts' },
|
|
|
|
{
|
|
|
|
countryCode: 'ca',
|
|
|
|
name: 'Canada - Plan comptable pour les provinces francophones',
|
|
|
|
},
|
|
|
|
{ countryCode: 'gt', name: 'Guatemala - Cuentas' },
|
|
|
|
{ countryCode: 'hu', name: 'Hungary - Chart of Accounts' },
|
|
|
|
{ countryCode: 'id', name: 'Indonesia - Chart of Accounts' },
|
|
|
|
{ countryCode: 'in', name: 'India - Chart of Accounts' },
|
|
|
|
{ countryCode: 'mx', name: 'Mexico - Plan de Cuentas' },
|
|
|
|
{ countryCode: 'ni', name: 'Nicaragua - Catalogo de Cuentas' },
|
|
|
|
{ countryCode: 'nl', name: 'Netherlands - Grootboekschema' },
|
|
|
|
{ countryCode: 'sg', name: 'Singapore - Chart of Accounts' },
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
export class SetupWizard extends Doc {
|
2022-04-23 09:23:44 +00:00
|
|
|
dependsOn: DependsOnMap = {
|
|
|
|
fiscalYearStart: ['country'],
|
|
|
|
fiscalYearEnd: ['country'],
|
|
|
|
currency: ['country'],
|
|
|
|
chartOfAccounts: ['country'],
|
|
|
|
};
|
|
|
|
|
2022-04-11 09:41:49 +00:00
|
|
|
formulas: FormulaMap = {
|
|
|
|
fiscalYearStart: async () => {
|
|
|
|
if (!this.country) return;
|
|
|
|
|
2022-04-23 09:23:44 +00:00
|
|
|
const countryInfo = getCountryInfo();
|
2022-04-24 06:48:44 +00:00
|
|
|
const fyStart =
|
|
|
|
countryInfo[this.country as string]?.fiscal_year_start ?? '';
|
|
|
|
return getFiscalYear(fyStart, true);
|
2022-04-11 09:41:49 +00:00
|
|
|
},
|
|
|
|
fiscalYearEnd: async () => {
|
|
|
|
if (!this.country) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2022-04-23 09:23:44 +00:00
|
|
|
const countryInfo = getCountryInfo();
|
2022-04-24 06:48:44 +00:00
|
|
|
const fyEnd = countryInfo[this.country as string]?.fiscal_year_end ?? '';
|
|
|
|
return getFiscalYear(fyEnd, false);
|
2022-04-11 09:41:49 +00:00
|
|
|
},
|
|
|
|
currency: async () => {
|
|
|
|
if (!this.country) {
|
|
|
|
return;
|
|
|
|
}
|
2022-04-23 09:23:44 +00:00
|
|
|
const countryInfo = getCountryInfo();
|
|
|
|
return countryInfo[this.country as string]?.currency;
|
2022-04-11 09:41:49 +00:00
|
|
|
},
|
|
|
|
chartOfAccounts: async () => {
|
|
|
|
const country = this.get('country') as string | undefined;
|
|
|
|
if (country === undefined) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2022-04-23 09:23:44 +00:00
|
|
|
const countryInfo = getCountryInfo();
|
2022-04-11 09:41:49 +00:00
|
|
|
const code = (countryInfo[country] as undefined | { code: string })?.code;
|
|
|
|
if (code === undefined) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
const coaList = getCOAList();
|
|
|
|
const coa = coaList.find(({ countryCode }) => countryCode === code);
|
|
|
|
|
|
|
|
if (coa === undefined) {
|
|
|
|
return coaList[0].name;
|
|
|
|
}
|
|
|
|
return coa.name;
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2022-04-22 11:02:03 +00:00
|
|
|
validations: ValidationMap = {
|
|
|
|
email: validateEmail,
|
|
|
|
};
|
|
|
|
|
2022-04-11 09:41:49 +00:00
|
|
|
static lists: ListsMap = {
|
2022-04-23 09:23:44 +00:00
|
|
|
country: () => Object.keys(getCountryInfo()),
|
2022-04-11 09:41:49 +00:00
|
|
|
chartOfAccounts: () => getCOAList().map(({ name }) => name),
|
|
|
|
};
|
|
|
|
}
|