Example #1
0
        private void GuardarResponseFactura(ResponseFactura response)
        {
            StringBuilder            sql        = new StringBuilder("UPDATE fehfe SET ");
            List <DBAxon.Parameters> parametros = new List <DBAxon.Parameters>();

            //Respuesta
            sql.Append("fehfecres=?, fehfetres=?, ");
            parametros.Add(new DBAxon.Parameters("cres", response.Respuesta.CodRespuesta, ParameterDirection.Input, DbType.String, 10));
            parametros.Add(new DBAxon.Parameters("tres", response.Respuesta.TxtRespuesta, ParameterDirection.Input, DbType.String, 200));

            //Proceso
            sql.Append("fehfeifee = ?, fehfecufd = ?, fehfecsta = ?, fehfectip = ?, ");
            parametros.Add(new DBAxon.Parameters("ifee", response.Proceso.IdDocFiscalFEEL, ParameterDirection.Input, DbType.String, 20));
            parametros.Add(new DBAxon.Parameters("cufd", response.Proceso.CUFD, ParameterDirection.Input, DbType.String, 100));
            parametros.Add(new DBAxon.Parameters("csta", response.Proceso.CodEstado, ParameterDirection.Input, DbType.String, 10));
            parametros.Add(new DBAxon.Parameters("ctip", response.Proceso.CodigoTipoFactura, ParameterDirection.Input, DbType.Int32));

            //Factura - Cabecera
            sql.Append("fehfefemi=?, fehfectdi=?, fehfeccuf=?, fehfecsuc=?, fehfecpve=?, fehfecdse=?, fehfecmpa=?, fehfeleye=?, fehfecmon=? , fehfestat=" + EstadoDocumentoFiscal.E102_ProcesadaCorrectamente.ToString() + " ");
            parametros.Add(new DBAxon.Parameters("femi", response.Factura.Cabecera.FechaEmision, ParameterDirection.Input, DbType.String, 20));
            parametros.Add(new DBAxon.Parameters("ctdi", response.Factura.Cabecera.CodigoTipoDocumentoIdentidad, ParameterDirection.Input, DbType.Int32));
            parametros.Add(new DBAxon.Parameters("ccuf", response.Factura.Cabecera.CUF, ParameterDirection.Input, DbType.String, 50));
            parametros.Add(new DBAxon.Parameters("csuc", response.Factura.Cabecera.CodigoSucursal, ParameterDirection.Input, DbType.Int32));
            parametros.Add(new DBAxon.Parameters("cpve", response.Factura.Cabecera.CodigoPuntoVenta, ParameterDirection.Input, DbType.Int32));
            parametros.Add(new DBAxon.Parameters("cdse", response.Factura.Cabecera.CodigoDocumentoSector, ParameterDirection.Input, DbType.Int32));
            parametros.Add(new DBAxon.Parameters("cmpa", response.Factura.Cabecera.CodigoMetodoPago, ParameterDirection.Input, DbType.Int16));
            parametros.Add(new DBAxon.Parameters("leye", response.Factura.Cabecera.Leyenda, ParameterDirection.Input, DbType.String, 200));
            parametros.Add(new DBAxon.Parameters("cmon", response.Factura.Cabecera.CodigoMoneda, ParameterDirection.Input, DbType.Int32));

            sql.Append(" WHERE fehfeiddf= ?;");
            parametros.Add(new DBAxon.Parameters("iddf", response.Proceso.IdDocFiscalERP, ParameterDirection.Input, DbType.Int32));

            //Factura - ListaDetalle
            dynamic factura = Convert.ChangeType(response.Factura, response.Factura.GetType());

            //sql.Append("UPDATE fedfe SET ");
            if (factura.Tipo != TipoFactura.notaExportacion)
            {
                foreach (var detalle in factura.ListaDetalle)
                {
                    sql.Append("UPDATE fedfe SET fedfeaeco=?, fedfecpsi=? WHERE fedfeiddf = ?;");
                    parametros.Add(new DBAxon.Parameters("aeco", detalle.ActividadEconomica, ParameterDirection.Input, DbType.Int32));
                    parametros.Add(new DBAxon.Parameters("cpsi", detalle.CodigoProductoSIN, ParameterDirection.Input, DbType.Int32));
                    parametros.Add(new DBAxon.Parameters("iddf", response.Proceso.IdDocFiscalERP, ParameterDirection.Input, DbType.Int32));
                }
            }
            else
            {
                foreach (var detalle in factura.ListaDetalle)
                {
                    sql.Append("UPDATE fedfe SET fedfeaeco=?, fedfecpsi=?, fedfecnan=? WHERE fedfeiddf = ?;");
                    parametros.Add(new DBAxon.Parameters("aeco", detalle.ActividadEconomica, ParameterDirection.Input, DbType.Int32));
                    parametros.Add(new DBAxon.Parameters("cpsi", detalle.CodigoProductoSIN, ParameterDirection.Input, DbType.Int32));
                    parametros.Add(new DBAxon.Parameters("cnan", detalle.CodigoNandina, ParameterDirection.Input, DbType.Int32));
                    parametros.Add(new DBAxon.Parameters("iddf", response.Proceso.IdDocFiscalERP, ParameterDirection.Input, DbType.Int32));
                }
            }

            //BD
            DBAxon db = new DBAxon();

            try
            {
                db.OpenFactoryConnection();
                db.BeginTransaction();
                db.SetLockModeToWait();
                db.PrepareCommand(true, CommandType.Text, sql.ToString(), parametros.ToArray());
                db.command.ExecuteNonQuery();
                db.CommitTransaction();
            }
            catch (Exception ex)
            {
                db.RollbackTransaction();
                db.ExecuteNonQuery(CommandType.Text, "UPDATE fehfe SET fehfestat=" + int.Parse(EstadoDocumentoFiscal.E100_PendienteDeEnvio.ToString()) + " WHERE fehfeiddf=" + response.Proceso.IdDocFiscalERP);
                throw new Exception("Excepcion: GuardarResponseFactura() - " + ex.Message);
            }
            finally
            {
                db.CloseFactoryConnection();
                db = null;
            }
        }
