@bash-app/bash-common 30.57.0 → 30.58.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 +31 -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
|
@@ -499,35 +499,6 @@ model TicketMetadata {
|
|
|
499
499
|
@@index([ticketId])
|
|
500
500
|
}
|
|
501
501
|
|
|
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
502
|
model unusedModelButNeededForSomeTypesToBeDefinedForTypescript {
|
|
532
503
|
id String @id @default(cuid())
|
|
533
504
|
doNotUseVibeEnum BashEventVibeTags @default(Wild)
|
|
@@ -1530,7 +1501,6 @@ model Service {
|
|
|
1530
1501
|
|
|
1531
1502
|
bashesNotInterestedIn BashEventType[]
|
|
1532
1503
|
customExcludedEventTypes String[] @default([])
|
|
1533
|
-
// bookings Booking[]
|
|
1534
1504
|
media Media[]
|
|
1535
1505
|
serviceLinks ServiceLink[]
|
|
1536
1506
|
|
|
@@ -3112,17 +3082,17 @@ model ServiceRatesAssociation {
|
|
|
3112
3082
|
// Missed
|
|
3113
3083
|
// }
|
|
3114
3084
|
|
|
3085
|
+
//Fees can either apply to entire booking or just a single day
|
|
3115
3086
|
enum ServiceBookingFeeType {
|
|
3116
|
-
// AddOn
|
|
3117
|
-
// Package
|
|
3118
3087
|
CleaningFee
|
|
3119
3088
|
ProcessingFee
|
|
3089
|
+
// FlatRate
|
|
3120
3090
|
}
|
|
3121
3091
|
|
|
3092
|
+
//Only where billed by time
|
|
3122
3093
|
enum ServiceRatePricingType {
|
|
3123
3094
|
Hourly
|
|
3124
3095
|
Daily
|
|
3125
|
-
Flat
|
|
3126
3096
|
}
|
|
3127
3097
|
|
|
3128
3098
|
enum ServiceBookingStatus {
|
|
@@ -3138,11 +3108,20 @@ enum ServiceBookingType {
|
|
|
3138
3108
|
Instant
|
|
3139
3109
|
}
|
|
3140
3110
|
|
|
3111
|
+
// User options for rates
|
|
3112
|
+
enum ServiceBookingRateOption {
|
|
3113
|
+
TimeBased
|
|
3114
|
+
FlatRate
|
|
3115
|
+
}
|
|
3116
|
+
|
|
3141
3117
|
model ServiceBookingAddOn {
|
|
3142
3118
|
id String @id @default(cuid())
|
|
3143
3119
|
|
|
3144
|
-
serviceBookingDay ServiceBookingDay @relation(fields: [serviceBookingDayId], references: [id], onDelete: Cascade)
|
|
3145
|
-
serviceBookingDayId String
|
|
3120
|
+
serviceBookingDay ServiceBookingDay? @relation(fields: [serviceBookingDayId], references: [id], onDelete: Cascade)
|
|
3121
|
+
serviceBookingDayId String?
|
|
3122
|
+
|
|
3123
|
+
serviceBooking ServiceBooking? @relation(fields: [serviceBookingId], references: [id])
|
|
3124
|
+
serviceBookingId String?
|
|
3146
3125
|
|
|
3147
3126
|
addOnId String
|
|
3148
3127
|
addOn ServiceAddon @relation(fields: [addOnId], references: [id])
|
|
@@ -3154,8 +3133,11 @@ model ServiceBookingAddOn {
|
|
|
3154
3133
|
model ServiceBookingPackage {
|
|
3155
3134
|
id String @id @default(cuid())
|
|
3156
3135
|
|
|
3157
|
-
serviceBookingDay ServiceBookingDay @relation(fields: [serviceBookingDayId], references: [id], onDelete: Cascade)
|
|
3158
|
-
serviceBookingDayId String
|
|
3136
|
+
serviceBookingDay ServiceBookingDay? @relation(fields: [serviceBookingDayId], references: [id], onDelete: Cascade)
|
|
3137
|
+
serviceBookingDayId String?
|
|
3138
|
+
|
|
3139
|
+
serviceBooking ServiceBooking? @relation(fields: [serviceBookingId], references: [id])
|
|
3140
|
+
serviceBookingId String?
|
|
3159
3141
|
|
|
3160
3142
|
packageId String
|
|
3161
3143
|
package ServicePackage @relation(fields: [packageId], references: [id])
|
|
@@ -3214,7 +3196,8 @@ model ServiceBookingDay {
|
|
|
3214
3196
|
priceBreakdown ServiceBookingPriceBreakdown[]
|
|
3215
3197
|
fees ServiceBookingFee[]
|
|
3216
3198
|
|
|
3217
|
-
|
|
3199
|
+
subtotalBeforeTaxesCents Int @default(0) //subtotal before taxes, fees, and discounts
|
|
3200
|
+
totalBeforeTaxesCents Int
|
|
3218
3201
|
}
|
|
3219
3202
|
|
|
3220
3203
|
model ServiceBookingCheckout {
|
|
@@ -3250,11 +3233,15 @@ model ServiceBooking {
|
|
|
3250
3233
|
forUserId String
|
|
3251
3234
|
forUser User @relation("BookingForUser", fields: [forUserId], references: [id], onDelete: Restrict)
|
|
3252
3235
|
|
|
3253
|
-
bookedDays
|
|
3236
|
+
bookedDays ServiceBookingDay[]
|
|
3237
|
+
daysTotalATBCents Int //ATB=At Time of Booking
|
|
3254
3238
|
|
|
3255
3239
|
serviceId String
|
|
3256
3240
|
service Service @relation(fields: [serviceId], references: [id], onDelete: Restrict)
|
|
3257
3241
|
|
|
3242
|
+
rateOption ServiceBookingRateOption @default(TimeBased)
|
|
3243
|
+
flatRateCents Int? //if flat rate is selected, this is the total flat rate for the booking
|
|
3244
|
+
|
|
3258
3245
|
status ServiceBookingStatus @default(Pending)
|
|
3259
3246
|
bookingType ServiceBookingType @default(Request)
|
|
3260
3247
|
|
|
@@ -3273,8 +3260,11 @@ model ServiceBooking {
|
|
|
3273
3260
|
|
|
3274
3261
|
additionalFees ServiceBookingFee[]
|
|
3275
3262
|
|
|
3276
|
-
|
|
3277
|
-
|
|
3263
|
+
addOns ServiceBookingAddOn[] // for services that aren't billed by time, but have add-ons
|
|
3264
|
+
packages ServiceBookingPackage[] // for services that aren't billed by time, but have packages
|
|
3265
|
+
|
|
3266
|
+
totalATBCents Int
|
|
3267
|
+
subtotalATBCents Int @default(0) //subtotal before taxes, fees, and discounts
|
|
3278
3268
|
|
|
3279
3269
|
bashEventId String?
|
|
3280
3270
|
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
|
|