/// <summary> /// 新增並回傳 /// </summary> /// <returns></returns> public WorksModel CreateAndReturn() { WorksModel _PackagesModel = new WorksModel(); if (this.Create()) { _PackagesModel = GetWorksModelDetail(this.WorksNo); } return(_PackagesModel); }
/// <summary> /// 計算作品分級 /// </summary> /// <param name="_WorksModel"></param> /// <returns></returns> public static int CalculateWorksRating(WorksModel _WorksModel) { double _Rating = 0; int _WorksAmount = 0; using (var context = new EG_MagicCubeEntities()) { foreach (int _AuthorNo in _WorksModel.AuthorNo_InputString.Select(n => Convert.ToInt32(n)).ToArray()) { _WorksAmount = _WorksAmount + (context?.WorksAuthors?.AsQueryable().Where(c => c.Author_No == _AuthorNo).Count()).Value; } } _WorksAmount = (_WorksAmount + 1) / _WorksModel.AuthorNo_InputString.Select(n => Convert.ToInt32(n)).Count(); double _AuthorsRating = Convert.ToDouble(AuthorsModel.CalculateAuthorsRating(_WorksAmount)); _Rating = (_WorksModel.Marketability * 0.3) + (_WorksModel.Packageability * 0.1) + (_WorksModel.Valuability * 0.25) + (_WorksModel.Artisticability * 0.2) + (_AuthorsRating * 0.15); return(Convert.ToInt32(_Rating)); }
/// <summary> /// 更新作品資料 /// </summary> /// <param name="newWorks">新作品資料</param> /// <returns></returns> public static bool Update(WorksModel newWorks) { Guid Guid_WorksNo = Guid.Parse(newWorks.WorksNo.ToUpper()); using (var context = new EG_MagicCubeEntities()) { var oldWorks = context.Works.AsQueryable().First(x => x.WorksNo == Guid_WorksNo); if (oldWorks != null) { if (oldWorks.WorksModules != null) { foreach (WorksModules _WorksModules in oldWorks.WorksModules.ToList()) { var del_WorksModules = context.WorksModules.AsQueryable().FirstOrDefault(c => c.WorksModulesNo == _WorksModules.WorksModulesNo); context.WorksModules.Remove(del_WorksModules); } } if (oldWorks.WorksAuthors != null) { foreach (WorksAuthors _WorksAuthors in oldWorks.WorksAuthors.ToList()) { var del_WorksAuthors = context.WorksAuthors.AsQueryable().FirstOrDefault(c => c.Works_Author_No == _WorksAuthors.Works_Author_No); context.WorksAuthors.Remove(del_WorksAuthors); } } if (oldWorks.WorksPropGenre != null) { foreach (WorksPropGenre _WorksPropGenre in oldWorks.WorksPropGenre.ToList()) { var del_WorksPropGenre = context.WorksPropGenre.AsQueryable().FirstOrDefault(c => c.WorksPropGenreNo == _WorksPropGenre.WorksPropGenreNo); context.WorksPropGenre.Remove(del_WorksPropGenre); } } if (oldWorks.WorksPropStyle != null) { foreach (WorksPropStyle _WorksPropStyle in oldWorks.WorksPropStyle.ToList()) { var del_WorksPropStyle = context.WorksPropStyle.AsQueryable().FirstOrDefault(c => c.WorksPropStyleNo == _WorksPropStyle.WorksPropStyleNo); context.WorksPropStyle.Remove(del_WorksPropStyle); } } if (oldWorks.WorksPropOwner != null) { foreach (WorksPropOwner _WorksPropOwner in oldWorks.WorksPropOwner.ToList()) { var del_WorksPropOwner = context.WorksPropOwner.AsQueryable().FirstOrDefault(c => c.WorksPropOwnerNo == _WorksPropOwner.WorksPropOwnerNo); context.WorksPropOwner.Remove(del_WorksPropOwner); } } if (oldWorks.WorksPropWareType != null) { foreach (WorksPropWareType _WorksPropWareType in oldWorks.WorksPropWareType.ToList()) { var del_WorksPropWareType = context.WorksPropWareType.AsQueryable().FirstOrDefault(c => c.WorksPropWareTypeNo == _WorksPropWareType.WorksPropWareTypeNo); context.WorksPropWareType.Remove(del_WorksPropWareType); } } } oldWorks.MaterialsID = newWorks.MaterialsID; oldWorks.AuthorsNo = newWorks.AuthorsNo; oldWorks.WorksName = newWorks.WorksName; oldWorks.YearStart = newWorks.YearStart; oldWorks.YearEnd = newWorks.YearEnd; oldWorks.Cost = newWorks.Cost; oldWorks.Price = newWorks.Price; oldWorks.GrossMargin = newWorks.GrossMargin = Math.Round((((Convert.ToDouble((newWorks.Price / double.Parse("1.05"))) - Convert.ToDouble(newWorks.Cost)) / Convert.ToDouble((newWorks.Price / double.Parse("1.05")))) * Convert.ToDouble(100)), 3);; oldWorks.PricingDate = newWorks.PricingDate; oldWorks.Artisticability = newWorks.Artisticability; oldWorks.Marketability = newWorks.Marketability; oldWorks.Packageability = newWorks.Packageability; oldWorks.Valuability = newWorks.Valuability; oldWorks.ModifyUser = HttpContext.Current?.User?.Identity?.Name ?? ""; oldWorks.ModifyDate = System.DateTime.Now; oldWorks.Remarks = newWorks.Remarks; oldWorks.Rating = CalculateWorksRating(newWorks).ToString(); foreach (int _AuthorNo in newWorks.AuthorNo_InputString.Select(n => Convert.ToInt32(n)).ToArray()) { var _Authors = context?.Authors?.FirstOrDefault(c => c.AuthorsNo == _AuthorNo); int _WorksAmount = (context?.WorksAuthors?.AsQueryable().Where(c => c.Author_No == _AuthorNo).Count()).Value; int _AuthorsRating = AuthorsModel.CalculateAuthorsRating(_WorksAmount); _Authors.Rating = _AuthorsRating.ToString(); _Authors.WorksAmount = _WorksAmount; } //組件 foreach (WorksModuleModel _WorksModuleModel in newWorks.WorksModuleList) { WorksModules _WorksModules = new WorksModules(); _WorksModules.WorksNo = oldWorks.WorksNo; _WorksModules.Material = _WorksModuleModel.Material.MenuID; _WorksModules.Measure = _WorksModuleModel.Measure; _WorksModules.Length = _WorksModuleModel.Length; _WorksModules.Width = _WorksModuleModel.Width; _WorksModules.Height = _WorksModuleModel.Height; _WorksModules.Deep = _WorksModuleModel.Deep; _WorksModules.TimeLength = _WorksModuleModel.TimeLength ?? ""; _WorksModules.Amount = _WorksModuleModel.Amount; _WorksModules.CountNoun = _WorksModuleModel.CountNoun.MenuID; context.WorksModules.Add(_WorksModules); } //foreach (HttpPostedFileBase _Files in newWorks.UploadWorksFiles) //{ // if (_Files != null) // { // WorksFilesModel.InsFile(oldWorks.WorksNo.ToString(), _Files); // //context.WorksFiles.Add(new WorksFiles() { WorksNo = oldWorks.WorksNo, FileBase64Str = FileUrl }); // } //} //藝術家 if (newWorks.AuthorNo_InputString.Count != 0) { foreach (int _AuthorNo in newWorks.AuthorNo_InputString.Select(n => Convert.ToInt32(n)).ToArray()) { context.WorksAuthors.Add(new WorksAuthors() { Works_No = oldWorks.WorksNo, Author_No = _AuthorNo }); } } //類型 if (newWorks.GenreNo_InputString.Count != 0) { foreach (int _GenreNo in newWorks.GenreNo_InputString.Select(n => Convert.ToInt32(n)).ToArray()) { context.WorksPropGenre.Add(new WorksPropGenre() { WorksNo = oldWorks.WorksNo, GenreNo = _GenreNo }); } } //風格 if (newWorks.StyleNo_InputString.Count != 0) { foreach (int _StyleNo in newWorks.StyleNo_InputString.Select(n => Convert.ToInt32(n)).ToArray()) { context.WorksPropStyle.Add(new WorksPropStyle() { WorksNo = oldWorks.WorksNo, StyleNo = _StyleNo }); } } //擁有者 if (newWorks.OwnerNo_InputString.Count != 0) { foreach (int _OwnerNo in newWorks.OwnerNo_InputString.Select(n => Convert.ToInt32(n)).ToArray()) { context.WorksPropOwner.Add(new WorksPropOwner() { WorksNo = oldWorks.WorksNo, OwnerNo = _OwnerNo }); } } //庫別 if (newWorks.WareTypeNo_InputString.Count != 0) { foreach (int _WareTypeNo in newWorks.WareTypeNo_InputString.Select(n => Convert.ToInt32(n)).ToArray()) { context.WorksPropWareType.Add(new WorksPropWareType() { WorksNo = oldWorks.WorksNo, WareTypeNo = _WareTypeNo }); } } if (context.SaveChanges() == 0) { return(false); } else { foreach (int _AuthorNo in newWorks.AuthorNo_InputString.Select(n => Convert.ToInt32(n)).ToArray()) { var _Authors = context?.Authors?.FirstOrDefault(c => c.AuthorsNo == _AuthorNo); int _WorksAmount = (context?.WorksAuthors?.AsQueryable().Where(c => c.Author_No == _AuthorNo).Count()).Value; int _AuthorsRating = AuthorsModel.CalculateAuthorsRating(_WorksAmount); _Authors.Rating = _AuthorsRating.ToString(); _Authors.WorksAmount = _WorksAmount; context.SaveChanges(); } } } return(true); }
/// <summary> /// 用作品編號找作品 /// </summary> /// <param name="WorksNo"></param> /// <returns></returns> public static WorksModel GetWorksModelDetail(string WorksNo) { WorksModel _WorksModel = new WorksModel(); Guid Guid_WorksNo = Guid.Parse(WorksNo.ToUpper()); using (var context = new EG_MagicCubeEntities()) { Works _Works = context.Works.AsQueryable().Where(c => c.IsDel != "Y" && c.WorksNo.Equals(Guid_WorksNo)).Select(c => c).FirstOrDefault <Works>(); if (_Works != null) { var _WorksAuthorsist = context.WorksAuthors.AsQueryable().Where(c => c.Works_No.Equals(Guid_WorksNo)).Select(wa => wa).ToList(); var _WorksPropGenreList = context.WorksPropGenre.AsQueryable().Where(c => c.WorksNo.Equals(Guid_WorksNo)).Select(wpg => wpg).ToList(); var _WorksPropOwnerList = context.WorksPropOwner.AsQueryable().Where(c => c.WorksNo.Equals(Guid_WorksNo)).Select(wpo => wpo).ToList(); var _WorksPropStyleList = context.WorksPropStyle.AsQueryable().Where(c => c.WorksNo.Equals(Guid_WorksNo)).Select(wps => wps).ToList(); var _WorksPropWareTypeList = context.WorksPropWareType.AsQueryable().Where(c => c.WorksNo.Equals(Guid_WorksNo)).Select(wpwt => wpwt).ToList(); var _WorksWorksFilesList = context.WorksFiles.AsQueryable().Where(c => c.WorksNo.Equals(Guid_WorksNo)).OrderBy(c => c.Sorting).ThenBy(c => c.WorksFilesNo).Select(wf => wf).ToList(); var _WorksWorksModulesList = context.WorksModules.AsQueryable().Where(c => c.WorksNo.Equals(Guid_WorksNo)).Select(wm => wm).ToList(); _WorksModel.WorksNo = _Works.WorksNo.ToString(); _WorksModel.MaterialsID = _Works.MaterialsID; _WorksModel.AuthorsNo = _Works.AuthorsNo; _WorksModel.AuthorsName = _Works.WorksAuthors.FirstOrDefault().Authors.AuthorsCName; _WorksModel.WorksName = _Works.WorksName; _WorksModel.YearStart = _Works.YearStart; _WorksModel.YearEnd = _Works.YearEnd; _WorksModel.Remarks = _Works.Remarks; _WorksModel.Cost = _Works.Cost; _WorksModel.Price = _Works.Price; _WorksModel.PricingDate = _Works.PricingDate; _WorksModel.GrossMargin = _Works.GrossMargin; _WorksModel.Marketability = _Works.Marketability; _WorksModel.Packageability = _Works.Packageability; _WorksModel.Valuability = _Works.Valuability; _WorksModel.Artisticability = _Works.Artisticability; _WorksModel.CreateUser = _Works.CreateUser; _WorksModel.CreateDate = _Works.CreateDate; _WorksModel.ModifyUser = _Works.ModifyUser; _WorksModel.Rating = _Works.Rating; _WorksModel.ModifyDate = (DateTime)_Works.ModifyDate; _WorksModel.AuthorNo_InputString = _WorksAuthorsist?.Select(wa => wa.Author_No.ToString()).ToList(); _WorksModel.GenreNo_InputString = _WorksPropGenreList?.Select(wpg => wpg.GenreNo.ToString()).ToList(); _WorksModel.StyleNo_InputString = _WorksPropStyleList?.Select(wpo => wpo.StyleNo.ToString()).ToList(); _WorksModel.OwnerNo_InputString = _WorksPropOwnerList?.Select(wps => wps.OwnerNo.ToString()).ToList(); _WorksModel.WareTypeNo_InputString = _WorksPropWareTypeList?.Select(wpwt => wpwt.WareTypeNo.ToString()).ToList(); _WorksModel.WorksAuthors = _WorksAuthorsist?.Select(wa => new MenuViewModel() { MenuID = wa.Author_No, MenuName = wa.Authors.AuthorsCName }).ToList(); _WorksModel.WorksPropGenreList = _WorksPropGenreList?.Select(wpg => new MenuViewModel() { MenuID = wpg.GenreNo, MenuName = wpg.Menu_Genre.GenreName }).ToList(); _WorksModel.WorksPropOwnerList = _WorksPropOwnerList?.Select(wpo => new MenuViewModel() { MenuID = wpo.OwnerNo, MenuName = wpo.Menu_Owner.OwnerName }).ToList(); _WorksModel.WorksPropStyleList = _WorksPropStyleList?.Select(wps => new MenuViewModel() { MenuID = wps.StyleNo, MenuName = wps.Menu_Style.StyleName }).ToList(); _WorksModel.WorksPropWareTypeList = _WorksPropWareTypeList?.Select(wpwt => new MenuViewModel() { MenuID = wpwt.WareTypeNo, MenuName = wpwt.Menu_WareType.WareTypeName }).ToList(); _WorksModel.ImageCount = _WorksWorksFilesList.Count; _WorksModel.WorksAmount = _Works.WorksAuthors.FirstOrDefault().Authors.WorksAmount; _WorksModel.ViewWorksFiles = _Works.WorksFiles.Select(wf => wf.FileBase64Str).ToList(); _WorksModel.WorksModuleList = _WorksWorksModulesList?.Select(wm => new WorksModel.WorksModuleModel() { WorksModulesNo = wm.WorksModulesNo, WorksNo = wm.WorksNo.ToString(), Material = new MenuViewModel { MenuID = wm.Menu_Material.MaterialNo, MenuName = wm.Menu_Material.MaterialName }, Measure = wm.Measure, Length = wm.Length, Width = wm.Width, Height = wm.Height, Deep = wm.Deep, TimeLength = wm.TimeLength, Amount = wm.Amount, CountNoun = new MenuViewModel { MenuID = wm.Menu_CountNoun.CountNounNo, MenuName = wm.Menu_CountNoun.CountNounName } }).ToList(); } } return(_WorksModel); }