Example #2
0
        void ActualizarDocumentoFiscal(ResponseConsultaDocumentoFiscal responseConsultaDocumentoFiscal, DataRow facturaLocal)
        {
            dynamic facturaFEEL = Convert.ChangeType(responseConsultaDocumentoFiscal.Factura, responseConsultaDocumentoFiscal.Factura.GetType());

            List <DBAxon.Parameters> paramsCabecera = new List <DBAxon.Parameters>();
            string updCabecera = ConstruirUpdate(facturaFEEL.Cabecera, facturaFEEL.CamposDB, facturaLocal, "fehfe", "fehfeiddf", facturaLocal["fehfeiddf"].ToString(), out paramsCabecera);

            //Estado
            string updEstado = ConstruirUpdateEstado(responseConsultaDocumentoFiscal.Estado, facturaLocal["fehfecsta"].ToString(), facturaLocal["fehfeiddf"].ToString());

            //Detalle
            List <string> updsDetalle = new List <string>();
            DataTable     dt          = ObtenerListaDetalle(facturaLocal["fehfeiddf"].ToString());

            List <DBAxon.Parameters>[] paramsDetalles = new List <DBAxon.Parameters> [facturaFEEL.ListaDetalle.Count];

            if (dt != null && facturaFEEL.ListaDetalle.Count == dt.Rows.Count)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    paramsDetalles[i] = new List <DBAxon.Parameters>();
                    updsDetalle.Add(ConstruirUpdate(facturaFEEL.ListaDetalle[i], facturaFEEL.CamposDB, dt.Rows[i], "fedfe", "fedfeiddf", dt.Rows[i]["fedfeiddf"].ToString(), out paramsDetalles[i]));
                }
            }
            else
            {
                if (facturaFEEL.ListaDetalle.Count > 0)   //en caso de que haya una cantidad diferente en las listas de detalle
                {
                    updCabecera += "DELETE FROM fedfe WHERE fedfeiddf = ?;";
                    paramsCabecera.Add(new DBAxon.Parameters("iddf", facturaLocal["fehfeiddf"].ToString(), ParameterDirection.Input, DbType.Int32));

                    for (int i = 0; i < facturaFEEL.ListaDetalle.Count; i++)
                    {
                        paramsDetalles[i] = new List <DBAxon.Parameters>();
                        updsDetalle.Add(ConstruirInsert(facturaFEEL.ListaDetalle[i], facturaFEEL.CamposDB, "fedfe", "fedfeiddf", facturaLocal["fehfeiddf"].ToString(), out paramsDetalles[i]));
                    }
                }
            }

            bool   huboCambios = false;
            string sql         = string.Empty;
            List <DBAxon.Parameters> paramsGral = new List <DBAxon.Parameters>();
            DBAxon db = new DBAxon();

            try
            {
                db.OpenFactoryConnection();
                db.BeginTransaction();
                db.SetLockModeToWait();

                if (paramsCabecera.Count > 1) //Si hay diferencias, guardar
                {
                    paramsGral.AddRange(paramsCabecera.ToArray());
                    sql        += updCabecera.ToString();
                    huboCambios = true;
                }

                for (int i = 0; i < updsDetalle.Count; i++)
                {
                    if (paramsDetalles[i].Count > 1)
                    {
                        paramsGral.AddRange(paramsDetalles[i].ToArray());
                        sql        += updsDetalle[i].ToString();
                        huboCambios = true;
                    }
                }

                huboCambios = !string.IsNullOrEmpty(updEstado);

                if (huboCambios)   //agregar hora y fecha de corrección
                {
                    sql += "UPDATE fehfe SET fehfevfco = ?, fehfevhco = ?, fehfeecdf = ? WHERE fehfeiddf = ?;";
                    paramsGral.AddRange(new DBAxon.Parameters[] {
                        new DBAxon.Parameters("vfco", DateTime.Now, ParameterDirection.Input, DbType.Date),
                        new DBAxon.Parameters("vhco", DateTime.Now.ToString("HH:mm:ss"), ParameterDirection.Input, DbType.String, 8),
                        new DBAxon.Parameters("ecdf", EstadoDocumentoFiscal.E503_Actualizada, ParameterDirection.Input, DbType.Int32),
                        new DBAxon.Parameters("iddf", Convert.ToInt32(facturaLocal["fehfeiddf"].ToString()), ParameterDirection.Input, DbType.Int32)
                    });
                    if (!string.IsNullOrEmpty(updEstado))
                    {
                        sql += updEstado;
                    }
                    db.PrepareCommand(true, CommandType.Text, sql, paramsGral.ToArray());
                    db.command.ExecuteNonQuery();

                    GuardarLogDeCambios(sql, paramsGral, facturaLocal, dt);
                }
                db.CommitTransaction();
            }
            catch (Exception ex)
            {
                db.RollbackTransaction();
                throw new Exception("Excepción: ActualizarDocumentoFiscales()" + ex.Message);
            }
            finally
            {
                db.CloseFactoryConnection();
                db = null;
            }
        }