@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.
Files changed (49) hide show
  1. package/dist/modules/backend/design/admin.css +4 -4
  2. package/dist/modules/hospitality_core/catalog.d.ts +3 -0
  3. package/dist/modules/hospitality_core/catalog.d.ts.map +1 -0
  4. package/dist/modules/hospitality_core/catalog.js +284 -0
  5. package/dist/modules/hospitality_core/catalog.js.map +1 -0
  6. package/dist/modules/hospitality_core/functions.d.ts.map +1 -1
  7. package/dist/modules/hospitality_core/functions.js +17 -0
  8. package/dist/modules/hospitality_core/functions.js.map +1 -1
  9. package/dist/modules/hospitality_core/index.d.ts.map +1 -1
  10. package/dist/modules/hospitality_core/index.js +3 -1
  11. package/dist/modules/hospitality_core/index.js.map +1 -1
  12. package/dist/modules/hospitality_core/messages.d.ts.map +1 -1
  13. package/dist/modules/hospitality_core/messages.js +10 -0
  14. package/dist/modules/hospitality_core/messages.js.map +1 -1
  15. package/dist/modules/hospitality_core/models.d.ts.map +1 -1
  16. package/dist/modules/hospitality_core/models.js +1 -0
  17. package/dist/modules/hospitality_core/models.js.map +1 -1
  18. package/dist/modules/hospitality_core/relations.d.ts.map +1 -1
  19. package/dist/modules/hospitality_core/relations.js +1 -0
  20. package/dist/modules/hospitality_core/relations.js.map +1 -1
  21. package/dist/modules/hospitality_core/routes.d.ts.map +1 -1
  22. package/dist/modules/hospitality_core/routes.js +14 -4
  23. package/dist/modules/hospitality_core/routes.js.map +1 -1
  24. package/dist/modules/hospitality_core/screens.d.ts +13 -3
  25. package/dist/modules/hospitality_core/screens.d.ts.map +1 -1
  26. package/dist/modules/hospitality_core/screens.js +20 -6
  27. package/dist/modules/hospitality_core/screens.js.map +1 -1
  28. package/dist/modules/product_backend/client/media-upload-view.d.mts +2 -0
  29. package/dist/modules/product_backend/client/media-upload-view.d.mts.map +1 -0
  30. package/dist/modules/product_backend/client/media-upload-view.mjs +26 -0
  31. package/dist/modules/product_backend/client/media-upload-view.mjs.map +1 -0
  32. package/dist/modules/product_backend/client/product.d.mts +2 -0
  33. package/dist/modules/product_backend/client/product.d.mts.map +1 -1
  34. package/dist/modules/product_backend/client/product.mjs +3 -0
  35. package/dist/modules/product_backend/client/product.mjs.map +1 -1
  36. package/dist/modules/product_backend/index.d.ts.map +1 -1
  37. package/dist/modules/product_backend/index.js +2 -0
  38. package/dist/modules/product_backend/index.js.map +1 -1
  39. package/dist/modules/product_backend/islands.d.ts.map +1 -1
  40. package/dist/modules/product_backend/islands.js +8 -0
  41. package/dist/modules/product_backend/islands.js.map +1 -1
  42. package/dist/modules/product_backend/routes.d.ts.map +1 -1
  43. package/dist/modules/product_backend/routes.js +14 -0
  44. package/dist/modules/product_backend/routes.js.map +1 -1
  45. package/dist/ui/media.d.ts +2 -0
  46. package/dist/ui/media.d.ts.map +1 -1
  47. package/dist/ui/media.js +1 -1
  48. package/dist/ui/media.js.map +1 -1
  49. 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"] > [data-ui="record-workspace"]
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"] > [data-ui="record-workspace"]
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"] > [data-ui="record-workspace"]
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"] > [data-ui="record-workspace"]
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,3 @@
1
+ import type { FnSpec } from '@ketvietlab/ketjs';
2
+ export declare const catalog: Record<string, FnSpec>;
3
+ //# sourceMappingURL=catalog.d.ts.map
@@ -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;AA0PzD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA00C5C,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',