public ActionResult GenerateWeekReport(int employeeId, string weekOfYear, DateTime fromDate, DateTime toDate)
        {
            try
            {
                ReportDocument rpt = new ReportDocument();
                rpt.Load(Server.MapPath("~/Report/WeekReport.rpt"));

                DailyStatementDS ds = new DailyStatementDS();

                string conn = System.Configuration.ConfigurationManager.ConnectionStrings["DailyStatementContext"].ConnectionString;
                // Get data from DailyInfoes
                string condition = String.Format("SELECT * FROM [dbo].[DailyInfoes] WHERE [EmployeeId] = {0} AND ([CreateDate] >= '{1}' AND [CreateDate] <= '{2}')", employeeId, fromDate.ToShortDateString(), toDate.ToShortDateString());
                SqlDataAdapter da = new SqlDataAdapter(condition, conn);
                da.Fill(ds.DailyInfoes);
                // Get data from Employees
                condition = String.Format("SELECT * FROM [dbo].[Employees] WHERE [EmployeeId] = {0}", employeeId);
                da = new SqlDataAdapter(condition, conn);
                da.Fill(ds.Employees);
                // Get data from Projects
                condition = "SELECT * FROM [dbo].[Projects]";
                da = new SqlDataAdapter(condition, conn);
                da.Fill(ds.Projects);
                // Get data from WorkCategories
                condition = "SELECT * FROM [dbo].[WorkCategories]";
                da = new SqlDataAdapter(condition, conn);
                da.Fill(ds.WorkCategories);
                // Due to SetParameterValue always return error, so use datatable to store parameter
                ds.ParameterForWeekRpt.Rows.Add(employeeId, fromDate, toDate, weekOfYear);

                rpt.SetDataSource(ds);

                Stream stream = rpt.ExportToStream(ExportFormatType.PortableDocFormat);
                return File(stream, "application/pdf");
            }
            catch (Exception e)
            {
                return Content(e.ToString());
            }
        }
        public ActionResult GenerateWorkHoursAnalysisReport(int year, int month, string company)
        {
            try
            {
                ReportDocument rpt = new ReportDocument();
                rpt.Load(Server.MapPath("~/Report/WorkHoursAnalysisReport.rpt"));

                DailyStatementDS ds = new DailyStatementDS();

                string conn = System.Configuration.ConfigurationManager.ConnectionStrings["DailyStatementContext"].ConnectionString;
                // Get data from DailyInfoes
                string condition = "SELECT * FROM [dbo].[DailyInfoes];";
                SqlDataAdapter da = new SqlDataAdapter(condition, conn);
                da.Fill(ds.DailyInfoes);
                // Get data from Employees
                condition = "SELECT * FROM [dbo].[Employees];";
                da = new SqlDataAdapter(condition, conn);
                da.Fill(ds.Employees);
                // Get data from Projects
                condition = "SELECT * FROM [dbo].[Projects];";
                da = new SqlDataAdapter(condition, conn);
                da.Fill(ds.Projects);
                // Due to SetParameterValue always return error, so use datatable to store parameter
                ds.ParameterForAnalysisRpt.Rows.Add(year, month, company);

                rpt.SetDataSource(ds);

                Stream stream = rpt.ExportToStream(ExportFormatType.PortableDocFormat);
                return File(stream, "application/pdf");
            }
            catch (Exception e)
            {
                return Content(e.ToString());
            }
        }
        public ActionResult GenerateProjectSummaryReport(int projectId = 0)
        {
            try
            {
                ReportDocument rpt = new ReportDocument();
                rpt.Load(Server.MapPath("~/Report/ProjectSummaryReport.rpt"));

                DailyStatementDS ds = new DailyStatementDS();

                string conn = System.Configuration.ConfigurationManager.ConnectionStrings["DailyStatementContext"].ConnectionString;
                // Get data from DailyInfoes
                string condition = String.Format("SELECT T1.* FROM [dbo].[DailyInfoes] T1 INNER JOIN [dbo].[Projects] T2 on T2.[ProjectId] = T1.[Project_ProjectId] WHERE (({0} = 0 AND T2.[ProjectId] >= 0) OR T2.[ProjectId] = {0})", projectId);
                SqlDataAdapter da = new SqlDataAdapter(condition, conn);
                da.Fill(ds.DailyInfoes);
                // Get data from WorkCategories
                condition = "SELECT * FROM [dbo].[WorkCategories]";
                da = new SqlDataAdapter(condition, conn);
                da.Fill(ds.WorkCategories);
                // Get data from Projects
                condition = String.Format("SELECT * FROM [dbo].[Projects] WHERE (({0} = 0 AND [ProjectId] >= 0) OR [ProjectId] = {0})", projectId);
                da = new SqlDataAdapter(condition, conn);
                da.Fill(ds.Projects);
                // Get data from Predictions
                condition = String.Format("SELECT * FROM [dbo].[Predictions] WHERE (({0} = 0 AND [Project_ProjectId] >= 0) OR [Project_ProjectId] = {0})", projectId);
                da = new SqlDataAdapter(condition, conn);
                da.Fill(ds.Predictions);
                // Due to SetParameterValue always return error, so use datatable to store parameter
                ds.ParameterForProjectRpt.Rows.Add(projectId, null);

                rpt.SetDataSource(ds);

                Stream stream = rpt.ExportToStream(ExportFormatType.PortableDocFormat);
                return File(stream, "application/pdf");
            }
            catch (Exception e)
            {
                return Content(e.ToString());
            }
        }