Sharekhan.domain.ShortTermTaxCalculator.GetTransactionBalance C# (CSharp) Method

GetTransactionBalance() public method

public GetTransactionBalance ( ) : List
return List
        public List<Transaction> GetTransactionBalance()
        {
            int leftOverBuys = 0;
            FinYear theYearBefore = new FinYear(YearForStcg.StartYear-1);
            Instrument theBuyInstrument = Transactions[0].Instrument;

            for (int i = 0; i < Transactions.Count;)
            {
                if (Transactions[i].Date.CompareTo(theYearBefore.GetTaxationPeriod().Value.StartDate) > 0)
                {
                    break;
                }
                if (Transactions[i].GetType() == typeof(BuyTransaction))
                 {
                     leftOverBuys += Transactions[i].Quantity;
                     Transactions.Remove(Transactions[i]);

                 }
                else if (Transactions[i].GetType() == typeof(SellTransaction))
                {
                    leftOverBuys -= Transactions[i].Quantity;
                    Transactions.Remove(Transactions[i]);

                }

            }
            BuyTransaction theBuyToAppendToList = new BuyTransaction(new DateTime(2008, 06, 01), theBuyInstrument, leftOverBuys, new Price(0),0, 0);

            if (theBuyToAppendToList.Quantity > 0)
            {
                //             Transactions.Insert(0, theBuyToAppendToList);

                for (int i = 0; i < Transactions.Count;i++)
                {
                    if (Transactions[i].GetType() == typeof (SellTransaction))
                    {
                       leftOverBuys -= Transactions[i].Quantity;
                       if(leftOverBuys<0)
                       {
                           Transactions[i].Quantity = -leftOverBuys;
                           break;
                       }
                       else if(leftOverBuys>0)
                       {
                           Transactions.Remove(Transactions[i]);
                           i--;
                       }
                    }
                }
            }
            return Transactions;
        }

Usage Example

        public void ShouldBeAbleToCreateATransactionShowingRemainingQuantityOfInstrumentForAllBuyAndSellBeforeOneYearPriorToTaxCalculationYear()
        {
            Instrument share = new Stock(new Symbol("REL"), new Price(10.00), "Rel*iance Power");

            Transaction buyTransaction1 = new BuyTransaction(new DateTime(2005, 06, 01), share, 20, new Price(10.00), 5.00, 3.00);
            Transaction sellTransaction1 = new SellTransaction(new DateTime(2006, 01, 01), share, 10, new Price(20.00), 5.00, 3.00);
            Transaction buyTransaction2 = new BuyTransaction(new DateTime(2006, 12, 01), share, 10, new Price(30.00), 5.00, 3.00);
            Transaction sellTransaction2 = new SellTransaction(new DateTime(2007, 08, 01), share, 10, new Price(50.00), 5.00, 3.00);

            // The balance at end of this should be a Buy with 10 shares left.
            // These transactions below will not be considered.

            Transaction buyTransaction3 = new BuyTransaction(new DateTime(2008, 06, 01), share, 20, new Price(10.00), 5.00, 3.00);
            Transaction sellTransaction3 = new SellTransaction(new DateTime(2009, 01, 01), share, 10, new Price(20.00), 5.00, 3.00);
            Transaction buyTransaction4 = new BuyTransaction(new DateTime(2008, 12, 01), share, 10, new Price(10.00), 5.00, 3.00);
            Transaction sellTransaction4 = new SellTransaction(new DateTime(2009, 08, 01), share, 10, new Price(20.00), 5.00, 3.00);

            List<Transaction> listTransaction = new List<Transaction> { buyTransaction1, sellTransaction1, buyTransaction2, sellTransaction2, buyTransaction3, sellTransaction3, buyTransaction4, sellTransaction4 };

            ShortTermTaxCalculator TaxCalculator = new ShortTermTaxCalculator(listTransaction, new FinYear(2009));

            List<Transaction> listOfValidTransactionsForSTCG = TaxCalculator.GetTransactionBalance();

            Assert.AreEqual(10,listOfValidTransactionsForSTCG[0].Quantity);
        }