private void EjecutaEventoServicioImpuestosRechaza(cfdReglasFacturaXml LogComprobante) { if (trxVenta.CicloDeVida.Transiciona(Maquina.eventoDIANRechaza, 1)) { LogComprobante.RegistraLogDeArchivoXML(trxVenta.Soptype, trxVenta.Sopnumbe, Maquina.eventoDIANRechaza.ToString(), trxVenta.CicloDeVida.idxTargetSingleStatus.ToString(), _Conex.Usuario, string.Empty, trxVenta.CicloDeVida.targetSingleStatus, trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus)); LogComprobante.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, Maquina.estadoBaseEmisor, Maquina.estadoBaseEmisor, trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus), trxVenta.CicloDeVida.idxTargetSingleStatus.ToString()); } }
private void EjecutaEvento(int Evento, ICfdiMetodosWebService servicioTimbre, cfdReglasFacturaXml LogComprobante, int usuarioConAcceso, string docXml) { if (trxVenta.CicloDeVida.Transiciona(Evento, usuarioConAcceso)) { LogComprobante.RegistraLogDeArchivoXML(trxVenta.Soptype, trxVenta.Sopnumbe, Evento.ToString(), trxVenta.CicloDeVida.idxTargetSingleStatus.ToString(), _Conex.Usuario, docXml, trxVenta.CicloDeVida.targetSingleStatus, trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus)); LogComprobante.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, Maquina.estadoBaseEmisor, Maquina.estadoBaseEmisor, trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus), trxVenta.CicloDeVida.idxTargetSingleStatus.ToString()); } }
private void EjecutaEventoServicioImpuestosAcepta(ICfdiMetodosWebService servicioTimbre, cfdReglasFacturaXml LogComprobante, int usuarioConAcceso, string xmlFactura) { if (trxVenta.CicloDeVida.Transiciona(Maquina.eventoDIANAcepta, usuarioConAcceso)) { LogComprobante.RegistraLogDeArchivoXML(trxVenta.Soptype, trxVenta.Sopnumbe, Maquina.eventoDIANAcepta.ToString(), trxVenta.CicloDeVida.idxTargetSingleStatus.ToString(), _Conex.Usuario, xmlFactura.Replace("encoding=\"utf-8\"", "").Replace("encoding=\"UTF-8\"", "").Replace("encoding=\"iso-8859-1\"", ""), trxVenta.CicloDeVida.targetSingleStatus, trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus)); LogComprobante.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, Maquina.estadoBaseEmisor, Maquina.estadoBaseEmisor, trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus), trxVenta.CicloDeVida.idxTargetSingleStatus.ToString()); } }
/// <summary> /// Ejecuta la generación de pdfs en un thread independiente /// </summary> /// <param name="e">trxVentas</param> protected override void OnDoWork(DoWorkEventArgs e) { ReportProgress(0, "Iniciando proceso...\r\n"); object[] args = e.Argument as object[]; vwCfdTransaccionesDeVenta trxVenta = (vwCfdTransaccionesDeVenta)args[0]; int i = 1; int errores = 0; string eBinario = ""; string eBase = ""; string msj = ""; cfdReglasFacturaXml DocumentoEmitido = new cfdReglasFacturaXml(_Conex, _Param); //log de facturas xml emitidas y anuladas ReglasME maquina = new ReglasME(_Param); if (DocumentoEmitido.numMensajeError != 0) { e.Result = DocumentoEmitido.ultimoMensaje + "\r\n"; ReportProgress(100, DocumentoEmitido.ultimoMensaje + "\r\n"); return; } trxVenta.Rewind(); //move to first record do { if (CancellationPending) { e.Cancel = true; return; } msj = ""; if (maquina.ValidaTransicion(_Param.tipoDoc, "IMPRIME PDF", trxVenta.EstadoActual, "impreso")) if (trxVenta.Voidstts == 0 && trxVenta.EstadoContabilizado.Equals("contabilizado")) //no anulado y contabilizado { if (!_Param.emite && !maquina.impreso(trxVenta.EstadoActual)) eBase = "emitido"; else eBase = "impreso"; //Si no emite y es primera impresión: guardar el archivo pdf y registrar el log: emitido //sino: registrar el log impreso if (DocumentoEmitido.AlmacenaEnRepositorio(trxVenta, eBase, maquina.eBinarioNuevo, maquina.EnLetras(maquina.eBinarioNuevo, _Param.tipoDoc))) { eBinario = maquina.eBinarioNuevo; } else { eBinario = maquina.eBinActualConError; errores++; } if (_Param.emite && !maquina.impreso(trxVenta.EstadoActual)) DocumentoEmitido.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, "emitido", "emitido", eBinario, maquina.EnLetras(eBinario, _Param.tipoDoc) + DocumentoEmitido.ultimoMensaje, String.Empty); } else msj = "No se puede generar porque no está Contabilizado o está Anulado."; ReportProgress(i * 100 / trxVenta.RowCount, "Doc:" + trxVenta.Sopnumbe + " " + DocumentoEmitido.ultimoMensaje + maquina.ultimoMensaje + msj + "\r\n"); i++; } while (trxVenta.MoveNext() && errores < 10); e.Result = "Generación de Pdfs finalizado! \r\n"; ReportProgress(100, ""); }
/// <summary> /// Ejecuta el envío de correos en un thread independiente /// </summary> /// <param name="e">trxVentas</param> protected override void OnDoWork(DoWorkEventArgs e) { int errores = 0; int i = 1; string asunto = ""; string cuerpo = ""; ReportProgress(0, "Iniciando proceso...\r\n"); object[] args = e.Argument as object[]; vwCfdTransaccionesDeVenta trxVenta = (vwCfdTransaccionesDeVenta)args[0]; cfdReglasEmail cliente = new cfdReglasEmail(_Conex, _Param); if (!cliente.SeccionesEmail(ref asunto, ref cuerpo)) { e.Result = "No puede enviar e-mails \r\n"; ReportProgress(100, cliente.ultimoMensaje + "\r\n"); return; } //log de facturas xml emitidas y anuladas cfdReglasFacturaXml doc = new cfdReglasFacturaXml(_Conex, _Param); EmailSmtp mail = new EmailSmtp(_Param.emailSmtp, _Param.emailPort, _Param.emailUser, _Param.emailPwd, _Param.emailSsl); ReglasME maquina = new ReglasME(_Param); string eBinario = ""; trxVenta.Rewind(); //move to first record do { if (CancellationPending) { e.Cancel = true; return; } if (trxVenta.Voidstts == 0) //documento no anulado { if (maquina.ValidaTransicion(_Param.tipoDoc, "ENVIA EMAIL", trxVenta.EstadoActual, "enviado")) { if (!cliente.ProcesaEnvioMail(mail, trxVenta.CUSTNMBR, trxVenta.Docid, trxVenta.Soptype, trxVenta.Sopnumbe, trxVenta.NombreCliente, trxVenta.EstadoActual, maquina.eBinarioNuevo, trxVenta.Mensaje, asunto, cuerpo)) { eBinario = maquina.eBinActualConError; errores++; } else { eBinario = maquina.eBinarioNuevo; } doc.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, "emitido", "emitido", eBinario, maquina.EnLetras(eBinario) + cliente.ultimoMensaje); } } ReportProgress(i * 100 / trxVenta.RowCount, "Doc:" + trxVenta.Sopnumbe + " " + cliente.ultimoMensaje + maquina.ultimoMensaje + "\r\n"); i++; cliente.ultimoMensaje = ""; } while (trxVenta.MoveNext() && errores < 10); e.Result = "Envío de Emails finalizado! \r\n"; ReportProgress(100, ""); }
private async Task <string> EjecutaEventoObtienePDFAsync(ICfdiMetodosWebService servicioTimbre, cfdReglasFacturaXml LogComprobante, string nombreArchivo, int usuarioConAcceso) { string rutaYNombreArchivo = string.Empty; if (trxVenta.CicloDeVida.Transiciona(Maquina.eventoObtienePDF, usuarioConAcceso)) { rutaYNombreArchivo = await servicioTimbre.ObtienePDFdelOSEAsync(trxVenta.DocGP.DocVenta.cliente_numeroIdentificacion, trxVenta.Ruta_certificadoPac, trxVenta.Ruta_clavePac, trxVenta.DocGP.DocVenta.tipoDocumento, trxVenta.DocGP.DocVenta.prefijo, trxVenta.DocGP.DocVenta.consecutivoDocumento, trxVenta.RutaXml.Trim(), nombreArchivo, ".pdf"); LogComprobante.RegistraLogDeArchivoXML(trxVenta.Soptype, trxVenta.Sopnumbe, rutaYNombreArchivo, trxVenta.CicloDeVida.idxTargetSingleStatus.ToString(), _Conex.Usuario, string.Empty, trxVenta.CicloDeVida.targetSingleStatus, trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus)); LogComprobante.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, Maquina.estadoBaseEmisor, Maquina.estadoBaseEmisor, trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus), trxVenta.CicloDeVida.idxTargetSingleStatus.ToString()); } return(rutaYNombreArchivo); }
private async Task <string> EjecutaEventoServicioImpuestosAceptaAsync(ICfdiMetodosWebService servicioTimbre, cfdReglasFacturaXml LogComprobante, string nombreArchivo, string extension, int usuarioConAcceso) { string rutaYNombreArchivo = string.Empty; string xmlFactura = string.Empty; if (trxVenta.CicloDeVida.Transiciona(Maquina.eventoDIANAcepta, usuarioConAcceso)) { xmlFactura = await servicioTimbre.ObtieneXMLdelOSEAsync(trxVenta.DocGP.DocVenta.cliente_numeroIdentificacion, trxVenta.Ruta_certificadoPac, trxVenta.Ruta_clavePac, trxVenta.DocGP.DocVenta.tipoDocumento, trxVenta.DocGP.DocVenta.prefijo, trxVenta.DocGP.DocVenta.consecutivoDocumento); if (!string.IsNullOrEmpty(xmlFactura)) { rutaYNombreArchivo = await LogComprobante.GuardaArchivoAsync(trxVenta, xmlFactura, nombreArchivo, extension, false); } LogComprobante.RegistraLogDeArchivoXML(trxVenta.Soptype, trxVenta.Sopnumbe, rutaYNombreArchivo, trxVenta.CicloDeVida.idxTargetSingleStatus.ToString(), _Conex.Usuario, xmlFactura.Replace("encoding=\"utf-8\"", "").Replace("encoding=\"UTF-8\"", "").Replace("encoding=\"iso-8859-1\"", ""), trxVenta.CicloDeVida.targetSingleStatus, trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus)); LogComprobante.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, Maquina.estadoBaseEmisor, Maquina.estadoBaseEmisor, trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus), trxVenta.CicloDeVida.idxTargetSingleStatus.ToString()); } return(xmlFactura); }
private async Task <string> EjecutaEventoEnviaCorreoAsync(ICfdiMetodosWebService servicioTimbre, cfdReglasFacturaXml LogComprobante, cfdReglasEmail dirCorreos, int usuarioConAcceso) { string resultado = string.Empty; if (trxVenta.CicloDeVida.Transiciona(Maquina.eventoEnviaCorreo, usuarioConAcceso)) { DireccionesEmail dir = dirCorreos.ObtieneDirecciones(trxVenta.CUSTNMBR); string correos = string.Concat(Utiles.Derecha(dir.mailTo, dir.mailTo.Length - 1), dir.mailCC, dir.mailCCO); String[] acorreos = correos.Split(new char[] { ',' }); if (acorreos.Count() > 0) { resultado = await servicioTimbre.EnviaCorreoAsync(trxVenta.DocGP.DocVenta.cliente_numeroIdentificacion, trxVenta.Ruta_certificadoPac, trxVenta.Ruta_clavePac, trxVenta.DocGP.DocVenta.prefijo, trxVenta.DocGP.DocVenta.consecutivoDocumento, acorreos[0]); LogComprobante.RegistraLogDeArchivoXML(trxVenta.Soptype, trxVenta.Sopnumbe, resultado, trxVenta.CicloDeVida.idxTargetSingleStatus.ToString(), _Conex.Usuario, string.Empty, trxVenta.CicloDeVida.targetSingleStatus, trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus)); LogComprobante.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, Maquina.estadoBaseEmisor, Maquina.estadoBaseEmisor, trxVenta.CicloDeVida.targetBinStatus, trxVenta.CicloDeVida.EstadoEnPalabras(trxVenta.CicloDeVida.targetBinStatus), trxVenta.CicloDeVida.idxTargetSingleStatus.ToString()); } else { resultado = "El cliente no tiene una dirección de correo configurada."; } } return(resultado); }
public async Task ProcesaBajaComprobanteAsync(String motivoBaja, ICfdiMetodosWebService servicioTimbre) { 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); OnProgreso(1, "INICIANDO BAJA DE DOCUMENTO..."); //Notifica al suscriptor do { msj = String.Empty; try { String accion = "BAJA"; if (maquina.ValidaTransicion(_Param.tipoDoc, accion, trxVenta.EstadoActual)) { eBinario = maquina.eBinarioNuevo; trxVenta.ArmarBaja(motivoBaja); String[] serieCorrelativo = trxVenta.Sopnumbe.Split(new char[] { '-' }); string numeroSunat = serieCorrelativo[0] + "-" + serieCorrelativo[1]; //string numeroSunat = serieCorrelativo[0] + "-" + long.Parse(serieCorrelativo[1]).ToString(); //validaciones switch (trxVenta.DocGP.DocVenta.tipoDocumento) { case "01": if (!trxVenta.Sopnumbe.Substring(0, 1).Equals("F")) { msj = "El folio de la Factura debe empezar con la letra F. "; throw new ApplicationException(msj); } break; case "03": if (!trxVenta.Sopnumbe.Substring(0, 1).Equals("B")) { msj = "El folio de la Boleta debe empezar con la letra B. "; throw new ApplicationException(msj); } break; default: msj = "ok"; break; } string nombreArchivo = Utiles.FormatoNombreArchivo(trxVenta.Docid + trxVenta.Sopnumbe + "_" + trxVenta.s_CUSTNMBR, trxVenta.s_NombreCliente, 20) + "_" + accion.Substring(0, 4); string resultadoBaja = await servicioTimbre.SolicitarBajaAsync(trxVenta.DocGP.DocVenta.cliente_numeroDocumento, trxVenta.Ruta_certificadoPac, trxVenta.Contrasenia_clavePac, string.Concat(trxVenta.DocGP.DocVenta.tipoDocumento, "-", numeroSunat), Utiles.Izquierda(motivoBaja, 100)); DocVenta.RegistraLogDeArchivoXML(trxVenta.Soptype, trxVenta.Sopnumbe, resultadoBaja, "baja ok", _Conex.Usuario, string.Empty, maquina.DestinoStatusBase, maquina.DestinoEBinario, maquina.DestinoMensaje); DocVenta.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, "emitido", "emitido", maquina.DestinoEBinario, maquina.DestinoMensaje, "baja ok"); } } catch (HttpRequestException he) { msj = string.Concat(he.Message, Environment.NewLine, he.StackTrace); errores++; } catch (ApplicationException ae) { msj = ae.Message + Environment.NewLine + ae.StackTrace; errores++; } catch (IOException io) { msj = "Excepción al revisar la carpeta/archivo: " + trxVenta.Ruta_clave + " Verifique su existencia y privilegios." + Environment.NewLine + io.Message + Environment.NewLine; errores++; } 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 && i < 2); //Dar de baja uno por uno } 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!"); }
public async Task ProcesaObtienePDFAsync(ICfdiMetodosWebService servicioTimbre) { 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 = "IMPRIME PDF"; OnProgreso(1, "INICIANDO CONSULTA DE PDFs..."); //Notifica al suscriptor do { msj = String.Empty; String rutaNombrePDF = String.Empty; String ticket = trxVenta.Regimen; try { String[] serieCorrelativo = trxVenta.Sopnumbe.Split(new char[] { '-' }); string nombreArchivo = Utiles.FormatoNombreArchivo(trxVenta.Docid + trxVenta.Sopnumbe + "_" + trxVenta.s_CUSTNMBR, trxVenta.s_NombreCliente, 20) + "_CDR_" + accion.Substring(0, 2); if (maquina.ValidaTransicion(_Param.tipoDoc, accion, trxVenta.EstadoActual)) { if (trxVenta.Voidstts == 0 && trxVenta.EstadoContabilizado.Equals("contabilizado")) //no anulado y contabilizado { trxVenta.ArmarDocElectronico(string.Empty); rutaNombrePDF = await servicioTimbre.ObtienePDFdelOSEAsync(trxVenta.Rfc, trxVenta.Ruta_certificadoPac, trxVenta.Contrasenia_clavePac, trxVenta.DocGP.DocVenta.tipoDocumento, serieCorrelativo[0], serieCorrelativo[1], trxVenta.RutaXml.Trim(), nombreArchivo, ".pdf"); DocVenta.RegistraLogDeArchivoXML(trxVenta.Soptype, trxVenta.Sopnumbe, rutaNombrePDF, ticket, _Conex.Usuario, accion, maquina.DestinoStatusBase, maquina.DestinoEBinario, maquina.DestinoMensaje); DocVenta.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, "emitido", "emitido", maquina.DestinoEBinario, maquina.DestinoMensaje, ticket); } else { msj = "No se puede generar porque no está Contabilizado o está Anulado."; } } } catch (ArgumentException ae) { msj = ae.Message + Environment.NewLine; //DocVenta.LogDocumento(trxVenta, msj, maquina, ticket, _Param.tipoDoc, accion, false, rutaNombrePDF); //DocVenta.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, "emitido", "emitido", maquina.eBinActualConError, maquina.EnLetras(maquina.eBinActualConError, _Param.tipoDoc), ticket); errores++; } catch (IOException io) { msj = "Excepción al revisar la carpeta/archivo: " + trxVenta.Ruta_clave + " Verifique su existencia y privilegios." + Environment.NewLine + io.Message + Environment.NewLine; errores++; } 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!"); }
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); }
public async Task ProcesaBajaComprobante(String motivoBaja) { 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); OnProgreso(1, "INICIANDO BAJA DE DOCUMENTO..."); //Notifica al suscriptor do { msj = String.Empty; try { String accion = "DAR DE BAJA"; if (maquina.ValidaTransicion(_Param.tipoDoc, accion, trxVenta.EstadoActual, "baja solicitada")) { eBinario = maquina.eBinarioNuevo; trxVenta.ArmarBaja(motivoBaja); var proxy = new HttpClient { BaseAddress = new Uri(ConfigurationManager.AppSettings["UrlOpenInvoicePeruApi"]) }; var response = await proxy.PostAsJsonAsync("api/GenerarComunicacionBaja", trxVenta.DocumentoBaja); response.EnsureSuccessStatusCode(); var respuesta = await response.Content.ReadAsAsync <DocumentoResponse>(); if (!respuesta.Exito) { throw new ApplicationException(respuesta.MensajeError); } if (!_Param.seguridadIntegrada) { String RutaArchivo = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{trxVenta.DocumentoBaja.IdDocumento}sf.xml"); byte[] bTramaXmlSinFirma = Convert.FromBase64String(respuesta.TramaXmlSinFirma); File.WriteAllBytes(RutaArchivo, bTramaXmlSinFirma); } await FirmaYEnviaASunat(respuesta.TramaXmlSinFirma, string.Empty, trxVenta.DocumentoBaja.IdDocumento, trxVenta.DocumentoBaja.Emisor.NroDocumento, false, false, true); DocVenta.AlmacenaEnRepositorio(trxVenta, Encoding.UTF8.GetString(Convert.FromBase64String(respuesta.TramaXmlSinFirma)), maquina, tramaXmlFirmado, String.Empty, nroTicket, String.Empty, _Param.tipoDoc, accion, true); DocVenta.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, "emitido", "emitido", eBinario, maquina.EnLetras(eBinario, _Param.tipoDoc), nroTicket); } } catch (HttpRequestException he) { msj = string.Concat(he.Message, Environment.NewLine, he.StackTrace); errores++; } catch (ApplicationException ae) { msj = ae.Message + Environment.NewLine + ae.StackTrace; errores++; } catch (IOException io) { msj = "Excepción al revisar la carpeta/archivo: " + trxVenta.Ruta_clave + " Verifique su existencia y privilegios." + Environment.NewLine + io.Message + Environment.NewLine; errores++; } 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 && i < 2); //Dar de baja uno por uno } 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!"); }
public async Task ProcesaConsultaCDR() { 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); OnProgreso(1, "INICIANDO CONSULTA DE CDRs..."); //Notifica al suscriptor do { msj = String.Empty; try { String ticket = trxVenta.Regimen; String td = !trxVenta.Docid.Equals("RESUMEN") ? _Param.tipoDoc : trxVenta.Docid; String accion = "CONSULTA CDR"; if (maquina.ValidaTransicion(td, accion, trxVenta.EstadoActual, "consulta a la sunat")) { if (trxVenta.Voidstts == 0) //documento no anulado { await ConsultaCDR(ticket, trxVenta.Sopnumbe, trxVenta.Rfc); if (_codigoRespuesta.Equals("0")) //aceptada { eBinario = maquina.eBinarioNuevo; _mensajeSunat = string.IsNullOrEmpty(_mensajeSunat) ? "Consulta CDR OK" : _mensajeSunat; } else //if (!_consultaCDRExito) { eBinario = maquina.eBinActualConError; errores++; } DocVenta.AlmacenaEnRepositorio(trxVenta, _mensajeSunat, maquina, string.Empty, tramaZipCdr, ticket, string.Concat(trxVenta.Sopnumbe, nombreArchivoCdr), td, accion, _codigoRespuesta.Equals("0")); DocVenta.ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conex.Usuario, "emitido", "emitido", eBinario, maquina.EnLetras(eBinario, td) + _mensajeSunat, ticket); } } } catch (ApplicationException ae) { msj = ae.Message + Environment.NewLine + ae.StackTrace; errores++; } catch (IOException io) { msj = "Excepción al revisar la carpeta/archivo: " + trxVenta.Ruta_clave + " Verifique su existencia y privilegios." + Environment.NewLine + io.Message + Environment.NewLine; errores++; } 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!"); }