Ejemplo n.º 1
0
        public void DeleteRange()
        {
            var target    = DoctorScheduleEN.GetService("");
            int startDate = DateTimeEpoch.ConvertDateToSecondsEpoch(new DateTime(2020, 1, 6));
            int endDate   = startDate + DateTimeEpoch.OneDaySeconds;

            var getTimesP = new DoctorScheduleGetByRangeSP()
            {
                DoctorID       = TestEnums.User.constDoctorID,
                StartUnixEpoch = startDate,
                EndUnixEpoch   = endDate
            };

            if (target.GetCountByRange(getTimesP) == 0)
            {
                PopulateDatabase(startDate, endDate, 15);
                Assert.IsTrue(target.GetCountByRange(getTimesP) > 0, "PopulateDatabase didn't generate any doctor availablility time slot.");
            }

            target.DeleteRange(new DoctorScheduleDeleteRangeSP()
            {
                DoctorID       = TestEnums.User.constDoctorID,
                StartUnixEpoch = startDate,
                EndUnixEpoch   = endDate,
            });

            Assert.IsTrue(target.GetCountByRange(getTimesP) == 0, "Delete range didn't all slots in the specified range. Please make sure that there is no visit associated with slots.");
        }
        ///// <summary>
        ///// Get available times in format for an specific date
        ///// </summary>
        ///// <param name="p">parameters</param>
        ///// <returns></returns>
        //public IList<vDoctorSchedule> GetTimesByRange(DoctorScheduleGetByRangeSP p)
        //{
        //    List<string> columns = new List<string>();
        //    columns.Add(vDoctorSchedule.ColumnNames.DoctorScheduleID);
        //    columns.Add(vDoctorSchedule.ColumnNames.SlotUnixEpoch);
        //    return GetByRangeWithColumns(p, null);
        //}


        private IList <vDoctorSchedule> GetByRangeWithColumns(DoctorScheduleGetByRangeSP p, List <string> columns)
        {
            FilterExpression filter = GetByRangeFilter(p);

            filter.AndMerge(new FilterExpression(vDoctorSchedule.ColumnNames.NumberOfFreePositions, 0, FilterOperatorEnum.GreaterThan));

            SortExpression sort = new SortExpression(vDoctorSchedule.ColumnNames.SlotUnixEpoch);

            if (columns != null)
            {
                if (columns.Contains(vDoctorSchedule.ColumnNames.NumberOfAllowedPatients))
                {
                    columns.Add(vDoctorSchedule.ColumnNames.NumberOfAllowedPatients);
                }
                if (columns.Contains(vDoctorSchedule.ColumnNames.NumberOfRegisteredPatients))
                {
                    columns.Add(vDoctorSchedule.ColumnNames.NumberOfRegisteredPatients);
                }
            }

            GetByFilterParameters getParams = new GetByFilterParameters(filter, sort, 0, 1000, columns, GetSourceTypeEnum.View);

            IList <vDoctorSchedule> list = GetByFilterV(getParams);

            return(list);

            // we filter the list from database to speed up the process.
            //List<vDoctorSchedule> results = new List<vDoctorSchedule>();
            //foreach (var item in list)
            //{
            //    if (item.NumberOfAllowedPatients > item.NumberOfRegisteredPatients)
            //        results.Add(item);
            //}
            //return results;
        }
        private FilterExpression GetByRangeFilter(DoctorScheduleGetByRangeSP p)
        {
            FilterExpression filter = new FilterExpression(vDoctorSchedule.ColumnNames.DoctorID, p.DoctorID);

            filter.AddFilter(new Filter(vDoctorSchedule.ColumnNames.SlotUnixEpoch, p.StartUnixEpoch, FilterOperatorEnum.GreaterThanOrEqualTo));
            filter.AddFilter(new Filter(vDoctorSchedule.ColumnNames.SlotUnixEpoch, p.EndUnixEpoch, FilterOperatorEnum.LessThan));
            filter.AddFilter(new Filter(vDoctorSchedule.ColumnNames.IsDisabled, false));
            filter.AddFilter(new Filter(vDoctorSchedule.ColumnNames.IsWalkingQueue, false));
            return(filter);
        }
 /// <summary>
 /// Returns counts of avaiable slots by range
 /// </summary>
 /// <param name="p"></param>
 /// <returns></returns>
 public long GetCountByRange(DoctorScheduleGetByRangeSP p)
 {
     return(GetCount(GetByRangeFilter(p)));
 }
 /// <summary>
 /// Gets available times that are reservable by patients
 /// </summary>
 /// <param name="p">parameters</param>
 /// <returns></returns>
 public IList <vDoctorSchedule> GetByRange(DoctorScheduleGetByRangeSP p)
 {
     return(GetByRangeWithColumns(p, null));
 }