Пример #1
0
        //Funcion para la consulta del semaforo de disponiblidad de un item dentro de un almacen
        //Si es 0 : No hay - Rojo
        //Si es 1 : Cantidad Menor a Minimo - Amarillo
        //Si es 2 : Cantidad Superior a Minimo - Verde
        public static int ConsultaSemaforoDisponibilidad(string codI, string codAlm, uint mes, int ano)
        {
            int    indentificadorEstado = -1;
            double disponibilidad       = Referencias.ConsultarDisponibilidad(codI, codAlm, ano.ToString(), 0);
            int    minimoDisponible     = Referencias.CalcularMinimoDisponible(codI, mes, ano);

            if (disponibilidad == 0)
            {
                try
                {
                    disponibilidad = Convert.ToDouble(DBFunctions.SingleData("SELECT case when mi.tori_codigo = 'Z' THEN 0 ELSE COALESCE(msal_canttransito,0) END FROM CINVENTARIO CI, mitems mi, msaldoitemalmacen ms WHERE mi.mite_codigo = ms.mite_codigo AND palm_almacen='" + codAlm + "' AND MS.pano_ano=CI.PANO_ANO AND mi.mite_codigo='" + codI + "' ").Trim());
                }
                catch
                {
                    disponibilidad = 0;
                }
                if (disponibilidad > 0) // hay transito unicamente
                {
                    indentificadorEstado = 3;
                    disponibilidad       = 0;
                }
                else
                {
                    indentificadorEstado = 0;
                }
            }
            else if (disponibilidad >= 1 && disponibilidad <= Convert.ToDouble(minimoDisponible))
            {
                indentificadorEstado = 2;
            }
            else if (disponibilidad > Convert.ToDouble(minimoDisponible))
            {
                indentificadorEstado = 1;
            }
            return(indentificadorEstado);
        }
Пример #2
0
        private ArrayList Armar_Inserts(DataSet ds, DataSet ds1)
        {
            DataTable tabla1   = ds1.Tables[0];
            DataTable tabla2   = ds.Tables[0];
            ArrayList sqls     = new ArrayList();
            int       cont     = 0;
            DataSet   dsLineas = new DataSet();

            DBFunctions.Request(dsLineas, IncludeSchema.NO, "SELECT PLIN_TIPO,PLIN_CODIGO FROM DBXSCHEMA.PLINEAITEM; SELECT MITE_CODIGO FROM MITEMS;");
            for (int i = 0; i < ds1.Tables[0].Rows.Count; i++)
            {
                string sql         = "INSERT INTO " + ddltabla.SelectedValue + " VALUES(";
                bool   validaMitem = true;
                //crear dataset para las lineas

                for (int j = 0; j < ds1.Tables[0].Columns.Count; j++)
                {
                    if (j != ds1.Tables[0].Columns.Count - 1)
                    {
                        if (ddltabla.SelectedValue == "MITEMS" && j == 0)
                        {
                            DataRow[] laLinea = dsLineas.Tables[0].Select("PLIN_CODIGO = '" + ds1.Tables[0].Rows[i]["PLIN_CODIGO"] + "'");
                            string    refer   = "";
                            if (laLinea.Length > 0)
                            {
                                if (!Referencias.Guardar(ds1.Tables[0].Rows[i]["MITE_CODIGO"].ToString(), ref refer, laLinea[0].ItemArray[0].ToString()))
                                {
                                    err        += "<p style=\"COLOR: red\"> Item Inválido " + ds1.Tables[0].Rows[i]["MITE_CODIGO"].ToString() + " Por favor revise la Fila número " + (i + 2) + " en su archivo Excel</p><br>";
                                    validaMitem = false;
                                    break;
                                }
                                else
                                {
                                    /*if (dsLineas.Tables[1].Select("MITE_CODIGO = '" + refer + "'").Length > 0)
                                     * {
                                     *  err += "<p style=\"COLOR: red\"> Item Inválido " + ds1.Tables[0].Rows[i]["MITE_CODIGO"].ToString() + ", Existe en la Base de Datos, Por favor revise su excel en la linea " + (i+2) + "</p><br>";
                                     * }*/
                                    sql += Analizar_Campo(refer, ds.Tables[0].Rows[j][2].ToString(), ds.Tables[0].Rows[j][4].ToString(), ref err, ds1.Tables[0].Columns[j].ColumnName, i, ref cont) + ",";
                                }
                            }
                            else
                            {
                                err        += "<p style=\"COLOR: red\"> Linea Inválida " + ds1.Tables[0].Rows[i]["PLIN_CODIGO"].ToString() + " Por favor revise la Fila número " + (i + 2) + " en su archivo Excel</p><br>";
                                validaMitem = false;
                                break;
                            }
                        }
                        else
                        {
                            sql += Analizar_Campo(ds1.Tables[0].Rows[i][j].ToString(), ds.Tables[0].Rows[j][2].ToString(), ds.Tables[0].Rows[j][4].ToString(), ref err, ds1.Tables[0].Columns[j].ColumnName, i, ref cont) + ",";
                        }
                    }
                    else
                    {
                        sql += Analizar_Campo(ds1.Tables[0].Rows[i][j].ToString(), ds.Tables[0].Rows[j][2].ToString(), ds.Tables[0].Rows[j][4].ToString(), ref err, ds1.Tables[0].Columns[j].ColumnName, i, ref cont) + ")";
                    }
                }
                //if (cont < 1)
                //{
                //    sqls.Add(sql);
                //    cont = 0;
                //}
                if (validaMitem)
                {
                    sqls.Add(sql);
                }
            }
            //if (cont == 0)
            //return null;

            return(sqls);
        }
