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++;
            }
        }
Exemplo n.º 2
0
        private void AgregarUnidades(IXLWorksheet worksheet)
        {
            var sub = ControladorSubproyecto.BuscarPorOTDeExportacion(worksheet.Name, _proyAux.id_proyecto);

            if (sub == null)
            {
                return;
            }

            decimal horasOC;
            bool    isNumericOC = decimal.TryParse(worksheet.Cell(3, 3).GetFormattedString(), out horasOC);

            if (isNumericOC)
            {
                sub.horas_orden_compra = horasOC;
            }
            else
            {
                sub.horas_orden_compra = null;
            }

            ControladorSubproyecto.ActualizarSubproyecto(sub);

            int i;
            //Por si las dudas hayan escrito algo en la fila 9 (no deberian) porque anda mal la exportacion de Excel
            int j = 9;

            //Que columna?
            for (i = j; !string.IsNullOrEmpty(worksheet.Cell(i, 2).Value.ToString()); i++)
            {
                int  n;
                bool isNumeric = int.TryParse(worksheet.Cell(i, 4).GetFormattedString(), out n);
                HORA_TIPO_SUBPROYECTO hora_tipo = ControladorSubproyecto.ObtenerHoraTipoSubproyecto(worksheet.Cell(i, 3).Value.ToString());
                decimal?dec    = null;
                var     subAux = new SUBPROYECTO
                {
                    nombre                = worksheet.Cell(i, 2).Value.ToString(),
                    fecha_fin_estimada    = DateTime.Today,
                    asignacion_automatica = true,
                    fecha_inicio_estimada = DateTime.Today,
                    fecha_inicio_real     = DateTime.Today,
                    fecha_fin_real        = DateTime.Today,
                    ot_cliente            = "",
                    id_tipo_subproyecto   = 4,
                    orden = 0,
                    id_hora_tipo_subproyecto = hora_tipo == null ? 0: hora_tipo.id_hora_tipo_subproyecto,
                    horas_estimadas          = isNumeric ? n : hora_tipo == null ? 0 : hora_tipo.id_hora_tipo_subproyecto > 0 ? ControladorSubproyecto.ObtenerHoraTipoSubproyecto(worksheet.Cell(i, 3).Value.ToString()).horas : 0,
                    id_prioridad             = 0,
                    observaciones            = "",
                    ot = i - 9,
                    id_estado_proyecto            = 0,
                    forzada_fecha_fin_estimada    = false,
                    forzada_fecha_inicio_estimada = false,
                    genera_ot   = false,
                    id_proyecto = _proyAux.id_proyecto
                };

                //mp existe
                //TODO ACTUALIZAR
                int         id;
                SUBPROYECTO subPro            = null;
                bool        existeSubproyecto = false;
                SUBPROYECTO sub2 = null;
                if (int.TryParse(worksheet.Cell(i, 1).Value.ToString(), out id))
                {
                    sub2 = ControladorSubproyecto.BuscarPorId(id);
                }
                if (sub2 == null)
                {
                    ControladorSubproyecto.InsertarSubproyecto(subAux);
                    subAux.id_subproyecto_padre = sub.id_subproyecto;
                    ControladorSubproyecto.ActualizarSubproyecto(subAux);
                    //Check
                    CrearActividades(subAux);
                    subAux.horas_orden_compra = (decimal)ControladorSubproyecto.CalcularHorasOrdenCompra(subAux);
                    ControladorSubproyecto.ActualizarSubproyecto(subAux);
                }
                else
                {
                    sub2.nombre = worksheet.Cell(i, 2).Value.ToString();
                    sub2.id_hora_tipo_subproyecto = subAux.id_hora_tipo_subproyecto;
                    sub2.horas_estimadas          = ControladorSubproyecto.CalcularHorasOrdenCompra(subAux) != null?Convert.ToDecimal(ControladorSubproyecto.CalcularHorasOrdenCompra(subAux).Value.ToString("#.##")) : 0;

                    sub2.orden = subAux.orden;

                    //Eliminar subproyecto
                    if (sub2.nombre == null || sub2.nombre == "")
                    {
                        ControladorSubproyecto.EliminarSubproyecto(sub2);
                    }
                    else
                    {
                        ControladorSubproyecto.ActualizarSubproyecto(sub2);
                        decimal?valor = (decimal)ControladorSubproyecto.CalcularHorasOrdenCompra(sub2);
                        sub2.horas_orden_compra = ControladorSubproyecto.CalcularHorasOrdenCompra(sub2).HasValue ? decimal.Round((decimal)ControladorSubproyecto.CalcularHorasOrdenCompra(sub2).Value, 2, MidpointRounding.AwayFromZero) : 0;
                        ControladorSubproyecto.ActualizarSubproyecto(sub2);
                    }
                }
            }

            List <Actividad> listaActividades = ControladorActividades.ObtenerActividadesDeSubproyecto(sub);

            for (i = 9; !string.IsNullOrEmpty(worksheet.Cell(i, 7).Value.ToString()); i++)
            {
                string nombre = worksheet.Cell(i, 7).Value.ToString();
                if (listaActividades.Count == 0 || !listaActividades.Where(x => x.nombre_actividad == nombre).Any())
                {
                    CrearActividad(sub, ControladorActividades.ObtenerTipoActividad(nombre) == null ? 1 : ControladorActividades.ObtenerTipoActividad(nombre).id_tipo_actividad, nombre, listaActividades.Count == 0 ? 1 : listaActividades.Count + 1);
                }
            }
        }