Updateinsert customers
This commit is contained in:
@@ -15,6 +15,7 @@ from fastapi.middleware.cors import CORSMiddleware
|
||||
from fastapi.responses import HTMLResponse, Response
|
||||
from fastapi.security import HTTPBasic, HTTPBasicCredentials
|
||||
from slowapi.errors import RateLimitExceeded
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine
|
||||
|
||||
from alpine_bits_python.schemas import ReservationData
|
||||
@@ -393,28 +394,57 @@ async def process_wix_form_submission(request: Request, data: dict[str, Any], db
|
||||
|
||||
# use database session
|
||||
|
||||
# Save all relevant data to DB (including new fields)
|
||||
db_customer = DBCustomer(
|
||||
given_name=first_name,
|
||||
surname=last_name,
|
||||
contact_id=contact_id,
|
||||
name_prefix=name_prefix,
|
||||
email_address=email,
|
||||
phone=phone_number,
|
||||
email_newsletter=email_newsletter,
|
||||
address_line=address_line,
|
||||
city_name=city_name,
|
||||
postal_code=postal_code,
|
||||
country_code=country_code,
|
||||
gender=gender,
|
||||
birth_date=birth_date,
|
||||
language=language,
|
||||
address_catalog=False,
|
||||
name_title=None,
|
||||
)
|
||||
db.add(db_customer)
|
||||
await db.flush() # This assigns db_customer.id without committing
|
||||
# await db.refresh(db_customer)
|
||||
# Check if customer with this contact_id already exists
|
||||
existing_customer = None
|
||||
if contact_id:
|
||||
result = await db.execute(
|
||||
select(DBCustomer).where(DBCustomer.contact_id == contact_id)
|
||||
)
|
||||
existing_customer = result.scalar_one_or_none()
|
||||
|
||||
if existing_customer:
|
||||
# Update existing customer with new information
|
||||
_LOGGER.info("Updating existing customer with contact_id: %s", contact_id)
|
||||
existing_customer.given_name = first_name
|
||||
existing_customer.surname = last_name
|
||||
existing_customer.name_prefix = name_prefix
|
||||
existing_customer.email_address = email
|
||||
existing_customer.phone = phone_number
|
||||
existing_customer.email_newsletter = email_newsletter
|
||||
existing_customer.address_line = address_line
|
||||
existing_customer.city_name = city_name
|
||||
existing_customer.postal_code = postal_code
|
||||
existing_customer.country_code = country_code
|
||||
existing_customer.gender = gender
|
||||
existing_customer.birth_date = birth_date
|
||||
existing_customer.language = language
|
||||
existing_customer.address_catalog = False
|
||||
existing_customer.name_title = None
|
||||
db_customer = existing_customer
|
||||
await db.flush()
|
||||
else:
|
||||
# Create new customer
|
||||
_LOGGER.info("Creating new customer with contact_id: %s", contact_id)
|
||||
db_customer = DBCustomer(
|
||||
given_name=first_name,
|
||||
surname=last_name,
|
||||
contact_id=contact_id,
|
||||
name_prefix=name_prefix,
|
||||
email_address=email,
|
||||
phone=phone_number,
|
||||
email_newsletter=email_newsletter,
|
||||
address_line=address_line,
|
||||
city_name=city_name,
|
||||
postal_code=postal_code,
|
||||
country_code=country_code,
|
||||
gender=gender,
|
||||
birth_date=birth_date,
|
||||
language=language,
|
||||
address_catalog=False,
|
||||
name_title=None,
|
||||
)
|
||||
db.add(db_customer)
|
||||
await db.flush() # This assigns db_customer.id without committing
|
||||
|
||||
# Determine hotel_code and hotel_name
|
||||
# Priority: 1) Form field, 2) Configuration default, 3) Hardcoded fallback
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
from xsdata_pydantic.bindings import XmlParser
|
||||
|
||||
from alpine_bits_python.generated.alpinebits import OtaPingRs
|
||||
|
||||
|
||||
def main():
|
||||
# test parsing a ping request sample
|
||||
|
||||
path = (
|
||||
"AlpineBits-HotelData-2024-10/files/samples/Handshake/Handshake-OTA_PingRS.xml"
|
||||
)
|
||||
|
||||
with open(path, encoding="utf-8") as f:
|
||||
xml = f.read()
|
||||
|
||||
# Parse the XML into the request object
|
||||
|
||||
# Test parsing back
|
||||
|
||||
parser = XmlParser()
|
||||
|
||||
parsed_result = parser.from_string(xml, OtaPingRs)
|
||||
|
||||
|
||||
parsed_result.warnings.warning[0]
|
||||
|
||||
|
||||
|
||||
|
||||
# save json in echo_data to file with indents
|
||||
output_path = "echo_data_response.json"
|
||||
with open(output_path, "w", encoding="utf-8") as out_f:
|
||||
import json
|
||||
|
||||
json.dump(json.loads(parsed_result.echo_data), out_f, indent=4)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user