Started setting up conversion_imports. Not entirely sure how it ultimatly works. Need to grab some real data for a while first
This commit is contained in:
@@ -143,3 +143,59 @@ class AckedRequest(Base):
|
||||
String, index=True
|
||||
) # Should match Reservation.form_id or another unique field
|
||||
timestamp = Column(DateTime(timezone=True))
|
||||
|
||||
|
||||
class Conversion(Base):
|
||||
"""Conversion/daily sales data from hotel PMS.
|
||||
|
||||
Tracks actual sales revenue for reservations. Each row represents one day
|
||||
of a reservation stay. Linked to reservations via advertising tracking data
|
||||
(fbclid, gclid, etc) stored in advertisingCampagne field.
|
||||
"""
|
||||
__tablename__ = "conversions"
|
||||
id = Column(Integer, primary_key=True)
|
||||
|
||||
# Link to reservation (nullable since matching may not always work)
|
||||
reservation_id = Column(Integer, ForeignKey("reservations.id"), nullable=True, index=True)
|
||||
customer_id = Column(Integer, ForeignKey("customers.id"), nullable=True, index=True)
|
||||
hashed_customer_id = Column(Integer, ForeignKey("hashed_customers.id"), nullable=True, index=True)
|
||||
|
||||
# Reservation metadata from XML
|
||||
hotel_id = Column(String, index=True) # hotelID attribute
|
||||
pms_reservation_id = Column(String, index=True) # id attribute from reservation
|
||||
reservation_number = Column(String) # number attribute
|
||||
reservation_date = Column(Date) # date attribute (when reservation was made)
|
||||
creation_time = Column(DateTime(timezone=True)) # creationTime attribute
|
||||
reservation_type = Column(String) # type attribute (e.g., "reservation")
|
||||
booking_channel = Column(String) # bookingChannel attribute
|
||||
|
||||
# Advertising/tracking data - used for matching to existing reservations
|
||||
advertising_medium = Column(String, index=True) # advertisingMedium (e.g., "99TALES")
|
||||
advertising_partner = Column(String, index=True) # advertisingPartner (e.g., "cpc", "website")
|
||||
advertising_campagne = Column(String, index=True) # advertisingCampagne (contains fbclid/gclid)
|
||||
|
||||
# Room reservation details
|
||||
arrival_date = Column(Date)
|
||||
departure_date = Column(Date)
|
||||
room_status = Column(String) # status attribute (e.g., "reserved", "checked-in")
|
||||
room_type = Column(String) # roomType attribute
|
||||
room_number = Column(String) # roomNumber attribute
|
||||
num_adults = Column(Integer) # adults attribute
|
||||
rate_plan_code = Column(String) # ratePlanCode attribute
|
||||
|
||||
# Daily sales data (one row per day)
|
||||
sale_date = Column(Date, index=True) # date attribute from dailySale
|
||||
revenue_total = Column(String) # revenueTotal - keeping as string to preserve decimals
|
||||
revenue_logis = Column(String) # revenueLogis (accommodation)
|
||||
revenue_board = Column(String) # revenueBoard (meal plan)
|
||||
revenue_fb = Column(String) # revenueFB (food & beverage)
|
||||
revenue_spa = Column(String) # revenueSpa
|
||||
revenue_other = Column(String) # revenueOther
|
||||
|
||||
# Metadata
|
||||
created_at = Column(DateTime(timezone=True)) # When this record was imported
|
||||
|
||||
# Relationships
|
||||
reservation = relationship("Reservation", backref="conversions")
|
||||
customer = relationship("Customer", backref="conversions")
|
||||
hashed_customer = relationship("HashedCustomer", backref="conversions")
|
||||
|
||||
Reference in New Issue
Block a user