public void DeleteReport(Report DelReport)
        {
            string deleteFolder = string.Empty;

            var id = DelReport.Id;

            using (var db = new SAPTestContext())
            {
                var report = db.Reports.Find(id);
                if(report!=null && report.Executor == User.Identity.Name)
                {
                    deleteFolder = Path.Combine(HostingEnvironment.MapPath("/Report1/ReportFiles"), report.Url);
                    db.Reports.Remove(report);
                    db.SaveChanges();
                }
            }

            if (deleteFolder != "" && deleteFolder != HostingEnvironment.MapPath("/Report1/ReportFiles"))
            {
                if (Directory.Exists(deleteFolder))
                {
                    Directory.Delete(deleteFolder, true);
                }
            }
        }
 public List<Release> GetReleases(int id)
 {
     List<Release> releases = null;
     using (var db = new SAPTestContext())
     {
         releases = db.Releases.Where(c => c.Pid == id).AsQueryable().ToList();
     }
     return releases;
 }
 public List<Project> GetProjects()
 {
     List<Project> projects = null;
     using(var db = new SAPTestContext())
     {
         projects = db.Projects.AsQueryable().ToList();
     }
     return projects;
 }
 public List<Asset> GetAssets(int id)
 {
     List<Asset> assets = null;
     using (var db = new SAPTestContext())
     {
         assets = db.Assets.Where(c => c.Rid == id).AsQueryable().ToList();
     }
     return assets;
 }
 public static User GetUser()
 {
     User user = null;
     using (var db = new SAPTestContext())
     {
         var me = System.Web.HttpContext.Current.User;
         //user = db.Users.Where(u => u.NTAccount == @"ASIAPACIFIC\yanzhou").FirstOrDefault();
         user = db.Users.Where(u => u.NTAccount == me.Identity.Name).FirstOrDefault();
     }
     return user;
 }
        public ActionResult Filter(int id, int level, string qs, int page = 1)
        {
            ViewBag.Level = level;
            ViewBag.Id = id;
            ViewBag.Qs = qs;
            ReportInfo ri = new ReportInfo();

            using (var db = new SAPTestContext())
            {
                ri.MyReportNum = db.Reports.AsQueryable().Where(c => c.Executor.Trim().ToLower() == User.Identity.Name.Trim().ToLower()).Count();
                ViewBag.CurrentPage = page;

                switch (level)
                {
                    case 1:
                        ri.TotalReportNum = db.Reports.AsQueryable().Where(c => c.Asset.Release.Pid == id).Count();
                        ViewBag.Message = "Project=" + db.Projects.Find(id).Name;
                        ri.Reports = db.Reports.Include(c => c.Asset.Release.Project).Where(c => c.Asset.Release.Pid == id && c.TestName.Contains(qs)).OrderByDescending(c => c.SubmitDt).Skip(_numInPage * (page - 1)).Take(_numInPage).ToList();
                        break;
                    case 2:
                        ri.TotalReportNum = db.Reports.AsQueryable().Where(c => c.Asset.Rid == id).Count();
                        ViewBag.Message = "Release=" + db.Releases.Find(id).Name;
                        ri.Reports = db.Reports.Include(c => c.Asset.Release.Project).Where(c => c.Asset.Rid == id && c.TestName.Contains(qs)).OrderByDescending(c => c.SubmitDt).Skip(_numInPage * (page - 1)).Take(_numInPage).ToList();
                        break;
                    case 3:
                        ri.TotalReportNum = db.Reports.AsQueryable().Where(c => c.AssetId == id).Count();
                        ViewBag.Message = "Asset=" + db.Assets.Find(id).Name;
                        ri.Reports = db.Reports.Include(c => c.Asset.Release.Project).Where(c => c.AssetId == id && c.TestName.Contains(qs)).OrderByDescending(c => c.SubmitDt).Skip(_numInPage * (page - 1)).Take(_numInPage).ToList();
                        break;
                    default:
                        ri.TotalReportNum = -1;
                        break;
                }

                ViewBag.PageCount = Math.Ceiling((double)ri.TotalReportNum / _numInPage);

            }

            if (qs.Trim() != "")
            {
                ViewBag.Message += " And Test Name =" + qs;
            }

            if (ri.TotalReportNum == -1)
            {
                return RedirectToAction("Index");
            }

            return View(ri);
        }
 public void UpdateReport(Report rp)
 {
     var id = rp.Id;
     var atId = rp.AssetId;
     using (var db = new SAPTestContext())
     {
         var report = db.Reports.Find(id);
         var asset = db.Assets.Find(atId);
         if(report!=null && asset != null && report.Executor == User.Identity.Name)
         {
             report.AssetId = atId;
             db.SaveChanges();
         }
     }
 }
        public ActionResult MyReport(int page = 1)
        {
            ReportInfo ri = new ReportInfo();

            using (var db = new SAPTestContext())
            {

                ri.TotalReportNum = db.Reports.AsQueryable().Count();
                ri.MyReportNum = db.Reports.AsQueryable().Where(c => c.Executor.Trim().ToLower() == User.Identity.Name.Trim().ToLower()).Count();
                ViewBag.PageCount = Math.Ceiling((double)ri.MyReportNum / _numInPage);
                ViewBag.CurrentPage = page;
                ri.Reports = db.Reports.Include(c => c.Asset.Release.Project).Where(c => c.Executor.Trim().ToLower() == User.Identity.Name.Trim().ToLower()).OrderByDescending(c => c.SubmitDt).Skip(_numInPage * (page - 1)).Take(_numInPage).ToList();

            }

            return View(ri);
        }
        private ReportInfo getReports(MyReportFilter Filter,int page)
        {
            ReportInfo ri = new ReportInfo();
            ri.Filter = Filter;
            var u = InternalAttribute.GetUser();
            if (u != null)
                ri.IsVaildUser = true;

            string user = User.Identity.Name.Trim().ToLower();

            ViewBag.Message = "";

            using (var db = new SAPTestContext())
            {
                IQueryable<Report> reportQuery = db.Reports.Include(r => r.Asset.Release.Project).Include(r => r.User);
                if(Filter.qs != null)
                {
                    reportQuery = reportQuery.Where(r=>r.TestName.Contains(Filter.qs));
                    ViewBag.Message += " Test Name contains:" + Filter.qs +"\n";
                }
                if (Filter.Pid > 0)
                {
                    reportQuery = reportQuery.Where(r=>r.Asset.Release.Project.Id == Filter.Pid);
                    ViewBag.Message += "Project:" + db.Projects.Find(Filter.Pid).Name + "\n";
                }
                if (Filter.Rid > 0)
                {
                    reportQuery = reportQuery.Where(r=>r.Asset.Release.Id == Filter.Rid);
                    ViewBag.Message += "Release:" + db.Releases.Find(Filter.Rid).Name + "\n";
                }
                if (Filter.Aid > 0)
                {
                    reportQuery = reportQuery.Where(r=>r.Asset.Id == Filter.Aid);
                    ViewBag.Message += "Asset:" + db.Assets.Find(Filter.Aid).Name + "\n";
                }

                ri.TotalReportNum = reportQuery.Count();

                if (Filter.isMyReport)
                {
                    ViewBag.PageCount = Math.Ceiling((double)ri.MyReportNum / _numInPage);
                    ri.IsMyReport = true;

                    reportQuery = reportQuery.Where(r => r.Executor.Trim().ToLower() == user);
                    ri.MyReportNum = reportQuery.Count();
                    //ri.Reports = reportQuery.Where(r => r.Executor.Trim().ToLower() == user).OrderByDescending(c => c.SubmitDt).Skip(_numInPage * (page - 1)).Take(_numInPage).ToList();
                }
                else
                {
                    ri.MyReportNum = reportQuery.Where(r => r.Executor.Trim().ToLower() == user).Count();
                    //ri.Reports = reportQuery.OrderByDescending(c => c.SubmitDt).Skip(_numInPage * (page - 1)).Take(_numInPage).ToList();
                    ViewBag.PageCount = Math.Ceiling((double)ri.TotalReportNum / _numInPage);
                }

                if (Filter.Sort == -1)
                {
                    reportQuery = reportQuery.OrderByDescending(c => c.SubmitDt);
                }
                else if (Filter.Sort == 0)
                {
                    reportQuery = reportQuery.OrderBy(c => c.CaseNum).ThenByDescending(c => c.SubmitDt);
                }
                else
                {
                    reportQuery = reportQuery.OrderByDescending(c => c.CaseNum).ThenByDescending(c => c.SubmitDt);
                }

                ri.Reports = reportQuery.Skip(_numInPage * (page - 1)).Take(_numInPage).ToList();

            }

            ViewBag.CurrentPage = page;

            return ri;
        }
        public ActionResult Upload()
        {
            var u = InternalAttribute.GetUser();
            if (u!=null)
            {
                HttpPostedFileBase file = Request.Files["file"];
                string guid = Guid.NewGuid().ToString();
                string path = HttpContext.Server.MapPath("/Report1/Temp");
                string backupPath = HttpContext.Server.MapPath("/Report1/Backup");
                string reportFolder = HttpContext.Server.MapPath("/Report1/ReportFiles");

                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }

                if (!Directory.Exists(backupPath))
                {
                    Directory.CreateDirectory(backupPath);
                }

                string fileName = Path.Combine(path, guid + "_" + file.FileName.Split('\\').Last());
                string type = file.ContentType;
                file.SaveAs(fileName);
                FileInfo fi = new FileInfo(fileName);
                int atId;
                try
                {
                    if (string.Compare(fi.Extension, ".zip", true) == 0 && int.TryParse(Request.Form["asset"], out atId) && atId > 0)
                    {
                        ZipFile.ExtractToDirectory(fileName, Path.Combine(reportFolder, guid));
                        string reportFile = Path.Combine(reportFolder, guid, "report.xml");
                        if (System.IO.File.Exists(reportFile))
                        {
                            XmlDocument xDoc = new XmlDocument();
                            xDoc.Load(reportFile);
                            Report rp = ReportReader.ReadReport(xDoc);
                            rp.Executor = User.Identity.Name;
                            rp.Uid = u.Id;
                            using (var db = new SAPTestContext())
                            {
                                rp.Url = guid;
                                // "/Report1/ReportFiles/" + guid + "/report.xml";
                                Asset at = db.Assets.Find(atId);
                                if (at != null)
                                {
                                    rp.Asset = at;
                                }
                                db.Reports.Add(rp);
                                db.SaveChanges();
                            }
                            ViewBag.Flag = true;
                        }
                        else
                        {
                            Directory.Delete(Path.Combine(reportFolder, guid), true);
                            ViewBag.Flag = false;
                        }
                    }
                    else
                    {
                        ViewBag.Flag = false;
                    }
                    System.IO.File.Move(fileName, Path.Combine(backupPath, guid + ".zip"));
                }
                catch (Exception ex)
                {
                    ViewBag.ErrorMsg = ex.Message;
                    fi.Delete();
                    if (Directory.Exists(Path.Combine(reportFolder, guid)))
                    {
                        Directory.Delete(Path.Combine(reportFolder, guid), true);
                    }
                    throw new Exception();

                }
                MyReportFilter filter = new MyReportFilter();
                filter.isMyReport = true;
                return RedirectToAction("Index", filter);
            }
            return RedirectToAction("Index");
        }