247 lines
6.4 KiB
C#
247 lines
6.4 KiB
C#
using System;
|
|
using System.Data;
|
|
using System.Configuration;
|
|
using System.Collections;
|
|
using System.Web;
|
|
using System.Web.Security;
|
|
using System.Web.UI;
|
|
using System.Web.UI.WebControls;
|
|
using System.Web.UI.WebControls.WebParts;
|
|
using System.Web.UI.HtmlControls;
|
|
using ProjectTracker.Library;
|
|
|
|
public partial class ResourceEdit : System.Web.UI.Page
|
|
{
|
|
|
|
private enum Views
|
|
{
|
|
MainView = 0,
|
|
AssignView = 1
|
|
}
|
|
|
|
protected void Page_Load(object sender, EventArgs e)
|
|
{
|
|
if (!IsPostBack)
|
|
{
|
|
Session["currentObject"] = null;
|
|
ApplyAuthorizationRules();
|
|
}
|
|
else
|
|
this.ErrorLabel.Text = "";
|
|
}
|
|
|
|
private void ApplyAuthorizationRules()
|
|
{
|
|
Resource obj = GetResource();
|
|
// Resource display
|
|
if (Resource.CanEditObject())
|
|
{
|
|
if (obj.IsNew)
|
|
this.DetailsView1.DefaultMode = DetailsViewMode.Insert;
|
|
else
|
|
this.DetailsView1.DefaultMode = DetailsViewMode.Edit;
|
|
this.AssignProjectButton.Visible = !obj.IsNew;
|
|
}
|
|
else
|
|
{
|
|
this.DetailsView1.DefaultMode = DetailsViewMode.ReadOnly;
|
|
this.AssignProjectButton.Visible = false;
|
|
}
|
|
this.DetailsView1.Rows[this.DetailsView1.Rows.Count - 1].Visible = Resource.CanEditObject();
|
|
|
|
// resources display
|
|
this.GridView1.Columns[this.GridView1.Columns.Count - 1].Visible = Resource.CanEditObject();
|
|
}
|
|
|
|
#region DetailsView
|
|
|
|
protected void DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
|
|
{
|
|
Resource resource = GetResource();
|
|
if (!resource.IsNew)
|
|
Response.Redirect("ResourceEdit.aspx?id=" + resource.Id.ToString());
|
|
}
|
|
|
|
protected void DetailsView1_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
|
|
{
|
|
ApplyAuthorizationRules();
|
|
}
|
|
|
|
protected void DetailsView1_ItemDeleted(object sender, DetailsViewDeletedEventArgs e)
|
|
{
|
|
Response.Redirect("ResourceList.aspx");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Project Grid
|
|
|
|
protected void AssignProjectButton_Click(object sender, EventArgs e)
|
|
{
|
|
this.MultiView1.ActiveViewIndex = (int)Views.AssignView;
|
|
}
|
|
|
|
protected void GridView2_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
Resource obj = GetResource();
|
|
try
|
|
{
|
|
obj.Assignments.AssignTo(new Guid(this.GridView2.SelectedDataKey.Value.ToString()));
|
|
if (SaveResource(obj) > 0)
|
|
{
|
|
this.GridView1.DataBind();
|
|
this.MultiView1.ActiveViewIndex = (int)Views.MainView;
|
|
}
|
|
}
|
|
catch (InvalidOperationException ex)
|
|
{
|
|
ErrorLabel.Text = ex.Message;
|
|
}
|
|
}
|
|
|
|
protected void CancelAssignButton_Click(object sender, EventArgs e)
|
|
{
|
|
this.MultiView1.ActiveViewIndex = (int)Views.MainView;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region RoleListDataSource
|
|
|
|
protected void RoleListDataSource_SelectObject(object sender, Csla.Web.SelectObjectArgs e)
|
|
{
|
|
e.BusinessObject = RoleList.GetList();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ResourceDataSource
|
|
|
|
protected void ResourceDataSource_DeleteObject(object sender, Csla.Web.DeleteObjectArgs e)
|
|
{
|
|
Resource.DeleteResource(int.Parse(e.Keys["Id"].ToString()));
|
|
Session.Remove("currentObject");
|
|
e.RowsAffected = 1;
|
|
}
|
|
|
|
protected void ResourceDataSource_InsertObject(object sender, Csla.Web.InsertObjectArgs e)
|
|
{
|
|
Resource obj = Resource.NewResource();
|
|
Csla.Data.DataMapper.Map(e.Values, obj, "Id");
|
|
e.RowsAffected = SaveResource(obj);
|
|
}
|
|
|
|
protected void ResourceDataSource_SelectObject(object sender, Csla.Web.SelectObjectArgs e)
|
|
{
|
|
e.BusinessObject = GetResource();
|
|
}
|
|
|
|
protected void ResourceDataSource_UpdateObject(object sender, Csla.Web.UpdateObjectArgs e)
|
|
{
|
|
Resource obj = GetResource();
|
|
Csla.Data.DataMapper.Map(e.Values, obj);
|
|
e.RowsAffected = SaveResource(obj);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region AssignmentsDataSource
|
|
|
|
protected void AssignmentsDataSource_DeleteObject(object sender, Csla.Web.DeleteObjectArgs e)
|
|
{
|
|
Resource obj = GetResource();
|
|
Guid rid = new Guid(e.Keys["ProjectId"].ToString());
|
|
obj.Assignments.Remove(rid);
|
|
e.RowsAffected = SaveResource(obj);
|
|
}
|
|
|
|
protected void AssignmentsDataSource_SelectObject(object sender, Csla.Web.SelectObjectArgs e)
|
|
{
|
|
Resource obj = GetResource();
|
|
e.BusinessObject = obj.Assignments;
|
|
}
|
|
|
|
protected void AssignmentsDataSource_UpdateObject(object sender, Csla.Web.UpdateObjectArgs e)
|
|
{
|
|
Resource obj = GetResource();
|
|
ResourceAssignment res;
|
|
Guid rid = new Guid(e.Keys["ProjectId"].ToString());
|
|
res = obj.Assignments[rid];
|
|
Csla.Data.DataMapper.Map(e.Values, res);
|
|
e.RowsAffected = SaveResource(obj);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ProjectListDataSource
|
|
|
|
protected void ProjectListDataSource_SelectObject(object sender, Csla.Web.SelectObjectArgs e)
|
|
{
|
|
e.BusinessObject = ProjectTracker.Library.ProjectList.GetProjectList();
|
|
}
|
|
|
|
#endregion
|
|
|
|
private Resource GetResource()
|
|
{
|
|
object businessObject = Session["currentObject"];
|
|
if (businessObject == null ||
|
|
!(businessObject is Resource))
|
|
{
|
|
try
|
|
{
|
|
string idString = Request.QueryString["id"];
|
|
if (!string.IsNullOrEmpty(idString))
|
|
{
|
|
int id = Int32.Parse(idString);
|
|
businessObject = Resource.GetResource(id);
|
|
}
|
|
else
|
|
businessObject = Resource.NewResource();
|
|
Session["currentObject"] = businessObject;
|
|
}
|
|
catch (System.Security.SecurityException)
|
|
{
|
|
Response.Redirect("ResourceList.aspx");
|
|
}
|
|
}
|
|
return (Resource)businessObject;
|
|
}
|
|
|
|
private int SaveResource(Resource resource)
|
|
{
|
|
int rowsAffected;
|
|
try
|
|
{
|
|
Session["currentObject"] = resource.Save();
|
|
rowsAffected = 1;
|
|
}
|
|
catch (Csla.Validation.ValidationException ex)
|
|
{
|
|
System.Text.StringBuilder message = new System.Text.StringBuilder();
|
|
message.AppendFormat("{0}<br/>", ex.Message);
|
|
if (resource.BrokenRulesCollection.Count == 1)
|
|
message.AppendFormat("* {0}: {1}",
|
|
resource.BrokenRulesCollection[0].Property,
|
|
resource.BrokenRulesCollection[0].Description);
|
|
else
|
|
foreach (Csla.Validation.BrokenRule rule in resource.BrokenRulesCollection)
|
|
message.AppendFormat("* {0}: {1}<br/>", rule.Property, rule.Description);
|
|
this.ErrorLabel.Text = message.ToString();
|
|
rowsAffected = 0;
|
|
}
|
|
catch (Csla.DataPortalException ex)
|
|
{
|
|
this.ErrorLabel.Text = ex.BusinessException.Message;
|
|
rowsAffected = 0;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
this.ErrorLabel.Text = ex.Message;
|
|
rowsAffected = 0;
|
|
}
|
|
return rowsAffected;
|
|
}
|
|
|
|
}
|