Пример #1
0
        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() : ""));
                    }
                }
            }
        }
Пример #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;
            }
        }