Пример #3
0
        protected bool insertTable(DataTable table1, DataTable table2)
        {
            if (ddltabla.SelectedValue == "MITEMS")
            {
                //CAMBIAR REFERENCIA POR MEDIO DE LA LINEA
                for (int i = 0; i < table2.Rows.Count; i++)
                {
                    string codItAlma = "";
                    Referencias.Guardar(table2.Rows[i][0].ToString().Replace('"', ' ').Trim(), ref codItAlma, DBFunctions.SingleData("SELECT plin_tipo FROM plineaitem WHERE plin_codigo='" + table2.Rows[i][2].ToString().Trim() + "'"));
                    table2.Rows[i][0] = codItAlma;
                }
            }
            //Insert
            bool   rta      = false;
            string servidor = ConfigurationManager.AppSettings["Server" + GlobalData.getEMPRESA()];
            string database = ConfigurationManager.AppSettings["DataBase" + GlobalData.getEMPRESA()];
            string usuario  = ConfigurationManager.AppSettings["UID"];
            string password = ConfigurationManager.AppSettings["PWD" + GlobalData.getEMPRESA()];

            string timeout = ConfigurationManager.AppSettings["ConnectionTimeout"];
            string port    = ConfigurationManager.AppSettings["DataBasePort"];

            AMS.CriptoServiceProvider.Crypto miCripto = new Crypto(AMS.CriptoServiceProvider.Crypto.CryptoProvider.TripleDES);
            miCripto.IV  = ConfigurationManager.AppSettings["VectorInicialEncriptacion"];
            miCripto.Key = ConfigurationManager.AppSettings["ValorConcatClavePrivada"];
            string newPwd           = miCripto.DescifrarCadena(password);
            string connectionString = "Server=" + servidor + ":" + port + ";DataBase=" + database + ";UID=" + usuario + ";PWD=" + newPwd + "";


            //IBM.Data.DB2.DB2BulkCopy dbBulkcopy = new IBM.Data.DB2.DB2BulkCopy(connectionString, IBM.Data.DB2.DB2BulkCopyOptions.KeepIdentity);
            using (var dbBulkcopy = new IBM.Data.DB2.DB2BulkCopy(connectionString, IBM.Data.DB2.DB2BulkCopyOptions.Default))
            {
                // my DataTable column names match my SQL Column names, so I simply made this loop. However if your column names don't match, just pass in which datatable name matches the SQL column name in Column Mappings
                if (table1.Rows.Count == table2.Columns.Count)
                {
                    foreach (DataColumn col in table2.Columns)
                    {
                        dbBulkcopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
                    }
                    dbBulkcopy.BulkCopyTimeout      = 600;
                    dbBulkcopy.DestinationTableName = ddltabla.SelectedValue;

                    try
                    {
                        dbBulkcopy.WriteToServer(table2);
                        dbBulkcopy.Close();
                        DBFunctions.closeConnection();
                        rta = true;
                    }
                    catch (Exception z)
                    {
                        dbBulkcopy.Close();
                        DBFunctions.closeConnection();
                        rta = false;
                        Utils.MostrarAlerta(Response, "No se ingresó ningún registro debido a que el archivo Excel presenta fallas. \n Por favor revise su archivo o pruebe con el botón Revisar y Subir");
                        lbError.Text = z.Message;
                    }
                }
            }
            return(rta);
        }
