예제 #1
0
        public IEnumerable <ModeloPedidosPendientes> Get()
        {
            try
            {
                ConexionSQL xConexionSQL = new ConexionSQL(CadenaConexionSQL);

                // Ejecuta SP y me guarda en dbPedPend los Pedidos Pendientes
                String xSQLSelect = "EXEC NET_PCP_PEDIDOS";
                xConexionSQL = new ConexionSQL(CadenaConexionSQL);
                dbPedPend    = xConexionSQL.EjecutarSQL(xSQLSelect);

                // Retorno
                List <ModeloPedidosPendientes> xLista = dbPedPend.AsEnumerable().Select(m => new ModeloPedidosPendientes()
                {
                    PEDIDO          = m.Field <int>("PEDIDO"),
                    FE_MOV          = m.Field <DateTime>("FE_MOV"),
                    CG_CLI          = m.Field <decimal>("CG_CLI"),
                    DES_CLI         = m.Field <string>("DES_CLI"),
                    CG_ART          = m.Field <string>("CG_ART"),
                    DES_ART         = m.Field <string>("DES_ART"),
                    CANTPED         = m.Field <decimal>("CANTPED"),
                    ENTRPREV        = m.Field <DateTime>("ENTRPREV"),
                    Obseritem       = m.Field <string>("Obseritem"),
                    CG_ESTADOCARGA  = m.Field <decimal?>("CG_ESTADOCARGA"),
                    DES_ESTADOCARGA = m.Field <string>("DES_ESTADOCARGA"),
                    CG_ORDF         = m.Field <int?>("CG_ORDF"),
                    CAMPOCOM1       = m.Field <string>("CAMPOCOM1"),
                    CAMPOCOM2       = m.Field <string>("CAMPOCOM2"),
                    CAMPOCOM3       = m.Field <string>("CAMPOCOM3"),
                    CAMPOCOM4       = m.Field <string>("CAMPOCOM4"),
                    CAMPOCOM5       = m.Field <string>("CAMPOCOM5"),
                    CAMPOCOM6       = m.Field <string>("CAMPOCOM6"),
                    Semana          = m.Field <int>("Semana"),
                    LOTE            = m.Field <string>("LOTE"),
                    REGISTRO_PEDCLI = m.Field <decimal>("REGISTRO_PEDCLI"),
                }).ToList <ModeloPedidosPendientes>();

                return(xLista);
            }
            catch (Exception ex)
            {
                return(new List <ModeloPedidosPendientes>());
            }
        }
