@voyantjs/sellability 0.81.12 → 0.81.15
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/service.d.ts.map +1 -1
- package/dist/service.js +26 -6
- package/package.json +10 -10
package/dist/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/dist/service.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { availabilitySlots } from "@voyantjs/availability/schema";
|
|
2
2
|
import { channelInventoryAllotments, channelInventoryAllotmentTargets, channelInventoryReleaseRules, channels, } from "@voyantjs/distribution/schema";
|
|
3
3
|
import { exchangeRates, fxRateSets, marketChannelRules, marketPriceCatalogs, marketProductRules, markets, } from "@voyantjs/markets/schema";
|
|
4
|
-
import { optionPriceRules, optionStartTimeRules, optionUnitPriceRules, optionUnitTiers, pickupPriceRules, priceCatalogs, priceSchedules, pricingCategories, } from "@voyantjs/pricing/schema";
|
|
4
|
+
import { departurePriceOverrides, optionPriceRules, optionStartTimeRules, optionUnitPriceRules, optionUnitTiers, pickupPriceRules, priceCatalogs, priceSchedules, pricingCategories, } from "@voyantjs/pricing/schema";
|
|
5
5
|
import { optionUnits, productOptions, products } from "@voyantjs/products/schema";
|
|
6
6
|
import { transactionsService } from "@voyantjs/transactions";
|
|
7
7
|
import { and, asc, desc, eq, inArray, sql } from "drizzle-orm";
|
|
@@ -41,10 +41,10 @@ function applyAdjustment(total, adjustment) {
|
|
|
41
41
|
}
|
|
42
42
|
return total;
|
|
43
43
|
}
|
|
44
|
-
function computeUnitAmounts(request, details, unitRule, tier) {
|
|
44
|
+
function computeUnitAmounts(request, details, unitRule, tier, override) {
|
|
45
45
|
const pricingMode = unitRule?.pricingMode ?? "per_unit";
|
|
46
|
-
const baseSell = tier?.sellAmountCents ?? unitRule?.sellAmountCents ?? 0;
|
|
47
|
-
const baseCost = tier?.costAmountCents ?? unitRule?.costAmountCents ?? 0;
|
|
46
|
+
const baseSell = override?.sellAmountCents ?? tier?.sellAmountCents ?? unitRule?.sellAmountCents ?? 0;
|
|
47
|
+
const baseCost = override?.costAmountCents ?? tier?.costAmountCents ?? unitRule?.costAmountCents ?? 0;
|
|
48
48
|
if (pricingMode === "included" || pricingMode === "free") {
|
|
49
49
|
return {
|
|
50
50
|
requestRef: request.requestRef ?? null,
|
|
@@ -837,7 +837,7 @@ export const sellabilityService = {
|
|
|
837
837
|
...new Set(slots.flatMap((slot) => (slot.startTimeId ? [slot.startTimeId] : []))),
|
|
838
838
|
];
|
|
839
839
|
const slotIds = slots.map((slot) => slot.id);
|
|
840
|
-
const [marketRow, channelRow, marketProductRuleRows, marketChannelRuleRows, marketCatalogRows, catalogRows, optionPriceRuleRows, optionScheduleRows, unitPriceRuleRows, unitTierRows, unitRows, pricingCategoryRows, startTimeRuleRows, pickupRuleRows, allotmentRows, allotmentTargetRows, releaseRuleRows, exchangeRateRow,] = await Promise.all([
|
|
840
|
+
const [marketRow, channelRow, marketProductRuleRows, marketChannelRuleRows, marketCatalogRows, catalogRows, optionPriceRuleRows, optionScheduleRows, unitPriceRuleRows, unitTierRows, unitRows, pricingCategoryRows, startTimeRuleRows, pickupRuleRows, allotmentRows, allotmentTargetRows, releaseRuleRows, exchangeRateRow, departureOverrideRows,] = await Promise.all([
|
|
841
841
|
query.marketId
|
|
842
842
|
? db
|
|
843
843
|
.select()
|
|
@@ -938,6 +938,18 @@ export const sellabilityService = {
|
|
|
938
938
|
.where(eq(exchangeRates.quoteCurrency, query.currencyCode))
|
|
939
939
|
.orderBy(desc(fxRateSets.effectiveAt))
|
|
940
940
|
: Promise.resolve([]),
|
|
941
|
+
slotIds.length
|
|
942
|
+
? db
|
|
943
|
+
.select({
|
|
944
|
+
departureId: departurePriceOverrides.departureId,
|
|
945
|
+
priceCatalogId: departurePriceOverrides.priceCatalogId,
|
|
946
|
+
optionUnitId: departurePriceOverrides.optionUnitId,
|
|
947
|
+
sellAmountCents: departurePriceOverrides.sellAmountCents,
|
|
948
|
+
costAmountCents: departurePriceOverrides.costAmountCents,
|
|
949
|
+
})
|
|
950
|
+
.from(departurePriceOverrides)
|
|
951
|
+
.where(and(inArray(departurePriceOverrides.departureId, slotIds), eq(departurePriceOverrides.active, true)))
|
|
952
|
+
: Promise.resolve([]),
|
|
941
953
|
]);
|
|
942
954
|
const optionMap = new Map(optionRows.map((row) => [row.optionId, row]));
|
|
943
955
|
const scheduleMap = new Map(optionScheduleRows.map((row) => [row.id, row]));
|
|
@@ -945,6 +957,10 @@ export const sellabilityService = {
|
|
|
945
957
|
const catalogMap = new Map(catalogRows.map((row) => [row.id, row]));
|
|
946
958
|
const unitMap = new Map(unitRows.map((row) => [row.id, row]));
|
|
947
959
|
const pricingCategoryMap = new Map(pricingCategoryRows.map((row) => [row.id, row]));
|
|
960
|
+
const departureOverrideMap = new Map(departureOverrideRows.map((row) => [
|
|
961
|
+
`${row.departureId}:${row.priceCatalogId}:${row.optionUnitId}`,
|
|
962
|
+
row,
|
|
963
|
+
]));
|
|
948
964
|
const candidates = [];
|
|
949
965
|
for (const slot of slots) {
|
|
950
966
|
if (!slot.optionId)
|
|
@@ -1069,13 +1085,17 @@ export const sellabilityService = {
|
|
|
1069
1085
|
: null;
|
|
1070
1086
|
if (unitRule?.pricingMode === "on_request")
|
|
1071
1087
|
onRequest = true;
|
|
1088
|
+
const overrideUnitId = request.unitId ?? unitRule?.unitId ?? null;
|
|
1089
|
+
const override = overrideUnitId == null
|
|
1090
|
+
? null
|
|
1091
|
+
: (departureOverrideMap.get(`${slot.id}:${chosenRule.priceCatalogId}:${overrideUnitId}`) ?? null);
|
|
1072
1092
|
const item = computeUnitAmounts(request, {
|
|
1073
1093
|
unitName: request.unitId ? (unitMap.get(request.unitId)?.name ?? null) : null,
|
|
1074
1094
|
unitType: request.unitId ? (unitMap.get(request.unitId)?.unitType ?? null) : null,
|
|
1075
1095
|
pricingCategoryName: request.pricingCategoryId
|
|
1076
1096
|
? (pricingCategoryMap.get(request.pricingCategoryId)?.name ?? null)
|
|
1077
1097
|
: null,
|
|
1078
|
-
}, unitRule, tier);
|
|
1098
|
+
}, unitRule, tier, override);
|
|
1079
1099
|
breakdown.push(item);
|
|
1080
1100
|
components.push({
|
|
1081
1101
|
kind: "unit",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voyantjs/sellability",
|
|
3
|
-
"version": "0.81.
|
|
3
|
+
"version": "0.81.15",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -29,15 +29,15 @@
|
|
|
29
29
|
"drizzle-orm": "^0.45.2",
|
|
30
30
|
"hono": "^4.12.10",
|
|
31
31
|
"zod": "^4.3.6",
|
|
32
|
-
"@voyantjs/availability": "0.81.
|
|
33
|
-
"@voyantjs/core": "0.81.
|
|
34
|
-
"@voyantjs/db": "0.81.
|
|
35
|
-
"@voyantjs/distribution": "0.81.
|
|
36
|
-
"@voyantjs/hono": "0.81.
|
|
37
|
-
"@voyantjs/markets": "0.81.
|
|
38
|
-
"@voyantjs/pricing": "0.81.
|
|
39
|
-
"@voyantjs/products": "0.81.
|
|
40
|
-
"@voyantjs/transactions": "0.81.
|
|
32
|
+
"@voyantjs/availability": "0.81.15",
|
|
33
|
+
"@voyantjs/core": "0.81.15",
|
|
34
|
+
"@voyantjs/db": "0.81.15",
|
|
35
|
+
"@voyantjs/distribution": "0.81.15",
|
|
36
|
+
"@voyantjs/hono": "0.81.15",
|
|
37
|
+
"@voyantjs/markets": "0.81.15",
|
|
38
|
+
"@voyantjs/pricing": "0.81.15",
|
|
39
|
+
"@voyantjs/products": "0.81.15",
|
|
40
|
+
"@voyantjs/transactions": "0.81.15"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"typescript": "^6.0.2",
|