class PlaceOS::Model::BookingInstance

Included Modules

Defined in:

placeos-models/booking_instance.cr

Constant Summary

CALLBACKS = {before_save: [:update_assets, :update_history] of Nil, after_save: [] of Nil, before_create: [do self.created_at = self.updated_at = Time.utc end] of Nil, after_create: [] of Nil, before_update: [do self.updated_at = Time.utc end] of Nil, after_update: [] of Nil, before_destroy: [] of Nil, after_destroy: [:__record_history_destroy__] of Nil}
Log = ::Log.for(self)
PRIMARY_KEY_TYPES = {:id => (Int64 | Nil)} of Nil => Nil

macro level key => type

PRIMARY_KEYS = [{:id}]

Constructors

Class Method Summary

Macro Summary

Instance Method Summary

Instance methods inherited from module PlaceOS::Model::History::Tracked

change_history change_history, history_correlation_id : String | Nil history_correlation_id, history_resource_id : String history_resource_id

Macros inherited from module PlaceOS::Model::History::Tracked

history_ignore(*fields) history_ignore, history_redact(*fields) history_redact

Instance methods inherited from module PlaceOS::Model::Associations

format_list_for_postgres(list : Enumerable(String)) : String format_list_for_postgres, reset_associations reset_associations

Class methods inherited from module PlaceOS::Model::Associations

format_list_for_postgres(list : Enumerable(String)) : String format_list_for_postgres

Macros inherited from module PlaceOS::Model::Associations

belongs_to(parent_class, dependent = :none, association_name = nil, foreign_key = nil, presence = false, pk_type = nil, serialize = true) belongs_to, has_many(child_class, collection_name = nil, dependent = :none, foreign_key = nil, serialize = false) has_many, has_one(child_class, dependent = :none, association_name = nil, presence = false) has_one

Instance methods inherited from class PlaceOS::Model::ModelWithAutoKey

after_create after_create, after_destroy after_destroy, after_save after_save, after_update after_update, apply_defaults apply_defaults, assign_attributes(params : HTTP::Params | Hash(String, String) | Tuple(String, String))
assign_attributes(model : PlaceOS::Model::ModelWithAutoKey)
assign_attributes
assign_attributes
, attributes attributes, attributes_tuple attributes_tuple, before_create before_create, before_destroy before_destroy, before_save before_save, before_update before_update, invoke_props invoke_props, persistent_attributes persistent_attributes, primary_key primary_key

Constructor methods inherited from class PlaceOS::Model::ModelWithAutoKey

new(ctx : YAML::ParseContext, node : YAML::Nodes::Node)
new(pull : JSON::PullParser)
new(rs : DB::ResultSet)
new

Class methods inherited from class PlaceOS::Model::ModelWithAutoKey

attributes : Array(Symbol) attributes, changefeed_ignored_update_columns : Array(String) | Nil changefeed_ignored_update_columns, from_rs(rs : DB::ResultSet) from_rs, primary_key primary_key

Constructor Detail

def self.from_json(string_or_io : String | IO, trusted : Bool = false) : self #

def self.from_json(string_or_io : String | IO, root : String, trusted : Bool = false) : self #

Deserializes the given JSON in string_or_io into an instance of self, assuming the JSON consists of an JSON object with key root, and whose value is the value to deserialize. Will not deserialise from fields with mass_assign: false

class User < ActiveModel::Model
  attribute name : String
  attribute google_id : UUID, mass_assign: false
end

User.from_json(%({"main": {"name": "Jason", "google_id": "f6f70bfb-c882-446d-8758-7ce47db39620"}}), root: "main") # => #<User:0x103131b20 @name="Jason">

def self.from_trusted_json(string_or_io : String | IO, root : String) : self #

def self.from_trusted_json(string_or_io : String | IO) : self #

Serialize from a trusted JSON source


def self.from_trusted_yaml(string_or_io : String | IO) : self #

Serialize from a trusted YAML source


def self.from_yaml(string_or_io : String | IO, trusted : Bool = false) : self #

def self.new(ctx : YAML::ParseContext, node : YAML::Nodes::Node) #

[View source]
def self.new(pull : JSON::PullParser) #

