168 lines
5.6 KiB
C#
168 lines
5.6 KiB
C#
using EnVisage.Models;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data.Entity;
|
|
using System.Linq;
|
|
using Resources;
|
|
|
|
namespace EnVisage.Code.BLL
|
|
{
|
|
public class ExpenditureCategoryManager : ManagerBase<ExpenditureCategory, ExpenditureCategoryModel>
|
|
{
|
|
public ExpenditureCategoryManager(): base(null)
|
|
{
|
|
}
|
|
|
|
public ExpenditureCategoryManager(EnVisageEntities dbContext): base(dbContext)
|
|
{
|
|
}
|
|
protected override ExpenditureCategory InitInstance()
|
|
{
|
|
return new ExpenditureCategory { Id = Guid.NewGuid() };
|
|
}
|
|
|
|
protected override ExpenditureCategory RetrieveReadOnlyById(Guid key)
|
|
{
|
|
return DataTable.AsNoTracking().FirstOrDefault(t => t.Id == key);
|
|
}
|
|
|
|
public override DbSet<ExpenditureCategory> DataTable => DbContext.ExpenditureCategory;
|
|
|
|
#region Public Methods
|
|
/// <summary>
|
|
/// Loads a Expenditure Category from the database.
|
|
/// </summary>
|
|
/// <param name="value">Unique identifier of the Expenditure Category.</param>
|
|
/// <param name="isReadOnly">Indicates that object will not be saved later in the code. Use <b>false</b> if you need to save an updated object.</param>
|
|
/// <returns>A <see cref="ExpenditureCategory"/> object retrieved from database.</returns>
|
|
public override ExpenditureCategory Load(Guid? value, bool isReadOnly = true)
|
|
{
|
|
if (value == null || value == Guid.Empty)
|
|
return new ExpenditureCategory();
|
|
|
|
return isReadOnly
|
|
? DbContext.ExpenditureCategory.AsNoTracking().FirstOrDefault(t => t.Id == value)
|
|
: DbContext.ExpenditureCategory.Find(value);
|
|
}
|
|
|
|
public override ExpenditureCategory Save(ExpenditureCategoryModel model)
|
|
{
|
|
if (model == null)
|
|
throw new ArgumentNullException(nameof(model));
|
|
|
|
#region Save ExpenditureCategory data
|
|
ExpenditureCategory dbObj = null;
|
|
if (model.Id != Guid.Empty)
|
|
dbObj = DbContext.ExpenditureCategory.Find(model.Id);
|
|
if (dbObj == null)
|
|
{
|
|
dbObj = new ExpenditureCategory { Id = Guid.NewGuid() };
|
|
}
|
|
model.CopyTo(dbObj);
|
|
dbObj.CGEFX = "CG";
|
|
if (model.Id == Guid.Empty)
|
|
DbContext.ExpenditureCategory.Add(dbObj);
|
|
else
|
|
DbContext.Entry(dbObj).State = EntityState.Modified;
|
|
#endregion
|
|
|
|
if (IsContextLocal)
|
|
DbContext.SaveChanges();
|
|
return dbObj;
|
|
}
|
|
|
|
public ExpenditureDetail GetExpenditureDetails(Guid categoryId)
|
|
{
|
|
if (categoryId == Guid.Empty)
|
|
throw new ArgumentException(Messages.Commonl_ArgumentEmpty, nameof(categoryId));
|
|
|
|
var result = GetExpenditureDetails(true, new List<Guid> { categoryId });
|
|
if (result.ContainsKey(categoryId))
|
|
return result[categoryId];
|
|
|
|
return null;
|
|
}
|
|
|
|
public Dictionary<Guid, ExpenditureDetail> GetExpenditureDetails(bool withSuperExpCats = true, List<Guid> categories = null)
|
|
{
|
|
var query = DbContext.VW_ExpenditureCategory.AsNoTracking().AsQueryable();
|
|
|
|
if (categories != null && categories.Count > 0)
|
|
query = query.Where(x => categories.Contains(x.Id));
|
|
|
|
if (!withSuperExpCats)
|
|
query = query.Where(x => x.AllowResourceAssignment);
|
|
|
|
var result = query.AsParallel().Select(x => new ExpenditureDetail
|
|
{
|
|
ExpenditureCategoryId = x.Id,
|
|
ExpenditureCategoryName = x.ExpCategoryWithCcName,
|
|
UOMId = x.UOMId,
|
|
UOMValue = x.UOMValue,
|
|
CGEFX = x.CGEFX,
|
|
CreditId = x.CreditId,
|
|
GLId = x.GLId,
|
|
SystemAttributeOne = x.SystemAttributeOne,
|
|
SystemAttributeTwo = x.SystemAttributeTwo,
|
|
Type = x.Type ?? 0,
|
|
UseType = x.UseType ?? 1,
|
|
AllowResourceAssignment = x.AllowResourceAssignment,
|
|
}).ToDictionary(t => t.ExpenditureCategoryId);
|
|
|
|
return result;
|
|
}
|
|
|
|
public Dictionary<string, ExpenditureDetail> GetSuperExpenditureDetails(IEnumerable<Guid> expenditures = null)
|
|
{
|
|
var query = (from e in DbContext.ExpenditureCategory.AsNoTracking()
|
|
join f in DbContext.VW_ExpenditureCategory.AsNoTracking() on e.Id equals f.Id
|
|
where !e.AllowResourceAssignment
|
|
orderby f.ExpCategoryWithCcName
|
|
select new ExpenditureDetail
|
|
{
|
|
ExpenditureCategoryId = e.Id,
|
|
ExpenditureCategoryName = f.ExpCategoryWithCcName,
|
|
UOMId = e.UOMId,
|
|
UOMValue = e.UOM.UOMValue,
|
|
CGEFX = e.CGEFX,
|
|
CreditId = e.CreditId,
|
|
GLId = e.GLId,
|
|
SystemAttributeOne = e.SystemAttributeOne,
|
|
SystemAttributeTwo = e.SystemAttributeTwo,
|
|
Type = e.Type ?? 0,
|
|
UseType = e.UseType ?? 1,
|
|
AllowResourceAssignment = e.AllowResourceAssignment,
|
|
});
|
|
|
|
if (expenditures?.Any() == true)
|
|
query = query.Where(x => expenditures.Contains(x.ExpenditureCategoryId));
|
|
|
|
return query.ToDictionary(t => t.ExpenditureCategoryId.ToString());
|
|
}
|
|
|
|
public List<ExpenditureCategory> GetList(List<Guid> categories = null)
|
|
{
|
|
return GetBasic(categories).ToList();
|
|
}
|
|
|
|
public Dictionary<Guid, ExpenditureCategory> GetAsDictionary(List<Guid> categories = null)
|
|
{
|
|
return GetList(categories).ToDictionary(x => x.Id, g => g);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Private Methods
|
|
|
|
private IQueryable<ExpenditureCategory> GetBasic(List<Guid> categories = null)
|
|
{
|
|
var query = DbContext.ExpenditureCategory.AsNoTracking().AsQueryable();
|
|
if (categories != null && categories.Count >= 0)
|
|
query = query.Where(x => categories.Contains(x.Id));
|
|
|
|
return query;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |