jueves, 9 de julio de 2009

Refactoring


A veces nos preguntamos, ¿realmente es necesario el refactoring?

Vean el siguiente código de UNA ÚNICA FUNCIÓN escrito por un señor Ingeniero Superior en Informática...










private void CrearCalendarioCitas_Old()
{
moCitasAll = new OCitas();

moCitasAll.CITAS.Columns.Add("PACIENTE");
moCitasAll.CITAS.Columns.Add("TITULAR");
moCitasAll.CITAS.Columns.Add("TELEFONOS");
moCitasAll.CITAS.Columns.Add("1ª VISITA", typeof(bool));
moCitasAll.CITAS.Columns.Add("FECHA");
moCitasAll.CITAS.Columns.Add("HORA");
moCitasAll.CITAS.Columns.Add("H. Llegada");
moCitasAll.CITAS.Columns.Add("H. Entrada");
moCitasAll.CITAS.Columns.Add("H. Salida");

//Ponemos el calendario con id=1 en caso de que no haya ningún calendario seleccionado
if ((moCalendarioSala == null) && (moCalendarioEspecialista == null))
{
moCalendarioSala = new OCalendarios();
switch (NETCON)
{
case Constants.NETCON_INTERNET:
CopyDataSet(mWSCalend.GetCalendariosObject("ID=1", WSKEY, ref moConnectedUser), moCalendarioSala);
break;
case Constants.NETCON_INTRANET:
mFCalendarios = new FCalendarios(moFACConnectedUser);
mFCalendarios.GetObject("ID=1");
moCalendarioSala = mFCalendarios.ContainerObject;
break;
}
//si el calendario esta vacio lo pone a nulo para evitar fallos
if (moCalendarioSala.CALENDAR.Count == 0)
moCalendarioSala = null;
}

if (moCalendarioSala != null)
Intervalo_Minutos = Convert.ToInt16(moCalendarioSala.CALENDAR[0].CAL_INTERVALO);
if (moCalendarioEspecialista != null)
Intervalo_Minutos = Convert.ToInt16(moCalendarioEspecialista.CALENDAR[0].CAL_INTERVALO);

// Create hourly rows
DateTime oDateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0);
int dias = Convert.ToInt16(dtpseleccionfin.Value.Date.Subtract(dtpseleccioninicio.Value.Date).TotalDays) + 1;
for (int dia = 0; dia < dias; dia++)
{
DateTime Fecha = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, oDateTime.Hour, oDateTime.Minute, oDateTime.Second);
//Creamos las filas dependiendo de los calendarios cargados
if (moCalendarioEspecialista != null && moCalendarioSala != null)
{
DataRow[] oRowEsp = moCalendarioEspecialista.CALENDAR_WEEK.Select("CLW_DAY=" + (int)Fecha.DayOfWeek);
DataRow[] oRowSal = moCalendarioSala.CALENDAR_WEEK.Select("CLW_DAY=" + (int)Fecha.DayOfWeek);

//Dia adicional
DataRow[] DiaAdicionalEsp = moCalendarioEspecialista.CALENDAR_DAY_IN.Select("CLN_FECHA=" + GetTimestamp(Fecha));
DataRow[] DiaAdicionalSal = moCalendarioSala.CALENDAR_DAY_IN.Select("CLN_FECHA=" + GetTimestamp(Fecha));

//Dia Festivo
DataRow[] DiaFestivoEsp = moCalendarioEspecialista.CALENDAR_DAY.Select("CLD_FECHA=" + GetTimestamp(Fecha));
DataRow[] DiaFestivoSal = moCalendarioSala.CALENDAR_DAY.Select("CLD_FECHA=" + GetTimestamp(Fecha));

int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
int f = 0;

DateTime FInicio, FFin, FInicioEsp, FFinEsp, FInicioSal, FFinSal, FInicioAdicionalEsp, FFinAdicionalEsp, FInicioAdicionalSal, FFinAdicionalSal, FInicioFestivoEsp, FFinFestivoEsp, FInicioFestivoSal, FFinFestivoSal;
FInicio = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59, 59);
FFin = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59, 59);

