示例#1
0
        public async Task <ActionResult> ScheduleWeekly(int userId)
        {
            var result = new List <ScheduleDayDTO>();

            var sDay = new ScheduleDayDTO(); // { SelectableHours = new List<HoursData>() };

            try
            {
                /*
                 * // Day debe de estar enformato YYYYMMDD
                 * if (day.Length != 8)
                 *  return BadRequest("Formato de Fecha Incorrecto. (YYYYMMDD)");
                 *
                 * var y = Convert.ToInt32(day.Substring(0, 4));
                 * var m = Convert.ToInt32(day.Substring(4, 2));
                 * var d = Convert.ToInt32(day.Substring(6));
                 *
                 * if (y < 2020 || m > 12 || d > 31)
                 *  return BadRequest("Fecha incorrecta.");
                 */
                //var date = new DateTime(y, m, d);

                var memberDb = await this._repo.GetMember(null, null, userId);

                if (memberDb == null)
                {
                    return(BadRequest("Socio no encontrado."));
                }

                if (!memberDb.User.IsActive)
                {
                    return(BadRequest("Socio Bloqueado."));
                }


                //var result = new List<DateTime>();
                var count = 0;
                //var settings = await this._repo.GetGeneralSettings();
                //var scheduleSettings = JsonConvert.DeserializeObject<List<ScheduleDaySettings>>(settings.ScheduledWeek);



                var settings = await this._repo.GetGeneralSettings();

                var scheduleSettings = JsonConvert.DeserializeObject <List <ScheduleDaySettings> >(settings.ScheduledWeek);


                //resutl.Date = date;
                //var ss = scheduleSettings.First(stt => stt.Day.ToLower() == date.ToString("dddd").ToLower());


                do
                {
                    sDay = new ScheduleDayDTO()
                    {
                        Date = DateTime.Today.AddDays(count), SelectableHours = new List <HoursData>()
                    };
                    var ss = scheduleSettings.FirstOrDefault(stt => stt.Day.ToLower() == sDay.Date.ToString("dddd").ToLower());

                    if (ss != null)
                    {
                        var userBookedDay             = this._repo.GetUserBookedDay(memberDb.User.Id, sDay.Date);
                        var scheduledDay              = this._repo.GetBookedDay(sDay.Date);
                        var currentAuthorizedCapacity = await this._repo.GetCurrentAuthorizedCapacity(sDay.Date);


                        foreach (HoursRange hr in ss.RangeDates)
                        {
                            var hd = new HoursData();

                            hd.Range = string.Format("{0} - {1}", hr.StarHour, hr.EndHour);

                            var time       = hr.StarHour.Split(':');
                            var bookedTime = new DateTime(sDay.Date.Year, sDay.Date.Month, sDay.Date.Day, Convert.ToInt32(time[0]), Convert.ToInt32(time[1]), 0);

                            var sdh = scheduledDay.FirstOrDefault(d => d.Schedule == bookedTime);
                            if (sdh != null)
                            {
                                var availability = currentAuthorizedCapacity - sdh.Count;
                                if (availability < settings.NotificationCapacity)
                                {
                                    hd.Capacity = availability.ToString();
                                }

                                if (userBookedDay != null && hr.StarHour == userBookedDay.Schedule.ToString("HH:mm"))
                                {
                                    hd.Booked = true;
                                }
                            }

                            sDay.SelectableHours.Add(hd);
                        }

                        result.Add(sDay);
                    }


                    count++;
                } while (result.Count < 7);



                return(Ok(result));
            }
            catch (Exception ex)
            {
                new FileManagerHelper().RecordLogFile(MethodBase.GetCurrentMethod().ReflectedType.FullName, "UserId: " + userId.ToString(), ex);
                return(BadRequest(this._appSettings.Value.ServerError));
            }
        }
示例#2
0
        public async Task <ActionResult> ScheduleDay(string day)
        {
            var resutl = new ScheduleDayDTO()
            {
                SelectableHours = new List <HoursData>()
            };

            try
            {
                // Day debe de estar enformato YYYYMMDD
                if (day.Length != 8)
                {
                    return(BadRequest("Formato de Fecha Incorrecto. (YYYYMMDD)"));
                }

                var y = Convert.ToInt32(day.Substring(0, 4));
                var m = Convert.ToInt32(day.Substring(4, 2));
                var d = Convert.ToInt32(day.Substring(6));

                if (y < 2020 || m > 12 || d > 31)
                {
                    return(BadRequest("Fecha incorrecta."));
                }

                var date = new DateTime(y, m, d);

                var settings = await this._repo.GetGeneralSettings();

                var scheduleSettings          = JsonConvert.DeserializeObject <List <ScheduleDaySettings> >(settings.ScheduledWeek);
                var scheduledDay              = this._repo.GetBookedDay(date);
                var currentAuthorizedCapacity = await this._repo.GetCurrentAuthorizedCapacity(date);

                resutl.Date = date;
                var ss = scheduleSettings.First(stt => stt.Day.ToLower() == date.ToString("dddd").ToLower());

                foreach (HoursRange hr in ss.RangeDates)
                {
                    var hd = new HoursData();

                    hd.Range = string.Format("{0} - {1}", hr.StarHour, hr.EndHour);

                    var time       = hr.StarHour.Split(':');
                    var bookedTime = new DateTime(date.Year, date.Month, date.Day, Convert.ToInt32(time[0]), Convert.ToInt32(time[1]), 0);

                    var sdh          = scheduledDay.FirstOrDefault(d => d.Schedule == bookedTime);
                    var availability = currentAuthorizedCapacity - (sdh != null ? sdh.Count : 0);
                    var p            = (availability * 100) / currentAuthorizedCapacity;
                    //hd.Capacity = string.Format("{0}%/{1}", p, availability.ToString());
                    hd.Capacity      = currentAuthorizedCapacity.ToString();
                    hd.capPercentaje = p;
                    hd.capPeople     = availability;


                    resutl.SelectableHours.Add(hd);
                }

                return(Ok(resutl));
            }
            catch (Exception ex)
            {
                new FileManagerHelper().RecordLogFile(MethodBase.GetCurrentMethod().ReflectedType.FullName, day, ex);
                return(BadRequest(this._appSettings.Value.ServerError));
            }
        }