PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 2.4.6
Booking for Appointments and Events Calendar – Amelia v2.4.6
2.4.8 2.4.7 2.4.6 2.4.5 2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / v3 / src / assets / js / public / coupon.js
ameliabooking / v3 / src / assets / js / public Last commit date
actions.js 1 month ago booking.js 1 month ago cabinet.js 1 month ago cart.js 1 month ago catalog.js 1 month ago coupon.js 1 month ago customFields.js 1 month ago customFontFace.js 1 month ago eventFormCssVars.js 1 month ago events.js 1 month ago facebookPixel.js 1 month ago ivy.js 1 month ago package.js 1 month ago panel.js 1 month ago public.js 1 month ago renderActions.js 1 month ago restore.js 1 month ago slots.js 1 month ago translation.js 1 month ago user.js 1 month ago
coupon.js
116 lines
1 import httpClient from '../../../plugins/axios'
2 import { reactive } from 'vue'
3 import { useCart } from './cart'
4
5 const globalLabels = reactive(window.wpAmeliaLabels)
6
7 async function validateCoupon(store, callback) {
8 let type = store.getters['bookableType/getType']
9 ? 'event'
10 : store.getters['booking/getBookableType']
11 let module = type === 'event' ? 'coupon' : 'booking'
12 let customerModule = type === 'event' ? 'customerInfo' : 'booking'
13 let coupon = store.getters[`${module}/getCoupon`]
14 if (coupon.code) {
15 try {
16 const response = await httpClient.post('/coupons/validate', {
17 code: coupon.code,
18 id: getCouponEntityIds(store),
19 type: type,
20 user: {
21 firstName: store.getters[`${customerModule}/getCustomerFirstName`],
22 lastName: store.getters[`${customerModule}/getCustomerLastName`],
23 email: store.getters[`${customerModule}/getCustomerEmail`],
24 },
25 count: coupon.bookingsCount ? coupon.bookingsCount : 1,
26 })
27
28 store.commit(`${module}/setCoupon`, {
29 code: response.data.data.coupon.code,
30 deduction: response.data.data.coupon.deduction,
31 discount: response.data.data.coupon.discount,
32 limit: response.data.data.limit,
33 required: coupon.required,
34 bookingsCount: coupon.bookingsCount,
35 servicesIds: response.data.data.coupon.serviceList.map((i) => i.id),
36 })
37
38 callback()
39 } catch (e) {
40 store.commit(`${module}/setCoupon`, {
41 code: coupon.code,
42 deduction: 0,
43 discount: 0,
44 limit: 0,
45 required: coupon.required,
46 bookingsCount: coupon.bookingsCount,
47 servicesIds: [],
48 })
49
50 let message = e.response.data.message
51
52 if ('couponUnknown' in e.response.data.data && e.response.data.data.couponUnknown === true) {
53 message = globalLabels.coupon_unknown
54 } else if (
55 'couponInvalid' in e.response.data.data &&
56 e.response.data.data.couponInvalid === true
57 ) {
58 message = globalLabels.coupon_invalid
59 } else if (
60 'couponMissing' in e.response.data.data &&
61 e.response.data.data.couponMissing === true
62 ) {
63 message = globalLabels.coupon_missing
64 } else if ('emailError' in e.response.data.data && e.response.data.data.emailError === true) {
65 message = globalLabels.email_exist_error
66 } else if ('phoneError' in e.response.data.data && e.response.data.data.phoneError === true) {
67 message = globalLabels.phone_exist_error
68 }
69
70 store.commit(`${module}/setError`, message)
71
72 callback()
73 }
74 } else {
75 store.commit(`${module}/setCoupon`, {
76 code: '',
77 deduction: 0,
78 discount: 0,
79 limit: 0,
80 required: coupon.required,
81 bookingsCount: coupon.bookingsCount,
82 })
83 }
84 }
85
86 function getCouponEntityIds(store) {
87 let cart = useCart(store)
88 let type =
89 cart.length > 1
90 ? 'cart'
91 : store.getters['bookableType/getType']
92 ? 'event'
93 : store.getters['booking/getBookableType']
94 let ids = []
95 switch (type) {
96 case 'event':
97 ids = store.getters['eventBooking/getSelectedEventId']
98 break
99 case 'cart':
100 ids = useCart(store)
101 .filter((i) => i.serviceId && i.serviceId in i.services)
102 .map((i) => i.serviceId)
103 ids = [...new Set(ids)].join(',')
104 break
105 case 'appointment':
106 case 'package':
107 ids = store.getters['entities/getBookableFromBookableEntities'](
108 store.getters['booking/getSelection'],
109 ).id
110 break
111 }
112 return ids
113 }
114
115 export { validateCoupon }
116