while (((b < oRowSal.Length) || (d < DiaAdicionalSal.Length)) && ((a < oRowEsp.Length) || (c < DiaAdicionalEsp.Length)))
{
if (a < oRowEsp.Length)
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
if (b < oRowSal.Length)
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
if (c < DiaAdicionalEsp.Length)
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
if (d < DiaAdicionalSal.Length)
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
if (e < DiaFestivoEsp.Length)
{
FInicioFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
if (f < DiaFestivoSal.Length)
{
FInicioFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}

if (((a < oRowEsp.Length) && ((((FInicioEsp >= FInicioSal) && (b < oRowSal.Length)) || (b >= oRowSal.Length)) && (((FInicioEsp >= FInicioAdicionalEsp) && (c < DiaAdicionalEsp.Length)) || (c >= DiaAdicionalEsp.Length)) && (((FInicioEsp >= FInicioAdicionalSal) && (d < DiaAdicionalSal.Length)) || (d >= DiaAdicionalSal.Length)))) || ((d >= DiaAdicionalSal.Length) && (b >= oRowSal.Length)))
{
while ((FInicioEsp >= FFinEsp) && (a < oRowEsp.Length))
{
a++;
if (a < oRowEsp.Length)
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioEsp >= FFinSal) && (b < oRowSal.Length))
{
b++;
if (b < oRowSal.Length)
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioEsp >= FFinAdicionalEsp) && (c < DiaAdicionalEsp.Length))
{
c++;
if (c < DiaAdicionalEsp.Length)
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioEsp >= FFinAdicionalSal) && (d < DiaAdicionalSal.Length))
{
d++;
if (d < DiaAdicionalSal.Length)
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}

FInicio = FInicioEsp;

if ((FFinEsp <= FFinSal) && (FFinEsp <= FFinAdicionalEsp) && (FFinEsp <= FFinAdicionalSal))
{
FFin = FFinEsp;
a++;
}
else if ((FFinSal <= FFinAdicionalEsp) && (FFinSal <= FFinAdicionalSal))
{
FFin = FFinSal;
b++;
}
else if (FFinAdicionalEsp <= FFinAdicionalSal)
{
FFin = FFinAdicionalEsp;
c++;
}
else
{
FFin = FFinAdicionalSal;
d++;
}
}
else if (((b < oRowSal.Length) && ((((FInicioSal >= FInicioAdicionalEsp) && (c < DiaAdicionalEsp.Length)) || (c >= DiaAdicionalEsp.Length)) && (((FInicioSal >= FInicioAdicionalSal) && (d < DiaAdicionalSal.Length)) || (d >= DiaAdicionalSal.Length)))) || ((c >= DiaAdicionalEsp.Length) && (a >= oRowEsp.Length)))
{
while ((FInicioSal >= FFinEsp) && (a < oRowEsp.Length))
{
a++;
if (a < oRowEsp.Length)
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioSal >= FFinSal) && (b < oRowSal.Length))
{
b++;
if (b < oRowSal.Length)
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioSal >= FFinAdicionalEsp) && (c < DiaAdicionalEsp.Length))
{
c++;
if (c < DiaAdicionalEsp.Length)
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioSal >= FFinAdicionalSal) && (d < DiaAdicionalSal.Length))
{
d++;
if (d < DiaAdicionalSal.Length)
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}

FInicio = FInicioSal;

