示例#1
0
        public IEnumerable <TODisponible> GetDisponiblesParametroDisp(int cla_cont, int pro_cont, int year, int month, int day, string esp_mdit, float ter_codi, string Op_Disp = "")
        {
            DateTime fechainicial = DateTime.Now;
            DateTime fechaFinal   = DateTime.Now;

            //disponibilidad ya sea por tercero o espacio
            daoAgenda.GetFechaMinMaxDiponibilidad(emp_codi, year, month, day, cla_cont, out fechainicial, out fechaFinal, pro_cont, esp_mdit, ter_codi, Op_Disp);
            var producto = daoProducto.GetProducto(emp_codi, pro_cont);

            //int CantEspacios = daoAgenda.CantidadHorarios(emp_codi, cla_cont, year, month, day, ter_codi, producto.Pro_cont, esp_mdit);
            if (fechainicial == DateTime.MinValue)
            {
                fechainicial = new DateTime(year, month, day, 6, 0, 0);
                fechaFinal   = new DateTime(year, month, day);
            }

            List <TODisponible> listItems = new List <TODisponible>();

            for (DateTime i = fechainicial; i < fechaFinal && producto != null && producto.Pro_dmin > 0; i = i.AddMinutes(producto.Pro_dmin))
            {
                TODisponible item = new TODisponible();
                item.FechaInicio = i;
                item.FechaFin    = i.AddMinutes(producto.Pro_dmin);
                if (fechaFinal < item.FechaFin)
                {
                    break;
                }
                listItems.Add(item);
            }

            //listado de los intervalos que se encuentran no disponibles u ocupados
            //List<TOOcupado> intervalosNoDisponiblesOcupados = daoAgenda.GetOcupadosDipo(emp_codi, cla_cont, year, month, day, esp_mdit, -1, pro_cont, ter_codi);

            int CantEspacios = daoAgenda.CantidadHorarios(emp_codi, cla_cont, fechainicial.Year, fechainicial.Month, fechainicial.Day, ter_codi, pro_cont, esp_mdit, Op_Disp);
            List <TOOcupado> intervalosNoDisponiblesOcupados = daoAgenda.GetOcupadosDipo(emp_codi, cla_cont, fechainicial.Year, fechainicial.Month, fechainicial.Day, esp_mdit, -1, pro_cont, Op_Disp, ter_codi);

            DateTime ahora = DateTime.Now;

            listItems.ForEach(itemHora =>
            {
                DTOEntities.TSalida salida = ValidarDisponibilidadHorario(itemHora.FechaInicio,
                                                                          itemHora.FechaFin, cla_cont, ter_codi, pro_cont, esp_mdit, Op_Disp, CantEspacios, intervalosNoDisponiblesOcupados);
                if (salida.retorno == 0)
                {
                    itemHora.Estado = 1;
                }
                else
                {
                    itemHora.Estado = 0;
                }
            });
            if (listItems != null)
            {
                return(listItems.Where(o => o.Estado == 0).ToList());
            }
            return(null);
        }
示例#2
0
        public IEnumerable <TODisponible> GetDisponibles(int esp_cont, int pro_cont, int year, int month, int day)
        {
            var      ocupados = daoAgenda.GetOcupados(emp_codi, esp_cont, year, month, day);
            DateTime fechaMin = new DateTime();
            DateTime fechaMax = new DateTime();
            DateTime ahora    = DateTime.Now;

            daoAgenda.GetFechaMinMax(emp_codi, year, month, day, esp_cont, out fechaMin, out fechaMax);
            var producto = daoProducto.GetProducto(emp_codi, pro_cont);

            if (fechaMin == DateTime.MinValue)
            {
                fechaMin = new DateTime(year, month, day);
                //fechaMax = new DateTime(year, month, day, 23, 59, 59);
                fechaMax = new DateTime(year, month, day);
            }

            List <TODisponible> listItems = new List <TODisponible>();

            for (DateTime i = fechaMin; i < fechaMax && producto != null && producto.Pro_dmin > 0; i = i.AddMinutes(producto.Pro_dmin))
            {
                TODisponible item = new TODisponible();
                item.FechaInicio = i;
                item.FechaFin    = i.AddMinutes(producto.Pro_dmin);

                if (item.FechaInicio > ahora)
                {
                    listItems.Add(item);
                }
            }

            //cruzar lista horario del espacio con las reservas de este
            //return (start1 < end2 && start2 < end1) ||
            //(start1 == start2 && (start1 == end1 || start2 == end2));
            foreach (var itemHorario in listItems)
            {
                foreach (var itemOcupado in ocupados)
                {
                    if ((itemHorario.FechaInicio < itemOcupado.Res_fina && itemOcupado.Res_fini <= itemHorario.FechaFin) ||
                        (itemHorario.FechaInicio == itemOcupado.Res_fini && itemHorario.FechaFin == itemOcupado.Res_fina))
                    {
                        itemHorario.Estado = 1;
                        break;
                    }
                    else
                    {
                        itemHorario.Estado = 0;
                    }
                }
            }
            var ret = listItems.Where(x => x.Estado == 0);

            return(ret);
        }
