예제 #1
0
        private void pPostEndPoint(DataTable datos, string llave, string node, Data.clsSincronizar objDal, string strSpu, Int64 idTablaSincronizada)
        {
            string        JSon     = "";
            string        EndPoint = "";
            clsParametros param    = new clsParametros();

            try
            {
                //OBTIENE LOS DATOS DEL NODO
                EndPoint = param.FireBaseDb + "/" + param.FireBaseCoreData;
                FirebaseDB firebaseDBGet = new FirebaseDB(EndPoint);

                // se recorre
                foreach (DataRow row in datos.Rows)
                {
                    try
                    {
                        DataTable dtRow = datos.Clone();
                        dtRow.LoadDataRow(row.ItemArray, true);

                        FirebaseDB       firebaseDBGetNode = firebaseDBGet.NodePath(node + "/" + row[llave].ToString());
                        FirebaseResponse getResponse       = firebaseDBGetNode.Get();

                        if (getResponse.JSONContent != "null")
                        {
                            // el contenido trae datos del GET
                            // elimina el nodo
                            FirebaseResponse delResponse = firebaseDBGetNode.Delete();

                            if (delResponse.Success)
                            {
                                funciones.Mensaje("response delete existing :" + row[llave].ToString());
                            }
                        }

                        JSon = JsonConvert.SerializeObject(funciones.DatatableToDictionary(dtRow, llave), Newtonsoft.Json.Formatting.Indented);

                        ////post
                        FirebaseDB firebaseDB     = new FirebaseDB(EndPoint);
                        FirebaseDB firebaseDBNode = firebaseDB.NodePath(node);

                        FirebaseResponse patchResponse = firebaseDBNode.Patch(JSon);

                        if (patchResponse.Success)
                        {
                            funciones.Mensaje("datos grabados :" + row[llave].ToString());

                            //marcar la fila en la base de datos para no volver a sincronizar
                            //marca la tabla para no volverla a sincronizar
                            Boolean actulizado = objDal.fnSet(strSpu, idTablaSincronizada, Convert.ToInt64(row["id_sinc_proc"].ToString()));
                        }
                        else
                        {
                            funciones.Mensaje("response failed :" + patchResponse.ErrorMessage.ToString());
                        }
                    }
                    catch (Exception ex)
                    {
                        string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
                        funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
                funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString());
            }
        }
예제 #2
0
        // lee los datos de una ubicacion non-sql y la graba en el servidor local
        private void pPostLocalFromNonSql(string node, string strSpi, string strOrdenParametros)
        {
            string        EndPoint = "";
            clsParametros param    = new clsParametros();

            Data.clsSincronizar objDal = new Data.clsSincronizar(param.StringDeConexion);

            try
            {
                //OBTIENE LOS DATOS DEL NODO
                EndPoint = param.FireBaseDb + "/" + param.FireBaseAppData;
                FirebaseDB       firebaseDBGet     = new FirebaseDB(EndPoint);
                FirebaseDB       firebaseDBGetNode = firebaseDBGet.NodePath(node);
                FirebaseResponse getResponse       = firebaseDBGetNode.Get();
                if (getResponse.JSONContent != "null")
                {
                    //recpuera los valores del nodo
                    string  jsonstr = getResponse.JSONContent.ToString();
                    JObject Obj     = JObject.Parse(jsonstr);

                    //recorre los valores del nodo en arreglos
                    foreach (JToken arreglo in Obj.SelectToken("$"))
                    {
                        if (arreglo.HasValues)
                        {
                            //se recorren los cada uno de las llaves nivel 2
                            foreach (JObject tupla in arreglo.Children <JObject>())
                            {
                                try
                                {
                                    string LlaveNivel1 = tupla.Path.ToString();

                                    //recorre los valores
                                    foreach (JProperty prop in tupla.Properties())
                                    {
                                        string  LlaveNivel2 = prop.Name;
                                        JObject item        = JObject.Parse(prop.Value.ToString());

                                        List <OleDbParameter> Parametros = new List <OleDbParameter>();

                                        foreach (JProperty registro in item.Properties())
                                        {
                                            string campo    = registro.Name;
                                            string tipoDato = registro.Value.Type.ToString().ToUpper();

                                            OleDbParameter itemParam = new OleDbParameter();

                                            itemParam.ParameterName = "@" + campo;
                                            switch (tipoDato)
                                            {
                                            case "FLOAT":
                                                itemParam.OleDbType = OleDbType.Decimal;
                                                break;

                                            case "STRING":
                                                itemParam.OleDbType = OleDbType.VarChar;
                                                break;

                                            case "OBJECT":
                                                itemParam.OleDbType = OleDbType.VarChar;
                                                break;

                                            case "INTEGER":
                                                itemParam.OleDbType = OleDbType.Integer;
                                                break;

                                            default:
                                                break;
                                            }

                                            itemParam.Value = (tipoDato == "OBJECT") ? registro.Value.ToString() : registro.Value;

                                            Parametros.Add(itemParam);
                                        }

                                        if (Parametros.Count != 0)
                                        {
                                            DataTable dtResultado        = new DataTable();
                                            Int64     RegistroInsertados = 0;
                                            string    strCodAccion       = "";

                                            dtResultado = OrdenarParametrosYGrabar(Parametros, LlaveNivel1, LlaveNivel2, strOrdenParametros, objDal, strSpi, node);

                                            RegistroInsertados = Convert.ToInt64(dtResultado.Rows[0]["REGISTROS"].ToString());
                                            strCodAccion       = dtResultado.Rows[0]["COD_ACCION"].ToString();

                                            if (RegistroInsertados != 0)
                                            {
                                                funciones.Mensaje("Registros (" + RegistroInsertados.ToString() + ")  grabados de :" + node + " | " + LlaveNivel1.ToString() + " | " + LlaveNivel2.ToString());
                                            }

                                            // acciones a tomar con los nodos despues de insertados los datos
                                            switch (strCodAccion)
                                            {
                                            case "ELIMINAR_SI":
                                                //elimina el insertado
                                                FirebaseDB       firebaseDBNode = firebaseDBGet.NodePath(node + "/" + LlaveNivel1 + "/" + LlaveNivel2);
                                                FirebaseResponse delResponse    = firebaseDBNode.Delete();

                                                if (delResponse.Success)
                                                {
                                                    funciones.Mensaje("elimina datos en :" + node + "|" + LlaveNivel1.ToString() + "|" + LlaveNivel2.ToString());
                                                }

                                                break;

                                            default:
                                                break;
                                            }
                                        }
                                    }
                                } // try for each
                                catch (Exception ex)
                                {
                                    string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
                                    funciones.Mensaje("ERR AL PROCESAR : " + arreglo.ToString() + " Exeption " + ex.ToString());
                                } // catch
                            }     // for each jobj tupla
                        }         // if arreglo has values
                    }             // for each arreglo in ojb
                }                 // if get response
                else
                {
                    funciones.Mensaje("Sin datos que actualizar :" + node);
                }
            }
            catch (Exception ex)
            {
                string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
                funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString());
            }
        }
