using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; using EnVisage.Models; namespace EnVisage.Code.BLL { public class UDFManager : ManagerBase { public UDFManager(EnVisageEntities dbContext) : base(dbContext) { } protected override UserDefinedField InitInstance() { return new UserDefinedField { Id = Guid.NewGuid() }; } protected override UserDefinedField RetrieveReadOnlyById(Guid key) { return DataTable.AsNoTracking().FirstOrDefault(t => t.Id == key); } public UDFModel Load(Guid? Id) { var udf = this.DataTable.Where(x => x.Id == Id.Value).FirstOrDefault(); if (udf != null && udf.Id != Guid.Empty) return new UDFModel() { Id = udf.Id, CreatorId = udf.CreatorId, DefaultValue = udf.DefaultValue, Description = udf.Description, DomainId = udf.DomainId, Label = udf.Label, Name = udf.Name, Required = udf.Required, SortOrder = udf.SortOrder, Status = udf.Status, Type = udf.Type }; else return new UDFModel(); } public override DbSet DataTable { get { return DbContext.UserDefinedFields; } } public override UserDefinedField Save(UDFModel model) { var udf = this.Load(model.Id); model.LastUpdate = DateTime.Now; return base.Save(model); } public void Delete(Guid Id) { var udf = this.Load(Id, false); if (udf == null || udf.Id == Guid.Empty) return; var values=this.DbContext.UserDefinedValues.Where(x => x.UserDefinedFieldId == udf.Id).ToList(); if (values.Count > 0) this.DbContext.UserDefinedValues.RemoveRange(values); this.DataTable.Remove(udf); if (IsContextLocal) DbContext.SaveChanges(); } public List LoadCollection(Guid parentId, UserDefinedFieldDomain type) { var vmCollectionList = new List(); var udfs = this.DbContext.UserDefinedFields.Where(x => x.DomainId == (int) type && x.Status); foreach (var udf in udfs) { var m = new UDFModel() { Id = udf.Id, CreatorId = udf.CreatorId, DefaultValue = udf.DefaultValue, Description = udf.Description, DomainId = udf.DomainId, Label = udf.Label, Name = udf.Name, Required = udf.Required, SortOrder = udf.SortOrder, Status = udf.Status, Type = udf.Type }; var vmCollection = new UDFValueCollection() { Id = m.Id, Type = m.Type }; var vm = new UDFValueModel(); var udfvs = this.DbContext.UserDefinedValues.Where(x => x.UserDefinedFieldId == udf.Id && x.ParentId == parentId).FirstOrDefault(); if (udfvs != null && udfvs.Id != Guid.Empty) { vm = new UDFValueModel() { Id = udfvs.Id, UserDefinedFieldId = m.Id, CreatorId = udfvs.CreatorId, Value = udfvs.Value, ParentId = udfvs.ParentId, Label = m.Label, DefaultValue = m.DefaultValue, Required=m.Required, Area = m.DomainId }; } else { vm = new UDFValueModel() { DefaultValue = m.DefaultValue, Value = m.DefaultValue, UserDefinedFieldId = m.Id, Id = Guid.Empty, Label = m.Label, Required = m.Required, Area= m.DomainId }; } vmCollection.Values = vm; vmCollectionList.Add(vmCollection); } return vmCollectionList; } public IQueryable LoadUDFListByArea(int area) { return UdfModelBasicQuery.Where(x => x.DomainId == area); } public void saveValue(UDFValueModel model, Guid LabelId, Guid ParentId, Guid UserID) { if (model.Id == Guid.Empty && ! string.IsNullOrEmpty(model.Value) && model.Value != model.DefaultValue) { var udfv = new UserDefinedValue() { Id = Guid.NewGuid(), UserDefinedFieldId = LabelId, Status = true, CreatorId = UserID, EntryTimeStamp = DateTime.Now, LastUpdate = DateTime.Now, ModifiedById = UserID, ParentId = ParentId, Value = model.Value }; this.DbContext.UserDefinedValues.Add(udfv); } else { var udfv = this.DbContext.UserDefinedValues.Where(x => x.Id == model.Id).FirstOrDefault(); if (udfv != null && udfv.Id != Guid.Empty) { //check to see if the value has changed and its not the default value if (udfv.Value != model.Value && model.Value != model.DefaultValue) { udfv.LastUpdate = DateTime.Now; udfv.ModifiedById = UserID; udfv.Value = model.Value; this.DbContext.Entry(udfv).State = EntityState.Modified; }//if the value has changed and its the default value remove the value record else if (udfv.Value != model.Value && model.Value == model.DefaultValue) { this.DbContext.UserDefinedValues.Remove(udfv); this.DbContext.Entry(udfv).State = EntityState.Deleted; } } else if (model.Value != model.DefaultValue) { udfv = new UserDefinedValue() { Id = Guid.NewGuid(), UserDefinedFieldId = LabelId, Status = true, CreatorId = UserID, EntryTimeStamp = DateTime.Now, LastUpdate = DateTime.Now, ModifiedById = UserID, ParentId = ParentId, Value = model.Value }; this.DbContext.UserDefinedValues.Add(udfv); } } if (this.IsContextLocal) this.DbContext.SaveChanges(); } public IQueryable UdfModelBasicQuery { get { return from c in DbContext.UserDefinedFields.AsNoTracking() select new UDFModel() { Id = c.Id, CreatorId = c.CreatorId, DefaultValue = c.DefaultValue, Description = c.Description, DomainId = c.DomainId, Label = c.Label, Name = c.Name, Required = c.Required, SortOrder = c.SortOrder, Status = c.Status, Type = c.Type }; } } } }