public ExternalInvoiceUsage GetMiscUsage()
        {
            var dt = Command()
                     .Param("Action", "ForInvoice")
                     .Param("StartPeriod", StartDate)
                     .Param("EndPeriod", EndDate)
                     .Param("IsInternal", false)
                     .Param("AccountID", AccountID > 0, AccountID)
                     .FillDataTable("dbo.MiscBillingCharge_Select");

            dt.Columns.Add("LineCost", typeof(double), "Quantity * Cost");

            var result = new ExternalInvoiceUsage();

            //Aggregate the report based on ClientID
            foreach (DataRow dr in dt.Rows)
            {
                ValidPeriodCheck(dr, Misc);
                double totalFee = Convert.ToDouble(dr.Field <decimal>("Cost"));
                string desc     = ExternalInvoiceUtility.GetMiscDescription(dr);
                result.Add(ExternalInvoiceUtility.CreateInvoiceLineItem(dr, dr.Field <double>("Quantity"), totalFee, desc));
            }

            return(result);
        }
        public ExternalInvoiceUsage GetExternalRoomUsage()
        {
            var ds = Command()
                     .Param("Action", "ForInvoice")
                     .Param("StartPeriod", StartDate)
                     .Param("EndPeriod", EndDate)
                     .Param("IsInternal", false)
                     .Param("AccountID", AccountID > 0, AccountID)
                     .Param("BillingTypeID", !ShowRemote, BillingTypes.Remote)
                     .FillDataSet("dbo.RoomApportionmentInDaysMonthly_Select");

            ds.Tables[0].Columns.Add("LineCost", typeof(double));

            //Calculate the true cost based on billing types
            BillingTypeRepository.CalculateRoomLineCost(ds.Tables[0]);

            DataTable dt       = ds.Tables[0];
            DataTable dtClient = ds.Tables[1];

            var result = new ExternalInvoiceUsage();

            //Aggregate the report based on ClientID
            foreach (DataRow dr in dtClient.Rows)
            {
                ValidPeriodCheck(dr, Room);
                string    filter   = GetFilter(dr);
                double    totalFee = Convert.ToDouble(dt.Compute("SUM(LineCost)", filter));
                DataRow[] rows     = dt.Select(filter);
                string    desc     = ExternalInvoiceUtility.GetRoomDescription(rows[0]);
                result.Add(ExternalInvoiceUtility.CreateInvoiceLineItem(rows[0], 1, totalFee, desc));
            }

            return(result);
        }
        public ExternalInvoiceUsage GetStoreUsage()
        {
            var ds = Command()
                     .Param("Action", "ForInvoice")
                     .Param("StartPeriod", StartDate)
                     .Param("EndPeriod", EndDate)
                     .Param("IsInternal", false)
                     .Param("AccountID", AccountID > 0, AccountID)
                     .FillDataSet("dbo.StoreBilling_Select");

            var dt       = ds.Tables[0];
            var dtClient = ds.Tables[1];

            var result = new ExternalInvoiceUsage();

            //Aggregate the report based on ClientID
            foreach (DataRow dr in dtClient.Rows)
            {
                ValidPeriodCheck(dr, Store);
                string    filter   = GetFilter(dr);
                double    totalFee = Convert.ToDouble(dt.Compute("SUM(LineCost)", filter));
                DataRow[] rows     = dt.Select(filter);
                string    desc     = ExternalInvoiceUtility.GetStoreDescription(rows[0]);
                result.Add(ExternalInvoiceUtility.CreateInvoiceLineItem(rows[0], 1, totalFee, desc));
            }

            return(result);
        }
        public ExternalInvoiceUsage GetToolUsage()
        {
            var ds = Command()
                     .Param("Action", "ForInvoice")
                     .Param("StartPeriod", StartDate)
                     .Param("EndPeriod", EndDate)
                     .Param("IsInternal", false)
                     .Param("AccountID", AccountID > 0, AccountID)
                     .Param("BillingTypeID", !ShowRemote, BillingTypes.Remote)
                     .FillDataSet("dbo.ToolBilling_Select");

            // It will return a dataset with two tables inside
            // table #1: the data table contains individual tool usage
            // table #2: the client table contains all users who has used the tools on this account

            ds.Tables[0].Columns.Add("LineCost", typeof(double));

            //Calculate the true cost based on billing types
            BillingTypeRepository.CalculateToolLineCost(ds.Tables[0]);

            var dt       = ds.Tables[0];
            var dtClient = ds.Tables[1];

            var result = new ExternalInvoiceUsage();

            //Aggregate the report based on ClientID
            foreach (DataRow dr in dtClient.Rows)
            {
                ValidPeriodCheck(dr, Tool);
                string    filter   = GetFilter(dr);
                double    totalFee = Convert.ToDouble(dt.Compute("SUM(LineCost)", filter));
                DataRow[] rows     = dt.Select(filter);
                string    desc     = ExternalInvoiceUtility.GetToolDescription(rows[0]);
                result.Add(ExternalInvoiceUtility.CreateInvoiceLineItem(rows[0], 1, totalFee, desc));
            }

            return(result);
        }