using System;
using System.Data;
using System.Configuration;
using ASPNET.StarterKit.TimeTracker.DataAccessLayer;
namespace ASPNET.StarterKit.TimeTracker.BusinessLogicLayer
{
//*********************************************************************
//
// TimeEntry Class
//
// The TimeEntry class is used to represent a time entry along with its
// properties
//
//*********************************************************************
public class TimeEntry
{
private int _categoryID;
private string _categoryName;
private string _categoryShortName;
private string _day;
private string _description;
private decimal _duration;
private DateTime _entryDate;
private int _entryLogID;
private int _projectID;
private string _projectName;
private int _userID;
public TimeEntry()
{
}
public TimeEntry(int entryLogID)
{
_entryLogID = entryLogID;
}
public TimeEntry(int entryLogID, int userID, int ProjectID, int CategoryID, DateTime EntryDate, string Description, decimal Duration)
{
_entryLogID = entryLogID;
_userID = userID;
_projectID = ProjectID;
_categoryID = CategoryID;
_entryDate = EntryDate;
_description = Description;
_duration = Duration;
}
public int CategoryID
{
get { return _categoryID; }
set { _categoryID = value; }
}
public string CategoryName
{
get { return _categoryName; }
set { _categoryName = value; }
}
public string CategoryShortName
{
get { return _categoryShortName; }
set { _categoryShortName = value; }
}
public string Day
{
get { return _day; }
set { _day = value; }
}
public string Description
{
get { return _description; }
set { _description = value; }
}
public decimal Duration
{
get { return _duration; }
set { _duration = value; }
}
public DateTime EntryDate
{
get { return _entryDate; }
set { _entryDate = value; }
}
public int EntryLogID
{
get { return _entryLogID; }
set { _entryLogID = value; }
}
public int ProjectID
{
get { return _projectID; }
set { _projectID = value; }
}
public string ProjectName
{
get { return _projectName; }
set { _projectName = value; }
}
//*********************************************************************
//
// FillCorrectStartEndDates Static Method
//
// The TimeEntry.FillCorrectStartEndDates Method returns the first
// and last date of a week, given any date during the week.
// This method is primary used in TimeEntry page to calculate the range
// of a week.
//
//*********************************************************************
public static void FillCorrectStartEndDates(DateTime selectedDate, ref DateTime startDate, ref DateTime endDate)
{
int firstDayOfWeek = Convert.ToInt32(ConfigurationSettings.AppSettings[Web.Global.CfgKeyFirstDayOfWeek]);
// Loop through 7 days of the week.
for(int i = 0; i<7; i++)
{
// Match first day of the week from global setting
if (Convert.ToInt32(selectedDate.AddDays(i).DayOfWeek) == firstDayOfWeek)
{
// Fill in correct start and end dates
startDate = selectedDate.AddDays(i);
if(i!=0)
startDate = startDate.AddDays(-7);
endDate = startDate.AddDays(6);
break;
}
}
}
//*********************************************************************
//
// GetEntries Static Method
//
// The TimeEntry.GetEntries Method returns a Collection of TimeEntries from a particular user,
// for a specified period of time, based on the role of the current user browsing the application.
//
//*********************************************************************
public static TimeEntriesCollection GetEntries(int queryUserID, int userID, DateTime startDate, DateTime endDate)
{
DataSet dsData = DatabaseHelper.ExecuteDataset(
ConfigurationSettings.AppSettings[Web.Global.CfgKeyConnString],
"TT_ListTimeEntries", queryUserID, userID, startDate, endDate);
TimeEntriesCollection entryList = new TimeEntriesCollection();
// Separate Data into a collection of TimeEntrys.
foreach(DataRow row in dsData.Tables[0].Rows)
{
TimeEntry time = new TimeEntry();
time.EntryLogID = Convert.ToInt32(row["EntryLogID"]);
time.Description = row["Description"].ToString();
time.Duration = Convert.ToDecimal(row["Duration"]);
time.EntryDate = Convert.ToDateTime(row["EntryDate"]);
time.ProjectID = Convert.ToInt32(row["ProjectID"]);
time.CategoryID = Convert.ToInt32(row["CategoryID"]);
time.CategoryName = row["CategoryName"].ToString();
time.ProjectName = row["ProjectName"].ToString();
time.Day = time.EntryDate.ToString("dddd");
time.CategoryShortName = row["CatShortName"].ToString();
entryList.Add(time);
}
return entryList;
}
//*********************************************************************
//
// GetWeek Static Method
//
// The TimeEntry.GetWeek Method return a table of dates in a week,
// given any date during the week, this table contains 2 columns,
// one for Day values, and one for Date values
// This method is primary used in Databinding DropDowns in TimeEntry page
// with range of a week.
//
//*********************************************************************
public static DataTable GetWeek(DateTime selectedDate)
{
DateTime start = DateTime.MinValue;
DateTime end = DateTime.MinValue;
DataTable dt = new DataTable();
dt.Columns.Add("Day");
dt.Columns.Add("Date");
FillCorrectStartEndDates(selectedDate, ref start, ref end);
DataRow workRow;
// fill table with dates and days
for (int i = 0; i < 7; i++)
{
workRow = dt.NewRow();
workRow["Day"] = Convert.ToDateTime(start.AddDays(i)).ToString("ddd");
workRow["Date"] = start.AddDays(i);
dt.Rows.Add(workRow);
}
return dt;
}
//*********************************************************************
//
// Remove Static Method
//
// The TimeEntry.Remove Method removes a time entry from database
// based on entry log ID.
//
//
//*********************************************************************
public static void Remove(int entryLogID)
{
DatabaseHelper.ExecuteNonQuery(ConfigurationSettings.AppSettings[Web.Global.CfgKeyConnString], "TT_DeleteTimeEntry", entryLogID);
}
//*********************************************************************
//
// Load Method
//
// The TimeEntry.Load Method populates current instance of TimeEntry object with
// info from the database.
//
//*********************************************************************
public void Load()
{
DataSet ds = DatabaseHelper.ExecuteDataset(ConfigurationSettings.AppSettings[Web.Global.CfgKeyConnString], "TT_GetTimeEntry", _entryLogID);
DataRow row = ds.Tables[0].Rows[0];
_description = row["Description"].ToString();
_duration = Convert.ToDecimal(row["Duration"]);
_entryDate = Convert.ToDateTime(row["EntryDate"]);
_projectID = Convert.ToInt32(row["ProjectID"]);
_userID = Convert.ToInt32(row["UserID"]);
_categoryID = Convert.ToInt32(row["CategoryID"]);
_projectName = row["ProjectName"].ToString();
}
//*********************************************************************
//
// Save Method
//
// The TimeEntry.Save Method Add or update TimeEntry information
// in the database depending on the entryLogID.
// Returns True if saved successfully, false otherwise.
//
//*********************************************************************
public bool Save()
{
if (_entryLogID == 0)
return Insert();
else
return Update();
}
private bool Insert()
{
_entryLogID = Convert.ToInt32(DatabaseHelper.ExecuteScalar(ConfigurationSettings.AppSettings[Web.Global.CfgKeyConnString], "TT_AddTimeEntry", _userID, _projectID, _categoryID,
_entryDate, _description, _duration));
return (0 < _entryLogID);
}
private bool Update()
{
try
{
DatabaseHelper.ExecuteNonQuery(ConfigurationSettings.AppSettings[Web.Global.CfgKeyConnString], "TT_UpdateTimeEntry", _entryLogID, _userID, _projectID, _categoryID,
_entryDate, _description, _duration);
return true;
}
catch {
return false; }
}
}
}