Beispiel #1
0
        public NominaModel(List <XMLNodoEntity> nodos) : base(nodos)
        {
            try
            {
                XMLNodoEntity nodo = nodos.Find(i => i.TipoNodo == Sistema.Nodo.Nomina);
                existeNodo = nodos.Exists(i => i.TipoNodo == Sistema.Nodo.Nomina);

                Nomina      = new NominaEntity(nodo?.Nomina);
                Concepto    = new ConceptoEntity(nodos);
                Comprobante = new ComprobanteEntity(nodos);

                Deducciones  = new List <DeduccionesEntity>();
                Percepciones = new List <PercepcionesEntity>();

                if (nodo?.Percepcion.Elements().Any() == true)
                {
                    Percepciones.AddRange(from XElement item in nodo?.Percepcion.Elements()
                                          select new PercepcionesEntity(nodo?.Percepcion, item));
                }
                if (nodo?.Deducciones.Elements().Any() == true)
                {
                    Deducciones.AddRange(from XElement item in nodo?.Deducciones.Elements()
                                         select new DeduccionesEntity(nodo?.Deducciones, item));
                }
            }
            catch (System.Exception ex)
            {
                Error = ex;
            }
        }
        /// <summary>
        /// Ejercicio 3
        /// </summary>
        /// <param name="comprobante"></param>
        /// <returns></returns>
        public ITipoComprobante CrearTipoComprobante(ComprobanteEntity comprobante)
        {
            if (comprobante.TipoComprobante != null)
            {
                return(new TipoComprobante1());
            }

            else if (comprobante.ParteContrato != null)
            {
                return(new TipoComprobante2());
            }

            throw new InvalidOperationException("No se pudo resolver el tipo de comprobante");
        }
        /// <summary>
        /// Ejercicio 4
        /// </summary>
        /// <param name="comprobante"></param>
        public void Validar(ComprobanteEntity comprobante)
        {
            var errores = new List <String>();

            if (comprobante.TipoComprobante == null)
            {
                errores.Add("Tipo comprobante es obligatorio");
            }

            if (comprobante.ParteContrato == null)
            {
                errores.Add("Parte contrato es obligatorio");
            }

            if (comprobante.Fecha == null)
            {
                errores.Add("La fecha del comprobante es obligatorio");
            }

            if (comprobante.EmpresaDestinataria == null)
            {
                errores.Add("La empresa destinataria es obligatoria");
            }

            var importeNeto = comprobante.ComprobantesConcepto.Where(cc => cc.PorcentajeIVA != 0 && cc.TipoConcepto.Id == 1).Sum(cc => cc.ImporteNeto);

            var ImporteNetoADeducir = comprobante.ComprobantesConcepto.Where(cc => cc.PorcentajeIVA != 0 && cc.TipoConcepto.Id == 2).Sum(cc => cc.ImporteNeto);

            if ((importeNeto - ImporteNetoADeducir) < 0)
            {
                errores.Add("El importe neto no puede ser igual a cero.");
            }

            var importeNetoNoGravadoAFacturar = comprobante.ComprobantesConcepto.Where(cc => cc.PorcentajeIVA == 0 && cc.TipoConcepto.Id == 1).Sum(cc => cc.ImporteNeto);

            var importeNetoNoGravadoADeducir = comprobante.ComprobantesConcepto.Where(cc => cc.PorcentajeIVA == 0 && cc.TipoConcepto.Id == 2).Sum(cc => cc.ImporteNeto);

            if ((importeNetoNoGravadoAFacturar - importeNetoNoGravadoADeducir) < 0)
            {
                errores.Add("El importe neto gravado tiene que ser mayor a cero");
            }

            if (errores.Any())
            {
                throw new ValidationException(String.Join(Environment.NewLine, errores));
            }
        }