@bash-app/bash-common 30.57.0 → 30.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/extendedSchemas.d.ts +44 -0
- package/dist/extendedSchemas.d.ts.map +1 -1
- package/dist/extendedSchemas.js +6 -0
- package/dist/extendedSchemas.js.map +1 -1
- package/dist/utils/dateTimeUtils.d.ts +1 -17
- package/dist/utils/dateTimeUtils.d.ts.map +1 -1
- package/dist/utils/dateTimeUtils.js +1 -114
- package/dist/utils/dateTimeUtils.js.map +1 -1
- package/dist/utils/luxonUtils.d.ts +17 -6
- package/dist/utils/luxonUtils.d.ts.map +1 -1
- package/dist/utils/luxonUtils.js +31 -3
- package/dist/utils/luxonUtils.js.map +1 -1
- package/dist/utils/recurrenceUtils.d.ts +1 -1
- package/dist/utils/recurrenceUtils.d.ts.map +1 -1
- package/dist/utils/recurrenceUtils.js +24 -49
- package/dist/utils/recurrenceUtils.js.map +1 -1
- package/dist/utils/service/apiServiceBookingApiUtils.d.ts +14 -2
- package/dist/utils/service/apiServiceBookingApiUtils.d.ts.map +1 -1
- package/dist/utils/service/apiServiceBookingApiUtils.js +36 -2
- package/dist/utils/service/apiServiceBookingApiUtils.js.map +1 -1
- package/dist/utils/service/frontendServiceBookingUtils.d.ts +10 -3
- package/dist/utils/service/frontendServiceBookingUtils.d.ts.map +1 -1
- package/dist/utils/service/frontendServiceBookingUtils.js +86 -40
- package/dist/utils/service/frontendServiceBookingUtils.js.map +1 -1
- package/dist/utils/service/serviceBookingTypes.d.ts +4 -2
- package/dist/utils/service/serviceBookingTypes.d.ts.map +1 -1
- package/dist/utils/ticketListUtils.d.ts.map +1 -1
- package/dist/utils/ticketListUtils.js +10 -13
- package/dist/utils/ticketListUtils.js.map +1 -1
- package/dist/utils/typeUtils.d.ts +5 -0
- package/dist/utils/typeUtils.d.ts.map +1 -1
- package/dist/utils/typeUtils.js.map +1 -1
- package/package.json +1 -1
- package/prisma/schema.prisma +36 -41
- package/src/extendedSchemas.ts +9 -0
- package/src/utils/dateTimeUtils.ts +7 -190
- package/src/utils/luxonUtils.ts +56 -10
- package/src/utils/recurrenceUtils.ts +97 -77
- package/src/utils/service/apiServiceBookingApiUtils.ts +64 -7
- package/src/utils/service/frontendServiceBookingUtils.ts +120 -49
- package/src/utils/service/serviceBookingTypes.ts +30 -2
- package/src/utils/ticketListUtils.ts +40 -27
- package/src/utils/typeUtils.ts +15 -8
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ServiceBookingFeeType, } from "@prisma/client";
|
|
1
|
+
import { ServiceBookingFeeType, ServiceBookingRateOption, } from "@prisma/client";
|
|
2
2
|
import { getServiceRatePricingInfo, SERVICE_DAILY_RATE_HOURS_MIN, serviceGetFilteredRates, serviceRatesFilter, serviceRatesHasRates, } from "./serviceRateUtils";
|
|
3
3
|
import { dateTimeDiffHours, } from "../luxonUtils";
|
|
4
4
|
export const SERVICE_BOOKING_PROCESSING_FEE_PERCENT = 0.15;
|
|
5
|
-
export function frontendServiceGetBookingDayInfo({ filteredRates, daysToBookParams,
|
|
5
|
+
export function frontendServiceGetBookingDayInfo({ rateOption, filteredRates, daysToBookParams,
|
|
6
6
|
// overlappingBusinessHours,
|
|
7
7
|
timezone, }) {
|
|
8
8
|
const bookingDayResults = daysToBookParams.map((day) => {
|
|
@@ -16,73 +16,113 @@ timezone, }) {
|
|
|
16
16
|
let hoursRemaining = durationHours;
|
|
17
17
|
let currentRange = { ...day.dateTimeRange };
|
|
18
18
|
let baseCostDiscountedCents = 0;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
// hours: pricingInfo.hours,
|
|
31
|
-
// });
|
|
32
|
-
currentRange.start = pricingInfo.dateTimeRange.end;
|
|
33
|
-
hoursRemaining -= pricingInfo.hours;
|
|
34
|
-
baseCostDiscountedCents += pricingInfo.piTotalCents;
|
|
35
|
-
if (pricingInfo.hours < SERVICE_DAILY_RATE_HOURS_MIN) {
|
|
36
|
-
if (pricingInfo.rateType == "Special") {
|
|
37
|
-
specialRates.pop();
|
|
19
|
+
if (rateOption === ServiceBookingRateOption.FlatRate) {
|
|
20
|
+
}
|
|
21
|
+
else if (rateOption === ServiceBookingRateOption.TimeBased) {
|
|
22
|
+
const rates = serviceRatesFilter(filteredRates, [day.dateTimeRange]);
|
|
23
|
+
const { generalRate, specialRates, dailyRates } = rates;
|
|
24
|
+
while (serviceRatesHasRates(rates) && hoursRemaining > 0) {
|
|
25
|
+
const pricingInfo = getServiceRatePricingInfo(currentRange, generalRate, dailyRates, specialRates,
|
|
26
|
+
// overlappingBusinessHours,
|
|
27
|
+
timezone, hoursRemaining);
|
|
28
|
+
if (pricingInfo.hours == 0 || pricingInfo.unitCount == 0) {
|
|
29
|
+
throw new Error(`Invalid pricingInfo`);
|
|
38
30
|
}
|
|
39
|
-
|
|
40
|
-
|
|
31
|
+
priceBreakdown.push(pricingInfo);
|
|
32
|
+
// currentRange.start = currentRange.start.plus({
|
|
33
|
+
// hours: pricingInfo.hours,
|
|
34
|
+
// });
|
|
35
|
+
currentRange.start = pricingInfo.dateTimeRange.end;
|
|
36
|
+
hoursRemaining -= pricingInfo.hours;
|
|
37
|
+
baseCostDiscountedCents += pricingInfo.piTotalCents;
|
|
38
|
+
if (pricingInfo.hours < SERVICE_DAILY_RATE_HOURS_MIN) {
|
|
39
|
+
if (pricingInfo.rateType == "Special") {
|
|
40
|
+
specialRates.pop();
|
|
41
|
+
}
|
|
42
|
+
else if (pricingInfo.rateType == "Weekday") {
|
|
43
|
+
dailyRates.pop();
|
|
44
|
+
}
|
|
41
45
|
}
|
|
42
46
|
}
|
|
43
47
|
}
|
|
44
|
-
const addOns =
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
const addOns = rateOption === "FlatRate"
|
|
49
|
+
? []
|
|
50
|
+
: day.addOns.map((addOn) => {
|
|
51
|
+
return {
|
|
52
|
+
addOn: addOn,
|
|
53
|
+
addOnId: addOn.id,
|
|
54
|
+
chosenQuantity: addOn.chosenQuantity ?? 0,
|
|
55
|
+
costPQCents: addOn.priceCents,
|
|
56
|
+
};
|
|
57
|
+
});
|
|
52
58
|
const feesTotalCents = day.fees.reduce((sofar, fee) => sofar + fee.costPQCents * fee.quantity, 0);
|
|
53
59
|
const addOnsTotalCents = addOns.reduce((sofar, addOn) => sofar + addOn.costPQCents * addOn.chosenQuantity, 0);
|
|
54
|
-
const
|
|
60
|
+
const subtotalBeforeTaxesCents = baseCostDiscountedCents + addOnsTotalCents;
|
|
61
|
+
const totalBeforeTaxesCents = subtotalBeforeTaxesCents + feesTotalCents;
|
|
55
62
|
return {
|
|
56
63
|
priceBreakdown: priceBreakdown,
|
|
57
64
|
dateTimeRange: day.dateTimeRange,
|
|
65
|
+
rateOption: rateOption,
|
|
58
66
|
timezone: day.dateTimeRange.start.zoneName,
|
|
59
67
|
fees: day.fees,
|
|
60
68
|
addOns: addOns,
|
|
69
|
+
subtotalBeforeTaxesCents: subtotalBeforeTaxesCents,
|
|
61
70
|
totalBeforeTaxesCents: totalBeforeTaxesCents,
|
|
62
71
|
};
|
|
63
72
|
});
|
|
64
73
|
return bookingDayResults;
|
|
65
74
|
}
|
|
66
|
-
export function frontendServiceGetPriceToBookFees(serviceRatesAssociation, { daysToBookParams, selectedAttendeeOption, additionalFees,
|
|
75
|
+
export function frontendServiceGetPriceToBookFees(serviceRatesAssociation, { daysToBookParams, selectedAttendeeOption, addOns, additionalFees,
|
|
67
76
|
// overlappingBusinessHours,
|
|
68
77
|
timezone, }) {
|
|
69
78
|
const bookingDateTimeRanges = daysToBookParams.map((daysToBookParams) => daysToBookParams.dateTimeRange);
|
|
70
79
|
const filteredRates = serviceGetFilteredRates(serviceRatesAssociation, bookingDateTimeRanges, timezone);
|
|
80
|
+
const isFlatRate = (filteredRates.generalRate?.flatRateCents ?? 0) > 0;
|
|
81
|
+
const rateOption = isFlatRate
|
|
82
|
+
? ServiceBookingRateOption.FlatRate
|
|
83
|
+
: ServiceBookingRateOption.TimeBased;
|
|
84
|
+
//only add addOns if flat rate booking (addOns are part of the day for time based bookings)
|
|
85
|
+
const usedAddons = rateOption === ServiceBookingRateOption.FlatRate
|
|
86
|
+
? addOns.map((addOn) => {
|
|
87
|
+
return {
|
|
88
|
+
addOn: addOn,
|
|
89
|
+
addOnId: addOn.id,
|
|
90
|
+
chosenQuantity: addOn.chosenQuantity ?? 0,
|
|
91
|
+
costPQCents: addOn.priceCents,
|
|
92
|
+
};
|
|
93
|
+
})
|
|
94
|
+
: [];
|
|
71
95
|
const bookingDayResults = frontendServiceGetBookingDayInfo({
|
|
96
|
+
rateOption: rateOption,
|
|
72
97
|
filteredRates: filteredRates,
|
|
73
98
|
daysToBookParams: daysToBookParams,
|
|
74
99
|
// overlappingBusinessHours: overlappingBusinessHours,
|
|
75
100
|
timezone: timezone,
|
|
76
101
|
});
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
102
|
+
const flatRateCents = filteredRates.generalRate?.flatRateCents ?? 0;
|
|
103
|
+
const daysTotalBeforeTaxesCents = rateOption === ServiceBookingRateOption.FlatRate
|
|
104
|
+
? flatRateCents
|
|
105
|
+
: bookingDayResults.reduce((sofar, curr) => {
|
|
106
|
+
return sofar + curr.totalBeforeTaxesCents;
|
|
107
|
+
}, 0);
|
|
80
108
|
const minimumTimeBlockHours = serviceRatesAssociation?.serviceGeneralRates?.minimumTimeBlockHours;
|
|
81
109
|
// const attendeeRate = selectedAttendeeOption.rate * durationHours;
|
|
82
|
-
const processingFeeCents = SERVICE_BOOKING_PROCESSING_FEE_PERCENT * daysTotalBeforeTaxesCents;
|
|
83
|
-
const hasCustomProcessingFee = additionalFees.some((fee) => fee.feeType == ServiceBookingFeeType.ProcessingFee);
|
|
84
110
|
let allAdditionalFees = [...additionalFees];
|
|
111
|
+
// if (rateOption === ServiceBookingRateOption.FlatRate) {
|
|
112
|
+
// allAdditionalFees.push({
|
|
113
|
+
// feeType: ServiceBookingFeeType.FlatRate,
|
|
114
|
+
// name: "Flat Rate",
|
|
115
|
+
// description: "Flat Rate",
|
|
116
|
+
// costPQCents: filteredRates.generalRate?.flatRateCents ?? 0,
|
|
117
|
+
// quantity: 1,
|
|
118
|
+
// });
|
|
119
|
+
// }
|
|
120
|
+
const hasCustomProcessingFee = additionalFees.some((fee) => fee.feeType == ServiceBookingFeeType.ProcessingFee);
|
|
121
|
+
allAdditionalFees = allAdditionalFees.filter((fee) => fee.costPQCents > 0);
|
|
122
|
+
const addOnsTotalCents = usedAddons.reduce((sofar, addOn) => sofar + addOn.costPQCents * addOn.chosenQuantity, 0);
|
|
123
|
+
const subtotalBeforeTaxesCents = daysTotalBeforeTaxesCents + addOnsTotalCents;
|
|
85
124
|
if (!hasCustomProcessingFee) {
|
|
125
|
+
const processingFeeCents = SERVICE_BOOKING_PROCESSING_FEE_PERCENT * subtotalBeforeTaxesCents;
|
|
86
126
|
allAdditionalFees.push({
|
|
87
127
|
feeType: ServiceBookingFeeType.ProcessingFee,
|
|
88
128
|
name: "Processing Fee",
|
|
@@ -91,16 +131,21 @@ timezone, }) {
|
|
|
91
131
|
quantity: 1,
|
|
92
132
|
});
|
|
93
133
|
}
|
|
94
|
-
allAdditionalFees = allAdditionalFees.filter((fee) => fee.costPQCents > 0);
|
|
95
134
|
const allAdditionalFeesCents = allAdditionalFees.reduce((sofar, fee) => sofar + fee.costPQCents * fee.quantity, 0);
|
|
96
|
-
const totalBeforeTaxesCents =
|
|
135
|
+
const totalBeforeTaxesCents = subtotalBeforeTaxesCents + allAdditionalFeesCents;
|
|
97
136
|
return {
|
|
98
137
|
serviceId: serviceRatesAssociation?.serviceId,
|
|
99
138
|
daysToBook: bookingDayResults,
|
|
100
139
|
daysTotalBeforeTaxesCents: daysTotalBeforeTaxesCents,
|
|
140
|
+
subtotalBeforeTaxesCents: subtotalBeforeTaxesCents,
|
|
101
141
|
totalBeforeTaxesCents: totalBeforeTaxesCents,
|
|
102
142
|
additionalFees: allAdditionalFees,
|
|
143
|
+
addOns: usedAddons,
|
|
103
144
|
minimumTimeBlockHours: minimumTimeBlockHours,
|
|
145
|
+
rateOption: rateOption,
|
|
146
|
+
flatRateCents: (filteredRates.generalRate?.flatRateCents ?? 0) > 0
|
|
147
|
+
? filteredRates.generalRate?.flatRateCents
|
|
148
|
+
: undefined,
|
|
104
149
|
};
|
|
105
150
|
}
|
|
106
151
|
export function frontendServiceGetPriceToBook(serviceRatesAssociation, { addOns, selectedAttendeeOption, bookingDateTimeRanges, //list of dateTime ranges to book
|
|
@@ -128,6 +173,7 @@ timezone, }) {
|
|
|
128
173
|
daysToBookParams: daysToBookParams,
|
|
129
174
|
selectedAttendeeOption: selectedAttendeeOption,
|
|
130
175
|
additionalFees: [],
|
|
176
|
+
addOns: addOns,
|
|
131
177
|
timezone: timezone,
|
|
132
178
|
});
|
|
133
179
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontendServiceBookingUtils.js","sourceRoot":"","sources":["../../../src/utils/service/frontendServiceBookingUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,qBAAqB,
|
|
1
|
+
{"version":3,"file":"frontendServiceBookingUtils.js","sourceRoot":"","sources":["../../../src/utils/service/frontendServiceBookingUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { ServiceBookingAddOnExt, ServiceBookingFeeExt, ServiceBookingPriceBreakdownExt, ServiceBookingDayExt, ServiceBookingExt } from "../../extendedSchemas";
|
|
2
2
|
import { LuxonDateRange } from "../luxonUtils";
|
|
3
|
-
|
|
4
|
-
export type
|
|
3
|
+
import { MakeNullablePropsOptional, MakeOptional } from "../typeUtils";
|
|
4
|
+
export type ServiceBookingAddOnBase = Omit<ServiceBookingAddOnExt, "id" | "serviceBookingDayId" | "serviceBookingDay" | "serviceBookingId" | "serviceBooking">;
|
|
5
|
+
export type ServiceBookingPackageBase = Omit<ServiceBookingAddOnExt, "id" | "serviceBookingDayId" | "serviceBookingDay" | "serviceBookingId" | "serviceBooking">;
|
|
5
6
|
export type ServiceBookingFeeBase = Omit<ServiceBookingFeeExt, "id" | "serviceBookingDayId" | "serviceBookingDay" | "serviceBookingId" | "serviceBooking">;
|
|
6
7
|
export type ServiceBookingPriceBreakdownBase = Omit<ServiceBookingPriceBreakdownExt, "id" | "serviceBookingDayId" | "serviceBookingDay">;
|
|
7
8
|
export type ServiceBookingDayBase = Omit<ServiceBookingDayExt, "id" | "serviceBookingRequestId" | "serviceBookingRequest">;
|
|
8
9
|
export type ServiceBookingBase = Pick<ServiceBookingExt, "bookedDays" | "timezone" | "additionalFees">;
|
|
10
|
+
export type ServiceBookingRequiredData = MakeNullablePropsOptional<MakeOptional<ServiceBookingExt, "id" | "isVendorBid" | "bashEventId" | "vendorEventDetails" | "serviceId" | "service" | "forUserId" | "forUser" | "creatorId" | "creator" | "checkout">>;
|
|
9
11
|
export type ServiceBookingAddonBaseT = ServiceBookingAddOnBase;
|
|
10
12
|
export type ServiceBookingPackageBaseT = ServiceBookingPackageBase;
|
|
11
13
|
export type ServiceBookingFeeBaseT = ServiceBookingFeeBase;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serviceBookingTypes.d.ts","sourceRoot":"","sources":["../../../src/utils/service/serviceBookingTypes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serviceBookingTypes.d.ts","sourceRoot":"","sources":["../../../src/utils/service/serviceBookingTypes.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,+BAA+B,EAC/B,oBAAoB,EAGpB,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEvE,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,sBAAsB,EACpB,IAAI,GACJ,qBAAqB,GACrB,mBAAmB,GACnB,kBAAkB,GAClB,gBAAgB,CACnB,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAC1C,sBAAsB,EACpB,IAAI,GACJ,qBAAqB,GACrB,mBAAmB,GACnB,kBAAkB,GAClB,gBAAgB,CACnB,CAAC;AACF,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,oBAAoB,EAClB,IAAI,GACJ,qBAAqB,GACrB,mBAAmB,GACnB,kBAAkB,GAClB,gBAAgB,CACnB,CAAC;AACF,MAAM,MAAM,gCAAgC,GAAG,IAAI,CACjD,+BAA+B,EAC/B,IAAI,GAAG,qBAAqB,GAAG,mBAAmB,CACnD,CAAC;AACF,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,oBAAoB,EACpB,IAAI,GAAG,yBAAyB,GAAG,uBAAuB,CAC3D,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,iBAAiB,EACjB,YAAY,GAAG,UAAU,GAAG,gBAAgB,CAC7C,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,yBAAyB,CAChE,YAAY,CACV,iBAAiB,EACf,IAAI,GACJ,aAAa,GACb,aAAa,GACb,oBAAoB,GACpB,WAAW,GACX,SAAS,GACT,WAAW,GACX,SAAS,GACT,WAAW,GACX,SAAS,GACT,UAAU,CACb,CACF,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,uBAAuB,CAAC;AAC/D,MAAM,MAAM,0BAA0B,GAAG,yBAAyB,CAAC;AACnE,MAAM,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAC3D,MAAM,MAAM,iCAAiC,GAAG,IAAI,CAClD,gCAAgC,EAChC,WAAW,GAAG,SAAS,CACxB,GAAG;IACF,aAAa,EAAE,cAAc,CAAC;CAC/B,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,qBAAqB,EACrB,WAAW,GAAG,SAAS,CACxB,GAAG;IACF,aAAa,EAAE,cAAc,CAAC;CAC/B,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ticketListUtils.d.ts","sourceRoot":"","sources":["../../src/utils/ticketListUtils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EAKvB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ticketListUtils.d.ts","sourceRoot":"","sources":["../../src/utils/ticketListUtils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EAKvB,MAAM,gBAAgB,CAAC;AAQxB;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,GAChD,MAAM,CAoCR;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,MAAM,GACpB,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,CA2CvC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DateTime } from "luxon";
|
|
2
|
-
import { URL_PARAMS_NUMBER_OF_TICKETS_TICKETS_DATE_DELIM, URL_PARAMS_TICKET_LIST_DELIM, URL_PARAMS_TICKET_TIER_ID_NUMBER_OF_TICKETS_DATE_DELIM, URL_PARAMS_TICKETS_DATE_DELIM } from "../definitions";
|
|
3
|
-
import {
|
|
2
|
+
import { URL_PARAMS_NUMBER_OF_TICKETS_TICKETS_DATE_DELIM, URL_PARAMS_TICKET_LIST_DELIM, URL_PARAMS_TICKET_TIER_ID_NUMBER_OF_TICKETS_DATE_DELIM, URL_PARAMS_TICKETS_DATE_DELIM, } from "../definitions";
|
|
3
|
+
import { dateTimeFormat, dateTimeFromDate, } from "./luxonUtils";
|
|
4
4
|
/**
|
|
5
5
|
* Returns A string structured like: [ticketTierId]__[numberOfTickets];;[date]~~[numberOfTickets];;[date]~~,...
|
|
6
6
|
* @param ticketList A map where the key is the ticketTierId
|
|
@@ -9,7 +9,9 @@ export function ticketListToString(ticketList) {
|
|
|
9
9
|
const ticketListArr = [];
|
|
10
10
|
for (const [ticketTierId, ticketListArgs] of ticketList.entries()) {
|
|
11
11
|
let ticketsExist = true;
|
|
12
|
-
const ticketArgs = [
|
|
12
|
+
const ticketArgs = [
|
|
13
|
+
`${ticketTierId}${URL_PARAMS_TICKET_TIER_ID_NUMBER_OF_TICKETS_DATE_DELIM}`,
|
|
14
|
+
];
|
|
13
15
|
for (const ticketNumAndDates of ticketListArgs) {
|
|
14
16
|
if (ticketNumAndDates.numberOfTickets > 0) {
|
|
15
17
|
ticketsExist = true;
|
|
@@ -17,15 +19,9 @@ export function ticketListToString(ticketList) {
|
|
|
17
19
|
let dateTimeStr = ticketNumAndDates.ticketDateTime;
|
|
18
20
|
if (dateTimeStr) {
|
|
19
21
|
// If it's already a string, try to parse it as DateTime and convert to ISO
|
|
20
|
-
const dateTime =
|
|
21
|
-
? DateTime.fromFormat(dateTimeStr, DATETIME_FORMAT_ISO_LIKE).isValid
|
|
22
|
-
? DateTime.fromFormat(dateTimeStr, DATETIME_FORMAT_ISO_LIKE)
|
|
23
|
-
: DateTime.fromISO(dateTimeStr).isValid
|
|
24
|
-
? DateTime.fromISO(dateTimeStr)
|
|
25
|
-
: DateTime.fromJSDate(new Date(dateTimeStr))
|
|
26
|
-
: DateTime.fromJSDate(dateTimeStr);
|
|
22
|
+
const dateTime = dateTimeFromDate(dateTimeStr);
|
|
27
23
|
if (dateTime.isValid) {
|
|
28
|
-
dateTimeStr = dateTime
|
|
24
|
+
dateTimeStr = dateTimeFormat(dateTime) || dateTimeStr;
|
|
29
25
|
}
|
|
30
26
|
}
|
|
31
27
|
ticketArgs.push(`${ticketNumAndDates.numberOfTickets}${URL_PARAMS_TICKETS_DATE_DELIM}${dateTimeStr}`);
|
|
@@ -56,7 +52,8 @@ export function ticketListStrToTicketList(ticketListStr) {
|
|
|
56
52
|
throw new Error(`Could not parse ticketListStr. Maybe it is just an amount?`);
|
|
57
53
|
}
|
|
58
54
|
// ~~[numberOfTickets];;[date]~~[numberOfTickets];;[date]~~...
|
|
59
|
-
const ticketNumAndDates = ticketNumAndDatesStr
|
|
55
|
+
const ticketNumAndDates = ticketNumAndDatesStr
|
|
56
|
+
.split(URL_PARAMS_NUMBER_OF_TICKETS_TICKETS_DATE_DELIM)
|
|
60
57
|
.filter((ticketNumAndDateStr) => !!ticketNumAndDateStr);
|
|
61
58
|
for (const ticketNumAndDateStr of ticketNumAndDates) {
|
|
62
59
|
// [numberOfTickets];;[date]
|
|
@@ -64,7 +61,7 @@ export function ticketListStrToTicketList(ticketListStr) {
|
|
|
64
61
|
const ticketDateTime = DateTime.fromISO(ticketDateTimeStr);
|
|
65
62
|
let ticketDateTimeFormattedStr = undefined;
|
|
66
63
|
if (ticketDateTime.isValid) {
|
|
67
|
-
ticketDateTimeFormattedStr = ticketDateTime
|
|
64
|
+
ticketDateTimeFormattedStr = dateTimeFormat(ticketDateTime);
|
|
68
65
|
}
|
|
69
66
|
ticketNumAndDatesArr.push({
|
|
70
67
|
numberOfTickets: parseInt(numberOfTickets),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ticketListUtils.js","sourceRoot":"","sources":["../../src/utils/ticketListUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAEL,+CAA+C,EAC/C,4BAA4B,EAC5B,sDAAsD,EACtD,6BAA6B,
|
|
1
|
+
{"version":3,"file":"ticketListUtils.js","sourceRoot":"","sources":["../../src/utils/ticketListUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,11 @@ export type ValueOf<T> = T[keyof T];
|
|
|
2
2
|
export type UnionFromArray<T extends ReadonlyArray<any>> = T[number];
|
|
3
3
|
export type RemoveCommonProperties<T, U> = keyof (Omit<T, keyof U> & Omit<U, keyof T>);
|
|
4
4
|
export type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
5
|
+
export type MakeNullablePropsOptional<T> = {
|
|
6
|
+
[K in keyof T as null extends T[K] ? K : never]?: Exclude<T[K], undefined> | undefined;
|
|
7
|
+
} & {
|
|
8
|
+
[K in keyof T as null extends T[K] ? never : K]: T[K];
|
|
9
|
+
};
|
|
5
10
|
export type MakeRequired<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
|
|
6
11
|
export type DeepPartial<T> = T extends Function ? T : T extends Array<infer U> ? Array<DeepPartial<U>> : T extends object ? {
|
|
7
12
|
[P in keyof T]?: DeepPartial<T[P]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeUtils.d.ts","sourceRoot":"","sources":["../../src/utils/typeUtils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AACrE,MAAM,MAAM,sBAAsB,CAAC,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAChE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAEpB,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACzD,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEtB,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACzD,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEvB,MAAM,MAAM,WAAW,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"typeUtils.d.ts","sourceRoot":"","sources":["../../src/utils/typeUtils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AACrE,MAAM,MAAM,sBAAsB,CAAC,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAChE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAEpB,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACzD,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEtB,MAAM,MAAM,yBAAyB,CAAC,CAAC,IAAI;KACxC,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,EAC5C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GACxB,SAAS;CACd,GAAG;KACD,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACzD,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEvB,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,GAC3C,CAAC,GACD,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GACxB,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GACrB,CAAC,SAAS,MAAM,GAChB;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACtC,CAAC,CAAC;AAEN,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AAGlD,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAClD,IAAI,EAAE,CAAC,EAAE,GACR,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAKjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeUtils.js","sourceRoot":"","sources":["../../src/utils/typeUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"typeUtils.js","sourceRoot":"","sources":["../../src/utils/typeUtils.ts"],"names":[],"mappings":"AA6BA,sCAAsC;AACtC,MAAM,UAAU,mBAAmB,CACjC,IAAS;IAET,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAChB,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAqB,CAAC,CAAC;AAC5B,CAAC"}
|
package/package.json
CHANGED
package/prisma/schema.prisma
CHANGED
|
@@ -372,6 +372,11 @@ model BashEvent {
|
|
|
372
372
|
venue Venue? @relation(fields: [venueId], references: [id])
|
|
373
373
|
userPromoCodeRedemption UserPromoCodeRedemption[]
|
|
374
374
|
averageRating Float? @default(0)
|
|
375
|
+
allowDonations Boolean? @default(true)
|
|
376
|
+
suggestedDonationAmount Int? // stored in cents like other prices
|
|
377
|
+
donationDetails String?
|
|
378
|
+
absorbDonationFees Boolean @default(false)
|
|
379
|
+
absorbTicketFees Boolean @default(false)
|
|
375
380
|
serviceBookings ServiceBooking[] // Add this field to create the reverse relation
|
|
376
381
|
userReport UserReport[]
|
|
377
382
|
favoritedBy UserFavorite[]
|
|
@@ -499,35 +504,6 @@ model TicketMetadata {
|
|
|
499
504
|
@@index([ticketId])
|
|
500
505
|
}
|
|
501
506
|
|
|
502
|
-
// enum BookingStatus {
|
|
503
|
-
// Cancelled
|
|
504
|
-
// Completed
|
|
505
|
-
// Missed
|
|
506
|
-
// }
|
|
507
|
-
|
|
508
|
-
// model Booking {
|
|
509
|
-
// id String @id @default(cuid())
|
|
510
|
-
// serviceId String
|
|
511
|
-
// service Service @relation(fields: [serviceId], references: [id])
|
|
512
|
-
// validDate DateTime?
|
|
513
|
-
// forUserId String?
|
|
514
|
-
// forUser User? @relation(fields: [forUserId], references: [id])
|
|
515
|
-
// fullName String?
|
|
516
|
-
// email String?
|
|
517
|
-
// paidOn DateTime?
|
|
518
|
-
// requireDeposit Boolean?
|
|
519
|
-
// status BookingStatus?
|
|
520
|
-
// geoFenceCheckInUnnecessary Boolean?
|
|
521
|
-
// checkedInAt DateTime?
|
|
522
|
-
// checkedOutAt DateTime?
|
|
523
|
-
// checkoutId String?
|
|
524
|
-
// checkout Checkout? @relation(fields: [checkoutId], references: [id])
|
|
525
|
-
|
|
526
|
-
// @@index([serviceId])
|
|
527
|
-
// @@index([forUserId])
|
|
528
|
-
// @@index([checkoutId])
|
|
529
|
-
// }
|
|
530
|
-
|
|
531
507
|
model unusedModelButNeededForSomeTypesToBeDefinedForTypescript {
|
|
532
508
|
id String @id @default(cuid())
|
|
533
509
|
doNotUseVibeEnum BashEventVibeTags @default(Wild)
|
|
@@ -1530,7 +1506,6 @@ model Service {
|
|
|
1530
1506
|
|
|
1531
1507
|
bashesNotInterestedIn BashEventType[]
|
|
1532
1508
|
customExcludedEventTypes String[] @default([])
|
|
1533
|
-
// bookings Booking[]
|
|
1534
1509
|
media Media[]
|
|
1535
1510
|
serviceLinks ServiceLink[]
|
|
1536
1511
|
|
|
@@ -3112,17 +3087,17 @@ model ServiceRatesAssociation {
|
|
|
3112
3087
|
// Missed
|
|
3113
3088
|
// }
|
|
3114
3089
|
|
|
3090
|
+
//Fees can either apply to entire booking or just a single day
|
|
3115
3091
|
enum ServiceBookingFeeType {
|
|
3116
|
-
// AddOn
|
|
3117
|
-
// Package
|
|
3118
3092
|
CleaningFee
|
|
3119
3093
|
ProcessingFee
|
|
3094
|
+
// FlatRate
|
|
3120
3095
|
}
|
|
3121
3096
|
|
|
3097
|
+
//Only where billed by time
|
|
3122
3098
|
enum ServiceRatePricingType {
|
|
3123
3099
|
Hourly
|
|
3124
3100
|
Daily
|
|
3125
|
-
Flat
|
|
3126
3101
|
}
|
|
3127
3102
|
|
|
3128
3103
|
enum ServiceBookingStatus {
|
|
@@ -3138,11 +3113,20 @@ enum ServiceBookingType {
|
|
|
3138
3113
|
Instant
|
|
3139
3114
|
}
|
|
3140
3115
|
|
|
3116
|
+
// User options for rates
|
|
3117
|
+
enum ServiceBookingRateOption {
|
|
3118
|
+
TimeBased
|
|
3119
|
+
FlatRate
|
|
3120
|
+
}
|
|
3121
|
+
|
|
3141
3122
|
model ServiceBookingAddOn {
|
|
3142
3123
|
id String @id @default(cuid())
|
|
3143
3124
|
|
|
3144
|
-
serviceBookingDay ServiceBookingDay @relation(fields: [serviceBookingDayId], references: [id], onDelete: Cascade)
|
|
3145
|
-
serviceBookingDayId String
|
|
3125
|
+
serviceBookingDay ServiceBookingDay? @relation(fields: [serviceBookingDayId], references: [id], onDelete: Cascade)
|
|
3126
|
+
serviceBookingDayId String?
|
|
3127
|
+
|
|
3128
|
+
serviceBooking ServiceBooking? @relation(fields: [serviceBookingId], references: [id])
|
|
3129
|
+
serviceBookingId String?
|
|
3146
3130
|
|
|
3147
3131
|
addOnId String
|
|
3148
3132
|
addOn ServiceAddon @relation(fields: [addOnId], references: [id])
|
|
@@ -3154,8 +3138,11 @@ model ServiceBookingAddOn {
|
|
|
3154
3138
|
model ServiceBookingPackage {
|
|
3155
3139
|
id String @id @default(cuid())
|
|
3156
3140
|
|
|
3157
|
-
serviceBookingDay ServiceBookingDay @relation(fields: [serviceBookingDayId], references: [id], onDelete: Cascade)
|
|
3158
|
-
serviceBookingDayId String
|
|
3141
|
+
serviceBookingDay ServiceBookingDay? @relation(fields: [serviceBookingDayId], references: [id], onDelete: Cascade)
|
|
3142
|
+
serviceBookingDayId String?
|
|
3143
|
+
|
|
3144
|
+
serviceBooking ServiceBooking? @relation(fields: [serviceBookingId], references: [id])
|
|
3145
|
+
serviceBookingId String?
|
|
3159
3146
|
|
|
3160
3147
|
packageId String
|
|
3161
3148
|
package ServicePackage @relation(fields: [packageId], references: [id])
|
|
@@ -3214,7 +3201,8 @@ model ServiceBookingDay {
|
|
|
3214
3201
|
priceBreakdown ServiceBookingPriceBreakdown[]
|
|
3215
3202
|
fees ServiceBookingFee[]
|
|
3216
3203
|
|
|
3217
|
-
|
|
3204
|
+
subtotalBeforeTaxesCents Int @default(0) //subtotal before taxes, fees, and discounts
|
|
3205
|
+
totalBeforeTaxesCents Int
|
|
3218
3206
|
}
|
|
3219
3207
|
|
|
3220
3208
|
model ServiceBookingCheckout {
|
|
@@ -3250,11 +3238,15 @@ model ServiceBooking {
|
|
|
3250
3238
|
forUserId String
|
|
3251
3239
|
forUser User @relation("BookingForUser", fields: [forUserId], references: [id], onDelete: Restrict)
|
|
3252
3240
|
|
|
3253
|
-
bookedDays
|
|
3241
|
+
bookedDays ServiceBookingDay[]
|
|
3242
|
+
daysTotalATBCents Int //ATB=At Time of Booking
|
|
3254
3243
|
|
|
3255
3244
|
serviceId String
|
|
3256
3245
|
service Service @relation(fields: [serviceId], references: [id], onDelete: Restrict)
|
|
3257
3246
|
|
|
3247
|
+
rateOption ServiceBookingRateOption @default(TimeBased)
|
|
3248
|
+
flatRateCents Int? //if flat rate is selected, this is the total flat rate for the booking
|
|
3249
|
+
|
|
3258
3250
|
status ServiceBookingStatus @default(Pending)
|
|
3259
3251
|
bookingType ServiceBookingType @default(Request)
|
|
3260
3252
|
|
|
@@ -3273,8 +3265,11 @@ model ServiceBooking {
|
|
|
3273
3265
|
|
|
3274
3266
|
additionalFees ServiceBookingFee[]
|
|
3275
3267
|
|
|
3276
|
-
|
|
3277
|
-
|
|
3268
|
+
addOns ServiceBookingAddOn[] // for services that aren't billed by time, but have add-ons
|
|
3269
|
+
packages ServiceBookingPackage[] // for services that aren't billed by time, but have packages
|
|
3270
|
+
|
|
3271
|
+
totalATBCents Int
|
|
3272
|
+
subtotalATBCents Int @default(0) //subtotal before taxes, fees, and discounts
|
|
3278
3273
|
|
|
3279
3274
|
bashEventId String?
|
|
3280
3275
|
bashEvent BashEvent? @relation(fields: [bashEventId], references: [id])
|
package/src/extendedSchemas.ts
CHANGED
|
@@ -433,6 +433,9 @@ export interface ServiceBookingExt extends ServiceBooking {
|
|
|
433
433
|
bookedDays: ServiceBookingDayExt[];
|
|
434
434
|
additionalFees: ServiceBookingFeeExt[];
|
|
435
435
|
|
|
436
|
+
addOns: ServiceBookingAddOnExt[];
|
|
437
|
+
packages: ServiceBookingPackageExt[];
|
|
438
|
+
|
|
436
439
|
creator: PublicUser;
|
|
437
440
|
forUser: PublicUser;
|
|
438
441
|
service: ServiceExt;
|
|
@@ -499,6 +502,12 @@ export const SERVICE_BOOKING_PUBLIC_DATA_TO_INCLUDE = {
|
|
|
499
502
|
bashEvent: undefined, // Remove circular reference
|
|
500
503
|
},
|
|
501
504
|
},
|
|
505
|
+
addOns: {
|
|
506
|
+
include: SERVICE_BOOKING_ADDON_DATA_TO_INCLUDE,
|
|
507
|
+
},
|
|
508
|
+
packages: {
|
|
509
|
+
include: SERVICE_BOOKING_PACKAGE_DATA_TO_INCLUDE,
|
|
510
|
+
},
|
|
502
511
|
additionalFees: true,
|
|
503
512
|
} satisfies Prisma.ServiceBookingInclude;
|
|
504
513
|
|