コード例 #1
0
        public ProfileCreditContract[] InsertCreditTransaction(CreditTransactionContract[] d)
        {
            lock (MDB)
            {
                try
                {
                    if (d != null && d.Any())
                    {
                        foreach (var x in d)
                        {
                            if (x.CreditTransaction.TransactionTime == default(DateTime))
                            {
                                x.CreditTransaction.TransactionTime = DateTime.UtcNow;
                            }

                            var ct = new DB.CreditTransaction();
                            x.CreditTransaction.CopyTo(ct, false);
                            MDB.CreditTransactions.InsertOnSubmit(ct);
                        }

                        //Recalculate ballance
                        var affectedBallances = new Code.BallanceManager().RecalcBallance(MDB, MDB.GetChangeSet().Inserts.OfType <DB.CreditTransaction>());

                        MDB.SubmitChanges();

                        return(affectedBallances.Select(x => new ProfileCreditContract()
                        {
                            ProfileCredit = x
                        }).ToArray());
                    }
                }
                catch (Exception ex)
                {
                    HandleMyException(ex);
                }

                return(new ProfileCreditContract[] { });
            }
        }
コード例 #2
0
        internal DB.ProfileCredit ReplaceCreditTransaction(DB.MembershipCashierEntitiesDataContext Db, DB.CreditTransaction prevCt, ICreditTransaction newCt)
        {
            var pc = Db.ProfileCredits.First(x => x.LocationId == prevCt.LocationId && x.ProductId == prevCt.ProductId && x.UserId == prevCt.UserId);
            var adjustmentUnits = newCt.BallanceUnits - prevCt.BallanceUnits;
            var oldPrice        = FindProductPriceAtPointInTime(Db, prevCt.ProductId, prevCt.TransactionTime);
            var newPrice        = FindProductPriceAtPointInTime(Db, prevCt.ProductId, prevCt.TransactionTime);
            var priceDiff       = newPrice.Price - oldPrice.Price;

            if (adjustmentUnits != 0 || priceDiff != decimal.Zero)
            {
                if (adjustmentUnits == 0) //only price changed
                {
                    if (pc.Location.IsCredeitReversed)
                    {
                        pc.Ballance = pc.Ballance + (prevCt.BallanceUnits * oldPrice.Price) - (newCt.BallanceUnits * newPrice.Price);
                    }
                    else
                    {
                        pc.Ballance = pc.Ballance - (prevCt.BallanceUnits * oldPrice.Price) + (newCt.BallanceUnits * newPrice.Price);
                    }
                }
                else if (priceDiff == decimal.Zero) //price stayed the same
                {
                    pc.BallanceUnits += adjustmentUnits;
                    if (pc.Location.IsCredeitReversed)
                    {
                        pc.Ballance = pc.Ballance - (adjustmentUnits * oldPrice.Price);
                    }
                    else
                    {
                        pc.Ballance = pc.Ballance + (adjustmentUnits * oldPrice.Price);
                    }
                }
                else //both price and amount changed
                {
                    pc.BallanceUnits += adjustmentUnits;
                    if (pc.Location.IsCredeitReversed)
                    {
                        pc.Ballance = pc.Ballance + (prevCt.BallanceUnits * oldPrice.Price) - (newCt.BallanceUnits * newPrice.Price);
                    }
                    else
                    {
                        pc.Ballance = pc.Ballance - (prevCt.BallanceUnits * oldPrice.Price) + (newCt.BallanceUnits * newPrice.Price);
                    }
                }
            }

            return(pc);
        }