示例#3
0
        public TOTransaction <List <TODisponible> > GetDisponiblesParametroViewMonth(int cla_cont, int pro_cont, int year, int month, string esp_mdit, float ter_codi, string Op_Disp = "")
        {
            List <TODisponible> result = new List <TODisponible>();

            try
            {
                DateTime CurrentDate = DateTime.Now;
                int      MinDay      = 1;
                if (CurrentDate.Month == month && CurrentDate.Year == year)
                {
                    MinDay = CurrentDate.Day;
                }
                int DaysInMonth = DateTime.DaysInMonth(year, month);
                for (int CurrentDay = MinDay; CurrentDay <= DaysInMonth; CurrentDay++)
                {
                    TODayDisponiblity DayView      = new TODayDisponiblity();
                    DateTime          fechainicial = DateTime.Now;
                    DateTime          fechaFinal   = DateTime.Now;
                    //disponibilidad ya sea por tercero o espacio
                    daoAgenda.GetFechaMinMaxDiponibilidad(emp_codi, year, month, CurrentDay, cla_cont, out fechainicial, out fechaFinal, pro_cont, esp_mdit, ter_codi, Op_Disp);
                    var producto = daoProducto.GetProducto(emp_codi, pro_cont);

                    //int CantEspacios = daoAgenda.CantidadHorarios(emp_codi, cla_cont, year, month, day, ter_codi, producto.Pro_cont, esp_mdit);
                    if (fechainicial == DateTime.MinValue)
                    {
                        fechainicial = new DateTime(year, month, CurrentDay, 6, 0, 0);
                        fechaFinal   = new DateTime(year, month, CurrentDay);
                    }

                    List <TODisponible> listItems = new List <TODisponible>();
                    for (DateTime i = fechainicial; i < fechaFinal && producto != null && producto.Pro_dmin > 0; i = i.AddMinutes(producto.Pro_dmin))
                    {
                        TODisponible item = new TODisponible();
                        item.FechaInicio = i;
                        item.FechaFin    = i.AddMinutes(producto.Pro_dmin);
                        if (fechaFinal < item.FechaFin)
                        {
                            break;
                        }
                        listItems.Add(item);
                    }

                    //listado de los intervalos que se encuentran no disponibles u ocupados
                    //List<TOOcupado> intervalosNoDisponiblesOcupados = daoAgenda.GetOcupadosDipo(emp_codi, cla_cont, year, month, day, esp_mdit, -1, pro_cont, ter_codi);

                    int CantEspacios = daoAgenda.CantidadHorarios(emp_codi, cla_cont, fechainicial.Year, fechainicial.Month, fechainicial.Day, ter_codi, pro_cont, esp_mdit, Op_Disp);
                    List <TOOcupado> intervalosNoDisponiblesOcupados = daoAgenda.GetOcupadosDipo(emp_codi, cla_cont, fechainicial.Year, fechainicial.Month, fechainicial.Day, esp_mdit, -1, pro_cont, Op_Disp, ter_codi);

                    DateTime ahora = DateTime.Now;

                    listItems.ForEach(itemHora =>
                    {
                        DTOEntities.TSalida salida = ValidarDisponibilidadHorario(itemHora.FechaInicio,
                                                                                  itemHora.FechaFin, cla_cont, ter_codi, pro_cont, esp_mdit, Op_Disp, CantEspacios, intervalosNoDisponiblesOcupados);
                        if (salida.retorno == 0)
                        {
                            itemHora.Estado = 1;
                        }
                        else
                        {
                            itemHora.Estado = 0;
                        }
                    });
                    if (listItems != null && listItems.Any())
                    {
                        result.AddRange(listItems.Where(o => o.Estado == 0).ToList());
                    }
                }

                return(new TOTransaction <List <TODisponible> >()
                {
                    ObjTransaction = result, Retorno = 0, TxtError = ""
                });
            }

            catch (Exception ex)
            {
                return(new TOTransaction <List <TODisponible> >()
                {
                    ObjTransaction = null, Retorno = 1, TxtError = ex.Message
                });
            }
        }