/// <summary> /// Obtiene un objeto RegistroLRDetOperacionIntracomunitaria, este objeto se utiliza /// para la serialización xml. /// </summary> /// <param name="updateInnerSII">Si es true, actualiza el objeto SII subyacente /// con el valor calculado.</param> /// <returns>Nueva instancia del objeto para serialización /// xml RegistroLRDetOperacionIntracomunitaria.</returns> internal RegistroLRDetOperacionIntracomunitariaVentasEnConsigna ToSII(bool updateInnerSII = false) { if (InnerSII != null) { return(InnerSII); } RegistroLRDetOperacionIntracomunitariaVentasEnConsigna siiInvoice = new RegistroLRDetOperacionIntracomunitariaVentasEnConsigna(); if (IssueDate == null) { throw new ArgumentNullException("IssueDate is null."); } if (!string.IsNullOrEmpty(ExternalReference) && !(Settings.Current.IDVersionSii.CompareTo("1.1") < 0)) { siiInvoice.OperacionIntracomunitaria.RefExterna = ExternalReference; } siiInvoice.IdRegistroDeclarado = new IdRegistroDeclarado() { Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy"), Periodo = (IssueDate ?? new DateTime(1, 1, 1)).ToString("MM") }; siiInvoice.TipoOperacion = OperationType; TaxIdEs taxIdEs = null; bool IsNotNifES = false; if (BuyerParty == null) { throw new ArgumentNullException("BuyerParty is null."); } // Se puede tratar de un Buyer extranjero, de manera que tendremos que poner el tratamiento correspondiente try { taxIdEs = new TaxIdEs(BuyerParty.TaxIdentificationNumber); } catch { IsNotNifES = true; } if (taxIdEs != null) { IsNotNifES = !taxIdEs.IsDCOK; } Contraparte contraparte = null; if (BuyerParty != null) { contraparte = new Contraparte() { NombreRazon = BuyerParty.PartyName }; if (IsNotNifES) { if (CountryCode == null && IDOtroType != IDOtroType.NifIva) { throw new ArgumentNullException( "For foreign tax identificator number Country Code can't be null"); } // Si no es un nif español contraparte.IDOtro = new IDOtro(); contraparte.IDOtro.IDType = ((int)IDOtroType).ToString().PadLeft(2, '0'); contraparte.IDOtro.CodigoPais = CountryCode; contraparte.IDOtro.ID = BuyerParty.TaxIdentificationNumber; } else { siiInvoice.Contraparte.NIF = BuyerParty.TaxIdentificationNumber; } } siiInvoice.IdRegistroDeclarado.IdRegistro = InvoiceNumber; // Tratamos el resto de información de la factura intracomunitaria. siiInvoice.ClaveDeclarante = ClaveDeclarante.ToString(); if (OperationType == "01") { siiInvoice.Contraparte = contraparte; siiInvoice.OperacionIntracomunitaria = new OperacionIntracomunitariaVentasEnConsigna() { InfoExpedicionRecepcion = new InfoExpedicionRecepcion() { FechaExpedicion = (IssueDate ?? new DateTime(1, 1, 1)).ToString("dd-MM-yyyy"), FechaLlegada = (ReceptionDate ?? new DateTime(1, 1, 1)).ToString("dd-MM-yyyy"), EmPartida = EstadoMiembroPartida, EmLlegada = EstadoMiembroLlegada, DescripBienes = DescripcionBienes, Cantidad = $"{Quantity}", ValorBienes = SIIParser.FromDecimal(GrossAmount) } }; siiInvoice.Deposito = new Deposito() { DireccionAlmacen = WarehouseAddress }; } else if (OperationType == "03") { siiInvoice.OperacionIntracomunitaria = new OperacionIntracomunitariaVentasEnConsigna() { DestinoFinalExpedRecep = new DestinoFinalExpedRecep() { FechaOpDeclarada = (IssueDate ?? new DateTime(1, 1, 1)).ToString("dd-MM-yyyy"), DescripBienes = DescripcionBienes, Cantidad = $"{Quantity}", BaseImponibleValor = SIIParser.FromDecimal(GrossAmount), PrecioUnitario = SIIParser.FromDecimal(GrossAmount / Quantity), DestinatarioFinal = contraparte } }; } // Para las ventas de bienes envíados anteriormente en consigna hay que indicar la // información del envío original. Esta información se incluye en InvoicesRectified if (InvoicesRectified != null && InvoicesRectified.Count > 0) { siiInvoice.OperacionIntracomunitaria.IdRegistroExpInicial = new IdRegistroExpInicial() { Ejercicio = (InvoicesRectified[0].RectifiedIssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy"), Periodo = (InvoicesRectified[0].RectifiedIssueDate ?? new DateTime(1, 1, 1)).ToString("MM"), IdExpInicial = InvoicesRectified[0].RectifiedInvoiceNumber }; } if (updateInnerSII) { InnerSII = siiInvoice; } return(siiInvoice); }
// 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); }