public void VerifyAssetApplication(AssetApplication application, bool is_passed, bool save = true) { if (is_passed) { application.Status = Application.PASSED; AssetAssignment assignment = new AssetAssignment { ApplicantUserName = application.ApplicantUserName, ClubId = application.ClubId ?? 0, Date = application.ApplicatedDate, Times = application.Times, AssignedAssets = new List<AssignedAsset>() }; foreach (ApplicatedAsset asset in application.ApplicatedAssets) { assignment.AssignedAssets.Add(new AssignedAsset { Id = db.GenerateIdFor(IdentityForTPC.ASSET_BASE), AssetId = asset.AssetId, Count = asset.Count }); } application.Assignment = assignment; } else { application.Status = Application.FAILED; } if (save) db.SaveChanges(); }
public ActionResult Add(int id) { Dictionary<int,int> min_avail_asset_count = new Dictionary<int,int>(); //能用的物资数量 foreach(var item in unitOfWork.Assets.ToList()) { min_avail_asset_count.Add(item.Id,Int32.MaxValue); } var asset_application = unitOfWork.AssetApplications.Find(id); var date = asset_application.Date; List<Asset> assets = unitOfWork.Assets.ToList().ToList(); foreach (var apptime in asset_application.Times) { //所有跟申请时间相关的assingment var assignments = unitOfWork.AssetAssignments.ToList().Where(t => t.Date == date && t.Times.Contains(apptime)); assets = unitOfWork.Assets.ToList().ToList(); foreach (var assignment in assignments) { foreach (var assigned_asset in assignment.AssignedAssets) { var asset = assets.Find(s => s.Id == assigned_asset.AssetId); asset.Count -= assigned_asset.Count; } } foreach (var asset in assets) { if (asset.Count < min_avail_asset_count[asset.Id]) { min_avail_asset_count[asset.Id] = asset.Count; } } } assets = unitOfWork.Assets.ToList().ToList(); foreach (var asset in assets) { asset.Count = min_avail_asset_count[asset.Id]; } List<int> app_asset_count_error = new List<int>(); bool no_error_mark = true; foreach(var applicated_asset in asset_application.ApplicatedAssets) { if( applicated_asset.Count > assets.Find( s => s.Id == applicated_asset.AssetId ).Count) { app_asset_count_error.Add( applicated_asset.Id); //申请数量超出可用数量 no_error_mark = false; } } AssetAssignment asset_assignment = new AssetAssignment { Date = date, Club = asset_application.Club, Applicant = asset_application.Applicant, AssignedAssets = new List<AssignedAsset>() }; foreach (var time in asset_application.Times) { asset_assignment.Times.Add(time); } foreach (var item in asset_application.ApplicatedAssets) { asset_assignment.AssignedAssets.Add( new AssignedAsset { Id = unitOfWork.GenerateIdFor("AssetBase"), Count = item.Count, Asset = item.Asset }); } if (no_error_mark == true) { unitOfWork.AssetAssignments.Add(asset_assignment); unitOfWork.SaveChanges(); return RedirectToAction("List","AssetApplication"); } return RedirectToAction("SetRejectReason", new { enouthAsset = false, application_id = id}); }