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; }
/// <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]); } } }