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; } }
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; } }