Пример #4
0
        //Funcion que nos permite consultar cual es el disponible de una referencia, revise como parametros de entrada
        //el codigo del item a consultar,un mes y un año especifico para realizar la consulta, un entero referencia que guarda el pedido sugerido,
        //la funcion retorna un entero indicador del tipo de sugerido que es el item :
        //Alta Rotacion : 10
        //Media Rotacion : 20
        //Estudio Profundo : 30
        //Sobre Stock : 40
        public static int ConsultarSugerido(DataRow drItem, int mes, int ano, int dia, ref int sugerido, ref double demandaPromedioSalida, DataSet dsParaInven)
        {
            int    frecuenciaPedido = 0;
            int    mesesDemanda = 0;
            double demandaPromedio = 0, cicloReposicion = 0, stockSeguridad = 0, Qactual = 0, Qtransito = 0, Qbackorder = 0, costoPromedio = 0, valorFrontera = 0;
            bool   indicadorEstudioProfundo = false;
            string codI = drItem["mite_codigo"].ToString();
            //Traemos el nit del proveedor de este item
            string nitProveedor = drItem["mnit_nit"].ToString();
            //Ahora determinamos como se van a tomar los acumulados de los items
            int    mesPivote = mes - 1;
            int    anoPivote = ano;
            double Qminimo = 0, QDisponible = 0, Qmaximo = 0;

            //Traemos la cantidadactual,
            //la cantidad en transicion y el backorder de clientes
            //try { Qactual = Convert.ToDouble(DBFunctions.SingleData("SELECT msal_cantactual - msal_cantasig + msal_unidtrans FROM msaldoitem WHERE mite_codigo='" + codI + "' AND pano_ano=" + ano + "")); }
            //catch { }
            Qactual = Convert.ToDouble(drItem["qactual"]);
            //try { Qtransito = Convert.ToDouble(DBFunctions.SingleData("SELECT msal_unidtrans FROM msaldoitem WHERE mite_codigo='" + codI + "' AND pano_ano=" + ano + "")); }
            //catch { }
            Qtransito = Convert.ToDouble(drItem["qtrans"]);
            //try { Qbackorder = Convert.ToDouble(DBFunctions.SingleData("SELECT msal_unidpendi FROM msaldoitem WHERE mite_codigo='" + codI + "' AND pano_ano=" + ano + "")); }
            //catch { }
            Qbackorder = Convert.ToDouble(drItem["qbo"]);
            Qbackorder = 0; // TEMPOARAL PORQUE ESTA VARIABLE NO ESTA PERFECTAMENTE BALANCEADA CON LOS DATOS DE DPEDIDOITEM
            //try { costoPromedio = Convert.ToDouble(DBFunctions.SingleData("SELECT msal_costprom FROM msaldoitem WHERE mite_codigo='" + codI + "' AND pano_ano=" + ano + "")); }
            //catch { }
            costoPromedio = Convert.ToDouble(drItem["msal_costprom"]);
            //try { cicloReposicion = Convert.ToDouble(DBFunctions.SingleData("SELECT mpro_clicrepo FROM mproveedor WHERE mnit_nit='" + nitProveedor + "'")); }
            //catch { cicloReposicion = Convert.ToDouble(dsParaInven.Tables[0].Rows[0][8]); }
            cicloReposicion = Convert.ToDouble(drItem["mpro_clicrepo"]);
            //try { frecuenciaPedido = Convert.ToInt32(DBFunctions.SingleData("SELECT mpro_frecpedimes FROM mproveedor WHERE mnit_nit='" + nitProveedor + "'")); }
            //catch { frecuenciaPedido = Convert.ToInt32(dsParaInven.Tables[0].Rows[0][7]); }
            frecuenciaPedido = Convert.ToInt32(drItem["mpro_frecpedimes"]);
            //try { stockSeguridad = Convert.ToDouble(DBFunctions.SingleData("SELECT mpro_stocksegu FROM mproveedor WHERE mnit_nit='" + nitProveedor + "'")); }
            //catch { stockSeguridad = Convert.ToDouble(dsParaInven.Tables[0].Rows[0][9]); }
            stockSeguridad = Convert.ToDouble(drItem["mpro_stocksegu"]);
            try { valorFrontera = Convert.ToInt32(dsParaInven.Tables[0].Rows[0][19]); }
            catch { valorFrontera = 1000000; }

            //if (DBFunctions.SingleData("SELECT plin_tipo FROM plineaitem WHERE plin_codigo=(SELECT plin_codigo FROM mitems WHERE mite_codigo='" + codI + "')") != "RN")
            if (drItem["plin_tipo"].ToString() != "RN")
            {
                ////////////////////////////////////////////////////////////////////////////////////////
                ///////////////Manejo de Sugerido Referencias Mazda/////////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                //Debemos cargar los 6 ponderadores
                double[] ponderadores = new double[6];
                ponderadores[0] = (Convert.ToDouble(dsParaInven.Tables[0].Rows[0][13]) / 100); //Ponderador 1
                ponderadores[1] = (Convert.ToDouble(dsParaInven.Tables[0].Rows[0][14]) / 100); //Ponderador 2
                ponderadores[2] = (Convert.ToDouble(dsParaInven.Tables[0].Rows[0][15]) / 100); //Ponderador 3
                ponderadores[3] = (Convert.ToDouble(dsParaInven.Tables[0].Rows[0][16]) / 100); //Ponderador 4
                ponderadores[4] = (Convert.ToDouble(dsParaInven.Tables[0].Rows[0][17]) / 100); //Ponderador 5
                ponderadores[5] = (Convert.ToDouble(dsParaInven.Tables[0].Rows[0][18]) / 100); //Ponderador 6
                //Con el nit del proveedor ahora traemos el valor del ciclo de reposicion y la frecuencia de pedido, si los valores son nulos en la base de datos traemos los valores por defecto que almacenamos en cinventario

                double[] acumuladosMeses = new double[6];
                //Ahora determinamos desde que mes tomamos el semestre si desde el actual o el anterior
                //Si el acumulado del mes actual es mayor que el del mes anterior el pivote es el mes actual
                //Si el acumulado del mes anterior es mayor que el del mes actual el pivote es el mes anterior
                if (Convert.ToDouble(drItem["D0"].ToString()) >= Convert.ToDouble(drItem["D1"].ToString()))
                {
                    acumuladosMeses[0] = Convert.ToDouble(drItem["D0"].ToString());
                    acumuladosMeses[1] = Convert.ToDouble(drItem["D1"].ToString());
                    acumuladosMeses[2] = Convert.ToDouble(drItem["D2"].ToString());
                    acumuladosMeses[3] = Convert.ToDouble(drItem["D3"].ToString());
                    acumuladosMeses[4] = Convert.ToDouble(drItem["D4"].ToString());
                    acumuladosMeses[5] = Convert.ToDouble(drItem["D5"].ToString());
                }
                else
                {
                    acumuladosMeses[0] = Convert.ToDouble(drItem["D1"].ToString());
                    acumuladosMeses[1] = Convert.ToDouble(drItem["D2"].ToString());
                    acumuladosMeses[2] = Convert.ToDouble(drItem["D3"].ToString());
                    acumuladosMeses[3] = Convert.ToDouble(drItem["D4"].ToString());
                    acumuladosMeses[4] = Convert.ToDouble(drItem["D5"].ToString());
                    acumuladosMeses[5] = Convert.ToDouble(drItem["D6"].ToString());
                }
                //Ya tenemos el mes de pivote y en que año. Ahora debemos calcular cual es la demanda promedio para los ultimos seis meses desde el mes de pivote
                for (int i = 0; i < 6; i++)
                {
                    if (acumuladosMeses[i] > 0)
                    {
                        mesesDemanda += 1;
                    }
                    demandaPromedio += acumuladosMeses[i] * ponderadores[5 - i];
                }
                indicadorEstudioProfundo = Referencias.RevisionDemandaMeses(acumuladosMeses, 6);
                demandaPromedioSalida    = demandaPromedio;
                //Ahora calculamos el Qminimo, QDisponible y Qmaximo
                if (cicloReposicion < 0 || cicloReposicion > 10)
                {
                    cicloReposicion = 1;
                }
                if (frecuenciaPedido < 1 || frecuenciaPedido > 15)
                {
                    frecuenciaPedido = 1;
                }

                Qminimo     = demandaPromedio * cicloReposicion;
                QDisponible = Qactual + Qtransito - Qbackorder;
                Qmaximo     = Qminimo + (demandaPromedio / frecuenciaPedido);
                if (QDisponible >= Qminimo)
                {
                    sugerido = 0;
                    return(40);   //Sobre Stock
                }
                else
                {
                    sugerido = (int)Math.Round(Qmaximo - QDisponible);
                    if (costoPromedio > valorFrontera || indicadorEstudioProfundo)
                    {
                        return(30);
                    }
                    else if (mesesDemanda >= 4)
                    {
                        return(10);
                    }
                    else if (mesesDemanda < 4)
                    {
                        return(20);
                    }
                }
            }
            else
            {
                ////////////////////////////////////////////////////////////////////////////////////////
                ///////////////Manejo de Sugerido Referencias Renault///////////////////////////////////
                ////////////////////////////////////////////////////////////////////////////////////////
                if (mesPivote <= 0)
                {
                    mesPivote = 12;
                    anoPivote = anoPivote - 1;
                }
                //traemos el acumulado de la demanda de los ultimos seis meses sin contar el mes seleccionado
                double   acumuladosDemandasMeses = 0;
                double[] acumuladosMeses         = new double[6];
                for (int i = 0; i < 6; i++)
                {
                    double acumMes = 0;
                    try { acumMes = Convert.ToDouble(DBFunctions.SingleData("SELECT mACU_cantidad FROM mACUMULADOitem WHERE mite_codigo='" + codI + "' AND pano_ano=" + anoPivote + " AND pmes_mes=" + mesPivote + " AND TMOV_TIPOMOVI = 70 ")); }
                    catch { }
                    if (acumMes >= 0)
                    {
                        acumuladosDemandasMeses += acumMes;
                        mesesDemanda            += 1;
                    }
                    acumuladosMeses[i] = acumMes;
                    mesPivote          = mesPivote - 1;
                    if (mesPivote <= 0)
                    {
                        mesPivote = 12;
                        anoPivote = anoPivote - 1;
                    }
                }
                indicadorEstudioProfundo = Referencias.RevisionDemandaMeses(acumuladosMeses, 6);
                //Ahora este acumulado lo dividimos en 6(meses) y luego en 22(cantidad dias manejados sofasa)
                acumuladosDemandasMeses = acumuladosDemandasMeses / 6;
                acumuladosDemandasMeses = acumuladosDemandasMeses / 22;
                //Ahora traemos la cantidad acumulada del mes y que año que entraron como parametro
                //Si el dia de consulta es mayor a 22 se divide por 22 sino por la cantidad de dias transcurridoas
                double cantidadMesActual = 0;
                try { cantidadMesActual = Convert.ToDouble(DBFunctions.SingleData("SELECT mACU_cantidad FROM mACUMULADOitem WHERE mite_codigo='" + codI + "' AND pano_ano=" + ano + " AND pmes_mes=" + mes + " AND TMOV_TIPOMOVI = 70 ")); }
                catch { }
                if (dia > 22)
                {
                    cantidadMesActual = cantidadMesActual / 22;
                }
                else
                {
                    cantidadMesActual = cantidadMesActual / dia;
                }
                //Ahora se suma la demandapromedio diara del mes actual con las demanda diaria promedia de los ultimos seis meses
                double demandaPromedioDiaria = cantidadMesActual + acumuladosDemandasMeses;
                if (frecuenciaPedido == 0)
                {
                    frecuenciaPedido = 1;
                }
                Qmaximo     = demandaPromedioDiaria * ((1 / frecuenciaPedido) + cicloReposicion + stockSeguridad);
                Qminimo     = Qmaximo;
                QDisponible = Qactual + Qtransito - Qbackorder;
                if (QDisponible > Qmaximo)
                {
                    sugerido = 0;
                    return(40);   //Sobre Stock
                }
                else
                {
                    sugerido = (int)Math.Round(Qmaximo - QDisponible);
                    if (costoPromedio > valorFrontera || indicadorEstudioProfundo)
                    {
                        return(30);
                    }
                    else if (mesesDemanda >= 4)
                    {
                        return(10);
                    }
                    else if (mesesDemanda < 4)
                    {
                        return(20);
                    }
                }
            }
            return(0);
        }