From 4a500289bf494dd0ce5b357c1a17156972697152 Mon Sep 17 00:00:00 2001 From: Jorge Cortes Date: Fri, 28 Nov 2025 15:30:26 -0500 Subject: [PATCH] [ACTION] booking experts - filters --- .../add-guest-to-reservation.mjs | 2 +- .../create-agenda-period.mjs | 2 +- .../actions/delete-guest/delete-guest.mjs | 2 +- .../actions/get-booking/get-booking.mjs | 2 +- .../get-complex-prices/get-complex-prices.mjs | 2 +- .../get-reservation/get-reservation.mjs | 2 +- .../list-availabilities.mjs | 2 +- .../actions/list-bookings/list-bookings.mjs | 119 ++++++++++++++++-- .../list-inventory-objects.mjs | 2 +- .../list-rentabletype-availabilities.mjs | 2 +- .../list-reservations/list-reservations.mjs | 2 +- .../search-contacts/search-contacts.mjs | 2 +- .../actions/update-guest/update-guest.mjs | 2 +- .../booking_experts/booking_experts.app.mjs | 53 +++++++- components/booking_experts/package.json | 2 +- .../booking-updated/booking-updated.mjs | 2 +- .../inventory-object-updated.mjs | 2 +- .../new-booking-created.mjs | 2 +- .../new-inventory-object-created.mjs | 2 +- 19 files changed, 172 insertions(+), 34 deletions(-) diff --git a/components/booking_experts/actions/add-guest-to-reservation/add-guest-to-reservation.mjs b/components/booking_experts/actions/add-guest-to-reservation/add-guest-to-reservation.mjs index 9751e77343de1..495244c1573d1 100644 --- a/components/booking_experts/actions/add-guest-to-reservation/add-guest-to-reservation.mjs +++ b/components/booking_experts/actions/add-guest-to-reservation/add-guest-to-reservation.mjs @@ -4,7 +4,7 @@ export default { key: "booking_experts-add-guest-to-reservation", name: "Add Guest to Reservation", description: "Add a guest to a reservation. [See the documentation](https://developers.bookingexperts.com/reference/administration-reservation-guests-create)", - version: "0.0.4", + version: "0.0.5", annotations: { destructiveHint: false, openWorldHint: true, diff --git a/components/booking_experts/actions/create-agenda-period/create-agenda-period.mjs b/components/booking_experts/actions/create-agenda-period/create-agenda-period.mjs index 6f17330c1c03a..dbf8049d97157 100644 --- a/components/booking_experts/actions/create-agenda-period/create-agenda-period.mjs +++ b/components/booking_experts/actions/create-agenda-period/create-agenda-period.mjs @@ -4,7 +4,7 @@ export default { key: "booking_experts-create-agenda-period", name: "Create Agenda Period", description: "Creates a new agenda period. [See the documentation](https://developers.bookingexperts.com/reference/administration-maintenance-agenda-periods-create)", - version: "0.0.4", + version: "0.0.5", annotations: { destructiveHint: false, openWorldHint: true, diff --git a/components/booking_experts/actions/delete-guest/delete-guest.mjs b/components/booking_experts/actions/delete-guest/delete-guest.mjs index 2befe74e1ad9e..31f90079a95bc 100644 --- a/components/booking_experts/actions/delete-guest/delete-guest.mjs +++ b/components/booking_experts/actions/delete-guest/delete-guest.mjs @@ -4,7 +4,7 @@ export default { key: "booking_experts-delete-guest", name: "Delete Guest", description: "Delete a guest for a reservation. [See the documentation](https://developers.bookingexperts.com/reference/administration-reservation-guests-delete)", - version: "0.0.2", + version: "0.0.3", annotations: { destructiveHint: true, openWorldHint: true, diff --git a/components/booking_experts/actions/get-booking/get-booking.mjs b/components/booking_experts/actions/get-booking/get-booking.mjs index b96de0a21e6e2..cb75773ab3a0b 100644 --- a/components/booking_experts/actions/get-booking/get-booking.mjs +++ b/components/booking_experts/actions/get-booking/get-booking.mjs @@ -4,7 +4,7 @@ export default { key: "booking_experts-get-booking", name: "Get Booking", description: "Returns a booking. [See the documentation](https://developers.bookingexperts.com/reference/administration-bookings-show)", - version: "0.0.2", + version: "0.0.3", annotations: { destructiveHint: false, openWorldHint: true, diff --git a/components/booking_experts/actions/get-complex-prices/get-complex-prices.mjs b/components/booking_experts/actions/get-complex-prices/get-complex-prices.mjs index 6cbe93a630e1a..392ffbd6242d4 100644 --- a/components/booking_experts/actions/get-complex-prices/get-complex-prices.mjs +++ b/components/booking_experts/actions/get-complex-prices/get-complex-prices.mjs @@ -4,7 +4,7 @@ export default { key: "booking_experts-get-complex-prices", name: "Get Complex Prices", description: "Returns all complex prices of a master price list. [See the documentation](https://developers.bookingexperts.com/reference/administration-masterpricelist-complexprices-index)", - version: "0.0.4", + version: "0.0.5", annotations: { destructiveHint: false, openWorldHint: true, diff --git a/components/booking_experts/actions/get-reservation/get-reservation.mjs b/components/booking_experts/actions/get-reservation/get-reservation.mjs index bd33d33213cb1..1162b5d337caf 100644 --- a/components/booking_experts/actions/get-reservation/get-reservation.mjs +++ b/components/booking_experts/actions/get-reservation/get-reservation.mjs @@ -4,7 +4,7 @@ export default { name: "Get Reservation", description: "Fetches a reservation by ID from Booking Experts. [See the documentation](https://developers.bookingexperts.com/reference/reservations-show)", key: "booking_experts-get-reservation", - version: "0.0.1", + version: "0.0.2", type: "action", annotations: { destructiveHint: false, diff --git a/components/booking_experts/actions/list-availabilities/list-availabilities.mjs b/components/booking_experts/actions/list-availabilities/list-availabilities.mjs index 44bc6b7bfb362..ce66fedab7325 100644 --- a/components/booking_experts/actions/list-availabilities/list-availabilities.mjs +++ b/components/booking_experts/actions/list-availabilities/list-availabilities.mjs @@ -4,7 +4,7 @@ export default { key: "booking_experts-list-availabilities", name: "List Availabilities", description: "List availabilities of a channel you have access to. [See the documentation](https://developers.bookingexperts.com/reference/availabilities-index)", - version: "0.0.2", + version: "0.0.3", annotations: { destructiveHint: false, openWorldHint: true, diff --git a/components/booking_experts/actions/list-bookings/list-bookings.mjs b/components/booking_experts/actions/list-bookings/list-bookings.mjs index efb5d4ec06cc3..d8a1735f31c2c 100644 --- a/components/booking_experts/actions/list-bookings/list-bookings.mjs +++ b/components/booking_experts/actions/list-bookings/list-bookings.mjs @@ -4,7 +4,7 @@ export default { key: "booking_experts-list-bookings", name: "List Bookings", description: "Returns a list of bookings for an administration. [See the documentation](https://developers.bookingexperts.com/reference/administration-bookings-index)", - version: "0.0.4", + version: "0.0.5", annotations: { destructiveHint: false, openWorldHint: true, @@ -39,7 +39,10 @@ export default { ], description: "Filter by channel", }, - reservationId: { + reservationIds: { + type: "string[]", + label: "Reservation IDs", + description: "Filter by reservation IDs", propDefinition: [ bookingExperts, "reservationId", @@ -47,7 +50,17 @@ export default { administrationId: c.administrationId, }), ], - description: "Filter by reservation", + }, + createdAt: { + type: "string", + label: "Created At", + description: "Filter by created at (ISO 8601 format, e.g., `2024-01-01T00:00:00Z`)", + optional: true, + }, + updatedAt: { + type: "string", + label: "Updated At", + description: "Filter by updated at (ISO 8601 format, e.g., `2024-01-01T00:00:00Z`)", optional: true, }, page: { @@ -62,19 +75,103 @@ export default { "perPage", ], }, + filterId: { + optional: true, + propDefinition: [ + bookingExperts, + "bookingId", + ({ administrationId }) => ({ + administrationId, + }), + ], + }, + customerIds: { + type: "string[]", + label: "Customer IDs", + description: "Filter by customer IDs", + propDefinition: [ + bookingExperts, + "customerId", + ({ administrationId }) => ({ + administrationId, + }), + ], + }, + bookingNr: { + label: "Booking Number", + description: "Filter by booking number", + optional: true, + propDefinition: [ + bookingExperts, + "bookingId", + ({ administrationId }) => ({ + administrationId, + mapper: ({ attributes: { booking_nr: value } }) => value, + }), + ], + }, + confirmedAt: { + type: "string", + label: "Confirmed At", + description: "Filter by confirmed at (ISO 8601 format, e.g., `2024-01-01T00:00:00Z`)", + optional: true, + }, + fieldsBooking: { + type: "string[]", + label: "Fields Booking", + description: "Fields to return for the booking", + optional: true, + }, + referenceNr: { + type: "string", + label: "Reference Number", + description: "Filter by reference number", + optional: true, + }, + }, + methods: { + commaSeparatedList(value) { + return Array.isArray(value) && value?.length > 0 + ? value.join(",") + : value; + }, }, async run({ $ }) { + const { + commaSeparatedList, + administrationId, + ownerId, + administrationChannelId, + reservationIds, + createdAt, + updatedAt, + page, + perPage, + filterId, + customerIds, + bookingNr, + confirmedAt, + fieldsBooking, + referenceNr, + } = this; + const { data } = await this.bookingExperts.listBookings({ $, - administrationId: this.administrationId, + administrationId, params: { - "filter[owner]": this.ownerId, - "filter[channel]": this.listAdministrationChannels, - "filter[reservations]": this.reservationId, - "filter[created_at]": this.createdAt, - "filter[updated_at]": this.updatedAt, - "page[number]": this.page, - "page[size]": this.perPage, + "filter[owner]": ownerId, + "filter[channel]": administrationChannelId, + "filter[created_at]": createdAt, + "filter[updated_at]": updatedAt, + "page[number]": page, + "page[size]": perPage, + "filter[ID]": filterId, + "filter[reservations]": commaSeparatedList(reservationIds), + "filter[customer]": commaSeparatedList(customerIds), + "filter[booking_nr]": bookingNr, + "filter[confirmed_at]": confirmedAt, + "fields[booking]": commaSeparatedList(fieldsBooking), + "filter[reference_nr]": referenceNr, }, }); $.export("$summary", `Found ${data.length} bookings`); diff --git a/components/booking_experts/actions/list-inventory-objects/list-inventory-objects.mjs b/components/booking_experts/actions/list-inventory-objects/list-inventory-objects.mjs index b7db750a79d41..08f7180cbfd26 100644 --- a/components/booking_experts/actions/list-inventory-objects/list-inventory-objects.mjs +++ b/components/booking_experts/actions/list-inventory-objects/list-inventory-objects.mjs @@ -4,7 +4,7 @@ export default { key: "booking_experts-list-inventory-objects", name: "List Inventory Objects", description: "Returns inventory objects of the administration. [See the documentation](https://developers.bookingexperts.com/reference/administration-inventoryobjects-index)", - version: "0.0.4", + version: "0.0.5", annotations: { destructiveHint: false, openWorldHint: true, diff --git a/components/booking_experts/actions/list-rentabletype-availabilities/list-rentabletype-availabilities.mjs b/components/booking_experts/actions/list-rentabletype-availabilities/list-rentabletype-availabilities.mjs index 64c7a44c6241e..b37f074c0ea71 100644 --- a/components/booking_experts/actions/list-rentabletype-availabilities/list-rentabletype-availabilities.mjs +++ b/components/booking_experts/actions/list-rentabletype-availabilities/list-rentabletype-availabilities.mjs @@ -5,7 +5,7 @@ export default { key: "booking_experts-list-rentabletype-availabilities", name: "List RentableType Availabilities", description: "List availabilities of a RentableType you have access to. [See the documentation](https://developers.bookingexperts.com/reference/channel-rentabletype-availabilities-index)", - version: "0.0.2", + version: "0.0.3", annotations: { destructiveHint: false, openWorldHint: true, diff --git a/components/booking_experts/actions/list-reservations/list-reservations.mjs b/components/booking_experts/actions/list-reservations/list-reservations.mjs index fb4167dade403..88c7b14664a72 100644 --- a/components/booking_experts/actions/list-reservations/list-reservations.mjs +++ b/components/booking_experts/actions/list-reservations/list-reservations.mjs @@ -4,7 +4,7 @@ export default { name: "List Reservations", description: "Lists all reservations for the current organization from Booking Experts. [See the documentation](https://developers.bookingexperts.com/reference/reservations-index)", key: "booking_experts-list-reservations", - version: "0.0.1", + version: "0.0.2", type: "action", annotations: { destructiveHint: false, diff --git a/components/booking_experts/actions/search-contacts/search-contacts.mjs b/components/booking_experts/actions/search-contacts/search-contacts.mjs index 7a37cd4521a3f..d13e4ceb478ec 100644 --- a/components/booking_experts/actions/search-contacts/search-contacts.mjs +++ b/components/booking_experts/actions/search-contacts/search-contacts.mjs @@ -5,7 +5,7 @@ export default { key: "booking_experts-search-contacts", name: "Search Contacts", description: "Search for contacts by email or phone. [See the documentation](https://developers.bookingexperts.com/reference/contact-search-first)", - version: "0.0.4", + version: "0.0.5", annotations: { destructiveHint: false, openWorldHint: true, diff --git a/components/booking_experts/actions/update-guest/update-guest.mjs b/components/booking_experts/actions/update-guest/update-guest.mjs index e57451d95cd58..f8d034f23083b 100644 --- a/components/booking_experts/actions/update-guest/update-guest.mjs +++ b/components/booking_experts/actions/update-guest/update-guest.mjs @@ -4,7 +4,7 @@ export default { key: "booking_experts-update-guest", name: "Update Guest", description: "Update a guest for a reservation. [See the documentation](https://developers.bookingexperts.com/reference/administration-reservation-guests-update)", - version: "0.0.2", + version: "0.0.3", annotations: { destructiveHint: false, openWorldHint: true, diff --git a/components/booking_experts/booking_experts.app.mjs b/components/booking_experts/booking_experts.app.mjs index 092318b1a2906..5ea3e0caf5648 100644 --- a/components/booking_experts/booking_experts.app.mjs +++ b/components/booking_experts/booking_experts.app.mjs @@ -72,19 +72,23 @@ export default { description: "The ID of a booking", async options({ page, administrationId, + mapper = ({ + id, attributes, + }) => ({ + label: attributes.booking_nr, + value: id, + }), }) { + if (!administrationId) { + return []; + } const { data } = await this.listBookings({ administrationId, params: { "page[number]": page + 1, }, }); - return data?.map(({ - id, attributes, - }) => ({ - label: attributes.booking_nr, - value: id, - })) || []; + return data?.map(mapper) || []; }, }, channelId: { @@ -256,6 +260,35 @@ export default { max: 100, optional: true, }, + customerId: { + type: "string", + label: "Customer ID", + description: "The ID of a customer", + optional: true, + async options({ + page, administrationId, + }) { + if (!administrationId) { + return []; + } + const { data } = await this.listCustomers({ + administrationId, + params: { + "page[number]": page + 1, + }, + }); + return data?.map(({ + id, attributes, + }) => ({ + // if first_name and last_name are not empty, show them, otherwise show the email + label: [ + attributes.first_name, + attributes.last_name, + ].filter(Boolean).join(" ") || attributes.email || id, + value: id, + })) || []; + }, + }, }, methods: { _baseUrl() { @@ -443,5 +476,13 @@ export default { ...opts, }); }, + listCustomers({ + administrationId, ...opts + }) { + return this._makeRequest({ + path: `/administrations/${administrationId}/customers`, + ...opts, + }); + }, }, }; diff --git a/components/booking_experts/package.json b/components/booking_experts/package.json index 6b8723427cd51..6a5c45509c95f 100644 --- a/components/booking_experts/package.json +++ b/components/booking_experts/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/booking_experts", - "version": "0.3.0", + "version": "0.3.1", "description": "Pipedream Booking Experts Components", "main": "booking_experts.app.mjs", "keywords": [ diff --git a/components/booking_experts/sources/booking-updated/booking-updated.mjs b/components/booking_experts/sources/booking-updated/booking-updated.mjs index 06ff11b2acf39..d6ea517821298 100644 --- a/components/booking_experts/sources/booking-updated/booking-updated.mjs +++ b/components/booking_experts/sources/booking-updated/booking-updated.mjs @@ -5,7 +5,7 @@ export default { key: "booking_experts-booking-updated", name: "Booking Updated", description: "Emit new event for each booking updated. [See the documentation](https://developers.bookingexperts.com/reference/administration-bookings-index)", - version: "0.0.3", + version: "0.0.4", type: "source", dedupe: "unique", props: { diff --git a/components/booking_experts/sources/inventory-object-updated/inventory-object-updated.mjs b/components/booking_experts/sources/inventory-object-updated/inventory-object-updated.mjs index 7dfb7d060b45f..aa36834b12d6a 100644 --- a/components/booking_experts/sources/inventory-object-updated/inventory-object-updated.mjs +++ b/components/booking_experts/sources/inventory-object-updated/inventory-object-updated.mjs @@ -5,7 +5,7 @@ export default { key: "booking_experts-inventory-object-updated", name: "Inventory Object Updated", description: "Emit new event when an inventory object is updated. [See the documentation](https://developers.bookingexperts.com/reference/administration-inventoryobjects-index)", - version: "0.0.3", + version: "0.0.4", type: "source", dedupe: "unique", props: { diff --git a/components/booking_experts/sources/new-booking-created/new-booking-created.mjs b/components/booking_experts/sources/new-booking-created/new-booking-created.mjs index 933b050e934ab..dc29fa6e30a3e 100644 --- a/components/booking_experts/sources/new-booking-created/new-booking-created.mjs +++ b/components/booking_experts/sources/new-booking-created/new-booking-created.mjs @@ -5,7 +5,7 @@ export default { key: "booking_experts-new-booking-created", name: "New Booking Created", description: "Emit new event for each new booking created. [See the documentation](https://developers.bookingexperts.com/reference/administration-bookings-index)", - version: "0.0.3", + version: "0.0.4", type: "source", dedupe: "unique", props: { diff --git a/components/booking_experts/sources/new-inventory-object-created/new-inventory-object-created.mjs b/components/booking_experts/sources/new-inventory-object-created/new-inventory-object-created.mjs index 0bbc971e952ac..41bd1810002c6 100644 --- a/components/booking_experts/sources/new-inventory-object-created/new-inventory-object-created.mjs +++ b/components/booking_experts/sources/new-inventory-object-created/new-inventory-object-created.mjs @@ -5,7 +5,7 @@ export default { key: "booking_experts-new-inventory-object-created", name: "New Inventory Object Created", description: "Emit new event when a new inventory object is created. [See the documentation](https://developers.bookingexperts.com/reference/administration-inventoryobjects-index)", - version: "0.0.3", + version: "0.0.4", type: "source", dedupe: "unique", props: {