예제 #3
0
        public void CorrimientoAsignacion()
        {
            string        EndPoint = "";
            clsParametros param    = new clsParametros();

            funciones.Mensaje("PROC_CORRIMIENTO_ASIGNACION Corrimiento por reasignación de fechas");

            try
            {
                //OBTIENE LOS DATOS DEL NODO
                EndPoint = param.FireBaseDb + "/" + param.FireBaseAppData + "/employee_tasks";
                FirebaseDB       firebaseDBGet = new FirebaseDB(EndPoint);
                FirebaseResponse getResponse   = firebaseDBGet.Get();

                if (getResponse.JSONContent != "null")
                {
                    //con datos
                    //recpuera los valores del nodo
                    string  jsonstr = getResponse.JSONContent.ToString();
                    JObject Obj     = JObject.Parse(jsonstr);

                    //recorre los valores del nodo en arreglos
                    foreach (JToken arreglo in Obj.SelectToken("$"))
                    {
                        if (arreglo.HasValues)
                        {
                            //se recorren los cada uno de las llaves nivel 2
                            foreach (JObject tupla in arreglo.Children <JObject>())
                            {
                                try
                                {
                                    string LlaveNivel1 = tupla.Path.ToString();

                                    //recorre los valores
                                    foreach (JProperty prop in tupla.Properties())
                                    {
                                        string  LlaveNivel2 = prop.Name;
                                        JObject item        = JObject.Parse(prop.Value.ToString());
                                        int     finalizado  = 0;

                                        List <OleDbParameter> Parametros = new List <OleDbParameter>();

                                        //determina si la tarea esta finalizada
                                        //para hacer el corrimiento
                                        finalizado = Convert.ToInt16(item.Property("finalizado").Value.ToString());

                                        if (finalizado == 0)
                                        {
                                            //verifica la fecha
                                            string fechaInicio = item.Property("fecha_inicio").Value.ToString();
                                            string fechaParse  = fechaInicio.Substring(0, 4) + "-" + // año
                                                                 fechaInicio.Substring(4, 2) + "-" + // mes
                                                                 fechaInicio.Substring(6, 2) + " " + // dia
                                                                 fechaInicio.Substring(9, 8);        // hora

                                            DateTime fechaMov;
                                            DateTime.TryParse(fechaParse, out fechaMov);
                                            Double dias = Math.Floor((DateTime.Now - fechaMov).TotalDays);
                                            if (dias > 0)
                                            {
                                                // existe corrimiento
                                                //leva los dias la fecha del dia
                                                fechaMov = fechaMov.AddDays(Convert.ToInt64(dias));

                                                //parsea para devolver datos
                                                string fechaNueva = fechaMov.ToString("yyyyMMdd HH:MM:ss");
                                                item.Property("fecha_inicio").Value = fechaNueva;

                                                string ItemNuevo = item.ToString();

                                                ////put (solo remplaza)
                                                FirebaseDB firebaseDB     = new FirebaseDB(EndPoint);
                                                FirebaseDB firebaseDBNode = firebaseDB.NodePath(LlaveNivel1 + "/" + LlaveNivel2);

                                                FirebaseResponse putResponse = firebaseDBNode.Put(ItemNuevo);

                                                if (putResponse.Success)
                                                {
                                                    funciones.Mensaje("Se procesó una reasignación por fecha anterior " + LlaveNivel1 + "/" + LlaveNivel2);
                                                }
                                                else
                                                {
                                                    funciones.Mensaje("response failed :" + putResponse.ErrorMessage.ToString());
                                                }
                                            } //if (dias > 0)
                                        }     //if (finalizado == 0)
                                    }     // foreach (JProperty prop in tupla.Properties())
                                }    // try for each
                                catch (Exception ex)
                                {
                                    string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
                                    funciones.Mensaje("ERR AL PROCESAR : " + arreglo.ToString() + " Exeption " + ex.ToString());
                                } // catch
                            }     // for each jobj tupla
                        }         // if arreglo has values
                    }             // for each arreglo in ojb
                }                 //if (getResponse.JSONContent != "null")
            }
            catch (Exception ex)
            {
                string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
                funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString());
            }
        }
