Ver Mensaje Individual
  #2935  
Antiguo 18-10-2024
Avatar de bmfranky
bmfranky bmfranky is offline
Miembro
 
Registrado: may 2024
Ubicación: Gandia, Valencia
Posts: 863
Reputación: 3
bmfranky Va por buen camino
Cita:
Empezado por unomasmas Ver Mensaje
Muchas gracias a ambos :-) Estoy pensando que podría servir incluso en caso de problemas de otro tipo; no sólo de caídas del sistema... (aunque es una idea que habrá que analizar un poco...)
Para otros tipos de incidencia, he creado un condicionante llamado alta, segun el error la cambio , asi al reeenviar ya me codifica el motivo o mejor dicho que variar segun el motivo.
Código:
//Es por subsanacion ?
                altaFactura.Subsanacion = ServicioVerifactu.SubsanacionType.N;
                // Se havia rechazado ?
                altaFactura.RechazoPrevio = ServicioVerifactu.RechazoPrevioType.N;
//Si alta es diferente a "ALTA" , que es el valor iniucial actuamos al respecto
                if(alta == "RECHAZO")
                {
                    //Es por subsanacion ?
                    altaFactura.Subsanacion = ServicioVerifactu.SubsanacionType.S;
                    // Se havia rechazado ?
                    altaFactura.RechazoPrevio = ServicioVerifactu.RechazoPrevioType.X;
                }
                if (alta == "SUBSANACION")
                {
                    //Es por subsanacion ?
                    altaFactura.Subsanacion = ServicioVerifactu.SubsanacionType.S;
                    // Se havia rechazado ?
                    altaFactura.RechazoPrevio = ServicioVerifactu.RechazoPrevioType.N;
                }
                if (alta == "RECHAZO_SUBSANACION")
                {
                    //Es por subsanacion ?
                    altaFactura.Subsanacion = ServicioVerifactu.SubsanacionType.S;
                    // Se havia rechazado ?
                    altaFactura.RechazoPrevio = ServicioVerifactu.RechazoPrevioType.S;
                }

