123 lines
2.7 KiB
C#
123 lines
2.7 KiB
C#
using System;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using Csla;
|
|
using Csla.Data;
|
|
|
|
namespace ProjectTracker.Library
|
|
{
|
|
[Serializable()]
|
|
public class ResourceAssignments : BusinessListBase<ResourceAssignments, ResourceAssignment>
|
|
{
|
|
#region Business Methods
|
|
|
|
public ResourceAssignment this[Guid projectId]
|
|
{
|
|
get
|
|
{
|
|
foreach (ResourceAssignment res in this)
|
|
if (res.ProjectId.Equals(projectId))
|
|
return res;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public void AssignTo(Guid projectId)
|
|
{
|
|
if (!Contains(projectId))
|
|
{
|
|
ResourceAssignment project = ResourceAssignment.NewResourceAssignment(projectId);
|
|
this.Add(project);
|
|
}
|
|
else
|
|
throw new InvalidOperationException("Resource already assigned to project");
|
|
}
|
|
|
|
public void Remove(Guid projectId)
|
|
{
|
|
foreach (ResourceAssignment res in this)
|
|
{
|
|
if (res.ProjectId.Equals(projectId))
|
|
{
|
|
Remove(res);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public bool Contains(Guid projectId)
|
|
{
|
|
foreach (ResourceAssignment project in this)
|
|
if (project.ProjectId == projectId)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
public bool ContainsDeleted(Guid projectId)
|
|
{
|
|
foreach (ResourceAssignment project in DeletedList)
|
|
if (project.ProjectId == projectId)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Factory Methods
|
|
|
|
internal static ResourceAssignments NewResourceAssignments()
|
|
{
|
|
return new ResourceAssignments();
|
|
}
|
|
|
|
internal static ResourceAssignments GetResourceAssignments(SafeDataReader dr)
|
|
{
|
|
return new ResourceAssignments(dr);
|
|
}
|
|
|
|
private ResourceAssignments()
|
|
{
|
|
MarkAsChild();
|
|
}
|
|
|
|
private ResourceAssignments(SafeDataReader dr)
|
|
{
|
|
MarkAsChild();
|
|
Fetch(dr);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Data Access
|
|
|
|
private void Fetch(SafeDataReader dr)
|
|
{
|
|
RaiseListChangedEvents = false;
|
|
while (dr.Read())
|
|
this.Add(ResourceAssignment.GetResourceAssignment(dr));
|
|
RaiseListChangedEvents = true;
|
|
}
|
|
|
|
internal void Update(Resource resource)
|
|
{
|
|
RaiseListChangedEvents = false;
|
|
// update (thus deleting) any deleted child objects
|
|
foreach (ResourceAssignment item in DeletedList)
|
|
item.DeleteSelf(resource);
|
|
// now that they are deleted, remove them from memory too
|
|
DeletedList.Clear();
|
|
|
|
// add/update any current child objects
|
|
foreach (ResourceAssignment item in this)
|
|
{
|
|
if (item.IsNew)
|
|
item.Insert(resource);
|
|
else
|
|
item.Update(resource);
|
|
}
|
|
RaiseListChangedEvents = true;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |