PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / trunk
Booking for Appointments and Events Calendar – Amelia vtrunk
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 5 days ago booking.js 5 days ago cabinet.js 5 days ago cart.js 5 days ago catalog.js 5 days ago coupon.js 5 days ago customFields.js 5 days ago events.js 5 days ago facebookPixel.js 5 days ago ivy.js 5 days ago package.js 5 days ago panel.js 5 days ago public.js 5 days ago renderActions.js 5 days ago restore.js 5 days ago slots.js 5 days ago translation.js 5 days ago user.js 5 days 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