mirror of
https://github.com/frappe/books.git
synced 2025-01-22 22:58:28 +00:00
refactor: remove core js schemas
- switch to doc and json schemas instead
This commit is contained in:
parent
e0e74817be
commit
0efd2b4c33
@ -29,7 +29,6 @@ export class Frappe {
|
|||||||
|
|
||||||
errors = errors;
|
errors = errors;
|
||||||
isElectron = false;
|
isElectron = false;
|
||||||
isServer = false;
|
|
||||||
|
|
||||||
pesa: MoneyMaker;
|
pesa: MoneyMaker;
|
||||||
|
|
||||||
|
38
frappe/models/NumberSeries.ts
Normal file
38
frappe/models/NumberSeries.ts
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import { getPaddedName } from '@/utils';
|
||||||
|
import frappe from 'frappe';
|
||||||
|
import Doc from 'frappe/model/doc';
|
||||||
|
|
||||||
|
export default class NumberSeries extends Doc {
|
||||||
|
validate() {
|
||||||
|
const current = this.get('current') as number | null;
|
||||||
|
if (current) {
|
||||||
|
this.current = this.get('start');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async next(schemaName: string) {
|
||||||
|
this.validate();
|
||||||
|
|
||||||
|
const exists = await this.checkIfCurrentExists(schemaName);
|
||||||
|
if (!exists) {
|
||||||
|
return this.getPaddedName(this.current as number);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.current = (this.current as number) + 1;
|
||||||
|
await this.update();
|
||||||
|
return this.getPaddedName(this.current as number);
|
||||||
|
}
|
||||||
|
|
||||||
|
async checkIfCurrentExists(schemaName: string) {
|
||||||
|
if (!schemaName) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const name = this.getPaddedName(this.current as number);
|
||||||
|
return await frappe.db.exists(schemaName, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
getPaddedName(next: number): string {
|
||||||
|
return getPaddedName(this.name, next, this.padZeros);
|
||||||
|
}
|
||||||
|
}
|
19
frappe/models/SystemSettings.ts
Normal file
19
frappe/models/SystemSettings.ts
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import { DocValue } from 'frappe/core/types';
|
||||||
|
import Doc from 'frappe/model/doc';
|
||||||
|
import { ValidationMap } from 'frappe/model/types';
|
||||||
|
import { ValidationError } from 'frappe/utils/errors';
|
||||||
|
import { t } from 'frappe/utils/translation';
|
||||||
|
|
||||||
|
export default class SystemSettings extends Doc {
|
||||||
|
validations: ValidationMap = {
|
||||||
|
async displayPrecision(value: DocValue) {
|
||||||
|
if ((value as number) >= 0 && (value as number) <= 9) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new ValidationError(
|
||||||
|
t`Display Precision should have a value between 0 and 9.`
|
||||||
|
);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
@ -1,66 +0,0 @@
|
|||||||
import { t } from 'frappe';
|
|
||||||
import NumberSeries from './NumberSeriesDocument.js';
|
|
||||||
|
|
||||||
const referenceTypeMap = {
|
|
||||||
SalesInvoice: t`Invoice`,
|
|
||||||
PurchaseInvoice: t`Bill`,
|
|
||||||
Payment: t`Payment`,
|
|
||||||
JournalEntry: t`Journal Entry`,
|
|
||||||
Quotation: t`Quotation`,
|
|
||||||
SalesOrder: t`SalesOrder`,
|
|
||||||
Fulfillment: t`Fulfillment`,
|
|
||||||
PurchaseOrder: t`PurchaseOrder`,
|
|
||||||
PurchaseReceipt: t`PurchaseReceipt`,
|
|
||||||
'-': t`None`,
|
|
||||||
};
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'NumberSeries',
|
|
||||||
label: t`Number Series`,
|
|
||||||
documentClass: NumberSeries,
|
|
||||||
doctype: 'DocType',
|
|
||||||
isSingle: 0,
|
|
||||||
isChild: 0,
|
|
||||||
keywordFields: [],
|
|
||||||
fields: [
|
|
||||||
{
|
|
||||||
fieldname: 'name',
|
|
||||||
label: t`Prefix`,
|
|
||||||
fieldtype: 'Data',
|
|
||||||
required: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldname: 'start',
|
|
||||||
label: t`Start`,
|
|
||||||
fieldtype: 'Int',
|
|
||||||
default: 1001,
|
|
||||||
required: 1,
|
|
||||||
minvalue: 0,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldname: 'padZeros',
|
|
||||||
label: t`Pad Zeros`,
|
|
||||||
fieldtype: 'Int',
|
|
||||||
default: 4,
|
|
||||||
required: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldname: 'referenceType',
|
|
||||||
label: t`Reference Type`,
|
|
||||||
fieldtype: 'Select',
|
|
||||||
options: Object.keys(referenceTypeMap),
|
|
||||||
map: referenceTypeMap,
|
|
||||||
default: '-',
|
|
||||||
required: 1,
|
|
||||||
readOnly: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldname: 'current',
|
|
||||||
label: t`Current`,
|
|
||||||
fieldtype: 'Int',
|
|
||||||
required: 1,
|
|
||||||
readOnly: 1,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
quickEditFields: ['start', 'padZeros', 'referenceType'],
|
|
||||||
};
|
|
@ -1,37 +0,0 @@
|
|||||||
import { getPaddedName } from '@/utils';
|
|
||||||
import frappe from 'frappe';
|
|
||||||
import Document from 'frappe/model/document';
|
|
||||||
|
|
||||||
export default class NumberSeries extends Document {
|
|
||||||
validate() {
|
|
||||||
if (!this.current) {
|
|
||||||
this.current = this.start;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async next(doctype) {
|
|
||||||
this.validate();
|
|
||||||
|
|
||||||
const exists = await this.checkIfCurrentExists(doctype);
|
|
||||||
if (!exists) {
|
|
||||||
return this.getPaddedName(this.current);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.current++;
|
|
||||||
await this.update();
|
|
||||||
return this.getPaddedName(this.current);
|
|
||||||
}
|
|
||||||
|
|
||||||
async checkIfCurrentExists(doctype) {
|
|
||||||
if (!doctype) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
const name = this.getPaddedName(this.current);
|
|
||||||
return await frappe.db.exists(doctype, name);
|
|
||||||
}
|
|
||||||
|
|
||||||
getPaddedName(next) {
|
|
||||||
return getPaddedName(this.name, next, this.padZeros);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
const { t } = require('frappe');
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
name: 'PatchRun',
|
|
||||||
fields: [
|
|
||||||
{
|
|
||||||
fieldname: 'name',
|
|
||||||
fieldtype: 'Data',
|
|
||||||
label: t`Name`,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
|
@ -1,29 +0,0 @@
|
|||||||
const { t } = require('frappe');
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
name: 'SingleValue',
|
|
||||||
doctype: 'DocType',
|
|
||||||
isSingle: 0,
|
|
||||||
isChild: 0,
|
|
||||||
keywordFields: [],
|
|
||||||
fields: [
|
|
||||||
{
|
|
||||||
fieldname: 'parent',
|
|
||||||
label: t`Parent`,
|
|
||||||
fieldtype: 'Data',
|
|
||||||
required: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldname: 'fieldname',
|
|
||||||
label: t`Fieldname`,
|
|
||||||
fieldtype: 'Data',
|
|
||||||
required: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldname: 'value',
|
|
||||||
label: t`Value`,
|
|
||||||
fieldtype: 'Data',
|
|
||||||
required: 1,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
|
@ -1,94 +0,0 @@
|
|||||||
const { DateTime } = require('luxon');
|
|
||||||
const { t } = require('frappe');
|
|
||||||
const {
|
|
||||||
DEFAULT_DISPLAY_PRECISION,
|
|
||||||
DEFAULT_INTERNAL_PRECISION,
|
|
||||||
DEFAULT_LOCALE,
|
|
||||||
} = require('../../../utils/consts');
|
|
||||||
|
|
||||||
let dateFormatOptions = (() => {
|
|
||||||
let formats = [
|
|
||||||
'dd/MM/yyyy',
|
|
||||||
'MM/dd/yyyy',
|
|
||||||
'dd-MM-yyyy',
|
|
||||||
'MM-dd-yyyy',
|
|
||||||
'yyyy-MM-dd',
|
|
||||||
'd MMM, y',
|
|
||||||
'MMM d, y',
|
|
||||||
];
|
|
||||||
|
|
||||||
let today = DateTime.local();
|
|
||||||
|
|
||||||
return formats.map((format) => {
|
|
||||||
return {
|
|
||||||
label: today.toFormat(format),
|
|
||||||
value: format,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
})();
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
name: 'SystemSettings',
|
|
||||||
label: t`System Settings`,
|
|
||||||
doctype: 'DocType',
|
|
||||||
isSingle: 1,
|
|
||||||
isChild: 0,
|
|
||||||
keywordFields: [],
|
|
||||||
fields: [
|
|
||||||
{
|
|
||||||
fieldname: 'dateFormat',
|
|
||||||
label: t`Date Format`,
|
|
||||||
fieldtype: 'Select',
|
|
||||||
options: dateFormatOptions,
|
|
||||||
default: 'MMM d, y',
|
|
||||||
required: 1,
|
|
||||||
description: t`Sets the app-wide date display format.`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldname: 'locale',
|
|
||||||
label: t`Locale`,
|
|
||||||
fieldtype: 'Data',
|
|
||||||
default: DEFAULT_LOCALE,
|
|
||||||
description: t`Set the local code. This is used for number formatting.`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldname: 'displayPrecision',
|
|
||||||
label: t`Display Precision`,
|
|
||||||
fieldtype: 'Int',
|
|
||||||
default: DEFAULT_DISPLAY_PRECISION,
|
|
||||||
required: 1,
|
|
||||||
minValue: 0,
|
|
||||||
maxValue: 9,
|
|
||||||
validate(value, doc) {
|
|
||||||
if (value >= 0 && value <= 9) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
throw new frappe.errors.ValidationError(
|
|
||||||
t`Display Precision should have a value between 0 and 9.`
|
|
||||||
);
|
|
||||||
},
|
|
||||||
description: t`Sets how many digits are shown after the decimal point.`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldname: 'internalPrecision',
|
|
||||||
label: t`Internal Precision`,
|
|
||||||
fieldtype: 'Int',
|
|
||||||
minValue: 0,
|
|
||||||
default: DEFAULT_INTERNAL_PRECISION,
|
|
||||||
description: t`Sets the internal precision used for monetary calculations. Above 6 should be sufficient for most currencies.`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
fieldname: 'hideGetStarted',
|
|
||||||
label: t`Hide Get Started`,
|
|
||||||
fieldtype: 'Check',
|
|
||||||
default: 0,
|
|
||||||
description: t`Hides the Get Started section from the sidebar. Change will be visible on restart or refreshing the app.`,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
quickEditFields: [
|
|
||||||
'locale',
|
|
||||||
'dateFormat',
|
|
||||||
'displayPrecision',
|
|
||||||
'hideGetStarted',
|
|
||||||
],
|
|
||||||
};
|
|
@ -1,11 +0,0 @@
|
|||||||
import NumberSeries from './doctype/NumberSeries/NumberSeries.js';
|
|
||||||
import PatchRun from './doctype/PatchRun/PatchRun.js';
|
|
||||||
import SingleValue from './doctype/SingleValue/SingleValue.js';
|
|
||||||
import SystemSettings from './doctype/SystemSettings/SystemSettings.js';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
NumberSeries,
|
|
||||||
SingleValue,
|
|
||||||
SystemSettings,
|
|
||||||
PatchRun,
|
|
||||||
};
|
|
7
frappe/models/index.ts
Normal file
7
frappe/models/index.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import NumberSeries from './NumberSeries.js';
|
||||||
|
import SystemSettings from './SystemSettings';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
NumberSeries,
|
||||||
|
SystemSettings,
|
||||||
|
};
|
@ -22,7 +22,6 @@ import { setLanguageMap, stringifyCircular } from './utils';
|
|||||||
window.config = config;
|
window.config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
frappe.isServer = true;
|
|
||||||
frappe.isElectron = true;
|
frappe.isElectron = true;
|
||||||
|
|
||||||
const models = (await import('../models')).default;
|
const models = (await import('../models')).default;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user