Cita:
Empezado por unomasmas
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.