private decimal setPercepProvincias(decimal net)
        //obtiene el porcentaje de las provincias que perciban y el neto sea >= al minimo de la provincia
        {
            List<provincias> listaProvincias;
            decimal neto = net;
            Percepciones percep = new Percepciones();
            decimal percibido = 0;
            using (GestionEntities bd = new GestionEntities())
                listaProvincias = bd.provincias.Where(a => a.Percib == true).ToList();

            foreach (provincias p in listaProvincias)
            {
                if (neto >= p.MontoPib)
                    percep.monto = percep.monto + p.Percepib;
            }
            percibido = cuentaPercep(neto, percep.monto, percep.montoMinimo);
            return percibido;
        }
        /*percept impint ivagral iva adic total
        neto = suma de precios sin iva 
        subtotal neto + exento
        total
        */

        public decimal getPercep(List<stocks> listaItems, decimal bonicli, int empresa, string cuit, string provincia, decimal neto, bool convenio, bool esExento, bool enDomicilio, bool valido, string monfac)
        {
            decimal cotizMoneda;
            char[] valores = { '-', '/' };
            cuit = cuit.Trim(valores);
            decimal netoaux = 0;
            foreach (var item in listaItems)
                netoaux += item.getNeto(bonicli);

            decimal percibido = 0;
            Percepciones percep = null;
            using (GestionEntities bd = new GestionEntities())
            {
                cotizMoneda = bd.monedas.Single(a => a.codigo == monfac).ncotiza;
                netoaux = netoaux * cotizMoneda;
                if (bd.PadronIIBBxCuityProv(cuit).Count() != 0)//si esta en padron
                {
                    if (!esExento)
                    {
                        percep = new Percepciones();
                        percep.monto = bd.PadronIIBBxCuityProv(cuit).Single().Percep;
                        percep.montoMinimo = Convert.ToDecimal(bd.PadronIIBBxCuityProv(cuit).Single().MontoPib);
                        percibido = cuentaPercep(netoaux, percep.monto, percep.montoMinimo);
                    }
                }
                else //si no esta en padron
                {
                    if (!esExento)
                    {
                        if (!enDomicilio) //checkEntrega En domicilio
                        {
                            percibido = calcularPercepLocal(netoaux, empresa);
                        }
                        else
                        {
                            percibido = percepProvincia(provincia, cuit, convenio, netoaux); //busca percepciones de la provincia
                        }
                    }
                }
            }
            percibido = percibido / cotizMoneda;
            return percibido;
        }
 private decimal percepProvincia(string provincia, string cuit, bool convenio, decimal neto)
 {
     provincias prov;
     Percepciones percep = new Percepciones();
     decimal percibido = 0;
     if (convenio)
         percibido = setPercepProvincias(neto);
     else
     {
         using (GestionEntities bd = new GestionEntities())
         {
             prov = bd.provincias.Single(a => a.nombre == provincia);
             percep.monto = prov.Percepib;
             percep.montoMinimo = prov.MontoPib;
         }
         percibido = cuentaPercep(neto, percep.monto, percep.montoMinimo);
     }
     return percibido;
 }
