From e9bf7fb10c9e8dd3a249ad6bae110b6da81d0880 Mon Sep 17 00:00:00 2001 From: akshayitzme Date: Thu, 26 Dec 2024 15:19:30 +0530 Subject: [PATCH 1/6] feat: payment methods schema --- schemas/app/Payment.json | 17 ++--------------- schemas/app/PaymentMethod.json | 18 ++++++++++++++++++ schemas/schemas.ts | 2 ++ 3 files changed, 22 insertions(+), 15 deletions(-) create mode 100644 schemas/app/PaymentMethod.json diff --git a/schemas/app/Payment.json b/schemas/app/Payment.json index 9f30e2d8c..0a1b6168d 100644 --- a/schemas/app/Payment.json +++ b/schemas/app/Payment.json @@ -81,21 +81,8 @@ "fieldname": "paymentMethod", "label": "Payment Method", "placeholder": "Payment Method", - "fieldtype": "Select", - "options": [ - { - "value": "Cash", - "label": "Cash" - }, - { - "value": "Cheque", - "label": "Cheque" - }, - { - "value": "Transfer", - "label": "Transfer" - } - ], + "fieldtype": "Link", + "target": "PaymentMethod", "default": "Cash", "required": true, "section": "Details" diff --git a/schemas/app/PaymentMethod.json b/schemas/app/PaymentMethod.json new file mode 100644 index 000000000..9fc129f26 --- /dev/null +++ b/schemas/app/PaymentMethod.json @@ -0,0 +1,18 @@ +{ + "name": "PaymentMethod", + "label": "Payment Method", + "naming": "manual", + "fields": [ + { + "fieldname": "name", + "label": "Name", + "fieldtype": "Data" + }, + { + "fieldname": "account", + "label": "Account", + "fieldtype": "Link", + "target": "Account" + } + ] +} diff --git a/schemas/schemas.ts b/schemas/schemas.ts index fcb3b1ba0..39f28675b 100644 --- a/schemas/schemas.ts +++ b/schemas/schemas.ts @@ -22,6 +22,7 @@ import CollectionRulesItems from './app/CollectionRulesItems.json'; import CouponCode from './app/CouponCode.json'; import AppliedCouponCodes from './app/AppliedCouponCodes.json'; import Payment from './app/Payment.json'; +import PaymentMethod from './app/PaymentMethod.json'; import PaymentFor from './app/PaymentFor.json'; import PriceList from './app/PriceList.json'; import PriceListItem from './app/PriceListItem.json'; @@ -117,6 +118,7 @@ export const appSchemas: Schema[] | SchemaStub[] = [ CollectionRulesItems as Schema, Payment as Schema, + PaymentMethod as Schema, PaymentFor as Schema, JournalEntry as Schema, From 9911d42da2857e6a3799ede5fdf2a8a1c13b3e61 Mon Sep 17 00:00:00 2001 From: akshayitzme Date: Thu, 26 Dec 2024 15:20:01 +0530 Subject: [PATCH 2/6] feat: payment methods model --- models/baseModels/Payment/Payment.ts | 16 +++++++++++++--- models/baseModels/PaymentMethod/PaymentMethod.ts | 7 +++++++ models/index.ts | 2 ++ models/types.ts | 1 + 4 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 models/baseModels/PaymentMethod/PaymentMethod.ts diff --git a/models/baseModels/Payment/Payment.ts b/models/baseModels/Payment/Payment.ts index 3f021ec3c..94ab5b576 100644 --- a/models/baseModels/Payment/Payment.ts +++ b/models/baseModels/Payment/Payment.ts @@ -27,8 +27,9 @@ import { AccountTypeEnum } from '../Account/types'; import { Invoice } from '../Invoice/Invoice'; import { Party } from '../Party/Party'; import { PaymentFor } from '../PaymentFor/PaymentFor'; -import { PaymentMethod, PaymentType } from './types'; +import { PaymentType } from './types'; import { TaxSummary } from '../TaxSummary/TaxSummary'; +import { PaymentMethod } from '../PaymentMethod/PaymentMethod'; type AccountTypeMap = Record; @@ -38,6 +39,7 @@ export class Payment extends Transactional { amount?: Money; writeoff?: Money; paymentType?: PaymentType; + paymentMethod?: string; referenceType?: ModelNameEnum.SalesInvoice | ModelNameEnum.PurchaseInvoice; for?: PaymentFor[]; _accountsMap?: AccountTypeMap; @@ -582,6 +584,14 @@ export class Payment extends Transactional { ); } + const paymentMethodDoc = (await this.loadAndGetLink( + 'paymentMethod' + )) as PaymentMethod; + + if (paymentMethodDoc.account) { + return paymentMethodDoc.get('account'); + } + if (this.paymentMethod === 'Cash') { return accountsMap[AccountTypeEnum.Cash]?.[0] ?? null; } @@ -712,7 +722,7 @@ export class Payment extends Transactional { return { accountType: 'Receivable', isGroup: false }; } - if (paymentMethod === 'Cash') { + if (paymentMethod.name === 'Cash') { return { accountType: 'Cash', isGroup: false }; } else { return { accountType: ['in', ['Bank', 'Cash']], isGroup: false }; @@ -726,7 +736,7 @@ export class Payment extends Transactional { return { accountType: 'Payable', isGroup: false }; } - if (paymentMethod === 'Cash') { + if (paymentMethod.name === 'Cash') { return { accountType: 'Cash', isGroup: false }; } else { return { accountType: ['in', ['Bank', 'Cash']], isGroup: false }; diff --git a/models/baseModels/PaymentMethod/PaymentMethod.ts b/models/baseModels/PaymentMethod/PaymentMethod.ts new file mode 100644 index 000000000..b02dae4b3 --- /dev/null +++ b/models/baseModels/PaymentMethod/PaymentMethod.ts @@ -0,0 +1,7 @@ +import { Doc } from 'fyo/model/doc'; +import { Account } from '../Account/Account'; + +export class PaymentMethod extends Doc { + name?: string; + account?: Account; +} diff --git a/models/index.ts b/models/index.ts index cb7c39906..2f0b64604 100644 --- a/models/index.ts +++ b/models/index.ts @@ -16,6 +16,7 @@ import { Lead } from './baseModels/Lead/Lead'; import { AppliedCouponCodes } from './baseModels/AppliedCouponCodes/AppliedCouponCodes'; import { CouponCode } from './baseModels/CouponCode/CouponCode'; import { Payment } from './baseModels/Payment/Payment'; +import { PaymentMethod } from './baseModels/PaymentMethod/PaymentMethod'; import { PaymentFor } from './baseModels/PaymentFor/PaymentFor'; import { PriceList } from './baseModels/PriceList/PriceList'; import { PriceListItem } from './baseModels/PriceList/PriceListItem'; @@ -69,6 +70,7 @@ export const models = { CollectionRulesItems, CouponCode, Payment, + PaymentMethod, PaymentFor, PrintSettings, PriceList, diff --git a/models/types.ts b/models/types.ts index dcd2397d0..225c4a6a7 100644 --- a/models/types.ts +++ b/models/types.ts @@ -26,6 +26,7 @@ export enum ModelNameEnum { AppliedCouponCodes = 'AppliedCouponCodes', Payment = 'Payment', + PaymentMethod = 'PaymentMethod', PaymentFor = 'PaymentFor', PriceList = 'PriceList', PricingRule = 'PricingRule', From d37287dd3b9fd2b5bcfeb8b93a3dcb3c476616c5 Mon Sep 17 00:00:00 2001 From: akshayitzme Date: Thu, 26 Dec 2024 15:20:32 +0530 Subject: [PATCH 3/6] patch: create default payment methods --- backend/patches/createPaymentMethods.ts | 54 +++++++++++++++++++++++++ backend/patches/index.ts | 6 +++ 2 files changed, 60 insertions(+) create mode 100644 backend/patches/createPaymentMethods.ts diff --git a/backend/patches/createPaymentMethods.ts b/backend/patches/createPaymentMethods.ts new file mode 100644 index 000000000..ccb4139b9 --- /dev/null +++ b/backend/patches/createPaymentMethods.ts @@ -0,0 +1,54 @@ +import { ModelNameEnum } from 'models/types'; +import { DatabaseManager } from '../database/manager'; +import { AccountTypeEnum } from 'models/baseModels/Account/types'; +import { getDefaultMetaFieldValueMap } from 'backend/helpers'; + +type AccountTypeMap = Record; + +async function execute(dm: DatabaseManager) { + const accounts = (await dm.db?.getAll(ModelNameEnum.Account, { + fields: ['name', 'accountType'], + filters: { + accountType: [ + 'in', + [ + AccountTypeEnum.Bank, + AccountTypeEnum.Cash, + AccountTypeEnum.Payable, + AccountTypeEnum.Receivable, + ], + ], + }, + })) as { name: string; accountType: AccountTypeEnum }[]; + + const accountsMap = accounts.reduce((acc, ac) => { + acc[ac.accountType] ??= []; + acc[ac.accountType]!.push(ac.name); + return acc; + }, {} as AccountTypeMap); + + const defaults = getDefaultMetaFieldValueMap(); + + const paymentMethods = [ + { + name: 'Cash', + account: accountsMap[AccountTypeEnum.Cash]?.[0], + ...defaults, + }, + { + name: 'Bank', + account: accountsMap[AccountTypeEnum.Bank]?.[0], + ...defaults, + }, + { + name: 'Transfer', + account: accountsMap[AccountTypeEnum.Bank]?.[0], + ...defaults, + }, + ]; + + for (const paymentMethod of paymentMethods) { + await dm.db?.insert(ModelNameEnum.PaymentMethod, paymentMethod); + } +} +export default { execute }; diff --git a/backend/patches/index.ts b/backend/patches/index.ts index 78edbe842..e2d332274 100644 --- a/backend/patches/index.ts +++ b/backend/patches/index.ts @@ -7,6 +7,7 @@ import updateSchemas from './updateSchemas'; import setPaymentReferenceType from './setPaymentReferenceType'; import fixLedgerDateTime from './v0_21_0/fixLedgerDateTime'; import fixItemHSNField from './fixItemHSNField'; +import createPaymentMethods from './createPaymentMethods'; export default [ { name: 'testPatch', version: '0.5.0-beta.0', patch: testPatch }, @@ -42,4 +43,9 @@ export default [ patch: fixLedgerDateTime, }, { name: 'fixItemHSNField', version: '0.24.0', patch: fixItemHSNField }, + { + name: 'createPaymentMethods', + version: '0.25.1', + patch: createPaymentMethods, + }, ] as Patch[]; From 7cbe5c684013cb179a2f0694758639dde6ce0c6a Mon Sep 17 00:00:00 2001 From: akshayitzme Date: Thu, 26 Dec 2024 20:08:12 +0530 Subject: [PATCH 4/6] feat: multiple payment methods in pos --- backend/database/bespoke.ts | 5 +---- src/pages/POS/ClosePOSShiftModal.vue | 24 +++++++----------------- src/pages/POS/OpenPOSShiftModal.vue | 17 +++++++---------- 3 files changed, 15 insertions(+), 31 deletions(-) diff --git a/backend/database/bespoke.ts b/backend/database/bespoke.ts index c5ab61b8a..f2c855dc6 100644 --- a/backend/database/bespoke.ts +++ b/backend/database/bespoke.ts @@ -402,10 +402,7 @@ export class BespokeQueries { const sinvNamesQuery = db.knex!(ModelNameEnum.SalesInvoice) .select('name') .where('isPOS', true) - .andWhereBetween('date', [ - DateTime.fromJSDate(fromDate).toSQLDate(), - DateTime.fromJSDate(toDate).toSQLDate(), - ]); + .andWhereBetween('date', [fromDate.toISOString(), toDate.toISOString()]); if (lastShiftClosingDate) { sinvNamesQuery.andWhere( diff --git a/src/pages/POS/ClosePOSShiftModal.vue b/src/pages/POS/ClosePOSShiftModal.vue index c97254eb8..780111377 100644 --- a/src/pages/POS/ClosePOSShiftModal.vue +++ b/src/pages/POS/ClosePOSShiftModal.vue @@ -121,14 +121,16 @@ export default defineComponent({ }, methods: { async setTransactedAmount() { - if (!fyo.singles.POSShift?.openingDate) { + this.posOpeningShiftDoc = await getPOSOpeningShiftDoc(fyo); + + const fromDate = this.posOpeningShiftDoc?.openingDate as Date; + if (!fromDate) { return; } - const fromDate = this.posOpeningShiftDoc?.openingDate as Date; + this.transactedAmount = await fyo.db.getPOSTransactedAmount( fromDate, - new Date(), - fyo.singles.POSShift.closingDate as Date + new Date() ); }, seedClosingCash() { @@ -160,19 +162,7 @@ export default defineComponent({ return; } - let expectedAmount = fyo.pesa(0); - - if (row.paymentMethod === 'Cash') { - expectedAmount = expectedAmount.add( - this.posOpeningShiftDoc?.openingCashAmount as Money - ); - } - - if (row.paymentMethod === 'Transfer') { - expectedAmount = expectedAmount.add( - this.posOpeningShiftDoc?.openingTransferAmount as Money - ); - } + let expectedAmount = row.amount ?? fyo.pesa(0); if (this.transactedAmount) { expectedAmount = expectedAmount.add( diff --git a/src/pages/POS/OpenPOSShiftModal.vue b/src/pages/POS/OpenPOSShiftModal.vue index 36c7dce03..7a1c9588f 100644 --- a/src/pages/POS/OpenPOSShiftModal.vue +++ b/src/pages/POS/OpenPOSShiftModal.vue @@ -141,16 +141,13 @@ export default defineComponent({ this.posShiftDoc.openingAmounts = []; - await this.posShiftDoc.set('openingAmounts', [ - { - paymentMethod: 'Cash', - amount: fyo.pesa(0), - }, - { - paymentMethod: 'Transfer', - amount: fyo.pesa(0), - }, - ]); + const paymentMethods = ( + (await this.fyo.db.getAll(ModelNameEnum.PaymentMethod, { + fields: ['name'], + })) as { name: string }[] + ).map((doc) => ({ paymentMethod: doc.name, amount: fyo.pesa(0) })); + + await this.posShiftDoc.set('openingAmounts', paymentMethods); }, async seedDefaults() { if (!!this.posShiftDoc?.isShiftOpen) { From 7f704fb8d9e9e24938263ee5ac88af62c67f65ea Mon Sep 17 00:00:00 2001 From: akshayitzme Date: Fri, 27 Dec 2024 16:31:23 +0530 Subject: [PATCH 5/6] feat: multiple payment methods in pos --- backend/patches/createPaymentMethods.ts | 3 + models/baseModels/Payment/Payment.ts | 51 ++++---- .../baseModels/PaymentMethod/PaymentMethod.ts | 9 ++ models/types.ts | 2 + schemas/app/PaymentMethod.json | 16 +++ src/components/POS/types.ts | 3 +- src/pages/POS/ClassicPOS.vue | 16 ++- src/pages/POS/ModernPOS.vue | 16 ++- src/pages/POS/POS.vue | 37 ++++-- src/pages/POS/PaymentModal.vue | 121 ++++++++++-------- 10 files changed, 170 insertions(+), 104 deletions(-) diff --git a/backend/patches/createPaymentMethods.ts b/backend/patches/createPaymentMethods.ts index ccb4139b9..e4c746d2f 100644 --- a/backend/patches/createPaymentMethods.ts +++ b/backend/patches/createPaymentMethods.ts @@ -32,16 +32,19 @@ async function execute(dm: DatabaseManager) { const paymentMethods = [ { name: 'Cash', + type: 'Cash', account: accountsMap[AccountTypeEnum.Cash]?.[0], ...defaults, }, { name: 'Bank', + type: 'Bank', account: accountsMap[AccountTypeEnum.Bank]?.[0], ...defaults, }, { name: 'Transfer', + type: 'Bank', account: accountsMap[AccountTypeEnum.Bank]?.[0], ...defaults, }, diff --git a/models/baseModels/Payment/Payment.ts b/models/baseModels/Payment/Payment.ts index 94ab5b576..c70a685bb 100644 --- a/models/baseModels/Payment/Payment.ts +++ b/models/baseModels/Payment/Payment.ts @@ -9,7 +9,6 @@ import { FormulaMap, HiddenMap, ListViewSettings, - RequiredMap, ValidationMap, } from 'fyo/model/types'; import { NotFoundError, ValidationError } from 'fyo/utils/errors'; @@ -44,6 +43,10 @@ export class Payment extends Transactional { for?: PaymentFor[]; _accountsMap?: AccountTypeMap; + async paymentMethodDoc() { + return (await this.loadAndGetLink('paymentMethod')) as PaymentMethod; + } + async change({ changed }: ChangeArg) { if (changed === 'for') { this.updateAmountOnReferenceUpdate(); @@ -112,6 +115,7 @@ export class Payment extends Transactional { this.validateAccounts(); this.validateTotalReferenceAmount(); await this.validateReferences(); + await this.validateReferencesAreSet(); } async validateFor() { @@ -225,6 +229,22 @@ export class Payment extends Transactional { ); } + async validateReferencesAreSet() { + const type = (await this.paymentMethodDoc()).type; + + if (type !== 'Bank') { + return; + } + + if (!this.clearanceDate) { + throw new ValidationError(t`Clearance Date not set.`); + } + + if (!this.referenceId) { + throw new ValidationError(t`Reference Id not set.`); + } + } + async getTaxSummary() { const taxes: Record< string, @@ -561,15 +581,13 @@ export class Payment extends Transactional { ); } - if (this.paymentMethod === 'Cash') { - return accountsMap[AccountTypeEnum.Cash]?.[0] ?? null; - } + const paymentMethodDoc = await this.paymentMethodDoc(); - if (this.paymentMethod !== 'Cash') { - return accountsMap[AccountTypeEnum.Bank]?.[0] ?? null; + if (paymentMethodDoc.type === 'Cash') { + return accountsMap[AccountTypeEnum.Cash]?.[0] ?? null; } - return null; + return accountsMap[AccountTypeEnum.Bank]?.[0] ?? null; }, dependsOn: ['paymentMethod', 'paymentType', 'party'], }, @@ -584,23 +602,17 @@ export class Payment extends Transactional { ); } - const paymentMethodDoc = (await this.loadAndGetLink( - 'paymentMethod' - )) as PaymentMethod; + const paymentMethodDoc = await this.paymentMethodDoc(); if (paymentMethodDoc.account) { return paymentMethodDoc.get('account'); } - if (this.paymentMethod === 'Cash') { + if (paymentMethodDoc.type === 'Cash') { return accountsMap[AccountTypeEnum.Cash]?.[0] ?? null; } - if (this.paymentMethod !== 'Cash') { - return accountsMap[AccountTypeEnum.Bank]?.[0] ?? null; - } - - return null; + return accountsMap[AccountTypeEnum.Bank]?.[0] ?? null; }, dependsOn: ['paymentMethod', 'paymentType', 'party'], }, @@ -683,14 +695,7 @@ export class Payment extends Transactional { }, }; - required: RequiredMap = { - referenceId: () => this.paymentMethod !== 'Cash', - clearanceDate: () => this.paymentMethod !== 'Cash', - }; - hidden: HiddenMap = { - referenceId: () => this.paymentMethod === 'Cash', - clearanceDate: () => this.paymentMethod === 'Cash', amountPaid: () => this.writeoff?.isZero() ?? true, attachment: () => !(this.attachment || !(this.isSubmitted || this.isCancelled)), diff --git a/models/baseModels/PaymentMethod/PaymentMethod.ts b/models/baseModels/PaymentMethod/PaymentMethod.ts index b02dae4b3..48531c5a5 100644 --- a/models/baseModels/PaymentMethod/PaymentMethod.ts +++ b/models/baseModels/PaymentMethod/PaymentMethod.ts @@ -1,7 +1,16 @@ import { Doc } from 'fyo/model/doc'; import { Account } from '../Account/Account'; +import { ListViewSettings } from 'fyo/model/types'; +import { PaymentMethodType } from 'models/types'; export class PaymentMethod extends Doc { name?: string; account?: Account; + type?: PaymentMethodType; + + static getListViewSettings(): ListViewSettings { + return { + columns: ['name', 'type'], + }; + } } diff --git a/models/types.ts b/models/types.ts index 225c4a6a7..7b221228b 100644 --- a/models/types.ts +++ b/models/types.ts @@ -69,3 +69,5 @@ export enum ModelNameEnum { } export type ModelName = keyof typeof ModelNameEnum; + +export type PaymentMethodType= 'Cash' | 'Bank' \ No newline at end of file diff --git a/schemas/app/PaymentMethod.json b/schemas/app/PaymentMethod.json index 9fc129f26..d3142f7ec 100644 --- a/schemas/app/PaymentMethod.json +++ b/schemas/app/PaymentMethod.json @@ -8,6 +8,22 @@ "label": "Name", "fieldtype": "Data" }, + { + "fieldname": "type", + "label": "Type", + "fieldtype": "Select", + "required": true, + "options": [ + { + "value": "Cash", + "label": "Cash" + }, + { + "value": "Bank", + "label": "Bank" + } + ] + }, { "fieldname": "account", "label": "Account", diff --git a/src/components/POS/types.ts b/src/components/POS/types.ts index ea31a0f46..950680c6f 100644 --- a/src/components/POS/types.ts +++ b/src/components/POS/types.ts @@ -25,7 +25,8 @@ export type PosEmits = | 'addItem' | 'toggleView' | 'toggleModal' - | 'setCashAmount' + | 'setPaidAmount' + | 'setPaymentMethod' | 'setCouponsCount' | 'routeToSinvList' | 'applyPricingRule' diff --git a/src/pages/POS/ClassicPOS.vue b/src/pages/POS/ClassicPOS.vue index b5b184631..88e27c9f5 100644 --- a/src/pages/POS/ClassicPOS.vue +++ b/src/pages/POS/ClassicPOS.vue @@ -43,9 +43,11 @@ this.sinvDoc), coupons: computed(() => this.coupons), itemQtyMap: computed(() => this.itemQtyMap), - cashAmount: computed(() => this.cashAmount), + paidAmount: computed(() => this.paidAmount), + paymentMethod: computed(() => this.paymentMethod), transferRefNo: computed(() => this.transferRefNo), itemDiscounts: computed(() => this.itemDiscounts), transferAmount: computed(() => this.transferAmount), @@ -188,7 +189,7 @@ export default defineComponent({ openAppliedCouponsModal: false, totalQuantity: 0, - cashAmount: fyo.pesa(0), + paidAmount: fyo.pesa(0), itemDiscounts: fyo.pesa(0), transferAmount: fyo.pesa(0), totalTaxedAmount: fyo.pesa(0), @@ -202,6 +203,7 @@ export default defineComponent({ appliedCoupons: [] as AppliedCouponCodes[], itemSearchTerm: '', + paymentMethod: undefined as string | undefined, transferRefNo: undefined as string | undefined, defaultCustomer: undefined as string | undefined, transferClearanceDate: undefined as Date | undefined, @@ -396,8 +398,11 @@ export default defineComponent({ toggleView() { this.tableView = !this.tableView; }, - setCashAmount(amount: Money) { - this.cashAmount = amount; + setPaidAmount(amount: Money) { + this.paidAmount = amount; + }, + setPaymentMethod(method: string) { + this.paymentMethod = method; }, setDefaultCustomer() { this.defaultCustomer = this.fyo.singles.Defaults?.posCustomer ?? ''; @@ -579,22 +584,26 @@ export default defineComponent({ }, async makePayment() { this.paymentDoc = this.sinvDoc.getPayment() as Payment; - const paymentMethod = this.cashAmount.isZero() ? 'Transfer' : 'Cash'; + const paymentMethod = this.paymentMethod; await this.paymentDoc.set('paymentMethod', paymentMethod); - if (paymentMethod === 'Transfer') { + const paymentMethodDoc = await this.paymentDoc.loadAndGetLink( + 'paymentMethod' + ); + + if (paymentMethodDoc?.type !== 'Cash') { await this.paymentDoc.setMultiple({ - amount: this.transferAmount as Money, + amount: this.paidAmount as Money, referenceId: this.transferRefNo, clearanceDate: this.transferClearanceDate, }); } - if (paymentMethod === 'Cash') { + if (paymentMethodDoc?.type === 'Cash') { await this.paymentDoc.setMultiple({ paymentAccount: this.defaultPOSCashAccount, - amount: this.cashAmount as Money, + amount: this.paidAmount as Money, }); } @@ -688,7 +697,7 @@ export default defineComponent({ this.setSinvDoc(); this.itemSerialNumbers = {}; - this.cashAmount = fyo.pesa(0); + this.paidAmount = fyo.pesa(0); this.transferAmount = fyo.pesa(0); await this.setItems(); diff --git a/src/pages/POS/PaymentModal.vue b/src/pages/POS/PaymentModal.vue index 155686483..561b65ed1 100644 --- a/src/pages/POS/PaymentModal.vue +++ b/src/pages/POS/PaymentModal.vue @@ -1,43 +1,24 @@