diff --git a/ems_client/models.py b/ems_client/models.py index 9ed3011..ad95c89 100644 --- a/ems_client/models.py +++ b/ems_client/models.py @@ -37,6 +37,8 @@ class Building(models.Model): description = models.CharField(max_length=50) building_code = models.CharField(max_length=20, null=True) id = models.PositiveIntegerField(primary_key=True) + time_zone_description = models.CharField(max_length=255) + time_zone_abbreviation = models.CharField(max_length=10) def __str__(self): return self.description @@ -68,6 +70,7 @@ class Booking(models.Model): building = models.ForeignKey(Building, on_delete=models.PROTECT) time_booking_start = models.DateTimeField() time_booking_end = models.DateTimeField() + time_zone = models.CharField(max_length=10) building_code = models.CharField(max_length=20) dv_building = models.CharField(max_length=50) room_code = models.CharField(max_length=20) diff --git a/ems_client/service.py b/ems_client/service.py index ef8b7cc..2a3a0f7 100644 --- a/ems_client/service.py +++ b/ems_client/service.py @@ -1,10 +1,12 @@ """ This module exposes EMS Service methods """ -from dateutil import parser +from dateutil.parser import parse +from dateutil.tz import gettz +from lxml import etree + from ems_client import EMSAPI, EMSAPIException from ems_client.models import * -from lxml import etree class Service(EMSAPI): @@ -13,6 +15,9 @@ def __init__(self): 'wsdl': 'Service.asmx?WSDL' }) self._port = 'ServiceSoap' + self.tzinfos = { + 'PT': gettz("America/Los Angeles"), + } @staticmethod def _data_from_xml(data_type, xml): @@ -91,6 +96,8 @@ def get_buildings(self): building.description = item['Description'] building.building_code = item['BuildingCode'] building.id = int(item['ID']) + building.time_zone_description = item['TimeZoneDescription'] + building.time_zone_abbreviation = item['TimeZoneAbbreviation'] buildings.append(building) return buildings @@ -103,12 +110,14 @@ def get_service_order_details(self, start_date, end_date): details = [] for item in data: detail = ServiceOrderDetail() - detail.booking_date = parser.parse(item['BookingDate']).date() + detail.booking_date = parse(item['BookingDate']).date() detail.service_order_start_time = \ - parser.parse(item['ServiceOrderStartTime']).time() \ + parse(item['ServiceOrderStartTime'] + ' ' + item['TimeZone'], + tzinfos=self.tzinfos).time() \ if item.get('ServiceOrderStartTime') else None detail.service_order_end_time = \ - parser.parse(item['ServiceOrderEndTime']).time() \ + parse(item['ServiceOrderEndTime'] + ' ' + item['TimeZone'], + tzinfos=self.tzinfos).time() \ if item.get('ServiceOrderEndTime') else None detail.resource_description = item['ResourceDescription'] detail.resource_external_reference = \ @@ -126,11 +135,15 @@ def get_booking(self, booking_id): })) item = data.pop() booking = Booking() - booking.booking_date = parser.parse(item['BookingDate']).date() + booking.booking_date = parse(item['BookingDate']).date() booking.room_description = item['RoomDescription'] - booking.time_event_start = parser.parse(item['TimeEventStart']) \ + booking.time_event_start = \ + parse(item['TimeEventStart'] + ' ' + item['TimeZone'], + tzinfos=self.tzinfos) \ if item.get('TimeEventStart') else None - booking.time_event_end = parser.parse(item['TimeEventEnd']) \ + booking.time_event_end = \ + parse(item['TimeEventEnd'] + ' ' + item['TimeZone'], + tzinfos=self.tzinfos) \ if item.get('TimeEventEnd') else None booking.group_name = item['GroupName'] booking.event_name = item['EventName'] @@ -139,10 +152,14 @@ def get_booking(self, booking_id): booking.id = int(item['BookingID']) booking.building_id = int(item['BuildingID']) booking.time_booking_start = \ - parser.parse(item['TimeBookingStart']) \ + parse(item['TimeBookingStart'] + ' ' + item['TimeZone'], + tzinfos=self.tzinfos) \ if item.get('TimeBookingStart') else None - booking.time_booking_end = parser.parse(item['TimeBookingEnd']) \ + booking.time_booking_end = \ + parse(item['TimeBookingEnd'] + ' ' + item['TimeZone'], + tzinfos=self.tzinfos) \ if item.get('TimeBookingEnd') else None + booking.time_zone = item['TimeZone'] booking.building_code = item['BuildingCode'] booking.dv_building = item['Building'] booking.room_code = item['RoomCode'] @@ -168,11 +185,15 @@ def get_bookings(self, start_date, end_date, bookings = [] for item in data: booking = Booking() - booking.booking_date = parser.parse(item['BookingDate']).date() + booking.booking_date = parse(item['BookingDate']).date() booking.room_description = item['RoomDescription'] - booking.time_event_start = parser.parse(item['TimeEventStart']) \ + booking.time_event_start = \ + parse(item['TimeEventStart'] + ' ' + item['TimeZone'], + tzinfos=self.tzinfos) \ if item.get('TimeEventStart') else None - booking.time_event_end = parser.parse(item['TimeEventEnd']) \ + booking.time_event_end = \ + parse(item['TimeEventEnd'] + ' ' + item['TimeZone'], + tzinfos=self.tzinfos) \ if item.get('TimeEventEnd') else None booking.group_name = item['GroupName'] booking.event_name = item['EventName'] @@ -181,10 +202,14 @@ def get_bookings(self, start_date, end_date, booking.id = int(item['BookingID']) booking.building_id = int(item['BuildingID']) booking.time_booking_start = \ - parser.parse(item['TimeBookingStart']) \ + parse(item['TimeBookingStart'] + ' ' + item['TimeZone'], + tzinfos=self.tzinfos) \ if item.get('TimeBookingStart') else None - booking.time_booking_end = parser.parse(item['TimeBookingEnd']) \ + booking.time_booking_end = \ + parse(item['TimeBookingEnd'] + ' ' + item['TimeZone'], + tzinfos=self.tzinfos) \ if item.get('TimeBookingEnd') else None + booking.time_zone = item['TimeZone'] booking.building_code = item['BuildingCode'] booking.dv_building = item['Building'] booking.room_code = item['RoomCode'] @@ -192,7 +217,7 @@ def get_bookings(self, start_date, end_date, booking.room_id = int(item['RoomID']) booking.status_id = int(item['StatusID']) booking.status_type_id = int(item['StatusTypeID']) - booking.date_added = parser.parse(item['DateAdded']) - booking.date_changed = parser.parse(item['DateChanged']) + booking.date_added = parse(item['DateAdded']) + booking.date_changed = parse(item['DateChanged']) bookings.append(booking) return bookings