public ActionResult cuentaDeRequerimientos(FechasModel proyecto)
        {
            TempData.Keep();
            string cedCliente = TempData["clientId"] as string;
            int?   cedula     = Convert.ToInt32(cedCliente);

            if (proyecto.codigoProy == 0)
            {
                TempData["requirementsData"] = db.requerimientosFinalizadosEncurso(cedula, null).ToList();
            }
            else
            {
                TempData["requirementsData"] = db.requerimientosFinalizadosEncurso(cedula, proyecto.codigoProy).ToList();
            }
            return(View());
        }
        public ActionResult ProjectRequirementsState(FechasModel proyecto)
        {
            TempData.Keep();
            string cedCliente = TempData["clientId"] as string;
            int?   cedula     = Convert.ToInt32(cedCliente);

            if (proyecto.codigoProy == 0)
            {
                TempData["requirementsInfo"] = db.requerimientosDeUnProyecto(cedula, null).ToList();
            }
            else
            {
                TempData["requirementsInfo"] = db.requerimientosDeUnProyecto(cedula, proyecto.codigoProy).ToList();
            }
            return(View());
        }
        public ActionResult EmployeesDates(FechasModel fechas)
        {
            if (fechas.Fecha1 == null || fechas.Fecha2 == null || fechas.Fecha2 < fechas.Fecha1)
            {
                TempData.Keep();
                return(View());
            }
            else
            {
                TempData.Keep();
                var empl  = db.DiasDisponiblesEmpleado(fechas.Fecha1, fechas.Fecha2).ToList();          //lista principal, sin fechas
                int size  = empl.Count();
                var empl2 = db.PeriodosDeDisponibilidadEmpleado(fechas.Fecha1, fechas.Fecha2).ToList(); //lista con las fechas
                int size2 = empl2.Count();

                //variables temporales
                //bool created = false;
                bool        done;
                int         counter = 0;
                int         counter2;
                int         counter3;
                int         times = 0;
                int         counter4;
                string      cedula = "000000000";
                DateTime [] periodos;
                if (size2 > 0)
                {
                    periodos = new DateTime[size2 * 2]; //para maximo *2
                }
                else
                {
                    periodos = new DateTime[2]; //para maximo *2
                }
                TempData["nulo"] = periodos[0];

                //primer ciclo, controla por cedula
                while (counter < size2)
                {
                    if (empl2[counter].cedulaPK != cedula) //se guarda el periodo la primera vez que se ve la cedula
                    {
                        cedula      = empl2[counter].cedulaPK;
                        periodos[0] = empl2[counter].Fecha1.Value;
                        periodos[1] = empl2[counter].Fecha2.Value;
                        times       = 2;
                    }
                    else //
                    {
                        counter2 = 0;
                        while (counter2 < times)                                                                                          //se recorre por cada par de fechas actualmente en periodos
                        {
                            if (empl2[counter].Fecha1.Value > periodos[counter2] && empl2[counter].Fecha2.Value < periodos[counter2 + 1]) //inicia y termina durante
                            {
                                counter4 = times;
                                while (counter4 > counter2) //movemos todos los valores dos lugares a la derecha
                                {
                                    periodos[counter4 + 2] = periodos[counter4];
                                    counter4--;
                                }
                                periodos[counter2 + 1] = empl2[counter].Fecha1.Value;
                                periodos[counter2 + 2] = empl2[counter].Fecha2.Value;
                                times += 2;
                            }
                            else if (empl2[counter].Fecha1.Value <= periodos[counter2] && empl2[counter].Fecha2.Value > periodos[counter2] && empl2[counter].Fecha2.Value < periodos[counter2 + 1]) //inicia antes, termina durante
                            {
                                periodos[counter2] = empl2[counter].Fecha2.Value;
                            }
                            else if (empl2[counter].Fecha1.Value <= periodos[counter2] && empl2[counter].Fecha2.Value >= periodos[counter2 + 1])  //inicia antes, termina despues
                            {
                                counter4 = counter2;
                                while (counter4 < times) //movemos todos los valores dos a la izquierda
                                {
                                    periodos[counter4] = periodos[counter4 + 2];
                                    counter4++;
                                }
                                times -= 2;
                            }
                            else if (empl2[counter].Fecha1.Value > periodos[counter2] && empl2[counter].Fecha1.Value < periodos[counter2 + 1] && empl2[counter].Fecha2.Value >= periodos[counter2 + 1]) //inicia durante, termina despues
                            {
                                periodos[counter2 + 1] = empl2[counter].Fecha1.Value;
                            }
                            counter2 += 2;
                        }
                    }
                    if ((counter + 1) == size2 || empl2[counter + 1].cedulaPK != cedula) // es el ultimo valor para este empleado y se guarda
                    {
                        done     = false;
                        counter3 = 0;
                        while (done == false && counter3 < size)
                        {
                            if (empl[counter3].cedulaPK == cedula)
                            {
                                empl[counter3].fechas = new DateTime[size2 * 2];
                                periodos.CopyTo(empl[counter3].fechas, 0);
                                done = true;
                            }
                            counter3++;
                        }
                        //se limpia el array periodos
                        for (int i = 0; i < times; i++)
                        {
                            periodos[i] = periodos[size2 * 2 - 1];
                        }
                    }
                    counter++;
                }
                TempData["empl"]   = empl;
                TempData["fechas"] = fechas;
                return(View());
            }
        }
 public ActionResult KnowledgesReport(FechasModel fechas)
 {
     TempData.Keep();
     TempData["reporteConocimientos"] = db.ReporteConocimientos(fechas.conocimiento).ToList();
     return(View());
 }
 public ActionResult requerimientosDesarrollador(FechasModel modelo)
 {
     TempData.Keep(); // Para mantener los datos
     TempData["req"] = new empleadosController().GetEmployeeByProyect(modelo.codigoProy);
     return(View());  // Regresar a la vista
 }