if ((FFinEsp <= FFinSal) && (FFinEsp <= FFinAdicionalEsp) && (FFinEsp <= FFinAdicionalSal))
{
FFin = FFinEsp;
a++;
}
else if ((FFinSal <= FFinAdicionalEsp) && (FFinSal <= FFinAdicionalSal))
{
FFin = FFinSal;
b++;
}
else if (FFinAdicionalEsp <= FFinAdicionalSal)
{
FFin = FFinAdicionalEsp;
c++;
}
else
{
FFin = FFinAdicionalSal;
d++;
}
}
else if (((c < DiaAdicionalEsp.Length) && (((FInicioAdicionalEsp >= FInicioAdicionalSal) && (d < DiaAdicionalSal.Length)) || (d >= DiaAdicionalSal.Length))) || ((d >= DiaAdicionalSal.Length) && (b >= oRowSal.Length)))
{
while ((FInicioAdicionalEsp >= FFinEsp) && (a < oRowEsp.Length))
{
a++;
if (a < oRowEsp.Length)
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioAdicionalEsp >= FFinSal) && (b < oRowSal.Length))
{
b++;
if (b < oRowSal.Length)
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioAdicionalEsp >= FFinAdicionalEsp) && (c < DiaAdicionalEsp.Length))
{
c++;
if (c < DiaAdicionalEsp.Length)
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioAdicionalEsp >= FFinAdicionalSal) && (d < DiaAdicionalSal.Length))
{
d++;
if (d < DiaAdicionalSal.Length)
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}

FInicio = FInicioAdicionalEsp;

if ((FFinEsp <= FFinSal) && (FFinEsp <= FFinAdicionalEsp) && (FFinEsp <= FFinAdicionalSal))
{
FFin = FFinEsp;
a++;
}
else if ((FFinSal <= FFinAdicionalEsp) && (FFinSal <= FFinAdicionalSal))
{
FFin = FFinSal;
b++;
}
else if (FFinAdicionalEsp <= FFinAdicionalSal)
{
FFin = FFinAdicionalEsp;
c++;
}
else
{
FFin = FFinAdicionalSal;
d++;
}
}
else if (((a >= oRowEsp.Length) && (c >= DiaAdicionalEsp.Length)) || (d < DiaAdicionalSal.Length))
{
while ((FInicioAdicionalSal >= FFinEsp) && (a < oRowEsp.Length))
{
a++;
if (a < oRowEsp.Length)
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioAdicionalSal >= FFinSal) && (b < oRowSal.Length))
{
b++;
if (b < oRowSal.Length)
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioAdicionalSal >= FFinAdicionalEsp) && (c < DiaAdicionalEsp.Length))
{
c++;
if (c < DiaAdicionalEsp.Length)
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioAdicionalSal >= FFinAdicionalSal) && (d < DiaAdicionalSal.Length))
{
d++;
if (d < DiaAdicionalSal.Length)
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}

FInicio = FInicioAdicionalSal;

if ((FFinEsp <= FFinSal) && (FFinEsp <= FFinAdicionalEsp) && (FFinEsp <= FFinAdicionalSal))
{
FFin = FFinEsp;
a++;
}
else if ((FFinSal <= FFinAdicionalEsp) && (FFinSal <= FFinAdicionalSal))
{
FFin = FFinSal;
b++;
}
else if (FFinAdicionalEsp <= FFinAdicionalSal)
{
FFin = FFinAdicionalEsp;
c++;
}
else
{
FFin = FFinAdicionalSal;
d++;
}
}
while (FInicio < FFin)
{
while ((FInicio >= FFinFestivoEsp) && (e < DiaFestivoEsp.Length))
{
e++;
if (e < DiaFestivoEsp.Length)
{
FInicioFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicio >= FFinFestivoSal) && (f < DiaFestivoSal.Length))
{
f++;
if (f < DiaFestivoSal.Length)
{
FInicioFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}

if ((FInicio <= FInicioFestivoEsp) && (FInicio <= FInicioFestivoSal))
{
if ((FFin >= FInicioFestivoEsp) || (FFin >= FInicioFestivoSal))
{
if (FInicioFestivoEsp <= FInicioFestivoSal)
{
while (FInicio < FInicioFestivoEsp)
{
moCitasAll.CITAS.Rows.Add(CrearRow(FInicio));
FInicio = ComprobarCita(FInicio);
}
FInicio = FFinFestivoEsp;
}
else
{
while (FInicio < FInicioFestivoSal)
{
moCitasAll.CITAS.Rows.Add(CrearRow(FInicio));
FInicio = ComprobarCita(FInicio);
}
FInicio = FFinFestivoSal;
}
}
else
{
while (FInicio < FFin)
{
moCitasAll.CITAS.Rows.Add(CrearRow(FInicio));
FInicio = ComprobarCita(FInicio);
}
}
}
if (FFinFestivoEsp <= FFinFestivoSal)
{
FInicio = FFinFestivoEsp;
e++;
}
else
{
FInicio = FFinFestivoSal;
f++;
}
}
}
}
else if (moCalendarioEspecialista != null)
{
DataRow[] oRowEsp = moCalendarioEspecialista.CALENDAR_WEEK.Select("CLW_DAY=" + (int)Fecha.DayOfWeek);

//Dia adicional
DataRow[] DiaAdicionalEsp = moCalendarioEspecialista.CALENDAR_DAY_IN.Select("CLN_FECHA=" + GetTimestamp(Fecha));

//Dia Festivo
DataRow[] DiaFestivoEsp = moCalendarioEspecialista.CALENDAR_DAY.Select("CLD_FECHA=" + GetTimestamp(Fecha));

int a = 0;
int c = 0;
int e = 0;

DateTime FInicio, FFin, FInicioEsp, FFinEsp, FInicioAdicionalEsp, FFinAdicionalEsp, FInicioFestivoEsp, FFinFestivoEsp;
FInicio = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59, 59);
FFin = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59, 59);

