PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 2.4.8
Booking for Appointments and Events Calendar – Amelia v2.4.8
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 / views / public / Parts / Payment / Methods / PaymentCommon.vue
ameliabooking / v3 / src / views / public / Parts / Payment / Methods Last commit date
PaymentCommon.vue 3 days ago PaymentOnSite.vue 1 month ago PaymentPayPal.vue 3 days ago PaymentSquare.vue 3 days ago PaymentStripe.vue 3 days ago PaymentWc.vue 1 month ago
PaymentCommon.vue
193 lines
1 <template>
2 <div class="am-fs__payment_default"></div>
3 </template>
4
5 <script setup>
6 // * Import from Vue
7 import { ref, inject, watchEffect } from 'vue'
8
9 import httpClient from '../../../../../plugins/axios'
10
11 // * Import from Vuex
12 import { useStore } from 'vuex'
13
14 // * Composables
15 import {
16 useBookingData,
17 useCreateBookingError,
18 getErrorMessage,
19 } from '../../../../../assets/js/public/booking.js'
20 import {
21 storeDeferredGatewayCache,
22 storeRazorpayCache,
23 deletePendingRazorpayBookings,
24 razorpayVerify,
25 } from '@/assets/js/common/integrationRazorpay.js'
26
27 const store = useStore()
28
29 const emits = defineEmits(['payment-error', 'payment-abandoned'])
30
31 const shortcodeData = inject('shortcodeData')
32
33 let stepsArray = inject('stepsArray')
34
35 let sidebarSteps = inject('sidebarSteps', ref([]))
36
37 /**************
38 * Navigation *
39 *************/
40
41 const { nextStep, footerButtonReset, footerButtonClicked } = inject('changingStepsFunctions', {
42 nextStep: () => {},
43 footerButtonReset: () => {},
44 footerButtonClicked: {
45 value: false,
46 },
47 })
48
49 // * Labels
50 const amLabels = inject('amLabels')
51
52 watchEffect(
53 () => {
54 if (footerButtonClicked.value) {
55 if (!store.getters['coupon/getCouponValidated']) {
56 footerButtonReset()
57 emits('payment-error', amLabels.value.coupon_mandatory)
58 } else {
59 continueWithBooking()
60 }
61 }
62 },
63 { flush: 'post' },
64 )
65
66 /***********
67 * Payment *
68 **********/
69
70 function continueWithBooking() {
71 footerButtonReset()
72
73 let isEvent = store.getters['bookableType/getType'] === 'event'
74
75 let gateway = isEvent
76 ? store.getters['payment/getPaymentGateway']
77 : store.getters['booking/getPaymentGateway']
78
79 let formData = isEvent
80 ? {
81 shortcode: shortcodeData.value,
82 steps: stepsArray.value.map((i) => i.name),
83 }
84 : {
85 shortcode: shortcodeData.value,
86 steps: stepsArray.value.map((i) => i.key),
87 sidebar: sidebarSteps.value.map((i) =>
88 Object.assign({ key: i.key, data: i.stepSelectedData }),
89 ),
90 }
91
92 let bookingData = useBookingData(
93 store,
94 gateway === 'mollie' || gateway === 'barion' || gateway === 'razorpay' ? formData : null,
95 false,
96 {},
97 null,
98 )
99
100 store.commit(isEvent ? 'setLoading' : 'booking/setLoading', true)
101
102 switch (gateway) {
103 case 'mollie':
104 payment('/payment/mollie', bookingData, function (response) {
105 storeDeferredGatewayCache(response)
106 window.location = response.data.data.redirectUrl
107 })
108
109 break
110
111 case 'razorpay':
112 payment('/payment/razorpay', bookingData, function (response) {
113 storeRazorpayCache(response)
114
115 let options = response.data.data.data
116 let cacheName = response.data.data.name
117 let razorpayCheckoutFinalizing = false
118
119 options.handler = function (razorpayResponse) {
120 razorpayCheckoutFinalizing = true
121 razorpayVerify(
122 store,
123 razorpayResponse.razorpay_payment_id,
124 razorpayResponse.razorpay_signature,
125 options.order_id,
126 cacheName,
127 {
128 onSuccess: () => nextStep(),
129 onError: (message) => emits('payment-error', message),
130 },
131 )
132 }
133
134 options.modal = {
135 ondismiss: async function () {
136 if (razorpayCheckoutFinalizing) {
137 return
138 }
139
140 const deleted = await deletePendingRazorpayBookings()
141
142 if (deleted) {
143 emits('payment-abandoned')
144 }
145 },
146 }
147
148 let razorpay = new Razorpay(options)
149
150 razorpay.open()
151 })
152
153 break
154
155 case 'barion':
156 payment('/payment/barion', bookingData, function (response) {
157 storeDeferredGatewayCache(response)
158 window.location = response.data.data.redirectUrl
159 })
160
161 break
162 }
163 }
164
165 function payment(endpoint, bookingData, success) {
166 httpClient
167 .post(endpoint, bookingData.data, bookingData.options)
168 .then(success)
169 .catch((error) => {
170 useCreateBookingError(store, error.response.data, () => {
171 emits('payment-error', getErrorMessage())
172 })
173 })
174 }
175 </script>
176
177 <script>
178 export default {
179 name: 'PaymentCommon',
180 }
181 </script>
182
183 <style lang="scss">
184 .amelia-v2-booking {
185 #amelia-container {
186 .am-fs__payment_default {
187 &-btn {
188 }
189 }
190 }
191 }
192 </style>
193