[View source]
def self.new(rs : DB::ResultSet) #

def self.new(instance_start : Int64 | ActiveModel::Model::None = ::ActiveModel::Model::None.new, tenant_id : Int64 | ActiveModel::Model::None = ::ActiveModel::Model::None.new, booking_start : Int64 | ActiveModel::Model::None = ::ActiveModel::Model::None.new, booking_end : Int64 | ActiveModel::Model::None = ::ActiveModel::Model::None.new, checked_in : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, checked_in_at : Int64 | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, checked_out_at : Int64 | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, deleted : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, deleted_at : Int64 | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, process_state : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, extension_data : JSON::Any | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, history : Array(PlaceOS::Model::Booking::History) | ActiveModel::Model::None = ::ActiveModel::Model::None.new, utm_source : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, approved : Bool | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, approved_at : Int64 | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, rejected : Bool | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, rejected_at : Int64 | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, approver_id : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, approver_name : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, approver_email : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, asset_id : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, asset_ids : Array(String) | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, id : Int64 | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, created_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new, updated_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new) #

def self.new(params : HTTP::Params | Hash(String, String) | Tuple(String, String)) #

Initialize PlaceOS::Model::BookingInstance from HTTP::Params.


def self.undelete(resource_id : String) : self #

Recreates a deleted record from its latest delete entry, keeping its id.

Records removed alongside it (cascading deletes) are not restored and redacted fields are left at their defaults. Raises if there is no delete entry or the record can't be saved, e.g. if it already exists.


[View source]

Class Method Detail

def self.attributes : Array(Symbol) #

Returns all attribute keys.


def self.by_tenant(tenant_id) #

[View source]
def self.change_history(resource_id : String) #

Entries recorded for the resource, newest first


[View source]
def self.changefeed_ignored_update_columns : Array(String) | Nil #

def self.changes(id : Int64 | Nil | Nil = nil) : ChangeFeed #