El estado lo asigno segun la respuesta del servicio.
Código:
                XmlSerializer serializaFactura2 = new XmlSerializer(typeof(RespuestaRegFactuSistemaFacturacionType));


                info = "";
                using (var xmlw = new StringWriter())
                {
                    XmlWriterSettings settings = new XmlWriterSettings();
                    settings.Indent = true;
                    settings.Encoding = Encoding.UTF8;

                    using (XmlWriter writter = XmlWriter.Create(xmlw, settings))
                    {
                        serializaFactura2.Serialize(writter, retorno);
                        info = xmlw.ToString();
                    }

                }
                string EstadoRegistro = "";
                Match match1 = Regex.Match(info, "<EstadoRegistro>(.*?)</EstadoRegistro>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
                if (null != match1.Value)
                {
                    EstadoRegistro = match1.Value.Replace("<EstadoRegistro>", "");
                    EstadoRegistro = EstadoRegistro.Replace("</EstadoRegistro>", "");
                    switch (EstadoRegistro)
                    {
                        case "Correcto":
                            {
                                txtConsulta.BackColor = Color.LawnGreen;
                                txtConsulta.Text = "Correcto";
                                huella.insertaHuella(new HuellaVerifactu(1, "CONTADO", facAPresentar.Cabecera.ObligadoEmision.NIF, txtSerie.Text, txtNfac.Text, altaFactura.FechaOperacion, altaFactura.TipoFactura.ToString(), altaFactura.CuotaTotal, altaFactura.ImporteTotal, altaFactura.Huella, altaFactura.FechaHoraHusoGenRegistro));
                                
                                //esto forma parte de mi sistema para guardar las factura... :D
                                Program.VehiculoSeleccionado.Marca = " ";
                                Program.VehiculoSeleccionado.Modelo = " ";
                                Program.facturaSeleccionada.Tasa = " ";
                                if (txtPortes.Text != "")
                                {
                                    Program.facturaSeleccionada.Portes = txtPortes.Text;
                                }
                                else
                                {
                                    Program.facturaSeleccionada.Portes = " ";
                                }
                                Program.facturaSeleccionada.ClientUID = 0;// Program.ClienteSelecionado.ClientUID;
                                Program.facturaSeleccionada.TipoFactura = "CONTADO";
                                Program.facturaSeleccionada.Tipo = "F2";
                                Program.facturaSeleccionada.Motivo = "";
                                Program.facturaSeleccionada.Regimen = "01";
                                Program.facturaSeleccionada.Sujeto = "S1";
                                Program.facturaSeleccionada.Exento = "";
                                Program.facturaSeleccionada.Fecha = altaFactura.FechaOperacion;// Program.RepSeleccionada.FechaReparacion;
                                Program.facturaSeleccionada.Matricula = " ";
                                Program.facturaSeleccionada.NumReparacion = 0;
                                Program.facturaSeleccionada.NºHoras = " ";// Program.madobra.Cantidad;
                                Program.facturaSeleccionada.DTOHoras = " ";//Program.madobra.Descuento;
                                Program.facturaSeleccionada.PrecioHoras = " ";//Program.madobra.Precio;
                                Program.facturaSeleccionada.TipoIva = Program.currentIva;
                                Program.facturaSeleccionada.Tasa = " ";// Program.madobra.Tasa;
                                Program.facturaSeleccionada.Materiales = info;
                                //Program.facturaSeleccionada.Portes = Program.madobra.Portes;
                                //Program.facturaSeleccionada.Materiales = " ";// Program.RepSeleccionada.Reparacion;
                                Program.facturaSeleccionada.NºFactura = Convert.ToInt32(txtNfac.Text);                                                 //
                                
                                    Program.configTaller.NºFactura++;
                                    ConfigDB.actualizaNfac(Program.configTaller.NºFactura.ToString());
                                    FacturasDB.grabaFacturaSimple(Program.facturaSeleccionada, "contado", Program.currentYear);//,"");
                                    MaterialesDB.agregar(Program.MaterialesSeleccionados, "contado"+Program.currentYear);
                               

                                muestraFactura2 vf1 = FacturasDB.asignaReporteFacturaVenta();
                                InterfaceFunciones Interface1 = this.Owner as InterfaceFunciones;
                                Interface1.reiniciaBlocker("Parar");
                                vistaPrevia vP = new vistaPrevia(vf1);
                                vP.Text = "Factura Nº " + txtSerie.Text + txtNfac.Text;
                                vP.ShowDialog(Owner);
                                borra.PerformClick();
                                break;
                            }
                        case "AceptadoConErrores":
                            {
                                txtConsulta.BackColor = Color.Yellow;
                                txtConsulta.Text = "AceptadoConErrores";
                                if(alta=="ALTA")
                                {
                                    alta = "SUBSANACION";
                                }
                                else
                                {
                                    alta = "RECHAZO_SUBSANACION";
                                }
                                Match match2 = Regex.Match(info, "<CodigoErrorRegistro>(.*?)</CodigoErrorRegistro>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
                                string codigoRegistro = match2.Value.Replace("<CodigoErrorRegistro>", "");
                                codigoRegistro = codigoRegistro.Replace("</CodigoErrorRegistro>", "");
                                Match match3 = Regex.Match(info, "<DescripcionErrorRegistro>(.*?).", RegexOptions.IgnoreCase | RegexOptions.Singleline);
                                string DescripcionRegistro = match2.Value.Replace("<DescripcionErrorRegistro>", "");
                                txt_motivo.Text = codigoRegistro + " -> " + DescripcionRegistro;
                                break;
                            }
                        case "Incorrecto":
                            {
                                txtConsulta.BackColor = Color.Red;
                                txtConsulta.Text = "Errores";
                                alta="RECHAZO";
                                Match match2 = Regex.Match(info, "<CodigoErrorRegistro>(.*?)</CodigoErrorRegistro>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
                                string codigoRegistro = match2.Value.Replace("<CodigoErrorRegistro>", "");
                                codigoRegistro = codigoRegistro.Replace("</CodigoErrorRegistro>", "");
                                Match match3 = Regex.Match(info, "<DescripcionErrorRegistro>(.*?)</DescripcionErrorRegistro>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
                                string DescripcionRegistro = match3.Value.Replace("<DescripcionErrorRegistro>", "");
                                DescripcionRegistro = DescripcionRegistro.Replace("</DescripcionErrorRegistro>", "");
                                txt_motivo.Text = codigoRegistro + " -> " + DescripcionRegistro;
                                break;
                            }
                        default://Incorrecta
                            {
                                txtConsulta.BackColor = Color.Red;
                                txtConsulta.Text = "Errores";
                                Match match2 = Regex.Match(info, "<CodigoErrorRegistro>(.*?)</CodigoErrorRegistro>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
                                string codigoRegistro = match2.Value.Replace("<CodigoErrorRegistro>", "");
                                codigoRegistro = codigoRegistro.Replace("</CodigoErrorRegistro>", "");
                                Match match3 = Regex.Match(info, "<DescripcionErrorRegistro>(.*?)</DescripcionErrorRegistro>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
                                string DescripcionRegistro = match3.Value.Replace("<DescripcionErrorRegistro>", "");
                                DescripcionRegistro = DescripcionRegistro.Replace("</DescripcionErrorRegistro>", "");
                                txt_motivo.Text = codigoRegistro + " -> " + DescripcionRegistro;
                                break;
                            }
                    }
                }

No sera la forma mas limpia de hacerlo, pero a mi me funciona.