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;
}
}