Changefeed at row (if #id passed) or whole table level. Returns a ChangeFeed instance which can be used to invoke async callbacks via on or use blocking Iterator via each method.


def self.elastic #

def self.from_rs(__temp_2500 : DB::ResultSet) #

def self.history_ignored : Array(String) #

Fields not recorded, changes to only these fields are not recorded at all


[View source]
def self.history_redacted : Array(String) #

Fields whose values are never recorded


[View source]
def self.on_error(err : Exception | IO::Error) #

def self.primary_key #
Description copied from class PlaceOS::Model::ModelWithAutoKey

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


[View source]
def self.table_name #

Macro Detail

macro scope(name, &block) #

Instance Method Detail

def after_create #
Description copied from class PlaceOS::Model::ModelWithAutoKey

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


def after_destroy #
Description copied from class PlaceOS::Model::ModelWithAutoKey

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


def after_initialize(trusted : Bool) #

def after_save #
Description copied from class PlaceOS::Model::ModelWithAutoKey

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


def after_update #
Description copied from class PlaceOS::Model::ModelWithAutoKey

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


def apply_defaults #

Generate code to apply default values


def approved : Bool | Nil #

#approved getter


def approved=(value : Bool | Nil) #

#approved setter


def approved_assigned? : Bool #

def approved_at : Int64 | Nil #

#approved_at getter


def approved_at=(value : Int64 | Nil) #

#approved_at setter


def approved_at_assigned? : Bool #

def approved_at_change : Tuple(Int64 | Nil | Nil, Int64 | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def approved_at_changed? : Bool #

def approved_at_default : Int64 | Nil #

#approved_at's default value


[View source]
def approved_at_present? : Bool #

def approved_at_removed? : Bool #

def approved_at_was : Int64 | Nil | Nil #

def approved_at_will_change! : Nil #

Include #approved_at in the set of changed attributes, whether it has changed or not.


def approved_change : Tuple(Bool | Nil | Nil, Bool | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def approved_changed? : Bool #

def approved_default : Bool | Nil #

#approved's default value


[View source]
def approved_present? : Bool #

custom approval state, nil fields inherit from the parent booking. if either approved or rejected is set, all the approval fields are considered overridden as a group (see #hydrate_booking)


def approved_removed? : Bool #

def approved_was : Bool | Nil | Nil #

def approved_will_change! : Nil #

Include #approved in the set of changed attributes, whether it has changed or not.


def approver_email : String | Nil #

def approver_email=(value : String | Nil) #

def approver_email_assigned? : Bool #

def approver_email_change : Tuple(String | Nil | Nil, String | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def approver_email_changed? : Bool #

def approver_email_default : String | Nil #

#approver_email's default value


[View source]
def approver_email_present? : Bool #

def approver_email_removed? : Bool #

def approver_email_was : String | Nil | Nil #

def approver_email_will_change! : Nil #

Include #approver_email in the set of changed attributes, whether it has changed or not.


def approver_id : String | Nil #

#approver_id getter


def approver_id=(value : String | Nil) #

#approver_id setter


def approver_id_assigned? : Bool #

def approver_id_change : Tuple(String | Nil | Nil, String | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def approver_id_changed? : Bool #

def approver_id_default : String | Nil #

#approver_id's default value


[View source]
def approver_id_present? : Bool #

def approver_id_removed? : Bool #

def approver_id_was : String | Nil | Nil #

def approver_id_will_change! : Nil #

Include #approver_id in the set of changed attributes, whether it has changed or not.


def approver_name : String | Nil #

def approver_name=(value : String | Nil) #

def approver_name_assigned? : Bool #

def approver_name_change : Tuple(String | Nil | Nil, String | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def approver_name_changed? : Bool #

def approver_name_default : String | Nil #

#approver_name's default value


[View source]
def approver_name_present? : Bool #

def approver_name_removed? : Bool #

def approver_name_was : String | Nil | Nil #

def approver_name_will_change! : Nil #

Include #approver_name in the set of changed attributes, whether it has changed or not.


def asset_id : String | Nil #

#asset_id getter


def asset_id=(value : String | Nil) #

#asset_id setter


def asset_id_assigned? : Bool #

def asset_id_change : Tuple(String | Nil | Nil, String | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def asset_id_changed? : Bool #

def asset_id_default : String | Nil #

#asset_id's default value


[View source]
def asset_id_present? : Bool #

custom asset allocation, nil inherits the parent booking assets


def asset_id_removed? : Bool #

def asset_id_was : String | Nil | Nil #

def asset_id_will_change! : Nil #

Include #asset_id in the set of changed attributes, whether it has changed or not.


def asset_ids : Array(String) | Nil #

#asset_ids getter


def asset_ids=(vals : Array(String) | Nil) #

[View source]
def asset_ids=(value : Array(String) | Nil) #

#asset_ids setter


def asset_ids_assigned? : Bool #

def asset_ids_change : Tuple(Array(String) | Nil | Nil, Array(String) | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def asset_ids_changed? : Bool #

def asset_ids_default : Array(String) | Nil #

#asset_ids's default value


[View source]
def asset_ids_present? : Bool #

def asset_ids_removed? : Bool #

def asset_ids_was : Array(String) | Nil | Nil #

def asset_ids_will_change! : Nil #

Include #asset_ids in the set of changed attributes, whether it has changed or not.


def assign_attributes(instance_start : Int64 | Missing = Missing, tenant_id : Int64 | Missing = Missing, booking_start : Int64 | Missing = Missing, booking_end : Int64 | Missing = Missing, checked_in : Bool | Missing = Missing, checked_in_at : Int64 | Nil | Missing = Missing, checked_out_at : Int64 | Nil | Missing = Missing, deleted : Bool | Missing = Missing, deleted_at : Int64 | Nil | Missing = Missing, process_state : String | Nil | Missing = Missing, extension_data : JSON::Any | Nil | Missing = Missing, history : Array(PlaceOS::Model::Booking::History) | Missing = Missing, utm_source : String | Nil | Missing = Missing, approved : Bool | Nil | Missing = Missing, approved_at : Int64 | Nil | Missing = Missing, rejected : Bool | Nil | Missing = Missing, rejected_at : Int64 | Nil | Missing = Missing, approver_id : String | Nil | Missing = Missing, approver_name : String | Nil | Missing = Missing, approver_email : String | Nil | Missing = Missing, asset_id : String | Nil | Missing = Missing, asset_ids : Array(String) | Nil | Missing = Missing, id : Int64 | Nil | Missing = Missing, created_at : Time | Missing = Missing, updated_at : Time | Missing = Missing) #

Assign to multiple attributes.


def assign_attributes(params : HTTP::Params | Hash(String, String) | Tuple(String, String)) #

Assign to multiple attributes via HTTP::Params.


def assign_attributes(model : PlaceOS::Model::BookingInstance) #

Assign to multiple attributes from a model object


def assign_attributes_from_json(json, root : String) #

def assign_attributes_from_json(json) #

def assign_attributes_from_trusted_json(json, root : String) #

def assign_attributes_from_trusted_json(json) #

Assign each field from JSON if field exists in JSON and has changed in model


def assign_attributes_from_trusted_yaml(yaml) #

def assign_attributes_from_yaml(yaml) #

Uses the YAML parser as JSON is valid YAML


def attributes #

Returns a Hash of all attribute values


def attributes_json(io : IO) : Nil #

Serialize attributes to JSON, without any other properties to_json may include, as .from_json expects them.

Values are serialized as in to_json, applying any attribute converters.


def attributes_json(json : JSON::Builder) : Nil #

Serialize attributes to JSON, without any other properties to_json may include, as .from_json expects them.

Values are serialized as in to_json, applying any attribute converters.


def attributes_json : String #

Serialize attributes to JSON, without any other properties to_json may include, as .from_json expects them.

Values are serialized as in to_json, applying any attribute converters.


def attributes_tuple #

Returns a NamedTuple of all attribute values.


def before_create #
Description copied from class PlaceOS::Model::ModelWithAutoKey

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


def before_destroy #
Description copied from class PlaceOS::Model::ModelWithAutoKey

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


def before_save #
Description copied from class PlaceOS::Model::ModelWithAutoKey

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


def before_update #
Description copied from class PlaceOS::Model::ModelWithAutoKey

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


def booking_end : Int64 #

#booking_end getter


def booking_end=(value : Int64) #

#booking_end setter


def booking_end? : Int64 | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def booking_end_assigned? : Bool #

def booking_end_change : Tuple(Int64 | Nil, Int64 | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def booking_end_changed? : Bool #

def booking_end_default : Int64 #

#booking_end's default value


[View source]
def booking_end_present? : Bool #

def booking_end_removed? : Bool #

def booking_end_was : Int64 | Nil #

def booking_end_will_change! : Nil #

Include #booking_end in the set of changed attributes, whether it has changed or not.


def booking_start : Int64 #

def booking_start=(value : Int64) #

def booking_start? : Int64 | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def booking_start_assigned? : Bool #

def booking_start_change : Tuple(Int64 | Nil, Int64 | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def booking_start_changed? : Bool #

def booking_start_default : Int64 #

#booking_start's default value


[View source]
def booking_start_present? : Bool #

the new start and end times


def booking_start_removed? : Bool #

def booking_start_was : Int64 | Nil #

def booking_start_will_change! : Nil #

Include #booking_start in the set of changed attributes, whether it has changed or not.


def changed? #

Check if any attributes have changed.


def changed_attributes #

Returns a Hash with all changed attributes.


def changed_json(io : IO) : Nil #

Serialize the set of changed attributes to JSON.


def changed_json : String #

Serialize the set of changed attributes to JSON.


def changed_persist_attributes #

def changed_yaml(io : IO) : Nil #

Serialize the set of changed attributes to YAML.


def changed_yaml : String #

Serialize the set of changed attributes to YAML.


def changes #

Returns a Hash of changed attributes, mapping each to a {previous, current} tuple.


def changes_json(io : IO) : Nil #

Serialize changed attributes to JSON as {"attribute": [previous, current]}.

Values are serialized as in to_json, applying any attribute converters.


def changes_json(json : JSON::Builder) : Nil #

Serialize changed attributes to JSON as {"attribute": [previous, current]}.

Values are serialized as in to_json, applying any attribute converters.


def changes_json : String #

Serialize changed attributes to JSON as {"attribute": [previous, current]}.

Values are serialized as in to_json, applying any attribute converters.


def checked_in : Bool #

#checked_in getter


def checked_in=(value : Bool) #

#checked_in setter


def checked_in? : Bool | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def checked_in_assigned? : Bool #

def checked_in_at : Int64 | Nil #

def checked_in_at=(value : Int64 | Nil) #

def checked_in_at_assigned? : Bool #

def checked_in_at_change : Tuple(Int64 | Nil | Nil, Int64 | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def checked_in_at_changed? : Bool #

def checked_in_at_default : Int64 | Nil #

#checked_in_at's default value


[View source]
def checked_in_at_present? : Bool #

def checked_in_at_removed? : Bool #

def checked_in_at_was : Int64 | Nil | Nil #

def checked_in_at_will_change! : Nil #

Include #checked_in_at in the set of changed attributes, whether it has changed or not.


def checked_in_change : Tuple(Bool | Nil, Bool | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def checked_in_changed? : Bool #

def checked_in_default : Bool #

#checked_in's default value


[View source]
def checked_in_present? : Bool #

def checked_in_removed? : Bool #

def checked_in_was : Bool | Nil #

def checked_in_will_change! : Nil #

Include #checked_in in the set of changed attributes, whether it has changed or not.


def checked_out_at : Int64 | Nil #

def checked_out_at=(value : Int64 | Nil) #

def checked_out_at_assigned? : Bool #

def checked_out_at_change : Tuple(Int64 | Nil | Nil, Int64 | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def checked_out_at_changed? : Bool #

def checked_out_at_default : Int64 | Nil #

#checked_out_at's default value


[View source]
def checked_out_at_present? : Bool #

def checked_out_at_removed? : Bool #

def checked_out_at_was : Int64 | Nil | Nil #

def checked_out_at_will_change! : Nil #

Include #checked_out_at in the set of changed attributes, whether it has changed or not.


def clear_changes_information #

Reset changes for all attributes.


def created_at : Time #

#created_at getter


def created_at=(value : Time) #

#created_at setter


def created_at? : Time | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def created_at_assigned? : Bool #

def created_at_change : Tuple(Time | Nil, Time | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def created_at_changed? : Bool #

def created_at_default : Time #

#created_at's default value


def created_at_present? : Bool #

def created_at_removed? : Bool #

def created_at_was : Time | Nil #

def created_at_will_change! : Nil #

Include #created_at in the set of changed attributes, whether it has changed or not.


def current_history(state : Booking::State) : Array(History) #

An occurrence keeps its own history: Booking#save! delegates to as_instance.save!, so the parent's #before_save (and the #current_history it builds) never runs for an instance. Without this the occurrence records no transitions at all and the #utm_source behind them is lost.

Mirrors Booking#current_history. State comes from the hydrated booking -- that is exactly what the API presents for this occurrence, so its state is the one the history should record, and it avoids duplicating the state machine.


[View source]
def deleted : Bool #

#deleted getter


def deleted=(value : Bool) #

#deleted setter


def deleted? : Bool | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def deleted_assigned? : Bool #

def deleted_at : Int64 | Nil #

#deleted_at getter


def deleted_at=(value : Int64 | Nil) #

#deleted_at setter


def deleted_at_assigned? : Bool #

def deleted_at_change : Tuple(Int64 | Nil | Nil, Int64 | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def deleted_at_changed? : Bool #

def deleted_at_default : Int64 | Nil #

#deleted_at's default value


[View source]
def deleted_at_present? : Bool #

def deleted_at_removed? : Bool #

def deleted_at_was : Int64 | Nil | Nil #

def deleted_at_will_change! : Nil #

Include #deleted_at in the set of changed attributes, whether it has changed or not.


def deleted_change : Tuple(Bool | Nil, Bool | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def deleted_changed? : Bool #

def deleted_default : Bool #

#deleted's default value


[View source]
def deleted_present? : Bool #

def deleted_removed? : Bool #

def deleted_was : Bool | Nil #

def deleted_will_change! : Nil #

Include #deleted in the set of changed attributes, whether it has changed or not.


def extension_data : JSON::Any | Nil #

def extension_data=(value : JSON::Any | Nil) #

def extension_data_assigned? : Bool #

def extension_data_change : Tuple(JSON::Any | Nil | Nil, JSON::Any | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def extension_data_changed? : Bool #

def extension_data_default : JSON::Any | Nil #

#extension_data's default value


[View source]
def extension_data_present? : Bool #

def extension_data_removed? : Bool #

def extension_data_was : JSON::Any | Nil | Nil #

def extension_data_will_change! : Nil #

Include #extension_data in the set of changed attributes, whether it has changed or not.


def history : Array(PlaceOS::Model::Booking::History) #

#history getter


def history=(value : Array(PlaceOS::Model::Booking::History)) #

#history setter


def history? : Array(PlaceOS::Model::Booking::History) | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def history_action : String | Nil #

Overrides the action recorded by the next change, e.g. approve


def history_action=(history_action : String | Nil) #

Overrides the action recorded by the next change, e.g. approve


def history_assigned? : Bool #

def history_change : Tuple(Array(PlaceOS::Model::Booking::History) | Nil, Array(PlaceOS::Model::Booking::History) | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def history_changed? : Bool #

def history_correlation_id : String | Nil #
Description copied from module PlaceOS::Model::History::Tracked

A parent the change should also be found under


[View source]
def history_default : Array(History) #

#history's default value


[View source]
def history_metadata : PlaceOS::Model::History::Metadata | Nil #

Request details recorded with changes to this record, defaults to History.current_metadata


def history_metadata=(history_metadata : PlaceOS::Model::History::Metadata | Nil) #

Request details recorded with changes to this record, defaults to History.current_metadata


def history_present? : Bool #

def history_removed? : Bool #

def history_resource_id : String #

an occurrence of the booking, recorded against it


[View source]
def history_was : Array(PlaceOS::Model::Booking::History) | Nil #

def history_will_change! : Nil #

Include #history in the set of changed attributes, whether it has changed or not.


def hydrate_booking(main : Booking = parent_booking) : Booking #

returns a booking object that represents this instance


[View source]
def id : Int64 | Nil #

#id getter


def id=(value : Int64 | Nil) #

#id setter


def id? #

def id_assigned? : Bool #

def id_change : Tuple(Int64 | Nil | Nil, Int64 | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def id_changed? : Bool #

def id_default : Int64 | Nil #

#id's default value


def id_present? : Bool #

def id_removed? : Bool #

def id_was : Int64 | Nil | Nil #

def id_will_change! : Nil #

Include #id in the set of changed attributes, whether it has changed or not.


def instance_start : Int64 #

def instance_start=(value : Int64) #

Setters #instance_start setter


def instance_start? : Int64 | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def instance_start_assigned? : Bool #

def instance_start_change : Tuple(Int64 | Nil, Int64 | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def instance_start_changed? : Bool #

def instance_start_default : Int64 #

#instance_start's default value


[View source]
def instance_start_present? : Bool #

the original starting time of the instance


def instance_start_removed? : Bool #

def instance_start_was : Int64 | Nil #

def instance_start_will_change! : Nil #

Include #instance_start in the set of changed attributes, whether it has changed or not.


def invoke_props #
Description copied from class PlaceOS::Model::ModelWithAutoKey

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


def parent_booking : Booking #

property so we can set this if we've already fetched the parent


[View source]
def parent_booking=(parent_booking : Booking) #

property so we can set this if we've already fetched the parent


[View source]
def persistent_attributes #

Returns a Hash of all attributes that can be persisted.


def primary_key #
Description copied from class PlaceOS::Model::ModelWithAutoKey

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk


[View source]
def primary_key_hash #

def process_state : String | Nil #

def process_state=(value : String | Nil) #

def process_state_assigned? : Bool #

def process_state_change : Tuple(String | Nil | Nil, String | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def process_state_changed? : Bool #

def process_state_default : String | Nil #

#process_state's default value


[View source]
def process_state_present? : Bool #

def process_state_removed? : Bool #

def process_state_was : String | Nil | Nil #

def process_state_will_change! : Nil #

Include #process_state in the set of changed attributes, whether it has changed or not.


def rejected : Bool | Nil #

#rejected getter


def rejected=(value : Bool | Nil) #

#rejected setter


def rejected_assigned? : Bool #

def rejected_at : Int64 | Nil #

#rejected_at getter


def rejected_at=(value : Int64 | Nil) #

#rejected_at setter


def rejected_at_assigned? : Bool #

def rejected_at_change : Tuple(Int64 | Nil | Nil, Int64 | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def rejected_at_changed? : Bool #

def rejected_at_default : Int64 | Nil #

#rejected_at's default value


[View source]
def rejected_at_present? : Bool #

def rejected_at_removed? : Bool #

def rejected_at_was : Int64 | Nil | Nil #

def rejected_at_will_change! : Nil #

Include #rejected_at in the set of changed attributes, whether it has changed or not.


def rejected_change : Tuple(Bool | Nil | Nil, Bool | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def rejected_changed? : Bool #

def rejected_default : Bool | Nil #

#rejected's default value


[View source]
def rejected_present? : Bool #

def rejected_removed? : Bool #

def rejected_was : Bool | Nil | Nil #

def rejected_will_change! : Nil #

Include #rejected in the set of changed attributes, whether it has changed or not.


def restore_attributes #

Reset each attribute to their previous values and clears all changes.


def skip_clash_check : Bool #

transient flag (never (de)serialised, so API clients cannot set it): set by Booking#as_instance when the caller has already run an explicit clash check, so save! does not redundantly re-run it.


[View source]
def skip_clash_check=(skip_clash_check : Bool) #

transient flag (never (de)serialised, so API clients cannot set it): set by Booking#as_instance when the caller has already run an explicit clash check, so save! does not redundantly re-run it.


[View source]
def slot_changed? : Bool #

the clash validation only needs to run when the booked slot itself (time or asset) changes. approving, rejecting or checking in an existing instance must not be blocked by a clash it did not introduce.


[View source]
def table_name #

def tenant_id : Int64 #

#tenant_id getter


def tenant_id=(value : Int64) #

#tenant_id setter


def tenant_id? : Int64 | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def tenant_id_assigned? : Bool #

def tenant_id_change : Tuple(Int64 | Nil, Int64 | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def tenant_id_changed? : Bool #

def tenant_id_default : Int64 #

#tenant_id's default value


[View source]
def tenant_id_present? : Bool #

def tenant_id_removed? : Bool #

def tenant_id_was : Int64 | Nil #

def tenant_id_will_change! : Nil #

Include #tenant_id in the set of changed attributes, whether it has changed or not.


def unique_ids? #

[View source]
def update_assets #

keep the custom asset_id and asset_ids in sync, mirroring Booking#update_assets but with nil meaning inherit from the parent


[View source]
def updated_at : Time #

#updated_at getter


def updated_at=(value : Time) #

#updated_at setter


def updated_at? : Time | Nil #

NOTE use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.


def updated_at_assigned? : Bool #

def updated_at_change : Tuple(Time | Nil, Time | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def updated_at_changed? : Bool #

def updated_at_default : Time #

#updated_at's default value


def updated_at_present? : Bool #

def updated_at_removed? : Bool #

def updated_at_was : Time | Nil #

def updated_at_will_change! : Nil #

Include #updated_at in the set of changed attributes, whether it has changed or not.


def utm_source : String? #

Accessors for attributes without JSON mapping


def utm_source=(value : String | Nil) #

#utm_source setter


def utm_source=(utm_source) #

Accessors for attributes without JSON mapping


def utm_source_assigned? : Bool #

def utm_source_change : Tuple(String | Nil | Nil, String | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def utm_source_changed? : Bool #

def utm_source_default : String | Nil #

#utm_source's default value


[View source]
def utm_source_present? : Bool #

transient, mirrors Booking#utm_source -- recorded against the history entry of the transition it caused, never persisted as a column of its own


def utm_source_removed? : Bool #

def utm_source_was : String | Nil | Nil #

def utm_source_will_change! : Nil #

Include #utm_source in the set of changed attributes, whether it has changed or not.


def validate_nilability #

Validate that all non-nillable fields have values.