using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Telerik.WinControls; using System.Collections; using Telerik.WinControls.UI; using SafeMobileLib; using System.Globalization; namespace Safedispatch_4_0 { public partial class NewJobTicketingForm : Telerik.WinControls.UI.RadForm { //private ConvertDT convDT; private SMSmode Smode; private TicketingUserControl parent; private bool sched = false; private DBTicketingManager DBT = new DBTicketingManager(MainForm2.cfg.DB_IP, MainForm2.cfg.DB_schema, MainForm2.cfg.DB_user, MainForm2.cfg.DB_passwd, MainForm2.cfg.DB_port); private List pdf = new List(); private PredefineJobTicket CurrentConfiguration = new PredefineJobTicket(); private void setLanguage() { this.Text = MainForm2.returnLNGString("newJobTicket"); btnSend.Text = MainForm2.returnLNGString("send"); labelHandleBy.Text = MainForm2.returnLNGString("handledBy"); searchTextBox.NullText = MainForm2.returnLNGString("Typetosearchunit"); radLabel2.Text = MainForm2.returnLNGString("dueDate"); radLabel9.Text = MainForm2.returnLNGString("schedSending"); rcbSavePredefined.Text = MainForm2.returnLNGString("predTicket"); labelPredefined.Text = MainForm2.returnLNGString("prTick"); rddlPredefined.Items[0].Text = MainForm2.returnLNGString("currCfg"); labelSubject.Text = MainForm2.returnLNGString("t_subject"); rtbTicketSubject.NullText = MainForm2.returnLNGString("writeTSubj"); labelMessage.Text = MainForm2.returnLNGString("t_message"); rtbMessage.NullText = MainForm2.returnLNGString("leaveNull"); radLabel3.Text = MainForm2.returnLNGString("priority"); radLabel1.Text = MainForm2.returnLNGString("shareWithDispatchers"); rcbListSharedWith.NullText = MainForm2.returnLNGString("notShared"); rddListPriority.Items.Add(MainForm2.returnLNGString(PriorityType.Low.ToString())); rddListPriority.Items.Add(MainForm2.returnLNGString(PriorityType.Normal.ToString())); rddListPriority.Items.Add(MainForm2.returnLNGString(PriorityType.High.ToString())); rddListPriority.Items.Add(MainForm2.returnLNGString(PriorityType.Critical.ToString())); //lbPredefineSMS.Text = MainForm2.returnLNGString("AddPred"); //gbAdressBook.Text = MainForm2.returnLNGString("AddrBook"); //lbAdreesBookHelp.Text = MainForm2.returnLNGString("clickTo"); /* lbGroups.Text = MainForm2.returnLNGString("GrpGroups") + ':'; lbUnits.Text = MainForm2.returnLNGString("GrpUnits") + ':'; lbTO.Text = MainForm2.returnLNGString("Ilabel2") + ':'; cbPredefine.Text = MainForm2.returnLNGString("selpredadd"); */ } public NewJobTicketingForm(TicketingUserControl parent, SMSmode _smode, string selectedUnitOrGroupName, string text) { this.parent = parent; Smode = _smode; InitializeComponent(); //ThemeResolutionService.ApplyThemeToControlTree(this, "ControlDefault"); setLanguage(); // set theme for the Message Box RadMessageBox.SetThemeName("TelerikMetroBlue"); #region THEMING btnSend.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor; labelHandleBy.ForeColor = labelPredefined.ForeColor = labelSubject.ForeColor = labelMessage.ForeColor = MainForm2.LabelColor; pbDelete.Image = Utils.ChangeColor(global::Dispatcher.Properties.Resources.trash_activ, MainForm2.ButtonColor); rgbLeft.GroupBoxElement.Header.Border.TopColor = MainForm2.ButtonColor; rgbLeft.GroupBoxElement.Header.Border.TopShadowColor = MainForm2.ButtonColor; rgbRight.GroupBoxElement.Header.Border.TopColor = MainForm2.ButtonColor; rgbRight.GroupBoxElement.Header.Border.TopShadowColor = MainForm2.ButtonColor; #endregion btnSend.Enabled = false; // select first Predefined ticket value rddlPredefined.SelectedIndex = 0; getAllDispatcher(); switch (Smode) { case SMSmode.New4Unit: //this.Text = Form1.returnLNGString("writenewSMS"); break; case SMSmode.Forward: //this.Text = Form1.returnLNGString("forwSMS"); break; case SMSmode.Reply: //this.Text = Form1.returnLNGString("replySMS"); //tbTO.Text += selectedUnitOrGroupName +";"; //tbTO.Text += selectedUnitOrGroupName; break; } //convDT = new ConvertDT(); if(text!="") { rtbTicketSubject.Text += text; } populateListBoxGroup(); populateListBoxUnits(); rdtpSchedule.CustomFormat = Utils.getDayCustomFormat(MainForm2.is24hours, MainForm2.DayFirst); //if (MainForm2.is24hours) //{ // if (MainForm2.DayFirst) // rdtpSchedule.CustomFormat = rdtpDueDate.CustomFormat = "dd/MM/yyyy HH:mm"; // else // rdtpSchedule.CustomFormat = rdtpDueDate.CustomFormat = "MM/dd/yyyy HH:mm"; //} //else //{ // if (MainForm2.DayFirst) // rdtpSchedule.CustomFormat = rdtpDueDate.CustomFormat = "dd/MM/yyyy hh:mm tt"; // else // rdtpSchedule.CustomFormat = rdtpDueDate.CustomFormat = "MM/dd/yyyy hh:mm tt"; //} rdtpSchedule.Value = DateTime.Now; rdtpDueDate.Value = DateTime.Now; rddListPriority.SelectedIndex = 0; pdf = DBT.get_all_PredefineTickets(); foreach (PredefineJobTicket pd in pdf) { rddlPredefined.Items.Add(pd.Name); } if ((MainForm2.radioType != RADIOTYPE.MOTO) && (MainForm2.radioType != RADIOTYPE.TETRA) && (MainForm2.radioType != RADIOTYPE.CONECTPLUS) && (MainForm2.radioType != RADIOTYPE.REPEATER_TRBO)) { try { switch (MainForm2.radioType) { case RADIOTYPE.HYT: this.Icon = global::Dispatcher.Properties.Resources.HytSmall24; this.BackColor = MainForm2.HyteraColor; this.rtbTicketSubject.MaxLength = 250; break; case RADIOTYPE.HARRIS: this.Icon = global::Dispatcher.Properties.Resources.HarrisSmall; this.rtbTicketSubject.MaxLength = 250; //this.lbGroups.ForeColor = MainForm2.HarTextColor; //this.lbTO.ForeColor = MainForm2.HarTextColor; //this.lbUnits.ForeColor = MainForm2.HarTextColor; break; case RADIOTYPE.ATLAS: this.Icon = global::Dispatcher.Properties.Resources.ATLICO32; break; case RADIOTYPE.SIMOCO: this.Icon = global::Dispatcher.Properties.Resources.simoco_dispatch_24; break; case RADIOTYPE.EXCERA: this.Icon = global::Dispatcher.Properties.Resources.AXYS_ICON; break; } } catch (Exception ex) { SM.Debug("Error on change color hytera/harris:" + ex.ToString()); } } } private void btnSendTicket_Click(object sender, EventArgs e) { string shareWith = ""; if(rcbListSharedWith.CheckedItems.Count > 0) foreach (RadListDataItem item in rcbListSharedWith.CheckedItems) { User user = item.DataBoundItem as User; if (user != null) shareWith += user.Id + ";"; } string specified_end_time = ""; // check ticket subject if (rtbTicketSubject.Text.Trim().Length < 2) { RadMessageBox.Show(this, "Please fill the ticket subject", "", MessageBoxButtons.OK, RadMessageIcon.Exclamation); rtbTicketSubject.Focus(); return; } // check due date if (rcbDueDate.Checked) specified_end_time = ((int)rdtpDueDate.Value.ToUniversalTime().DateTo70Format()).ToString(); if (rdtpDueDate.Value < DateTime.Now && rcbDueDate.Checked) { RadMessageBox.Show(this, MainForm2.returnLNGString("endtimegrCurrTime"), "", MessageBoxButtons.OK, RadMessageIcon.Exclamation); rdtpDueDate.Value = DateTime.Now; return; } if (rdtpSchedule.Value < DateTime.Now && rcbSchedule.Checked) { RadMessageBox.Show(this, MainForm2.returnLNGString("schtimegrCurrTime"), "", MessageBoxButtons.OK, RadMessageIcon.Exclamation); rdtpSchedule.Value = DateTime.Now; return; } if (rdtpSchedule.Value > rdtpDueDate.Value && rcbSchedule.Checked && rcbDueDate.Checked) { RadMessageBox.Show(this, MainForm2.returnLNGString("endtimegrSchedtime"), "", MessageBoxButtons.OK, RadMessageIcon.Exclamation); return; } PriorityType priority = (PriorityType)rddListPriority.SelectedIndex; string sms = string.Format("{0}^{1}^{2}^{3}^{4}^{5}", rtbTicketSubject.Text, rtbMessage.Text, rddListPriority.SelectedItem == null ? "" : priority.ToString(), MainForm2.userLog,specified_end_time,shareWith); sms = sms.Replace("\'", "\'\'"); int ticket = DBT.getMaxTicketID(); sms = "" + ticket.ToString() + Environment.NewLine + sms; if (rtbTicketSubject.Text.Length > 0) { List assignedUnitsIds = new List(); List assignedUnits = new List(); // check all group nodes to see which one is checked foreach (RadTreeNode groupNode in treeViewUnits.Nodes) { // skip groups with no unit checked if (groupNode.CheckState == Telerik.WinControls.Enumerations.ToggleState.Off) continue; // go through each unit and get the checked ones foreach (RadTreeNode unitNode in groupNode.Nodes) { if (unitNode.Checked) { assignedUnits.Add(unitNode.Name); assignedUnitsIds.Add((Int32)unitNode.Tag); } } } //send predefined message if (rcbSavePredefined.Checked) { RadTreeNodeCollection rtnC = treeViewUnits.Nodes; PredefineJobTicket PredefineTicketToSave = new PredefineJobTicket(); PredefineTicketToSave.Name = rtbTicketName.Text; PredefineTicketToSave.Text = rtbTicketSubject.Text; PredefineTicketToSave.Comment = rtbMessage.Text; PredefineTicketToSave.Priority = rddListPriority.SelectedItem.Text; if (rcbDueDate.Checked) { TimeSpan ts = Convert.ToDateTime(rdtpDueDate.Value) - DateTime.Now; PredefineTicketToSave.Enddate = (int)ts.TotalSeconds; } if (rcbSchedule.Checked) { TimeSpan ts = DateTime.Today.AddHours(rdtpSchedule.Value.Hour).AddMinutes(rdtpSchedule.Value.Minute) - DateTime.Today; PredefineTicketToSave.Scheduledate = (int)ts.TotalSeconds; } else PredefineTicketToSave.Scheduledate = -1; foreach (int assignedUnitsId in assignedUnitsIds) PredefineTicketToSave.Handled_by += assignedUnitsId + ";"; PredefineTicketToSave.Share_with = shareWith; //PredefineTicketToSave.Share_with = rddListPriority.SelectedItem.Text; TicketResponse b = DBT.InsertUpdate_Define_Ticket(PredefineTicketToSave); } // show error message if not unit is checked if (assignedUnits.Count == 0 ) { RadMessageBox.Show(this, "You haven't selected any unit", "", MessageBoxButtons.OK, RadMessageIcon.Exclamation); treeViewUnits.Focus(); return; } string[] units = assignedUnits.ToArray();// dest.Split(';'); String mess15 = MainForm2.returnLNGString("info"); String message = MainForm2.returnLNGString("limitSMSto10"); String question = MainForm2.returnLNGString("contorlessunits"); Boolean execute = true; // show Confirmation dialog if the number of selected units is greater than 10 if ((assignedUnits.Count > 10) && ((MainForm2.radioType == RADIOTYPE.MOTO) || (MainForm2.radioType == RADIOTYPE.ATLAS) || (MainForm2.radioType == RADIOTYPE.TETRA) || (MainForm2.radioType == RADIOTYPE.CONECTPLUS) || (MainForm2.radioType == RADIOTYPE.REPEATER_TRBO))) { DialogResult dr2 = RadMessageBox.Show(this, message + "\r\n" + question, mess15, MessageBoxButtons.YesNo, RadMessageIcon.Exclamation); if (dr2 != DialogResult.Yes) execute = false; } // execute because number of units is grater than 10 or user accepted the risk // of loosing messages if (execute) { foreach (string unitNameOrGroup in units) { try { InsertOneSMSinDB4units(unitNameOrGroup, sms); parent.parent.DisplayToast(MainForm2.returnLNGString("jt2Unit") + (assignedUnits.Count > 1 ? assignedUnits.Count + MainForm2.returnLNGString("units") : assignedUnits[0]), string.Format(MainForm2.returnLNGString("ticketSubjectHTML"),rtbTicketSubject.Text)); } catch (Exception ex) { SM.Debug("Ex:" + ex.ToString()); } } this.Close(); } } } private void btnSendSched_Click(object sender, EventArgs e) { sched = true; if (rdtpSchedule.Value < DateTime.Now) { if ((MainForm2.radioType == RADIOTYPE.HARRIS)||(MainForm2.radioType == RADIOTYPE.ATLAS)) ((RadLabel)RadMessageBox.Instance.Controls[1]).LabelElement.ForeColor = MainForm2.HarTextColor; RadMessageBox.Show(MainForm2.returnLNGString("sched_error") + DateTime.Now.ToString(), MainForm2.returnLNGString("error") + "!", MessageBoxButtons.OK, RadMessageIcon.Exclamation); } else btnSend.PerformClick(); sched = false; } private void InsertOneSMSinDB4units(string unitName, string sms) { if (unitName != "") { if (MainForm2.vehicleHT.ContainsKey(unitName)) { SM.Debug("Adding SMS to DB for unit:" + unitName); int sc_id = ((Vehicle)MainForm2.vehicleHT[unitName]).sc_id; int sched_time = 0; sched = rcbSchedule.Checked; if (!sched) sched_time = 0; else sched_time = (int)rdtpSchedule.Value.ToUniversalTime().DateTo70Format(); parent.SendSMS(sms, sc_id, sched_time); } else { SM.Debug("Error NewJobTicketingForm /InsertOneSMSinDB/ selected item(" + unitName + ") not in hashtable"); } } } private void InsertOneSMSinDB4Groups(ArrayList scIDarray, string sms) { if (scIDarray.Count>0) { foreach (int scID in scIDarray) { SM.Debug("Adding SMS to DB for unit with scid:" + scID); int sched_time = 0; if (!sched) sched_time = 0; else sched_time = (int)rdtpSchedule.Value.ToUniversalTime().DateTo70Format(); parent.SendSMS(sms, scID, sched_time); } } } private void InsertOneSMSinDB4Groups_with_cpsID(Int32 cps_id, string sms) { try { SM.Debug("Adding SMS to DB for group with cpsid:" + cps_id); int sched_time = 0; if (!sched) sched_time = 0; else sched_time = (int)rdtpSchedule.Value.ToUniversalTime().DateTo70Format(); //if (scIDarray.Count>0) parent.SendSMSGroup(sms,cps_id, sched_time,(Int32)scIDarray[0]); parent.SendSMSGroup(sms, cps_id, sched_time); } catch (Exception ex) { SM.Debug("Exception on InsertOneSMSinDB4Groups_with_cpsID:"+ex.ToString()); } } /// /// Add the Groups as Nodes inside the Tree View /// private void populateListBoxGroup() { GroupClass g = new GroupClass(); // for each group add a tree node foreach (int i in MainForm2.GroupHash.Keys) { g = (GroupClass)MainForm2.GroupHash[i]; AddTreeGroup(g.name, g.id); } } /// /// Add a Group Node to the Tree View /// /// Group name which needs to be added to the Tree Node /// Group ID which will be set as a tag for this group node /// Returns the inserted Tree Node private RadTreeNode AddTreeGroup(string groupName, Int32 groupID) { RadTreeNode groupNode = new RadTreeNode(groupName.ToUpper()); groupNode.Font = new Font( new FontFamily("Segoe UI"), 13, FontStyle.Bold, GraphicsUnit.Pixel); groupNode.Tag = groupID; groupNode.CheckState = Telerik.WinControls.Enumerations.ToggleState.Off; groupNode.Expanded = true; groupNode.Image = Utils.ChangeColor(global::Dispatcher.Properties.Resources.s_group, MainForm2.ButtonColor); // add the node to the tree view treeViewUnits.Nodes.Add(groupNode); return groupNode; } private bool DefaultGroupAdded = false; /// /// Add Units to the groups nodes in the Tree View /// private void populateListBoxUnits() { // for each Unit defined in the hash table foreach (DictionaryEntry de in MainForm2.vehicleHT) { Vehicle veh = de.Value as Vehicle; if (veh != null) { RadTreeNode unitNode = new RadTreeNode(veh.busName); unitNode.Tag = veh.sc_id; Car crtCar = ((Car)MainForm2.carlist[((Vehicle)MainForm2.vehicleHT[veh.busName]).IconID]); if (crtCar != null) { String iconPath = crtCar.listFilePath; try { Bitmap bmp = new Bitmap(iconPath); Image tmp2 = bmp; //tmp.ToBitmap(); tmp2.Tag = crtCar.listFilePath; // add image to the dictionary if not exists if (!MainForm2.imagesDictionary.ContainsKey(crtCar.listFilePath + "_16")) MainForm2.imagesDictionary.Add(crtCar.listFilePath + "_16", Utils.ScaleImage(tmp2, 16, 16)); // set the icon for the unit unitNode.Image = MainForm2.imagesDictionary[crtCar.listFilePath + "_16"]; } catch (Exception) { SM.Debug("Grid icon could not be found [" + iconPath + "]"); unitNode.Image = global::Dispatcher.Properties.Resources.subscriber; } } // check to see if the unit is assigned to a group if (veh.group != null && veh.group.Id != 0) { // the group already exists } else { // create Unassigned group if not created until now if (!DefaultGroupAdded) { AddTreeGroup(MainForm2.returnLNGString("otherunit"), 0); DefaultGroupAdded = true; } } // search the group in which the unit will be added foreach (RadTreeNode groupNode in treeViewUnits.Nodes) { Int32 groupID = (Int32)groupNode.Tag; if (groupID == veh.group.Id) groupNode.Nodes.Add(unitNode); } } } } private void btnCancel_Click(object sender, EventArgs e) { this.Close(); } private void getAllDispatcher() { List dispatchers = new List(); // get all dispatchers from the hash table foreach(KeyValuePair entry in TicketingUserControl.dispatchersList) { if(entry.Value.Lastname != MainForm2.userLog) dispatchers.Add(entry.Value); } //ShareWithGridView.DataSource = usrList; rcbListSharedWith.DataSource = dispatchers; rcbListSharedWith.DisplayMember = "UserName"; } private void NewJobTicketingForm_FormClosed(object sender, FormClosedEventArgs e) { parent.StartRefresh(); } /// /// Enable or disable the Schedule DateTime Picker /// private void rcbSchedule_ToggleStateChanged(object sender, StateChangedEventArgs args) { rdtpSchedule.Enabled = (args.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On ? true : false); } /// /// Save the current UI state to a temp Predefinet Ticket and then /// change the UI to display a predefined ticket values /// private void rddlPredefined_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e) { // show delete only if not "Current configuration" pbDelete.Visible = e.Position != 0; rcbListSharedWith.Text = ""; rcbListSharedWith.CheckedItems.Clear(); rtbTicketName.Text = (rddlPredefined.SelectedIndex == 0) ? MainForm2.returnLNGString("ticketName") : rddlPredefined.SelectedItem.Text; if (e.Position != 0) { foreach (PredefineJobTicket pd in pdf) { if (pd.Name == ((RadDropDownList)sender).SelectedItem.ToString()) { rtbTicketSubject.Text = pd.Text; rtbMessage.Text = pd.Comment; rddListPriority.SelectedIndex = rddListPriority.FindString(pd.Priority); rdtpDueDate.Value = DateTime.Now.AddSeconds(pd.Enddate); if (pd.Scheduledate > -1) { rdtpSchedule.Value = DateTime.Today.AddSeconds(pd.Scheduledate); rdtpSchedule.Value = (rdtpSchedule.Value < DateTime.Now) ? rdtpSchedule.Value.AddDays(1) : rdtpSchedule.Value; } else rdtpSchedule.Value = DateTime.Now; if (pd.Share_with != null && pd.Share_with.Length > 0) { string[] shared = pd.Share_with.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); ; foreach (string dispatcherID in shared) { // get dispatcher name if exists if (TicketingUserControl.dispatchersList.ContainsKey(Int32.Parse(dispatcherID))) rcbListSharedWith.Text += TicketingUserControl.dispatchersList[Int32.Parse(dispatcherID)].UserName + ";"; else rcbListSharedWith.Text += dispatcherID + ";"; } } if (pd.Handled_by != null) { foreach (RadTreeNode groupNode in treeViewUnits.Nodes) { // go through each unit and get the checked ones string[] splitHandled_by = pd.Handled_by.Split(';'); foreach (RadTreeNode unitNode in groupNode.Nodes) { unitNode.Checked = (Array.IndexOf(splitHandled_by, unitNode.Tag.ToString())>-1); } } } } } } else { rtbTicketSubject.Text = CurrentConfiguration.Text; rtbMessage.Text = CurrentConfiguration.Comment; rddListPriority.SelectedIndex = (CurrentConfiguration.Priority != null) ? rddListPriority.FindString(CurrentConfiguration.Priority) : 0; rdtpDueDate.Value = DateTime.Now.AddSeconds(CurrentConfiguration.Enddate); if (CurrentConfiguration.Share_with != null && CurrentConfiguration.Share_with.Length > 0) { string[] shared = CurrentConfiguration.Share_with.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); ; foreach (string dispatcherID in shared) { // get dispatcher name if exists if (TicketingUserControl.dispatchersList.ContainsKey(Int32.Parse(dispatcherID))) rcbListSharedWith.Text += TicketingUserControl.dispatchersList[Int32.Parse(dispatcherID)].UserName + ";"; else rcbListSharedWith.Text += dispatcherID + ";"; } } if (CurrentConfiguration.Handled_by != null) { foreach (RadTreeNode groupNode in treeViewUnits.Nodes) { // go through each unit and get the checked ones string[] splitHandled_by = CurrentConfiguration.Handled_by.Split(';'); foreach (RadTreeNode unitNode in groupNode.Nodes) { unitNode.Checked = (Array.IndexOf(splitHandled_by, unitNode.Tag.ToString()) > -1); } } } else { foreach (RadTreeNode groupNode in treeViewUnits.Nodes) { // uncheck all nodes foreach (RadTreeNode unitNode in groupNode.Nodes) { unitNode.Checked = false; } } } } } /// /// Save the current ticket configuration to a Predefined one. If the /// drop down list text is "Current configuration" I should change the /// message to 'Type Predefined Template name' /// /// /// private void pbSaveTemplate_Click(object sender, EventArgs e) { if (rddlPredefined.Text == MainForm2.returnLNGString("currCfg")) { rddlPredefined.Text = "Type predefined ticket name"; rddlPredefined.Focus(); rddlPredefined.SelectAllText(); } } /// /// Hide or show text box for predefined Ticket and focuts the text box /// private void rcbSavePredefined_ToggleStateChanged(object sender, StateChangedEventArgs args) { rtbTicketName.Visible = (args.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On); rtbTicketName.Text = (rddlPredefined.SelectedIndex == 0) ? MainForm2.returnLNGString("ticketName") : rddlPredefined.SelectedItem.Text; rtbTicketName.Focus(); rtbTicketName.SelectAll(); } /// /// Enable or disable the date time pickers depending on the state of /// the checkboxex /// /// The CheckBox which changed its state private void CheckBox_StateChanged(object sender, StateChangedEventArgs args) { if ((RadCheckBox)sender == rcbDueDate) rdtpDueDate.Enabled = rcbDueDate.Checked; else if ((RadCheckBox)sender == rcbSchedule) rdtpSchedule.Enabled = rcbSchedule.Checked; } /// /// Delete Predefine Ticket from DB and remove it from /// rddlPredefined drop down list /// /// /// private void pbDelete_Click(object sender, EventArgs e) { try { if (rddlPredefined.SelectedIndex > 0) { //remove from DB DBT.delete_Predefine_Ticket(rddlPredefined.SelectedItem.ToString()); //remove from list foreach(PredefineJobTicket pd in pdf) { if (pd.Name == rddlPredefined.SelectedItem.ToString()) { pdf.Remove(pd); rddlPredefined.Items.Remove(rddlPredefined.SelectedItem); if(rddlPredefined.Items.Count > 1) rddlPredefined.SelectedIndex -= 1; } } } } catch (Exception ex) { SM.Debug("EX:" + ex.ToString()); } } /// /// Save current configuration state /// /// /// private void rddlPredefined_SelectedIndexChanging(object sender, Telerik.WinControls.UI.Data.PositionChangingCancelEventArgs e) { //if (rddlPredefined.SelectedIndex == 0) doesn't work if (((Telerik.WinControls.UI.RadDropDownList)(sender)).SelectedItems.Count > 0) { if (((Telerik.WinControls.UI.RadDropDownList)(sender)).SelectedItems[0].RowIndex == 0) { //CurrentConfiguration = new PredefineJobTicket(); CurrentConfiguration.Text = rtbTicketSubject.Text; CurrentConfiguration.Comment = rtbMessage.Text; CurrentConfiguration.Priority = rddListPriority.SelectedItem.Text; if (rcbDueDate.Checked) { TimeSpan ts = Convert.ToDateTime(rdtpDueDate.Value) - DateTime.Now; CurrentConfiguration.Enddate = (int)ts.TotalSeconds; } CurrentConfiguration.Share_with = ""; CurrentConfiguration.Handled_by = ""; foreach (RadListDataItem item in rcbListSharedWith.CheckedItems) { User user = item.DataBoundItem as User; if (user != null) CurrentConfiguration.Share_with += user.Id + ";"; } foreach (RadTreeNode groupNode in treeViewUnits.Nodes) { // skip groups with no unit checked if (groupNode.CheckState == Telerik.WinControls.Enumerations.ToggleState.Off) continue; // go through each unit and get the checked ones foreach (RadTreeNode unitNode in groupNode.Nodes) { if (unitNode.Checked) { CurrentConfiguration.Handled_by += unitNode.Tag + ";"; } } } } } } private void rtbTicketName_KeyPress(object sender, KeyPressEventArgs e) { if (!char.IsControl(e.KeyChar) && !char.IsLetterOrDigit(e.KeyChar)) { e.Handled = true; } } private void NewJobTicketingForm_Load(object sender, EventArgs e) { // set the checkboxes for due date and schedule to unchecked rcbSchedule.Checked = false; rcbDueDate.Checked = false; } /// /// Change background color for the row according to its state and theme /// private void treeViewUnits_NodeFormatting(object sender, TreeNodeFormattingEventArgs e) { if (e.NodeElement.IsSelected) { e.NodeElement.DrawFill = true; e.NodeElement.BackColor = MainForm2.GridSelectedRow; e.NodeElement.NumberOfColors = 1; } else e.NodeElement.DrawFill = false; } /// /// Filter the tree node based on the text from the search box /// private void searchTextBox_TextChanged(object sender, EventArgs e) { treeViewUnits.Filter = null; treeViewUnits.Filter = searchTextBox.Text; } /// /// Validate form when a node is checked or unckhcked. This is done to prevent /// the case when no unit is selected or text message is not filled /// private void treeViewUnits_NodeCheckedChanged(object sender, TreeNodeCheckedEventArgs e) { if (treeViewUnits.CheckedNodes.Count > 0 && rtbTicketSubject.Text.Length > 0) btnSend.Enabled = true; else btnSend.Enabled = false; } /// /// Enable or disable UI elements depending on the number of characters /// private void rtbTicketSubject_TextChanged(object sender, EventArgs e) { if (treeViewUnits.CheckedNodes.Count > 0 && rtbTicketSubject.Text.Length > 0) btnSend.Enabled = true; else btnSend.Enabled = false; } /// /// Change background color of the button when it becomes enable or disabled /// private void btnSend_EnabledChanged(object sender, EventArgs e) { if (btnSend.Enabled) btnSend.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColor; else btnSend.ButtonElement.ButtonFillElement.BackColor = MainForm2.ButtonColorDisabled; } } }