@ketvietlab/ketsuite 0.1.1 → 0.1.2
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/modules/backend/design/admin.css +4 -4
- package/dist/modules/hospitality_core/catalog.d.ts +3 -0
- package/dist/modules/hospitality_core/catalog.d.ts.map +1 -0
- package/dist/modules/hospitality_core/catalog.js +284 -0
- package/dist/modules/hospitality_core/catalog.js.map +1 -0
- package/dist/modules/hospitality_core/functions.d.ts.map +1 -1
- package/dist/modules/hospitality_core/functions.js +17 -0
- package/dist/modules/hospitality_core/functions.js.map +1 -1
- package/dist/modules/hospitality_core/index.d.ts.map +1 -1
- package/dist/modules/hospitality_core/index.js +3 -1
- package/dist/modules/hospitality_core/index.js.map +1 -1
- package/dist/modules/hospitality_core/messages.d.ts.map +1 -1
- package/dist/modules/hospitality_core/messages.js +10 -0
- package/dist/modules/hospitality_core/messages.js.map +1 -1
- package/dist/modules/hospitality_core/models.d.ts.map +1 -1
- package/dist/modules/hospitality_core/models.js +1 -0
- package/dist/modules/hospitality_core/models.js.map +1 -1
- package/dist/modules/hospitality_core/relations.d.ts.map +1 -1
- package/dist/modules/hospitality_core/relations.js +1 -0
- package/dist/modules/hospitality_core/relations.js.map +1 -1
- package/dist/modules/hospitality_core/routes.d.ts.map +1 -1
- package/dist/modules/hospitality_core/routes.js +14 -4
- package/dist/modules/hospitality_core/routes.js.map +1 -1
- package/dist/modules/hospitality_core/screens.d.ts +13 -3
- package/dist/modules/hospitality_core/screens.d.ts.map +1 -1
- package/dist/modules/hospitality_core/screens.js +20 -6
- package/dist/modules/hospitality_core/screens.js.map +1 -1
- package/dist/modules/product_backend/client/media-upload-view.d.mts +2 -0
- package/dist/modules/product_backend/client/media-upload-view.d.mts.map +1 -0
- package/dist/modules/product_backend/client/media-upload-view.mjs +26 -0
- package/dist/modules/product_backend/client/media-upload-view.mjs.map +1 -0
- package/dist/modules/product_backend/client/product.d.mts +2 -0
- package/dist/modules/product_backend/client/product.d.mts.map +1 -1
- package/dist/modules/product_backend/client/product.mjs +3 -0
- package/dist/modules/product_backend/client/product.mjs.map +1 -1
- package/dist/modules/product_backend/index.d.ts.map +1 -1
- package/dist/modules/product_backend/index.js +2 -0
- package/dist/modules/product_backend/index.js.map +1 -1
- package/dist/modules/product_backend/islands.d.ts.map +1 -1
- package/dist/modules/product_backend/islands.js +8 -0
- package/dist/modules/product_backend/islands.js.map +1 -1
- package/dist/modules/product_backend/routes.d.ts.map +1 -1
- package/dist/modules/product_backend/routes.js +14 -0
- package/dist/modules/product_backend/routes.js.map +1 -1
- package/dist/ui/media.d.ts +2 -0
- package/dist/ui/media.d.ts.map +1 -1
- package/dist/ui/media.js +1 -1
- package/dist/ui/media.js.map +1 -1
- package/package.json +3 -3
|
@@ -2583,21 +2583,21 @@
|
|
|
2583
2583
|
screens already render their own RecordWorkspace; flatten only the generic
|
|
2584
2584
|
wrapper in that case so no duplicate card or heading appears. */
|
|
2585
2585
|
[data-ui="record-workspace"][data-page-frame="true"]:has(
|
|
2586
|
-
> [data-ui="record-sheet"] > [data-ui="record-body"]
|
|
2586
|
+
> [data-ui="record-sheet"] > [data-ui="record-body"] [data-ui="record-workspace"]
|
|
2587
2587
|
),
|
|
2588
2588
|
[data-ui="record-workspace"][data-page-frame="true"]:has(
|
|
2589
|
-
> [data-ui="record-sheet"] > [data-ui="record-body"]
|
|
2589
|
+
> [data-ui="record-sheet"] > [data-ui="record-body"] [data-ui="record-workspace"]
|
|
2590
2590
|
)
|
|
2591
2591
|
> [data-ui="record-sheet"],
|
|
2592
2592
|
[data-ui="record-workspace"][data-page-frame="true"]:has(
|
|
2593
|
-
> [data-ui="record-sheet"] > [data-ui="record-body"]
|
|
2593
|
+
> [data-ui="record-sheet"] > [data-ui="record-body"] [data-ui="record-workspace"]
|
|
2594
2594
|
)
|
|
2595
2595
|
> [data-ui="record-sheet"]
|
|
2596
2596
|
> [data-ui="record-body"] {
|
|
2597
2597
|
display: contents;
|
|
2598
2598
|
}
|
|
2599
2599
|
[data-ui="record-workspace"][data-page-frame="true"]:has(
|
|
2600
|
-
> [data-ui="record-sheet"] > [data-ui="record-body"]
|
|
2600
|
+
> [data-ui="record-sheet"] > [data-ui="record-body"] [data-ui="record-workspace"]
|
|
2601
2601
|
)
|
|
2602
2602
|
> [data-ui="record-sheet"]
|
|
2603
2603
|
> [data-ui="record-header"] {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketsuite/src/modules/hospitality_core/catalog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAO,MAAM,EAAO,MAAM,mBAAmB,CAAA;AA+NzD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA+E1C,CAAA"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { asc, defineFn, eq, from, inArray } from '@ketvietlab/ketjs';
|
|
2
|
+
import { resolveAddress } from '../address/format.js';
|
|
3
|
+
const page = (limit, offset) => ({
|
|
4
|
+
limit: Math.min(Math.max(Number.isInteger(limit) ? Number(limit) : 50, 1), 200),
|
|
5
|
+
offset: Math.min(Math.max(Number.isInteger(offset) ? Number(offset) : 0, 0), 100_000),
|
|
6
|
+
});
|
|
7
|
+
const idsOf = (value) => Array.isArray(value) ? [...new Set(value.map(String).filter(Boolean))] : null;
|
|
8
|
+
const imageProjection = (row) => ({
|
|
9
|
+
attachmentId: String(row.attachmentId),
|
|
10
|
+
category: String(row.category),
|
|
11
|
+
caption: row.caption == null ? null : String(row.caption),
|
|
12
|
+
});
|
|
13
|
+
const amenityProjection = (row) => ({
|
|
14
|
+
id: String(row.id),
|
|
15
|
+
categoryId: row.categoryId == null ? null : String(row.categoryId),
|
|
16
|
+
code: String(row.code),
|
|
17
|
+
name: String(row.name),
|
|
18
|
+
});
|
|
19
|
+
const publicAddress = async (ctx, row) => {
|
|
20
|
+
if (!row.countryId)
|
|
21
|
+
return ([row.street1, row.street2, row.divisionText, row.locality, row.postalCode, row.countryCode]
|
|
22
|
+
.filter(Boolean)
|
|
23
|
+
.join(', ') || null);
|
|
24
|
+
const resolved = await resolveAddress(ctx, {
|
|
25
|
+
street1: row.street1,
|
|
26
|
+
street2: row.street2,
|
|
27
|
+
locality: row.locality,
|
|
28
|
+
postalCode: row.postalCode,
|
|
29
|
+
countryId: row.countryId,
|
|
30
|
+
divisionId: row.divisionId,
|
|
31
|
+
});
|
|
32
|
+
return resolved.value?.oneLine ?? null;
|
|
33
|
+
};
|
|
34
|
+
const propertyOutput = {
|
|
35
|
+
id: 'id',
|
|
36
|
+
companyId: 'id',
|
|
37
|
+
branchId: 'id?',
|
|
38
|
+
code: 'text',
|
|
39
|
+
name: 'text',
|
|
40
|
+
publicName: 'text?',
|
|
41
|
+
accommodationType: 'text',
|
|
42
|
+
timezone: 'text',
|
|
43
|
+
starRating: 'int',
|
|
44
|
+
addressLine: 'text?',
|
|
45
|
+
locality: 'text?',
|
|
46
|
+
countryCode: 'text?',
|
|
47
|
+
latitude: 'decimal?',
|
|
48
|
+
longitude: 'decimal?',
|
|
49
|
+
description: 'text?',
|
|
50
|
+
houseRules: 'text?',
|
|
51
|
+
childrenStayFree: 'bool',
|
|
52
|
+
minimumGuestAge: 'int?',
|
|
53
|
+
active: 'bool',
|
|
54
|
+
primaryImage: 'json?',
|
|
55
|
+
amenities: 'json?',
|
|
56
|
+
};
|
|
57
|
+
const roomTypeOutput = {
|
|
58
|
+
id: 'id',
|
|
59
|
+
companyId: 'id',
|
|
60
|
+
propertyId: 'id',
|
|
61
|
+
code: 'text',
|
|
62
|
+
name: 'text',
|
|
63
|
+
publicName: 'text?',
|
|
64
|
+
description: 'text?',
|
|
65
|
+
defaultCapacity: 'int',
|
|
66
|
+
maxAdults: 'int',
|
|
67
|
+
maxChildren: 'int',
|
|
68
|
+
maxInfants: 'int',
|
|
69
|
+
maxExtraBeds: 'int',
|
|
70
|
+
sizeSqm: 'decimal?',
|
|
71
|
+
viewType: 'text?',
|
|
72
|
+
sharedBathroom: 'bool',
|
|
73
|
+
baseRate: 'decimal',
|
|
74
|
+
active: 'bool',
|
|
75
|
+
published: 'bool',
|
|
76
|
+
primaryImage: 'json?',
|
|
77
|
+
images: 'json?',
|
|
78
|
+
amenities: 'json?',
|
|
79
|
+
beds: 'json?',
|
|
80
|
+
};
|
|
81
|
+
const projectProperties = async (ctx, rows) => {
|
|
82
|
+
if (!rows.length)
|
|
83
|
+
return [];
|
|
84
|
+
const propertyIds = rows.map((row) => String(row.id));
|
|
85
|
+
const Assignment = ctx.table('hospitality_core.PropertyAmenity');
|
|
86
|
+
const Image = ctx.table('hospitality_core.ContentImage');
|
|
87
|
+
const [assignments, images] = await Promise.all([
|
|
88
|
+
ctx.db.all(from(Assignment).where(inArray(Assignment.propertyId, propertyIds)).preload('amenity')),
|
|
89
|
+
ctx.db.all(from(Image).where(inArray(Image.propertyId, propertyIds), eq(Image.primary, true))),
|
|
90
|
+
]);
|
|
91
|
+
const amenities = new Map();
|
|
92
|
+
for (const assignment of assignments) {
|
|
93
|
+
const amenity = assignment.amenity;
|
|
94
|
+
if (amenity?.active !== true)
|
|
95
|
+
continue;
|
|
96
|
+
const key = String(assignment.propertyId);
|
|
97
|
+
const values = amenities.get(key) ?? [];
|
|
98
|
+
values.push(amenityProjection(amenity));
|
|
99
|
+
amenities.set(key, values);
|
|
100
|
+
}
|
|
101
|
+
const primaryImages = new Map(images.map((image) => [String(image.propertyId), imageProjection(image)]));
|
|
102
|
+
return Promise.all(rows.map(async (row) => ({
|
|
103
|
+
id: row.id,
|
|
104
|
+
companyId: row.companyId,
|
|
105
|
+
branchId: row.branchId ?? null,
|
|
106
|
+
code: row.code,
|
|
107
|
+
name: row.name,
|
|
108
|
+
publicName: row.publicName ?? null,
|
|
109
|
+
accommodationType: row.accommodationType,
|
|
110
|
+
timezone: row.timezone,
|
|
111
|
+
starRating: row.starRating,
|
|
112
|
+
addressLine: await publicAddress(ctx, row),
|
|
113
|
+
locality: row.locality ?? null,
|
|
114
|
+
countryCode: row.countryCode ?? null,
|
|
115
|
+
latitude: row.latitude ?? null,
|
|
116
|
+
longitude: row.longitude ?? null,
|
|
117
|
+
description: row.description ?? null,
|
|
118
|
+
houseRules: row.houseRules ?? null,
|
|
119
|
+
childrenStayFree: row.childrenStayFree,
|
|
120
|
+
minimumGuestAge: row.minimumGuestAge ?? null,
|
|
121
|
+
active: row.active,
|
|
122
|
+
primaryImage: primaryImages.get(String(row.id)) ?? null,
|
|
123
|
+
amenities: amenities.get(String(row.id)) ?? [],
|
|
124
|
+
})));
|
|
125
|
+
};
|
|
126
|
+
const projectRoomTypes = async (ctx, rows) => {
|
|
127
|
+
if (!rows.length)
|
|
128
|
+
return [];
|
|
129
|
+
const roomTypeIds = rows.map((row) => String(row.id));
|
|
130
|
+
const Assignment = ctx.table('hospitality_core.RoomTypeAmenity');
|
|
131
|
+
const Image = ctx.table('hospitality_core.ContentImage');
|
|
132
|
+
const Bed = ctx.table('hospitality_core.Bed');
|
|
133
|
+
const [assignments, images, beds] = await Promise.all([
|
|
134
|
+
ctx.db.all(from(Assignment).where(inArray(Assignment.roomTypeId, roomTypeIds)).preload('amenity')),
|
|
135
|
+
ctx.db.all(from(Image).where(inArray(Image.roomTypeId, roomTypeIds)).orderBy(asc(Image.sequence), asc(Image.id))),
|
|
136
|
+
ctx.db.all(from(Bed).where(inArray(Bed.roomTypeId, roomTypeIds)).orderBy(asc(Bed.id))),
|
|
137
|
+
]);
|
|
138
|
+
const amenities = new Map();
|
|
139
|
+
for (const assignment of assignments) {
|
|
140
|
+
const amenity = assignment.amenity;
|
|
141
|
+
if (amenity?.active !== true)
|
|
142
|
+
continue;
|
|
143
|
+
const key = String(assignment.roomTypeId);
|
|
144
|
+
const values = amenities.get(key) ?? [];
|
|
145
|
+
values.push(amenityProjection(amenity));
|
|
146
|
+
amenities.set(key, values);
|
|
147
|
+
}
|
|
148
|
+
const imageMap = new Map();
|
|
149
|
+
for (const image of images) {
|
|
150
|
+
const key = String(image.roomTypeId);
|
|
151
|
+
const values = imageMap.get(key) ?? [];
|
|
152
|
+
values.push({ projection: imageProjection(image), primary: image.primary === true });
|
|
153
|
+
imageMap.set(key, values);
|
|
154
|
+
}
|
|
155
|
+
const bedMap = new Map();
|
|
156
|
+
for (const bed of beds) {
|
|
157
|
+
const key = String(bed.roomTypeId);
|
|
158
|
+
const values = bedMap.get(key) ?? [];
|
|
159
|
+
values.push({
|
|
160
|
+
type: String(bed.type),
|
|
161
|
+
quantity: Number(bed.quantity),
|
|
162
|
+
roomName: bed.roomName == null ? null : String(bed.roomName),
|
|
163
|
+
});
|
|
164
|
+
bedMap.set(key, values);
|
|
165
|
+
}
|
|
166
|
+
return rows.map((row) => {
|
|
167
|
+
const heldImages = imageMap.get(String(row.id)) ?? [];
|
|
168
|
+
const projectedImages = heldImages.map((image) => image.projection);
|
|
169
|
+
return {
|
|
170
|
+
id: row.id,
|
|
171
|
+
companyId: row.companyId,
|
|
172
|
+
propertyId: row.propertyId,
|
|
173
|
+
code: row.code,
|
|
174
|
+
name: row.name,
|
|
175
|
+
publicName: row.publicName ?? null,
|
|
176
|
+
description: row.description ?? null,
|
|
177
|
+
defaultCapacity: row.defaultCapacity,
|
|
178
|
+
maxAdults: row.maxAdults,
|
|
179
|
+
maxChildren: row.maxChildren,
|
|
180
|
+
maxInfants: row.maxInfants,
|
|
181
|
+
maxExtraBeds: row.maxExtraBeds,
|
|
182
|
+
sizeSqm: row.sizeSqm ?? null,
|
|
183
|
+
viewType: row.viewType ?? null,
|
|
184
|
+
sharedBathroom: row.sharedBathroom,
|
|
185
|
+
baseRate: row.baseRate,
|
|
186
|
+
active: row.active,
|
|
187
|
+
published: row.published,
|
|
188
|
+
primaryImage: heldImages.find((image) => image.primary)?.projection ?? null,
|
|
189
|
+
images: projectedImages,
|
|
190
|
+
amenities: amenities.get(String(row.id)) ?? [],
|
|
191
|
+
beds: bedMap.get(String(row.id)) ?? [],
|
|
192
|
+
};
|
|
193
|
+
});
|
|
194
|
+
};
|
|
195
|
+
const catalogEffects = [
|
|
196
|
+
'read:hospitality_core.Property',
|
|
197
|
+
'read:hospitality_core.RoomType',
|
|
198
|
+
'read:hospitality_core.PropertyAmenity',
|
|
199
|
+
'read:hospitality_core.RoomTypeAmenity',
|
|
200
|
+
'read:hospitality_core.Amenity',
|
|
201
|
+
'read:hospitality_core.ContentImage',
|
|
202
|
+
'read:hospitality_core.Bed',
|
|
203
|
+
'read:address.Country',
|
|
204
|
+
'read:address.CurrentCatalog',
|
|
205
|
+
'read:address.Division',
|
|
206
|
+
];
|
|
207
|
+
export const catalog = {
|
|
208
|
+
listPropertyCatalog: defineFn({
|
|
209
|
+
exposure: 'internal',
|
|
210
|
+
input: { propertyIds: 'json?', active: 'bool?', limit: 'int?', offset: 'int?' },
|
|
211
|
+
output: propertyOutput,
|
|
212
|
+
effects: catalogEffects,
|
|
213
|
+
handler: async (ctx, args) => {
|
|
214
|
+
const propertyIds = idsOf(args.propertyIds);
|
|
215
|
+
if (propertyIds?.length === 0)
|
|
216
|
+
return [];
|
|
217
|
+
const P = ctx.table('hospitality_core.Property');
|
|
218
|
+
const paging = page(args.limit, args.offset);
|
|
219
|
+
let query = from(P)
|
|
220
|
+
.where(eq(P.active, args.active !== false))
|
|
221
|
+
.orderBy(asc(P.name), asc(P.id));
|
|
222
|
+
if (propertyIds)
|
|
223
|
+
query = query.where(inArray(P.id, propertyIds));
|
|
224
|
+
return projectProperties(ctx, await ctx.db.all(query.limit(paging.limit).offset(paging.offset)));
|
|
225
|
+
},
|
|
226
|
+
}),
|
|
227
|
+
getPropertyCatalog: defineFn({
|
|
228
|
+
exposure: 'internal',
|
|
229
|
+
input: { id: 'id' },
|
|
230
|
+
output: propertyOutput,
|
|
231
|
+
effects: catalogEffects,
|
|
232
|
+
handler: async (ctx, args) => {
|
|
233
|
+
const P = ctx.table('hospitality_core.Property');
|
|
234
|
+
const row = await ctx.db.one(from(P).where(eq(P.id, args.id), eq(P.active, true)));
|
|
235
|
+
return (await projectProperties(ctx, row ? [row] : []))[0] ?? null;
|
|
236
|
+
},
|
|
237
|
+
}),
|
|
238
|
+
listRoomTypeCatalog: defineFn({
|
|
239
|
+
exposure: 'internal',
|
|
240
|
+
input: {
|
|
241
|
+
propertyId: 'id',
|
|
242
|
+
roomTypeIds: 'json?',
|
|
243
|
+
active: 'bool?',
|
|
244
|
+
published: 'bool?',
|
|
245
|
+
limit: 'int?',
|
|
246
|
+
offset: 'int?',
|
|
247
|
+
},
|
|
248
|
+
output: roomTypeOutput,
|
|
249
|
+
effects: catalogEffects,
|
|
250
|
+
handler: async (ctx, args) => {
|
|
251
|
+
const roomTypeIds = idsOf(args.roomTypeIds);
|
|
252
|
+
if (roomTypeIds?.length === 0)
|
|
253
|
+
return [];
|
|
254
|
+
const P = ctx.table('hospitality_core.Property');
|
|
255
|
+
const property = await ctx.db.one(from(P).where(eq(P.id, args.propertyId), eq(P.active, true)));
|
|
256
|
+
if (!property)
|
|
257
|
+
return [];
|
|
258
|
+
const T = ctx.table('hospitality_core.RoomType');
|
|
259
|
+
const paging = page(args.limit, args.offset);
|
|
260
|
+
let query = from(T)
|
|
261
|
+
.where(eq(T.propertyId, args.propertyId), eq(T.active, args.active !== false), eq(T.published, args.published !== false))
|
|
262
|
+
.orderBy(asc(T.name), asc(T.id));
|
|
263
|
+
if (roomTypeIds)
|
|
264
|
+
query = query.where(inArray(T.id, roomTypeIds));
|
|
265
|
+
return projectRoomTypes(ctx, await ctx.db.all(query.limit(paging.limit).offset(paging.offset)));
|
|
266
|
+
},
|
|
267
|
+
}),
|
|
268
|
+
getRoomTypeCatalog: defineFn({
|
|
269
|
+
exposure: 'internal',
|
|
270
|
+
input: { id: 'id' },
|
|
271
|
+
output: roomTypeOutput,
|
|
272
|
+
effects: catalogEffects,
|
|
273
|
+
handler: async (ctx, args) => {
|
|
274
|
+
const T = ctx.table('hospitality_core.RoomType');
|
|
275
|
+
const row = await ctx.db.one(from(T).where(eq(T.id, args.id), eq(T.active, true), eq(T.published, true)));
|
|
276
|
+
if (!row)
|
|
277
|
+
return null;
|
|
278
|
+
const P = ctx.table('hospitality_core.Property');
|
|
279
|
+
const property = await ctx.db.one(from(P).where(eq(P.id, row.propertyId), eq(P.active, true)));
|
|
280
|
+
return property ? ((await projectRoomTypes(ctx, [row]))[0] ?? null) : null;
|
|
281
|
+
},
|
|
282
|
+
}),
|
|
283
|
+
};
|
|
284
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../../../../../packages/ketsuite/src/modules/hospitality_core/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketsuite/src/modules/hospitality_core/functions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAO,MAAM,EAAO,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketsuite/src/modules/hospitality_core/functions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAO,MAAM,EAAO,MAAM,mBAAmB,CAAA;AA2PzD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAy1C5C,CAAA"}
|
|
@@ -150,6 +150,7 @@ const signalPolicyUsers = async (ctx, policyId) => {
|
|
|
150
150
|
const writable = (name) => ({
|
|
151
151
|
Property: [
|
|
152
152
|
'id',
|
|
153
|
+
'branchId',
|
|
153
154
|
'code',
|
|
154
155
|
'name',
|
|
155
156
|
'publicName',
|
|
@@ -206,6 +207,8 @@ export const functions = {
|
|
|
206
207
|
input: { includeArchived: 'bool?' },
|
|
207
208
|
output: {
|
|
208
209
|
id: 'id',
|
|
210
|
+
companyId: 'id',
|
|
211
|
+
branchId: 'id?',
|
|
209
212
|
code: 'text',
|
|
210
213
|
name: 'text',
|
|
211
214
|
publicName: 'text?',
|
|
@@ -265,6 +268,8 @@ export const functions = {
|
|
|
265
268
|
input: { id: 'id' },
|
|
266
269
|
output: {
|
|
267
270
|
id: 'id',
|
|
271
|
+
companyId: 'id',
|
|
272
|
+
branchId: 'id?',
|
|
268
273
|
code: 'text',
|
|
269
274
|
name: 'text',
|
|
270
275
|
publicName: 'text?',
|
|
@@ -332,6 +337,7 @@ export const functions = {
|
|
|
332
337
|
saveProperty: defineFn({
|
|
333
338
|
input: {
|
|
334
339
|
id: 'id',
|
|
340
|
+
branchId: 'id?',
|
|
335
341
|
code: 'text',
|
|
336
342
|
name: 'text',
|
|
337
343
|
publicName: 'text?',
|
|
@@ -369,6 +375,7 @@ export const functions = {
|
|
|
369
375
|
'write:hospitality_core.Property',
|
|
370
376
|
'write:hospitality_core.ContentChange',
|
|
371
377
|
'read:hospitality_core.CancellationPolicy',
|
|
378
|
+
'read:company.Branch',
|
|
372
379
|
'read:address.Country',
|
|
373
380
|
'read:address.CurrentCatalog',
|
|
374
381
|
'read:address.Division',
|
|
@@ -376,6 +383,7 @@ export const functions = {
|
|
|
376
383
|
idempotent: true,
|
|
377
384
|
agent: true,
|
|
378
385
|
handler: async (ctx, raw) => {
|
|
386
|
+
const current = await record(ctx, 'hospitality_core.Property', raw.id);
|
|
379
387
|
const args = normalized(raw, {
|
|
380
388
|
code: cleanCode(raw.code),
|
|
381
389
|
name: cleanText(raw.name),
|
|
@@ -413,6 +421,13 @@ export const functions = {
|
|
|
413
421
|
if (args.defaultCancellationPolicyId &&
|
|
414
422
|
!(await record(ctx, 'hospitality_core.CancellationPolicy', args.defaultCancellationPolicyId)))
|
|
415
423
|
errors.push(issue('defaultCancellationPolicyId', 'policy_missing'));
|
|
424
|
+
if (args.branchId && args.branchId !== current?.branchId) {
|
|
425
|
+
const branch = await record(ctx, 'company.Branch', args.branchId);
|
|
426
|
+
if (!branch || branch.companyId !== ctx.scope.company)
|
|
427
|
+
errors.push(issue('branchId', 'branch_company_mismatch'));
|
|
428
|
+
else if (branch.active !== true)
|
|
429
|
+
errors.push(issue('branchId', 'branch_archived'));
|
|
430
|
+
}
|
|
416
431
|
if (args.countryCode && !/^[A-Z]{2}$/.test(args.countryCode))
|
|
417
432
|
errors.push(issue('countryId', 'address.error.countryCode'));
|
|
418
433
|
if (args.countryCode) {
|
|
@@ -484,6 +499,7 @@ export const functions = {
|
|
|
484
499
|
input: { propertyId: 'id', includeArchived: 'bool?' },
|
|
485
500
|
output: {
|
|
486
501
|
id: 'id',
|
|
502
|
+
companyId: 'id',
|
|
487
503
|
propertyId: 'id',
|
|
488
504
|
code: 'text',
|
|
489
505
|
name: 'text',
|
|
@@ -506,6 +522,7 @@ export const functions = {
|
|
|
506
522
|
input: { id: 'id' },
|
|
507
523
|
output: {
|
|
508
524
|
id: 'id',
|
|
525
|
+
companyId: 'id',
|
|
509
526
|
propertyId: 'id',
|
|
510
527
|
code: 'text',
|
|
511
528
|
name: 'text',
|