while ((a < oRowEsp.Length) || (c < DiaAdicionalEsp.Length))
{
if (a < oRowEsp.Length)
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
if (c < DiaAdicionalEsp.Length)
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
if (e < DiaFestivoEsp.Length)
{
FInicioFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}

if (((FInicioEsp >= FInicioAdicionalEsp) && (c < DiaAdicionalEsp.Length) && (a < oRowEsp.Length)) || (c >= DiaAdicionalEsp.Length))
{
while ((FInicioEsp >= FFinEsp) && (a < oRowEsp.Length))
{
a++;
if (a < oRowEsp.Length)
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioEsp >= FFinAdicionalEsp) && (c < DiaAdicionalEsp.Length))
{
c++;
if (c < DiaAdicionalEsp.Length)
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}

FInicio = FInicioEsp;

if (FFinEsp <= FFinAdicionalEsp)
{
FFin = FFinEsp;
a++;
}
else
{
FFin = FFinAdicionalEsp;
c++;
}
}
else if (c < DiaAdicionalEsp.Length)
{
while ((FInicioAdicionalEsp >= FFinEsp) && (a < oRowEsp.Length))
{
a++;
if (a < oRowEsp.Length)
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowEsp[a]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioAdicionalEsp >= FFinAdicionalEsp) && (c < DiaAdicionalEsp.Length))
{
c++;
if (c < DiaAdicionalEsp.Length)
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalEsp[c]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}

FInicio = FInicioAdicionalEsp;

if (FFinEsp <= FFinAdicionalEsp)
{
FFin = FFinEsp;
a++;
}
else
{
FFin = FFinAdicionalEsp;
c++;
}
}
while (FInicio < FFin)
{
while ((FInicio >= FFinFestivoEsp) && (e < DiaFestivoEsp.Length))
{
e++;
if (e < DiaFestivoEsp.Length)
{
FInicioFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoEsp[e]["CLD_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinFestivoEsp = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}

if (FInicio <= FInicioFestivoEsp)
{
if (FFin >= FInicioFestivoEsp)
{
while (FInicio < FInicioFestivoEsp)
{
moCitasAll.CITAS.Rows.Add(CrearRow(FInicio));
FInicio = ComprobarCita(FInicio);
}
FInicio = FFinFestivoEsp;
}
else
{
while (FInicio < FFin)
{
moCitasAll.CITAS.Rows.Add(CrearRow(FInicio));
FInicio = ComprobarCita(FInicio);
}
}
}
FInicio = FFinFestivoEsp;
e++;
}
}
}
else if (moCalendarioSala != null)
{
DataRow[] oRowSal = moCalendarioSala.CALENDAR_WEEK.Select("CLW_DAY=" + (int)Fecha.DayOfWeek);

//Dia adicional
DataRow[] DiaAdicionalSal = moCalendarioSala.CALENDAR_DAY_IN.Select("CLN_FECHA=" + GetTimestamp(Fecha));

//Dia Festivo
DataRow[] DiaFestivoSal = moCalendarioSala.CALENDAR_DAY.Select("CLD_FECHA=" + GetTimestamp(Fecha));

int b = 0;
int d = 0;
int f = 0;

DateTime FInicio, FFin, FInicioSal, FFinSal, FInicioAdicionalSal, FFinAdicionalSal, FInicioFestivoSal, FFinFestivoSal;
FInicio = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59, 59);
FFin = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59, 59);

