From 66b3dc6dc7043857ed1dd7aab3aea331003e6e84 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 7 Feb 2018 22:14:59 +0530 Subject: [PATCH] add number series --- backends/sqlite.js | 2 +- client/view/controls/table.js | 4 +++- model/index.js | 16 +++++++++++++ models/doctype/number_series/number_series.js | 24 +++++++++++++++++++ .../doctype/number_series/number_series.json | 21 ++++++++++++++++ tests/test_number_series.js | 16 +++++++++++++ 6 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 models/doctype/number_series/number_series.js create mode 100644 models/doctype/number_series/number_series.json create mode 100644 tests/test_number_series.js diff --git a/backends/sqlite.js b/backends/sqlite.js index 8188ddaf..181a38dc 100644 --- a/backends/sqlite.js +++ b/backends/sqlite.js @@ -296,7 +296,7 @@ class sqliteDatabase { this.conn.run(query, params, (err) => { if (err) { if (debug) { - console.error(err); + console.log(err); } reject(err); } else { diff --git a/client/view/controls/table.js b/client/view/controls/table.js index 829516ce..ff69f584 100644 --- a/client/view/controls/table.js +++ b/client/view/controls/table.js @@ -91,10 +91,12 @@ class TableControl extends BaseControl { primary_label: frappe._('Submit'), primary_action: (modal) => { this.datatable.cellmanager.submitEditing(); - this.datatable.cellmanager.deactivateEditing(); modal.hide(); } }); + this.text_modal.$modal.on('hidden.bs.modal', () => { + this.datatable.cellmanager.deactivateEditing(); + }) return this.get_control(field, this.text_modal.get_body()); } diff --git a/model/index.js b/model/index.js index 1ae38470..922f1a8b 100644 --- a/model/index.js +++ b/model/index.js @@ -1,4 +1,20 @@ +const frappe = require('frappejs'); + module.exports = { + async get_series_next(prefix) { + let series; + try { + series = await frappe.get_doc('Number Series', prefix); + } catch (e) { + if (!e.status_code || e.status_code !== 404) { + throw e; + } + series = frappe.new_doc({doctype: 'Number Series', name: prefix, current: 0}); + await series.insert(); + } + let next = await series.next() + return prefix + next; + }, common_fields: [ { fieldname: 'name', fieldtype: 'Data', reqd: 1 diff --git a/models/doctype/number_series/number_series.js b/models/doctype/number_series/number_series.js new file mode 100644 index 00000000..4d485be1 --- /dev/null +++ b/models/doctype/number_series/number_series.js @@ -0,0 +1,24 @@ +const BaseMeta = require('frappejs/model/meta'); +const BaseDocument = require('frappejs/model/document'); + +class NumberSeriesMeta extends BaseMeta { + setup_meta() { + Object.assign(this, require('./number_series.json')); + } +} + +class NumberSeries extends BaseDocument { + async next() { + if (this.current===null || this.current===undefined) { + this.current = 0; + } + this.current++; + await this.update(); + return this.current; + } +} + +module.exports = { + Document: NumberSeries, + Meta: NumberSeriesMeta +}; \ No newline at end of file diff --git a/models/doctype/number_series/number_series.json b/models/doctype/number_series/number_series.json new file mode 100644 index 00000000..65e11f70 --- /dev/null +++ b/models/doctype/number_series/number_series.json @@ -0,0 +1,21 @@ +{ + "name": "Number Series", + "doctype": "DocType", + "is_single": 0, + "is_child": 0, + "keyword_fields": [], + "fields": [ + { + "fieldname": "name", + "label": "Name", + "fieldtype": "Data", + "reqd": 1 + }, + { + "fieldname": "current", + "label": "Current", + "fieldtype": "Int", + "reqd": 1 + } + ] +} \ No newline at end of file diff --git a/tests/test_number_series.js b/tests/test_number_series.js new file mode 100644 index 00000000..4d2f0fd0 --- /dev/null +++ b/tests/test_number_series.js @@ -0,0 +1,16 @@ +const assert = require('assert'); +const frappe = require('frappejs'); +const helpers = require('./helpers'); + +describe('Document', () => { + before(async function() { + await helpers.init_sqlite(); + }); + + it('should start a series and get next value', async () => { + frappe.db.delete('Number Series', 'test-series-') + assert.equal(await frappe.model.get_series_next('test-series-'), 'test-series-1'); + assert.equal(await frappe.model.get_series_next('test-series-'), 'test-series-2'); + assert.equal(await frappe.model.get_series_next('test-series-'), 'test-series-3'); + }); +}); \ No newline at end of file