private void GenerarDatosUnidades(SUBPROYECTO sub) { IXLWorksheet _worksheetProyecto = _xlworkbook.Worksheet("Template Dispositivo"); IXLWorksheet _worksheetSoporte = _xlworkbook.Worksheet("Soporte"); IXLWorksheet sheetUnidad = _worksheetProyecto.CopyTo(sub.nombre.Length > 31 - sub.ot.Value.ToString().Length - 3 ? sub.ot + " - " + sub.nombre.Substring(0, 31 - sub.ot.Value.ToString().Length - 3) : sub.ot + " - " + sub.nombre, _worksheetProyecto.Position); sheetUnidad.Unhide(); List <HORA_TIPO_SUBPROYECTO> _HORAS = ControladorSubproyecto.ObtenerHorasTipoUnidad(); //Formato var dataV = sheetUnidad.Range("'+" + sheetUnidad.Name + "'!C9:C68").SetDataValidation(); dataV.List(_worksheetSoporte.Range(_worksheetSoporte.Cell(2, 5), _worksheetSoporte.Cell(_HORAS.Count + 2, 5))); dataV.IgnoreBlanks = true; dataV.InCellDropdown = true; dataV.ShowInputMessage = true; dataV.ShowErrorMessage = true; dataV.ErrorStyle = ClosedXML.Excel.XLErrorStyle.Stop; sheetUnidad.Cell(1, 3).Value = sub.ot; sheetUnidad.Cell(2, 3).Value = sub.ot_cliente; sheetUnidad.Cell(3, 3).Value = sub.horas_orden_compra.HasValue ? sub.horas_orden_compra : null; int fila = 9; List <SUBPROYECTO> subproyectos = ControladorSubproyecto.ObtenerSubproyectosHijos(sub); List <Actividad_proyecto> actividades; foreach (var subproyecto in subproyectos) { sheetUnidad.Cell(fila, 1).Value = subproyecto.id_subproyecto; sheetUnidad.Cell(fila, 2).Value = subproyecto.nombre; HORA_TIPO_SUBPROYECTO hora = ControladorSubproyecto.ObtenerHoraTipoSubproyecto(subproyecto.id_hora_tipo_subproyecto); if (hora != null) { sheetUnidad.Cell(fila, 3).Value = hora.nombre; //sheetUnidad.Cell(fila, 4).Value = hora.horas; } else { sheetUnidad.Cell(fila, 3).Value = ""; sheetUnidad.Cell(fila, 4).Value = ControladorSubproyecto.CalcularHorasOrdenCompra(subproyecto); } sheetUnidad.Cell(fila, 5).Value = decimal.Round((decimal)ControladorSubproyecto.CalcularHorasOrdenCompra(subproyecto), 2); actividades = ControladorSubproyecto.ObtenerActividades(subproyecto); int columna = 0; foreach (var acti in actividades) { switch (ControladorActividades.ObtenerActividad(acti).id_tipo_actividad) { //Concepto case 2: columna = 9; break; case 3: columna = 22; break; case 4: columna = 35; break; default: columna = -1; break; } if (columna > 0) { decimal horaConsumida = (decimal)(Math.Round(ControladorActividades.ObtenerHorasConsumidas(acti, "prod"), 2)); decimal horaAsignada = (decimal)ControladorActividades.ObtenerHorasAsignadasPorOrdenCompra(acti) * (decimal)0.85; USUARIO responsablePro = ControladorActividades.ObtenerResponsableProduccion(acti.id_actividad_proyecto); sheetUnidad.Cell(fila, columna + 1).DataType = XLCellValues.Number; sheetUnidad.Cell(fila, columna + 1).Value = horaConsumida; sheetUnidad.Cell(fila, columna + 2).Value = decimal.Round(horaAsignada, 2); sheetUnidad.Cell(fila, columna + 3).Value = horaAsignada > 0 ? decimal.Round(horaConsumida / horaAsignada * 100, 2) + "%" : "0%"; sheetUnidad.Cell(fila, columna + 4).Value = responsablePro != null ? responsablePro.nombre + " " + responsablePro.apellido : "Sin asignar"; sheetUnidad.Cell(fila, columna + 4).WorksheetColumn().AdjustToContents(); columna += 4; //Control horaConsumida = (decimal)(Math.Round(ControladorActividades.ObtenerHorasConsumidas(acti, "calidad"), 2)); horaAsignada = (decimal)(ControladorActividades.ObtenerHorasAsignadasPorOrdenCompra(acti) * 0.10); responsablePro = ControladorActividades.ObtenerResponsableControln(acti.id_actividad_proyecto); sheetUnidad.Cell(fila, columna + 1).DataType = XLCellValues.Number; sheetUnidad.Cell(fila, columna + 1).Value = horaConsumida; sheetUnidad.Cell(fila, columna + 2).Value = decimal.Round(horaAsignada, 2); sheetUnidad.Cell(fila, columna + 3).Value = horaAsignada > 0 ? decimal.Round(horaConsumida / horaAsignada * 100, 2) + "%" : "0%"; sheetUnidad.Cell(fila, columna + 4).Value = responsablePro != null ? responsablePro.nombre + " " + responsablePro.apellido : "Sin asignar"; sheetUnidad.Cell(fila, columna + 4).WorksheetColumn().AdjustToContents(); columna += 4; //Correccion horaConsumida = (decimal)(Math.Round(ControladorActividades.ObtenerHorasConsumidas(acti, "correc"), 2)); horaAsignada = (decimal)(ControladorActividades.ObtenerHorasAsignadasPorOrdenCompra(acti) * 0.05); responsablePro = ControladorActividades.ObtenerResponsableCorreccion(acti.id_actividad_proyecto); sheetUnidad.Cell(fila, columna + 1).DataType = XLCellValues.Number; sheetUnidad.Cell(fila, columna + 1).Value = horaConsumida; sheetUnidad.Cell(fila, columna + 2).Value = decimal.Round(horaAsignada, 2); sheetUnidad.Cell(fila, columna + 3).Value = horaAsignada > 0 ? decimal.Round(horaConsumida / horaAsignada * 100, 2) + "%" : "0%"; sheetUnidad.Cell(fila, columna + 4).Value = responsablePro != null ? responsablePro.nombre + " " + responsablePro.apellido : "Sin asignar"; sheetUnidad.Cell(fila, columna + 4).WorksheetColumn().AdjustToContents(); } } fila++; } //Otras actividades fila = 9; List <Actividad_proyecto> listaActividades = ControladorSubproyecto.ObtenerActividades(sub); foreach (Actividad_proyecto actividad in listaActividades) { sheetUnidad.Cell(fila, 7).Value = ControladorActividades.ObtenerActividad(actividad).nombre_actividad; fila++; } }