public async Task <IHttpActionResult> GetUserWeightVitals(HealthGoalModel healthGoalModel)
        {
            try
            {
                if (healthGoalModel.Last5 != null && healthGoalModel.Last5 == true)
                {
                    var userVitals = await db.tUserVitals
                                     .Where(u => u.UserID == healthGoalModel.UserId &&
                                            u.SystemStatusID == 1 &&
                                            u.Name == "Weight")
                                     .OrderByDescending(u => u.ResultDateTime)
                                     .Take(5)
                                     .ToListAsync();

                    return(Ok(userVitals));
                }
                else
                {
                    var userVitals = await db.tUserVitals
                                     .OrderBy(u => u.ResultDateTime)
                                     .Where(u => u.UserID == healthGoalModel.UserId &&
                                            u.ResultDateTime >= healthGoalModel.StartDate &&
                                            u.ResultDateTime <= healthGoalModel.EndDate &&
                                            u.SystemStatusID == 1 &&
                                            u.Name == "Weight")
                                     .ToListAsync();

                    return(Ok(userVitals));
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public async Task <IHttpActionResult> GetUserExerciseVitals(HealthGoalModel healthGoalModel)
        {
            try
            {
                if (healthGoalModel.Last5 != null && healthGoalModel.Last5 == true)
                {
                    var activities = await db.tUserActivities
                                     .OrderByDescending(u => u.StartDateTime)
                                     .Where(u => u.UserID == healthGoalModel.UserId &&
                                            u.Steps != null &&
                                            u.SystemStatusID == 1)
                                     .Take(5)
                                     .ToListAsync();

                    return(Ok(activities));
                }
                else
                {
                    var activities = await db.tUserActivities
                                     .OrderBy(u => u.StartDateTime)
                                     .Where(u => u.UserID == healthGoalModel.UserId &&
                                            u.StartDateTime >= healthGoalModel.StartDate &&
                                            u.StartDateTime <= healthGoalModel.EndDate &&
                                            u.Steps != null &&
                                            u.SystemStatusID == 1)
                                     .ToListAsync();

                    return(Ok(activities));
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public async Task <IHttpActionResult> GetUserBloodPressure(HealthGoalModel healthGoalModel)
        {
            try
            {
                var idList = new string[] { "Systolic Blood Pressure", "Diastolic Blood Pressure", "Heart Rate" };

                if (healthGoalModel.Last5 != null && healthGoalModel.Last5 == true)
                {
                    var vitals = await db.tUserVitals
                                 .Where(u => u.UserID == healthGoalModel.UserId &&
                                        u.SystemStatusID == 1 &&
                                        idList.Contains(u.Name))
                                 .GroupBy(u =>
                                          new { ResulDateTime = u.ResultDateTime })
                                 .Select(details => new UserVitalModel
                    {
                        ResultDateTime = details.Key.ResulDateTime,
                        Systolic       = details.FirstOrDefault(u => (u.Name == "Systolic Blood Pressure")).Value,
                        Diastolic      = details.FirstOrDefault(u => (u.Name == "Diastolic Blood Pressure")).Value,
                        HeartRate      = details.FirstOrDefault(u => (u.Name == "Heart Rate")).Value
                    })
                                 .OrderByDescending(u => u.ResultDateTime)
                                 .Take(5)
                                 .ToListAsync();

                    return(Ok(vitals));
                }
                else
                {
                    var vitals = await db.tUserVitals
                                 .Where(u => u.UserID == healthGoalModel.UserId &&
                                        u.ResultDateTime >= healthGoalModel.StartDate &&
                                        u.ResultDateTime <= healthGoalModel.EndDate &&
                                        u.SystemStatusID == 1 &&
                                        idList.Contains(u.Name))
                                 .GroupBy(u =>
                                          new { ResulDateTime = u.ResultDateTime })
                                 .Select(details => new UserVitalModel
                    {
                        ResultDateTime = details.Key.ResulDateTime,
                        Systolic       = details.FirstOrDefault(u => (u.Name == "Systolic Blood Pressure")).Value,
                        Diastolic      = details.FirstOrDefault(u => (u.Name == "Diastolic Blood Pressure")).Value,
                        HeartRate      = details.FirstOrDefault(u => (u.Name == "Heart Rate")).Value
                    })
                                 .OrderBy(u => u.ResultDateTime)
                                 .ToListAsync();

                    return(Ok(vitals));
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public async Task <IHttpActionResult> GetUserLast5ExerciseVitals(HealthGoalModel healthGoalModel)
        {
            var activities = await db.tUserActivities
                             .OrderByDescending(u => u.StartDateTime)
                             .Where(u => u.UserID == healthGoalModel.UserId &&
                                    u.SystemStatusID == 1)
                             .Take(5)
                             .ToListAsync();

            return(Ok(activities));
        }
        public async Task <IHttpActionResult> GetUserCholesterol(HealthGoalModel healthGoalModel)
        {
            var idList = new int[] { 568, 570, 572 };

            if (healthGoalModel.Last5 != null && healthGoalModel.Last5 == true)
            {
                var result = await db.tUserTestResults
                             .Join(db.tUserTestResultComponents, test => test.ID, comp => comp.TestResultID, (test, comp) => new { TestResult = test, Component = comp })
                             .Join(db.tXrefUserTestResultComponentsCodes,
                                   tc => tc.Component.ID, compcode => compcode.UserTestResultComponentID, (tc, compcode) =>
                                   new { tc.TestResult.UserID, tc.TestResult.ResultDateTime, tc.Component.Name, tc.Component.Value, compcode.CodeID, tc.TestResult.SystemStatusID })
                             .Where(u => u.UserID == healthGoalModel.UserId &&
                                    u.SystemStatusID == 1 &&
                                    idList.Contains(u.CodeID))
                             .GroupBy(u => new { ResulDateTime = u.ResultDateTime })
                             .Select(g => new UserTestModel
                {
                    ResultDateTime = g.Key.ResulDateTime,
                    Hdl            = g.FirstOrDefault(u => (u.CodeID == 570)).Value,
                    Ldl            = g.FirstOrDefault(u => (u.CodeID == 572)).Value,
                    Cholesterol    = g.FirstOrDefault(u => (u.CodeID == 568)).Value
                })
                             .OrderByDescending(u => u.ResultDateTime)
                             .Take(5)
                             .ToListAsync();

                return(Ok(result));
            }
            else
            {
                var result = await db.tUserTestResults
                             .Join(db.tUserTestResultComponents, test => test.ID, comp => comp.TestResultID, (test, comp) => new { TestResult = test, Component = comp })
                             .Join(db.tXrefUserTestResultComponentsCodes,
                                   tc => tc.Component.ID, compcode => compcode.UserTestResultComponentID, (tc, compcode) =>
                                   new { tc.TestResult.UserID, tc.TestResult.ResultDateTime, tc.Component.Name, tc.Component.Value, compcode.CodeID, tc.TestResult.SystemStatusID })
                             .Where(u => u.UserID == healthGoalModel.UserId &&
                                    u.ResultDateTime >= healthGoalModel.StartDate &&
                                    u.ResultDateTime <= healthGoalModel.EndDate &&
                                    u.SystemStatusID == 1 &&
                                    idList.Contains(u.CodeID))
                             .GroupBy(u => new { ResulDateTime = u.ResultDateTime })
                             .Select(g => new UserTestModel
                {
                    ResultDateTime = g.Key.ResulDateTime,
                    Hdl            = g.FirstOrDefault(u => (u.CodeID == 570)).Value,
                    Ldl            = g.FirstOrDefault(u => (u.CodeID == 572)).Value,
                    Cholesterol    = g.FirstOrDefault(u => (u.CodeID == 568)).Value
                })
                             .OrderBy(u => u.ResultDateTime)
                             .ToListAsync();

                return(Ok(result));
            }
        }
Example #6
0
        public async Task <IHttpActionResult> GetUserSleepVitals(HealthGoalModel healthGoalModel)
        {
            var sleeps = await db.tUserSleeps
                         .OrderBy(u => u.StartDateTime)
                         .Where(u => u.UserID == healthGoalModel.UserId && u.StartDateTime >= healthGoalModel.StartDate &&
                                u.StartDateTime <= healthGoalModel.EndDate && u.SystemStatusID == 1).Select(s => new UserSleepModel {
                StartDateTime = s.StartDateTime, TimeAsleep = s.TimeAsleep
            })
                         .ToListAsync();

            return(Ok(sleeps));
        }
        public async Task <IHttpActionResult> GetUserCurrentBloodPressure(HealthGoalModel healthGoalModel)
        {
            try
            {
                var idList = new string[] { "Systolic Blood Pressure", "Diastolic Blood Pressure", "Heart Rate" };
                List <DAL.tUserVital> vitals;

                if (healthGoalModel.Last5 != null && healthGoalModel.Last5 == true)
                {
                    vitals = await db.tUserVitals
                             .Where(u => u.UserID == healthGoalModel.UserId &&
                                    u.SystemStatusID == 1 &&
                                    idList.Contains(u.Name))
                             .ToListAsync();
                }
                else
                {
                    vitals = await db.tUserVitals
                             .Where(u => u.UserID == healthGoalModel.UserId &&
                                    u.ResultDateTime >= healthGoalModel.StartDate &&
                                    u.ResultDateTime <= healthGoalModel.EndDate &&
                                    u.SystemStatusID == 1 &&
                                    idList.Contains(u.Name))
                             .ToListAsync();
                }

                var systolic = vitals.Where(u => u.Name == "Systolic Blood Pressure" && u.Value > 0)
                               .OrderByDescending(u => u.ResultDateTime)
                               .FirstOrDefault();

                var diastolic = vitals.Where(u => u.Name == "Diastolic Blood Pressure" && u.Value > 0)
                                .OrderByDescending(u => u.ResultDateTime)
                                .FirstOrDefault();

                var heartRate = vitals.Where(u => u.Name == "Heart Rate" && u.Value > 0)
                                .OrderByDescending(u => u.ResultDateTime)
                                .FirstOrDefault();

                return(Ok(new
                {
                    Systolic = systolic?.Value ?? 0,
                    Diastolic = diastolic?.Value ?? 0,
                    HeartRate = heartRate?.Value ?? 0,
                    ResultDateTime = diastolic?.ResultDateTime
                }));
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public async Task <IHttpActionResult> GetUserDietVitals(HealthGoalModel healthGoalModel)
        {
            try
            {
                if (healthGoalModel.Last5 != null && healthGoalModel.Last5 == true)
                {
                    var userModel = await db.tUserDiets
                                    .Join(db.tXrefUserDietNutrients, d => d.ID, x => x.UserDietID, (d, x) => new { d, x })
                                    .Where(w => w.x.NutrientID == 170 &&
                                           w.d.UserID == healthGoalModel.UserId &&
                                           w.d.SystemStatusID == 1)
                                    .GroupBy(y => new { y.d.EnteredDateTime })
                                    .Select(g => new UserDietModel {
                        EnteredDateTime = g.Key.EnteredDateTime, Value = g.Sum(a => a.x.Value)
                    })
                                    .OrderByDescending(u => u.EnteredDateTime)
                                    .Take(5)
                                    .ToListAsync();

                    return(Ok(userModel));
                }
                else
                {
                    var userModel = await db.tUserDiets
                                    .Join(db.tXrefUserDietNutrients, d => d.ID, x => x.UserDietID, (d, x) => new { d, x })
                                    .Where(w => w.x.NutrientID == 170 &&
                                           w.d.UserID == healthGoalModel.UserId &&
                                           w.d.EnteredDateTime >= healthGoalModel.StartDate &&
                                           w.d.EnteredDateTime <= healthGoalModel.EndDate &&
                                           w.d.SystemStatusID == 1)
                                    .GroupBy(y => new { y.d.EnteredDateTime })
                                    .Select(g => new UserDietModel {
                        EnteredDateTime = g.Key.EnteredDateTime, Value = g.Sum(a => a.x.Value)
                    }).ToListAsync();

                    return(Ok(userModel));
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public async Task <IHttpActionResult> GetUserLast5WeightVitals(HealthGoalModel healthGoalModel)
        {
            try
            {
                var userVitals = await db.tUserVitals
                                 .Where(u => u.UserID == healthGoalModel.UserId &&
                                        u.SystemStatusID == 1 &&
                                        u.Name == "Weight")
                                 .OrderByDescending(u => u.ResultDateTime)
                                 .Take(5)
                                 .ToListAsync();

                return(Ok(userVitals));
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public async Task <IHttpActionResult> GetUserBloodGlucose(HealthGoalModel healthGoalModel)
        {
            if (healthGoalModel.Last5 != null && healthGoalModel.Last5 == true)
            {
                var userModel = await db.tUserTestResultComponents.Include(u => u.tUserTestResult)
                                .Include(u => u.tXrefUserTestResultComponentsCodes)
                                .Where(u => u.tXrefUserTestResultComponentsCodes.Any(x => x.CodeID == 604) &&
                                       u.tUserTestResult.SystemStatusID == 1 &&
                                       u.SystemStatusID == 1 &&
                                       u.tUserTestResult.UserID == healthGoalModel.UserId)
                                .Select(t => new UserTestModel
                {
                    ResultDateTime = t.tUserTestResult.ResultDateTime,
                    Value          = t.Value
                })
                                .OrderByDescending(u => u.ResultDateTime)
                                .Take(5)
                                .ToListAsync();

                return(Ok(userModel));
            }
            else
            {
                var userModel = await db.tUserTestResultComponents.Include(u => u.tUserTestResult)
                                .Include(u => u.tXrefUserTestResultComponentsCodes)
                                .Where(u => u.tXrefUserTestResultComponentsCodes.Any(x => x.CodeID == 604) &&
                                       u.tUserTestResult.SystemStatusID == 1 &&
                                       u.SystemStatusID == 1 &&
                                       u.tUserTestResult.UserID == healthGoalModel.UserId &&
                                       u.tUserTestResult.ResultDateTime >= healthGoalModel.StartDate &&
                                       u.tUserTestResult.ResultDateTime <= healthGoalModel.EndDate)
                                .Select(t => new UserTestModel
                {
                    ResultDateTime = t.tUserTestResult.ResultDateTime,
                    Value          = t.Value
                }).OrderBy(o => o.ResultDateTime)
                                .ToListAsync();

                return(Ok(userModel));
            }
        }
        public async Task <IHttpActionResult> GetUserTrendActivity(HealthGoalModel healthGoalModel)
        {
            var activities = await db.tUserActivities.Include(u => u.tActivity)
                             .Include(u => u.tUnitsOfMeasure)
                             .Include(u => u.tUnitsOfMeasure1)
                             .Include(u => u.tUserSourceService.tSourceService)
                             .Where(u => u.UserID == healthGoalModel.UserId && u.StartDateTime >= healthGoalModel.StartDate &&
                                    u.StartDateTime <= healthGoalModel.EndDate && u.SystemStatusID == 1).Select(u => new Models.UserData.UserAcitivityModel
            {
                ActivityID           = u.ActivityID,
                ID                   = u.ID,
                SourceObjectID       = u.SourceObjectID,
                UserID               = u.UserID,
                UserSourceServiceID  = u.UserSourceServiceID,
                Duration             = u.Duration,
                Distance             = u.Distance,
                DurationUOMID        = u.tUnitsOfMeasure.ID,
                DistanceUOMID        = u.tUnitsOfMeasure1.ID,
                DurationUOM          = u.tUnitsOfMeasure.UnitOfMeasure,
                DistanceUOM          = u.tUnitsOfMeasure1.UnitOfMeasure,
                Steps                = u.Steps,
                Calories             = u.Calories,
                LightActivityMin     = u.LightActivityMin,
                ModerateActivityMin  = u.ModerateActivityMin,
                VigorousActivityMin  = u.VigorousActivityMin,
                SedentaryActivityMin = u.SedentaryActivityMin,
                StartDateTime        = u.StartDateTime,
                EndDateTime          = u.EndDateTime,
                SystemStatusID       = u.SystemStatusID,
                CreateDateTime       = u.CreateDateTime,
                LastUpdatedDateTime  = u.LastUpdatedDateTime,
                UserDerivedNote      = db.tUserDerivedNotes.FirstOrDefault(a => a.fkObjectID == u.ObjectID),
                Activity             = u.tActivity.Name,
                Source               = u.tUserSourceService.tSourceService.ServiceName
            }).OrderBy(u => u.StartDateTime).
                             ToListAsync();


            return(Ok(activities));
        }
        public async Task <IHttpActionResult> GetUserLast5DietVitals(HealthGoalModel healthGoalModel)
        {
            //db.tUserDiets
            //  .Include(d=>d.tXrefUserDietNutrients)
            //  .OrderBy(u => u.EnteredDateTime)
            //  .Where(u => u.UserID == healthGoalModel.UserId && u.EnteredDateTime >= healthGoalModel.StartDate &&
            //              u.EnteredDateTime <= healthGoalModel.EndDate).ToList();
            var userModel = await db.tUserDiets
                            .Join(db.tXrefUserDietNutrients, d => d.ID, x => x.UserDietID, (d, x) => new { d, x })
                            .Where(w => w.x.NutrientID == 170 &&
                                   w.d.UserID == healthGoalModel.UserId &&
                                   w.d.SystemStatusID == 1)
                            .GroupBy(y => new { y.d.EnteredDateTime })
                            .Select(g => new UserDietModel {
                EnteredDateTime = g.Key.EnteredDateTime, Value = g.Sum(a => a.x.Value)
            })
                            .OrderByDescending(u => u.EnteredDateTime)
                            .Take(5)
                            .ToListAsync();

            return(Ok(userModel));
        }
        public async Task <IHttpActionResult> GetUserTrendCholesterol(HealthGoalModel healthGoalModel)
        {
            try
            {
                var idList = new int[] { 568, 570, 572 };

                var result = await
                             db.tUserTestResultComponents.Include(u => u.tUserTestResult)
                             .Include(u => u.tUnitsOfMeasure)
                             .Include(u => u.tXrefUserTestResultComponentsCodes)
                             .Include(u => u.tUserTestResult.tSourceOrganization.tOrganization)
                             .Include(u => u.tUserTestResult.tUserSourceService.tSourceService)
                             .Include(u => u.tUserTestResult.tTestResultStatus)
                             .Where(u => u.tXrefUserTestResultComponentsCodes.Any(x => idList.Contains(x.CodeID)) && u.tUserTestResult.SystemStatusID == 1 &&
                                    u.SystemStatusID == 1 && u.tUserTestResult.UserID == healthGoalModel.UserId && u.tUserTestResult.ResultDateTime >=
                                    healthGoalModel.StartDate && u.tUserTestResult.ResultDateTime <= healthGoalModel.EndDate)
                             .Select(t => new {
                    t.tUserTestResult.UserID,
                    t.tUserTestResult.ResultDateTime,
                    TestResultID        = t.tUserTestResult.ID,
                    tSourceOrganization = t.tUserTestResult.tSourceOrganization.tOrganization,
                    t.tUserTestResult.tTestResultStatus,
                    tUserSourceService = t.tUserTestResult.tUserSourceService.tSourceService,
                    t.Name,
                    t.ObjectID,
                    t.tUserTestResult.SourceObjectID,
                    t.tUserTestResult.SourceOrganizationID,
                    t.tUserTestResult.StatusID,
                    t.tUserTestResult.UserSourceServiceID,
                    t.Value,
                    t.UOMID,
                    t.Comments,
                    t.HighValue,
                    t.LowValue,
                    t.RefRange,
                    t.tUserTestResult.SystemStatusID,
                    t.tUnitsOfMeasure.UnitOfMeasure,
                    TestResultComponentID = t.ID,
                    Count  = db.tUserTestResultComponents.Where(u => u.TestResultID == t.TestResultID).Count(),
                    Note   = db.tUserDerivedNotes.FirstOrDefault(a => a.fkObjectID == t.ObjectID),
                    CodeID = db.tXrefUserTestResultComponentsCodes.FirstOrDefault(c => c.UserTestResultComponentID == t.ID).CodeID
                }).OrderBy(u => u.ResultDateTime)
                             .ToListAsync();


                var retVal = new List <UserBloodGlucose>();

                foreach (var ts in result)
                {
                    var glucoitem = new UserBloodGlucose
                    {
                        NoteID                = ts.Note?.ID ?? 0,
                        TestResultID          = ts.TestResultID,
                        TestResultComponentID = ts.TestResultComponentID,
                        Note                 = ts.Note?.Note ?? "",
                        ResultDateTime       = ts.ResultDateTime,
                        Status               = ts.tTestResultStatus.Status,
                        Source               = ts.SourceOrganizationID != null ? ts.tSourceOrganization.Name : ts.tUserSourceService.ServiceName,
                        UOMID                = ts.UOMID,
                        Value                = ts.Value,
                        Comments             = ts.Comments,
                        UserID               = ts.UserID,
                        SourceObjectID       = ts.SourceObjectID,
                        SourceOrganizationID = ts.SourceOrganizationID,
                        StatusID             = ts.StatusID,
                        UserSourceServiceID  = ts.UserSourceServiceID,
                        SystemStatusID       = ts.SystemStatusID,
                        UnitOfMeasure        = ts.UnitOfMeasure,
                        Count                = ts.Count,
                        HighValue            = ts.HighValue,
                        LowValue             = ts.LowValue,
                        RefRange             = ts.RefRange
                        , CodeID             = ts.CodeID,
                        Name                 = ts.Name
                    };
                    retVal.Add(glucoitem);
                }

                return(Ok(retVal));
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public async Task <IHttpActionResult> GetUserTrendWeight(HealthGoalModel healthGoalModel)
        {
            try
            {
                var result = await
                             db.tUserVitals
                             .Include(u => u.tUnitsOfMeasure)
                             .Include(u => u.tSourceOrganization.tOrganization)
                             .Include(u => u.tUserSourceService.tSourceService)
                             .Where(u => u.SystemStatusID == 1 && u.UserID == healthGoalModel.UserId && u.ResultDateTime >=
                                    healthGoalModel.StartDate && u.ResultDateTime <= healthGoalModel.EndDate && u.Name == "Weight")
                             .Select(t => new {
                    t.UserID,
                    t.ResultDateTime,
                    t.ID,
                    tSourceOrganization = t.tSourceOrganization.tOrganization,
                    tUserSourceService  = t.tUserSourceService.tSourceService,
                    t.Name,
                    t.ObjectID,
                    t.SourceObjectID,
                    t.SourceOrganizationID,
                    t.UserSourceServiceID,
                    t.Value,
                    t.UOMID,
                    t.SystemStatusID,
                    t.tUnitsOfMeasure.UnitOfMeasure,
                    Note = db.tUserDerivedNotes.FirstOrDefault(a => a.fkObjectID == t.ObjectID)
                }).OrderBy(u => u.ResultDateTime)
                             .ToListAsync();


                var retVal = new List <UserVital>();

                foreach (var ts in result)
                {
                    var bpitem = new UserVital
                    {
                        NoteID               = ts.Note?.ID ?? 0,
                        ID                   = ts.ID,
                        Note                 = ts.Note?.Note ?? "",
                        ResultDateTime       = ts.ResultDateTime,
                        Source               = ts.SourceOrganizationID != null ? ts.tSourceOrganization.Name : ts.tUserSourceService.ServiceName,
                        UOMID                = ts.UOMID,
                        Value                = ts.Value,
                        UserID               = ts.UserID,
                        SourceObjectID       = ts.SourceObjectID,
                        SourceOrganizationID = ts.SourceOrganizationID,
                        UserSourceServiceID  = ts.UserSourceServiceID,
                        SystemStatusID       = ts.SystemStatusID,
                        UnitOfMeasure        = ts.UnitOfMeasure,
                        Name                 = ts.Name
                    };
                    retVal.Add(bpitem);
                }

                return(Ok(retVal));
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public async Task <IHttpActionResult> GetUserBodyComposition(HealthGoalModel healthGoalModel)
        {
            try
            {
                var idList       = new string[] { "Weight", "Height" };
                var femaleGender = new string[] { "Female", "Female-to-Male (FTM)" };

                var userVitals = await db.tUserVitals
                                 .Where(u => u.UserID == healthGoalModel.UserId && u.SystemStatusID == 1 && idList.Contains(u.Name))
                                 .ToListAsync();

                var user = await dbUsers.tUsers.Include(u => u.tGender).Where(u => u.ID == healthGoalModel.UserId).FirstOrDefaultAsync();

                int genderMode;
                if (user.tGender != null)
                {
                    genderMode = femaleGender.Contains(user.tGender.Gender) ? 0 : 1;
                }
                else
                {
                    genderMode = 1;
                }

                var weightDetails = userVitals.Where(u => u.Name == "Weight" && u.Value > 0).OrderByDescending(u => u.ResultDateTime).FirstOrDefault();

                double weight = 0, height = 0, bmi = 0, adultBodyFatPercent = 0, bodyFat = 0, leanTissue = 0;
                if (weightDetails != null)
                {
                    switch (weightDetails.UOMID)
                    {
                    case 128:    //kg
                        weight = Convert.ToDouble(weightDetails.Value) * 2.20462;
                        break;

                    case 139:    //lbs
                        weight = Convert.ToDouble(weightDetails.Value);
                        break;
                    }
                }

                var heightDetails = userVitals.Where(u => u.Name == "Height" && u.Value > 0).OrderByDescending(u => u.ResultDateTime).FirstOrDefault();
                if (heightDetails != null)
                {
                    switch (heightDetails.UOMID)
                    {
                    case 251:    //mm
                        height = (Convert.ToDouble(heightDetails.Value) / 25.4);
                        break;

                    case 50:    //cm
                        height = (Convert.ToDouble(heightDetails.Value) / 2.54);
                        break;

                    case 109:    //in
                        height = Convert.ToDouble(heightDetails.Value);
                        break;

                    default:
                        switch (genderMode)
                        {
                        case 0:
                            height = 62;
                            break;

                        case 1:
                            height = 66;
                            break;
                        }
                        break;
                    }
                }
                else
                {
                    switch (genderMode)
                    {
                    case 0:
                        height = 62;
                        break;

                    case 1:
                        height = 66;
                        break;
                    }
                }

                int iAge = 45;
                if (user.DOB != null)
                {
                    iAge = (DateTime.Now.Year - user.DOB.Value.Year);
                }

                if (weight > 0 && height > 0)
                {
                    bmi = Math.Round((weight / (height * height)) * 703, 2);
                    adultBodyFatPercent = Math.Round((1.2 * bmi) + (0.23 * iAge) - (10.8 * genderMode) - 5.4, 2);
                    bodyFat             = Math.Round(((adultBodyFatPercent / 100) * weight), 2);
                    leanTissue          = Math.Round(weight - ((adultBodyFatPercent / 100) * weight), 2);
                }

                var lstBodyComposition = new List <UserBodyComposition>
                {
                    new UserBodyComposition
                    {
                        Source         = "BodyFat",
                        Value          = bodyFat,
                        ResultDateTime = weightDetails?.ResultDateTime.Date
                    },
                    new UserBodyComposition
                    {
                        Source         = "LeanTissue",
                        Value          = leanTissue,
                        ResultDateTime = weightDetails?.ResultDateTime.Date
                    }
                };

                return(Ok(lstBodyComposition));
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public async Task <IHttpActionResult> GetUserTrendDiet(HealthGoalModel healthGoalModel)
        {
            try
            {
                var result = await
                             db.tUserDiets
                             .Include(u => u.tDietCategory)
                             .Include(u => u.tUnitsOfMeasure)
                             .Include(u => u.tUserSourceService.tSourceService)
                             .Where(u => u.SystemStatusID == 1 && u.UserID == healthGoalModel.UserId && u.EnteredDateTime >=
                                    healthGoalModel.StartDate && u.EnteredDateTime <= healthGoalModel.EndDate)
                             .Select(t => new {
                    t.UserID,
                    t.EnteredDateTime,
                    t.ID,
                    tUserSourceService = t.tUserSourceService.tSourceService,
                    t.Name,
                    t.ObjectID,
                    t.SourceObjectID,
                    t.UserSourceServiceID,
                    t.Servings,
                    t.ServingUOMID,
                    t.SystemStatusID,
                    t.tUnitsOfMeasure.UnitOfMeasure,
                    t.DietCategoryID,
                    Category = t.tDietCategory.Name,
                    t.CreateDateTime,
                    Note = db.tUserDerivedNotes.FirstOrDefault(a => a.fkObjectID == t.ObjectID)
                }).OrderBy(u => u.EnteredDateTime)
                             .ToListAsync();


                var retVal = new List <Models.UserData.UserDiet>();

                foreach (var ts in result)
                {
                    var uditem = new Models.UserData.UserDiet
                    {
                        NoteID              = ts.Note?.ID ?? 0,
                        ID                  = ts.ID,
                        Note                = ts.Note?.Note ?? "",
                        EnteredDateTime     = ts.EnteredDateTime,
                        Source              = ts.tUserSourceService != null ?  ts.tUserSourceService.ServiceName : "",
                        ServingUOMID        = ts.ServingUOMID,
                        Servings            = ts.Servings,
                        UserID              = ts.UserID,
                        SourceObjectID      = ts.SourceObjectID,
                        UserSourceServiceID = ts.UserSourceServiceID,
                        SystemStatusID      = ts.SystemStatusID,
                        UnitOfMeasure       = ts.UnitOfMeasure,
                        Name                = ts.Name,
                        DietCategoryID      = ts.DietCategoryID,
                        Category            = ts.Category,
                        CreateDateTime      = ts.CreateDateTime
                    };
                    retVal.Add(uditem);
                }

                return(Ok(retVal));
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public async Task <IHttpActionResult> GetUserTrendBloodGlucose(HealthGoalModel healthGoalModel)
        {
            try
            {
                var result = await
                             db.tUserTestResultComponents.Include(u => u.tUserTestResult)
                             .Include(u => u.tUnitsOfMeasure)
                             .Include(u => u.tXrefUserTestResultComponentsCodes)
                             .Include(u => u.tUserTestResult.tSourceOrganization.tOrganization)
                             .Include(u => u.tUserTestResult.tUserSourceService.tSourceService)
                             .Include(u => u.tUserTestResult.tTestResultStatus)
                             .Where(u => u.tXrefUserTestResultComponentsCodes.Any(x => x.CodeID == 604) && u.tUserTestResult.SystemStatusID == 1 &&
                                    u.SystemStatusID == 1 && u.tUserTestResult.UserID == healthGoalModel.UserId && u.tUserTestResult.ResultDateTime >=
                                    healthGoalModel.StartDate && u.tUserTestResult.ResultDateTime <= healthGoalModel.EndDate)
                             .Select(t => new {
                    t.tUserTestResult.UserID,
                    t.tUserTestResult.ResultDateTime,
                    TestResultID        = t.tUserTestResult.ID,
                    tSourceOrganization = t.tUserTestResult.tSourceOrganization.tOrganization,
                    t.tUserTestResult.tTestResultStatus,
                    tUserSourceService = t.tUserTestResult.tUserSourceService.tSourceService,
                    t.Name,
                    t.ObjectID,
                    t.tUserTestResult.SourceObjectID,
                    t.tUserTestResult.SourceOrganizationID,
                    t.tUserTestResult.StatusID,
                    t.tUserTestResult.UserSourceServiceID,
                    t.Value,
                    t.UOMID,
                    t.Comments,
                    t.tUserTestResult.SystemStatusID,
                    t.tUnitsOfMeasure.UnitOfMeasure,
                    TestResultComponentID = t.ID,
                    Count = db.tUserTestResultComponents.Where(u => u.TestResultID == t.TestResultID).Count(),
                    Note  = db.tUserDerivedNotes.FirstOrDefault(a => a.fkObjectID == t.ObjectID)
                }).OrderBy(u => u.ResultDateTime)
                             .ToListAsync();


                // db.tUserTestResults
                //.Include(u => u.tSourceOrganization.tOrganization)
                //.Include(u => u.tUserSourceService.tSourceService)
                //.Include(u => u.tTestResultStatus)
                //.Include(u => u.tUserTestResultComponents)
                //.Include(u => u.tXrefUserTestResultsCodes)
                //.Where(u => u.tXrefUserTestResultsCodes.Any(x => x.CodeID == 604))
                //.SelectMany(u => u.tUserTestResultComponents.SelectMany(y=> y.tXrefUserTestResultComponentsCodes).Select(t => new
                //{
                //    u.UserID,
                //    u.ResultDateTime,
                //    TestResultID = u.ID,
                //    tSourceOrganization=  u.tSourceOrganization.tOrganization,
                //    u.tTestResultStatus,
                //    tUserSourceService =  u.tUserSourceService.tSourceService,
                //    u.Name,
                //    u.ObjectID,
                //    u.SourceObjectID,
                //    u.SourceOrganizationID,
                //    u.StatusID,
                //    u.UserSourceServiceID,
                //   t.tUserTestResultComponent.Value,
                //    t.tUserTestResultComponent.UOMID,
                //    t.tUserTestResultComponent.Comments,
                //    u.SystemStatusID,
                //    t.tUserTestResultComponent.tUnitsOfMeasure.UnitOfMeasure,
                //    TestResultComponentID = t.tUserTestResultComponent.ID,

                //}))
                //.ToListAsync();

                var retVal = new List <UserBloodGlucose>();

                foreach (var ts in result)
                {
                    var glucoitem = new UserBloodGlucose
                    {
                        NoteID                = ts.Note?.ID ?? 0,
                        TestResultID          = ts.TestResultID,
                        TestResultComponentID = ts.TestResultComponentID,
                        Note                 = ts.Note?.Note ?? "",
                        ResultDateTime       = ts.ResultDateTime,
                        Status               = ts.tTestResultStatus.Status,
                        Source               = ts.SourceOrganizationID != null ? ts.tSourceOrganization.Name : ts.tUserSourceService.ServiceName,
                        UOMID                = ts.UOMID,
                        Value                = ts.Value,
                        Comments             = ts.Comments,
                        UserID               = ts.UserID,
                        SourceObjectID       = ts.SourceObjectID,
                        SourceOrganizationID = ts.SourceOrganizationID,
                        StatusID             = ts.StatusID,
                        UserSourceServiceID  = ts.UserSourceServiceID,
                        SystemStatusID       = ts.SystemStatusID,
                        UnitOfMeasure        = ts.UnitOfMeasure,
                        Count                = ts.Count
                    };
                    retVal.Add(glucoitem);
                }

                return(Ok(retVal));
            }
            catch (Exception ex)
            {
                throw;
            }
        }