/// <summary> /// Constructor de ARInvoice. /// </summary> /// <param name="registroLRFacturasEmitidas">Objeto serialización xml facturas emitidas.</param> public ARInvoiceAV(RegistroLRFacturasEmitidas registroLRFacturasEmitidas) : base(registroLRFacturasEmitidas) { RegistroLRFacturasEmitidas siiInvoice = registroLRFacturasEmitidas; // Gestión del tipo desglose NoSujeta noSujeta = siiInvoice?.FacturaExpedida?.TipoDesglose?.DesgloseFactura?.NoSujeta; if (noSujeta != null) { if (noSujeta.ImporteTAIReglasLocalizacion != null) { IsTAIRules = true; GrossAmount = SIIParser.ToDecimal(noSujeta.ImporteTAIReglasLocalizacion); } } }
// Función para tratar el registro de factura que se acaba de leer. private ARInvoice TratarFactEmitida(string[] _CamposReg, Party _Titular) { ARInvoice _FacturaActual = new ARInvoice(); Party _Emisor, _Cliente = new Party(); // Al tratarse de una factura emitida el Vendedor (Seller - _Emisor) será el mismo que el Titular del libro. _Emisor = _Titular; _FacturaActual.SellerParty = _Emisor; // Procedemos a tratar la factura actual. //El periodo impositivo no lo informamos, ya que se informará automáticamente a partir // de la fecha de la factura, según las pruebas que hemos realizado. _FacturaActual.InvoiceNumber = (_CamposReg[4]).Trim(); // En caso de que se trate de una factura de Asiento Resumen, hay que informar la última factura // que se incluye en este envío. if (!string.IsNullOrWhiteSpace(_CamposReg[14])) { _FacturaActual.InvoiceNumberLastItem = _CamposReg[14]; } _FacturaActual.IssueDate = Convert.ToDateTime(_CamposReg[5]); if (string.IsNullOrWhiteSpace(_CamposReg[9])) { _CamposReg[9] = "Hay que informar el concepto de la factura"; } _FacturaActual.InvoiceText = (_CamposReg[9]).Trim(); // Procedemos a indicar el tipo de factura, que dependerá de lo que venga indicado en el fichero _FacturaActual.InvoiceType = (InvoiceType)Enum.Parse(typeof(InvoiceType), _CamposReg[6]); // Procedemos a indicar el tipo de ClaveRegimenEspecial respecto a lo que venga indicado en el fichero _FacturaActual.ClaveRegimenEspecialOTrascendencia = (ClaveRegimenEspecialOTrascendencia)Enum.Parse(typeof(ClaveRegimenEspecialOTrascendencia), _CamposReg[7]); _FacturaActual.GrossAmount = Convert.ToDecimal(_CamposReg[8]); if (!string.IsNullOrWhiteSpace(_CamposReg[15])) { _FacturaActual.OperationIssueDate = Convert.ToDateTime(_CamposReg[15]); } // Informamos el cliente. _Cliente.PartyName = (_CamposReg[10]).Trim(); _Cliente.TaxIdentificationNumber = _CamposReg[11]; _FacturaActual.BuyerParty = _Cliente; // En el caso de que se trate de un cliente extranjero, habremos informado este campo, de manera que podremos indicar // el código de país correspondiente if (!string.IsNullOrWhiteSpace(_CamposReg[12])) { _FacturaActual.CountryCode = _CamposReg[12]; } //En este trozo procedemos a tratar las facturas rectificativas. if (!string.IsNullOrWhiteSpace(_CamposReg[16])) { _FacturaActual.RectifiedType = (RectifiedType)Enum.Parse(typeof(RectifiedType), _CamposReg[16]); _FacturaActual.RectifiedBase = Convert.ToDecimal(_CamposReg[17]); _FacturaActual.RectifiedAmount = Convert.ToDecimal(_CamposReg[18]); } // Procedemos a tratar el caso de que se trate del deslgose no Sujeto TipoDesglose tipoDesglose = new TipoDesglose(); DesgloseFactura desgloseFactura = new DesgloseFactura(); NoSujeta noSujeta = new NoSujeta(); if (!string.IsNullOrWhiteSpace(_CamposReg[19]) || !string.IsNullOrWhiteSpace(_CamposReg[20])) { if (!string.IsNullOrWhiteSpace(_CamposReg[19])) { noSujeta.ImportePorArticulos7_14_Otros = ((_CamposReg[19]).Trim()).Replace(',', '.'); } if (!string.IsNullOrWhiteSpace(_CamposReg[20])) { noSujeta.ImporteTAIReglasLocalizacion = ((_CamposReg[20]).Trim()).Replace(',', '.'); } desgloseFactura.NoSujeta = noSujeta; tipoDesglose.DesgloseFactura = desgloseFactura; //_FacturaActual.InnerSII.FacturaExpedida.TipoDesglose = tipoDesglose; } return(_FacturaActual); }
// Función para tratar el registro de factura que se acaba de leer. private RegistroLRFacturasEmitidas TratarFactEmitida(string[] _CamposReg) { RegistroLRFacturasEmitidas _RegLRFactEmitWRK = new RegistroLRFacturasEmitidas(); // Informamos el periodo impositivo. PeriodoImpositivo _PeriodoWrk = new PeriodoImpositivo { Ejercicio = _CamposReg[1], Periodo = _CamposReg[2] }; _RegLRFactEmitWRK.PeriodoImpositivo = _PeriodoWrk; // Informamos el IDFactura. IDFactura _IDFactWrk = new IDFactura(); _IDFactWrk.IDEmisorFactura.NIF = _CamposReg[3]; _IDFactWrk.NumSerieFacturaEmisor = _CamposReg[4].Trim(); _IDFactWrk.FechaExpedicionFacturaEmisor = _CamposReg[5]; // En caso de que se trate de una factura de Asiento Resumen, hay que informar la última factura // que se incluye en este envío. if (!string.IsNullOrWhiteSpace(_CamposReg[14])) { _IDFactWrk.NumSerieFacturaEmisorResumenFin = _CamposReg[14]; } _RegLRFactEmitWRK.IDFactura = _IDFactWrk; // Procedemos a tratar la factura actual. FacturaExpedida _FacturaActual = new FacturaExpedida { TipoFactura = _CamposReg[6], ClaveRegimenEspecialOTrascendencia = _CamposReg[7], ImporteTotal = ((_CamposReg[8]).Trim()).Replace(',', '.') }; if (string.IsNullOrWhiteSpace(_CamposReg[9])) { _CamposReg[9] = "Hay que informar el concepto de la factura"; } _FacturaActual.DescripcionOperacion = _CamposReg[9].Trim(); // Informamos la contraparte, que cambiará dependiendo de si se trata de un cliente nacional o extranjero Contraparte _ClienteWrk = new Contraparte { NombreRazon = _CamposReg[10].Trim() }; if (string.IsNullOrWhiteSpace(_CamposReg[12])) { _ClienteWrk.NIF = _CamposReg[11]; } else { IDOtro _ClienteExtWrk = new IDOtro { CodigoPais = _CamposReg[12], IDType = _CamposReg[13], ID = _CamposReg[11] }; _ClienteWrk.IDOtro = _ClienteExtWrk; } _FacturaActual.Contraparte = _ClienteWrk; // Indicamos la fecha de operación, en el caso de que venga informada if (!string.IsNullOrWhiteSpace(_CamposReg[15])) { _FacturaActual.FechaOperacion = _CamposReg[15]; } // Procedemos a informar los campos en el caso de que se trate del envio de una factura rectificativa. if (!string.IsNullOrWhiteSpace(_CamposReg[16])) { _FacturaActual.TipoRectificativa = _CamposReg[16]; ImporteRectificacion _ImpRectifWrk = new ImporteRectificacion { BaseRectificada = ((_CamposReg[17]).Trim()).Replace(',', '.'), CuotaRectificada = ((_CamposReg[18]).Trim()).Replace(',', '.') }; _FacturaActual.ImporteRectificacion = _ImpRectifWrk; } // Procedemos a tratar el caso de que se trate del deslgose no Sujeto TipoDesglose tipoDesglose = new TipoDesglose(); DesgloseFactura desgloseFactura = new DesgloseFactura(); NoSujeta noSujeta = new NoSujeta(); if (!string.IsNullOrWhiteSpace(_CamposReg[19]) || !string.IsNullOrWhiteSpace(_CamposReg[20])) { if (!string.IsNullOrWhiteSpace(_CamposReg[19])) { noSujeta.ImportePorArticulos7_14_Otros = ((_CamposReg[19]).Trim()).Replace(',', '.'); } if (!string.IsNullOrWhiteSpace(_CamposReg[20])) { noSujeta.ImporteTAIReglasLocalizacion = ((_CamposReg[20]).Trim()).Replace(',', '.'); } desgloseFactura.NoSujeta = noSujeta; tipoDesglose.DesgloseFactura = desgloseFactura; _FacturaActual.TipoDesglose = tipoDesglose; } _RegLRFactEmitWRK.FacturaExpedida = _FacturaActual; return(_RegLRFactEmitWRK); }