appointments.js
5 days ago
attendees.js
5 days ago
colorManipulation.js
5 days ago
customer.js
5 days ago
date.js
5 days ago
defaultCustomize.js
5 days ago
employee.js
5 days ago
events.js
5 days ago
formFieldsTemplates.js
5 days ago
formatting.js
5 days ago
helper.js
5 days ago
image.js
5 days ago
integrationApple.js
5 days ago
integrationGoogle.js
5 days ago
integrationOutlook.js
5 days ago
integrationStripe.js
5 days ago
integrationZoom.js
5 days ago
licence.js
5 days ago
phone.js
5 days ago
pricing.js
5 days ago
recurring.js
5 days ago
responsive.js
5 days ago
scrollElements.js
5 days ago
settings.js
5 days ago
translationsElementPlus.js
5 days ago
utilHeaderHeight.js
5 days ago
pricing.js
145 lines
| 1 | function useAmount(entity, coupon, entityTax, subTotal, includedTaxInTotal) { |
| 2 | let excludedTax = entityTax ? entityTax.excluded : false |
| 3 | |
| 4 | let discount = 0 |
| 5 | |
| 6 | if (coupon && coupon.limit) { |
| 7 | discount = |
| 8 | entityTax && !excludedTax |
| 9 | ? usePercentageAmount(useTaxedAmount(subTotal, entityTax), coupon.discount) + |
| 10 | coupon.deduction |
| 11 | : usePercentageAmount(subTotal, coupon.discount) + coupon.deduction |
| 12 | |
| 13 | if (discount >= subTotal) { |
| 14 | discount = subTotal |
| 15 | } |
| 16 | } |
| 17 | |
| 18 | let tax = 0 |
| 19 | |
| 20 | if (entityTax && excludedTax) { |
| 21 | tax = useTaxAmount(entityTax, subTotal - discount) |
| 22 | } else if (entityTax && !excludedTax) { |
| 23 | let baseAmount = useTaxedAmount(subTotal, entityTax) |
| 24 | |
| 25 | tax = useTaxAmount(entityTax, baseAmount - discount) |
| 26 | |
| 27 | if (includedTaxInTotal) { |
| 28 | subTotal = baseAmount + tax |
| 29 | |
| 30 | tax = 0 |
| 31 | } else { |
| 32 | subTotal = baseAmount |
| 33 | } |
| 34 | } |
| 35 | |
| 36 | return { |
| 37 | price: subTotal, |
| 38 | discount: discount, |
| 39 | tax: tax, |
| 40 | deposit: entity ? useDepositAmount(subTotal - discount + tax, entity) : 0, |
| 41 | } |
| 42 | } |
| 43 | |
| 44 | function getAllColumn(type) { |
| 45 | switch (type) { |
| 46 | case 'service': |
| 47 | return 'allServices' |
| 48 | |
| 49 | case 'extra': |
| 50 | return 'allExtras' |
| 51 | |
| 52 | case 'event': |
| 53 | return 'allEvents' |
| 54 | |
| 55 | case 'package': |
| 56 | return 'allPackages' |
| 57 | } |
| 58 | } |
| 59 | |
| 60 | function useTaxVisibility(store, id, type) { |
| 61 | let allColumn = getAllColumn(type) |
| 62 | |
| 63 | let amSettings = store.getters['getSettings'] |
| 64 | |
| 65 | let tax = useEntityTax(store, id, type) |
| 66 | |
| 67 | if (!amSettings.payments.taxes.enabled) { |
| 68 | return false |
| 69 | } |
| 70 | |
| 71 | return (tax && tax[allColumn]) || !!tax?.[`${type}List`].length |
| 72 | } |
| 73 | |
| 74 | function useEntityTax(store, entityId, entityType) { |
| 75 | let allColumn = getAllColumn(entityType) |
| 76 | |
| 77 | let tax = store.getters[ |
| 78 | entityType !== 'event' ? 'entities/getTaxes' : 'eventEntities/getTaxes' |
| 79 | ].find((t) => t[allColumn] || t[entityType + 'List'].find((s) => s.id === entityId)) |
| 80 | |
| 81 | return tax && typeof tax !== 'undefined' && ('status' in tax ? tax.status === 'visible' : true) |
| 82 | ? tax |
| 83 | : null |
| 84 | } |
| 85 | |
| 86 | function useTaxAmount(tax, amount) { |
| 87 | switch (tax.type) { |
| 88 | case 'percentage': |
| 89 | return usePercentageAmount(amount, tax.amount) |
| 90 | case 'fixed': |
| 91 | return amount > 0 ? tax.amount : 0 |
| 92 | } |
| 93 | } |
| 94 | |
| 95 | function useTaxedAmount(value, tax) { |
| 96 | switch (tax.type) { |
| 97 | case 'percentage': |
| 98 | return value / (1 + tax.amount / 100) |
| 99 | case 'fixed': |
| 100 | return value - tax.amount |
| 101 | } |
| 102 | } |
| 103 | |
| 104 | function useDepositAmount(totalAmount, entity) { |
| 105 | let depositAmount = 0 |
| 106 | |
| 107 | if (entity.depositPayment !== 'disabled') { |
| 108 | switch (entity.depositPayment) { |
| 109 | case 'fixed': |
| 110 | depositAmount = |
| 111 | (entity.depositPerPerson && entity.aggregatedPrice && entity.persons |
| 112 | ? entity.persons |
| 113 | : 1) * entity.deposit |
| 114 | |
| 115 | break |
| 116 | |
| 117 | case 'percentage': |
| 118 | depositAmount = usePercentageAmount(totalAmount, entity.deposit) |
| 119 | |
| 120 | break |
| 121 | } |
| 122 | } |
| 123 | |
| 124 | return useRoundAmount(totalAmount > depositAmount ? depositAmount : 0) |
| 125 | } |
| 126 | |
| 127 | function usePercentageAmount(amount, percentage) { |
| 128 | return (amount * percentage) / 100 |
| 129 | } |
| 130 | |
| 131 | function useRoundAmount(amount) { |
| 132 | return Math.round(amount * 100) / 100 |
| 133 | } |
| 134 | |
| 135 | export { |
| 136 | useAmount, |
| 137 | useDepositAmount, |
| 138 | useTaxVisibility, |
| 139 | useEntityTax, |
| 140 | usePercentageAmount, |
| 141 | useRoundAmount, |
| 142 | useTaxAmount, |
| 143 | useTaxedAmount, |
| 144 | } |
| 145 |