예제 #4
0
        public void CoreData()
        {
            try
            {
                funciones.Mensaje("SYNC_CORE_DATA Sincronizando a CORE_DATA");
                //leer las tablas que necesitan actualizarse
                clsParametros clsParametros    = new clsParametros();
                string        StringDeConexion = clsParametros.StringDeConexion;

                DataTable           dtResultado = new DataTable();
                Data.clsSincronizar objDal      = new Data.clsSincronizar(StringDeConexion);

                dtResultado = objDal.fnGetTablasSincronizar();

                if (dtResultado != null && dtResultado.Rows.Count > 0)
                {
                    //recorre la tabla para llamar cada sp y enviar a sincronizar a firebase
                    foreach (DataRow row in dtResultado.Rows)
                    {
                        Int64  id       = row["id"] != DBNull.Value ? Convert.ToInt64(row["id"]) : 0;
                        string strSpc   = row["nombre_spc"] != DBNull.Value ? Convert.ToString(row["nombre_spc"]) : "";
                        string strSpu   = row["nombre_spu"] != DBNull.Value ? Convert.ToString(row["nombre_spu"]) : "";
                        string strTbl   = row["objeto"] != DBNull.Value ? Convert.ToString(row["objeto"]) : "";
                        string strLlave = row["llave"] != DBNull.Value ? Convert.ToString(row["llave"]) : "";
                        string strNode  = row["node_destino"] != DBNull.Value ? Convert.ToString(row["node_destino"]) : "";

                        if (strSpc == "" || strTbl == "" || strLlave == "" || strNode == "" || strSpu == "")
                        {
                            funciones.Mensaje("No se especifico nombre de tabla, SPC, llave o Node verifique ");
                        }
                        else
                        {
                            funciones.Mensaje("Leyendo datos de: " + strTbl + ' ' + strSpc);

                            //se manda a llamar el spc
                            DataTable dtDatos = new DataTable();

                            dtDatos = objDal.fnGetDatosGenericos(strSpc);

                            if (dtDatos != null && dtDatos.Rows.Count > 0)
                            {
                                //tiene datos los manda a EndPoint
                                //dtDatos -- lleva en conjunto de datos pendiente de sincronizar, lo que devuelve el spc
                                //strLlave -- lo que usara para grabar los datos en firebase como llave, es lo mismo que esta en el Db2
                                //obDal -- servira para llamar el spu
                                //strSpu -- spu de actualización de la tupla sincronizada
                                //id -- id del proceso o tabla que se esta sincronizando corresponde a app_tbl_tablas_sinc
                                pPostEndPoint(dtDatos, strLlave, strNode, objDal, strSpu, id);
                            }
                            else
                            {
                                funciones.Mensaje("Sin datos en  " + strSpc);
                            }
                        }
                    }
                }
                else
                {
                    funciones.Mensaje("Sin datos que sincronizar");
                }
            }
            catch (Exception ex)
            {
                string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
                funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString());
                //throw new Exception(lStrMethodName, ex);
            }

            //Console.ReadLine();
        }
