EnVisageOnline/Main/Source/EnVisage/Code/BLL/UDFManager.cs

221 lines
8.3 KiB
C#

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<UserDefinedField, UDFModel>
{
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<UserDefinedField> 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<UDFValueCollection> LoadCollection(Guid parentId, UserDefinedFieldDomain type)
{
var vmCollectionList = new List<UDFValueCollection>();
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<UDFModel> 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<UDFModel> 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
};
}
}
}
}