/* fEMR - fast Electronic Medical Records Copyright (C) 2014 Team fEMR fEMR is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. fEMR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with fEMR. If not, see <http://www.gnu.org/licenses/>. If you have any questions, contact <info@teamfemr.org>. */ package femr.common; import femr.business.helpers.LogicDoer; import femr.common.models.*; import femr.data.models.core.*; import femr.data.models.mysql.MedicationInventory; import femr.util.calculations.dateUtils; import femr.util.stringhelpers.StringUtils; import org.joda.time.DateTime; import java.text.DecimalFormat; import java.util.Date; import java.util.List; /** * Responsible for creating item objects (common/models) * Only visible to ui & service layer. */ public class ItemModelMapper implements IItemModelMapper { /** * {@inheritDoc} */ @Override public CityItem createCityItem(String cityName, String countryName) { if (StringUtils.isNullOrWhiteSpace(cityName) || StringUtils.isNullOrWhiteSpace(countryName)) { return null; } CityItem cityItem = new CityItem(); cityItem.setCityName(cityName); cityItem.setCountryName(countryName); return cityItem; } /** * {@inheritDoc} */ @Override public MedicationItem createMedicationItem(IMedication medication, Integer quantityCurrent, Integer quantityTotal, DateTime isDeleted) { if (medication == null) { return null; } MedicationItem medicationItem = new MedicationItem(); medicationItem.setId(medication.getId()); medicationItem.setName(medication.getName()); medicationItem.setQuantityCurrent(quantityCurrent); medicationItem.setQuantityTotal(quantityTotal); if (medication.getConceptMedicationForm() != null) { medicationItem.setForm(medication.getConceptMedicationForm().getName()); } DecimalFormat df = new DecimalFormat("######.####"); int count = 0; String fullActiveDrugName = ""; for (IMedicationGenericStrength medicationGenericStrength : medication.getMedicationGenericStrengths()) { medicationItem.addActiveIngredient(medicationGenericStrength.getMedicationGeneric().getName(), medicationGenericStrength.getConceptMedicationUnit().getName(), medicationGenericStrength.getValue(), medicationGenericStrength.isDenominator() ); if (count == 0){ fullActiveDrugName = fullActiveDrugName.concat(df.format(medicationGenericStrength.getValue()) + " " + medicationGenericStrength.getConceptMedicationUnit().getName() + " " + medicationGenericStrength.getMedicationGeneric().getName()); }else{ fullActiveDrugName = fullActiveDrugName.concat(" / " + df.format(medicationGenericStrength.getValue()) + " " + medicationGenericStrength.getConceptMedicationUnit().getName() + " " + medicationGenericStrength.getMedicationGeneric().getName()); } count++; } medicationItem.setFullName(medicationItem.getName().concat(" " + fullActiveDrugName)); if (StringUtils.isNotNullOrWhiteSpace(medicationItem.getForm())) medicationItem.setFullName(medicationItem.getFullName().concat(" " + "(" + medicationItem.getForm() + ")")); //Check to see if medication is deleted. if(isDeleted != null) medicationItem.setIsDeleted(isDeleted); return medicationItem; } /** * {@inheritDoc} */ @Override public MissionItem createMissionItem(IMissionTeam missionTeam, List<MissionTripItem> missionTripItems) { if (missionTeam == null) { return null; } MissionItem missionItem = new MissionItem(); missionItem.setTeamName(missionTeam.getName()); missionItem.setTeamLocation(missionTeam.getLocation()); missionItem.setTeamDescription(missionTeam.getDescription()); missionItem.setMissionTrips(missionTripItems); return missionItem; } @Override public MissionTripItem createMissionTripItem(IMissionTrip missionTrip){ if (missionTrip == null){ return null; } MissionTripItem missionTripItem = new MissionTripItem(); missionTripItem.setId(missionTrip.getId()); if (missionTrip.getMissionCity() != null) missionTripItem.setTripCity(missionTrip.getMissionCity().getName()); if (missionTrip.getMissionCity() != null) missionTripItem.setTripCountry(missionTrip.getMissionCity().getMissionCountry().getName()); missionTripItem.setTripStartDate(missionTrip.getStartDate()); missionTripItem.setFriendlyTripStartDate(dateUtils.getFriendlyDate(missionTrip.getStartDate())); missionTripItem.setTripEndDate(missionTrip.getEndDate()); missionTripItem.setFriendlyTripEndDate(dateUtils.getFriendlyDate(missionTrip.getEndDate())); missionTripItem.setTeamName(missionTrip.getMissionTeam().getName()); missionTripItem.setFriendlyTripTitle( StringUtils.generateMissionTripTitle(missionTripItem.getTeamName(), missionTripItem.getTripCountry(), missionTripItem.getTripStartDate(), missionTripItem.getTripEndDate()) ); return missionTripItem; } /** * {@inheritDoc} */ @Override public PatientItem createPatientItem(int id, String firstName, String lastName, String phoneNumber, String city, String address, int userId, Date age, String sex, Integer weeksPregnant, Integer heightFeet, Integer heightInches, Float weight, String pathToPatientPhoto, Integer photoId, String ageClassification) { if (StringUtils.isNullOrWhiteSpace(firstName) || StringUtils.isNullOrWhiteSpace(lastName) || StringUtils.isNullOrWhiteSpace(city)) { return null; } PatientItem patientItem = new PatientItem(); //required fields patientItem.setId(id); patientItem.setFirstName(firstName); patientItem.setLastName(lastName); patientItem.setYearsOld(dateUtils.getYearsInteger(age)); patientItem.setMonthsOld(dateUtils.getMonthsInteger(age)); patientItem.setCity(city); patientItem.setUserId(userId); //optional fields if (StringUtils.isNotNullOrWhiteSpace(phoneNumber)) patientItem.setPhoneNumber(phoneNumber); if (StringUtils.isNotNullOrWhiteSpace(address)) patientItem.setAddress(address); if (StringUtils.isNotNullOrWhiteSpace(sex)) patientItem.setSex(sex); if (age != null) { patientItem.setAge(dateUtils.getAge(age));//age (int) patientItem.setBirth(age);//date of birth(date) patientItem.setFriendlyDateOfBirth(dateUtils.getFriendlyDate(age)); } if (StringUtils.isNotNullOrWhiteSpace(pathToPatientPhoto) && photoId != null) { patientItem.setPathToPhoto(pathToPatientPhoto); patientItem.setPhotoId(photoId); } if (weeksPregnant != null) patientItem.setWeeksPregnant(weeksPregnant); if (heightFeet != null) patientItem.setHeightFeet(heightFeet); else patientItem.setHeightFeet(0); if (heightInches != null) patientItem.setHeightInches(heightInches); else patientItem.setHeightInches(0); if (weight != null) patientItem.setWeight(weight); return patientItem; } /** * {@inheritDoc} */ @Override public PatientEncounterItem createPatientEncounterItem(IPatientEncounter patientEncounter) { if (patientEncounter == null || patientEncounter.getPatient() == null) { return null; } PatientEncounterItem patientEncounterItem = new PatientEncounterItem(); for (IChiefComplaint cc : patientEncounter.getChiefComplaints()) { patientEncounterItem.addChiefComplaint(cc.getValue()); } patientEncounterItem.setId(patientEncounter.getId()); //needs special checks for age classification/photo patientEncounterItem.setPatientItem(createPatientItem(patientEncounter.getPatient().getId(), patientEncounter.getPatient().getFirstName(), patientEncounter.getPatient().getLastName(), patientEncounter.getPatient().getPhoneNumber(), patientEncounter.getPatient().getCity(), patientEncounter.getPatient().getAddress(), patientEncounter.getPatient().getUserId(), patientEncounter.getPatient().getAge(), patientEncounter.getPatient().getSex(), null, null, null, null, null, null, null)); if( patientEncounter.getMissionTrip() != null ) { patientEncounterItem.setMissionTripId(patientEncounter.getMissionTrip().getId()); } patientEncounterItem.setTriageDateOfVisit(dateUtils.getFriendlyDate(patientEncounter.getDateOfTriageVisit())); if (patientEncounter.getDateOfMedicalVisit() != null) patientEncounterItem.setMedicalDateOfVisit(dateUtils.getFriendlyDate(patientEncounter.getDateOfMedicalVisit())); if (patientEncounter.getDateOfPharmacyVisit() != null) patientEncounterItem.setPharmacyDateOfVisit(dateUtils.getFriendlyDate(patientEncounter.getDateOfPharmacyVisit())); patientEncounterItem.setIsClosed(LogicDoer.isEncounterClosed(patientEncounter)); patientEncounterItem.setNurseEmailAddress(patientEncounter.getNurse().getEmail()); if (patientEncounter.getDoctor() != null) patientEncounterItem.setPhysicianEmailAddress(patientEncounter.getDoctor().getEmail()); if (patientEncounter.getPharmacist() != null) patientEncounterItem.setPharmacistEmailAddress(patientEncounter.getPharmacist().getEmail()); patientEncounterItem.setNurseFullName(patientEncounter.getNurse().getFirstName() + " " + patientEncounter.getNurse().getLastName()); // Andrew Change //checks if the patient has been screened for diabetes during this encounter if (patientEncounter.getDateOfDiabeteseScreen() != null) patientEncounterItem.setScreenedForDiabetes(true); else patientEncounterItem.setScreenedForDiabetes(false); if (patientEncounter.getDoctor() != null) { patientEncounterItem.setPhysicianFullName(patientEncounter.getDoctor().getFirstName() + " " + patientEncounter.getDoctor().getLastName()); // Andrew Change } if (patientEncounter.getPharmacist() != null) { patientEncounterItem.setPharmacistFullName(patientEncounter.getPharmacist().getFirstName() + " " + patientEncounter.getPharmacist().getLastName()); // Andrew Change } patientEncounterItem.setTurnAroundTime(dateUtils.getTurnAroundTime(patientEncounterItem)); return patientEncounterItem; } /** * {@inheritDoc} */ @Override public PhotoItem createPhotoItem(int id, String description, Date insertTimeStamp, String imageURL) { if (StringUtils.isNullOrWhiteSpace(imageURL) || insertTimeStamp == null) { return null; } PhotoItem photoItem = new PhotoItem(); photoItem.setId(id); photoItem.setImageDesc(description); photoItem.setImageUrl(imageURL); photoItem.setImageDate(StringUtils.ToSimpleDate(insertTimeStamp)); return photoItem; } /** * {@inheritDoc} */ @Override public PrescriptionItem createPrescriptionItem(int id, String name, String originalMedicationName, String firstName, String lastName, IConceptPrescriptionAdministration medicationAdministration, Integer amount, IMedication medication, Integer quantityCurrent, Integer quantityInitial, Boolean isCounseled) { PrescriptionItem prescriptionItem = new PrescriptionItem(); prescriptionItem.setId(id); prescriptionItem.setName(name); if (originalMedicationName != null) prescriptionItem.setOriginalMedicationName(originalMedicationName); if (StringUtils.isNotNullOrWhiteSpace(firstName)) prescriptionItem.setPrescriberFirstName(firstName); if (StringUtils.isNotNullOrWhiteSpace(lastName)) prescriptionItem.setPrescriberLastName(lastName); if (medicationAdministration != null) { prescriptionItem.setAdministrationID(medicationAdministration.getId()); prescriptionItem.setAdministrationName(medicationAdministration.getName()); prescriptionItem.setAdministrationModifier(medicationAdministration.getDailyModifier()); } prescriptionItem.setAmount(amount); if (isCounseled != null) prescriptionItem.setCounseled(isCounseled); if (medication != null) { MedicationItem medicationItem; //Inventory isn't coming through if(quantityCurrent != null && quantityInitial != null){ medicationItem = createMedicationItem(medication, quantityCurrent, quantityInitial, null); prescriptionItem.setMedicationRemaining( quantityCurrent ); } else{ medicationItem = createMedicationItem(medication, null, null, null); } prescriptionItem.setMedicationID(medicationItem.getId()); if (medicationItem.getForm() != null) prescriptionItem.setMedicationForm(medicationItem.getForm()); if (medicationItem.getActiveIngredients() != null) prescriptionItem.setMedicationActiveDrugs(medicationItem.getActiveIngredients()); } return prescriptionItem; } /** * {@inheritDoc} */ @Override public PrescriptionItem createPrescriptionItemWithReplacement(int id, String name, String replacementMedicationName, Integer replacementAmount, int replacementId, String firstName, String lastName, IConceptPrescriptionAdministration conceptPrescriptionAdministration, Integer amount, IMedication medication, Integer quantityCurrent, Integer quantityInitial, Boolean isCounseled) { PrescriptionItem prescriptionItem = createPrescriptionItem(id, name, null, firstName, lastName, conceptPrescriptionAdministration, amount, medication, quantityCurrent, quantityInitial, isCounseled); if (replacementMedicationName != null) prescriptionItem.setReplacementMedicationName(replacementMedicationName); prescriptionItem.setReplacementAmount(replacementAmount); prescriptionItem.setReplacementId(replacementId); return prescriptionItem; } /** * {@inheritDoc} */ @Override public ProblemItem createProblemItem(String name) { if (StringUtils.isNullOrWhiteSpace(name)) { return null; } ProblemItem problemItem = new ProblemItem(); problemItem.setName(name); return problemItem; } /** * {@inheritDoc} */ @Override public SettingItem createSettingItem(List<? extends ISystemSetting> systemSettings) { SettingItem settingItem = new SettingItem(); if (systemSettings == null) return null; else if (systemSettings.size() > 0) { for (ISystemSetting ss : systemSettings) { switch (ss.getName()) { case "Multiple chief complaints": settingItem.setMultipleChiefComplaint(ss.isActive()); break; case "Medical PMH Tab": settingItem.setPmhTab(ss.isActive()); break; case "Medical Photo Tab": settingItem.setPhotoTab(ss.isActive()); break; case "Medical HPI Consolidate": settingItem.setConsolidateHPI(ss.isActive()); break; case "Metric System Option": //Alaa Serhan - set the metric system option settingItem.setMetric(ss.isActive()); break; case "Diabetes Prompt": settingItem.setIsDiabetesPrompt(ss.isActive()); break; } } } return settingItem; } /** * {@inheritDoc} */ @Override public TabItem createTabItem(String name, boolean isCustom, Integer leftColumnSize, Integer rightColumnSize) { if (StringUtils.isNullOrWhiteSpace(name) || leftColumnSize == null || rightColumnSize == null) { return null; } TabItem tabItem = new TabItem(); tabItem.setName(name); tabItem.setCustom(isCustom); tabItem.setLeftColumnSize(leftColumnSize); tabItem.setRightColumnSize(rightColumnSize); return tabItem; } /** * {@inheritDoc} */ @Override public TabFieldItem createTabFieldItem(String name, String type, String size, Integer order, String placeholder, String value, String chiefComplaint, boolean isCustom) { if (StringUtils.isNullOrWhiteSpace(name)) { return null; } TabFieldItem tabFieldItem = new TabFieldItem(); tabFieldItem.setName(name); if (StringUtils.isNotNullOrWhiteSpace(placeholder)) tabFieldItem.setPlaceholder(placeholder); if (order != null) tabFieldItem.setOrder(order); if (StringUtils.isNotNullOrWhiteSpace(size)) tabFieldItem.setSize(size); if (StringUtils.isNotNullOrWhiteSpace(type)) tabFieldItem.setType(type); if (StringUtils.isNotNullOrWhiteSpace(value)) tabFieldItem.setValue(value); if (StringUtils.isNotNullOrWhiteSpace(chiefComplaint)) tabFieldItem.setChiefComplaint(chiefComplaint); tabFieldItem.setIsCustom(isCustom); return tabFieldItem; } /** * {@inheritDoc} */ @Override public TabFieldItem createTabFieldItem(String name, String type, String size, Integer order, String placeholder, String value, String chiefComplaint, boolean isCustom, String userName) { TabFieldItem temp = createTabFieldItem(name, type, size, order, placeholder, value, chiefComplaint, isCustom); if (StringUtils.isNotNullOrWhiteSpace(userName)) temp.setUserName(userName); return temp; } /** * {@inheritDoc} */ @Override public TeamItem createTeamItem(String name, String location, String description) { if (StringUtils.isNullOrWhiteSpace(name)) { return null; } TeamItem teamItem = new TeamItem(); teamItem.setName(name); teamItem.setLocation(location); teamItem.setDescription(description); return teamItem; } /** * {@inheritDoc} */ @Override public TripItem createTripItem(String teamName, String tripCity, String tripCountry, Date startDate, Date endDate) { if (StringUtils.isNullOrWhiteSpace(teamName) || StringUtils.isNullOrWhiteSpace(tripCity) || StringUtils.isNullOrWhiteSpace(tripCountry) || startDate == null || endDate == null) { return null; } TripItem tripItem = new TripItem(); tripItem.setTeamName(teamName); tripItem.setTripCity(tripCity); tripItem.setTripCountry(tripCountry); tripItem.setTripStartDate(startDate); tripItem.setTripEndDate(endDate); return tripItem; } /** * {@inheritDoc} */ @Override public UserItem createUserItem(IUser user) { if (user == null) { return null; } UserItem userItem = new UserItem(); userItem.setId(user.getId()); userItem.setEmail(user.getEmail()); userItem.setFirstName(user.getFirstName()); userItem.setLastName(user.getLastName()); userItem.setLastLoginDate(dateUtils.getFriendlyDate(user.getLastLogin())); for (IRole role : user.getRoles()) { if (role != null && StringUtils.isNotNullOrWhiteSpace(role.getName())) { userItem.addRole(role.getName()); } } userItem.setNotes(user.getNotes()); userItem.setDeleted(user.getDeleted()); userItem.setPasswordReset(user.getPasswordReset()); userItem.setPasswordCreatedDate(dateUtils.getFriendlyDate(user.getPasswordCreatedDate())); userItem.setCreatedBy(user.getCreatedBy()); //Sam Zanni userItem.setDateCreated(dateUtils.getFriendlyDate(user.getDateCreated())); //Sam Zanni return userItem; } /** * {@inheritDoc} */ @Override public VitalItem createVitalItem(String name, Float value) { if (StringUtils.isNullOrWhiteSpace(name)) { return null; } VitalItem vitalItem = new VitalItem(); vitalItem.setName(name); if (value != null) vitalItem.setValue(value); return vitalItem; } /** * {@inheritDoc} */ public MedicationAdministrationItem createMedicationAdministrationItem(IConceptPrescriptionAdministration conceptPrescriptionAdministration) { if (conceptPrescriptionAdministration == null) return null; MedicationAdministrationItem medicationAdministrationItem = new MedicationAdministrationItem( conceptPrescriptionAdministration.getId(), conceptPrescriptionAdministration.getName(), conceptPrescriptionAdministration.getDailyModifier() ); return medicationAdministrationItem; } }