예제 #1
0
        private void BuscarBtn_Click(object sender, EventArgs e)
        {
            //Muestra el dialogo para que seleccione el directorio
            DialogResult result = folderBrowserDialog1.ShowDialog();

            if (result == DialogResult.OK)
            {
                //
                // El usuario selecciono el directorio.
                //
                DirectorioLbl.Text = folderBrowserDialog1.SelectedPath;
                string[] archivosEnDirectorio = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.xml");
                //Muestra mensaje de confirmación para continuar
                DialogResult confirmacion = MessageBox.Show("Se encontraron un total de " + archivosEnDirectorio.Length.ToString() + " archivos.\n ¿Desea continuar con la cancelación?", "Confirmación", MessageBoxButtons.YesNo);
                if (confirmacion == DialogResult.Yes)
                {
                    //Cifra el certificado personal de la empresa seleccionada
                    try
                    {
                        //Obtiene el certificado y lo almacena
                        var cer = new X509Certificate2(nombreCertificado, contraseña, X509KeyStorageFlags.MachineKeySet);
                        System.Diagnostics.Debug.WriteLine("Procesando:" + cer.ToString());
                        //Recorre el directorio seleccionado para cancelar los archivos
                        foreach (String nombreArchivo in archivosEnDirectorio)
                        {
                            //Obtiene datos requeridos del XML
                            Comprobante comprobanteActual = Program.ObtenerComprobantes(nombreArchivo);
                            var         xml2 = "";
                            try
                            {
                                //Construye objeto XML para peticion
                                //UUID,RFC,FECHADECANCELACIÓN,CERTIFICADOCIFRADO
                                xml2 = Cancelador.Xml(comprobanteActual.UUID, comprobanteActual.RFC, DateTime.Now, cer);

                                //CANCELAR un folio
                                //Llama al servicio del PAC Tralix para realizar la cancelación
                                var soap2 = Cancelador.Cancelar("https://timbrador.tralix.com:8081/", key, xml2);
                                //Obtiene estatus de respuesta
                                var status = Cancelador.Status(soap2);
                                progresoTxt.Text = progresoTxt.Text + "Procesado: " + nombreArchivo + "\n ";
                                progresoTxt.Text = progresoTxt.Text + "Estatus de cancelacion : " + status + "\n";
                            }
                            catch (Exception ex)
                            {
                                //Error en construccion de peticion
                                System.Diagnostics.Debug.WriteLine(ex.Message);
                                System.Diagnostics.Debug.WriteLine(ex.InnerException.Message);
                                progresoTxt.Text = progresoTxt.Text + "Error:" + ex.Message + "\n";
                            }
                        }
                    }catch (Exception ex) {
                        //Error en obtener certificado
                        var error = ex.Message;
                        System.Diagnostics.Debug.WriteLine(error);
                        progresoTxt.Text = progresoTxt.Text + "Error:" + error + "\n";
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Cancela un cfdi
        /// </summary>
        /// <param name="uuid">uuid del comprobante a cancelar</param>
        /// <param name="rfc">RFC del emisor</param>
        /// <returns>Acuse de cancelación del SAT</returns>
        public string CancelaCfdi(string uuid, string rfcEmisor, string expresion, string rfcReceptor)
        {
            Cancelador cancelador         = new Cancelador();
            string     respuesta          = null;
            string     acuse              = null;
            Cancelador canceladorConsulta = new Cancelador();
            string     consulta           = canceladorConsulta.ConsultaCFDI(expresion, uuid, rfcReceptor);
            string     result;

            if (consulta != "OK")
            {
                result = "Error al cancelar el comprobante: " + consulta;
            }
            else
            {
                NtLinkEmpresa nle = new NtLinkEmpresa(); //
                int           resultado;

                //int numero = 0;
                //if (!int.TryParse(rfcEmisor, out numero))
                //{
                empresa empresa = nle.GetByRfc(rfcEmisor);    //
                resultado = cancelador.Cancelar(uuid, rfcEmisor, ref respuesta, ref acuse);

                //}
                //else
                //{
                //    var emp = nle.GetById(numero);
                //    resultado = cancelador.CancelarPorID(uuid, emp.IdEmpresa, ref respuesta, ref acuse);//para repetidos rfc

                //}



                // int resultado = cancelador.Cancelar(uuid, rfcEmisor, ref respuesta, ref acuse);
                // int resultado = cancelador.Cancelar(uuid, empresa.IdEmpresa, ref respuesta, ref acuse);

                CertificadorService.Logger.Info(respuesta);
                CertificadorService.Logger.Info(acuse);
                CertificadorService.Logger.Info(resultado);
                if (resultado == 201 || resultado == 202)
                {
                    result = acuse;
                }
                else
                {
                    result = respuesta;
                }
            }
            return(result);
        }