diff --git a/models/doctype/GetStarted/GetStarted.js b/models/doctype/GetStarted/GetStarted.js index f3de4d2b..7198973f 100644 --- a/models/doctype/GetStarted/GetStarted.js +++ b/models/doctype/GetStarted/GetStarted.js @@ -5,52 +5,62 @@ export default { { fieldname: 'onboardingComplete', label: 'Onboarding Complete', - fieldtype: 'Check' + fieldtype: 'Check', }, { fieldname: 'companySetup', label: 'Company Setup', - fieldtype: 'Check' + fieldtype: 'Check', }, { fieldname: 'systemSetup', label: 'System Setup', - fieldtype: 'Check' + fieldtype: 'Check', }, { fieldname: 'invoiceSetup', label: 'Invoice Setup', - fieldtype: 'Check' + fieldtype: 'Check', }, { fieldname: 'itemCreated', label: 'Item Created', - fieldtype: 'Check' + fieldtype: 'Check', }, { fieldname: 'customerCreated', label: 'Customer Created', - fieldtype: 'Check' + fieldtype: 'Check', }, { fieldname: 'supplierCreated', label: 'Supplier Created', - fieldtype: 'Check' + fieldtype: 'Check', }, { fieldname: 'invoiceCreated', label: 'Invoice Created', - fieldtype: 'Check' + fieldtype: 'Check', }, { fieldname: 'billCreated', label: 'Bill Created', - fieldtype: 'Check' + fieldtype: 'Check', }, { fieldname: 'chartOfAccountsReviewed', label: 'Chart Of Accounts Reviewed', - fieldtype: 'Check' - } - ] + fieldtype: 'Check', + }, + { + fieldname: 'openingBalanceChecked', + label: 'Opening Balances', + fieldtype: 'Check', + }, + { + fieldname: 'taxesAdded', + label: 'Add Taxes', + fieldtype: 'Check', + }, + ], }; diff --git a/src/pages/GetStarted.vue b/src/pages/GetStarted.vue index 40a68c79..4ef76a61 100644 --- a/src/pages/GetStarted.vue +++ b/src/pages/GetStarted.vue @@ -18,7 +18,16 @@ :key="item.label" >
@@ -47,16 +56,7 @@ v-if="item.action" class="leading-tight" type="primary" - v-on=" - item.action - ? { - click: () => { - item.action(); - activeCard = null; - } - } - : null - " + @click="handleAction(item)" > {{ item.actionLabel || _('Setup') }} @@ -66,7 +66,7 @@ v-if="item.documentation" class="leading-tight" :class="{ 'ml-4': item.action }" - @click="visitLink(item.documentation)" + @click="handleDocumentation(item)" > {{ _('Documentation') }} @@ -97,7 +97,7 @@ export default { components: { PageHeader, Button, - Icon + Icon, }, computed: { sections() { @@ -113,7 +113,10 @@ export default { icon: 'general', description: 'Setup your company information, email, country and fiscal year', - fieldname: 'companySetup' + fieldname: 'companySetup', + action() { + openSettings('General'); + }, }, { key: 'System', @@ -124,7 +127,7 @@ export default { fieldname: 'systemSetup', action() { openSettings('System'); - } + }, }, { key: 'Invoice', @@ -135,9 +138,9 @@ export default { fieldname: 'invoiceSetup', action() { openSettings('Invoice'); - } - } - ] + }, + }, + ], }, { label: _('Accounts'), @@ -151,32 +154,33 @@ export default { 'Review your chart of accounts, add any account or tax heads as needed', action: () => { routeTo('/chart-of-accounts'); - this.updateChecks({ chartOfAccountsReviewed: 1 }); }, fieldname: 'chartOfAccountsReviewed', documentation: - 'https://frappebooks.com/docs/setting-up#1-enter-bank-accounts' + 'https://frappebooks.com/docs/setting-up#1-enter-bank-accounts', }, { key: 'Opening Balances', label: _('Opening Balances'), icon: 'opening-ac', + fieldname: 'openingBalanceChecked', description: 'Setup your opening balances before performing any accounting entries', documentation: - 'https://frappebooks.com/docs/setting-up#5-setup-opening-balances' + 'https://frappebooks.com/docs/setting-up#5-setup-opening-balances', }, { key: 'Add Taxes', label: _('Add Taxes'), icon: 'percentage', + fieldname: 'taxesAdded', description: 'Setup your tax templates for your sales or purchase transactions', action: () => routeTo('/list/Tax'), documentation: - 'https://frappebooks.com/docs/setting-up#2-add-taxes' - } - ] + 'https://frappebooks.com/docs/setting-up#2-add-taxes', + }, + ], }, { label: _('Sales'), @@ -191,7 +195,7 @@ export default { action: () => routeTo('/list/Item'), fieldname: 'itemCreated', documentation: - 'https://frappebooks.com/docs/setting-up#3-add-items' + 'https://frappebooks.com/docs/setting-up#3-add-items', }, { key: 'Add Customers', @@ -201,7 +205,7 @@ export default { action: () => routeTo('/list/Customer'), fieldname: 'customerCreated', documentation: - 'https://frappebooks.com/docs/setting-up#4-add-customers' + 'https://frappebooks.com/docs/setting-up#4-add-customers', }, { key: 'Create Invoice', @@ -211,9 +215,9 @@ export default { 'Create your first invoice and mail it to your customer', action: () => routeTo('/list/SalesInvoice'), fieldname: 'invoiceCreated', - documentation: 'https://frappebooks.com/docs/invoices' - } - ] + documentation: 'https://frappebooks.com/docs/invoices', + }, + ], }, { label: _('Purchase'), @@ -226,7 +230,7 @@ export default { description: 'Add products or services that you buy from your suppliers', action: () => routeTo('/list/Item'), - fieldname: 'itemCreated' + fieldname: 'itemCreated', }, { key: 'Add Suppliers', @@ -234,7 +238,7 @@ export default { icon: 'supplier', description: 'Add a few suppliers to create your first bill', action: () => routeTo('/list/Supplier'), - fieldname: 'supplierCreated' + fieldname: 'supplierCreated', }, { key: 'Create Bill', @@ -244,16 +248,16 @@ export default { 'Create your first bill and mail it to your supplier', action: () => routeTo('/list/PurchaseInvoice'), fieldname: 'billCreated', - documentation: 'https://frappebooks.com/docs/bills' - } - ] - } + documentation: 'https://frappebooks.com/docs/bills', + }, + ], + }, ]; - } + }, }, data() { return { - activeCard: null + activeCard: null, }; }, async activated() { @@ -261,9 +265,61 @@ export default { this.checkForCompletedTasks(); }, methods: { + async handleDocumentation({ key, documentation }) { + if (documentation) { + ipcRenderer.send(IPC_MESSAGES.OPEN_EXTERNAL, documentation); + } + + switch (key) { + case 'Opening Balances': + await this.updateChecks({ openingBalanceChecked: 1 }); + break; + } + }, + async handleAction({ key, action }) { + if (action) { + action(); + this.activeCard = null; + } + + switch (key) { + case 'General': + await this.updateChecks({ companySetup: 1 }); + break; + case 'System': + await this.updateChecks({ systemSetup: 1 }); + break; + case 'Review Accounts': + await this.updateChecks({ chartOfAccountsReviewed: 1 }); + break; + case 'Add Taxes': + await this.updateChecks({ taxesAdded: 1 }); + break; + } + }, + async checkIsOnboardingComplete() { + if (frappe.GetStarted.onboardingComplete) { + return true; + } + + const meta = await frappe.getMeta('GetStarted'); + const doc = await frappe.getSingle('GetStarted'); + const onboardingComplete = !!meta.fields + .filter(({ fieldname }) => fieldname !== 'onboardingComplete') + .map(({ fieldname }) => doc.get(fieldname)) + .every(Boolean); + + if (onboardingComplete) { + await this.updateChecks({ onboardingComplete }); + const systemSettings = await frappe.getSingle('SystemSettings'); + await systemSettings.update({ hideGetStarted: 1 }); + } + + return onboardingComplete; + }, async checkForCompletedTasks() { let toUpdate = {}; - if (frappe.GetStarted.onboardingCompleted) { + if (await this.checkIsOnboardingComplete()) { return; } @@ -328,11 +384,6 @@ export default { await frappe.GetStarted.update(toUpdate); frappe.GetStarted = await frappe.getSingle('GetStarted'); }, - visitLink(link) { - if (link) { - ipcRenderer.send(IPC_MESSAGES.OPEN_EXTERNAL, link); - } - }, isCompleted(item) { return frappe.GetStarted.get(item.fieldname) || 0; }, @@ -347,14 +398,14 @@ export default { props: Object.assign( { name, - size + size, }, this.$attrs - ) + ), }); - } + }, }; - } - } + }, + }, }; diff --git a/src/pages/SetupWizard/setupCompany.js b/src/pages/SetupWizard/setupCompany.js index fee6deed..42ce9332 100644 --- a/src/pages/SetupWizard/setupCompany.js +++ b/src/pages/SetupWizard/setupCompany.js @@ -41,7 +41,6 @@ export default async function setupCompany(setupWizardValues) { await setupRegionalChanges(country); updateCompanyNameInConfig(); - await frappe.GetStarted.update({ systemSetup: 1, companySetup: 1 }); await accountingSettings.update({ setupComplete: 1 }); frappe.AccountingSettings = accountingSettings; }