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); }
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); }
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 }); } }