233 lines
8.7 KiB
C#
233 lines
8.7 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 GZTW.AyaNova.BLL;
|
|
public partial class WorkorderNew : BaseThemePage
|
|
{
|
|
protected void Page_Load(object sender, EventArgs e)
|
|
{
|
|
if (Util.CurrentUser.IsClientOrHeadOfficeAccount)
|
|
{
|
|
Util.Denied(Context);
|
|
}
|
|
|
|
btnClient.Text = Util.LocaleText("O.Client");
|
|
|
|
|
|
|
|
switch (BaseObject)
|
|
{
|
|
case RootObjectTypes.WorkorderService:
|
|
if (AyaBizUtils.Right("Object.WorkorderService") < (int)SecurityLevelTypes.ReadOnly)
|
|
Util.Denied(Context);
|
|
lblTemplate.Text = Util.LocaleText("O.WorkorderServiceTemplate");
|
|
mBaseTemplateType = WorkorderTypes.TemplateService;
|
|
break;
|
|
case RootObjectTypes.WorkorderQuote:
|
|
if (AyaBizUtils.Right("Object.WorkorderQuote") < (int)SecurityLevelTypes.ReadOnly)
|
|
Util.Denied(Context);
|
|
lblTemplate.Text = Util.LocaleText("O.WorkorderQuoteTemplate");
|
|
mBaseTemplateType = WorkorderTypes.TemplateQuote;
|
|
break;
|
|
case RootObjectTypes.WorkorderPreventiveMaintenance:
|
|
if (AyaBizUtils.Right("Object.WorkorderPreventiveMaintenance") < (int)SecurityLevelTypes.ReadOnly)
|
|
Util.Denied(Context);
|
|
lblTemplate.Text = Util.LocaleText("O.WorkorderPreventiveMaintenanceTemplate");
|
|
mBaseTemplateType = WorkorderTypes.TemplatePreventiveMaintenance;
|
|
break;
|
|
}
|
|
|
|
|
|
if (IsPostBack)
|
|
{
|
|
mSelectedClientID = Util.ComboValue(cbClient);
|
|
mSelectedTemplateID = Util.ComboValue(cbTemplates);
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrEmpty(edSearch.Text))
|
|
{
|
|
|
|
//special filter by search
|
|
SearchResultList srl = SearchResultList.GetPickListForObjectType(edSearch.Text, RootObjectTypes.Client);
|
|
ClientPickList cpl = ClientPickList.GetList(srl.ListPickListID, true);
|
|
|
|
//populate the list here manually
|
|
DataTable dt = new DataTable();
|
|
dt.Columns.Add("Display");
|
|
dt.Columns.Add("Value", typeof(Guid));
|
|
|
|
//add an initial blank row for Guid.empty
|
|
DataRow drBlank = dt.NewRow();
|
|
drBlank["Display"] = "-";//Case 344
|
|
drBlank["Value"] = Guid.Empty;
|
|
dt.Rows.Add(drBlank);
|
|
|
|
foreach (ClientPickList.ClientPickListInfo i in cpl)
|
|
{
|
|
DataRow dr = dt.NewRow();
|
|
dr["Display"] = i.Name;
|
|
dr["Value"] = i.ID;
|
|
dt.Rows.Add(dr);
|
|
}
|
|
|
|
DataView dv = dt.DefaultView;
|
|
dv.Sort = "Display";
|
|
cbClient.DataSource = dv;
|
|
cbClient.DataValueField = "Value";
|
|
cbClient.DataTextField = "Display";
|
|
cbClient.DataBind();
|
|
}
|
|
else
|
|
LoadCombo();
|
|
|
|
cbClient.SelectedValue = mSelectedClientID.ToString();
|
|
LoadTemplates();
|
|
|
|
}
|
|
|
|
private void LoadCombo()
|
|
{
|
|
Util.ComboPopulateBizList("Client", cbClient, true, null, true);
|
|
|
|
}
|
|
|
|
private void LoadTemplates()
|
|
{
|
|
cbTemplates.Items.Clear();
|
|
TemplatePickList UList = TemplatePickList.GetList(mBaseTemplateType,true);
|
|
foreach (TemplatePickList.TemplatePickListInfo ui in UList)
|
|
{
|
|
cbTemplates.Items.Add(new Telerik.Web.UI.RadComboBoxItem( ui.Description,ui.ID.ToString()));
|
|
}
|
|
|
|
if (mBaseTemplateType == WorkorderTypes.TemplateService)
|
|
cbTemplates.SelectedValue = TemplateServiceResolver.ResolveTemplate(mSelectedClientID, Util.CurrentUserID).ToString();
|
|
else
|
|
cbTemplates.SelectedIndex = 0;
|
|
}
|
|
|
|
private RootObjectTypes mBaseObject = RootObjectTypes.Nothing;
|
|
private RootObjectTypes BaseObject
|
|
{
|
|
get
|
|
{
|
|
|
|
if (mBaseObject==RootObjectTypes.Nothing)
|
|
{
|
|
//preset from maingrid, however we're here from somewhere else
|
|
//i.e. the schedule then default to service workorder
|
|
if (Session["ActiveObjectType"] == null)
|
|
return RootObjectTypes.WorkorderService;
|
|
|
|
mBaseObject = (RootObjectTypes)Session["ActiveObjectType"];
|
|
}
|
|
|
|
//case 1949
|
|
//there are only three types of root objects actually used by this page
|
|
//so if it isn't any of those three then default to service
|
|
if (mBaseObject != RootObjectTypes.WorkorderService &&
|
|
mBaseObject != RootObjectTypes.WorkorderQuote &&
|
|
mBaseObject != RootObjectTypes.WorkorderPreventiveMaintenance)
|
|
mBaseObject = RootObjectTypes.WorkorderService;
|
|
|
|
return mBaseObject;
|
|
}
|
|
|
|
}
|
|
|
|
private WorkorderTypes mBaseTemplateType = WorkorderTypes.Unknown;
|
|
|
|
private Guid mSelectedClientID = Guid.Empty;
|
|
private Guid mSelectedTemplateID = Guid.Empty;
|
|
protected void btnOK_Click(object sender, ImageClickEventArgs e)
|
|
{
|
|
|
|
if (mSelectedClientID == Guid.Empty)
|
|
return;
|
|
|
|
Workorder w = null;
|
|
|
|
Guid gTemplate = mSelectedTemplateID;
|
|
if (gTemplate != Guid.Empty)
|
|
{
|
|
w = Workorder.NewItem(gTemplate, mSelectedClientID);
|
|
}
|
|
else
|
|
{
|
|
|
|
switch (BaseObject)
|
|
{
|
|
case RootObjectTypes.WorkorderService:
|
|
w = Workorder.NewItem(WorkorderTypes.Service);
|
|
break;
|
|
case RootObjectTypes.WorkorderQuote:
|
|
w = Workorder.NewItem(WorkorderTypes.Quote);
|
|
break;
|
|
case RootObjectTypes.WorkorderPreventiveMaintenance:
|
|
w = Workorder.NewItem(WorkorderTypes.PreventiveMaintenance);
|
|
break;
|
|
}
|
|
w.ClientID = mSelectedClientID;
|
|
}
|
|
|
|
|
|
//if we're here from the schedule screen then the url will have two extra parameters
|
|
//one for time and date and one for scheduleable user
|
|
if (Request.QueryString["usr"] != null)
|
|
{
|
|
WorkorderItemScheduledUser wisu=w.WorkorderItems[0].ScheduledUsers.Add(w.WorkorderItems[0]);
|
|
wisu.UserID = new Guid(Request.QueryString["usr"].ToString());
|
|
string start=Request.QueryString["st"].ToString();
|
|
wisu.StartDate = ParseStartDate(start);
|
|
wisu.StopDate = ParseStartDate(start).AddMinutes(30);
|
|
|
|
|
|
}
|
|
|
|
|
|
//Put the new unsaved workorder in the cache for a 2 minute window
|
|
//so that it's available to the workorder edit form which will immediately remove
|
|
//it from the Cache and put it in the session cache
|
|
//this is done like this because through experimentation could not find any other
|
|
//cache method that the workorder would survive between transit from here to
|
|
//the workorder edit form. Tried session, context etc, tried server.transfer etc
|
|
//the object would immediately disappear from the cache used when arriving at workorderedit
|
|
//however using the Cache as below works properly.
|
|
|
|
//this is all necessary to support an unsaved workorder so that when user get's to workorderedit
|
|
//they can exit without saving. It would be super easy to just save it here and open it there
|
|
//but then they would not get the behaviour they expect from other objects
|
|
Cache.Insert("workorder" + w.ID.ToString(),
|
|
w,
|
|
null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(2));
|
|
|
|
string toUrl = "WorkorderEdit.aspx?id=" + w.ID.ToString();
|
|
Response.Redirect(toUrl, true);
|
|
}
|
|
|
|
private DateTime ParseStartDate(string startparam)
|
|
{
|
|
string[] st = startparam.Split('-');
|
|
//Note: Javascript getmonth function is zero based for no apparent reason
|
|
//so that's why +1 is added to the second parameter below
|
|
DateTime dt = new DateTime(Util.ParseInt(st[0]), Util.ParseInt(st[1])+1, Util.ParseInt(st[2]), Util.ParseInt(st[3]), Util.ParseInt(st[4]), 1);
|
|
return dt;
|
|
}
|
|
|
|
|
|
|
|
//case 983
|
|
protected void btnSearch_Click(object sender, ImageClickEventArgs e)
|
|
{
|
|
|
|
}
|
|
}
|