Beispiel #1
0
        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
            });
        }
Beispiel #2
0
        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
                            });
                        }
                    }
                }
            }
        }