protected override void OnPagoAplicacionesChanged(object sender, ListChangedEventArgs e) { var cuentaDeudoresPorVentas = Identificadores.GetInstance(Session).CuentaDeudoresPorVentas; if (cuentaDeudoresPorVentas == null) { return; } Items.ToList( ).ForEach(comprobanteItem => { if (comprobanteItem.Cuenta.Oid == cuentaDeudoresPorVentas.Oid) { comprobanteItem.Delete( ); } }); var importeAplicado = Evaluate("Aplicaciones.SUM(ImporteAplicado*Cuota.Comprobante.Tipo.DebitoCredito)"); if (importeAplicado == null) { return; } var aplicado = ( decimal )importeAplicado; Items.Add(new ComprobanteItem(Session) { Cuenta = cuentaDeudoresPorVentas, Importe = Math.Abs(aplicado), DebeHaber = aplicado > 0 ? DebeHaber.Haber : DebeHaber.Debe, Autogenerado = true, Cambio = 1 }); }
public override void AfterConstruction( ) { base.AfterConstruction( ); Tipo = Identificadores.GetInstance(Session).TipoComprobanteRecibo; }
//TODO: refactorear a un motor en impuestos /// <summary> /// Motor de calculo de impuestos de venta /// </summary> public void AplicarImpuestos( ) { IgnoreOnChanged = true; Items.Where(item => item.Generado).Empty( ); IgnoreOnChanged = false; foreach (var impuesto in new XPCollection <Impuesto>(Session, true)) { if (impuesto == Impuestos.Impuestos.IVA) { var dic = new Dictionary <int, ComprobanteItem>( ); foreach (var item in Items.Where(item => item.Concepto != null && item.Concepto.AlicuotaImpuesto != null)) { if (!dic.ContainsKey(item.Concepto.AlicuotaImpuesto.Oid)) { dic[item.Concepto.AlicuotaImpuesto.Oid] = new ComprobanteItem(Session) { Generado = true, Concepto = Session.FindObject <Concepto>(new BinaryOperator("AlicuotaImpuestoAsociada.Oid", item.Concepto.AlicuotaImpuesto.Oid)), Cantidad = 1, Alicuota = item.Concepto.AlicuotaImpuesto.Valor }; } dic[item.Concepto.AlicuotaImpuesto.Oid].BaseImponible += item.ImporteTotal; } foreach (var itm in dic) { itm.Value.PrecioUnitario = Math.Round(itm.Value.BaseImponible * (itm.Value.Alicuota / 100), 2); Items.Add(itm.Value); } } else if (impuesto == Impuestos.Impuestos.IngresosBrutosProvBuenosAires) { var datosImp = CoreAppLogonParameters.Instance.EmpresaActual(Session).Persona.DatosImpositivos.FirstOrDefault(di => di.Impuesto == Impuestos.Impuestos.IngresosBrutosProvBuenosAires); if (datosImp != null && datosImp.AgentePercepcion) { var cuitCliente = 0L; if (!long.TryParse(this.IdentificacionNro, out cuitCliente)) { continue; } var padron = Session.FindObject <Padron>(CriteriaOperator.Parse("Oid = ?", cuitCliente)); if (padron != null) { var tasa = padron.AlicuotaPercepcion; var baseImponible = Items.Where(item => item.Concepto != null && item.Concepto.Clase == ConceptoClase.General).Sum(item => item.ImporteTotal); var importe = baseImponible * tasa / 100; Items.Add(new ComprobanteItem(Session) { Generado = true, Concepto = Identificadores.GetInstance(Session).PercepcionIIBBBAConcepto, Cantidad = 1, PrecioUnitario = importe }); } } } } }