402 lines
13 KiB
C#
402 lines
13 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using ASPNET.StarterKit.DataAccessLayer;
|
|
using System.Runtime.Caching;
|
|
|
|
namespace ASPNET.StarterKit.BusinessLogicLayer
|
|
{
|
|
public class TimeEntry
|
|
{
|
|
/*** FIELD PRIVATE ***/
|
|
private string _CreatorUserName;
|
|
|
|
private int _ProjectId;
|
|
private DateTime _DateCreated;
|
|
private string _Description;
|
|
private decimal _Duration;
|
|
private int _Id;
|
|
private Project _Project;
|
|
private DateTime _ReportedDate;
|
|
private string _UserName;
|
|
private string _creditDepartment;
|
|
private decimal _rate;
|
|
|
|
|
|
/*** CONSTRUCTOR ***/
|
|
public TimeEntry(string creatorUserName, int projectId, decimal duration, DateTime reportedDate, string userName, string costcenter, decimal rate)
|
|
: this(creatorUserName, projectId, DefaultValues.GetDateTimeMinValue(), string.Empty, duration, DefaultValues.GetTimeEntryIdMinValue(), reportedDate, userName, costcenter, rate)
|
|
{
|
|
}
|
|
|
|
public TimeEntry(string creatorUserName, int projectId, DateTime dateCreated, string description, decimal duration, int id, DateTime reportedDate, string userName,
|
|
string costcenter, decimal rate)
|
|
{
|
|
if (String.IsNullOrEmpty(creatorUserName))
|
|
throw (new NullReferenceException("creatorUserName"));
|
|
|
|
if (projectId <= DefaultValues.GetProjectIdMinValue())
|
|
throw (new ArgumentOutOfRangeException("projectId"));
|
|
|
|
if (duration <= DefaultValues.GetDurationMinValue())
|
|
throw (new ArgumentOutOfRangeException("duration"));
|
|
|
|
if (reportedDate <= DefaultValues.GetDateTimeMinValue())
|
|
throw (new ArgumentOutOfRangeException("reportedDate"));
|
|
|
|
if (String.IsNullOrEmpty(userName))
|
|
throw (new NullReferenceException("userName"));
|
|
|
|
|
|
_CreatorUserName = creatorUserName == null ? "" : creatorUserName.Trim();
|
|
_ProjectId = projectId;
|
|
_DateCreated = dateCreated;
|
|
_Description = description == null ? "" : description.Trim();
|
|
_Duration = duration;
|
|
_Id = id;
|
|
_ReportedDate = reportedDate;
|
|
_UserName = userName == null ? "" : userName.Trim();
|
|
_creditDepartment = costcenter == null ? "" : costcenter.Trim();
|
|
_rate = rate;
|
|
}
|
|
|
|
/*** PROPERTIES ***/
|
|
public string CreatorUserName
|
|
{
|
|
get
|
|
{
|
|
if (String.IsNullOrEmpty(_CreatorUserName))
|
|
return string.Empty;
|
|
else
|
|
return _CreatorUserName;
|
|
}
|
|
}
|
|
|
|
//public int CategoryId {
|
|
// get { return _CategoryId; }
|
|
// set {
|
|
// Project currentProject;
|
|
// if (_Category == null) {
|
|
// _Category = Category.GetCategoryByCategoryId(_CategoryId);
|
|
// if (_Category == null)
|
|
// throw (new NullReferenceException("Can not find existing category"));
|
|
// }
|
|
|
|
// currentProject = Project.GetProjectById(_Category.ProjectId);
|
|
// if (currentProject == null)
|
|
// throw (new NullReferenceException("NewProject is not a valid one"));
|
|
|
|
// Project newProject;
|
|
// Category newCategory = Category.GetCategoryByCategoryId(value);
|
|
|
|
// if (newCategory == null)
|
|
// throw (new NullReferenceException("NewCategory is not a valid one"));
|
|
|
|
// newProject = Project.GetProjectById(newCategory.ProjectId);
|
|
// if (newProject == null)
|
|
// throw (new NullReferenceException("NewProject is not a valid one"));
|
|
|
|
|
|
// //this ensure data consistency
|
|
// if (newProject.Id == currentProject.Id) {
|
|
// _CategoryId = value;
|
|
// _Category = null;
|
|
// }
|
|
// }
|
|
//}
|
|
public int ProjectId
|
|
{
|
|
get
|
|
{
|
|
return this._ProjectId;
|
|
}
|
|
}
|
|
//public string CategoryName {
|
|
// get {
|
|
// if (_Category == null) {
|
|
// _Category = Category.GetCategoryByCategoryId(CategoryId);
|
|
// if (_Category == null)
|
|
// return (string.Empty);
|
|
// }
|
|
// return _Category.Name;
|
|
// }
|
|
//}
|
|
|
|
public DateTime DateCreated
|
|
{
|
|
get { return _DateCreated; }
|
|
}
|
|
|
|
public string Description
|
|
{
|
|
get
|
|
{
|
|
if (String.IsNullOrEmpty(_Description))
|
|
return string.Empty;
|
|
else
|
|
return _Description;
|
|
}
|
|
set { _Description = value; }
|
|
}
|
|
|
|
public decimal Duration
|
|
{
|
|
get { return _Duration; }
|
|
set { _Duration = value; }
|
|
}
|
|
|
|
public int Id
|
|
{
|
|
get { return _Id; }
|
|
}
|
|
public string CreditDepartment { get { return this._creditDepartment; } }
|
|
public decimal Rate { get { return this._rate; } }
|
|
public DateTime ReportedDate
|
|
{
|
|
get { return _ReportedDate; }
|
|
set { _ReportedDate = value; }
|
|
}
|
|
|
|
public string ProjectName
|
|
{
|
|
get
|
|
{
|
|
if (_ProjectId == DefaultValues.GetProjectIdMinValue())
|
|
{
|
|
return (string.Empty);
|
|
}
|
|
|
|
_Project = Project.GetProjectById(this._ProjectId,false);
|
|
if (_Project == null)
|
|
return (string.Empty);
|
|
|
|
return _Project.Name;
|
|
}
|
|
}
|
|
public string ProjectNumber
|
|
{
|
|
get
|
|
{
|
|
if (_ProjectId == DefaultValues.GetProjectIdMinValue())
|
|
{
|
|
return (string.Empty);
|
|
}
|
|
|
|
_Project = Project.GetProjectById(this._ProjectId,false);
|
|
if (_Project == null)
|
|
return (string.Empty);
|
|
|
|
return _Project.ProjectNumber;
|
|
}
|
|
}
|
|
public string UserName
|
|
{
|
|
get
|
|
{
|
|
if (String.IsNullOrEmpty(_UserName))
|
|
return string.Empty;
|
|
else
|
|
return _UserName;
|
|
}
|
|
set { _UserName = value; }
|
|
|
|
}
|
|
private MembershipAppUser _User;
|
|
private MembershipAppUser User
|
|
{
|
|
get
|
|
{
|
|
if (_User == null)
|
|
_User = MembershipAppUser.GetUser(this._UserName, false);
|
|
return _User;
|
|
}
|
|
}
|
|
public string EmployeeTitle
|
|
{
|
|
get
|
|
{
|
|
if (User != null)
|
|
return User.Title;
|
|
else
|
|
return "";
|
|
}
|
|
}
|
|
public string EmployeeEmail
|
|
{
|
|
get
|
|
{
|
|
if (User != null)
|
|
return User.Email;
|
|
else
|
|
return "";
|
|
}
|
|
}
|
|
public DateTime WeekEndingDate
|
|
{
|
|
get
|
|
{
|
|
return this.GetWeekEndingDate();
|
|
}
|
|
}
|
|
/*** METHODS ***/
|
|
public bool Delete()
|
|
{
|
|
if (this.Id > DefaultValues.GetProjectIdMinValue())
|
|
{
|
|
DataAccess DALLayer = DataAccessHelper.GetDataAccess();
|
|
return DALLayer.DeleteTimeEntry(this.Id);
|
|
}
|
|
else
|
|
return false;
|
|
}
|
|
private DateTime GetWeekEndingDate()
|
|
{
|
|
ObjectCache cache = MemoryCache.Default;
|
|
string startonDay = cache["WeekStartDay"] as string;
|
|
if (startonDay == null)
|
|
startonDay = "Monday";
|
|
string durationStr = cache["WorkWeekDuration"] as string;
|
|
if (durationStr == null)
|
|
durationStr = "5";
|
|
int duration = Int32.Parse(durationStr);
|
|
DateTime WeekstartDate = getStartOfWeekDate(startonDay, _ReportedDate);
|
|
DateTime Weekending = WeekstartDate.AddDays(duration);
|
|
return Weekending;
|
|
}
|
|
private DateTime getStartOfWeekDate(string dayofweek, DateTime fromdate)
|
|
{
|
|
while (fromdate.DayOfWeek.ToString().ToLower() != dayofweek.ToLower())
|
|
{
|
|
fromdate = fromdate.AddDays(-1);
|
|
}
|
|
return fromdate;
|
|
}
|
|
public bool Save()
|
|
{
|
|
DataAccess DALLayer = DataAccessHelper.GetDataAccess();
|
|
if (Id <= DefaultValues.GetTimeEntryIdMinValue())
|
|
{
|
|
int TempId = DALLayer.CreateNewTimeEntry(this);
|
|
if (TempId > DefaultValues.GetTimeEntryIdMinValue())
|
|
{
|
|
_Id = TempId;
|
|
return true;
|
|
}
|
|
else
|
|
return false;
|
|
}
|
|
else
|
|
return (DALLayer.UpdateTimeEntry(this));
|
|
}
|
|
|
|
/*** METHOD STATIC ***/
|
|
public static bool DeleteTimeEntry(int Id)
|
|
{
|
|
if (Id <= DefaultValues.GetTimeEntryIdMinValue())
|
|
throw (new ArgumentOutOfRangeException("Id"));
|
|
|
|
|
|
DataAccess DALLayer = DataAccessHelper.GetDataAccess();
|
|
return (DALLayer.DeleteTimeEntry(Id));
|
|
}
|
|
|
|
public static List<TimeEntry> GetAllTimeEntriess()
|
|
{
|
|
DataAccess DALLayer = DataAccessHelper.GetDataAccess();
|
|
return (DALLayer.GetAllTimeEntries());
|
|
}
|
|
|
|
public static List<TimeEntry> GetTimeEntries(int projectId, string userName)
|
|
{
|
|
if (projectId <= DefaultValues.GetProjectIdMinValue())
|
|
return (new List<TimeEntry>());
|
|
|
|
if (String.IsNullOrEmpty(userName))
|
|
return (new List<TimeEntry>());
|
|
|
|
DataAccess DALLayer = DataAccessHelper.GetDataAccess();
|
|
return (DALLayer.GetTimeEntries(projectId, userName));
|
|
}
|
|
public static List<TimeEntry> GetTimeEntriesByDateRange(string userName, DateTime WeekStart)
|
|
{
|
|
|
|
if (WeekStart <= DefaultValues.GetDateTimeMinValue())
|
|
return (new List<TimeEntry>());
|
|
|
|
if (String.IsNullOrEmpty(userName))
|
|
return (new List<TimeEntry>());
|
|
|
|
DataAccess DALLayer = DataAccessHelper.GetDataAccess();
|
|
return (DALLayer.GetTimeEntries(userName, WeekStart));
|
|
}
|
|
public static List<WeekEnding> GetWeekEndingDates(string userName)
|
|
{
|
|
|
|
|
|
if (String.IsNullOrEmpty(userName))
|
|
return (new List<WeekEnding>());
|
|
|
|
DataAccess DALLayer = DataAccessHelper.GetDataAccess();
|
|
return (DALLayer.GetWeekEndingDates(userName));
|
|
}
|
|
|
|
public static TimeEntry GetTimeEntryById(int timeEntryId)
|
|
{
|
|
if (timeEntryId <= DefaultValues.GetTimeEntryIdMinValue())
|
|
return (null);
|
|
|
|
DataAccess DALLayer = DataAccessHelper.GetDataAccess();
|
|
return (DALLayer.GetTimeEntryById(timeEntryId));
|
|
}
|
|
public static List<TimeEntry> GetAllUnSubmittedTimeEntries()
|
|
{
|
|
DataAccess DALLayer = DataAccessHelper.GetDataAccess();
|
|
return (DALLayer.GetAllUnSubmittedTimeEntries());
|
|
}
|
|
public static List<TimeEntry> GetTimeEntriesByUserNameAndDates(string userName, DateTime startingDate, DateTime endDate)
|
|
{
|
|
if (String.IsNullOrEmpty(userName))
|
|
return (new List<TimeEntry>());
|
|
|
|
DataAccess DALLayer = DataAccessHelper.GetDataAccess();
|
|
return (DALLayer.GetTimeEntriesByUserNameAndDates(userName, startingDate, endDate));
|
|
}
|
|
public static bool UpdateTimeEntry(string ProjectName, int Id, string Description, decimal Duration, DateTime ReportedDate, string UserName)
|
|
{
|
|
|
|
|
|
TimeEntry timeEntry = TimeEntry.GetTimeEntryById(Id);
|
|
if (timeEntry == null)
|
|
return (false);
|
|
|
|
if (timeEntry != null)
|
|
{
|
|
timeEntry.Description = Description;
|
|
timeEntry.Duration = Duration;
|
|
timeEntry.ReportedDate = ReportedDate;
|
|
timeEntry.UserName = UserName;
|
|
return (timeEntry.Save());
|
|
}
|
|
else
|
|
return false;
|
|
|
|
}
|
|
public static List<DaysInPeriod> GetDaysOfWeekForPeriod(DateTime Start, string userName)
|
|
{
|
|
DataAccess DALLayer = DataAccessHelper.GetDataAccess();
|
|
|
|
List<DaysInPeriod> rt = (DALLayer.GetWeekEndingForStartDate(Start));
|
|
List<TimeEntry> times = DALLayer.GetTimeEntriesByUserNameForDuration(userName, Start);
|
|
foreach (TimeEntry t in times)
|
|
{
|
|
DaysInPeriod DowEntry = rt.Find(x => x.Name == t.ReportedDate.ToString("dddd"));
|
|
if (DowEntry.Hours == null)
|
|
DowEntry.Hours = t.Duration;
|
|
else
|
|
DowEntry.Hours += t.Duration;
|
|
}
|
|
return rt;
|
|
}
|
|
}
|
|
}
|
|
|