Ejemplo n.º 1
0
        public static string getQty(FileInfo file)
        {
            string qty = "0";

            try
            {
                DataTable opfile = IngenieriaSql.FileToTable(file.FullName);
                DataView  dv     = opfile.DefaultView;
                dv.Sort = "3 desc";

                opfile = dv.ToTable();

                DataRow dr = opfile.Rows[0];

                double unity   = double.Parse(dr.ItemArray[3].ToString());
                double require = double.Parse(dr.ItemArray[6].ToString());

                qty = (require / unity).ToString();
            }
            catch (Exception ex)
            {
                qty = "0";
            }
            return(qty);
        }
Ejemplo n.º 2
0
        public int addModeloLote(string lotePath, string modelo, string lote, string hash, string fecha, string version)
        {
            string mensaje = "";
            int    id      = IngenieriaSql.add(modelo, lote, hash, fecha, version);

            try
            {
                if (!id.Equals("0"))
                {
                    // Si pudo agregar...
                    // Leo contenido del lote
                    DataTable lote_content = LoteHandle.read(lotePath);
                    // Agrego a base de datos.
                    bool ifLoteAdd = IngenieriaSql.addIngenieria(lote_content, id, version);

                    if (ifLoteAdd)
                    {
                        mensaje = "Agregado";
                    }
                    else
                    {
                        mensaje = "ERROR AL IMPORTAR LOTE: " + lote;

                        // Remuevo el lote de SQL
                        IngenieriaSql.del(id);

                        // HardCodeo de fecha... si no importo bien el lote,... el proximo intento se vera.
                        // IngenieriaSql.updateFecha(id, "1985-01-01 10:10:10");
                    }

                    dgvMain.Invoke((MethodInvoker)(() =>
                                                   dgvMain.Rows.Add(modelo + " " + lote, "", hash, mensaje)
                                                   ));
                }
            }
            catch (Exception)
            {
                // HardCodeo de fecha... si no importo bien el lote,... el proximo intento se vera.
                IngenieriaSql.updateFecha(id, "1985-01-01 10:10:10");

                dgvMain.Invoke((MethodInvoker)(() =>
                                               dgvMain.Rows.Add(modelo + " " + lote, "", hash, "No se agrego: SE ENCUENTRA EN USO")
                                               ));
            }

            return(id);
        }
