Ejemplo n.º 1
0
        public async Task <string> ProcesaConsultaStatusAsync(ICfdiMetodosWebService servicioTimbre)
        {
            string statusActual = string.Empty;

            try
            {
                String msj = String.Empty;
                trxVenta.Rewind();                                                          //move to first record

                int errores = 0;
                int i       = 0;
                cfdReglasFacturaXml LogComprobante = new cfdReglasFacturaXml(_Conex, _Param);     //log de facturas xml emitidas y anuladas
                string tipoMEstados = "DOCVENTA-" + trxVenta.EstadoContabilizado;
                trxVenta.CicloDeVida = new Maquina(trxVenta.EstadoActual, trxVenta.Regimen, trxVenta.Voidstts, "emisor", tipoMEstados);

                OnProgreso(1, "INICIANDO CONSULTA DE STATUS...");              //Notifica al suscriptor
                do
                {
                    msj = String.Empty;
                    try
                    {
                        trxVenta.ArmarDocElectronico(string.Empty);
                        statusActual = await servicioTimbre.ConsultaStatusAlOSEAsync(trxVenta.DocGP.DocVenta.consecutivoDocumento, trxVenta.Ruta_certificadoPac, trxVenta.Ruta_clavePac, trxVenta.DocGP.DocVenta.tipoDocumento, trxVenta.DocGP.DocVenta.prefijo, trxVenta.DocGP.DocVenta.consecutivoDocumento);

                        String[] codigoYMensaje = statusActual.Split(new char[] { '-' });
                        int      evento         = Maquina.eventoNoHaceNada;
                        //Determina evento en base al resultado del ws
                        switch (codigoYMensaje[0])
                        {
                        case "z01":
                            evento = Maquina.eventoAcuseAceptado;
                            break;

                        case "z02":
                            evento = Maquina.eventoAcuseRechazado;
                            break;

                        default:
                            evento = Maquina.eventoNoHaceNada;
                            break;
                        }
                        EjecutaEvento(evento, servicioTimbre, LogComprobante, 1);

                        msj = "Status: " + statusActual;
                    }
                    catch (Exception lo)
                    {
                        string imsj = lo.InnerException == null ? "" : lo.InnerException.ToString();
                        msj = lo.Message + " " + imsj + Environment.NewLine + lo.StackTrace;
                        errores++;
                    }
                    finally
                    {
                        OnProgreso(i * 100 / trxVenta.RowCount, "Doc:" + trxVenta.Sopnumbe + " " + msj.Trim() + Environment.NewLine);              //Notifica al suscriptor
                        i++;
                    }
                } while (trxVenta.MoveNext() && errores < 10);
            }
            catch (Exception xw)
            {
                string imsj = xw.InnerException == null ? "" : xw.InnerException.ToString();
                this.ultimoMensaje = xw.Message + " " + imsj + Environment.NewLine + xw.StackTrace;
            }
            finally
            {
                OnProgreso(100, ultimoMensaje);
            }
            OnProgreso(100, "PROCESO FINALIZADO!");
            return(statusActual);
        }
Ejemplo n.º 2
0
        public async Task <string> ProcesaConsultaStatusAsync(ICfdiMetodosWebService servicioTimbre)
        {
            string statusActual = string.Empty;
            String msj          = String.Empty;

            try
            {
                trxVenta.Rewind();                                                          //move to first record
                int    usuarioConAcceso = 1;
                int    numRegistros     = trxVenta.RowCount;
                string extension        = ".xml";
                int    errores          = 0;
                int    i = 0;
                cfdReglasFacturaXml LogComprobante = new cfdReglasFacturaXml(_Conex, _Param); //log de facturas xml emitidas y anuladas

                OnProgreso(1, "INICIANDO CONSULTA DE STATUS...");                             //Notifica al suscriptor
                do
                {
                    string tipoMEstados = "DOCVENTA-" + trxVenta.EstadoContabilizado;
                    trxVenta.CicloDeVida = new Maquina(trxVenta.EstadoActual, trxVenta.Regimen, trxVenta.Voidstts, "emisor", tipoMEstados);
                    msj = String.Empty;
                    cfdReglasEmail dirCorreos = new cfdReglasEmail(_Conex, _Param);

                    try
                    {
                        trxVenta.ArmarDocElectronico(string.Empty);
                        statusActual = await servicioTimbre.ConsultaStatusAlOSEAsync(trxVenta.DocGP.DocVenta.consecutivoDocumento, trxVenta.Ruta_certificadoPac, trxVenta.Ruta_clavePac, trxVenta.DocGP.DocVenta.tipoDocumento, trxVenta.DocGP.DocVenta.prefijo, trxVenta.DocGP.DocVenta.consecutivoDocumento);

                        String[] codigoYMensaje = statusActual.Split(new char[] { '-' });
                        int      evento         = Maquina.eventoNoHaceNada;
                        //Determina evento en base al resultado del ws
                        switch (codigoYMensaje[0])
                        {
                        //case "z01":
                        //    evento = Maquina.eventoAcuseAceptado;
                        //    EjecutaEvento(evento, servicioTimbre, LogComprobante, 1);
                        //    break;
                        //case "z02":
                        //    evento = Maquina.eventoAcuseRechazado;
                        //    EjecutaEvento(evento, servicioTimbre, LogComprobante, 1);
                        //    break;
                        case "200":
                            string nombreArchivo      = ArmaNombreDeArchivo() + "_" + Maquina.eventoDIANAcepta.ToString();
                            string rutaYNombreArchivo = string.Empty;

                            EjecutaEventoEmite(LogComprobante, nombreArchivo, extension, usuarioConAcceso);

                            string xmlFactura = await EjecutaEventoServicioImpuestosAceptaAsync(servicioTimbre, LogComprobante, nombreArchivo, extension, usuarioConAcceso);

                            rutaYNombreArchivo = await EjecutaEventoObtienePDFAsync(servicioTimbre, LogComprobante, nombreArchivo, usuarioConAcceso);

                            EjecutaEvento(Maquina.eventoEnviaCorreo, servicioTimbre, LogComprobante, usuarioConAcceso, string.Empty);
                            //    msj = await EjecutaEventoEnviaCorreoAsync(servicioTimbre, LogComprobante, dirCorreos, usuarioConAcceso);

                            break;

                        default:
                            evento = Maquina.eventoNoHaceNada;
                            EjecutaEvento(evento, servicioTimbre, LogComprobante, 1, string.Empty);
                            break;
                        }

                        msj = "Status: " + statusActual;
                    }
                    catch (Exception lo)
                    {
                        string imsj = lo.InnerException == null ? "" : lo.InnerException.ToString();
                        msj = lo.Message + " " + imsj + Environment.NewLine + lo.StackTrace;
                        errores++;
                    }
                    finally
                    {
                        i++;
                        OnProgreso(100 * i / numRegistros, "Doc:" + trxVenta.Sopnumbe + " " + msj.Trim() + Environment.NewLine);              //Notifica al suscriptor
                    }
                } while (trxVenta.MoveNext() && errores < 10);
            }
            catch (Exception xw)
            {
                msj = string.Concat(xw.Message, " ", xw?.InnerException?.Message, Environment.NewLine, xw.StackTrace);
            }
            finally
            {
                OnProgreso(100, msj);
            }
            OnProgreso(100, "PROCESO FINALIZADO!");
            return(statusActual);
        }