示例#4
0
        /// <summary>
        /// Función que lee los nodos XML de un documento CFDI
        /// </summary>
        /// <param name="padre"></param>
        private void LeerNodos(XmlNode padre)
        {
            // Procesamos el nodo
            switch (padre.Prefix)
            {
            case "cfdi": {
                switch (padre.LocalName)
                {
                case "Comprobante":
                    cfdi           = new Comprobante();
                    cfdi.atributos = leerAtributos(padre);
                    break;

                case "Emisor":
                    cfdi.Emisor           = new Emisor();
                    cfdi.Emisor.atributos = leerAtributos(padre);
                    break;

                case "DomicilioFiscal":
                    cfdi.Emisor.DomicilioFiscal           = new DomicilioFiscal();
                    cfdi.Emisor.DomicilioFiscal.atributos = leerAtributos(padre);
                    break;

                case "ExpedidoEn":
                    cfdi.Emisor.ExpedidoEn           = new ExpedidoEn();
                    cfdi.Emisor.ExpedidoEn.atributos = leerAtributos(padre);
                    break;

                case "RegimenFiscal":
                    cfdi.Emisor.RegimenFiscal = padre.Attributes["Regimen"].Value;
                    break;

                case "Receptor":
                    cfdi.Receptor           = new Receptor();
                    cfdi.Receptor.atributos = leerAtributos(padre);
                    break;

                case "Domicilio":
                    cfdi.Receptor.Domicilio           = new Domicilio();
                    cfdi.Receptor.Domicilio.atributos = leerAtributos(padre);
                    break;

                case "Conceptos":
                    cfdi.Conceptos = new Conceptos();
                    break;

                case "Concepto":
                    Concepto concepto = new Concepto();
                    concepto.atributos = leerAtributos(padre);
                    cfdi.Conceptos.Agregar(concepto);
                    break;

                case "Impuestos":
                    cfdi.Impuestos           = new Impuestos();
                    cfdi.Impuestos.atributos = leerAtributos(padre);
                    break;

                case "Traslados":
                    cfdi.Impuestos.Traslados = new Traslados();
                    break;

                case "Traslado":
                    Traslado traslado = new Traslado();
                    traslado.atributos = leerAtributos(padre);
                    cfdi.Impuestos.Traslados.Agregar(traslado);
                    break;

                case "Retenciones":
                    cfdi.Impuestos.Retenciones = new Retenciones();
                    break;

                case "Retencion":
                    Retencion retencion = new Retencion();
                    retencion.atributos = leerAtributos(padre);
                    cfdi.Impuestos.Retenciones.Agregar(retencion);
                    break;
                }
                break;
            }

            case "tfd": {
                switch (padre.LocalName)
                {
                case "TimbreFiscalDigital":
                    TimbreFiscalDigital timbre = new TimbreFiscalDigital();
                    timbre.atributos = leerAtributos(padre);
                    cfdi.AgregarComplemento(timbre);
                    break;
                }
                break;
            }

            case "nomina": {
                switch (padre.LocalName)
                {
                case "Nomina":
                    Nomina nomina = new Nomina();
                    nomina.atributos = leerAtributos(padre);
                    cfdi.AgregarComplemento(nomina);
                    break;

                case "Percepciones":
                    Percepciones percepciones = new Percepciones();
                    percepciones.atributos = leerAtributos(padre);
                    nomina = cfdi.Complemento("nomina") as Nomina;
                    nomina.Percepciones = new Percepciones();
                    break;

                case "Percepcion":
                    Percepcion percepcion = new Percepcion();
                    percepcion.atributos = leerAtributos(padre);
                    nomina = cfdi.Complemento("nomina") as Nomina;
                    nomina.Percepciones.Agregar(percepcion);
                    break;

                case "Deducciones":
                    Deducciones deducciones = new Deducciones();
                    deducciones.atributos = leerAtributos(padre);
                    nomina             = cfdi.Complemento("nomina") as Nomina;
                    nomina.Deducciones = deducciones;
                    break;

                case "Deduccion":
                    Deduccion deduccion = new Deduccion();
                    deduccion.atributos = leerAtributos(padre);
                    nomina = cfdi.Complemento("nomina") as Nomina;
                    nomina.Deducciones.Agregar(deduccion);
                    break;

                case "Incapacidades":
                    nomina = cfdi.Complemento("nomina") as Nomina;
                    nomina.Incapacidades = new Incapacidades();
                    break;

                case "Incapacidad":
                    Incapacidad incapacidad = new Incapacidad();
                    incapacidad.atributos = leerAtributos(padre);
                    nomina = cfdi.Complemento("nomina") as Nomina;
                    nomina.Incapacidades.Agregar(incapacidad);
                    break;

                case "HorasExtras":
                    nomina             = cfdi.Complemento("nomina") as Nomina;
                    nomina.HorasExtras = new HorasExtras();
                    break;

                case "HorasExtra":
                    HorasExtra horasExtra = new HorasExtra();
                    horasExtra.atributos = leerAtributos(padre);
                    nomina = cfdi.Complemento("nomina") as Nomina;
                    nomina.HorasExtras.Agregar(horasExtra);
                    break;
                }
                break;
            }

            case "ecc": {
                switch (padre.LocalName)
                {
                case "EstadoDeCuentaCombustible":
                    EstadoDeCuentaCombustible edoCta = new EstadoDeCuentaCombustible();
                    edoCta.atributos = leerAtributos(padre);
                    cfdi.AgregarComplemento(edoCta);
                    break;

                case "Conceptos":
                    EstadoDeCuentaCombustible combustible = cfdi.Complemento("combustible") as EstadoDeCuentaCombustible;
                    combustible.conceptos = new ConceptosEstadoDeCuentaCombustibles();
                    break;

                case "ConceptoEstadoDeCuentaCombustible":
                    ConceptoEstadoDeCuenta concepto = new ConceptoEstadoDeCuenta();
                    concepto.atributos = leerAtributos(padre);
                    combustible        = cfdi.Complemento("combustible") as EstadoDeCuentaCombustible;
                    combustible.Agregar(concepto);
                    break;

                case "Traslados":
                    combustible = cfdi.Complemento("combustible") as EstadoDeCuentaCombustible;
                    combustible.conceptos[combustible.conceptos.Elementos - 1].traslados = new TrasladosConceptosEstadoDeCuentaCombustible();
                    break;

                case "Traslado":
                    TrasladoEstadoDeCuentaCombustible traslado = new TrasladoEstadoDeCuentaCombustible();
                    traslado.atributos = leerAtributos(padre);
                    combustible        = cfdi.Complemento("combustible") as EstadoDeCuentaCombustible;
                    combustible.conceptos[combustible.conceptos.Elementos - 1].AgregaTraslado(traslado);
                    break;
                }
                break;
            }

            case "implocal": {
                switch (padre.LocalName)
                {
                case "ImpuestosLocales":
                    ImpuestosLocales implocal = new ImpuestosLocales();
                    implocal.atributos = leerAtributos(padre);
                    cfdi.AgregarComplemento(implocal);
                    break;
                }
                break;
            }
            }

            // Procesamos los nodos hijos
            for (int i = 0; i < padre.ChildNodes.Count; i++)
            {
                if (padre.ChildNodes[i].NodeType == XmlNodeType.Element)
                {
                    LeerNodos(padre.ChildNodes[i]);
                }
            }
        }