From 28aa0f135e8d2096e9f0c979ba3a47ff63383811 Mon Sep 17 00:00:00 2001 From: 18alantom <2.alan.tom@gmail.com> Date: Wed, 22 Feb 2023 15:51:20 +0530 Subject: [PATCH] incr: update routing - update PrintTemplate UI code --- models/baseModels/PrintTemplate.ts | 46 +++++++ models/types.ts | 1 + schemas/app/PrintTemplate.json | 8 +- src/pages/CommonForm/CommonForm.vue | 17 +-- src/pages/TemplateBuilder.vue | 189 +++++++++++++++++++++++++++- src/router.ts | 3 +- src/utils/sidebarConfig.ts | 6 +- src/utils/ui.ts | 15 +++ 8 files changed, 263 insertions(+), 22 deletions(-) diff --git a/models/baseModels/PrintTemplate.ts b/models/baseModels/PrintTemplate.ts index 54bbec34..28e87a64 100644 --- a/models/baseModels/PrintTemplate.ts +++ b/models/baseModels/PrintTemplate.ts @@ -1,8 +1,54 @@ import { Doc } from 'fyo/model/doc'; +import { SchemaMap } from 'schemas/types'; +import { ListsMap, ListViewSettings, ReadOnlyMap } from 'fyo/model/types'; +import { ModelNameEnum } from 'models/types'; export class PrintTemplate extends Doc { name?: string; type?: string; template?: string; isCustom?: boolean; + + static getListViewSettings(): ListViewSettings { + return { + formRoute: ({ name }) => `/template-builder/${name}`, + columns: ['name', 'type', 'isCustom'], + }; + } + + readOnly: ReadOnlyMap = { + name: () => !!this.isCustom, + type: () => !!this.isCustom, + template: () => !!this.isCustom, + }; + + static lists: ListsMap = { + type(doc?: Doc) { + let enableInventory: boolean = false; + let schemaMap: SchemaMap = {}; + if (doc) { + enableInventory = !!doc.fyo.singles.AccountingSettings?.enableInventory; + schemaMap = doc.fyo.schemaMap; + } + + const models = [ + ModelNameEnum.SalesInvoice, + ModelNameEnum.PurchaseInvoice, + ModelNameEnum.Payment, + ]; + + if (enableInventory) { + models.push( + ModelNameEnum.Shipment, + ModelNameEnum.PurchaseReceipt, + ModelNameEnum.StockMovement + ); + } + + return models.map((value) => ({ + value, + label: schemaMap[value]?.label ?? value, + })); + }, + }; } diff --git a/models/types.ts b/models/types.ts index d6c4d3c2..800348fc 100644 --- a/models/types.ts +++ b/models/types.ts @@ -21,6 +21,7 @@ export enum ModelNameEnum { Payment = 'Payment', PaymentFor = 'PaymentFor', PrintSettings = 'PrintSettings', + PrintTemplate = 'PrintTemplate', PurchaseInvoice = 'PurchaseInvoice', PurchaseInvoiceItem = 'PurchaseInvoiceItem', SalesInvoice = 'SalesInvoice', diff --git a/schemas/app/PrintTemplate.json b/schemas/app/PrintTemplate.json index 68ad64f9..e933d4b0 100644 --- a/schemas/app/PrintTemplate.json +++ b/schemas/app/PrintTemplate.json @@ -13,20 +13,22 @@ { "fieldname": "type", "label": "Template Type", - "fieldtype": "Select", + "fieldtype": "AutoComplete", + "default": "SalesInvoice", "required": true }, { "fieldname": "template", "label": "Template", - "fieldtype": "Data", + "fieldtype": "Text", "required": true }, { "fieldname": "isCustom", "label": "Is Custom", "fieldtype": "Check", - "default": false + "default": false, + "readOnly": true } ] } diff --git a/src/pages/CommonForm/CommonForm.vue b/src/pages/CommonForm/CommonForm.vue index 124ea130..fdef4edd 100644 --- a/src/pages/CommonForm/CommonForm.vue +++ b/src/pages/CommonForm/CommonForm.vue @@ -116,6 +116,7 @@ import { docsPathMap } from 'src/utils/misc'; import { docsPathRef, focusedDocsRef } from 'src/utils/refs'; import { ActionGroup, UIGroupedFields } from 'src/utils/types'; import { + getDocFromNameIfExistsElseNew, getFieldsGroupedByTabAndSection, getGroupedActionsForDoc, } from 'src/utils/ui'; @@ -277,18 +278,10 @@ export default defineComponent({ return; } - if (this.name) { - await this.setDocFromName(this.name); - } else { - this.docOrNull = this.fyo.doc.getNewDoc(this.schemaName); - } - }, - async setDocFromName(name: string) { - try { - this.docOrNull = await this.fyo.doc.getDoc(this.schemaName, name); - } catch (err) { - this.docOrNull = this.fyo.doc.getNewDoc(this.schemaName); - } + this.docOrNull = await getDocFromNameIfExistsElseNew( + this.schemaName, + this.name + ); }, async toggleQuickEditDoc(doc: Doc | null) { if (this.quickEditDoc && doc) { diff --git a/src/pages/TemplateBuilder.vue b/src/pages/TemplateBuilder.vue index 31aa504d..ec64b3c3 100644 --- a/src/pages/TemplateBuilder.vue +++ b/src/pages/TemplateBuilder.vue @@ -1,11 +1,194 @@