Ejemplo n.º 3
0
        public async Task <string> ProcesaConsultaStatusAsync(ICfdiMetodosWebService servicioTimbre)
        {
            string resultadoSunat = string.Empty;

            try
            {
                String msj      = String.Empty;
                String eBinario = String.Empty;
                trxVenta.Rewind();                                                          //move to first record

                int errores = 0;
                int i       = 1;
                cfdReglasFacturaXml DocVenta = new cfdReglasFacturaXml(_Conex, _Param);     //log de facturas xml emitidas y anuladas
                ReglasME            maquina  = new ReglasME(_Param);
                String accion = "CONSULTA STATUS";

                OnProgreso(1, "INICIANDO CONSULTA DE STATUS...");              //Notifica al suscriptor
                do
                {
                    msj = String.Empty;
                    String claseDocumento = !trxVenta.Docid.Equals("RESUMEN") ? _Param.tipoDoc : trxVenta.Docid;
                    try
                    {
                        String[] serieCorrelativo = trxVenta.Sopnumbe.Split(new char[] { '-' });

                        if (maquina.ValidaTransicion(claseDocumento, accion, trxVenta.EstadoActual))
                        {
                            if (trxVenta.Voidstts == 0 && trxVenta.EstadoContabilizado.Equals("contabilizado"))  //documento no anulado
                            {
                                string tipoDoc     = string.Empty;
                                string serie       = string.Empty;
                                string correlativo = string.Empty;

                                trxVenta.ArmarDocElectronico(string.Empty);
                                tipoDoc     = trxVenta.DocGP.DocVenta.tipoDocumento;
                                serie       = serieCorrelativo[0];
                                correlativo = serieCorrelativo[1];

                                resultadoSunat = await servicioTimbre.ConsultaStatusAlOSEAsync(trxVenta.DocGP.DocVenta.consecutivoDocumento, trxVenta.Ruta_certificadoPac, trxVenta.Contrasenia_clavePac, tipoDoc, serie, correlativo);

                                String[] codigoYMensaje = resultadoSunat.Split(new char[] { '-' });
                                maquina.DestinoAceptado = codigoYMensaje[0] == "0" ? true : false;
                                maquina.ActualizarNodoDestinoStatusBase();
                                DocVenta.RegistraLogDeArchivoXML(trxVenta.Soptype, trxVenta.Sopnumbe, codigoYMensaje[1], codigoYMensaje[0], _Conex.Usuario, accion, maquina.DestinoStatusBase, maquina.DestinoEBinario, accion + ":" + codigoYMensaje[0]);

                                if (codigoYMensaje[0].Equals("0") || int.Parse(codigoYMensaje[0]) > 1000)
                                {
                                    DocVenta.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, "emitido", "emitido", maquina.DestinoEBinario, maquina.DestinoMensaje, codigoYMensaje[0]);
                                }
                                msj = "Mensaje del OCE: " + resultadoSunat;
                            }
                        }
                    }
                    catch (Exception lo)
                    {
                        string imsj = lo.InnerException == null ? "" : lo.InnerException.ToString();
                        msj = lo.Message + " " + imsj + Environment.NewLine + lo.StackTrace;
                        errores++;
                    }
                    finally
                    {
                        OnProgreso(i * 100 / trxVenta.RowCount, "Doc:" + trxVenta.Sopnumbe + " " + msj.Trim() + " " + maquina.ultimoMensaje + Environment.NewLine);              //Notifica al suscriptor
                        i++;
                    }
                } while (trxVenta.MoveNext() && errores < 10);
            }
            catch (Exception xw)
            {
                string imsj = xw.InnerException == null ? "" : xw.InnerException.ToString();
                this.ultimoMensaje = xw.Message + " " + imsj + Environment.NewLine + xw.StackTrace;
            }
            finally
            {
                OnProgreso(100, ultimoMensaje);
            }
            OnProgreso(100, "PROCESO FINALIZADO!");
            return(resultadoSunat);
        }