229 lines
5.4 KiB
C#
229 lines
5.4 KiB
C#
using System;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using Csla;
|
|
using Csla.Data;
|
|
using Csla.Validation;
|
|
|
|
namespace ProjectTracker.Library
|
|
{
|
|
[Serializable()]
|
|
public class ProjectResource :
|
|
BusinessBase<ProjectResource>, IHoldRoles
|
|
{
|
|
#region Business Methods
|
|
|
|
private int _resourceId;
|
|
private string _firstName = string.Empty;
|
|
private string _lastName = string.Empty;
|
|
private SmartDate _assigned;
|
|
private int _role;
|
|
private byte[] _timestamp = new byte[8];
|
|
|
|
[System.ComponentModel.DataObjectField(false, true)]
|
|
public int ResourceId
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
CanReadProperty(true);
|
|
return _resourceId;
|
|
}
|
|
}
|
|
|
|
public string FirstName
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
CanReadProperty(true);
|
|
return _firstName;
|
|
}
|
|
}
|
|
|
|
public string LastName
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
CanReadProperty(true);
|
|
return _lastName;
|
|
}
|
|
}
|
|
|
|
public string FullName
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
if (CanReadProperty("FirstName") &&
|
|
CanReadProperty("LastName"))
|
|
return string.Format("{0}, {1}", LastName, FirstName);
|
|
else
|
|
throw new System.Security.SecurityException(
|
|
"Property read not allowed");
|
|
}
|
|
}
|
|
|
|
public string Assigned
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
CanReadProperty(true);
|
|
return _assigned.Text;
|
|
}
|
|
}
|
|
|
|
public int Role
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
CanReadProperty(true);
|
|
return _role;
|
|
}
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
set
|
|
{
|
|
CanWriteProperty(true);
|
|
if (!_role.Equals(value))
|
|
{
|
|
_role = value;
|
|
PropertyHasChanged();
|
|
}
|
|
}
|
|
}
|
|
|
|
public Resource GetResource()
|
|
{
|
|
return Resource.GetResource(_resourceId);
|
|
}
|
|
|
|
protected override object GetIdValue()
|
|
{
|
|
return _resourceId;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Validation Rules
|
|
|
|
protected override void AddBusinessRules()
|
|
{
|
|
ValidationRules.AddRule(
|
|
new Csla.Validation.RuleHandler(
|
|
Assignment.ValidRole), "Role");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Authorization Rules
|
|
|
|
protected override void AddAuthorizationRules()
|
|
{
|
|
AuthorizationRules.AllowWrite(
|
|
"Role", "ProjectManager");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Factory Methods
|
|
|
|
internal static ProjectResource NewProjectResource(int resourceId)
|
|
{
|
|
return new ProjectResource(
|
|
Resource.GetResource(resourceId),
|
|
RoleList.DefaultRole());
|
|
}
|
|
|
|
internal static ProjectResource GetResource(SafeDataReader dr)
|
|
{
|
|
return new ProjectResource(dr);
|
|
}
|
|
|
|
private ProjectResource()
|
|
{
|
|
MarkAsChild();
|
|
}
|
|
|
|
private ProjectResource(Resource resource, int role)
|
|
{
|
|
MarkAsChild();
|
|
_resourceId = resource.Id;
|
|
_lastName = resource.LastName;
|
|
_firstName = resource.FirstName;
|
|
_assigned.Date = Assignment.GetDefaultAssignedDate();
|
|
_role = role;
|
|
}
|
|
|
|
private ProjectResource(SafeDataReader dr)
|
|
{
|
|
MarkAsChild();
|
|
Fetch(dr);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Data Access
|
|
|
|
private void Fetch(SafeDataReader dr)
|
|
{
|
|
_resourceId = dr.GetInt32("ResourceId");
|
|
_lastName = dr.GetString("LastName");
|
|
_firstName = dr.GetString("FirstName");
|
|
_assigned = dr.GetSmartDate("Assigned");
|
|
_role = dr.GetInt32("Role");
|
|
dr.GetBytes("LastChanged", 0, _timestamp, 0, 8);
|
|
MarkOld();
|
|
}
|
|
|
|
internal void Insert(Project project)
|
|
{
|
|
// if we're not dirty then don't update the database
|
|
if (!this.IsDirty) return;
|
|
|
|
using (SqlConnection cn = new SqlConnection(Database.PTrackerConnection))
|
|
{
|
|
cn.Open();
|
|
_timestamp = Assignment.AddAssignment(
|
|
cn, project.Id, _resourceId, _assigned, _role);
|
|
MarkOld();
|
|
}
|
|
}
|
|
|
|
internal void Update(Project project)
|
|
{
|
|
// if we're not dirty then don't update the database
|
|
if (!this.IsDirty) return;
|
|
|
|
using (SqlConnection cn = new SqlConnection(Database.PTrackerConnection))
|
|
{
|
|
cn.Open();
|
|
_timestamp = Assignment.UpdateAssignment(
|
|
cn, project.Id, _resourceId, _assigned, _role, _timestamp);
|
|
MarkOld();
|
|
}
|
|
}
|
|
|
|
internal void DeleteSelf(Project project)
|
|
{
|
|
// if we're not dirty then don't update the database
|
|
if (!this.IsDirty) return;
|
|
|
|
// if we're new then don't update the database
|
|
if (this.IsNew) return;
|
|
|
|
using (SqlConnection cn = new SqlConnection(Database.PTrackerConnection))
|
|
{
|
|
cn.Open();
|
|
Assignment.RemoveAssignment(cn, project.Id, _resourceId);
|
|
MarkNew();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|