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});
        }