예제 #2
0
        public IEnumerable <ModeloCarga> Get()
        {
            try
            {
                // Busca turno
                ConexionSQL xConexionSQL = new ConexionSQL(CadenaConexionSQL);
                DataTable   xTabla       = xConexionSQL.EjecutarSQL("Select Top 1 ValorN From Solution Where Campo = 'HORASDIA'");
                if (xTabla.Rows.Count > 0)
                {
                    CantidadColumnasPorPeriodo = Convert.ToInt16(xTabla.Rows[0]["ValorN"]);
                }
                // Busca dias de calendario
                xConexionSQL = new ConexionSQL(CadenaConexionSQL);
                xTabla       = xConexionSQL.EjecutarSQL("Select Top 1 ValorN From Solution Where Campo = 'DIASCARGA'");
                if (xTabla.Rows.Count > 0)
                {
                    xExtensionColumnas = Convert.ToInt16(xTabla.Rows[0]["ValorN"]);
                }

                int xAvanceAutomatico = 0;
                xConexionSQL = new ConexionSQL(CadenaConexionSQL);
                xTabla       = xConexionSQL.EjecutarSQL("SELECT ValorN FROM solution WHERE Campo = 'CARGA_AVANCE_AUTOMATICO'");
                if (xTabla.Rows.Count > 0)
                {
                    xAvanceAutomatico = Convert.ToInt32(((DataRow)xTabla.Rows[0])["ValorN"]);
                }

                // Llena FECHA_PREVISTA_FABRICACION en casos que esté en null
                xConexionSQL = new ConexionSQL(CadenaConexionSQL);
                xConexionSQL.EjecutarSQLNonQuery("EXEC NET_PCP_Carga_Poner_Fecha_Prevista_Fabricacion 0");

                // Llena tabla de carga
                String xSQLSelect = "SELECT B.CG_ORDEN, A.CG_ESTADOCARGA, A.CG_ORDF, CG_ORDFORIG, CG_ORDFASOC, LTRIM(RTRIM(A.CG_CELDA)) AS CG_CELDA, C.DES_CELDA, " +
                                    "A.CG_PROD, A.DES_PROD, isnull(rTrim(A.PROCESO) + ' - ' + Protab.DESCRIP, '') AS PROCESO, isnull(PEDCLI.CG_CLI, 0) AS CG_CLI, " +
                                    "isnull(PEDCLI.DES_CLI, '') AS DES_CLI, FECHA_PREVISTA_FABRICACION, CONVERT(VARCHAR, CONVERT(TIME(0), FECHA_PREVISTA_FABRICACION)) AS HORA, " +
                                    "(A.DIASFAB * 24) HORASFAB, (select max(cg_ordf) from programa where  CG_ORDFASOC = A.CG_ORDFASOC) ULTIMAORDENASOCIADA, " +
                                    "(A.DIASFAB * 1440) MINUTOSFAB, A.FE_ENTREGA, A.DIASFAB, A.CANT, A.CANTFAB, (A.CANTFAB * 100 / A.CANT) AS AVANCE, '' AS BACKGROUND, " +
                                    "(CASE WHEN B.CG_ORDEN=1 THEN 'Producto' ELSE (CASE WHEN B.CG_ORDEN=2 THEN 'Semi-Elaborado de Proceso' ELSE (CASE WHEN B.CG_ORDEN=3 THEN 'Semi-Elaborado' ELSE (CASE WHEN B.CG_ORDEN=4 THEN 'Materia Prima' ELSE (CASE WHEN B.CG_ORDEN=10 THEN 'Insumo No Productivo / Articulo de Reventa' ELSE (CASE WHEN B.CG_ORDEN=11 THEN 'Herramental e Insumos Inventariables' ELSE (CASE WHEN B.CG_ORDEN=12 THEN 'Repuestos' ELSE (CASE WHEN B.CG_ORDEN=13 THEN 'Servicios' ELSE '' END) END) END) END) END) END) END) END) AS CLASE, " +
                                    "A.INSUMOS_ENTREGADOS_A_PLANTA, 0 AS COLUMNA, 0 AS COLUMNSPAN, 0 AS FLAG_DEPENDENCIAS, ISNULL(PROD.EXIGEOA, 0) EXIGEOA, isnull(A.PEDIDO, 0) PEDIDO " +
                                    "FROM Prod B, Celdas C, Programa A " +
                                    "LEFT JOIN ProTab ON ProTab.PROCESO = A.PROCESO " +
                                    "LEFT JOIN PEDCLI ON PEDCLI.PEDIDO = A.PEDIDO " +
                                    "LEFT JOIN PROD ON PROD.CG_PROD = A.CG_PROD " +
                                    "WHERE A.CG_PROD=B.CG_PROD AND LTRIM(RTRIM(A.CG_CELDA))=LTRIM(RTRIM(C.CG_CELDA)) " +
                                    "AND FECHA_PREVISTA_FABRICACION IS NOT NULL " +
                                    "AND LTRIM(RTRIM(A.CG_CELDA)) != '' AND A.DIASFAB > 0 AND A.CG_ESTADOCARGA = 3 " +
                                    "ORDER BY A.CG_ORDFASOC, A.CG_ORDFORIG";
                xConexionSQL = new ConexionSQL(CadenaConexionSQL);
                DataTable dbCargaTemp = xConexionSQL.EjecutarSQL(xSQLSelect);
                DateTime  xFecha;
                if (dbCargaTemp.Rows.Count == 0)
                {
                    return(new List <ModeloCarga>());
                }

                // Ordena fechas correlativamente de las ordenes dependientes
                int i = 0;
                int xOrdAsoc;
                while (i < dbCargaTemp.Rows.Count)
                {
                    xFecha   = Convert.ToDateTime(dbCargaTemp.Rows[i]["FECHA_PREVISTA_FABRICACION"]);
                    xOrdAsoc = Convert.ToInt32(dbCargaTemp.Rows[i]["CG_ORDFASOC"]);
                    while (i < dbCargaTemp.Rows.Count && xOrdAsoc == Convert.ToInt32(dbCargaTemp.Rows[i]["CG_ORDFASOC"]))
                    {
                        if (Convert.ToInt32(dbCargaTemp.Rows[i]["CG_ORDFORIG"]) > 0)
                        {
                            xFecha = xFecha.AddHours(1);
                            dbCargaTemp.Rows[i]["FECHA_PREVISTA_FABRICACION"] = xFecha;
                        }
                        xFecha = Convert.ToDateTime(dbCargaTemp.Rows[i]["FECHA_PREVISTA_FABRICACION"]);
                        i++;
                    }
                }

                // Ordena Celdas por CG_CELDA + CG_ESTADOCARGA DESC + FECHA_PREVISTA_FABRICACION
                try
                {
                    dbCarga = dbCargaTemp.AsEnumerable()
                              .OrderBy(r => r.Field <string>("CG_CELDA"))
                              .ThenByDescending(r => r.Field <int>("CG_ESTADOCARGA"))
                              .ThenBy(r => r.Field <DateTime>("FECHA_PREVISTA_FABRICACION"))
                              .CopyToDataTable();
                }
                catch (Exception)
                {
                    return(null);
                }

                xFechaInicial = DateTime.Now.Date;
                foreach (DataRow xRowCarga in dbCarga.Rows)
                {
                    if (Convert.ToDateTime(xRowCarga["FECHA_PREVISTA_FABRICACION"]) < xFechaInicial)
                    {
                        xFechaInicial = Convert.ToDateTime(xRowCarga["FECHA_PREVISTA_FABRICACION"]);
                    }
                }

                // Llena tabla de Festivos
                xConexionSQL = new ConexionSQL(CadenaConexionSQL);
                DataTable dbFestivos = xConexionSQL.EjecutarSQL("SELECT Fecha FROM CalendarioFestivos ORDER BY Fecha");

                // Arma vector con colores para las barras
                string[] xArrayColores = new string[138] {
                    Color.AliceBlue.Name,
                    Color.AntiqueWhite.Name,
                    Color.Aqua.Name,
                    Color.Aquamarine.Name,
                    Color.Azure.Name,
                    Color.Beige.Name,
                    Color.Bisque.Name,
                    Color.Black.Name,
                    Color.BlanchedAlmond.Name,
                    Color.Blue.Name,
                    Color.BlueViolet.Name,
                    Color.Brown.Name,
                    Color.BurlyWood.Name,
                    Color.Chartreuse.Name,
                    Color.Chocolate.Name,
                    Color.Coral.Name,
                    Color.CornflowerBlue.Name,
                    Color.Cornsilk.Name,
                    Color.Crimson.Name,
                    Color.Cyan.Name,
                    Color.DarkBlue.Name,
                    Color.DarkCyan.Name,
                    Color.DarkGoldenrod.Name,
                    Color.DarkGray.Name,
                    Color.DarkGreen.Name,
                    Color.DarkKhaki.Name,
                    Color.DarkMagenta.Name,
                    Color.DarkOliveGreen.Name,
                    Color.DarkOrange.Name,
                    Color.DarkOrchid.Name,
                    Color.DarkRed.Name,
                    Color.DarkSalmon.Name,
                    Color.DarkSeaGreen.Name,
                    Color.DarkSlateBlue.Name,
                    Color.DarkSlateGray.Name,
                    Color.DarkTurquoise.Name,
                    Color.DarkViolet.Name,
                    Color.DeepPink.Name,
                    Color.DeepSkyBlue.Name,
                    Color.DimGray.Name,
                    Color.DodgerBlue.Name,
                    Color.Firebrick.Name,
                    Color.FloralWhite.Name,
                    Color.ForestGreen.Name,
                    Color.Fuchsia.Name,
                    Color.Gainsboro.Name,
                    Color.GhostWhite.Name,
                    Color.Gold.Name,
                    Color.Goldenrod.Name,
                    Color.Gray.Name,
                    Color.Green.Name,
                    Color.GreenYellow.Name,
                    Color.Honeydew.Name,
                    Color.HotPink.Name,
                    Color.IndianRed.Name,
                    Color.Indigo.Name,
                    Color.Ivory.Name,
                    Color.Khaki.Name,
                    Color.Lavender.Name,
                    Color.LavenderBlush.Name,
                    Color.LawnGreen.Name,
                    Color.LemonChiffon.Name,
                    Color.LightBlue.Name,
                    Color.LightCoral.Name,
                    Color.LightCyan.Name,
                    Color.LightGoldenrodYellow.Name,
                    Color.LightGreen.Name,
                    Color.LightGray.Name,
                    Color.LightPink.Name,
                    Color.LightSalmon.Name,
                    Color.LightSeaGreen.Name,
                    Color.LightSkyBlue.Name,
                    Color.LightSlateGray.Name,
                    Color.LightSteelBlue.Name,
                    Color.LightYellow.Name,
                    Color.Lime.Name,
                    Color.LimeGreen.Name,
                    Color.Linen.Name,
                    Color.Magenta.Name,
                    Color.Maroon.Name,
                    Color.MediumAquamarine.Name,
                    Color.MediumBlue.Name,
                    Color.MediumOrchid.Name,
                    Color.MediumPurple.Name,
                    Color.MediumSeaGreen.Name,
                    Color.MediumSlateBlue.Name,
                    Color.MediumSpringGreen.Name,
                    Color.MediumTurquoise.Name,
                    Color.MediumVioletRed.Name,
                    Color.MidnightBlue.Name,
                    Color.MintCream.Name,
                    Color.MistyRose.Name,
                    Color.Moccasin.Name,
                    Color.NavajoWhite.Name,
                    Color.Navy.Name,
                    Color.OldLace.Name,
                    Color.Olive.Name,
                    Color.OliveDrab.Name,
                    Color.Orange.Name,
                    Color.OrangeRed.Name,
                    Color.Orchid.Name,
                    Color.PaleGoldenrod.Name,
                    Color.PaleGreen.Name,
                    Color.PaleTurquoise.Name,
                    Color.PaleVioletRed.Name,
                    Color.PapayaWhip.Name,
                    Color.PeachPuff.Name,
                    Color.Peru.Name,
                    Color.Pink.Name,
                    Color.Plum.Name,
                    Color.PowderBlue.Name,
                    Color.Purple.Name,
                    Color.Red.Name,
                    Color.RosyBrown.Name,
                    Color.RoyalBlue.Name,
                    Color.SaddleBrown.Name,
                    Color.Salmon.Name,
                    Color.SandyBrown.Name,
                    Color.SeaGreen.Name,
                    Color.SeaShell.Name,
                    Color.Sienna.Name,
                    Color.Silver.Name,
                    Color.SkyBlue.Name,
                    Color.SlateBlue.Name,
                    Color.SlateGray.Name,
                    Color.Snow.Name,
                    Color.SpringGreen.Name,
                    Color.SteelBlue.Name,
                    Color.Tan.Name,
                    Color.Teal.Name,
                    Color.Thistle.Name,
                    Color.Tomato.Name,
                    Color.Turquoise.Name,
                    Color.Violet.Name,
                    Color.Wheat.Name,
                    Color.WhiteSmoke.Name,
                    Color.Yellow.Name,
                    Color.YellowGreen.Name
                };

                // Carga colores en dbCarga
                int xColor = 0;
                foreach (DataRow xRowCarga in dbCarga.Rows)
                {
                    foreach (DataRow xRowCargaColores in dbCarga.Rows)
                    {
                        // Busca si alguna de las ordenes asociadas tiene BACKGROUND, si lo tiene se lo asigna
                        if (xRowCarga["CG_ORDFASOC"].ToString() == xRowCargaColores["CG_ORDFASOC"].ToString() && xRowCargaColores["BACKGROUND"].ToString() != "")
                        {
                            xRowCarga["BACKGROUND"] = xRowCargaColores["BACKGROUND"];
                            break;
                        }
                    }
                    // Si todavia no tiene color, se le asigna uno del Vector de Colores
                    if (xRowCarga["BACKGROUND"].ToString().Trim() == "")
                    {
                        xRowCarga["BACKGROUND"] = xArrayColores[xColor];
                        xColor++;
                        if (xColor == (xArrayColores.Length))
                        {
                            xColor = 0;
                        }
                    }
                }

                // Busca Columnas para las ordenes de fabricacion
                int     xColumnSpan          = 0;
                int     xColumnaInicialBarra = 0;
                int     xHorasPasadas;
                int     xDiasPasados;
                decimal xDiasFab;
                string  xCg_celda = "";
                i = 0;
                while (i < dbCarga.Rows.Count)
                {
                    // recorre en el while mientras sea la misma celda
                    xFecha = xFechaInicial;
                    xColumnaInicialBarra = 0;
                    xCg_celda            = dbCarga.Rows[i]["CG_CELDA"].ToString().Trim();
                    while (i < dbCarga.Rows.Count && xCg_celda == dbCarga.Rows[i]["CG_CELDA"].ToString().Trim())
                    {
                        // ColumnSpan
                        xHorasPasadas = 0;
                        if (xAvanceAutomatico == 1)
                        {
                            if (dbCarga.Rows[i]["CG_ESTADOCARGA"].ToString() == "3")
                            {
                                xDiasPasados = ((TimeSpan)(DateTime.Now - Convert.ToDateTime(dbCarga.Rows[i]["FECHA_PREVISTA_FABRICACION"]))).Days;
                                if (xDiasPasados > 0)
                                {
                                    xDiasFab = (Convert.ToDecimal(dbCarga.Rows[i]["DIASFAB"]) - xDiasPasados);
                                }
                                else
                                {
                                    xHorasPasadas = ((DateTime.Now.Hour - Convert.ToDateTime(dbCarga.Rows[i]["FECHA_PREVISTA_FABRICACION"]).Hour));
                                    xDiasFab      = Convert.ToDecimal(dbCarga.Rows[i]["DIASFAB"]);
                                }
                            }
                            else
                            {
                                xDiasFab = Convert.ToDecimal(dbCarga.Rows[i]["DIASFAB"]);
                            }
                        }
                        else
                        {
                            if (Convert.ToDecimal(dbCarga.Rows[i]["AVANCE"]) > 0)
                            {
                                xDiasFab = Convert.ToDecimal(dbCarga.Rows[i]["DIASFAB"]) -
                                           (Convert.ToDecimal(dbCarga.Rows[i]["DIASFAB"]) * Convert.ToDecimal(dbCarga.Rows[i]["AVANCE"]) / 100);
                            }
                            else
                            {
                                xDiasFab = Convert.ToDecimal(dbCarga.Rows[i]["DIASFAB"]);
                            }
                        }
                        if (xDiasFab <= 0)
                        {
                            xColumnSpan = 1;
                        }
                        else
                        {
                            xColumnSpan = Convert.ToInt32(xDiasFab * (Decimal)CantidadColumnasPorPeriodo);
                            if (xHorasPasadas > 0)
                            {
                                xColumnSpan -= xHorasPasadas;
                            }
                        }
                        if (xColumnSpan <= 0)
                        {
                            xColumnSpan = 1;
                        }
                        dbCarga.Rows[i]["COLUMNA"]    = 2 + xColumnaInicialBarra;
                        dbCarga.Rows[i]["COLUMNSPAN"] = xColumnSpan;
                        xColumnaInicialBarra          = xColumnaInicialBarra + xColumnSpan;
                        i++;
                    }
                }

                bool xHayCambios1 = true;
                bool xHayCambios2 = true;
                while (xHayCambios1 == true && xHayCambios2 == true)
                {
                    // Corrige Columnas de Barras Segun Dependencias
                    xHayCambios1 = CorrigeColumnasSegunDependencias();

                    // Corrige Columnas de Barras celda por celda, puede haber superposiciones
                    xHayCambios2 = CorrigeColumnasPorCelda();
                }

                // Retorno
                List <ModeloCarga> xLista = dbCarga.AsEnumerable().Select(m => new ModeloCarga()
                {
                    CG_ORDF                    = m.Field <int>("CG_ORDF"),
                    CG_ORDEN                   = m.Field <int>("CG_ORDEN"),
                    CG_ESTADOCARGA             = m.Field <int>("CG_ESTADOCARGA"),
                    CG_ORDFORIG                = m.Field <int>("CG_ORDFORIG"),
                    CG_ORDFASOC                = m.Field <int>("CG_ORDFASOC"),
                    CG_CELDA                   = m.Field <string>("CG_CELDA"),
                    DES_CELDA                  = m.Field <string>("DES_CELDA"),
                    CG_PROD                    = m.Field <string>("CG_PROD"),
                    DES_PROD                   = m.Field <string>("DES_PROD"),
                    PROCESO                    = m.Field <string>("PROCESO"),
                    CG_CLI                     = m.Field <int>("CG_CLI"),
                    DES_CLI                    = m.Field <string>("DES_CLI"),
                    FECHA_PREVISTA_FABRICACION = m.Field <DateTime>("FECHA_PREVISTA_FABRICACION"),
                    HORA       = m.Field <string>("HORA"),
                    HORASFAB   = m.Field <Decimal>("HORASFAB"),
                    MINUTOSFAB = m.Field <Decimal>("MINUTOSFAB"),
                    FE_ENTREGA = m.Field <DateTime>("FE_ENTREGA"),
                    DIASFAB    = m.Field <Decimal>("DIASFAB"),
                    CANT       = m.Field <Decimal>("CANT"),
                    CANTFAB    = m.Field <Decimal>("CANTFAB"),
                    AVANCE     = m.Field <Decimal>("AVANCE"),
                    BACKGROUND = m.Field <string>("BACKGROUND"),
                    CLASE      = m.Field <string>("CLASE"),
                    INSUMOS_ENTREGADOS_A_PLANTA = m.Field <bool>("INSUMOS_ENTREGADOS_A_PLANTA"),
                    COLUMNA           = m.Field <int>("COLUMNA"),
                    COLUMNSPAN        = m.Field <int>("COLUMNSPAN"),
                    FLAG_DEPENDENCIAS = m.Field <int>("FLAG_DEPENDENCIAS"),
                    EXIGEOA           = m.Field <bool>("EXIGEOA"),
                    PEDIDO            = m.Field <int>("PEDIDO"),
                }).ToList <ModeloCarga>();

                return(xLista);
            }
            catch (Exception ex)
            {
                return(new List <ModeloCarga>());
            }
        }