示例#1
0
        // Función para tratar el registro de factura que se acaba de leer.
        private RegistroLRDetOperacionIntracomunitaria TratarOperIntracom(string[] _CamposReg)
        {
            RegistroLRDetOperacionIntracomunitaria _RegLRFactIntraWrk = new RegistroLRDetOperacionIntracomunitaria();

            // Informamos el periodo impositivo.
            PeriodoImpositivo _PeriodoWrk = new PeriodoImpositivo
            {
                Ejercicio = _CamposReg[1],
                Periodo   = _CamposReg[2]
            };

            _RegLRFactIntraWrk.PeriodoImpositivo = _PeriodoWrk;

            //
            // Informamos el IDFactura.
            // Por las pruebas que hemos podido realizar, en el SoapUI, dependiendo de si se trata de una factura intracomunitaria emitida o recibida
            // el emisor de la misma será o el titular o el proveedor/acreedor que nos haya remitido la factura. En nuestro caso, al tratarse de facturas
            // recibidas, el emisor de la misma será el proveedor/acreedor. Procedemos a modificar el código para que se genere correctamente el lote.
            //
            IDFactura _IDFactWrk = new IDFactura();

            _IDFactWrk.IDEmisorFactura.NombreRazon = _CamposReg[3].Trim();

            if (string.IsNullOrWhiteSpace(_CamposReg[5]))
            {
                _IDFactWrk.IDEmisorFactura.NIF = _CamposReg[4];
            }
            else
            {
                IDOtro _EmisorExt = new IDOtro
                {
                    ID         = _CamposReg[4],
                    CodigoPais = _CamposReg[5],
                    IDType     = _CamposReg[6]
                };
                _IDFactWrk.IDEmisorFactura.IDOtro = _EmisorExt;
            }

            _IDFactWrk.NumSerieFacturaEmisor        = _CamposReg[7].Trim();
            _IDFactWrk.FechaExpedicionFacturaEmisor = _CamposReg[8];
            _RegLRFactIntraWrk.IDFactura            = _IDFactWrk;

            //
            // Informamos la contraparte, que, según la documentación y las pruebas realizadas, en nuestro caso tendremos que informar
            // los datos del titular del libro..
            //
            Contraparte _ContraparteWrk = new Contraparte
            {
                NombreRazon = _CamposReg[9].Trim(),
                NIF         = _CamposReg[10]
            };

            _RegLRFactIntraWrk.Contraparte = _ContraparteWrk;


            // Informamos los datos correspondientes a la operación intracomunitaria.
            OperacionIntracomunitaria _OperIntraWrk = new OperacionIntracomunitaria
            {
                TipoOperacion     = _CamposReg[11],
                ClaveDeclarado    = _CamposReg[12],
                EstadoMiembro     = _CamposReg[13],
                DescripcionBienes = _CamposReg[14],
                DireccionOperador = _CamposReg[15]
            };

            _RegLRFactIntraWrk.OperacionIntracomunitaria = _OperIntraWrk;

            return(_RegLRFactIntraWrk);
        }
