Current section

Files

Jump to
ex_vertical_booking lib request ota_hotel_inv_count_notif.ex
Raw

lib/request/ota_hotel_inv_count_notif.ex

defmodule ExVerticalBooking.Request.OtaHotelInvCountNotif do
alias ExVerticalBooking.Meta
alias ExVerticalBooking.Request
alias ExVerticalBooking.Request.{Document, Helpers}
@action "OTA_HotelInvCountNotif"
@type credentials :: %{user: String.t(), password: String.t(), endpoint: String.t()}
@type t ::
%{
hotel_code: String.t(),
inventories: [
%{
status_application_control: %{
start: String.t(),
end: String.t(),
inv_type_code: String.t()
},
inv_counts: [
%{count_type: String.t(), count: String.t()}
]
}
]
}
@doc """
This method is used to update availability.
"""
@spec execute(t, credentials, Meta.t()) :: {:ok, struct(), Meta.t()} | {:error, any(), Meta.t()}
def execute(%{hotel_code: _, inventories: _} = params, credentials, meta) do
params
|> build_hotel_inv_count_notif(meta)
|> Document.build(@action, credentials)
|> Request.send(credentials)
end
@spec build_hotel_inv_count_notif(t, Meta.t()) :: {{atom(), map | nil, list | nil}, Meta.t()}
def build_hotel_inv_count_notif(%{hotel_code: _, inventories: []} = payload, meta) do
{:error, payload, meta |> Map.put(:success, false) |> Map.put(:errors, [:empty_payload])}
end
def build_hotel_inv_count_notif(%{hotel_code: hotel_code, inventories: inventories}, meta) do
inventories_elements =
inventories
|> Enum.map(fn %{
status_application_control: status_application_control,
inv_counts: inv_counts
} ->
{:"ns1:Inventory", nil,
[
Helpers.build_status_application_control(status_application_control, nil),
Helpers.build_inv_counts(inv_counts)
]}
end)
{{:"ns1:Inventories", %{HotelCode: "#{hotel_code}"}, inventories_elements}, meta}
end
end