/// <summary>
        /// Adds the selected admission data to the IMS.
        /// </summary>
        /// <param name="admissionObj"></param>
        /// <returns></returns>
        public async Task <AdmittedPatient> AddAdmissionToImsAsync(object admissionObj)
        {
            Admission admission = admissionObj as Admission;

            IsLoading = true;

            try
            {
                AdmittedPatient patient = Patients.First(ap => ap.Admission.ID == admission.ID);
                IsLoading = false;
                return(patient);
            }
            catch (InvalidOperationException)
            {
                try
                {
                    var admittedPatient = await imsSvc.AddAdmissionDataAsync(admission);

                    Patients.Add(admittedPatient);
                    IsLoading = false;
                    return(admittedPatient);
                }
                catch (Exception)
                {
                    IsLoading = false;
                    throw;
                }
            }
        }
        private static AdmittedPatient ConvertToAdmittedPatient(ImsAdmission iAdm, Admission admission)
        {
            AdmittedPatient ap = new AdmittedPatient()
            {
                ID        = iAdm.ID,
                Admission = admission
            };

            return(ap);
        }
 public async Task RemoveAdmissionDataAsync(AdmittedPatient admittedPatient)
 {
     try
     {
         await _imsApi.PutAdmissionsAsync(admittedPatient.ID, isInMachine : false);
     }
     catch (Exception)
     {
         throw;
     }
 }
        public AddPrescriptionDialog(AdmittedPatient patient)
        {
            InitializeComponent();
            Loaded += OnDialogLoaded;
            Patient = patient;

            var defaultDate = DateTime.Now.AddHours(1);

            cdp_startDate.Date = defaultDate.Date;
            tp_startTime.Time  = new TimeSpan(DateTime.Now.Hour + 1, 0, 0);
        }
        /// <summary>
        /// Disassociates the admitted patient at IMS. Ideal when the patient's medicines
        /// are already administered.
        /// </summary>
        /// <param name="admittedPatientObj"></param>
        /// <returns></returns>
        public async Task RemoveAdmissionFromDeviceAsync(object admittedPatientObj)
        {
            try
            {
                AdmittedPatient patient = admittedPatientObj as AdmittedPatient;
                await imsSvc.RemoveAdmissionDataAsync(patient);

                Patients.Remove(patient as AdmittedPatient);
            }
            catch (Exception)
            {
                throw;
            }
        }
        public async Task <AdmittedPatient> AddAdmissionDataAsync(Admission admission)
        {
            try
            {
                string data_raw = await _imsApi.PostAdmissionsAsync(admission.ID);

                ImsAdmission    data    = JsonConvert.DeserializeObject <ImsAdmission>(data_raw);
                AdmittedPatient patient = ConvertToAdmittedPatient(data, admission);

                return(patient);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        /// <summary>
        /// Get a list of all the admitted patients.
        /// </summary>
        /// <param name="stationCode"></param>
        /// <param name="inMachineOnly"></param>
        /// <returns></returns>
        public async Task <List <AdmittedPatient> > GetAdmittedPatientsAsync(bool inMachineOnly = false)
        {
            List <AdmittedPatient> admittedPatients = new List <AdmittedPatient>();

            try
            {
                string imsData_raw = await _imsApi.GetAdmissionsAsync(inMachineOnly);

                string mmasData_raw = await _imsApi.GetRegisteredMachinesInfoAsync();

                string hptData_raw = await _hospApi.GetAdmissionsAsync(_settings.StationCode);

                List <ImsAdmission>         imsData  = JsonConvert.DeserializeObject <List <ImsAdmission> >(imsData_raw);
                List <Admission>            hptData  = JsonConvert.DeserializeObject <List <Admission> >(hptData_raw);
                List <MobileMedAdminSystem> mmasData = JsonConvert.DeserializeObject <List <MobileMedAdminSystem> >(mmasData_raw);

                foreach (ImsAdmission admission in imsData)
                {
                    var ap = new AdmittedPatient()
                    {
                        ID        = admission.ID,
                        Admission = hptData.Where(a => a.ID == admission.AdmissionID).First(),
                        Remark    = admission.Remark
                    };

                    if (admission.MmasID != null)
                    {
                        ap.MMAS = mmasData.Where(mmas => mmas.ID == admission.MmasID).First();
                    }
                    else
                    {
                        ap.MMAS = null;
                    }

                    ap.Admission.LatestFinding = ap.Admission.Findings.OrderBy(f => f.DiagnosedOn).First();

                    admittedPatients.Add(ap);
                }

                return(admittedPatients);
            }
            catch (Exception e)
            {
                throw e;
            }
        }