using EnVisage.Code; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web.Script.Serialization; namespace EnVisage.Models { public class RatesModel { public enum FormMode { ListRates = 0, //DeleteRate = 1, //ConfirmDeleteRate = 2, //EditRate = 3, DeriveRate = 4, //ConfirmEditRate = 5 } public FormMode Mode { get; set; } public RateModel EditRate { get; set; } public Guid? EditRateId { get; set; } public Guid? DeleteRateId { get; set; } public Guid ExpenditureCategoryId { get; set; } public Guid ScenarioId { get; set; } public List GlobalRates { get; set; } public List LocalRates { get; set; } public string ErrorMessage { get; set; } public RatesModel() { Mode = FormMode.ListRates; LocalRates = new List(); GlobalRates = new List(); } public void AddLocalRange(ICollection list) { this.LocalRates.AddRange(list.Select(x => new RateModel() { Id = x.Id, Rate1 = x.Rate1, StartDate = x.StartDate, EndDate = x.EndDate, ExpenditureCategoryId = x.ExpenditureCategoryId })); } public void AddGlobalRange(ICollection list) { this.GlobalRates.AddRange(list.Select(x => new RateModel() { Id = x.Id, Rate1 = x.Rate1, StartDate = x.StartDate, EndDate = x.EndDate, ExpenditureCategoryId = x.ExpenditureCategoryId })); } } public class Expenditure2ExpendituresModel : List { public Expenditure2Expenditure EditExpenditure2Expenditure { get; set; } public Guid? EditExpenditure2ExpenditureId { get; set; } public Guid? DeleteExpenditure2ExpenditureId { get; set; } public Expenditure2ExpendituresModel(ICollection list) { this.AddRange(list); } public Expenditure2ExpendituresModel() { EditExpenditure2Expenditure = new Expenditure2Expenditure(); EditExpenditure2ExpenditureId = Guid.Empty; } } public class FeesModel : List { public FeeCalculation EditFee { get; set; } public Guid? EditFeeId { get; set; } public Guid? DeleteFeeId { get; set; } public FeesModel(ICollection list) { this.AddRange(list); } public FeesModel() { } } public class ExpenditureCategoryModel : IBaseModel { #region Classes and enums public enum UseTypes { [DisplayValue("Quantity")] Quantity = 1, [DisplayValue("Cost")] Cost = 2, [DisplayValue("Calculated")] Calculated = 3, [DisplayValue("Fee")] Fee = 4 } public enum CgEfx { [DisplayValue("CG")] CG = 1, [DisplayValue("EFX")] EFX = 2 } public enum CategoryTypes { [DisplayValue("N/A")] Undefined = 0, [DisplayValue("Labor")] Labor = 1, [DisplayValue("Materials")] Materials = 2, [DisplayValue("Usage")] Usage = 3 } #endregion public Guid Id { get; set; } [Required] [Display(Name = "Expenditure Category Name")] public string Name { get; set; } [Required] [Display(Name = "Expenditure")] public Guid ExpenditureId { get; set; } [Display(Name = "GL Account")] public Guid GLId { get; set; } [Display(Name = "Unit Of Measure")] public Guid UOMId { get; set; } [Display(Name = "Cost Center")] public Guid CreditId { get; set; } [Display(Name = "Category Type")] public CategoryTypes? Type { get; set; } [Display(Name = "Usage")] public UseTypes? UseType { get; set; } [Display(Name = "CGEFX")] public string CGEFX { get; set; } [Display(Name = "System Attribute One")] public Guid? SystemAttributeOne { get; set; } [Display(Name = "System Attribute Two")] public Guid? SystemAttributeTwo { get; set; } [Display(Name = "Wks Subject To Fee")] public int? WksSubjectToFee { get; set; } public ICollection Expenditure2Expenditure { get; set; } public ICollection FeeCalculation { get; set; } public RatesModel Rates { get; set; } public FeesModel Fees { get; set; } public Expenditure2ExpendituresModel CalculatesCategories { get; set; } public FeeCalculation Fee { get; set; } public Rate Rate { get; set; } public bool AllowResourceAssignment { get; set; } public int ScenariosCount { get; set; } public int ResourceCount { get; set; } /// /// Casts a obect to the object of type . /// /// A object. /// A object filled with data from db. public static explicit operator ExpenditureCategoryModel(ExpenditureCategory obj) { if (obj == null) return null; VW_ExpenditureCategory view = obj.GetView(); // SA. ENV-839 var model = new ExpenditureCategoryModel { Id = obj.Id, ExpenditureId = obj.ExpenditureId, GLId = obj.GLId, UOMId = obj.UOMId, CreditId = obj.CreditId, Type = (CategoryTypes?)obj.Type, UseType = (UseTypes?)obj.UseType, CGEFX = obj.CGEFX, SystemAttributeOne = obj.SystemAttributeOne, SystemAttributeTwo = obj.SystemAttributeTwo, WksSubjectToFee = obj.WksSubjectToFee, Expenditure2Expenditure = obj.Expenditure2Expenditure, FeeCalculation = obj.FeeCalculation, Rates = new RatesModel(), CalculatesCategories = new Expenditure2ExpendituresModel(), Fee = new FeeCalculation(), Rate = new Rate(), ScenariosCount = obj.ScenarioDetail.Count, AllowResourceAssignment = obj.AllowResourceAssignment, ResourceCount=obj.PeopleResources.Count }; if (view != null) model.Name = view.ExpCategoryWithCcName; // SA. ENV-756. ENV-839 model.Rates.AddGlobalRange(obj.Rates.Where(x => x.Type == (short)RateModel.RateType.Global).ToList()); model.Rates.AddLocalRange(obj.Rates.Where(x => x.Type == (short)RateModel.RateType.Derived).ToList()); model.TrimStringProperties(); return model; } /// /// Copies data from model to DAL object. /// /// A target DAL object. public void CopyTo(ExpenditureCategory dbObj) { if (dbObj == null) throw new ArgumentNullException(); dbObj.ExpenditureId = ExpenditureId; dbObj.Name = Name; // SA. ENV-756. ENV-839. Direct copiing of name from model dbObj.GLId = GLId; dbObj.UOMId = UOMId; dbObj.CreditId = CreditId; dbObj.Type = (int?)Type; dbObj.UseType = (int?)UseType; dbObj.CGEFX = CGEFX; dbObj.SystemAttributeOne = SystemAttributeOne; dbObj.SystemAttributeTwo = SystemAttributeTwo; dbObj.WksSubjectToFee = WksSubjectToFee; dbObj.AllowResourceAssignment = AllowResourceAssignment; } } /// /// Model for ExpenditureCategory page /// /// SA. ENV-723 public class ExpenditureCategoriesListModel { public List UnitsOfMeasure { get; set; } public ExpenditureCategoriesListModel() { UnitsOfMeasure = new List(); } public string UnitsOfMeasureJson { get { JavaScriptSerializer serializer = new JavaScriptSerializer(); string json = serializer.Serialize(this.UnitsOfMeasure); return json; } } } /// /// An UI representation of Expenditure Category to be displayed as list items /// public class ListExpenditureCategory { public Guid Id { get; set; } public string Name { get; set; } public int? Type { get; set; } public string TypeS { get; set; } public int? UseType { get; set; } public string UseTypeS { get; set; } public string CGEFX { get; set; } public string GLName { get; set; } public string GLNumber { get; set; } public string UOM { get; set; } public decimal? UOMValue { get; set; } public string CreditDepartment { get; set; } public int ScenarioDetailCount { get; set; } public int ResourcesCount { get; set; } } }