/*

   Frontend page: Curtailment Page
   Title: Get curtailment shedule details using due date
   Designed: Irfan Mam
   User story:
   Developed: Irfan MAM
   Date created: 3/17/2016

*/
        public List<CurtailmentShedule> GetCurtailmentScheduleByDueDate( int loanId , DateTime dueDate)
        {
            try {
                List<CurtailmentShedule> lstCurtailmentShedule = new List<CurtailmentShedule>(); 
                DataHandler dataHandler = new DataHandler();
                List<object[]> paramertList = new List<object[]>();

                // add the parametets for list
                paramertList.Add(new object[] { "@loan_id", loanId });
                paramertList.Add(new object[] { "@due_date", dueDate });


                // executing the stored proceture and get return list of curtailment
                DataSet dataSet = dataHandler.GetDataSet("spGetCurtailmentSheduleByDueDate", paramertList);

                //if there is data
                if (dataSet != null && dataSet.Tables.Count != 0)
                {

                    // bind the datas to list
                    foreach (DataRow dataRow in dataSet.Tables[0].Rows)
                    {
                        CurtailmentShedule curtailment = new CurtailmentShedule();
                        curtailment.UnitId = dataRow["unit_id"].ToString();
                        curtailment.LoanId = int.Parse(dataRow["loan_id"].ToString());
                        curtailment.Year = int.Parse(dataRow["year"].ToString());
                        curtailment.AdvanceDate = Convert.ToDateTime(dataRow["advance_date"].ToString()).ToString("MM/dd/yyyy");
                        curtailment.DueDate = Convert.ToDateTime(dataRow["curt_due_date"].ToString()).ToString("MM/dd/yyyy");
                        curtailment.Status = Convert.ToInt32(dataRow["curt_status"].ToString());
                        curtailment.CurtAmount = Convert.ToDecimal(dataRow["curt_amount"].ToString());
                        curtailment.IDNumber = dataRow["identification_number"].ToString();
                        curtailment.CurtNumber = int.Parse(dataRow["curt_number"].ToString());
                        curtailment.Make = dataRow["make"].ToString();
                        curtailment.Model = dataRow["model"].ToString();
                        curtailment.AdvanceDate = Convert.ToDateTime(dataRow["advance_date"].ToString()).ToString("MM/dd/yyyy");

                        lstCurtailmentShedule.Add(curtailment);
                    }
                    return lstCurtailmentShedule;
                }

                // if there is no data
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /*

            Frontend page: Report viewr(Report Page)
            Title: Get curtailment details of units by date range
            Designed: Kanishk SHM
            User story: 
            Developed: Kanishk SHM
            Date created: 

        */
        public List<CurtailmentShedule> GetCurtailmentScheduleByDateRange(int loanId, DateTime dueDateStart, DateTime dueDateEnd)
        {
            List<CurtailmentShedule> lstCurtailmentShedule = new List<CurtailmentShedule>();
            DataHandler dataHandler = new DataHandler();
            List<object[]> paramertList = new List<object[]>();
            paramertList.Add(new object[] { "@loan_id", loanId });
            paramertList.Add(new object[] { "@due_date_start", dueDateStart });
            paramertList.Add(new object[] { "@due_date_end", dueDateEnd });

            decimal totalDue = 0.00M;

            DataSet dataSet = dataHandler.GetDataSet("spGetCurtailmentSheduleByDateRange", paramertList);
            if (dataSet != null && dataSet.Tables.Count != 0)
            {
                foreach (DataRow dataRow in dataSet.Tables[0].Rows)
                {
                    CurtailmentShedule curtailment = new CurtailmentShedule();
                    curtailment.UnitId = dataRow["unit_id"].ToString();
                    curtailment.LoanId = Convert.ToInt32(dataRow["loan_id"]);
                    curtailment.Year = Convert.ToInt32(dataRow["year"]);
                    curtailment.AdvanceDate = Convert.ToDateTime(dataRow["advance_date"].ToString()).ToString("MM/dd/yyyy");
                    curtailment.DueDate = Convert.ToDateTime(dataRow["curt_due_date"].ToString()).ToString("MM/dd/yyyy");
                    curtailment.Status = Convert.ToInt32(dataRow["curt_status"]);
                    curtailment.CurtAmount = Convert.ToDecimal(dataRow["curt_amount"]);
                    curtailment.IDNumber = dataRow["identification_number"].ToString();
                    curtailment.CurtNumber = Convert.ToInt32(dataRow["curt_number"]);
                    curtailment.Make = dataRow["make"].ToString();
                    curtailment.Model = dataRow["model"].ToString();
                    curtailment.AdvanceDate = Convert.ToDateTime(dataRow["advance_date"].ToString()).ToString("MM/dd/yyyy");
                    curtailment.PurchasePrice = Convert.ToDecimal(dataRow["cost"]);
                    totalDue = totalDue + Convert.ToDecimal(dataRow["curt_amount"]);
                    lstCurtailmentShedule.Add(curtailment);
                }
                if (lstCurtailmentShedule.Count > 0)
                    lstCurtailmentShedule[0].TotalAmountDue = totalDue;

                return lstCurtailmentShedule;
            }
            return null;
        }
        /*

            Frontend page: Report viewr(Report Page)
            Title: Get curtailment payment details of units by date range
            Designed: Kanishk SHM
            User story: 
            Developed: Kanishk SHM
            Date created: 

        */
        public List<CurtailmentShedule> GetCurtailmentPaidDetailsByDateRange(int loanId, DateTime paidDateStart, DateTime paidDateEnd)
        {
            List<CurtailmentShedule> lstCurtailmentShedule = new List<CurtailmentShedule>();
            DataHandler dataHandler = new DataHandler();
            List<object[]> paramertList = new List<object[]>();
            paramertList.Add(new object[] { "@loan_id", loanId });
            paramertList.Add(new object[] { "@paid_date_start", paidDateStart });
            paramertList.Add(new object[] { "@paid_date_end", paidDateEnd });

            decimal totalpaid = 0.00M;

            DataSet dataSet = dataHandler.GetDataSet("spGetCurtailmentPaidDetailsByDateRange", paramertList);
            if (dataSet != null && dataSet.Tables.Count != 0)
            {
                foreach (DataRow dataRow in dataSet.Tables[0].Rows)
                {
                    CurtailmentShedule curtailment = new CurtailmentShedule();
                    curtailment.LoanId = Convert.ToInt32(dataRow["loan_id"]);
                    curtailment.UnitId = dataRow["UnitId"].ToString();
                    curtailment.IDNumber = dataRow["identification_number"].ToString();
                    curtailment.Year = Convert.ToInt32(dataRow["year"]);
                    curtailment.Make = dataRow["make"].ToString();
                    curtailment.Model = dataRow["model"].ToString();
                    curtailment.PurchasePrice = Convert.ToDecimal(dataRow["cost"]);
                    curtailment.CurtNumber = Convert.ToInt32(dataRow["curt_number"]);

                    curtailment.PaidDate = Convert.ToDateTime(dataRow["paid_date"].ToString()).ToString("MM/dd/yyyy");
                    curtailment.CurtAmount = Convert.ToDecimal(dataRow["curt_amount"]);
                    curtailment.PaidCurtAmount = Convert.ToDecimal(dataRow["CurtPaidAmount"]);



                    curtailment.AdvanceDate = Convert.ToDateTime(dataRow["paid_date"].ToString()).ToString("MM/dd/yyyy");

                    totalpaid = totalpaid + Convert.ToDecimal(dataRow["CurtPaidAmount"]);
                    lstCurtailmentShedule.Add(curtailment);
                }

                for (int i = 0; i < lstCurtailmentShedule.Count; i++)
                    lstCurtailmentShedule[i].TotalAmountPaid = totalpaid;


            }
            return lstCurtailmentShedule;
        }
        /// <summary>
        /// CreatedBy: Kanishka
        /// CreatedDate: 5/28/2016
        /// Get unit cost by unit id list
        /// </summary>
        /// <param name="xmlDoc"></param>
        /// <returns></returns>
        public List<CurtailmentShedule> GetCurtailmentPaidDetailsDuringSession(string xmlDoc)
        {
            List<CurtailmentShedule> lstCurtailmentShedule = new List<CurtailmentShedule>();
            DataHandler dataHandler = new DataHandler();
            List<object[]> paramertList = new List<object[]>();
            paramertList.Add(new object[] { "@Input", xmlDoc });

            DataSet dataSet = dataHandler.GetDataSet("spGetCurtailmentPaidDetailsDuringSession", paramertList);
            if (dataSet != null && dataSet.Tables.Count != 0)
            {
                foreach (DataRow dataRow in dataSet.Tables[0].Rows)
                {
                    CurtailmentShedule curtailment = new CurtailmentShedule();
                    curtailment.UnitId = dataRow["unit_id"].ToString();
                    curtailment.PurchasePrice = Convert.ToDecimal(dataRow["cost"]);
                    lstCurtailmentShedule.Add(curtailment);
                }
            }
            return lstCurtailmentShedule;
        }