示例#2
0
        /// <summary>
        /// Obtiene un objeto RegistroLRDetOperacionIntracomunitaria, este objeto se utiliza
        /// para la serialización xml.
        /// </summary>
        /// <returns>Nueva instancia del objeto para serialización
        /// xml RegistroLRDetOperacionIntracomunitaria.</returns>
        internal RegistroLRDetOperacionIntracomunitaria ToSII()
        {
            RegistroLRDetOperacionIntracomunitaria siiInvoice = new RegistroLRDetOperacionIntracomunitaria();

            if (IssueDate == null)
            {
                throw new ArgumentNullException("IssueDate is null.");
            }

            if (!string.IsNullOrEmpty(ExternalReference) &&
                !(Settings.Current.IDVersionSii.CompareTo("1.1") < 0))
            {
                siiInvoice.OperacionIntracomunitaria.RefExterna = ExternalReference;
            }

            if (Settings.Current.IDVersionSii.CompareTo("1.1") < 0)
            {
                siiInvoice.PeriodoImpositivo.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy");
                siiInvoice.PeriodoImpositivo.Periodo   = (IssueDate ?? new DateTime(1, 1, 1)).ToString("MM");
            }
            else
            {
                siiInvoice.PeriodoLiquidacion.Ejercicio = (IssueDate ?? new DateTime(1, 1, 1)).ToString("yyyy");
                siiInvoice.PeriodoLiquidacion.Periodo   = (IssueDate ?? new DateTime(1, 1, 1)).ToString("MM");
            }

            TaxIdEs taxIdEs    = null;
            bool    IsNotNifES = false;

            if (SellerParty == null)
            {
                throw new ArgumentNullException("SellerParty is null.");
            }

            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;
            }

            if (BuyerParty != null)
            {
                siiInvoice.IDFactura.IDEmisorFactura.NombreRazon = BuyerParty.PartyName;

                if (IsNotNifES)
                {
                    if (CountryCode == null)
                    {
                        throw new ArgumentNullException(
                                  "For foreign tax identificator number Country Code can't be null");
                    }

                    // Si no es un nif español
                    siiInvoice.IDFactura.IDEmisorFactura.IDOtro            = new IDOtro();
                    siiInvoice.IDFactura.IDEmisorFactura.IDOtro.IDType     = ((int)IDOtroType).ToString().PadLeft(2, '0');
                    siiInvoice.IDFactura.IDEmisorFactura.IDOtro.CodigoPais = CountryCode;
                    siiInvoice.IDFactura.IDEmisorFactura.IDOtro.ID         = BuyerParty.TaxIdentificationNumber;
                }
                else
                {
                    siiInvoice.IDFactura.IDEmisorFactura.NIF = BuyerParty.TaxIdentificationNumber;
                }
            }

            siiInvoice.IDFactura.NumSerieFacturaEmisor        = InvoiceNumber;
            siiInvoice.IDFactura.FechaExpedicionFacturaEmisor = (IssueDate ?? new DateTime(1, 1, 1)).ToString("dd-MM-yyyy");

            // Se procede a tratar el Seller, el cual puede ser extranjero.
            taxIdEs    = null;
            IsNotNifES = false;

            try
            {
                taxIdEs = new TaxIdEs(SellerParty.TaxIdentificationNumber);
            }
            catch
            {
                IsNotNifES = true;
            }

            if (taxIdEs != null)
            {
                IsNotNifES = !taxIdEs.IsDCOK;
            }

            if (SellerParty != null)
            {
                siiInvoice.Contraparte.NombreRazon = SellerParty.PartyName;

                if (IsNotNifES)
                {
                    if (CountryCode == null)
                    {
                        throw new ArgumentNullException(
                                  "For foreign tax identificator number Country Code can't be null");
                    }

                    // Si no es un nif español
                    siiInvoice.Contraparte.IDOtro            = new IDOtro();
                    siiInvoice.Contraparte.IDOtro.IDType     = ((int)IDOtroType).ToString().PadLeft(2, '0');
                    siiInvoice.Contraparte.IDOtro.CodigoPais = CountryCode;
                    siiInvoice.Contraparte.IDOtro.ID         = SellerParty.TaxIdentificationNumber;
                }
                else
                {
                    siiInvoice.Contraparte.NIF = SellerParty.TaxIdentificationNumber;
                }
            }

            //
            // Tratamos el resto de información de la factura intracomunitaria.
            //
            siiInvoice.OperacionIntracomunitaria.TipoOperacion     = OperationType.ToString();
            siiInvoice.OperacionIntracomunitaria.ClaveDeclarado    = ClaveDeclarado.ToString();
            siiInvoice.OperacionIntracomunitaria.EstadoMiembro     = EstadoMiembro;
            siiInvoice.OperacionIntracomunitaria.DescripcionBienes = DescripcionBienes;
            siiInvoice.OperacionIntracomunitaria.DireccionOperador = DireccionOperador;

            return(siiInvoice);
        }