while ((b < oRowSal.Length) || (d < DiaAdicionalSal.Length))
{
if (b < oRowSal.Length)
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
if (d < DiaAdicionalSal.Length)
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
if (f < DiaFestivoSal.Length)
{
FInicioFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}

if (((FInicioSal >= FInicioAdicionalSal) && (d < DiaAdicionalSal.Length) && (b < oRowSal.Length)) || (d >= DiaAdicionalSal.Length))
{
while ((FInicioSal >= FFinSal) && (b < oRowSal.Length))
{
b++;
if (b < oRowSal.Length)
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioSal >= FFinAdicionalSal) && (d < DiaAdicionalSal.Length))
{
d++;
if (d < DiaAdicionalSal.Length)
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}

FInicio = FInicioSal;

if (FFinSal <= FFinAdicionalSal)
{
FFin = FFinSal;
b++;
}
else
{
FFin = FFinAdicionalSal;
d++;
}
}
else if (d < DiaAdicionalSal.Length)
{
while ((FInicioAdicionalSal >= FFinSal) && (b < oRowSal.Length))
{
b++;
if (b < oRowSal.Length)
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(oRowSal[b]["CLW_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}
while ((FInicioAdicionalSal >= FFinAdicionalSal) && (d < DiaAdicionalSal.Length))
{
d++;
if (d < DiaAdicionalSal.Length)
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaAdicionalSal[d]["CLN_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinAdicionalSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}

FInicio = FInicioAdicionalSal;

if (FFinSal <= FFinAdicionalSal)
{
FFin = FFinSal;
b++;
}
else
{
FFin = FFinAdicionalSal;
d++;
}
}
while (FInicio < FFin)
{
while ((FInicio >= FFinFestivoSal) && (f < DiaFestivoSal.Length))
{
f++;
if (f < DiaFestivoSal.Length)
{
FInicioFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAINICIO"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAINICIO"].ToString().Split(':')[1]), 0);
FFinFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAFIN"].ToString().Split(':')[0]), Convert.ToInt16(DiaFestivoSal[f]["CLD_HORAFIN"].ToString().Split(':')[1]), 0);
}
else
{
FInicioFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
FFinFestivoSal = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 23, 59 , 59);
}
}

if (FInicio <= FInicioFestivoSal)
{
if (FFin >= FInicioFestivoSal)
{
while (FInicio < FInicioFestivoSal)
{
moCitasAll.CITAS.Rows.Add(CrearRow(FInicio));
FInicio = ComprobarCita(FInicio);
}
FInicio = FFinFestivoSal;
}
else
{
while (FInicio < FFin)
{
moCitasAll.CITAS.Rows.Add(CrearRow(FInicio));
FInicio = ComprobarCita(FInicio);
}
}
}
FInicio = FFinFestivoSal;
f++;
}
}
}
else
{
DateTime FInicio = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia).Year, dtpseleccioninicio.Value.Date.AddDays(dia).Month, dtpseleccioninicio.Value.Date.AddDays(dia).Day, 0, 0, 0);
DateTime FFin = new DateTime(dtpseleccioninicio.Value.Date.AddDays(dia + 1).Year, dtpseleccioninicio.Value.Date.AddDays(dia + 1).Month, dtpseleccioninicio.Value.Date.AddDays(dia + 1).Day, 0, 0, 0);
while (FInicio < FFin)
{
moCitasAll.CITAS.Rows.Add(CrearRow(FInicio));
FInicio = ComprobarCita(FInicio);
}

}
}
}

No hay comentarios:

Publicar un comentario