using System; using System.Collections.Generic; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using Telerik.WinControls.UI; using Telerik.WinControls; using Telerik.WinControls.UI.Docking; using System.Globalization; using SafeMobileLib; using System.Threading; using System.IO; using System.Text.RegularExpressions; namespace Safedispatch_4_0 { public partial class ReportsControl : UserControl { private SMdb_access smdbObj; private String glwhere, msgLimit, msgInteger, msgMustSel, msgInvalidEmail, msgSplitEmail, msgEmailSaved; private rep_type RepType; private ConvertDT convDT; private ArrayList vehicleListNames; private ArrayList ZoneListNames; private volatile Boolean ValidReport = false; private String minval = ""; private Boolean ButtonStatusCancel = false; public static volatile Hashtable IdReportHS = new Hashtable(); private String hintText = ""; // store all the vehicles public BindingList UnitGroupItems = new BindingList(); private void setLanguage() { rlUnitGroup.Text = MainForm2.returnLNGString("unitemail"); rlReportDaily.Text = MainForm2.returnLNGString("reptoemail"); btSaveEmail.Text = MainForm2.returnLNGString("savemail"); rlCoordinates.Text = MainForm2.returnLNGString("showcoor"); rlSelectAll.Text = MainForm2.returnLNGString("cbselAll"); rlIdle.Text = MainForm2.returnLNGString("generate") + " "; rlComputing.Text = MainForm2.returnLNGString("comp"); hintText = MainForm2.returnLNGString("sepaemail"); // create the toolTip that will be displayed when the user sets a pattern // over the hint pictureBox toolTipHelp = new ToolTip(); toolTipHelp.ToolTipTitle = "Email reporting"; toolTipHelp.AutoPopDelay = 0; toolTipHelp.InitialDelay = 0; toolTipHelp.ReshowDelay = 0; toolTipHelp.IsBalloon = false; toolTipHelp.ShowAlways = true; rlComputeAddress.Text = MainForm2.returnLNGString("compAddr"); rlDateTimeFilter.Text = MainForm2.returnLNGString("datetimefil"); rlUntil.Text = MainForm2.returnLNGString("until"); //ckSelectALL.Text = MainForm2.returnLNGString("cbselAll"); //ckStatus.Text = MainForm2.returnLNGString("SMSStatus"); rlIdle.Text = MainForm2.returnLNGString("txIDLE"); btPrintReport.Text = MainForm2.returnLNGString("btShowReport"); minval = MainForm2.returnLNGString("min"); toolWindow1.Text = MainForm2.returnLNGString("Filter"); toolWindow2.Text = MainForm2.returnLNGString("Report"); rdtFrom.Culture = MainForm2.culture; rdtUntil.Culture = MainForm2.culture; rcbGeoLandType.Items.Add(StringEnum.OUT.ToString()); rcbGeoLandType.Items.Add(StringEnum.IN.ToString()); rcbStatus.Items.Add(StringEnum.OFF.ToString()); rcbStatus.Items.Add(StringEnum.ON.ToString()); rcbStatus.Items.Add(StringEnum.MADEOFF.ToString()); rcbStatus.Items.Add(StringEnum.MADEON.ToString()); // select first item if (rcbGeoLandType.Items.Count >= 1) rcbGeoLandType.SelectedIndex = 0; // select first item if (rcbStatus.Items.Count >= 1) rcbStatus.SelectedIndex = 0; if (MainForm2.is24hours) { if (MainForm2.DayFirst) { rdtFrom.CustomFormat = "dd/MM/yyyy HH:mm"; rdtUntil.CustomFormat = "dd/MM/yyyy HH:mm"; } else { rdtFrom.CustomFormat = "MM/dd/yyyy HH:mm"; rdtUntil.CustomFormat = "MM/dd/yyyy HH:mm"; } } else { if (MainForm2.DayFirst) { rdtFrom.CustomFormat = "dd/MM/yyyy hh:mm tt"; rdtUntil.CustomFormat = "dd/MM/yyyy hh:mm tt"; } else { rdtFrom.CustomFormat = "MM/dd/yyyy hh:mm tt"; rdtUntil.CustomFormat = "MM/dd/yyyy hh:mm tt"; } } } public void Refresh_GeoName() { try { ZoneListNames.Clear(); if (RepType == rep_type.GEOFENC) { foreach (Int32 obj in MainForm2.ZoneIDHash.Keys) ZoneListNames.Add(new VehandID(((ZoneClass)MainForm2.ZoneIDHash[obj]).Name, obj, "")); } rcbGeoLandName.DataSource = null; ZoneListNames.Sort(new VehandIDComparer()); rcbGeoLandName.DataSource = ZoneListNames; rcbGeoLandName.DisplayMember = "Name"; if (rcbGeoLandName.Items.Count >= 1) rcbGeoLandName.SelectedIndex = 0; } catch (Exception ex) { SM.Debug("Error Load ReportsControl: " + ex.ToString()); } } public void Refresh_LandName() { try { ZoneListNames.Clear(); if (RepType == rep_type.LAND) { foreach (Int32 obj in MainForm2.LandIDHash.Keys) ZoneListNames.Add(new VehandID((String)MainForm2.LandIDHash[obj], obj, "")); } rcbGeoLandName.DataSource = null; ZoneListNames.Sort(new VehandIDComparer()); rcbGeoLandName.DataSource = ZoneListNames; rcbGeoLandName.DisplayMember = "Name"; if (rcbGeoLandName.Items.Count >= 1) rcbGeoLandName.SelectedIndex = 0; } catch (Exception ex) { SM.Debug("Error Load ReportsControl: " + ex.ToString()); } } public ReportsControl(rep_type _RepType) { smdbObj = new SMdb_access(); vehicleListNames = new ArrayList(); ZoneListNames = new ArrayList(); convDT = new ConvertDT(); RepType = _RepType; InitializeComponent(); // update the UI for the current report type UpdateUIForReportType(_RepType); setLanguage(); toolWindow1.ToolCaptionButtons = Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.AutoHide | Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.SystemMenu; toolWindow1.DocumentButtons &= ~Telerik.WinControls.UI.Docking.DocumentStripButtons.Close; toolWindow1.AllowedDockState = AllowedDockState.Docked | AllowedDockState.AutoHide; toolWindow2.ToolCaptionButtons = Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.AutoHide | Telerik.WinControls.UI.Docking.ToolStripCaptionButtons.SystemMenu; toolWindow2.DocumentButtons &= ~Telerik.WinControls.UI.Docking.DocumentStripButtons.Close; msgLimit = MainForm2.returnLNGString("endtimegreate"); msgInteger = MainForm2.returnLNGString("msgInteger"); msgMustSel = MainForm2.returnLNGString("mustselect"); msgInvalidEmail = MainForm2.returnLNGString("msgInvalidEmail"); msgSplitEmail = MainForm2.returnLNGString("msgSplitEmail"); msgEmailSaved = MainForm2.returnLNGString("msgEmailSaved"); if (MainForm2.is24hours) { if (MainForm2.DayFirst) { rdtFrom.CustomFormat = "dd/MM/yyyy HH:mm"; rdtUntil.CustomFormat = "dd/MM/yyyy HH:mm"; } else { rdtFrom.CustomFormat = "MM/dd/yyyy HH:mm"; rdtUntil.CustomFormat = "MM/dd/yyyy HH:mm"; } } else { if (MainForm2.DayFirst) { rdtFrom.CustomFormat = "dd/MM/yyyy hh:mm tt"; rdtUntil.CustomFormat = "dd/MM/yyyy hh:mm tt"; } else { rdtFrom.CustomFormat = "MM/dd/yyyy hh:mm tt"; rdtUntil.CustomFormat = "MM/dd/yyyy hh:mm tt"; } } DateTime now = DateTime.Now; DateTime beginOfDay = new DateTime(now.Year, now.Month, now.Day); rdtFrom.Value = beginOfDay; rdtUntil.Value = now; try { foreach (String obj in MainForm2.vehicleHT.Keys) { // get the vehicle for this key Vehicle veh = (Vehicle)(MainForm2.vehicleHT[obj]); // create the DropList Item and add it to the items list DropListItem item = new DropListItem(); item.Text = veh.busName; item.Image = GetIconForCombobox(MainForm2.radioType, "unit", true); //Dispatcher.Properties.Resources.icon_u; item.ValueImei = "'" + veh.IMEI + "'"; item.ValueScID = veh.sc_id + ""; UnitGroupItems.Add(item); vehicleListNames.Add(new VehandID(((Vehicle)MainForm2.vehicleHT[obj]).busName, ((Vehicle)MainForm2.vehicleHT[obj]).sc_id, ((Vehicle)MainForm2.vehicleHT[obj]).IMEI)); } // sort alphabetically the list List sortedList = UnitGroupItems.OrderBy(x => x.Text).ToList(); UnitGroupItems = new BindingList(sortedList); // do not add the Groups to the comboBox if one of this types if (!(_RepType == rep_type.ENDOFDAY || _RepType == rep_type.FLEET || _RepType == rep_type.IDLE || _RepType == rep_type.STOP)) { // create a temporary binding list which will be sorted before being added to the // main binding list BindingList tempGroupList = new BindingList(); // add groups into drop list foreach (DictionaryEntry pair in MainForm2.GroupHash) { GroupClass group = (GroupClass)pair.Value; DropListItem item = new DropListItem(); item.Image = GetIconForCombobox(MainForm2.radioType, "group", true); //Dispatcher.Properties.Resources.icon_group; item.Text = group.name; item.IsGroup = true; // create the list of sc_ids contained in this group string scIDs = ""; foreach (int unitScID in group.arrSc_id) { scIDs = scIDs + unitScID + ","; } // remove last , if (scIDs.Length > 0 && scIDs.Substring(scIDs.Length - 1, 1).Equals(",")) scIDs = scIDs.Remove(scIDs.Length - 1); // add group imeis to the data item value item.ValueScID = scIDs; // add only groups with units if (scIDs.Length > 0) tempGroupList.Add(item); // create the list of imeis contained in this group string imeis = ""; foreach (String unitImei in group.arrImei) { imeis = imeis + "'" + unitImei + "',"; } // remove last , if (imeis.Length > 0 && imeis.Substring(imeis.Length - 1, 1).Equals(",")) imeis = imeis.Remove(imeis.Length - 1); // add group imeis to the data item value item.ValueImei = imeis; } // sort alphabetically the list List sortedGroupList = tempGroupList.OrderBy(x => x.Text).ToList(); // add the temporary list to the main one foreach (DropListItem ite in sortedGroupList) UnitGroupItems.Add(ite); } if (RepType == rep_type.GEOFENC) { foreach (Int32 obj in MainForm2.ZoneIDHash.Keys) ZoneListNames.Add(new VehandID(((ZoneClass)MainForm2.ZoneIDHash[obj]).Name, obj, "")); } else if (RepType == rep_type.LAND) { foreach (Int32 obj in MainForm2.LandIDHash.Keys) ZoneListNames.Add(new VehandID((String)MainForm2.LandIDHash[obj], obj, "")); } } catch (Exception ex) { SM.Debug("Error Load ReportsControl: " + ex.ToString()); MainForm2.Connfailed = true; return; } vehicleListNames.Sort(new VehandIDComparer()); // add the datasource for the vehicles ComboBox rcbUnitGroup.DataSource = UnitGroupItems; //cbVehName.DataSource = vehicleListNames; //cbVehName.DisplayMember = "Name"; if (rcbUnitGroup.Items.Count > 1) rcbUnitGroup.SelectedIndex = 0; foreach (VehandID obj in vehicleListNames) rcbUnitFleet.Items.Add(new CustomListDataItem(obj.Name)); pbUnitGroupForCombo.Enabled = false; pbUnitGroupForCombo.Image = GetIconForCombobox(MainForm2.radioType, "unit", false); ContextMenuService menuService = this.radDock1.GetService(); menuService.ContextMenuDisplaying += menuService_ContextMenuDisplaying; //this disables the context menu menuService.AllowActiveWindowListContextMenu = false; menuService.AllowDocumentContextMenu = false; menuService.AllowToolContextMenu = false; try { switch (MainForm2.radioType) { case RADIOTYPE.HYT: radDock1.BackColor = MainForm2.HyteraColor; documentTabStrip1.BackColor = MainForm2.HyteraColor; documentContainer1.BackColor = MainForm2.HyteraColor; toolWindow1.BackColor = MainForm2.HyteraColor; break; case RADIOTYPE.HARRIS: radDock1.BackColor = MainForm2.HarrisColor; documentTabStrip1.BackColor = MainForm2.HarrisColor; documentContainer1.BackColor = MainForm2.HarrisColor; toolWindow1.BackColor = MainForm2.HarrisColor; rlIdle.ForeColor = MainForm2.HarTextColor; rlMin.ForeColor = MainForm2.HarTextColor; rlUnitGroup.ForeColor = MainForm2.HarTextColor; rlUntil.ForeColor = MainForm2.HarTextColor; ckDataFilter.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor; ckSelectALL.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor; ckGeofenceType.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor; ckStatus.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor; ckUnitGroupFilter.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor; ckComputeAddress.ForeColor = MainForm2.HarTextColor; rlComputing.ForeColor = MainForm2.HarTextColor; break; case RADIOTYPE.ATLAS: radDock1.BackColor = MainForm2.HarrisColor; documentTabStrip1.BackColor = MainForm2.HarrisColor; documentContainer1.BackColor = MainForm2.HarrisColor; toolWindow1.BackColor = MainForm2.HarrisColor; rlIdle.ForeColor = MainForm2.HarTextColor; rlMin.ForeColor = MainForm2.HarTextColor; rlUnitGroup.ForeColor = MainForm2.HarTextColor; rlUntil.ForeColor = MainForm2.HarTextColor; ckDataFilter.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor; ckSelectALL.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor; ckGeofenceType.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor; ckStatus.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor; ckUnitGroupFilter.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor; ckComputeAddress.ForeColor = MainForm2.HarTextColor; rlComputing.ForeColor = MainForm2.HarTextColor; break; } } catch (Exception ex) { SM.Debug("Error on change color constructor:" + ex.ToString()); } } /// /// Event when the mouse is entering the Report Daily Panel. It will display a tooltip /// containing some informations /// private void emailHint_MouseEnter(object sender, EventArgs e) { DisplayToolTip(sender, hintText); } /// /// Event when the mouse is exiting the Report Daily Panel. It will hide the tooltip /// previous displayed /// private void emailHint_MouseLeave(object sender, EventArgs e) { toolTipHelp.Hide((IWin32Window)sender); } /// /// Event when the mouse is hovering over the Report Daily Panel. It will display a tooltip /// containing some informations /// private void emailHint_MouseHover(object sender, EventArgs e) { DisplayToolTip(sender, hintText); } /// /// Display a tooltip attached to a specific control /// private void DisplayToolTip(Object tooltipControl, string hintText) { // number of seconds for the toolTip to be shown toolTipHelp.Show(hintText, (IWin32Window)tooltipControl, 150000); } private void menuService_ContextMenuDisplaying(object sender, ContextMenuDisplayingEventArgs e) { if (e.MenuType == ContextMenuType.DockWindow && e.DockWindow.DockTabStrip is DocumentTabStrip) { for (int i = 0; i < e.MenuItems.Count; i++) { RadMenuItemBase menuItem = e.MenuItems[i]; if (menuItem.Name == "CloseWindow" || menuItem.Name == "CloseAllButThis" || menuItem.Name == "CloseAll" || menuItem.Name == "Floating" || menuItem.Name == "Docked" || menuItem.Name == "Hidden" || menuItem is RadMenuSeparatorItem) { menuItem.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; } } } } private void btPrintReport_Click(object sender, EventArgs e) { try { if (!ButtonStatusCancel) { if (RepType == rep_type.FLEET) { MainForm2.FleetPosList = new ArrayList(); for (Int32 i = 0; i < rcbUnitFleet.Items.Count; i++) { if (((CustomListDataItem)rcbUnitFleet.Items[i]).Checked) { var tmp = new FleetIdandPos { Name = ((CustomListDataItem)rcbUnitFleet.Items[i]).Text, Position = new ArrayList() }; MainForm2.FleetPosList.Add(tmp); } } } if (((RepType == rep_type.HIST) && (ckComputeAddress.Checked)) || ((RepType == rep_type.SPEED) && (ckComputeAddress.Checked)) || ((RepType == rep_type.TELEMETRY_ALARM) && (ckComputeAddress.Checked)) || ((RepType == rep_type.TELEMETRY_EVENT) && (ckComputeAddress.Checked)) || ((RepType == rep_type.SMS_LOCATION) && (ckComputeAddress.Checked))) { ckComputeAddress.Visible = false; rlComputing.Visible = true; rProgressBar.Visible = true; ckReportDaily.Visible = false; rtbEmail.Visible = false; //btPrintReport.Enabled = false; } backDB.RunWorkerAsync(); ButtonStatusCancel = true; btPrintReport.Text = MainForm2.returnLNGString("canReport"); } else { DialogResult dr; if ((MainForm2.radioType == RADIOTYPE.HARRIS) || (MainForm2.radioType == RADIOTYPE.ATLAS)) ((RadLabel)RadMessageBox.Instance.Controls[1]).LabelElement.ForeColor = MainForm2.HarTextColor; dr = RadMessageBox.Show(this, MainForm2.returnLNGString("qReport"), MainForm2.returnLNGString("confirm"), MessageBoxButtons.YesNo, RadMessageIcon.Question); if (dr == DialogResult.Yes) { backDB.CancelAsync(); ButtonStatusCancel = false; btPrintReport.Text = MainForm2.returnLNGString("btShowReport"); } } } catch (Exception ex) { SM.Debug("Error on search reports : " + ex.ToString()); if ((MainForm2.radioType == RADIOTYPE.HARRIS) || (MainForm2.radioType == RADIOTYPE.ATLAS)) ((RadLabel)RadMessageBox.Instance.Controls[1]).LabelElement.ForeColor = MainForm2.HarTextColor; RadMessageBox.Show(MainForm2.returnLNGString("database"), MainForm2.returnLNGString("war"), MessageBoxButtons.OK, RadMessageIcon.Exclamation); } } private Boolean CheckLimit() { Boolean Valid = true; if (((RepType == rep_type.ENDOFDAY) || (RepType == rep_type.STOP) || (RepType == rep_type.IDLE)) && (convDT.GetSecondsFromDT(rdtFrom.Value) > convDT.GetSecondsFromDT(rdtUntil.Value))) { if ((MainForm2.radioType == RADIOTYPE.HARRIS) || (MainForm2.radioType == RADIOTYPE.ATLAS)) ((RadLabel)RadMessageBox.Instance.Controls[1]).LabelElement.ForeColor = MainForm2.HarTextColor; RadMessageBox.Show(msgLimit); Valid = false; } if (RepType == rep_type.IDLE) { try { Int32 n = Convert.ToInt32(rseIdle.Value.ToString()); MainForm2.IDLETime = n; } catch (Exception ex) { SM.Debug("Ex:" + ex.ToString()); if ((MainForm2.radioType == RADIOTYPE.HARRIS) || (MainForm2.radioType == RADIOTYPE.ATLAS)) ((RadLabel)RadMessageBox.Instance.Controls[1]).LabelElement.ForeColor = MainForm2.HarTextColor; RadMessageBox.Show(msgInteger); Valid = false; } } if (RepType == rep_type.FLEET) { Boolean somechecked = false; for (Int32 i = 0; i < rcbUnitFleet.Items.Count; i++) if (((CustomListDataItem)rcbUnitFleet.Items[i]).Checked) { somechecked = true; break; } if (!somechecked) { if ((MainForm2.radioType == RADIOTYPE.HARRIS) || (MainForm2.radioType == RADIOTYPE.ATLAS)) ((RadLabel)RadMessageBox.Instance.Controls[1]).LabelElement.ForeColor = MainForm2.HarTextColor; RadMessageBox.Show(msgMustSel); Valid = false; } } return Valid; } private void CheckValue() { glwhere = ""; if (this.ckUnitGroupFilter.Checked) { /* if (glwhere != "") glwhere = glwhere + " and "; else glwhere = " where "; if (RepType == rep_type.LOG) glwhere = glwhere + " imei = '" + (((RadListDataItem)rcbUnitGroup.Items[rcbUnitGroup.SelectedIndex]).Value as VehandID).Imei + "' "; else if (RepType == rep_type.SMS_LOCATION) glwhere = glwhere + " sc_id_sour = " + (((RadListDataItem)rcbUnitGroup.Items[rcbUnitGroup.SelectedIndex]).Value as VehandID).sc_id; else glwhere = glwhere + " sc_id = " + (((RadListDataItem)rcbUnitGroup.Items[rcbUnitGroup.SelectedIndex]).Value as VehandID).sc_id; */ if (glwhere != "") glwhere = glwhere + " and "; else glwhere = " where "; if (RepType == rep_type.LOG) glwhere = glwhere + " imei IN (" + UnitGroupItems[rcbUnitGroup.SelectedIndex].ValueImei + ") "; else if (RepType == rep_type.SMS_LOCATION) glwhere = glwhere + " sc_id_sour IN (" + UnitGroupItems[rcbUnitGroup.SelectedIndex].ValueScID + ") "; else glwhere = glwhere + " sc_id IN (" + UnitGroupItems[rcbUnitGroup.SelectedIndex].ValueScID + ") "; } if (this.ckStatus.Checked) { if (glwhere != "") glwhere = glwhere + " and "; else glwhere = " where "; if (rcbStatus.SelectedIndex < 2) glwhere = glwhere + " status = " + rcbStatus.SelectedIndex; else glwhere = glwhere + " status = " + (rcbStatus.SelectedIndex + 7); } if (this.ckGeofenceType.Checked) { if (glwhere != "") glwhere = glwhere + " and "; else glwhere = " where "; glwhere = glwhere + " action = " + (rcbGeoLandType.SelectedIndex + 1); } if (this.ckGeofenceName.Checked) { if (glwhere != "") glwhere = glwhere + " and "; else glwhere = " where "; if (rcbGeoLandName.Items.Count > 0) glwhere = glwhere + " zone_id = " + (((RadListDataItem)rcbGeoLandName.Items[rcbGeoLandName.SelectedIndex]).Value as VehandID).sc_id; else glwhere = glwhere + " zone_id != -1"; } if (ckDataFilter.Checked) { if (glwhere != "") glwhere = glwhere + " and "; else glwhere = " where "; glwhere = glwhere + " timeGMT >= " + convDT.ConvertLocalToGMT(convDT.GetSecondsFromDT(rdtFrom.Value)) + " and timeGMT <= " + convDT.ConvertLocalToGMT(convDT.GetSecondsFromDT(rdtUntil.Value)); } if (ckCoordinates.Checked) { //// TODO see what needs to be changed here in order for the LAT LNG to be displayed } if (RepType == rep_type.SMS_LOCATION) { if (glwhere != "") glwhere = glwhere + " and "; else glwhere = " where "; glwhere = glwhere + " sc_id_sour>0"; } } private String unit_ids = ""; private Int32 startdate = 0; private Int32 stopdate = 0; private Int32 geo_id = 0; private Int32 type = 0; private Int32 idle_time = 0; private Int32 reportid = 0; private Boolean LatLng = false; private void CheckValueReporteSaving() { unit_ids = ""; startdate = 0; stopdate = 0; geo_id = 0; type = 0; idle_time = 0; reportid = 0; LatLng = false; if (this.ckUnitGroupFilter.Checked) { if (RepType == rep_type.LOG) unit_ids = UnitGroupItems[rcbUnitGroup.SelectedIndex].ValueImei; else unit_ids = UnitGroupItems[rcbUnitGroup.SelectedIndex].ValueScID; } if ((ckSelectALL.Checked) && (RepType == rep_type.HIST)) type = 1; else type = 0; if ((ckSelectALL.Checked) && ((RepType == rep_type.HIST) || (RepType == rep_type.ALLALARM) || (RepType == rep_type.EMERG) || (RepType == rep_type.SPEED) || (RepType == rep_type.TELEMETRY_ALARM) || (RepType == rep_type.TELEMETRY_EVENT) || (RepType == rep_type.ENDOFDAY) || (RepType == rep_type.IDLE) || (RepType == rep_type.STOP))) LatLng = true; if (this.ckStatus.Checked) { if (RepType == rep_type.LOG) type = rcbStatus.SelectedIndex + 1; else { if (rcbStatus.Items.Count > 0) geo_id = Int16.Parse(UnitGroupItems[rcbUnitGroup.SelectedIndex].ValueScID); else geo_id = 0; } } if (this.ckGeofenceType.Checked) { if ((RepType == rep_type.LAND) || (RepType == rep_type.GEOFENC)) type = rcbGeoLandType.SelectedIndex + 1; } if (ckDataFilter.Checked) { startdate = convDT.ConvertLocalToGMT(convDT.GetSecondsFromDT(rdtFrom.Value)); stopdate = convDT.ConvertLocalToGMT(convDT.GetSecondsFromDT(rdtUntil.Value)); } if ((RepType == rep_type.ENDOFDAY) || (RepType == rep_type.IDLE) || (RepType == rep_type.STOP) || (RepType == rep_type.FLEET)) { startdate = convDT.ConvertLocalToGMT(convDT.GetSecondsFromDT(rdtFrom.Value)); stopdate = convDT.ConvertLocalToGMT(convDT.GetSecondsFromDT(rdtUntil.Value)); } if ((RepType == rep_type.ENDOFDAY) || (RepType == rep_type.IDLE) || (RepType == rep_type.STOP)) { unit_ids = UnitGroupItems[rcbUnitGroup.SelectedIndex].ValueScID; } if (RepType == rep_type.FLEET) { unit_ids = ""; if (ckSelectALL.Checked) idle_time = 1; else idle_time = 0; foreach (FleetIdandPos obj in MainForm2.FleetPosList) { unit_ids += ((Vehicle)MainForm2.vehicleHT[obj.Name]).sc_id.ToString() + ','; } } if (RepType == rep_type.IDLE) { try { idle_time = Convert.ToInt32(rseIdle.Value.ToString()); } catch (Exception ex) { SM.Debug("Idle time conversion fail so i set 5. Error:" + ex.ToString()); idle_time = 5; } } reportid = (Int32)RepType; } private void ckDataFilter_ToggleStateChanged(object sender, StateChangedEventArgs args) { if (ckDataFilter.Checked) { rdtFrom.Enabled = true; rdtUntil.Enabled = true; } else { rdtFrom.Enabled = false; rdtUntil.Enabled = false; } } private void chStatus_ToggleStateChanged(object sender, StateChangedEventArgs args) { if (this.ckStatus.Checked) this.rcbStatus.Enabled = true; else this.rcbStatus.Enabled = false; } private void chVehName_ToggleStateChanged(object sender, StateChangedEventArgs args) { if (this.ckUnitGroupFilter.Checked) this.rcbUnitGroup.Enabled = true; else this.rcbUnitGroup.Enabled = false; } private void backDB_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; e.Result = ComputeDB(worker, e); } long ComputeDB(BackgroundWorker worker, DoWorkEventArgs e) { try { MainForm2.LATLNGforDinamicReports = false; ValidReport = true; if ((RepType != rep_type.ENDOFDAY) && (RepType != rep_type.STOP) && (RepType != rep_type.IDLE) && (RepType != rep_type.FLEET)) { CheckValue(); switch (RepType) { case rep_type.LOG: smdbObj.get_log_view_all(glwhere); break; case rep_type.EMERG: smdbObj.get_EMERG(glwhere); rProgressBar.Invoke(new UpdateProgressBarCallBack(this.UpdateProgressBar), MainForm2.ONOFFList.Count + (Int32)Math.Round(MainForm2.ONOFFList.Count * 0.25)); foreach (ONOFFData obj in MainForm2.ONOFFList) { if (!ckCoordinates.Checked) { Boolean updateDB = false; if ((obj.Status == "") || (obj.Status == " ")) { try { Int32 step = ((Vehicle)MainForm2.vehicleHT[(String)MainForm2.VehIDHash[obj.sc_id]]).gps_interval; if (step * 2 < 120) step = 120; else step = step * 2; //gethistory SMposition neartheTime = null; ArrayList tmp = smdbObj.get_HistoryTelem(obj.sc_id, obj.timeGMT - step, obj.timeGMT + step); if (tmp.Count > 0) { foreach (SMposition obj2 in tmp) { if (neartheTime == null) neartheTime = obj2; else if (Math.Abs(neartheTime.m_time - obj.timeGMT) > Math.Abs(obj2.m_time - obj.timeGMT)) neartheTime = obj2; } if ((neartheTime.m_address == "") || (neartheTime.m_address == " ")) { if (ckComputeAddress.Checked) { MainForm2.AddrCnt++; MainForm2.AddrGISQueue.Enqueue(new AddrAndID(MainForm2.AddrCnt, neartheTime.m_lat, neartheTime.m_lng)); MainForm2.IdReportHS.Add(MainForm2.AddrCnt.ToString(), "no address"); String Idtofind = MainForm2.AddrCnt.ToString(); Boolean retrynew = true; Int32 cntmax = 0; while (retrynew) { cntmax++; retrynew = false; if ((String)MainForm2.IdReportHS[Idtofind] == "no address") { System.Threading.Thread.Sleep(200); SM.Debug("wait 200msec for address"); retrynew = true; } else obj.Status = (String)MainForm2.IdReportHS[Idtofind]; if (cntmax > 10) retrynew = false; } } else obj.Status = ""; if ((obj.Status == "") || (obj.Status == " ")) obj.Status = "LAT:" + Math.Round(neartheTime.m_lat, 5).ToString() + " , LNG:" + Math.Round(neartheTime.m_lng, 5).ToString(); else updateDB = true; } else { obj.Status = neartheTime.m_address; updateDB = true; } } else obj.Status = "N/A"; //update datebase telemetry if (updateDB) smdbObj.Update_address_emergency(obj.sc_id, obj.timeGMT, obj.Status.Replace(',', ' '), neartheTime.m_lat, neartheTime.m_lng); } catch (Exception ex) { SM.Debug("Error on update telemetry address:" + ex.ToString()); } } } else { if (((Int32)Math.Round(obj.lat) == 0) && ((Int32)Math.Round(obj.lng) == 0)) { Int32 step = ((Vehicle)MainForm2.vehicleHT[(String)MainForm2.VehIDHash[obj.sc_id]]).gps_interval; if (step * 2 < 120) step = 120; else step = step * 2; //gethistory SMposition neartheTime = null; ArrayList tmp = smdbObj.get_HistoryTelem(obj.sc_id, obj.timeGMT - step, obj.timeGMT + step); if (tmp.Count > 0) { foreach (SMposition obj2 in tmp) { if (neartheTime == null) neartheTime = obj2; else if (Math.Abs(neartheTime.m_time - obj.timeGMT) > Math.Abs(obj2.m_time - obj.timeGMT)) neartheTime = obj2; } obj.Status = "LAT:" + Math.Round(neartheTime.m_lat, 5).ToString() + " , LNG:" + Math.Round(neartheTime.m_lng, 5).ToString(); smdbObj.Update_address_emergency(obj.sc_id, obj.timeGMT, obj.Status.Replace(',', ' '), neartheTime.m_lat, neartheTime.m_lng); } } else obj.Status = "LAT:" + Math.Round(obj.lat, 5).ToString() + " , LNG:" + Math.Round(obj.lng, 5).ToString(); } rProgressBar.Invoke(new UpdateProgressBarCallBack(this.UpdateProgressBar), -1); } break; case rep_type.HIST: IdReportHS.Clear(); smdbObj.get_History(glwhere, ckComputeAddress.Checked, ckCoordinates.Checked); if (ckComputeAddress.Checked) { rProgressBar.Invoke(new UpdateProgressBarCallBack(this.UpdateProgressBar), IdReportHS.Keys.Count + (Int32)Math.Round(IdReportHS.Keys.Count * 0.25)); GisAddressWorker.RunWorkerAsync(); retrynew = true; inwhile = false; int cntmax = 0; if (IdReportHS.Keys.Count > 0) { Int32 contNR = IdReportHS.Keys.Count; if (cntmax >= contNR) { retrynew = false; inwhile = false; } while (retrynew) { inwhile = true; Thread.Sleep(1000); SM.Debug("Wait 1 second to update"); cntmax++; if (cntmax > contNR) retrynew = false; } if (GisAddressWorker.IsBusy) GisAddressWorker.CancelAsync(); } try { foreach (StopData obj3 in MainForm2.HistDataReport) { if (IdReportHS[obj3.Location] != null) { obj3.Location = (String)IdReportHS[obj3.Location]; if (obj3.Location != "no address") smdbObj.Update_address_hist(obj3.Location, obj3.unique_id, obj3.Location); } } } catch (Exception ex) { SM.Debug("Exception on add address data in DB:" + ex.ToString()); } } //MainForm2.HistDataReport = new List(); //MainForm2.HistDataReport.Add(tmp); break; case rep_type.ALLALARM: smdbObj.get_ALLAlarm(glwhere); break; case rep_type.GEOFENC: case rep_type.LAND: smdbObj.get_LANDANDZONE(glwhere, RepType); break; case rep_type.TELEMETRY_EVENT: case rep_type.TELEMETRY_ALARM: if (glwhere != "") glwhere = glwhere + " and "; else glwhere = " where "; if (RepType == rep_type.TELEMETRY_ALARM) glwhere = glwhere + " alarm =1 "; else glwhere = glwhere + " alarm =0 "; smdbObj.get_TelemHist_alarm_event(glwhere); rProgressBar.Invoke(new UpdateProgressBarCallBack(this.UpdateProgressBar), MainForm2.SpeedingList.Count + (Int32)Math.Round(MainForm2.SpeedingList.Count * 0.25)); foreach (SpeedData obj in MainForm2.SpeedingList) { if (!ckCoordinates.Checked) { Boolean updateDB = false; if ((obj.Address == "") || (obj.Address == " ")) { try { Int32 step = ((Vehicle)MainForm2.vehicleHT[(String)MainForm2.VehIDHash[obj.sc_id]]).gps_interval; if (step * 2 < 120) step = 120; else step = step * 2; //gethistory SMposition neartheTime = null; ArrayList tmp = smdbObj.get_HistoryTelem(obj.sc_id, obj.timeGMT - step, obj.timeGMT + step); if (tmp.Count > 0) { foreach (SMposition obj2 in tmp) { if (neartheTime == null) neartheTime = obj2; else if (Math.Abs(neartheTime.m_time - obj.timeGMT) > Math.Abs(obj2.m_time - obj.timeGMT)) neartheTime = obj2; } if ((neartheTime.m_address == "") || (neartheTime.m_address == " ")) { if (ckComputeAddress.Checked) { MainForm2.AddrCnt++; MainForm2.AddrGISQueue.Enqueue(new AddrAndID(MainForm2.AddrCnt, neartheTime.m_lat, neartheTime.m_lng)); MainForm2.IdReportHS.Add(MainForm2.AddrCnt.ToString(), "no address"); String Idtofind = MainForm2.AddrCnt.ToString(); Boolean retrynew = true; Int32 cntmax = 0; while (retrynew) { cntmax++; retrynew = false; if ((String)MainForm2.IdReportHS[Idtofind] == "no address") { System.Threading.Thread.Sleep(200); SM.Debug("wait 200msec for address"); retrynew = true; } else obj.Address = (String)MainForm2.IdReportHS[Idtofind]; if (cntmax > 10) retrynew = false; } } else obj.Address = ""; if ((obj.Address == "") || (obj.Address == " ")) obj.Address = "LAT:" + Math.Round(neartheTime.m_lat, 5).ToString() + " , LNG:" + Math.Round(neartheTime.m_lng, 5).ToString(); else updateDB = true; } else { obj.Address = neartheTime.m_address; updateDB = true; } } else obj.Address = "N/A"; //update datebase telemetry if (updateDB) smdbObj.Update_address_telem(obj.sc_id, obj.timeGMT, obj.Address.Replace(',', ' '), neartheTime.m_lat, neartheTime.m_lng); } catch (Exception ex) { SM.Debug("Error on update telemetry address:" + ex.ToString()); } } } else { if (((Int32)Math.Round(obj.lat) == 0) && ((Int32)Math.Round(obj.lng) == 0)) { Int32 step = ((Vehicle)MainForm2.vehicleHT[(String)MainForm2.VehIDHash[obj.sc_id]]).gps_interval; if (step * 2 < 120) step = 120; else step = step * 2; //gethistory SMposition neartheTime = null; ArrayList tmp = smdbObj.get_HistoryTelem(obj.sc_id, obj.timeGMT - step, obj.timeGMT + step); if (tmp.Count > 0) { foreach (SMposition obj2 in tmp) { if (neartheTime == null) neartheTime = obj2; else if (Math.Abs(neartheTime.m_time - obj.timeGMT) > Math.Abs(obj2.m_time - obj.timeGMT)) neartheTime = obj2; } obj.Address = "LAT:" + Math.Round(neartheTime.m_lat, 5).ToString() + " , LNG:" + Math.Round(neartheTime.m_lng, 5).ToString(); smdbObj.Update_address_telem(obj.sc_id, obj.timeGMT, obj.Address.Replace(',', ' '), neartheTime.m_lat, neartheTime.m_lng); } } else obj.Address = "LAT:" + Math.Round(obj.lat, 5).ToString() + " , LNG:" + Math.Round(obj.lng, 5).ToString(); } rProgressBar.Invoke(new UpdateProgressBarCallBack(this.UpdateProgressBar), -1); } break; case rep_type.SPEED: smdbObj.get_Speeding(glwhere); rProgressBar.Invoke(new UpdateProgressBarCallBack(this.UpdateProgressBar), MainForm2.SpeedingList.Count + (Int32)Math.Round(MainForm2.SpeedingList.Count * 0.25)); Console.WriteLine("############################################################################"); foreach (SpeedData obj in MainForm2.SpeedingList) { if (!ckCoordinates.Checked) { Boolean updateDB = false; if (obj.Address == "no address") { try { if (ckComputeAddress.Checked) { MainForm2.AddrCnt++; MainForm2.AddrGISQueue.Enqueue(new AddrAndID(MainForm2.AddrCnt, obj.lat, obj.lng)); MainForm2.IdReportHS.Add(MainForm2.AddrCnt.ToString(), "no address"); String Idtofind = MainForm2.AddrCnt.ToString(); Boolean retrynew = true; Int32 cntmax = 0; while (retrynew) { cntmax++; retrynew = false; if ((String)MainForm2.IdReportHS[Idtofind] == "no address") { System.Threading.Thread.Sleep(200); SM.Debug("Wait 200msec"); retrynew = true; } else obj.Address = (String)MainForm2.IdReportHS[Idtofind]; if (cntmax > 10) retrynew = false; } } else obj.Address = ""; if ((obj.Address == "") || (obj.Address == " ")) obj.Address = "LAT:" + Math.Round(obj.lat, 5).ToString() + " , LNG:" + Math.Round(obj.lng, 5).ToString(); else updateDB = true; if (updateDB) smdbObj.Update_address_speed(obj.sc_id, obj.timeGMT, obj.Address.Replace(',', ' '), obj.lat, obj.lng); } catch (Exception ex) { SM.Debug("Error on update speed address:" + ex.ToString()); } } } else { if (((Int32)Math.Round(obj.lat) == 0) && ((Int32)Math.Round(obj.lng) == 0)) { Int32 step = ((Vehicle)MainForm2.vehicleHT[(String)MainForm2.VehIDHash[obj.sc_id]]).gps_interval; if (step * 2 < 120) step = 120; else step = step * 2; //gethistory SMposition neartheTime = null; ArrayList tmp = smdbObj.get_HistoryTelem(obj.sc_id, obj.timeGMT - step, obj.timeGMT + step); if (tmp.Count > 0) { foreach (SMposition obj2 in tmp) { if (neartheTime == null) neartheTime = obj2; else if (Math.Abs(neartheTime.m_time - obj.timeGMT) > Math.Abs(obj2.m_time - obj.timeGMT)) neartheTime = obj2; } obj.Address = "LAT:" + Math.Round(neartheTime.m_lat, 5).ToString() + " , LNG:" + Math.Round(neartheTime.m_lng, 5).ToString(); smdbObj.Update_address_speed(obj.sc_id, obj.timeGMT, obj.Address.Replace(',', ' '), neartheTime.m_lat, neartheTime.m_lng); } } else obj.Address = "LAT:" + Math.Round(obj.lat, 5).ToString() + " , LNG:" + Math.Round(obj.lng, 5).ToString(); } rProgressBar.Invoke(new UpdateProgressBarCallBack(this.UpdateProgressBar), -1); } break; case rep_type.SMS_LOCATION: smdbObj.get_SMS_Location(glwhere); rProgressBar.Invoke(new UpdateProgressBarCallBack(this.UpdateProgressBar), MainForm2.SMSLocList.Count + (Int32)Math.Round(MainForm2.SMSLocList.Count * 0.25)); foreach (SMS_Location obj in MainForm2.SMSLocList) { if (!ckCoordinates.Checked) { Boolean updateDB = false; if (obj.Address == "no address") { try { Int32 step = ((Vehicle)MainForm2.vehicleHT[(String)MainForm2.VehIDHash[obj.sc_id]]).gps_interval; if (step * 2 < 120) step = 120; else step = step * 2; //gethistory SMposition neartheTime = null; ArrayList tmp = smdbObj.get_HistorySpeed(obj.sc_id, obj.timeGMT - step, obj.timeGMT + step, obj.timeGMT); if (tmp.Count > 0) { foreach (SMposition obj2 in tmp) { if (neartheTime == null) neartheTime = obj2; else if (Math.Abs(neartheTime.m_time - obj.timeGMT) > Math.Abs(obj2.m_time - obj.timeGMT)) neartheTime = obj2; } if ((neartheTime.m_address == "") || (neartheTime.m_address == " ")) { if (ckComputeAddress.Checked) { MainForm2.AddrCnt++; MainForm2.AddrGISQueue.Enqueue(new AddrAndID(MainForm2.AddrCnt, neartheTime.m_lat, neartheTime.m_lng)); MainForm2.IdReportHS.Add(MainForm2.AddrCnt.ToString(), "no address"); String Idtofind = MainForm2.AddrCnt.ToString(); Boolean retrynew = true; Int32 cntmax = 0; while (retrynew) { cntmax++; retrynew = false; if ((String)MainForm2.IdReportHS[Idtofind] == "no address") { System.Threading.Thread.Sleep(200); SM.Debug("Wait 200msec"); retrynew = true; } else obj.Address = (String)MainForm2.IdReportHS[Idtofind]; if (cntmax > 10) retrynew = false; } } else obj.Address = ""; if ((obj.Address == "") || (obj.Address == " ")) obj.Address = "LAT:" + Math.Round(neartheTime.m_lat, 5).ToString() + " , LNG:" + Math.Round(neartheTime.m_lng, 5).ToString(); else updateDB = true; } else { obj.Address = neartheTime.m_address; updateDB = true; } } else obj.Address = "N/A"; //update datebase Speed if (updateDB) smdbObj.Update_address_SMS_Location(obj.sc_id, obj.timeGMT, obj.Address.Replace(',', ' '), neartheTime.m_lat, neartheTime.m_lng); } catch (Exception ex) { SM.Debug("Error on update telemetry address:" + ex.ToString()); } } } else { if (((Int32)Math.Round(obj.lat) == 0) && ((Int32)Math.Round(obj.lng) == 0)) { Int32 step = ((Vehicle)MainForm2.vehicleHT[(String)MainForm2.VehIDHash[obj.sc_id]]).gps_interval; if (step * 2 < 120) step = 120; else step = step * 2; //gethistory SMposition neartheTime = null; ArrayList tmp = smdbObj.get_HistoryTelem(obj.sc_id, obj.timeGMT - step, obj.timeGMT + step); if (tmp.Count > 0) { foreach (SMposition obj2 in tmp) { if (neartheTime == null) neartheTime = obj2; else if (Math.Abs(neartheTime.m_time - obj.timeGMT) > Math.Abs(obj2.m_time - obj.timeGMT)) neartheTime = obj2; } obj.Address = "LAT:" + Math.Round(neartheTime.m_lat, 5).ToString() + " , LNG:" + Math.Round(neartheTime.m_lng, 5).ToString(); smdbObj.Update_address_SMS_Location(obj.sc_id, obj.timeGMT, "no address", neartheTime.m_lat, neartheTime.m_lng); } } else obj.Address = "LAT:" + Math.Round(obj.lat, 5).ToString() + " , LNG:" + Math.Round(obj.lng, 5).ToString(); } rProgressBar.Invoke(new UpdateProgressBarCallBack(this.UpdateProgressBar), -1); } break; } } else { if (CheckLimit()) { if ((RepType == rep_type.ENDOFDAY) || (RepType == rep_type.STOP) || (RepType == rep_type.IDLE)) { //MainForm2.PositionList = smdbObj.get_position_for_report((Int32)(new ConvertDT().GetSecondsLocalFromDT(dtFrom.Value)) - dtFrom.Value.Hour * 3600 - dtFrom.Value.Minute * 60 - dtFrom.Value.Second, (Int32)(new ConvertDT().GetSecondsLocalFromDT(dtTo.Value)) - dtTo.Value.Hour * 3600 - dtTo.Value.Minute * 60 - dtTo.Value.Second + 86400, (((RadComboBoxItem)cbVehName.Items[cbVehName.SelectedIndex]).Value as VehandID).sc_id); MainForm2.PositionList = smdbObj.get_position_for_report((Int32)(new ConvertDT().GetSecondsLocalFromDT(rdtFrom.Value)), (Int32)(new ConvertDT().GetSecondsLocalFromDT(rdtUntil.Value)), Int32.Parse(UnitGroupItems[rcbUnitGroup.SelectedIndex].ValueScID)); MainForm2.NameReport = UnitGroupItems[rcbUnitGroup.SelectedIndex].Text; MainForm2.LATLNGforDinamicReports = ckSelectALL.Checked; } if (RepType == rep_type.FLEET) { foreach (FleetIdandPos obj in MainForm2.FleetPosList) { //obj.Position = smdbObj.get_position_for_report((Int32)(new ConvertDT().GetSecondsLocalFromDT(dtFrom.Value)) - dtFrom.Value.Hour * 3600 - dtFrom.Value.Minute * 60 - dtFrom.Value.Second, (Int32)(new ConvertDT().GetSecondsLocalFromDT(dtTo.Value)) - dtTo.Value.Hour * 3600 - dtTo.Value.Minute * 60 - dtTo.Value.Second + 86400, ((Vehicle)MainForm2.vehicleHT[obj.Name]).sc_id); obj.Position = smdbObj.get_position_for_report((Int32)(new ConvertDT().GetSecondsLocalFromDT(rdtFrom.Value)), (Int32)(new ConvertDT().GetSecondsLocalFromDT(rdtUntil.Value)), ((Vehicle)MainForm2.vehicleHT[obj.Name]).sc_id); SM.Debug(obj.Name + " " + obj.Position.Count); } } } else { SM.Debug("Not valid Report"); ValidReport = false; } } } catch (Exception ex) { SM.Debug("Error compute date from DB:" + ex.ToString()); } return 1; } private void backDB_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { switch (RepType) { case rep_type.LOG: ONOFFReport tmp = new ONOFFReport(); tmp.timeCaptionTextBox.Value = MainForm2.returnLNGString("SMSMessTime"); switch (MainForm2.radioType) { case RADIOTYPE.CONECTPLUS: case RADIOTYPE.REPEATER_TRBO: case RADIOTYPE.MOTO: tmp.titleTextBox.Value = MainForm2.returnLNGString("SMSlogradio"); break; case RADIOTYPE.HYT: tmp.titleTextBox.Value = MainForm2.returnLNGString("SMSlogradioHYT"); break; case RADIOTYPE.HARRIS: tmp.titleTextBox.Value = MainForm2.returnLNGString("SMSlogradioHARRIS"); break; case RADIOTYPE.ATLAS: tmp.titleTextBox.Value = MainForm2.returnLNGString("SMSlogradioAstro"); break; case RADIOTYPE.TETRA: tmp.titleTextBox.Value = MainForm2.returnLNGString("SMSlogradioTetra"); break; } tmp.statusCaptionTextBox.Value = MainForm2.returnLNGString("SMSStatus"); tmp.nameCaptionTextBox.Value = MainForm2.returnLNGString("htableVehiclesListColumns1"); reportViewer1.ReportSource = tmp; break; case rep_type.SPEED: rlComputing.Visible = false; rProgressBar.Visible = false; ckReportDaily.Visible = true; rtbEmail.Visible = true; ckComputeAddress.Visible = true; SpeedingReport tmpSpeed = new SpeedingReport(); tmpSpeed.nameCaptionTextBox.Value = MainForm2.returnLNGString("htableVehiclesListColumns1"); if (MainForm2.isInMile) tmpSpeed.speedCaptionTextBox.Value = MainForm2.returnLNGString("tablevehiclesListColumns3") + " (" + MainForm2.milesh + ")"; else tmpSpeed.speedCaptionTextBox.Value = MainForm2.returnLNGString("tablevehiclesListColumns3") + " (" + MainForm2.kmh + ")"; tmpSpeed.timeCaptionTextBox.Value = MainForm2.returnLNGString("alarmsListColumns1"); tmpSpeed.titleTextBox.Value = MainForm2.returnLNGString("speedalarm"); tmpSpeed.dataCaptionTextBox.Value = MainForm2.returnLNGString("rapday"); tmpSpeed.addressCaptionTextBox.Value = MainForm2.returnLNGString("addrOrLatLng"); tmpSpeed.txObeserv.Value = MainForm2.returnLNGString("obsSpeed"); reportViewer1.ReportSource = tmpSpeed; if (MainForm2.SpeedingList.Count > 40000) { if ((MainForm2.radioType == RADIOTYPE.HARRIS) || (MainForm2.radioType == RADIOTYPE.ATLAS)) ((RadLabel)RadMessageBox.Instance.Controls[1]).LabelElement.ForeColor = MainForm2.HarTextColor; DialogResult dr = RadMessageBox.Show(this, MainForm2.returnLNGString("limit65000"), MainForm2.returnLNGString("info"), MessageBoxButtons.OK, RadMessageIcon.Info); } break; case rep_type.TELEMETRY_EVENT: case rep_type.TELEMETRY_ALARM: rlComputing.Visible = false; rProgressBar.Visible = false; ckReportDaily.Visible = true; rtbEmail.Visible = true; ckComputeAddress.Visible = true; SpeedingReport tmpTelem = new SpeedingReport(); tmpTelem.nameCaptionTextBox.Value = MainForm2.returnLNGString("htableVehiclesListColumns1"); tmpTelem.timeCaptionTextBox.Value = MainForm2.returnLNGString("alarmsListColumns1"); if (RepType == rep_type.TELEMETRY_ALARM) { tmpTelem.titleTextBox.Value = MainForm2.returnLNGString("telemreport"); tmpTelem.speedCaptionTextBox.Value = MainForm2.returnLNGString("alarmtype"); } else { tmpTelem.titleTextBox.Value = MainForm2.returnLNGString("telemevent"); tmpTelem.speedCaptionTextBox.Value = MainForm2.returnLNGString("eventype"); } tmpTelem.dataCaptionTextBox.Value = MainForm2.returnLNGString("rapday"); tmpTelem.addressCaptionTextBox.Value = MainForm2.returnLNGString("addrOrLatLng"); tmpTelem.txObeserv.Value = ""; reportViewer1.ReportSource = tmpTelem; break; case rep_type.GEOFENC: ZoneReport tmpZone = new ZoneReport(); tmpZone.landNameCaptionTextBox.Value = MainForm2.returnLNGString("zonename"); tmpZone.landTypeCaptionTextBox.Value = MainForm2.returnLNGString("alarmtype"); tmpZone.nameCaptionTextBox.Value = MainForm2.returnLNGString("htableVehiclesListColumns1"); tmpZone.timeCaptionTextBox.Value = MainForm2.returnLNGString("alarmsListColumns1"); tmpZone.titleTextBox.Value = MainForm2.returnLNGString("InZoneReport"); reportViewer1.ReportSource = tmpZone; break; case rep_type.LAND: ZoneReport tmpLand = new ZoneReport(); tmpLand.landNameCaptionTextBox.Value = MainForm2.returnLNGString("landmarkname"); tmpLand.landTypeCaptionTextBox.Value = MainForm2.returnLNGString("alarmtype"); tmpLand.nameCaptionTextBox.Value = MainForm2.returnLNGString("htableVehiclesListColumns1"); tmpLand.timeCaptionTextBox.Value = MainForm2.returnLNGString("alarmsListColumns1"); tmpLand.titleTextBox.Value = MainForm2.returnLNGString("landmarkrep"); reportViewer1.ReportSource = tmpLand; break; case rep_type.EMERG: ONOFFReport tmpEmerg = new ONOFFReport(); tmpEmerg.timeCaptionTextBox.Value = MainForm2.returnLNGString("alarmsListColumns1"); tmpEmerg.titleTextBox.Value = MainForm2.returnLNGString("emergAlarmRep"); tmpEmerg.statusCaptionTextBox.Value = MainForm2.returnLNGString("addrOrLatLng"); tmpEmerg.nameCaptionTextBox.Value = MainForm2.returnLNGString("htableVehiclesListColumns1"); reportViewer1.ReportSource = tmpEmerg; break; case rep_type.HIST: MainForm2.IsHistroyNotStop = true; if (ckComputeAddress.Checked) { //btPrintReport.Enabled = true; rlComputing.Visible = false; rProgressBar.Visible = false; ckReportDaily.Visible = true; rtbEmail.Visible = true; ckComputeAddress.Visible = true; } // check if unit report or group report /* *rlComputing.Visible = false; rProgressBar.Visible = false; ckReportDaily.Visible = true; rtbEmail.Visible = true; ckComputeAddress.Visible = true; SpeedingReport tmpSpeed = new SpeedingReport(); tmpSpeed.nameCaptionTextBox.Value = MainForm2.returnLNGString("htableVehiclesListColumns1"); if (MainForm2.isInMile) tmpSpeed.speedCaptionTextBox.Value = MainForm2.returnLNGString("tablevehiclesListColumns3") + " (" + MainForm2.milesh + ")"; else tmpSpeed.speedCaptionTextBox.Value = MainForm2.returnLNGString("tablevehiclesListColumns3") + " (" + MainForm2.kmh + ")"; tmpSpeed.timeCaptionTextBox.Value = MainForm2.returnLNGString("alarmsListColumns1"); tmpSpeed.titleTextBox.Value = MainForm2.returnLNGString("speedalarm"); tmpSpeed.dataCaptionTextBox.Value = MainForm2.returnLNGString("rapday"); tmpSpeed.addressCaptionTextBox.Value = MainForm2.returnLNGString("addrOrLatLng"); tmpSpeed.txObeserv.Value = MainForm2.returnLNGString("obsSpeed"); reportViewer1.ReportSource = tmpSpeed; */ if (!UnitGroupItems[rcbUnitGroup.SelectedIndex].IsGroup) { /// SINGLE UNIT REPORT StopReport tmpRep2 = new StopReport(); //tmpRep2.titleTextBox.Value = MainForm2.returnLNGString("namesandvehicleHistory") + " " + cbVehName.Text; // set title if (ckUnitGroupFilter.Checked) tmpRep2.titleTextBox.Value = MainForm2.returnLNGString("HistoryRep") + " " + (UnitGroupItems[rcbUnitGroup.SelectedIndex].IsGroup ? MainForm2.returnLNGString("forGroup") : MainForm2.returnLNGString("forvehicle")) + " " + rcbUnitGroup.Text; else tmpRep2.titleTextBox.Value = MainForm2.returnLNGString("HistoryRep"); // set address tmpRep2.locationCaptionTextBox.Value = MainForm2.returnLNGString("addrOrLatLng"); // set speed if (MainForm2.isInMile) tmpRep2.durationCaptionTextBox.Value = MainForm2.returnLNGString("tablevehiclesListColumns3") + " (" + MainForm2.milesh + ")"; else tmpRep2.durationCaptionTextBox.Value = MainForm2.returnLNGString("tablevehiclesListColumns3") + " (" + MainForm2.kmh + ")"; tmpRep2.timeCaptionTextBox.Value = MainForm2.returnLNGString("label3"); tmpRep2.dataCaptionTextBox.Value = MainForm2.returnLNGString("dateSTOP"); reportViewer1.ReportSource = tmpRep2; } else { MainForm2.SpeedingList = new List(); Int32 countdata = 0; foreach (StopData obj in MainForm2.HistDataReport) { SpeedData tmpSpeedData = new SpeedData(); tmpSpeedData.Name = obj.unit_name; tmpSpeedData.Speed = obj.Duration; tmpSpeedData.Time = obj.Time; tmpSpeedData.Data = obj.Data; tmpSpeedData.Address = obj.Location; MainForm2.SpeedingList.Add(tmpSpeedData); countdata++; if (countdata > 50000) break; } Console.WriteLine("End of transfer DATA"); SpeedingReport tmpGroupHistoryReport = new SpeedingReport(); // set title tmpGroupHistoryReport.titleTextBox.Value = MainForm2.returnLNGString("HistoryRep") + " " + MainForm2.returnLNGString("forGroup") + " " + rcbUnitGroup.Text; // set address tmpGroupHistoryReport.addressCaptionTextBox.Value = MainForm2.returnLNGString("addrOrLatLng"); // set speed if (MainForm2.isInMile) tmpGroupHistoryReport.speedCaptionTextBox.Value = MainForm2.returnLNGString("tablevehiclesListColumns3") + " (" + MainForm2.milesh + ")"; else tmpGroupHistoryReport.speedCaptionTextBox.Value = MainForm2.returnLNGString("tablevehiclesListColumns3") + " (" + MainForm2.kmh + ")"; // set unit name tmpGroupHistoryReport.nameCaptionTextBox.Value = MainForm2.returnLNGString("htableVehiclesListColumns1"); // set time tmpGroupHistoryReport.timeCaptionTextBox.Value = MainForm2.returnLNGString("label3"); // set date tmpGroupHistoryReport.dataCaptionTextBox.Value = MainForm2.returnLNGString("dateSTOP"); tmpGroupHistoryReport.txObeserv.Value = ""; //tmpGroupHistoryReport.txObeserv.Value = MainForm2.returnLNGString("obsSpeed"); reportViewer1.ReportSource = tmpGroupHistoryReport; if (countdata > 50000) { if ((MainForm2.radioType == RADIOTYPE.HARRIS) || (MainForm2.radioType == RADIOTYPE.ATLAS)) ((RadLabel)RadMessageBox.Instance.Controls[1]).LabelElement.ForeColor = MainForm2.HarTextColor; DialogResult dr = RadMessageBox.Show(this, MainForm2.returnLNGString("limit65000"), MainForm2.returnLNGString("info"), MessageBoxButtons.OK, RadMessageIcon.Info); } } break; case rep_type.ALLALARM: MainForm2.IsHistroyNotStop = true; StopReport tmpRep3 = new StopReport(); if (ckUnitGroupFilter.Checked) tmpRep3.titleTextBox.Value = MainForm2.returnLNGString("allAlarmTitle") + " " + (UnitGroupItems[rcbUnitGroup.SelectedIndex].IsGroup ? MainForm2.returnLNGString("forGroup") : MainForm2.returnLNGString("forvehicle")) + " " + rcbUnitGroup.Text; else tmpRep3.titleTextBox.Value = MainForm2.returnLNGString("allAlarmTitle"); tmpRep3.timeCaptionTextBox.Value = MainForm2.returnLNGString("alarmtype"); tmpRep3.locationCaptionTextBox.Value = MainForm2.returnLNGString("SMSMessTime"); tmpRep3.durationCaptionTextBox.Value = MainForm2.returnLNGString("lbDescript"); tmpRep3.dataCaptionTextBox.Value = MainForm2.returnLNGString("htableVehiclesListColumns1"); reportViewer1.ReportSource = tmpRep3; break; case rep_type.ENDOFDAY: if (ValidReport) { EndOfDay tmpEND = new EndOfDay(); tmpEND.distanceCaptionTextBox.Value = MainForm2.returnLNGString("namedistance"); tmpEND.startAddressCaptionTextBox.Value = MainForm2.returnLNGString("namestrlocTRAV"); tmpEND.stopAddressCaptionTextBox.Value = MainForm2.returnLNGString("namestoplocTRAV"); tmpEND.startTimeCaptionTextBox.Value = MainForm2.returnLNGString("namestrhourTRAV"); tmpEND.stopTimeCaptionTextBox.Value = MainForm2.returnLNGString("label3"); tmpEND.titleTextBox.Value = MainForm2.returnLNGString("nameandvehicleTRAV") + " " + rcbUnitGroup.Text; tmpEND.tripCaptionTextBox.Value = MainForm2.returnLNGString("nameroad"); reportViewer1.ReportSource = tmpEND; } break; case rep_type.STOP: if (ValidReport) { MainForm2.IsHistroyNotStop = false; MainForm2.IsIdle = false; StopReport tmpRep = new StopReport(); tmpRep.titleTextBox.Value = MainForm2.returnLNGString("namesandvehicleSTOP") + " " + rcbUnitGroup.Text; tmpRep.timeCaptionTextBox.Value = MainForm2.returnLNGString("label3"); tmpRep.locationCaptionTextBox.Value = MainForm2.returnLNGString("locationSTOP"); tmpRep.durationCaptionTextBox.Value = MainForm2.returnLNGString("waitingSTOP"); tmpRep.dataCaptionTextBox.Value = MainForm2.returnLNGString("dateSTOP"); reportViewer1.ReportSource = tmpRep; } break; case rep_type.IDLE: if (ValidReport) { MainForm2.IsHistroyNotStop = false; MainForm2.IsIdle = true; StopReport tmpIDLE = new StopReport(); tmpIDLE.titleTextBox.Value = MainForm2.returnLNGString("namesandvehicleSTOPENG") + " " + rcbUnitGroup.Text; tmpIDLE.timeCaptionTextBox.Value = MainForm2.returnLNGString("label3"); tmpIDLE.locationCaptionTextBox.Value = MainForm2.returnLNGString("locationSTOP"); tmpIDLE.durationCaptionTextBox.Value = MainForm2.returnLNGString("waitingSTOP"); tmpIDLE.dataCaptionTextBox.Value = MainForm2.returnLNGString("dateSTOP"); reportViewer1.ReportSource = tmpIDLE; } break; case rep_type.FLEET: if (ValidReport) { MainForm2.IsSMSLocationNotFleet = false; FleetReport tmpFleet = new FleetReport(); tmpFleet.distanceCaptionTextBox.Value = MainForm2.returnLNGString("namedistance"); tmpFleet.nameCaptionTextBox.Value = MainForm2.returnLNGString("htableVehiclesListColumns1"); tmpFleet.startCaptionTextBox.Value = MainForm2.returnLNGString("namefirst") + " " + MainForm2.returnLNGString("namerun"); tmpFleet.stopCaptionTextBox.Value = MainForm2.returnLNGString("namefirst") + " " + MainForm2.returnLNGString("namewait"); tmpFleet.titleTextBox.Value = MainForm2.returnLNGString("titleFLEET"); tmpFleet.tripsCaptionTextBox.Value = MainForm2.returnLNGString("nameroute"); reportViewer1.ReportSource = tmpFleet; } break; case rep_type.SMS_LOCATION: rlComputing.Visible = false; rProgressBar.Visible = false; if (ValidReport) { MainForm2.IsSMSLocationNotFleet = true; FleetReport tmpSMSLoc = new FleetReport(); tmpSMSLoc.distanceCaptionTextBox.Value = MainForm2.returnLNGString("Message"); tmpSMSLoc.nameCaptionTextBox.Value = MainForm2.returnLNGString("htableVehiclesListColumns1"); tmpSMSLoc.startCaptionTextBox.Value = MainForm2.returnLNGString("rapday"); tmpSMSLoc.stopCaptionTextBox.Value = MainForm2.returnLNGString("addrOrLatLng"); tmpSMSLoc.tripsCaptionTextBox.Value = MainForm2.returnLNGString("alarmsListColumns1"); tmpSMSLoc.titleTextBox.Value = MainForm2.returnLNGString("messagewithlocation"); reportViewer1.ReportSource = tmpSMSLoc; } break; } reportViewer1.RefreshReport(); ButtonStatusCancel = false; btPrintReport.Text = MainForm2.returnLNGString("btShowReport"); } private void ckType_ToggleStateChanged(object sender, StateChangedEventArgs args) { if (this.ckGeofenceType.Checked) this.rcbGeoLandType.Enabled = true; else this.rcbGeoLandType.Enabled = false; } private void ckSelectALL_ToggleStateChanged(object sender, StateChangedEventArgs args) { if (ckSelectALL.Checked) { for (Int32 i = 0; i < rcbUnitFleet.Items.Count; i++) ((CustomListDataItem)rcbUnitFleet.Items[i]).Checked = true; //cbVehNameFleet.SelectedItems.Add(((CustomListDataItem)cbVehNameFleet.Items[i])); } else { for (Int32 i = 0; i < rcbUnitFleet.Items.Count; i++) //((CustomListDataItem)cbVehNameFleet.Items[i]).IsChecked = false; ((CustomListDataItem)rcbUnitFleet.Items[i]).Checked = false; } } private void ReportsControl_Load(object sender, EventArgs e) { /* if ((RepType == rep_type.SPEED) || (RepType == rep_type.EMERG) || (RepType == rep_type.TELEMETRY_ALARM) || (RepType == rep_type.TELEMETRY_EVENT) || (RepType == rep_type.HIST) || (RepType == rep_type.ALLALARM) || (RepType == rep_type.LOG) || (RepType == rep_type.GEOFENC) || (RepType == rep_type.SMS_LOCATION)) { chVehName.Location = new Point(cbVehName.Location.X -5 -chVehName.Size.Width, cbVehName.Location.Y); lbFrom.Location = new Point(dtFrom.Location.X - 5 - lbFrom.Size.Width, dtFrom.Location.Y); lbTo.Location = new Point(dtTo.Location.X - 5 - lbTo.Size.Width, dtTo.Location.Y); ckDataFilter.Location = new Point(lbFrom.Location.X - 10 - ckDataFilter.Size.Width, lbFrom.Location.Y); ckType.Location = new Point(cbType.Location.X - 5 - ckType.Size.Width, cbType.Location.Y); chStatus.Location = new Point(cbStatus.Location.X - 5 - chStatus.Size.Width, cbStatus.Location.Y); } if (RepType == rep_type.HIST) rlUnitGroup.Location = new Point(cbVehName.Location.X - 5 - rlUnitGroup.Size.Width, cbVehName.Location.Y); if (RepType == rep_type.LOG) chStatus.Location = new Point(cbStatus.Location.X - 10 - chStatus.Size.Width, cbStatus.Location.Y); if ((RepType == rep_type.ENDOFDAY) || (RepType == rep_type.STOP) || (RepType == rep_type.IDLE)) { lbFrom.Location = new Point(dtFrom.Location.X - 5 - lbFrom.Size.Width, dtFrom.Location.Y); lbTo.Location = new Point(dtTo.Location.X - 5 - lbTo.Size.Width, dtTo.Location.Y); rlUnitGroup.Location = new Point(cbVehName.Location.X - 5 - rlUnitGroup.Size.Width, cbVehName.Location.Y); lbIdle.Location = new Point(txIdle.Location.X - 5 - lbIdle.Size.Width, txIdle.Location.Y); } if (RepType == rep_type.FLEET) { lbFrom.Location = new Point(dtFrom.Location.X - 5 - lbFrom.Size.Width, dtFrom.Location.Y); lbTo.Location = new Point(dtTo.Location.X - 5 - lbTo.Size.Width, dtTo.Location.Y); rlUnitGroup.Location = new Point(cbVehNameFleet.Location.X - 5 - rlUnitGroup.Size.Width, cbVehNameFleet.Location.Y); } if (RepType == rep_type.GEOFENC) { /* cbStatus.Items.Clear(); ZoneListNames.Sort(new VehandIDComparer()); cbStatus.DataSource = ZoneListNames; cbStatus.DisplayMember = "Name"; if (cbStatus.Items.Count >= 1) cbStatus.SelectedIndex = 0; if (cbType.Items.Count >= 1) cbType.SelectedIndex = 0; cbVehName.Location = new Point(cbVehName.Location.X - 60, cbVehName.Location.Y); chVehName.Location = new Point(chVehName.Location.X - 40, chVehName.Location.Y); chStatus.Location = new Point(chStatus.Location.X - 80, chStatus.Location.Y); cbStatus.Location = new Point(cbStatus.Location.X - 40, cbStatus.Location.Y); cbStatus.Size = new Size(cbStatus.Size.Width - 30, cbStatus.Size.Height); ckType.Location = new Point(ckType.Location.X + 200, ckType.Location.Y); btPrintReport.Location = new Point(btPrintReport.Location.X + 80, btPrintReport.Location.Y); chStatus.Text = MainForm2.returnLNGString("zonename"); ckType.Visible = true; cbType.Visible = true;*/ //} } public static volatile Queue AddrGISQueue = new Queue(); private volatile Boolean findaddress; private volatile AddrAndID tmpAddrAndID; private Double valHash; private volatile String AddrtmpX; private volatile GoogleAddr2 volltmpGo = new GoogleAddr2(); private volatile Boolean retrynew; private volatile Boolean inwhile = false; private void GisAddressWorker_DoWork(object sender, DoWorkEventArgs e) { try { BackgroundWorker worker = sender as BackgroundWorker; while (AddrGISQueue.Count > 0) { if ((worker.CancellationPending == true)) { e.Cancel = true; break; } tmpAddrAndID = (AddrAndID)AddrGISQueue.Dequeue(); findaddress = false; try { tmpAddrAndID.LNG = Math.Round(tmpAddrAndID.LNG, 4); tmpAddrAndID.LAT = Math.Round(tmpAddrAndID.LAT, 4); valHash = tmpAddrAndID.LNG + tmpAddrAndID.LAT * 0.000001; if (MainForm2.AddrHass[valHash] != null) { tmpAddrAndID.Address = (String)MainForm2.AddrHass[valHash]; findaddress = true; } else { AddrtmpX = smdbObj.get_address(tmpAddrAndID.LAT, tmpAddrAndID.LNG); if (AddrtmpX != "") { MainForm2.AddrHass.Add(valHash, AddrtmpX); tmpAddrAndID.Address = AddrtmpX; findaddress = true; } } } catch { } if (!findaddress) { tmpAddrAndID.Address = volltmpGo.getAddressLATLNG(tmpAddrAndID.LAT, tmpAddrAndID.LNG); } if ((tmpAddrAndID.Address != "") && (tmpAddrAndID.Address != " ")) { if (!findaddress) { try { if (tmpAddrAndID.Address != "N/A") { valHash = tmpAddrAndID.LNG + tmpAddrAndID.LAT * 0.000001; MainForm2.AddrHass.Add(valHash, tmpAddrAndID.Address); AddrtmpX = smdbObj.get_address(tmpAddrAndID.LAT, tmpAddrAndID.LNG); //just for avoid Error from Event Viewer if (AddrtmpX == "") smdbObj.Insert_Address(tmpAddrAndID.Address, tmpAddrAndID.LAT, tmpAddrAndID.LNG); } } catch (Exception ex) { SM.Debug("Error: " + ex.ToString()); } } IdReportHS[tmpAddrAndID.ID.ToString()] = tmpAddrAndID.Address; if (inwhile) rProgressBar.Invoke(new UpdateProgressBarCallBack(this.UpdateProgressBar), -1); SM.Debug("Baga google in hash ID:" + tmpAddrAndID.ID.ToString() + "Addr:" + tmpAddrAndID.Address); } else { //dau in open street maps si apoi ies prin prin cene Thread.Sleep(1100); tmpAddrAndID.Address = volltmpGo.getAddressLATLNG2(tmpAddrAndID.LAT, tmpAddrAndID.LNG); if ((tmpAddrAndID.Address != "") && (tmpAddrAndID.Address != " ")) { if (!findaddress) { try { if (tmpAddrAndID.Address != "N/A") { valHash = tmpAddrAndID.LNG + tmpAddrAndID.LAT * 0.000001; MainForm2.AddrHass.Add(valHash, tmpAddrAndID.Address); AddrtmpX = smdbObj.get_address(tmpAddrAndID.LAT, tmpAddrAndID.LNG); //just for avoid Error from Event Viewer if (AddrtmpX == "") smdbObj.Insert_Address(tmpAddrAndID.Address, tmpAddrAndID.LAT, tmpAddrAndID.LNG); } } catch (Exception ex) { SM.Debug("Error: " + ex.ToString()); } } IdReportHS[tmpAddrAndID.ID.ToString()] = tmpAddrAndID.Address; if (inwhile) rProgressBar.Invoke(new UpdateProgressBarCallBack(this.UpdateProgressBar), -1); SM.Debug("Baga open street maps in hash ID:" + tmpAddrAndID.ID.ToString() + "Addr:" + tmpAddrAndID.Address); } else { SM.Debug("Iese prin Cene cu nimic"); } } } } catch (Exception ex) { SM.Debug("Error retrive address:" + ex.ToString()); } Thread.Sleep(10); } private void GisAddressWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { retrynew = false; } private void UpdateProgressBar(Int32 max) { if (max == -1) { rProgressBar.ProgressBarElement.PerformStepValue1(); rProgressBar.Update(); } else { rProgressBar.Maximum = max; rProgressBar.Value1 = 0; } } public delegate void UpdateProgressBarCallBack(Int32 max); private void cbDaily_ToggleStateChanged(object sender, StateChangedEventArgs args) { if (ckReportDaily.ToggleState == Telerik.WinControls.Enumerations.ToggleState.On) btSaveEmail.Enabled = true; else btSaveEmail.Enabled = false; } private void btSaveEmail_Click(object sender, EventArgs e) { if (rtbEmail.Text.Contains('@') && rtbEmail.Text.Contains('.')) { SM.Debug("Valid email address"); if (rtbEmail.Text.IndexOf('@') != rtbEmail.Text.LastIndexOf('@')) { if (!rtbEmail.Text.Contains(';')) { SM.Debug("Be sure you split the email's"); RadMessageBox.Show(msgSplitEmail); } } //write on database //should check valid stuff also CheckValueReporteSaving(); smdbObj.Insert_Report(startdate, stopdate, unit_ids, geo_id, type, idle_time, reportid, rtbEmail.Text, LatLng); //save ok ckReportDaily.ToggleState = Telerik.WinControls.Enumerations.ToggleState.Off; RadMessageBox.Show(msgEmailSaved); } else { RadMessageBox.Show(msgInvalidEmail); SM.Debug("Invalid email address"); } } /// /// Handles the picture box click for simulating a checkbox and to /// enable/disable other panels /// /// /// private void pbEnableDisable_Click(object sender, EventArgs e) { if ((PictureBox)sender == pbDateTime) { if (pbDateTime.Tag.Equals("disabled")) { pbDateTime.Tag = "enabled"; pbDateTime.Image = Dispatcher.Properties.Resources.datepicker_enabled; radPanelDateTime.Enabled = true; ckDataFilter.Checked = true; } else { pbDateTime.Tag = "disabled"; pbDateTime.Image = Dispatcher.Properties.Resources.datepicker_disabled; radPanelDateTime.Enabled = false; ckDataFilter.Checked = false; } } else if ((PictureBox)sender == pbUnitGroup) { if (pbUnitGroup.Tag.Equals("disabled")) { pbUnitGroup.Tag = "enabled"; pbUnitGroup.Image = Dispatcher.Properties.Resources.datepicker_enabled; radPanelUnitGroup.Enabled = true; ckUnitGroupFilter.Checked = true; } else { pbUnitGroup.Tag = "disabled"; pbUnitGroup.Image = Dispatcher.Properties.Resources.datepicker_disabled; radPanelUnitGroup.Enabled = false; ckUnitGroupFilter.Checked = false; } } else if ((PictureBox)sender == pbReportDaily) { if (pbReportDaily.Tag.Equals("disabled")) { pbReportDaily.Tag = "enabled"; pbReportDaily.Image = Dispatcher.Properties.Resources.datepicker_enabled; radPanelReportDaily.Enabled = true; ckReportDaily.Checked = true; } else { pbReportDaily.Tag = "disabled"; pbReportDaily.Image = Dispatcher.Properties.Resources.datepicker_disabled; radPanelReportDaily.Enabled = false; ckReportDaily.Checked = false; } } else if ((PictureBox)sender == pbComputeAddress) { if (pbComputeAddress.Tag.Equals("disabled")) { pbComputeAddress.Tag = "enabled"; pbComputeAddress.Image = Dispatcher.Properties.Resources.datepicker_enabled; radPanelComputeAddress.Enabled = true; ckComputeAddress.Checked = true; // disable coordinates for mutual exclusion if (ckCoordinates.Checked) pbEnableDisable_Click(pbCoordinates, null); } else { pbComputeAddress.Tag = "disabled"; pbComputeAddress.Image = Dispatcher.Properties.Resources.datepicker_disabled; radPanelComputeAddress.Enabled = false; ckComputeAddress.Checked = false; } } else if ((PictureBox)sender == pbCoordinates) { if (pbCoordinates.Tag.Equals("disabled")) { pbCoordinates.Tag = "enabled"; pbCoordinates.Image = Dispatcher.Properties.Resources.datepicker_enabled; radPanelLatLng.Enabled = true; ckCoordinates.Checked = true; // disable compute address for mutual exclusion if (ckComputeAddress.Checked) pbEnableDisable_Click(pbComputeAddress, null); } else { pbCoordinates.Tag = "disabled"; pbCoordinates.Image = Dispatcher.Properties.Resources.datepicker_disabled; radPanelLatLng.Enabled = false; ckCoordinates.Checked = false; } } // enable or disable Geofence/Landmark Name else if ((PictureBox)sender == pbGeofenceName) { if (pbGeofenceName.Tag.Equals("disabled")) { pbGeofenceName.Tag = "enabled"; pbGeofenceName.Image = Dispatcher.Properties.Resources.datepicker_enabled; radPanelGeofenceName.Enabled = true; ckGeofenceName.Checked = true; } else { pbGeofenceName.Tag = "disabled"; pbGeofenceName.Image = Dispatcher.Properties.Resources.datepicker_disabled; radPanelGeofenceName.Enabled = false; ckGeofenceName.Checked = false; } } // enable or disable Geofence/Landmark Type else if ((PictureBox)sender == pbGeofenceType) { if (pbGeofenceType.Tag.Equals("disabled")) { pbGeofenceType.Tag = "enabled"; pbGeofenceType.Image = Dispatcher.Properties.Resources.datepicker_enabled; radPanelGeofenceType.Enabled = true; ckGeofenceType.Checked = true; } else { pbGeofenceType.Tag = "disabled"; pbGeofenceType.Image = Dispatcher.Properties.Resources.datepicker_disabled; radPanelGeofenceType.Enabled = false; ckGeofenceType.Checked = false; } } // enable or disable Status Panel else if ((PictureBox)sender == pbStatus) { if (pbStatus.Tag.Equals("disabled")) { pbStatus.Tag = "enabled"; pbStatus.Image = Dispatcher.Properties.Resources.datepicker_enabled; radPanelStatus.Enabled = true; ckStatus.Checked = true; } else { pbStatus.Tag = "disabled"; pbStatus.Image = Dispatcher.Properties.Resources.datepicker_disabled; radPanelStatus.Enabled = false; ckStatus.Checked = false; } } // enable or disable Status Panel else if ((PictureBox)sender == pbSelectAll) { if (pbSelectAll.Tag.Equals("disabled")) { pbSelectAll.Tag = "enabled"; pbSelectAll.Image = Dispatcher.Properties.Resources.datepicker_enabled; radPanelSelectAll.Enabled = true; ckSelectALL.Checked = true; } else { pbSelectAll.Tag = "disabled"; pbSelectAll.Image = Dispatcher.Properties.Resources.datepicker_disabled; radPanelSelectAll.Enabled = false; ckSelectALL.Checked = false; } } } /// /// Change the UI according to the report type /// /// Type of the report for which the UI will be displayed private void UpdateUIForReportType(rep_type reportType) { List addressPanelVisible = new List() { rep_type.SPEED, rep_type.HIST, rep_type.TELEMETRY_ALARM, rep_type.TELEMETRY_EVENT, rep_type.SMS_LOCATION }; List landmarkPanelVisible = new List() { rep_type.LAND, rep_type.GEOFENC }; List latLngPanelVisible = new List() { rep_type.SPEED, rep_type.EMERG, rep_type.HIST, rep_type.ENDOFDAY, rep_type.IDLE, rep_type.STOP, rep_type.TELEMETRY_ALARM, rep_type.TELEMETRY_EVENT, rep_type.SMS_LOCATION }; List statusPanelVisible = new List() { rep_type.LOG }; List idlePanelVisible = new List() { rep_type.IDLE }; List selectAllPanelVisible = new List() { rep_type.FLEET }; List unitMandatory = new List() { rep_type.HIST, rep_type.ENDOFDAY, rep_type.IDLE, rep_type.STOP, rep_type.FLEET }; List dateMandatory = new List() { rep_type.ENDOFDAY, rep_type.IDLE, rep_type.STOP, rep_type.FLEET }; List progressBarSpace = new List() { rep_type.SPEED, rep_type.HIST, rep_type.TELEMETRY_ALARM, rep_type.TELEMETRY_EVENT }; // show hide pannels if (addressPanelVisible.Contains(reportType)) { pbComputeAddress.Visible = true; radPanelComputeAddress.Visible = true; } else if (!addressPanelVisible.Contains(reportType)) { pbComputeAddress.Visible = false; radPanelComputeAddress.Visible = false; } // hide or show lat-lng panel if (latLngPanelVisible.Contains(reportType)) { pbCoordinates.Visible = true; radPanelLatLng.Visible = true; } else if (!latLngPanelVisible.Contains(reportType)) { pbCoordinates.Visible = false; radPanelLatLng.Visible = false; } // hide or show Landmark/Geofence Panel if (landmarkPanelVisible.Contains(reportType)) { pbGeofenceName.Visible = true; radPanelGeofenceName.Visible = true; pbGeofenceType.Visible = true; radPanelGeofenceType.Visible = true; if (reportType == rep_type.LAND) { rlGeoLanName.Text = "Landmark Name"; rlGeoLanType.Text = "Landmark Type"; } else if (reportType == rep_type.GEOFENC) { rlGeoLanName.Text = "Geofence Name"; rlGeoLanType.Text = "Geofence Type"; } rcbStatus.Items.Clear(); ZoneListNames.Sort(new VehandIDComparer()); rcbStatus.DataSource = ZoneListNames; rcbStatus.DisplayMember = "Name"; if (rcbStatus.Items.Count >= 1) rcbStatus.SelectedIndex = 0; if (rcbGeoLandType.Items.Count >= 1) rcbGeoLandType.SelectedIndex = 0; if (reportType == rep_type.GEOFENC) ckStatus.Text = MainForm2.returnLNGString("zonename"); else ckStatus.Text = MainForm2.returnLNGString("landmarkname"); } else if (!landmarkPanelVisible.Contains(reportType)) { pbGeofenceName.Visible = false; radPanelGeofenceName.Visible = false; pbGeofenceType.Visible = false; radPanelGeofenceType.Visible = false; } // make unit mandatory if (unitMandatory.Contains(reportType)) { pbUnitGroup.Visible = false; pbUnitGroup.Tag = "disabled"; pbEnableDisable_Click(pbUnitGroup, null); } else if (!unitMandatory.Contains(reportType)) { pbUnitGroup.Visible = true; pbUnitGroup.Tag = "enabled"; pbEnableDisable_Click(pbUnitGroup, null); } // make date mandatory if (dateMandatory.Contains(reportType)) { pbDateTime.Visible = false; pbDateTime.Tag = "disabled"; pbEnableDisable_Click(pbDateTime, null); } else if (!dateMandatory.Contains(reportType)) { pbDateTime.Visible = true; pbDateTime.Tag = "enabled"; pbEnableDisable_Click(pbDateTime, null); } // hide or show LOG [ON/OFF] panel if (statusPanelVisible.Contains(reportType)) { pbStatus.Visible = true; radPanelStatus.Visible = true; } else if (!statusPanelVisible.Contains(reportType)) { pbStatus.Visible = false; radPanelStatus.Visible = false; } // hide or show Idle panel if (idlePanelVisible.Contains(reportType)) { radPanelIdle.Visible = true; } else if (!idlePanelVisible.Contains(reportType)) { radPanelIdle.Visible = false; } // hide or show SELECT ALL panel if (selectAllPanelVisible.Contains(reportType)) { pbSelectAll.Visible = true; radPanelSelectAll.Visible = true; } else if (!selectAllPanelVisible.Contains(reportType)) { pbSelectAll.Visible = false; radPanelSelectAll.Visible = false; } // show the multi selection combobox if Fleet if (reportType == rep_type.FLEET) { rcbUnitFleet.Visible = true; rcbUnitGroup.Visible = false; pbUnitGroupForCombo.Visible = false; } else { rcbUnitFleet.Visible = false; rcbUnitGroup.Visible = true; pbUnitGroupForCombo.Visible = true; } // update picture boxes icons and button icons pbEnabled_Changed(pbIconDateTime, null); pbEnabled_Changed(pbIconReportDaily, null); pbEnabled_Changed(pbIconUnitGroup, null); // set if icon of the Report Daily Icon picture box according to its state switch (MainForm2.radioType) { case RADIOTYPE.ATLAS: case RADIOTYPE.HARRIS: btPrintReport.Image = Dispatcher.Properties.Resources.report_at; rlDateTimeFilter.ForeColor = MainForm2.HarTextColor; rlUnitGroup.ForeColor = MainForm2.HarTextColor; rlReportDaily.ForeColor = MainForm2.HarTextColor; rlSelectAll.ForeColor = MainForm2.HarTextColor; rlCoordinates.ForeColor = MainForm2.HarTextColor; rlComputeAddress.ForeColor = MainForm2.HarTextColor; rlGeoLanName.ForeColor = MainForm2.HarTextColor; rlGeoLanType.ForeColor = MainForm2.HarTextColor; rlStatus.ForeColor = MainForm2.HarTextColor; rlIdle.ForeColor = MainForm2.HarTextColor; rlMin.ForeColor = MainForm2.HarTextColor; rlUntil.ForeColor = MainForm2.HarTextColor; ckDataFilter.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor; ckSelectALL.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor; ckGeofenceType.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor; ckStatus.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor; ckUnitGroupFilter.ButtonElement.TextElement.ForeColor = MainForm2.HarTextColor; ckComputeAddress.ForeColor = MainForm2.HarTextColor; rlComputing.ForeColor = MainForm2.HarTextColor; break; default: btPrintReport.Image = Dispatcher.Properties.Resources.report; break; } } /// /// Change the image of the sender picture box when its enabled or disabled /// /// Picture Box which triggered the event private void pbEnabled_Changed(object sender, EventArgs e) { // set the icon of the Date Icon picture box according to its state if ((PictureBox)sender == pbIconDateTime && pbIconDateTime.Enabled) { switch (MainForm2.radioType) { case RADIOTYPE.ATLAS: pbIconDateTime.Image = Dispatcher.Properties.Resources.icon_date_enabled_at; break; case RADIOTYPE.HARRIS: pbIconDateTime.Image = Dispatcher.Properties.Resources.icon_date_enabled_ha; break; default: pbIconDateTime.Image = Dispatcher.Properties.Resources.icon_date_enabled; break; } } else if ((PictureBox)sender == pbIconDateTime && !pbIconDateTime.Enabled) { switch (MainForm2.radioType) { case RADIOTYPE.ATLAS: case RADIOTYPE.HARRIS: pbIconDateTime.Image = Dispatcher.Properties.Resources.icon_date_disabled_at; break; default: pbIconDateTime.Image = Dispatcher.Properties.Resources.icon_date_disabled; break; } } // set if icon of the Unit Icon picture box according to its state if ((PictureBox)sender == pbIconUnitGroup && pbIconUnitGroup.Enabled) { switch (MainForm2.radioType) { case RADIOTYPE.ATLAS: pbIconUnitGroup.Image = Dispatcher.Properties.Resources.icon_unit_enabled_at; break; case RADIOTYPE.HARRIS: pbIconUnitGroup.Image = Dispatcher.Properties.Resources.icon_unit_enabled_ha; break; default: pbIconUnitGroup.Image = Dispatcher.Properties.Resources.icon_unit_enabled; break; } } else if ((PictureBox)sender == pbIconUnitGroup && !pbIconUnitGroup.Enabled) { switch (MainForm2.radioType) { case RADIOTYPE.ATLAS: case RADIOTYPE.HARRIS: pbIconUnitGroup.Image = Dispatcher.Properties.Resources.icon_unit_disabled_at; break; default: pbIconUnitGroup.Image = Dispatcher.Properties.Resources.icon_unit_disabled; break; } } // set if icon of the Report Daily Icon picture box according to its state if ((PictureBox)sender == pbIconReportDaily && pbIconReportDaily.Enabled) { switch (MainForm2.radioType) { case RADIOTYPE.ATLAS: pbIconReportDaily.Image = Dispatcher.Properties.Resources.icon_email_enabled_at; break; case RADIOTYPE.HARRIS: pbIconReportDaily.Image = Dispatcher.Properties.Resources.icon_email_enabled_ha; break; default: pbIconReportDaily.Image = Dispatcher.Properties.Resources.icon_email_enabled; break; } } else if ((PictureBox)sender == pbIconReportDaily && !pbIconReportDaily.Enabled) { switch (MainForm2.radioType) { case RADIOTYPE.ATLAS: case RADIOTYPE.HARRIS: pbIconReportDaily.Image = Dispatcher.Properties.Resources.icon_email_disabled_at; break; default: pbIconReportDaily.Image = Dispatcher.Properties.Resources.icon_email_disabled; break; } } // set if icon of the Report Daily Icon picture box according to its state if ((PictureBox)sender == pbUnitGroupForCombo && pbUnitGroupForCombo.Enabled) { if (rcbUnitGroup.SelectedIndex == -1) return; if (UnitGroupItems[rcbUnitGroup.SelectedIndex].IsGroup) switch (MainForm2.radioType) { case RADIOTYPE.ATLAS: pbUnitGroupForCombo.Image = GetIconForCombobox(MainForm2.radioType, "group", true); pbUnitGroupForCombo.BackColor = Color.FromArgb(255, 0, 0); break; case RADIOTYPE.HARRIS: pbUnitGroupForCombo.Image = GetIconForCombobox(MainForm2.radioType, "group", true); break; default: pbUnitGroupForCombo.Image = GetIconForCombobox(MainForm2.radioType, "group", true); break; } else switch (MainForm2.radioType) { case RADIOTYPE.ATLAS: pbUnitGroupForCombo.Image = GetIconForCombobox(MainForm2.radioType, "unit", true); pbUnitGroupForCombo.BackColor = Color.FromArgb(255, 0, 0); break; case RADIOTYPE.HARRIS: pbUnitGroupForCombo.Image = GetIconForCombobox(MainForm2.radioType, "unit", true); break; default: pbUnitGroupForCombo.Image = GetIconForCombobox(MainForm2.radioType, "unit", true); break; } //pbUnitGroupForCombo.BackColor = Color.Transparent; } else if ((PictureBox)sender == pbUnitGroupForCombo && !pbUnitGroupForCombo.Enabled) { if (rcbUnitGroup.SelectedIndex == -1) return; if (UnitGroupItems[rcbUnitGroup.SelectedIndex].IsGroup) switch (MainForm2.radioType) { case RADIOTYPE.ATLAS: pbUnitGroupForCombo.Image = GetIconForCombobox(MainForm2.radioType, "group", false); pbUnitGroupForCombo.BackColor = Color.FromArgb(188, 188, 188); break; case RADIOTYPE.HARRIS: pbUnitGroupForCombo.Image = GetIconForCombobox(MainForm2.radioType, "group", false); break; default: pbUnitGroupForCombo.Image = GetIconForCombobox(MainForm2.radioType, "group", false); break; } else switch (MainForm2.radioType) { case RADIOTYPE.ATLAS: pbUnitGroupForCombo.Image = GetIconForCombobox(MainForm2.radioType, "unit", false); pbUnitGroupForCombo.BackColor = Color.FromArgb(188, 188, 188); break; case RADIOTYPE.HARRIS: pbUnitGroupForCombo.Image = GetIconForCombobox(MainForm2.radioType, "unit", false); break; default: pbUnitGroupForCombo.Image = GetIconForCombobox(MainForm2.radioType, "unit", false); break; } //pbUnitGroupForCombo.BackColor = Color.Transparent; } } /// /// Display the image and text for each unit in the combobox /// private void cbVehName_ItemDataBound(object sender, ListItemDataBoundEventArgs args) { // display the text and image for each item in the comboBox DropListItem item = (DropListItem)args.NewItem.DataBoundItem; args.NewItem.Text = item.Text; args.NewItem.Image = item.Image; } /// /// Resize the SendReport when the progress bar is visible or hide /// private void rProgressBar_VisibleChanged(object sender, EventArgs e) { if (rProgressBar.Visible) btPrintReport.Size = new Size(105, 95); else btPrintReport.Size = new Size(105, 127); } /// /// Enable or disable the Save Email button according to the email address written /// in the email textBox /// private void rtbEmail_TextChanged(object sender, EventArgs e) { bool areEmailsAddressesValid = true; string[] emailAddresses = rtbEmail.Text.Split(';'); if (emailAddresses.Length == 0) areEmailsAddressesValid = false; foreach (String str in emailAddresses) // foreach email address check if it's a valid email address if (str.Length > 0 && !IsValidEmail(str)) areEmailsAddressesValid = false; if (areEmailsAddressesValid) btSaveEmail.Enabled = true; else btSaveEmail.Enabled = false; } /// /// /// private void rcbUnitGroup_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e) { if (UnitGroupItems[e.Position].IsGroup) pbUnitGroupForCombo.Image = GetIconForCombobox(MainForm2.radioType, "group", true); else pbUnitGroupForCombo.Image = GetIconForCombobox(MainForm2.radioType, "unit", true); } /// /// Verify if an email address is a valid email address, in therm of /// well written, with '@' and '.' in the wright place /// /// Email which needs to be checked /// True if the email is a valid one, or false otherwise bool IsValidEmail(string email) { bool isEmail = Regex.IsMatch(email, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase); return isEmail; /* try { var addr = new System.Net.Mail.MailAddress(email); return addr.Address == email; } catch { return false; }*/ } /// /// Get the image which needs to be set for a unit/group picture box/ list /// according to the type of the SafeDispatch /// /// Type of the SafeDispatch system [this is equal with the theme] /// String containing the /// Specify if the icon should be in enabled or disabled state /// The image which fulfills the constrains private Image GetIconForCombobox(RADIOTYPE radioType, String iconType, bool isEnabled) { if (iconType.Equals("unit")) { switch (MainForm2.radioType) { case RADIOTYPE.ATLAS: return (isEnabled ? Dispatcher.Properties.Resources.icon_cb_unit_enabled : Dispatcher.Properties.Resources.icon_cb_unit_disabled); case RADIOTYPE.HARRIS: return (isEnabled ? Dispatcher.Properties.Resources.icon_cb_unit_enabled_ha : Dispatcher.Properties.Resources.icon_cb_unit_disabled); default: return (isEnabled ? Dispatcher.Properties.Resources.icon_cb_unit_enabled : Dispatcher.Properties.Resources.icon_cb_unit_disabled); } } else if (iconType.Equals("group")) { switch (MainForm2.radioType) { case RADIOTYPE.ATLAS: return (isEnabled ? Dispatcher.Properties.Resources.icon_cb_group_enabled : Dispatcher.Properties.Resources.icon_cb_group_disabled); case RADIOTYPE.HARRIS: return (isEnabled ? Dispatcher.Properties.Resources.icon_cb_group_enabled_ha : Dispatcher.Properties.Resources.icon_cb_group_disabled); default: return (isEnabled ? Dispatcher.Properties.Resources.icon_cb_group_enabled : Dispatcher.Properties.Resources.icon_cb_group_disabled); } } return (isEnabled ? Dispatcher.Properties.Resources.icon_cb_group_enabled : Dispatcher.Properties.Resources.icon_cb_group_disabled); } private void rlComputing_Click(object sender, EventArgs e) { } } // create a way to get the string from the enum public sealed class StringEnum { /* radListDataItem5.Text = "OFF"; radListDataItem5.TextWrap = true; radListDataItem6.Text = "ON"; radListDataItem6.TextWrap = true; radListDataItem7.Text = "MADE OFF"; radListDataItem7.TextWrap = true; radListDataItem8.Text = "MADE ON"; */ private readonly String name; private readonly int value; public static readonly StringEnum IN = new StringEnum(1, "IN");//MainForm2.returnLNGString("in")); public static readonly StringEnum OUT = new StringEnum(2, "OUT");//MainForm2.returnLNGString("out")); public static readonly StringEnum ON = new StringEnum(1, "ON");//MainForm2.returnLNGString("on")); public static readonly StringEnum OFF = new StringEnum(2, "OFF");//MainForm2.returnLNGString("off")); public static readonly StringEnum MADEOFF = new StringEnum(3, "MADE OFF");//MainForm2.returnLNGString("madeoff")); public static readonly StringEnum MADEON = new StringEnum(4, "MADE ON");//MainForm2.returnLNGString("madeon")); private StringEnum(int value, String name) { this.name = name; this.value = value; } public override String ToString() { return name; } } }