PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 2.4.6
Booking for Appointments and Events Calendar – Amelia v2.4.6
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 / store / modules / tickets.js
ameliabooking / v3 / src / store / modules Last commit date
appointment.js 1 month ago appointmentWaitingListOptions.js 1 month ago attendee.js 1 month ago auth.js 1 month ago bookableType.js 1 month ago booking.js 1 month ago cabinet.js 1 month ago cabinetFilters.js 1 month ago coupon.js 1 month ago customFields.js 1 month ago customerInfo.js 1 month ago employee.js 1 month ago entities.js 3 weeks ago event.js 1 month ago eventBooking.js 1 month ago eventEntities.js 3 weeks ago eventWaitingListOptions.js 1 month ago pagination.js 1 month ago params.js 1 month ago payment.js 1 month ago persons.js 1 month ago recurring.js 1 month ago shortcodeParams.js 1 month ago stepByStepFilters.js 1 month ago tickets.js 6 days ago
tickets.js
168 lines
1 export default {
2 namespaced: true,
3
4 state: () => ({
5 tickets: [],
6 ticketsData: [],
7 maxCustomCapacity: null,
8 maxExtraPeople: null,
9 globalSpots: 0,
10 pendingPreselectedTickets: [],
11 }),
12
13 getters: {
14 getMaxCustomCapacity(state) {
15 return state.maxCustomCapacity
16 },
17
18 getMaxExtraPeople(state) {
19 return state.maxExtraPeople
20 },
21
22 getTicketNumber: (state) => (id) => {
23 return state.ticketsData.find((t) => t.id === id).persons
24 },
25
26 getTicketsSum(state) {
27 let persons = 0
28 state.ticketsData.forEach((t) => {
29 persons += t.persons
30 })
31
32 return persons
33 },
34
35 getTicketsData(state) {
36 return state.ticketsData
37 },
38
39 getEventGlobalSpots(state) {
40 return state.globalSpots
41 },
42
43 getAllData(state) {
44 return {
45 tickets: state.tickets,
46 ticketsData: state.ticketsData,
47 maxCustomCapacity: state.maxCustomCapacity,
48 maxExtraPeople: state.maxExtraPeople,
49 globalSpots: state.globalSpots,
50 }
51 },
52 },
53
54 mutations: {
55 setTickets(state, payload) {
56 state.tickets = payload
57 payload.forEach((item) => {
58 if (item.enabled) {
59 let obj = {
60 spots: item.spots,
61 sold: item.sold,
62 persons: 0,
63 price: item.dateRangePrice != null ? item.dateRangePrice : item.price,
64 name: item.name,
65 id: item.id,
66 eventTicketId: item.id,
67 waiting: item.waiting,
68 waitingListSpots: item.waitingListSpots,
69 }
70 state.ticketsData.push(obj)
71 }
72 })
73 },
74
75 setMaxCustomCapacity(state, payload) {
76 state.maxCustomCapacity = payload
77 },
78
79 setReduceMaxExtraPeople(state, payload) {
80 state.maxExtraPeople = state.maxExtraPeople + 1 - payload
81 },
82
83 setMaxExtraPeople(state, payload) {
84 state.maxExtraPeople = payload
85 },
86
87 setTicketNumber(state, payload) {
88 state.ticketsData.forEach((t) => {
89 if (t.id === payload.id) t.persons = parseInt(payload.numb)
90 })
91 },
92
93 setEventGlobalSpots(state, payload) {
94 state.globalSpots += payload
95 },
96
97 setPendingPreselectedTickets(state, payload) {
98 state.pendingPreselectedTickets = Array.isArray(payload) ? payload : []
99 },
100
101 applyPendingPreselectedTickets(state, payload) {
102 if (!state.pendingPreselectedTickets.length || !state.ticketsData.length) {
103 return
104 }
105
106 const waitingMode = !!(payload && payload.waitingMode)
107 const sharedWaitingSpotsLeft =
108 payload && typeof payload.sharedWaitingSpotsLeft === 'number'
109 ? Math.max(0, payload.sharedWaitingSpotsLeft)
110 : null
111 const useSharedWaitingCap =
112 waitingMode && !!state.maxCustomCapacity && sharedWaitingSpotsLeft !== null
113 const pendingById = {}
114
115 state.pendingPreselectedTickets.forEach((ticket) => {
116 const id = parseInt(ticket.id)
117 const quantity = parseInt(ticket.quantity)
118 if (!isNaN(id) && !isNaN(quantity) && quantity > 0) {
119 pendingById[id] = quantity
120 }
121 })
122
123 let selectedTotal = 0
124 let remainingShared = useSharedWaitingCap ? sharedWaitingSpotsLeft : null
125
126 state.ticketsData.forEach((ticket) => {
127 const wanted = ticket.id in pendingById ? pendingById[ticket.id] : 0
128 const maxAllowed = useSharedWaitingCap
129 ? remainingShared
130 : waitingMode
131 ? Math.max(0, (ticket.waitingListSpots || 0) - (ticket.waiting || 0))
132 : Math.max(0, (ticket.spots || 0) - (ticket.sold || 0))
133
134 ticket.persons = Math.max(0, Math.min(wanted, maxAllowed))
135 selectedTotal += ticket.persons
136
137 if (useSharedWaitingCap) {
138 remainingShared = Math.max(0, remainingShared - ticket.persons)
139 }
140 })
141
142 state.globalSpots = selectedTotal
143 state.pendingPreselectedTickets = []
144 },
145
146 setAllData(state, payload) {
147 state.tickets = payload.tickets
148 state.ticketsData = payload.ticketsData
149 state.maxCustomCapacity = payload.maxCustomCapacity
150 state.maxExtraPeople = payload.maxExtraPeople
151 state.globalSpots = payload.globalSpots
152 state.pendingPreselectedTickets = []
153 },
154 },
155
156 actions: {
157 resetCustomTickets({ commit }) {
158 commit('setAllData', {
159 tickets: [],
160 ticketsData: [],
161 maxCustomCapacity: null,
162 maxExtraPeople: null,
163 globalSpots: 0,
164 })
165 },
166 },
167 }
168