Exemple #1
0
 public AdjustmentsListVM(int leaseId, BillCode billCode, DateTime date, ITenantDBsDir args) : base(GetRepo(date, args), args, false)
 {
     _lseId   = leaseId;
     _repo    = GetRepo(date, AppArgs);
     BillCode = billCode;
     ReloadFromDB();
 }
Exemple #2
0
 public CollectorPerfCell(decimal actual, decimal target, BillCode billCode)
 {
     Actual   = actual;
     Target   = target.ZeroIfNegative();
     NoExcess = GetNoExcess(billCode);
     Overage  = GetOverage(billCode);
     Shortage = GetShortage(billCode);
 }
 public void Normalize()
 {
     this.BillCode    = BillCode?.Trim();
     this.RangeBegin  = RangeBegin?.DateBegin();
     this.RangeEnd    = RangeEnd?.DateEnd();
     this.OrderNumber = OrderNumber?.Trim().ToUpper();
     this.ItemNumber  = ItemNumber?.Trim().ToUpper();
 }
        private bool TryGetValue(dynamic dynamic, BillCode billCode, out decimal val)
        {
            var num = (decimal?)As.Decimal_(dynamic);

            val = num ?? 0;
            //return num.HasValue;
            return(val != 0);
        }
Exemple #5
0
        private decimal GetNoExcess(BillCode billCode)
        {
            switch (billCode)
            {
            case BillCode.Rent:
                return(Math.Max(0, Math.Min(Target, Actual)));

            default:
                return(Actual);
            }
        }
Exemple #6
0
        private decimal GetOverage(BillCode billCode)
        {
            switch (billCode)
            {
            case BillCode.Rent:
                return(Actual > Target ? Actual - Target : 0);

            default:
                return(0);
            }
        }
Exemple #7
0
        private decimal GetShortage(BillCode billCode)
        {
            switch (billCode)
            {
            case BillCode.Rent:
            case BillCode.Rights:
                return(Target > Actual ? Target - Actual : 0);

            default:
                return(0);
            }
        }
Exemple #8
0
        private bool Validate(BillCode billCode, out string whyNot)
        {
            var val = RntCell?.For(billCode);

            if (val.HasValue)
            {
                whyNot = "";
                return(true);
            }
            whyNot = $"No balance for ‹{billCode}›.";
            return(false);
        }
        public override int GetHashCode()
        {
            var hashCode = 1537752341;

            hashCode = hashCode * -1521134295 + BillCode.GetHashCode();
            hashCode = hashCode * -1521134295 + LeaseId.GetHashCode();
            hashCode = hashCode * -1521134295 + AmountOffset.GetHashCode();
            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(Reason);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(DocumentRef);

            return(hashCode);
        }
Exemple #10
0
        public BillState ComputeBill(BillCode billCode, LeaseDTO lease, DateTime date, decimal?previousBalance)
        {
            var composr = GetBillComposer(billCode);
            var state   = new BillState
            {
                BillCode       = billCode,
                OpeningBalance = previousBalance,
                Penalties      = composr.ComputePenalties(lease, date, previousBalance),
                Payments       = composr.ReadPayments(lease, date),
                Adjustments    = composr.ReadAdjustments(lease, date),
            };

            state.ClosingBalance = composr.ComputeClosingBalance(lease, state, date);
            return(state);
        }
Exemple #11
0
        public decimal?For(BillCode billCode)
        {
            switch (billCode)
            {
            case BillCode.Rent: return(Rent);

            case BillCode.Rights: return(Rights);

            case BillCode.Electric: return(Electric);

            case BillCode.Water: return(Water);

            default: return(null);
            }
        }
Exemple #12
0
        public IBillRowComposer GetBillComposer(BillCode billCode)
        {
            switch (billCode)
            {
            case BillCode.Rent: return(_rentComposr);

            case BillCode.Rights: return(_rightsComposr);

            case BillCode.Electric: return(_electricComposr);

            case BillCode.Water: return(_waterComposr);

            default:
                throw Fault.BadArg("BillCode", billCode);
            }
        }
Exemple #13
0
        public decimal?GetDue(LeaseDTO lse, BillCode billCode)
        {
            if (_soaRowsByLseID == null)
            {
                _soaRowsByLseID = CreateSoaRowsDictionary();
            }

            if (!_soaRowsByLseID.TryGetValue(lse.Id, out DailyBillDTO row))
            {
                row = _dir.Balances.GetBill(lse, _date);
            }

            var bill = row?.For(billCode);

            return(_dir.DailyBiller.GetBillComposer(billCode).GetTotalDue(lse, bill, _date));
        }
        public static ColPerfBillPerformance New(BillCode billCode, IEnumerable <CollectorPerfCell> cells)
        {
            var bp = new ColPerfBillPerformance(billCode);

            bp.Target   = cells.Sum(_ => _.Target);
            bp.Actual   = cells.Sum(_ => _.Actual);
            bp.NoExcess = cells.Sum(_ => _.NoExcess);
            if (bp.Target != 0)
            {
                bp.PerfRate = bp.NoExcess / bp.Target;
            }

            bp.UnderpaidCount = cells.Count(_ => _.IsShort);
            bp.UnderpaidTotal = cells.Sum(_ => _.Shortage);

            bp.OverpaidCount = cells.Count(_ => _.IsOver);
            bp.OverpaidTotal = cells.Sum(_ => _.Overage);

            return(bp);
        }
 private decimal GetAmount(dynamic byf, out BillCode billCode)
 {
     if (TryGetValue(byf.rent, billCode = BillCode.Rent, out decimal val))
     {
         return(val);
     }
     if (TryGetValue(byf.surcharge, billCode = BillCode.Rent, out val))
     {
         return(val);
     }
     if (TryGetValue(byf.rights, billCode = BillCode.Rights, out val))
     {
         return(val);
     }
     if (TryGetValue(byf.electric, billCode = BillCode.Electric, out val))
     {
         return(val);
     }
     if (TryGetValue(byf.water, billCode = BillCode.Water, out val))
     {
         return(val);
     }
     throw Bad.Data("Balance Adj. has no valid amount");
 }
Exemple #16
0
 public BillState For(BillCode billCode)
 => Bills?.SingleOrDefault(_ => _.BillCode == billCode);
Exemple #17
0
 public decimal?For(BillCode billCode)
 => billCode == BillCode ? Amount : (decimal?)null;
 private ColPerfBillPerformance(BillCode billCode)
 {
     BillCode = billCode;
 }