예제 #5
0
        public void RemoteToLocal()
        {
            try
            {
                funciones.Mensaje("SYNC_REMOTE_LOCAL Sincronizando de REMOTE a LOCAL");

                //leer las tablas que necesitan actualizarse
                clsParametros clsParametros          = new clsParametros();
                string        StringDeConexionRemoto = clsParametros.StringDeConexionRemoto;

                DataTable           dtResultado = new DataTable();
                Data.clsSincronizar objDal      = new Data.clsSincronizar(StringDeConexionRemoto);

                dtResultado = objDal.fnGetTablasSincronizar();

                if (dtResultado != null && dtResultado.Rows.Count > 0)
                {
                    //recorre la tabla para llamar cada sp y enviar a sincronizar a firebase
                    foreach (DataRow row in dtResultado.Rows)
                    {
                        Int64  id     = row["id"] != DBNull.Value ? Convert.ToInt64(row["id"]) : 0;
                        string strSpc = row["nombre_spc"] != DBNull.Value ? Convert.ToString(row["nombre_spc"]) : "";
                        string strSpu = row["nombre_spu"] != DBNull.Value ? Convert.ToString(row["nombre_spu"]) : "";
                        string strTbl = row["objeto"] != DBNull.Value ? Convert.ToString(row["objeto"]) : "";
                        string strSpi = row["nombre_spi_destino"] != DBNull.Value ? Convert.ToString(row["nombre_spi_destino"]) : "";

                        if (strSpc == "" || strTbl == "" || strSpi == "" || strSpu == "")
                        {
                            funciones.Mensaje("No se especifico nombre de tabla, SPC, spi, spu en tabla sincronizacion remota ");
                        }
                        else
                        {
                            funciones.Mensaje("Leyendo datos remotos de: " + strTbl + ' ' + strSpc);

                            //se manda a llamar el spc
                            DataTable dtDatos = new DataTable();

                            dtDatos = objDal.fnGetDatosGenericos(strSpc);

                            if (dtDatos != null && dtDatos.Rows.Count > 0)
                            {
                                //pega los datos en el servidor local
                                pPostLocal(id, dtDatos, strSpi, strSpu);
                            }
                            else
                            {
                                funciones.Mensaje("Sin datos en  " + strSpc);
                            }
                        }
                    }
                }
                else
                {
                    funciones.Mensaje("Sin datos que sincronizar");
                }
            }
            catch (Exception ex)
            {
                string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
                funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString());
                //throw new Exception(lStrMethodName, ex);
            }

            funciones.Mensaje("Fin de la sincronizacion ");
            //Console.ReadLine();
        }