示例#3
0
        public void GenerarXMLIntracomEnvel(string _NombreFichero)
        {
            IntracomEnvel funcion        = new IntracomEnvel();
            string        _NomFicheroWrk = _NombreFichero;

            try
            {
                Envelope _EnvelWrk = new Envelope();
                SuministroLRDetOperacionIntracomunitaria _SumLROperIntracom = new SuministroLRDetOperacionIntracomunitaria();
                RegistroLRDetOperacionIntracomunitaria   _RegLROperIntracom = new RegistroLRDetOperacionIntracomunitaria();

                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);
                                _SumLROperIntracom.Cabecera = _Cabecera;
                                break;

                            case "FACT":
                                _RegLROperIntracom = new RegistroLRDetOperacionIntracomunitaria();
                                _RegLROperIntracom = funcion.TratarOperIntracom(_CamposReg);
                                _SumLROperIntracom.RegistroLRDetOperacionIntracomunitaria.Add(_RegLROperIntracom);
                                break;

                            case "FINI":
                                // Incluimos todas las facturas tratadas en el Envelope.
                                _EnvelWrk.Body.SuministroLRDetOperacionIntracomunitaria = _SumLROperIntracom;

                                //Obtenemos la fecha actual sin la hora y procedemos a crear la ruta/nombre del fichero resultante
                                DateTime _FechaActual  = DateTime.Today;
                                string   nombrefichero = "SII_Intracom_" + _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);
            }
        }
示例#4
0
        /// <summary>
        /// Constructor de ITInvoice.
        /// </summary>
        /// <param name="registroLRDetOperacionIntracomunitaria">Objeto serialización xml operaciones intracomunitarias.</param>
        public ITInvoice(RegistroLRDetOperacionIntracomunitaria registroLRDetOperacionIntracomunitaria)
        {
            RegistroLRDetOperacionIntracomunitaria siiInvoice = registroLRDetOperacionIntracomunitaria;

            InvoiceNumber = siiInvoice.IDFactura.NumSerieFacturaEmisor;
            IssueDate     = Convert.ToDateTime(siiInvoice.IDFactura.FechaExpedicionFacturaEmisor);

            //
            // Tratamiento del BuyerParty
            //
            BuyerParty = new Party()
            {
                TaxIdentificationNumber = siiInvoice.IDFactura.IDEmisorFactura.NIF,
                PartyName = siiInvoice.IDFactura.IDEmisorFactura.NombreRazon
            };

            if (siiInvoice.IDFactura.IDEmisorFactura.IDOtro != null)
            {
                // Si no es un nif español

                IDOtroType =
                    (IDOtroType)Convert.ToInt32(
                        siiInvoice.IDFactura.IDEmisorFactura.IDOtro.IDType);

                CountryCode = siiInvoice.IDFactura.IDEmisorFactura.IDOtro.CodigoPais;
            }

            //
            // Tratamiento del SellerParty
            //
            SellerParty = new Party()
            {
                TaxIdentificationNumber = (siiInvoice.Contraparte.IDOtro == null) ? null : siiInvoice.Contraparte.IDOtro.ID,
                PartyName = siiInvoice.Contraparte.NombreRazon
            };

            if (siiInvoice.Contraparte.IDOtro != null)
            {
                // Si no es un nif español

                IDOtroType =
                    (IDOtroType)Convert.ToInt32(
                        siiInvoice.Contraparte.IDOtro.IDType);

                CountryCode = siiInvoice.Contraparte.IDOtro.CodigoPais;
            }

            if (BuyerParty == null)
            {
                throw new ArgumentNullException("BuyerParty is null.");
            }

            if (SellerParty == null)
            {
                throw new ArgumentNullException("SellerParty is null.");
            }

            if (IssueDate == null)
            {
                throw new ArgumentNullException("IssueDate is null.");
            }

            OperationType operationType;

            if (!Enum.TryParse <OperationType>(siiInvoice.OperacionIntracomunitaria.TipoOperacion, out operationType))
            {
                throw new InvalidOperationException($"Unknown operation type {siiInvoice.OperacionIntracomunitaria.TipoOperacion}");
            }

            OperationType = operationType;


            ClaveDeclarado claveDeclarado;

            if (!Enum.TryParse <ClaveDeclarado>(siiInvoice.OperacionIntracomunitaria.ClaveDeclarado, out claveDeclarado))
            {
                throw new InvalidOperationException($"Unknown clave declarado {siiInvoice.OperacionIntracomunitaria.ClaveDeclarado}");
            }

            ClaveDeclarado = claveDeclarado;

            EstadoMiembro     = siiInvoice.OperacionIntracomunitaria.EstadoMiembro;
            DescripcionBienes = siiInvoice.OperacionIntracomunitaria.DescripcionBienes;
            DireccionOperador = siiInvoice.OperacionIntracomunitaria.DireccionOperador;
        }