private FlightQuery GetFlightQuery() { if (String.IsNullOrEmpty(Username)) { Username = Page.User.Identity.Name; } m_fq = new CannedQuery(Username) { DateRange = FlightQuery.DateRanges.AllTime, QueryName = txtQueryName.Text, GeneralText = txtRestrict.Text }; // Airports: if (txtAirports.Text.Length > 0) { m_fq.AirportList.Clear(); MatchCollection mc = regAirports.Matches(txtAirports.Text); foreach (Match m in mc) { if (!String.IsNullOrEmpty(m.Value)) { m_fq.AirportList.Add(m.Value); } } } m_fq.Distance = (FlightQuery.FlightDistance)Convert.ToInt32(rblFlightDistance.SelectedValue, CultureInfo.InvariantCulture); // Remaining sections QueryDateFromForm(); AircraftFromForm(); ModelsFromForm(); AircraftCharacteristicsFromForm(); FlightCharacteristicsFromForm(); CatClassFromForm(); CustomPropsFromForm(); // Typenames aren't exposed to the user; reset them here. m_fq.TypeNames.Clear(); foreach (string sz in TypeNames) { m_fq.TypeNames.Add(sz); } // Save it, if it was given a name, before refreshing it, since refresh can be destructive (e.g., can change trailing:2D to actual dates. // We'll clear the queryname field at the same time to prevent doing this multiple times. if (m_fq is CannedQuery cq && !String.IsNullOrEmpty(cq.QueryName)) { cq.Commit(); UpdateSavedQueries(); txtQueryName.Text = string.Empty; } m_fq.Refresh(); return(m_fq); }
protected void RefreshFormData() { FlightQuery fq = mfbSearchForm1.Restriction; MfbLogbook1.Restriction = new FlightQuery(fq); // before we muck with the query below, copy it here. fq.Refresh(); DBHelperCommandArgs args = new DBHelperCommandArgs() { Timeout = 120 }; args.AddFrom(fq.QueryParameters()); UpdateDescription(); IEnumerable <Form8710Row> lst8710 = null; IEnumerable <ModelRollupRow> lstModels = null; // get the various reports. This can be a bit slow, so do all of the queries in parallel asynchronously. try { Task.WaitAll( Task.Run(() => { ClassTotals = Form8710ClassTotal.ClassTotalsForQuery(fq, args); }), Task.Run(() => { lst8710 = Form8710Row.Form8710ForQuery(fq, args); }), Task.Run(() => { lstModels = ModelRollupRow.ModelRollupForQuery(fq, args); }), Task.Run(() => { RefreshTimePeriodRollup(); }), Task.Run(() => { if (!Master.IsMobileSession()) { MfbLogbook1.RefreshData(); } }) ); } catch (MySqlException ex) { throw new MyFlightbookException(String.Format(CultureInfo.CurrentCulture, "Error getting 8710 data for user {0}: {1}", Page.User.Identity.Name, ex.Message), ex, Page.User.Identity.Name); } // Do the databinding itself AFTER the async queries, since databinding may not be thread safe. gvRollup.DataSource = lstModels; gvRollup.DataBind(); if (gvRollup.Rows.Count > 0) { gvRollup.Rows[gvRollup.Rows.Count - 1].Font.Bold = true; } gv8710.DataSource = lst8710; gv8710.DataBind(); }
private FlightQuery GetFlightQuery() { if (String.IsNullOrEmpty(Username)) { Username = Page.User.Identity.Name; } m_fq = new CannedQuery(Username) { DateRange = FlightQuery.DateRanges.AllTime, QueryName = txtQueryName.Text }; // General text m_fq.GeneralText = txtRestrict.Text; // Airports: if (txtAirports.Text.Length > 0) { m_fq.AirportList.Clear(); MatchCollection mc = regAirports.Matches(txtAirports.Text); foreach (Match m in mc) { if (!String.IsNullOrEmpty(m.Value)) { m_fq.AirportList.Add(m.Value); } } } m_fq.Distance = (FlightQuery.FlightDistance)Convert.ToInt32(rblFlightDistance.SelectedValue, CultureInfo.InvariantCulture); // Remaining sections QueryDateFromForm(); AircraftFromForm(); ModelsFromForm(); AircraftCharacteristicsFromForm(); FlightCharacteristicsFromForm(); CatClassFromForm(); CustomPropsFromForm(); // Typenames aren't exposed to the user; reset them here. m_fq.TypeNames.Clear(); foreach (string sz in TypeNames) { m_fq.TypeNames.Add(sz); } m_fq.Refresh(); return(m_fq); }
private FlightQuery GetFlightQuery() { if (String.IsNullOrEmpty(Username)) { Username = Page.User.Identity.Name; } m_fq = new CannedQuery(Username) { DateRange = FlightQuery.DateRanges.AllTime, QueryName = txtQueryName.Text }; // General text m_fq.GeneralText = txtRestrict.Text; // Airports: if (txtAirports.Text.Length > 0) { m_fq.AirportList = AirportList.NormalizeAirportList(txtAirports.Text); } m_fq.Distance = (FlightQuery.FlightDistance)Convert.ToInt32(rblFlightDistance.SelectedValue, CultureInfo.InvariantCulture); // Remaining sections QueryDateFromForm(); AircraftFromForm(); ModelsFromForm(); AircraftCharacteristicsFromForm(); FlightCharacteristicsFromForm(); CatClassFromForm(); CustomPropsFromForm(); // Typenames aren't exposed to the user; reset them here. m_fq.TypeNames = (string[])ViewState[szKeyVSTypes] ?? new string[0]; m_fq.Refresh(); return(m_fq); }
protected void Page_Load(object sender, EventArgs e) { Master.SelectedTab = tabID.tabLogbook; if (!IsPostBack) { try { if (Request.PathInfo.Length > 0) { try { CurrentFlightID = Convert.ToInt32(Request.PathInfo.Substring(1), CultureInfo.InvariantCulture); } catch (FormatException) { CurrentFlightID = LogbookEntry.idFlightNone; } } if (CurrentFlightID == LogbookEntry.idFlightNone) { throw new MyFlightbookException("No valid ID passed"); } string szFQParam = util.GetStringParam(Request, "fq"); if (!String.IsNullOrEmpty(szFQParam)) { try { Restriction = FlightQuery.FromBase64CompressedJSON(szFQParam); Restriction.Refresh(); } catch (ArgumentNullException) { } catch (FormatException) { } catch (JsonSerializationException) { } catch (JsonException) { } } DetailsTab dtRequested = DetailsTab.Flight; if (Enum.TryParse <DetailsTab>(util.GetStringParam(Request, "tabID"), out dtRequested)) { int iTab = (int)dtRequested; if (AccordionCtrl.Panes[iTab].Visible) { AccordionCtrl.SelectedIndex = iTab; } } LogbookEntryDisplay led = CurrentFlight = LoadFlight(CurrentFlightID); SetUpChart(TelemetryData); UpdateChart(); UpdateRestriction(); if (Viewer.CloudAhoyToken == null || Viewer.CloudAhoyToken.AccessToken == null) { lnkSendCloudAhoy.Visible = false; } lblOriginalFormat.Text = DataSourceType.DataSourceTypeFromFileType(led.Telemetry.TelemetryType).DisplayName; // allow selection of units if units are not implicitly known. switch (led.Telemetry.TelemetryType) { case DataSourceType.FileType.GPX: case DataSourceType.FileType.KML: case DataSourceType.FileType.NMEA: case DataSourceType.FileType.IGC: cmbAltUnits.Enabled = cmbSpeedUnits.Enabled = false; break; default: cmbAltUnits.Enabled = cmbSpeedUnits.Enabled = true; break; } // Bind details - this will bind everything else. fmvLE.DataSource = new LogbookEntryDisplay[] { led }; fmvLE.DataBind(); // shouldn't happen but sometimes does: GetUserAircraftByID returns null. Not quite sure why. Aircraft ac = (new UserAircraft(led.User).GetUserAircraftByID(led.AircraftID)) ?? new Aircraft(led.AircraftID); fmvAircraft.DataSource = new Aircraft[] { ac }; fmvAircraft.DataBind(); if (String.IsNullOrEmpty(CurrentFlight.FlightData) && dtRequested != DetailsTab.Aircraft && dtRequested != DetailsTab.Flight) { AccordionCtrl.SelectedIndex = (int)DetailsTab.Flight; } } catch (MyFlightbookException ex) { lblPageErr.Text = ex.Message; AccordionCtrl.Visible = mfbGoogleMapManager1.Visible = pnlMap.Visible = pnlAccordionMenuContainer.Visible = pnlFlightDesc.Visible = false; return; } // for debugging, have a download option that skips all the rest if (util.GetIntParam(Request, "d", 0) != 0 && !String.IsNullOrEmpty(CurrentFlight.FlightData)) { Response.Clear(); Response.ContentType = "application/octet-stream"; // Give it a name that is the brand name, user's name, and date. Convert spaces to dashes, and then strip out ANYTHING that is not alphanumeric or a dash. string szFilename = String.Format(CultureInfo.InvariantCulture, "Data{0}-{1}-{2}", Branding.CurrentBrand.AppName, MyFlightbook.Profile.GetUser(Page.User.Identity.Name).UserFullName, DateTime.Now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)).Replace(" ", "-"); string szDisposition = String.Format(CultureInfo.InvariantCulture, "inline;filename={0}.csv", System.Text.RegularExpressions.Regex.Replace(szFilename, "[^0-9a-zA-Z-]", "")); Response.AddHeader("Content-Disposition", szDisposition); Response.Write(CurrentFlight.FlightData); Response.End(); return; } } else { m_fd.Data = TelemetryData; UpdateChart(); } if (Restriction != null && !Restriction.IsDefault) { mfbFlightContextMenu.EditTargetFormatString = mfbFlightContextMenu.EditTargetFormatString + "?fq=" + HttpUtility.UrlEncode(Restriction.ToBase64CompressedJSONString()); } mfbFlightContextMenu.Flight = CurrentFlight; cmbAltUnits.SelectedValue = ((int)m_fd.AltitudeUnits).ToString(CultureInfo.InvariantCulture); cmbSpeedUnits.SelectedValue = ((int)m_fd.SpeedUnits).ToString(CultureInfo.InvariantCulture); if (!m_fd.HasDateTime) { lnkSendCloudAhoy.Visible = false; } // Set up any maps. mfbGoogleMapManager1.Map.Airports = RoutesList.Result; mfbGoogleMapManager1.ShowMarkers = true; mfbGoogleMapManager1.Map.PathVarName = PathLatLongArrayID; mfbGoogleMapManager1.Map.Path = m_fd.GetPath(); if (m_fd.HasLatLongInfo && m_fd.Data.Rows.Count > 1) { cmbFormat.Items[(int)DownloadFormat.KML].Enabled = true; cmbFormat.Items[(int)DownloadFormat.GPX].Enabled = true; mfbGoogleMapManager1.Mode = MyFlightbook.Mapping.GMap_Mode.Dynamic; pnlMapControls.Visible = true; } else { cmbFormat.Items[(int)DownloadFormat.KML].Enabled = false; cmbFormat.Items[(int)DownloadFormat.GPX].Enabled = false; mfbGoogleMapManager1.Mode = MyFlightbook.Mapping.GMap_Mode.Static; pnlMapControls.Visible = false; } lnkZoomToFit.NavigateUrl = mfbGoogleMapManager1.ZoomToFitScript; }
protected void Page_Load(object sender, EventArgs e) { Master.SelectedTab = tabID.tabLogbook; Master.Layout = MasterPage.LayoutMode.Accordion; if (!IsPostBack) { try { if (Request.PathInfo.Length > 0) { try { CurrentFlightID = Convert.ToInt32(Request.PathInfo.Substring(1), CultureInfo.InvariantCulture); } catch (FormatException) { CurrentFlightID = LogbookEntry.idFlightNone; } } if (CurrentFlightID == LogbookEntry.idFlightNone) { throw new MyFlightbookException("No valid ID passed"); } string szFQParam = util.GetStringParam(Request, "fq"); if (!String.IsNullOrEmpty(szFQParam)) { try { Restriction = FlightQuery.FromBase64CompressedJSON(szFQParam); Restriction.Refresh(); } catch (ArgumentNullException) { } catch (FormatException) { } catch (JsonSerializationException) { } catch (JsonException) { } } DetailsTab dtRequested = DetailsTab.Flight; if (Enum.TryParse <DetailsTab>(util.GetStringParam(Request, "tabID"), out dtRequested)) { int iTab = (int)dtRequested; if (AccordionCtrl.Panes[iTab].Visible) { AccordionCtrl.SelectedIndex = iTab; } } LogbookEntryDisplay led = CurrentFlight = LoadFlight(CurrentFlightID); SetUpChart(TelemetryData); UpdateChart(); UpdateRestriction(); // Bind details - this will bind everything else. fmvLE.DataSource = new LogbookEntryDisplay[] { led }; fmvLE.DataBind(); fmvAircraft.DataSource = new Aircraft[] { new UserAircraft(led.User).GetUserAircraftByID(led.AircraftID) }; fmvAircraft.DataBind(); if (String.IsNullOrEmpty(CurrentFlight.FlightData) && dtRequested != DetailsTab.Aircraft && dtRequested != DetailsTab.Flight) { AccordionCtrl.SelectedIndex = (int)DetailsTab.Flight; } } catch (MyFlightbookException ex) { lblPageErr.Text = ex.Message; AccordionCtrl.Visible = mfbGoogleMapManager1.Visible = pnlMap.Visible = pnlAccordionMenuContainer.Visible = pnlFlightDesc.Visible = false; return; } // for debugging, have a download option that skips all the rest if (util.GetIntParam(Request, "d", 0) != 0 && !String.IsNullOrEmpty(CurrentFlight.FlightData)) { Response.Clear(); Response.ContentType = "application/octet-stream"; // Give it a name that is the brand name, user's name, and date. Convert spaces to dashes, and then strip out ANYTHING that is not alphanumeric or a dash. string szFilename = String.Format(CultureInfo.InvariantCulture, "Data{0}-{1}-{2}", Branding.CurrentBrand.AppName, MyFlightbook.Profile.GetUser(Page.User.Identity.Name).UserFullName, DateTime.Now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)).Replace(" ", "-"); string szDisposition = String.Format(CultureInfo.InvariantCulture, "inline;filename={0}.csv", System.Text.RegularExpressions.Regex.Replace(szFilename, "[^0-9a-zA-Z-]", "")); Response.AddHeader("Content-Disposition", szDisposition); Response.Write(CurrentFlight.FlightData); Response.End(); return; } } else { m_fd.Data = TelemetryData; UpdateChart(); } // Set up any maps. mfbGoogleMapManager1.Map.Airports = RoutesList.Result; mfbGoogleMapManager1.ShowMarkers = true; mfbGoogleMapManager1.Map.PathVarName = PathLatLongArrayID; mfbGoogleMapManager1.Map.Path = m_fd.GetPath(); if (m_fd.HasLatLongInfo && m_fd.Data.Rows.Count > 1) { cmbFormat.Items[(int)DownloadFormat.KML].Enabled = true; cmbFormat.Items[(int)DownloadFormat.GPX].Enabled = true; } else { cmbFormat.Items[(int)DownloadFormat.KML].Enabled = false; cmbFormat.Items[(int)DownloadFormat.GPX].Enabled = false; } lnkZoomToFit.NavigateUrl = mfbGoogleMapManager1.ZoomToFitScript; }
protected void RefreshFormData() { FlightQuery fq = mfbSearchForm1.Restriction; fq.Refresh(); string szRestrict = fq.RestrictClause; string szQueryTemplate = ConfigurationManager.AppSettings["8710ForUserQuery"].ToString(); string szHaving = String.IsNullOrEmpty(fq.HavingClause) ? string.Empty : "HAVING " + fq.HavingClause; string szQueryClassTotals = String.Format(CultureInfo.InvariantCulture, szQueryTemplate, szRestrict, szHaving, "f.InstanceTypeID, f.CatClassID"); string szQueryMain = String.Format(CultureInfo.InvariantCulture, szQueryTemplate, szRestrict, szHaving, "f.category"); DBHelperCommandArgs args = new DBHelperCommandArgs(szQueryClassTotals); if (fq != null) { args.AddWithValue("localecode", System.Globalization.CultureInfo.CurrentCulture.Name.Replace("-", "_")); args.AddWithValue("shortDate", DBHelper.CSharpDateFormatToMySQLDateFormat()); foreach (MySqlParameter p in fq.QueryParameters()) { args.Parameters.Add(p); } } // get the class totals try { ClassTotals = new Dictionary <string, List <TotalsItem> >(); DBHelper dbh = new DBHelper(args); dbh.ReadRows((c) => { }, (d) => { string szCategory = (string)d["Category"]; string szClass = (string)d["Class"]; string szCatClass = (string)d["CatClass"]; if (!String.IsNullOrEmpty(szCategory) && !String.IsNullOrEmpty(szClass) && !String.IsNullOrEmpty(szCatClass)) { if (!ClassTotals.ContainsKey(szCategory)) { ClassTotals[szCategory] = new List <TotalsItem>(); } ClassTotals[szCategory].Add(new TotalsItem(szCatClass, Convert.ToDecimal(d["TotalTime"], CultureInfo.InvariantCulture))); } }); } catch (MySqlException ex) { throw new MyFlightbookException(String.Format(CultureInfo.CurrentCulture, "Error getting 8710 data for user {0}: {1}", Page.User.Identity.Name, ex.Message), ex, Page.User.Identity.Name); } using (MySqlCommand comm = new MySqlCommand()) { DBHelper.InitCommandObject(comm, args); using (comm.Connection) { MySqlDataReader dr = null; try { comm.CommandText = szQueryMain; comm.Connection.Open(); using (dr = comm.ExecuteReader()) { gv8710.DataSource = dr; gv8710.DataBind(); UpdateDescription(); if (!this.Master.IsMobileSession()) { MfbLogbook1.Restriction = fq; MfbLogbook1.RefreshData(); } } } catch (Exception ex) { throw new MyFlightbookException(String.Format(CultureInfo.CurrentCulture, "Error getting 8710 data for user {0}: {1}", Page.User.Identity.Name, ex.Message), ex, Page.User.Identity.Name); } finally { if (comm.Connection != null && comm.Connection.State != ConnectionState.Closed) { comm.Connection.Close(); } } } } }
protected void RefreshFormData() { FlightQuery fq = mfbSearchForm1.Restriction; fq.Refresh(); string szRestrict = fq.RestrictClause; string szQueryTemplate = ConfigurationManager.AppSettings["8710ForUserQuery"]; string szHaving = String.IsNullOrEmpty(fq.HavingClause) ? string.Empty : "HAVING " + fq.HavingClause; string szQueryClassTotals = String.Format(CultureInfo.InvariantCulture, szQueryTemplate, szRestrict, szHaving, "f.InstanceTypeID, f.CatClassID"); string szQueryMain = String.Format(CultureInfo.InvariantCulture, szQueryTemplate, szRestrict, szHaving, "f.category"); string szQueryRollup = String.Format(CultureInfo.InvariantCulture, ConfigurationManager.AppSettings["RollupGridQuery"], szRestrict, szHaving); DBHelperCommandArgs args = new DBHelperCommandArgs(szQueryClassTotals); if (fq != null) { foreach (MySqlParameter p in fq.QueryParameters()) { args.Parameters.Add(p); } } // get the class totals try { ClassTotals = new Dictionary <string, List <ClassTotal> >(); DBHelper dbh = new DBHelper(args); dbh.ReadRows((c) => { }, (d) => { string szCategory = (string)d["Category"]; string szClass = (string)d["Class"]; string szCatClass = (string)d["CatClass"]; if (!String.IsNullOrEmpty(szCategory) && !String.IsNullOrEmpty(szClass) && !String.IsNullOrEmpty(szCatClass)) { if (!ClassTotals.ContainsKey(szCategory)) { ClassTotals[szCategory] = new List <ClassTotal>(); } List <ClassTotal> lst = ClassTotals[szCategory]; ClassTotal ct = new ClassTotal() { ClassName = szCatClass, Total = Convert.ToDecimal(d["TotalTime"], CultureInfo.InvariantCulture), PIC = Convert.ToDecimal(d["PIC"], CultureInfo.InvariantCulture), SIC = Convert.ToDecimal(d["SIC"], CultureInfo.InvariantCulture) }; lst.Add(ct); } }); } catch (MySqlException ex) { throw new MyFlightbookException(String.Format(CultureInfo.CurrentCulture, "Error getting 8710 data for user {0}: {1}", Page.User.Identity.Name, ex.Message), ex, Page.User.Identity.Name); } using (MySqlCommand comm = new MySqlCommand()) { DBHelper.InitCommandObject(comm, args); using (comm.Connection) { MySqlDataReader dr = null; try { comm.CommandText = szQueryMain; comm.Connection.Open(); using (dr = comm.ExecuteReader()) { gv8710.DataSource = dr; gv8710.DataBind(); } comm.CommandText = szQueryRollup; using (dr = comm.ExecuteReader()) { gvRollup.DataSource = dr; gvRollup.DataBind(); if (gvRollup.Rows.Count > 0) { gvRollup.Rows[gvRollup.Rows.Count - 1].Font.Bold = true; } } } catch (Exception ex) { throw new MyFlightbookException(String.Format(CultureInfo.CurrentCulture, "Error getting 8710 data for user {0}: {1}", Page.User.Identity.Name, ex.Message), ex, Page.User.Identity.Name); } finally { if (comm.Connection != null && comm.Connection.State != ConnectionState.Closed) { comm.Connection.Close(); } } } } UpdateDescription(); if (!this.Master.IsMobileSession()) { MfbLogbook1.Restriction = fq; MfbLogbook1.RefreshData(); } }