def serialize_data(self): """Serializes appointment data. Returns list of AppointmentData objects.""" LOGGER.info('------------------------------') LOGGER.info('| Serialize Data |') LOGGER.info('------------------------------') self.serialized_appointments = [] i = 1 total = len(self.appointments_data) LOGGER.info('Serializing appointments data. Total count: %i', total) for appt in self.appointments_data: LOGGER.info('Serializing appointment (%i of %i)', i, total) i = i + 1 appointment = AppointmentData() LOGGER.debug('\tAppointment Id: %s - Raw Data: \n%s', appt.get('altAppointmentId'), ET.tostring(appt)) LOGGER.info('\tAlt appointment id: %s', appt.get('altAppointmentId')) # Customer ID appointment.customer_id = self.customer_id # ================ # Appointment data # ================ appointment.altAppointmentId = appt.get('altAppointmentId') appt_date_time = appt.get('apptDateTime') if (appt_date_time): date_time = datetime.strptime(appt_date_time, "%Y-%m-%dT%H:%M:%S") # Convert string(2012-09-26T10:00:00) to datetime object appointment.apptDate = date_time.strftime("%Y-%m-%d") appointment.apptTime = date_time.strftime("%Y-%m-%d %H:%M:%S") appointment.apptTypeName = appt.get('apptTypeName').title() #TODO: confirm if apptType="RefReason" can be used appointment.altApptTypeId = appt.get('apptTypeName').title() (status_id, conformation_id, appt_kept, reschdeuled) = AMDStatusLookup.get_appointment_status_info(appt.get('apptStatusId')) appointment.apptStatusId = status_id appointment.apptConformationId = conformation_id appointment.apptKept = appt_kept appointment.reschedule = reschdeuled # ============= # Facility data # ============= appointment.altFacilityId = appt.get('altFacilityId') appointment.facilityName = appt.get('facilityName').title() #TODO: Facility id is empty for Advanced MD, confirm appointment.facilityAddr = "" # ============ # Patient data # ============ appointment.altPatientId = appt.get('altPatientId') appt_patient = appt.find('patientlist/patient') appointment.fname = appt_patient.get('fname').title() appointment.lname = appt_patient.get('lname').title() if (is_email_valid(appt_patient.get('email'))): # Validate email appointment.email = appt_patient.get('email').lower() if (AMDStatusLookup.is_cell_phone(appt_patient.get('otherPhoneType'))): appointment.cellPhone = appt_patient.get('cellPhone') #TODO: Handle empty workPhone and homePhone appointment.homePhone = appt_patient.get('homePhone') appointment.workPhone = appt_patient.get('workPhone') appointment.workPhoneExt = appt_patient.get('workPhoneExt') appointment.address = (appt_patient.get('address1') + ' ' + appt_patient.get('address2')).title() appointment.city = appt_patient.get('city').title() appointment.state = appt_patient.get('state').upper() appointment.zip = appt_patient.get('zip') appointment.language = appt_patient.get('language').strip() if appointment.language in NULLS: appointment.language = "ENG" if(appt_patient.get('dateOfBirth')): dob = datetime.strptime(appt_patient.get('dateOfBirth'), "%Y-%m-%dT%H:%M:%S") appointment.dateOfBirth = dob.strftime("%Y-%m-%d") # ============== # Guarantor data # ============== appointment.guarantorID = appt_patient.get('altGuarantorId') appointment.gFname = appt_patient.get('rpFname').title() appointment.gLname = appt_patient.get('rpLname').title() appointment.gAddress = (appt_patient.get('rpAddress1') + ' ' + appt_patient.get('rpAddress2')).title() appointment.gZip = appt_patient.get('rpZip') appointment.gCity = appt_patient.get('rpCity').title() appointment.gState = appt_patient.get('rpState').upper() appointment.gWorkPhone = appt_patient.get('rpWorkPhone') appointment.gHomePhone = appt_patient.get('rpHomePhone') if (AMDStatusLookup.is_cell_phone(appt_patient.get('rpOtherPhoneType'))): appointment.gCellPhone = appt_patient.get('rpCellPhone') #TODO: Handle empty workPhone and homePhone if (is_email_valid(appt_patient.get('rpEmail'))): # Validate email appointment.gEmail = appt_patient.get('rpEmail').lower() if(appt_patient.get('rpDob')): # "1945-11-14T00:00:00" dob = datetime.strptime(appt_patient.get('rpDob'), "%Y-%m-%dT%H:%M:%S") appointment.gDob = dob.strftime("%Y-%m-%d") # =========== # Doctor data # =========== appointment.altDoctorId = appt_patient.get('altDoctorId') appointment.doctorName = (appt_patient.get('drFname') + ' ' + appt_patient.get('drLname')).title() # Get doctor titled name appointment.doctorName = AMDStatusLookup.get_dr_titled_name(appt_patient.get('drTitle'), appointment.doctorName) appointment.normalize() LOGGER.debug('Appointment ID: %s, serialized result:\n%s', appt.get('altAppointmentId'), json.dumps(appointment.__dict__)) self.serialized_appointments.append(appointment) return self.serialized_appointments
def serialize_data(self): """ Mapping data from row data to appointment class """ LOGGER.info("------------------------------") LOGGER.info("| Serialize Data |") LOGGER.info("------------------------------") self.serialized_appointments = [] if self.appointments_data: number = 1 total_count = len(self.appointments_data["SitesScheduledAppointmentsGetResult"]["ScheduledAppointments"]) LOGGER.info("Serializing appointments data. Total count: %s" % (total_count)) for appt in self.appointments_data["SitesScheduledAppointmentsGetResult"]["ScheduledAppointments"]: LOGGER.debug("Serializing appointment (%s of %s)" % (number, total_count)) number += 1 LOGGER.debug("Appointment Id: %s - Raw Data: \n%s" % (appt["AppointmentID"], appt)) appointment = AppointmentData() # Customer ID appointment.customer_id = self.customer_id # Appointment data appointment.altAppointmentId = appt["AppointmentID"] if appt["ScheduleDate"]: appt_date = time.strptime(appt["ScheduleDate"], "%m/%d/%Y") appointment.apptDate = time.strftime("%Y-%m-%d", appt_date) if appt["StartTime"]: appt_time = time.strptime(appt["ScheduleDate"] + appt["StartTime"], "%m/%d/%Y%I:%M:%S %p") appointment.apptTime = time.strftime("%Y-%m-%d %H:%M:%S", appt_time) appointment.apptTypeName = appt["Type"]["Name"] appointment.altApptTypeId = appt["Type"]["AppointmentTypeID"] # Patient data appointment.altPatientId = appt["Patient"]["PatientID"] if appt["Patient"]["FullName"] not in NULLS: name = appt["Patient"]["FullName"].split(",") appointment.fname = name[1] appointment.lname = name[0] elif appt["Patient"]["Firstname"] not in NULLS: appointment.fname = appt["Patient"]["Firstname"] elif appt["Patient"]["LastName"] not in NULLS: appointment.lname = appt["Patient"]["LastName"] if appt["Patient"]["EmailAddress1"] not in NULLS: appointment.email = appt["Patient"]["EmailAddress1"] elif appt["Patient"]["EmailAddress2"] not in NULLS: appointment.email = appt["Patient"]["EmailAddress2"] # Patient's email validating if not is_email_valid(appointment.email): appointment.email = "" # Patient's cell phone is added if appt["Patient"]["PrimaryPhoneNumber"] not in NULLS: appointment.cellPhone = appt["Patient"]["PrimaryPhoneNumber"] elif appt["Patient"]["CellPhoneNumber1"] not in NULLS: appointment.cellPhone = appt["Patient"]["CellPhoneNumber1"] elif appt["Patient"]["CellPhoneNumber2"] not in NULLS: appointment.cellPhone = appt["Patient"]["CellPhoneNumber2"] # Patient's home phone is added if appt["Patient"]["PhoneNumber1"] not in NULLS: appointment.homePhone = appt["Patient"]["PhoneNumber1"] elif appt["Patient"]["PhoneNumber2"] not in NULLS: appointment.homePhone = appt["Patient"]["PhoneNumber2"] # Patient's work phone is added if appt["Patient"]["PrimaryWorkPhone"] not in NULLS: appointment.workPhone = appt["Patient"]["PrimaryWorkPhone"] appointment.pagerNo = appt["Patient"]["PagerNumber"] # Patient's Address mapping. if appt["Patient"]["ResidentialAddress"] not in NULLS: if appt["Patient"]["ResidentialAddress"]["AddressLine1"] not in NULLS: appointment.address = appt["Patient"]["ResidentialAddress"]["AddressLine1"] elif appt["Patient"]["ResidentialAddress"]["AddressLine2"] not in NULLS: appointment.address += " " + appt["Patient"]["ResidentialAddress"]["AddressLine2"] if appt["Patient"]["ResidentialAddress"]["City"] not in NULLS: appointment.city = appt["Patient"]["ResidentialAddress"]["City"] if appt["Patient"]["ResidentialAddress"]["State"] not in NULLS: appointment.state = appt["Patient"]["ResidentialAddress"]["State"] if appt["Patient"]["ResidentialAddress"]["PostalCode"] not in NULLS: appointment.zip = appt["Patient"]["ResidentialAddress"]["PostalCode"] if appt["Patient"]["PrimaryLanguage"] not in NULLS: appointment.language = appt["Patient"]["PrimaryLanguage"] if appt["Patient"]["DateOfBirth"] not in NULLS: dob = re.findall(r"\/\w+\S(\-?\d+)", appt["Patient"]["DateOfBirth"])[ 0 ] # trying to parse '/Date(223432432432-4400)/ and /Date(-223432432432-4400)/' if dob[0] == "-": dob = dob[1:] dob = time.gmtime(long(dob) / 1000) appointment.dateOfBirth = time.strftime("%Y-%m-%d", dob) appointment.guarantorID = appt["Patient"]["GuarantorID"] # Doctor data appointment.altDoctorId = appt["Resource"]["OwnerCareProviderID"] if appt["Resource"]["Name"]: appointment.doctorName = appt["Resource"]["Name"] if appointment.doctorName.find("Dr") == -1: appointment.doctorName = "Dr. " + appointment.doctorName else: appointment.doctorName = "the staff" # Facility data appointment.altFacilityId = appt["ScheduleLocation"]["ScheduleLocationID"] appointment.facilityName = appt["ScheduleLocation"]["Name"] appointment.facilityAddr = appt["ScheduleLocation"]["CareProviderLocation"]["Address"] appointment.normalize() LOGGER.debug( "Appointment ID: %s, serialized result: \n%s" % (appointment.altAppointmentId, appointment.__dict__) ) self.serialized_appointments.append(appointment) return self.serialized_appointments