public void EjecutarProcesoConsultaDocumentoFiscal() { DataTable dt = null; try { dt = ObtenerFacturasAConsultar(); } catch (Exception ex) { Log.Instancia.LogWS_Mensaje_FSX(Log.Instancia.GeneraNombreLog(), "EjecutarProcesoConsultaDocumentoFiscal()|" + ex.Message); } if (dt != null && dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { RequestConsultaDocumentoFiscal req = new RequestConsultaDocumentoFiscal() { NITEmisor = long.Parse(dr["fehfenemi"].ToString()), CUF = dr["fehfeccuf"].ToString() }; ResponseConsultaDocumentoFiscal res = null; try { CambiarEstadoConsultaFactura(Convert.ToInt32(dr["fehfeiddf"].ToString()), EstadoDocumentoFiscal.E500_PendienteDeConsulta); #warning Quitar para producción //#if DEBUG res = ConsultarDocumentoFiscalAFEEL(req); //#else // res = new ResponseConsultaDocumentoFiscal(@"{""respuesta"": {""codRespuesta"": ""0"",""txtRespuesta"": ""Exito""},""estado"": ""D1"",""facturaEstandar"": {""cabecera"": {""numeroTarjeta"": 34567,""numeroFactura"": 200,""direccion"": ""Gualberto villarroel 123"",""fechaEmision"": ""20190101180000"",""codigoTipoDocumentoIdentidad"": ""1"",""cuf"": ""357042F1C7B1E5730E7371B6EDAB9F7B4CB54D06"",""numeroDocumento"": ""5642111"",""complemento"": """",""codigoSucursal"": 0,""codigoPuntoVenta"": 0,""nombreRazonSocial"": ""Juan Perez"",""codigoMoneda"": 1,""montoTotal"": 50.5,""codigoCliente"": ""55421"",""montoTotalMoneda"": 50.5,""tipoCambio"": 6.97,""codigoDocumentoSector"": 1,""nitEmisor"": 305080026,""codigoMetodoPago"": 1,""montoDescuento"": 1.0,""leyenda"": ""Ley N° 453: Los medios de comunicación deben promover el respeto de los derechos de los usuarios y consumidores."",""usuario"": ""FTL""},""detalle"": [{""actividadEconomica"": 123123,""codigoProductoSin"": 123,""codigoProducto"": 123,""descripcion"": ""Fanta 1 litro"",""subTotal"": 10.0,""montoDescuento"": null,""unidadMedida"": ""botella""},{""actividadEconomica"": 123123,""codigoProductoSin"": 124,""codigoProducto"": 124,""descripcion"": ""lenteja vegana"",""subTotal"": 10.0,""montoDescuento"": null,""unidadMedida"": ""lenteja""}]}}"); // //res = new ResponseConsultaDocumentoFiscal(@"{""respuesta"": {""codRespuesta"": ""0"",""txtRespuesta"": ""Exito""},""estado"": ""D1"",""facturaEstandar"": {""cabecera"": {""numeroTarjeta"": 1467,""numeroFactura"": 200,""direccion"": ""Gualberto villarroel 123"",""fechaEmision"": ""20190101180000"",""codigoTipoDocumentoIdentidad"": ""1"",""cuf"": ""357042F1C7B1E5730E7371B6EDAB9F7B4CB54D06"",""numeroDocumento"": ""5642111"",""complemento"": """",""codigoSucursal"": 0,""codigoPuntoVenta"": 0,""nombreRazonSocial"": ""Juan Perez"",""codigoMoneda"": 1,""montoTotal"": 50.5,""codigoCliente"": ""55421"",""montoTotalMoneda"": 50.5,""tipoCambio"": 6.97,""codigoDocumentoSector"": 1,""nitEmisor"": 305080026,""codigoMetodoPago"": 1,""montoDescuento"": 1.0,""leyenda"": ""Ley N° 453: Los medios de comunicación deben promover el respeto de los derechos de los usuarios y consumidores."",""usuario"": ""FTL""},""detalle"": [{""actividadEconomica"": 123123,""codigoProductoSin"": 123,""codigoProducto"": 123,""descripcion"": ""Fanta 1 litro"",""subTotal"": 10.0,""montoDescuento"": null,""unidadMedida"": ""botella""},{""actividadEconomica"": 123123,""codigoProductoSin"": 124,""codigoProducto"": 124,""descripcion"": ""lenteja vegana"",""subTotal"": 10.0,""montoDescuento"": null,""unidadMedida"": ""lenteja""},{""actividadEconomica"": 123123,""codigoProductoSin"": 124,""codigoProducto"": 124,""descripcion"": ""beyond meat"",""subTotal"": 10.0,""montoDescuento"": null,""unidadMedida"": ""microgramo""}]}}"); //#endif if (res.Respuesta.CodRespuesta == "0") { ActualizarDocumentoFiscal(res, dr); } else { CambiarEstadoConsultaFactura(Convert.ToInt32(dr["fehfeiddf"].ToString()), EstadoDocumentoFiscal.E502_RespuestaConsultaError); Log.Instancia.LogWS_Mensaje_FSX(Log.Instancia.GeneraNombreLog(), "EjecutarProcesoConsultaDocumentoFiscal()|Ocurrio un error en FEEL al solicitar una factura|Request:" + req.ToString() + "|Response:" + res.ToString()); } } catch (Exception ex) { Log.Instancia.LogWS_Mensaje_FSX(Log.Instancia.GeneraNombreLog(), "EjecutarProcesoConsultaDocumentoFiscal()|" + ex.Message + "|Request:" + req.ToString() + ((res != null) ? "|Response:" + res.ToString() : "")); } } } }
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; } }