Ejemplo n.º 3
0
        public void Iniciar(object sender, DoWorkEventArgs e)
        {
            TRABAJANDO = true;

            // Obtengo lista hash (ultimas modificaciones de LOTES en SQL)
            Hash.getFromSql();
            OP.DownloadAll();

            if (Hash.Database.Count() > 0)
            {
                try
                {
                    // Recorro carpetas de ingenieria
                    DirectoryInfo dir = new DirectoryInfo(@"\\USH-NT-3\v1\Users\INSAUT\PLANTA_3\TECNICOS_3\Programacion\LISTAS");

                    DirectoryInfo[] Folders     = dir.GetDirectories();
                    int             totalFolder = Folders.Count();
                    int             countEstado = 0;
                    progreso.Invoke((MethodInvoker)(() => progreso.Maximum = totalFolder));

                    // Recorro carpetas de modelos
                    foreach (DirectoryInfo modelo in Folders)
                    {
                        OP.Procesar(modelo);
                        // Aumento progreso.
                        countEstado++;

                        // Lista de lotes, solo extencion .txt
                        FileInfo[] lotes = modelo.GetFiles("*.txt");

                        TreeNode idmodelo = null;
                        treeLista.Invoke((MethodInvoker)(() => idmodelo = treeLista.Nodes.Add(modelo.Name)));

                        // Recorro lotes del modelo actual
                        foreach (FileInfo lote in lotes)
                        {
                            string loteNombre = lote.Name.Split('.')[0];

                            // Verifico fecha de modificacion.
                            string lote_fecha_modificacion = lote.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss");

                            TreeNode idlote = null;

                            treeLista.Invoke((MethodInvoker)(() => idlote = idmodelo.Nodes.Add(loteNombre)));

                            // Verifico si existe el modelo y lote en la base de datos.
                            Hash ModeloLote = Hash.Database.Find(o =>
                                                                 o.modelo.Equals(modelo.Name) &&
                                                                 o.lote.Equals(loteNombre)
                                                                 );
                            string loteHash = "";
                            if (ModeloLote == null)
                            {
                                // Si no existe en SQL....

                                // genero un HASH del lote actual (ultima fecha de modificacion)
                                loteHash = Hash.generar(lote.FullName.ToString());
                                // Agrego a SQL
                                string version = "1";
                                if (!loteHash.Equals(""))
                                {
                                    addModeloLote(lote.FullName, modelo.Name, loteNombre, loteHash, lote_fecha_modificacion, version);
                                }
                            }
                            else
                            {
                                // Verifico si existe en SQL el Modelo/lote
                                int HashListIndex = Hash.Database.FindIndex(o => o.id == ModeloLote.id);
                                if (HashListIndex >= 0)
                                {
                                    // Agrego flag de existencia no solo en SQL sino en carpeta INGENIERIA
                                    Hash hash = Hash.Database[HashListIndex];
                                    hash.existe = true;
                                }

                                if (!ModeloLote.fecha_modificacion.Equals(lote_fecha_modificacion))
                                {
                                    // Si la fecha de modificacion en SQL no es igual a la fecha de modificacion actual.

                                    // Por defecto se detecto una modificacion.

                                    string enuso          = "";
                                    string loteModificado = "";

                                    try
                                    {
                                        // genero un HASH del lote actual
                                        loteHash = Hash.generar(lote.FullName.ToString());
                                    }
                                    catch (Exception)
                                    {
                                        enuso = " EN USO ";
                                    }

                                    if (ModeloLote.hash.Equals(loteHash))
                                    {
                                        // El hash es el mismo, no hay modificacion.
                                        loteModificado = "No";

                                        // Actualizo ultima fecha de modificacion en SQL.
                                        IngenieriaSql.updateFecha(ModeloLote.id, lote_fecha_modificacion);

                                        dgvMain.Invoke((MethodInvoker)(() =>
                                                                       dgvMain.Rows.Add(modelo.Name + " " + loteNombre, loteHash, ModeloLote.hash, loteModificado + " (fecha actualizada)" + enuso)
                                                                       ));
                                    }
                                    else
                                    {
                                        // En caso de que el HASH sea diferente
                                        loteModificado = "Si, actualizando...";

                                        /*
                                         * NOTA:
                                         * Aca Deberia ELIMINAR la version anterior y guardar la nueva version....
                                         * O podria enviar la version anterior a un LOG y guardar la nueva version....
                                         * Hay que pensarlo... queda pendiente...
                                         */

                                        // Elimino Modelo/Lote + Lote de ingenieria en cascada.
                                        // En la proxima ejecucion se agregara la version nueva.
                                        IngenieriaSql.del(ModeloLote.id);

                                        addModeloLote(lote.FullName, modelo.Name, loteNombre, loteHash, lote_fecha_modificacion, (int.Parse(ModeloLote.version) + 1).ToString());

                                        idlote.BackColor   = ColorTranslator.FromHtml("#FF0000");
                                        idmodelo.BackColor = ColorTranslator.FromHtml("#FF0000");

                                        dgvMain.Invoke((MethodInvoker)(() =>
                                                                       dgvMain.Rows.Add(modelo.Name + " " + loteNombre, loteHash, ModeloLote.hash, loteModificado + enuso)
                                                                       ));
                                    } // EN IF HASH
                                }     // END IF FECHA_MODIFICACION
                            }         // ENF IF MODELO NULL
                        }             // END FOREACH LOTE
                        bw.ReportProgress(countEstado);
                    }                 // END FOREACH MODELO

                    // Listo todos los modelos que NO se hallan listado en INGENIERIA pero si existen en SQL
                    List <Hash> Removidos = Hash.Database.FindAll(o => o.existe == false);
                    foreach (Hash removido in Removidos)
                    {
                        dgvMain.Invoke((MethodInvoker)(() =>
                                                       dgvMain.Rows.Add(removido.modelo + " " + removido.lote, "", removido.hash, "Removido de ingenieria " + removido.id)
                                                       ));
                    }
                }
                catch (Exception ex)
                {
                    logBox.Invoke((MethodInvoker)(() => logBox.Items.Add(ex.Message + " | " + DateTime.Now)));
                }
            }
            else
            {
                logBox.Invoke((MethodInvoker)(() => logBox.Items.Add("No se encontraron resultados de HASH en SMTDatabase")));
            }
        }