public ActionResult ApplyModifyClubInfo(Club modified_club, int[] deleted_branch_ids) { if (ModelState.IsValid) { Club club = db.Clubs.Include(t => t.Branches).Find(modified_club.Id); ClubInfoModificationApplication application = new ClubInfoModificationApplication(); int id = db.GenerateIdFor(IdentityForTPC.APPLICATION); bool has_changed = false; application.Id = id; application.Status = Application.NOT_VERIFIED; application.RejectReason = null; application.Date = DateTime.Now; application.ClubId = modified_club.Id; application.ApplicantUserName = User.Identity.Name; if (modified_club.MajorInfo != null && modified_club.MajorInfo != club.MajorInfo) { application.MajorInfo = modified_club.MajorInfo; has_changed = true; } if (modified_club.SubInfo != null && modified_club.SubInfo != club.SubInfo) { application.SubInfo = modified_club.SubInfo; application.SubInfo.PosterUrl = club.SubInfo.PosterUrl; has_changed = true; } application.ModificationBranches = new List<BranchModification>(); if (modified_club.Branches != null) { foreach (var modified_branch in modified_club.Branches) { if (modified_branch.Id == 0) { application.ModificationBranches.Add(new BranchCreation { BranchName = modified_branch.BranchName }); has_changed = true; } else { ClubBranch orig_branch = club.Branches.First(t => t.Id == modified_branch.Id); if (orig_branch.BranchName != modified_branch.BranchName) { application.ModificationBranches.Add(new BranchUpdate { BranchName = modified_branch.BranchName, OrigBranch = orig_branch }); has_changed = true; } } } } if (deleted_branch_ids != null) { foreach (int deleted_branch_id in deleted_branch_ids) { application.ModificationBranches.Add(new BranchDeletion { BranchId = deleted_branch_id }); } has_changed = true; } if (has_changed) { db.Applications.Add(application); db.SaveChanges(); return Json(new { success = true, msg = "成功提交申请", url = "/ClubApplication/Details?id=" + application.Id }); } else { return Json(new { success = false, msg = "没有做出任何修改,提交失败" }); } } return Json(new { success = false, msg = "提交失败" }); }
public ActionResult Verify(int id, bool is_passed, string reject_reason, int club_id = 0, int page_number = 1, string order = "Date", string pass_filter = "", string search = "", string search_option = "", string type_filter = "") { Application application = db.Applications.Find(id); if (application != null && application.Status == Application.NOT_VERIFIED) { // 更改申请状态 application.Status = is_passed ? Application.PASSED : Application.FAILED; // 使申请生效 if (is_passed) { if (application is ClubRegisterApplication) { ClubRole president = null; ClubRole member = null; foreach (var role in db.ClubRoles.ToList()) { if (role.Name == "会长") { president = role; } else if (role.Name == "会员") { member = role; } } ClubRegisterApplication register_application = application as ClubRegisterApplication; int applicant_count = register_application.Applicants.Count(); ClubBranch member_branch = new ClubBranch { BranchName = "会员部", MemberCount = applicant_count, NewMemberCount = applicant_count, Members = new List<ClubMember>() }; ClubMajorInfo major_info = new ClubMajorInfo { Name = register_application.MajorInfo.Name, Instructor = register_application.MajorInfo.Instructor }; ClubSubInfo sub_info = new ClubSubInfo { Principle = register_application.SubInfo.Principle, Purpose = register_application.SubInfo.Purpose, Range = register_application.SubInfo.Range, Address = register_application.SubInfo.Address, PosterUrl = register_application.SubInfo.PosterUrl, Regulation = register_application.SubInfo.Regulation }; Club registering_club = new Club { Level = 1, Fund = 0, FoundDate = DateTime.Now, MemberCount = applicant_count, NewMemberCount = applicant_count, MajorInfo = major_info, SubInfo = sub_info, Branches = new List<ClubBranch> { member_branch }, Applications = new List<Application> { register_application } }; if (register_application.Applicants != null) { foreach (var applicant in register_application.Applicants) { member_branch.Members.Add(new ClubMember { JoinDate = DateTime.Now, Student = applicant.Applicant, Club = registering_club, ClubRole = applicant.IsMainApplicant ? president : member }); } } else { // 不可能出现没有申请人的社团申请 throw new ArgumentException("No applicant in this club register application."); } if (register_application.Branches != null) { foreach (var created_branch in register_application.Branches) { registering_club.Branches.Add(new ClubBranch { BranchName = created_branch.BranchName, MemberCount = 0, NewMemberCount = 0 }); } } db.Clubs.Add(registering_club); } else if (application is ClubInfoModificationApplication) { ClubInfoModificationApplication info_modification_application = application as ClubInfoModificationApplication; Club modifying_club = info_modification_application.Club; if (modifying_club != null) { if (info_modification_application.MajorInfo != null) { modifying_club.MajorInfo.Name = info_modification_application.MajorInfo.Name; modifying_club.MajorInfo.Instructor = info_modification_application.MajorInfo.Instructor; } if (info_modification_application.SubInfo != null) { modifying_club.SubInfo.Address = info_modification_application.SubInfo.Address; modifying_club.SubInfo.PosterUrl = info_modification_application.SubInfo.PosterUrl; modifying_club.SubInfo.Principle = info_modification_application.SubInfo.Principle; modifying_club.SubInfo.Purpose = info_modification_application.SubInfo.Purpose; modifying_club.SubInfo.Range = info_modification_application.SubInfo.Range; modifying_club.SubInfo.Regulation = info_modification_application.SubInfo.Regulation; } if (info_modification_application.ModificationBranches != null) { foreach (var branch_modification in info_modification_application.ModificationBranches) { if (branch_modification is BranchCreation) { modifying_club.Branches.Add(new ClubBranch { BranchName = branch_modification.BranchName, MemberCount = 0, NewMemberCount = 0, Club = modifying_club }); } else if (branch_modification is BranchDeletion) { var orig_branch = branch_modification.OrigBranch; ClubBranch receiving_branch = null; // 优先选用会员部作为收容部门,若会员部不存在则使用第一个找到的部门。 receiving_branch = modifying_club.Branches.First(s => s.BranchName == "会员部"); if (receiving_branch == null) { receiving_branch = modifying_club.Branches.First(); } // 还是没有部门?没救了 if (receiving_branch == null) { throw new NullReferenceException("Damn! There is no branch in this stupid club!!!"); } foreach (var branch_member in branch_modification.OrigBranch.Members) { receiving_branch.Members.Add(branch_member); } receiving_branch.MemberCount += orig_branch.MemberCount; receiving_branch.NewMemberCount += orig_branch.NewMemberCount; modifying_club.Branches.Remove(branch_modification.OrigBranch); db.ClubBranches.Delete(branch_modification.OrigBranch); } else if (branch_modification is BranchUpdate) { branch_modification.OrigBranch.BranchName = branch_modification.BranchName; } } } } else { // 修改一个不存在的社团。。。 throw new ArgumentException("The club being modified does not exist."); } } else if (application is ClubUnregisterApplication) { ClubUnregisterApplication unregister_application = application as ClubUnregisterApplication; db.Clubs.Include(t => t.Applications).Delete(unregister_application.Club); } else { // 只有3种社团事务申请。 throw new ArgumentException("Invalid club transaction application!"); } } else { application.RejectReason = new ApplicationRejectReason { Reason = reject_reason }; // 清除遗产 if (application is ClubRegisterApplication) { ClubRegisterApplication register_application = application as ClubRegisterApplication; string path = Path.Combine(Server.MapPath(ConfigurationManager.ClubSplashPanelFolder), register_application.SubInfo.PosterUrl); if (!String.IsNullOrWhiteSpace(register_application.SubInfo.PosterUrl) && System.IO.File.Exists(path)) { System.IO.File.Delete(path); } } else if (application is ClubUnregisterApplication) { Club club = db.Clubs.Include(t => t.SubInfo).Find(application.ClubId); string path = Path.Combine(Server.MapPath(ConfigurationManager.ClubSplashPanelFolder), club.SubInfo.PosterUrl); if (!String.IsNullOrWhiteSpace(club.SubInfo.PosterUrl) && System.IO.File.Exists(path)) { System.IO.File.Delete(path); } } } db.SaveChanges(); return RedirectToAction("List", new { club_id = club_id, page_number = page_number, order = order, pass_filter = pass_filter, search = search, search_option = search_option, type_filter = type_filter }); } return View("InvalidOperationError"); }