126 lines
2.7 KiB
C#
126 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 ProjectResources :
|
|
BusinessListBase<ProjectResources, ProjectResource>
|
|
{
|
|
#region Business Methods
|
|
|
|
public ProjectResource GetItem(int resourceId)
|
|
{
|
|
foreach (ProjectResource res in this)
|
|
if (res.ResourceId == resourceId)
|
|
return res;
|
|
return null;
|
|
}
|
|
|
|
public void Assign(int resourceId)
|
|
{
|
|
if (!Contains(resourceId))
|
|
{
|
|
ProjectResource resource =
|
|
ProjectResource.NewProjectResource(resourceId);
|
|
this.Add(resource);
|
|
}
|
|
else
|
|
throw new InvalidOperationException(
|
|
"Resource already assigned to project");
|
|
}
|
|
|
|
public void Remove(int resourceId)
|
|
{
|
|
foreach (ProjectResource res in this)
|
|
{
|
|
if (res.ResourceId == resourceId)
|
|
{
|
|
Remove(res);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public bool Contains(int resourceId)
|
|
{
|
|
foreach (ProjectResource res in this)
|
|
if (res.ResourceId == resourceId)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
public bool ContainsDeleted(int resourceId)
|
|
{
|
|
foreach (ProjectResource res in DeletedList)
|
|
if (res.ResourceId == resourceId)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Factory Methods
|
|
|
|
internal static ProjectResources NewProjectResources()
|
|
{
|
|
return new ProjectResources();
|
|
}
|
|
|
|
internal static ProjectResources GetProjectResources(SafeDataReader dr)
|
|
{
|
|
return new ProjectResources(dr);
|
|
}
|
|
|
|
private ProjectResources()
|
|
{
|
|
MarkAsChild();
|
|
}
|
|
|
|
private ProjectResources(SafeDataReader dr)
|
|
{
|
|
MarkAsChild();
|
|
Fetch(dr);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Data Access
|
|
|
|
// called to load data from the database
|
|
private void Fetch(SafeDataReader dr)
|
|
{
|
|
this.RaiseListChangedEvents = false;
|
|
while (dr.Read())
|
|
this.Add(ProjectResource.GetResource(dr));
|
|
this.RaiseListChangedEvents = true;
|
|
}
|
|
|
|
internal void Update(Project project)
|
|
{
|
|
this.RaiseListChangedEvents = false;
|
|
// update (thus deleting) any deleted child objects
|
|
foreach (ProjectResource obj in DeletedList)
|
|
obj.DeleteSelf(project);
|
|
// now that they are deleted, remove them from memory too
|
|
DeletedList.Clear();
|
|
|
|
// add/update any current child objects
|
|
foreach (ProjectResource obj in this)
|
|
{
|
|
if (obj.IsNew)
|
|
obj.Insert(project);
|
|
else
|
|
obj.Update(project);
|
|
}
|
|
this.RaiseListChangedEvents = true;
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|