/// <summary> /// Constructor clase ARInvoicesBatch. /// </summary> /// <param name="suministroLRFacturasEmitidas">Objeto de serialización xml para /// suministro de facturas emitidas.</param> public ARInvoicesBatch(SuministroLRFacturasEmitidas suministroLRFacturasEmitidas) { ARInvoices = new List <ARInvoice>(); CommunicationType communicationType; if (!Enum.TryParse <CommunicationType>( suministroLRFacturasEmitidas.Cabecera.TipoComunicacion, out communicationType)) { throw new InvalidOperationException($"Unknown comunication type {suministroLRFacturasEmitidas.Cabecera.TipoComunicacion}"); } CommunicationType = communicationType; Titular = new Party() { TaxIdentificationNumber = suministroLRFacturasEmitidas.Cabecera.Titular.NIF, PartyName = suministroLRFacturasEmitidas.Cabecera.Titular.NombreRazon }; foreach (var invoice in suministroLRFacturasEmitidas.RegistroLRFacturasEmitidas) { ARInvoices.Add(new ARInvoice(invoice)); } }
static void Main(string[] args) { string s; SuministroLRFacturasEmitidas sumi = new SuministroLRFacturasEmitidas(); LRfacturasEmitidasType lr = new LRfacturasEmitidasType(); FacturaExpedidaType factexp = new FacturaExpedidaType(); PersonaFisicaJuridicaESType pers = new PersonaFisicaJuridicaESType(); pers.NIF = "00000000T"; pers.NombreRazon = "EMPRESA QUE EMITE FACTURAS"; CabeceraSii cabe = new CabeceraSii(); cabe.Titular = pers; sumi.Cabecera = cabe; RegistroSiiPeriodoImpositivo perio = new RegistroSiiPeriodoImpositivo(); perio.Ejercicio = "2018"; perio.Periodo = TipoPeriodoType.Item03; // Febrero lr.PeriodoImpositivo = perio; IDFacturaExpedidaTypeIDEmisorFactura emis = new IDFacturaExpedidaTypeIDEmisorFactura(); emis.NIF = pers.NIF; IDFacturaExpedidaType idExp = new IDFacturaExpedidaType(); idExp.IDEmisorFactura = emis; idExp.NumSerieFacturaEmisor = "Linda Factura Demo"; idExp.FechaExpedicionFacturaEmisor = "08-02-2018"; lr.IDFactura = idExp; PersonaFisicaJuridicaType contr = new PersonaFisicaJuridicaType(); contr.NombreRazon = "Amazon.co.uk"; contr.Item = "N1081152I"; factexp.Contraparte = contr; factexp.TipoFactura = ClaveTipoFacturaType.F1; factexp.FechaOperacion = idExp.FechaExpedicionFacturaEmisor; factexp.ClaveRegimenEspecialOTrascendencia = IdOperacionesTrascendenciaTributariaType.Item01; factexp.DescripcionOperacion = "Mi maravillosa descripción"; // <element name="DescripcionOperacion" type="sii:TextMax500Type"/> FacturaExpedidaTypeTipoDesglose desgl = new FacturaExpedidaTypeTipoDesglose(); TipoConDesgloseType condesgl = new TipoConDesgloseType(); TipoSinDesglosePrestacionType pr = new TipoSinDesglosePrestacionType(); SujetaPrestacionType sj = new SujetaPrestacionType(); SujetaPrestacionTypeNoExenta nx = new SujetaPrestacionTypeNoExenta(); DetalleIVAEmitidaPrestacionType dtp; dtp = new DetalleIVAEmitidaPrestacionType(); dtp.BaseImponible = "667.00"; dtp.CuotaRepercutida = "66.70"; dtp.TipoImpositivo = "10.00"; nx.DesgloseIVA = new DetalleIVAEmitidaPrestacionType[1]; nx.DesgloseIVA.SetValue(dtp, 0); nx.TipoNoExenta = TipoOperacionSujetaNoExentaType.S1; sj.NoExenta = nx; pr.Sujeta = sj; condesgl.PrestacionServicios = pr; desgl.Item = condesgl; factexp.TipoDesglose = desgl; factexp.ImporteTotal = "733.70"; lr.FacturaExpedida = factexp; sumi.RegistroLRFacturasEmitidas = new LRfacturasEmitidasType[1]; sumi.RegistroLRFacturasEmitidas.SetValue(lr, 0); // A enviar ... RespuestaLRFEmitidasType resp; siiSOAPClient clsSiiService; try { clsSiiService = new siiSOAPClient("SuministroFactEmitidasPruebas"); X509Certificate2 oCertificado = SeleccionarCertificado("Seleccione certificado", StoreLocation.CurrentUser, StoreName.My); clsSiiService.ClientCredentials.ClientCertificate.Certificate = oCertificado; clsSiiService.Open(); if (clsSiiService.State == System.ServiceModel.CommunicationState.Opened) { resp = clsSiiService.SuministroLRFacturasEmitidas(sumi); } } catch (ProtocolException ex) { s = ex.Message; Console.Write(s); // throw ex; } catch (WebException ex) //catch (Exception ex) { var st = new StreamReader(ex.Response.GetResponseStream()); s = st.ReadToEnd(); Console.Write(s); // throw ex; } finally { clsSiiService = null; } } // Main
public void GenerarXMLEmitidasEnvel(string _NombreFichero) { EmitidasEnvel funcion = new EmitidasEnvel(); string _NomFicheroWrk = _NombreFichero; try { Envelope _EnvelWrk = new Envelope(); SuministroLRFacturasEmitidas _SumLRFactEmit = new SuministroLRFacturasEmitidas(); RegistroLRFacturasEmitidas _RegLRFactEmit = new RegistroLRFacturasEmitidas(); Cabecera _Cabecera = new Cabecera(); using (StreamReader _Lector = new StreamReader(_NomFicheroWrk)) { while (_Lector.Peek() > -1) { string _RegFichero = _Lector.ReadLine(); if (!String.IsNullOrEmpty(_RegFichero)) { // Con creamos un Array con los distintos campos que contiene el registro separados por ";" string[] _CamposReg = _RegFichero.Split(';'); string _TipoReg = _CamposReg[0]; switch (_TipoReg) { case "CABE": _Cabecera = funcion.TratarRegCabecera(_CamposReg); _SumLRFactEmit.Cabecera = _Cabecera; break; case "FACT": if (_NuevaFact) // Si se trata de una nueva factura, añadiremos la 'antigua' al fichero { _SumLRFactEmit.RegistroLRFacturasEmitidas.Add(_RegLRFactEmit); _NuevaFact = false; } // Se trata de una factura no Sujeta, de manera que no tendrá registros 'FISC' y se tendrá que añadir a // la lista correspondiente. if (!string.IsNullOrWhiteSpace(_CamposReg[19]) || !string.IsNullOrWhiteSpace(_CamposReg[20])) { _NuevaFact = true; } _RegLRFactEmit = new RegistroLRFacturasEmitidas(); _RegLRFactEmit = funcion.TratarFactEmitida(_CamposReg); break; case "RECT": _RegLRFactEmit = funcion.AgregarFactRectifica(_CamposReg, _RegLRFactEmit); break; case "FISC": _NuevaFact = true; _RegLRFactEmit = funcion.AgregarDesgloseIVA(_CamposReg, _RegLRFactEmit); break; case "FINI": // Incluimos la última factura que hemos tratado. _SumLRFactEmit.RegistroLRFacturasEmitidas.Add(_RegLRFactEmit); // Incluimos todas las facturas tratadas en el Envelope. _EnvelWrk.Body.SuministroLRFacturasEmitidas = _SumLRFactEmit; //Obtenemos la fecha actual sin la hora y procedemos a crear la ruta/nombre del fichero resultante DateTime _FechaActual = DateTime.Today; string nombrefichero = "SII_Emitidas_" + _Cabecera.Titular.NIF + "_" + _FechaActual.ToString("yyyyMMdd") + ".XML"; string XmlResult = "C:/Temp/" + nombrefichero; // Con la siguiente instruccion se genera el XML en la direccion anteriormente indicada. XmlDocument tmpXML = SIIParser.GetXml(_EnvelWrk, XmlResult); string _msg = "Fichero XML generado: " + XmlResult; MessageBox.Show(_msg, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information); break; default: string _msgAviso = "Tipo Registro incorrecto: " + _TipoReg; MessageBox.Show(_msgAviso, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning); break; } } } } } catch (Exception ex) { string _msgError = "Error: " + ex.Message; MessageBox.Show(_msgError, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }