public ActionResult Index(SearchTracking st) { try { ObjectId id; if (ObjectId.TryParse(st.TrackingNumber, out id)) { //try ti search in db Tracking t = _trackingCollection.AsQueryable().FirstOrDefault(x => x.Id == id); if (t != null) { if (string.IsNullOrEmpty(t.Password) || (!string.IsNullOrWhiteSpace(st.Password) && !string.IsNullOrEmpty(t.Password) && string.Equals(st.Password, t.Password))) { //found and unsecured or password is OK: SearchTrackingInfo si = new SearchTrackingInfo(); si.QrData = QRCodeHtmlHelper.CreateQrData(t.Id.ToString(), t.Password); TrackableItem ti = _trackableItemsCollection.AsQueryable().FirstOrDefault(x => x.Id == t.TrackingItemId); TrackableItemState currentState = ti.States.FirstOrDefault(state => state.Id == t.StateId); si.TrackingName = t.Id.ToString(); si.TrackabeItemName = ti.Name; si.State = currentState.Name; si.History = t.History; si.SupportsGeolocationServices = ti.SupportsGeolocationServices; ViewBag.StateNames = new Dictionary<string, string>(); ti.States.ToList() .ForEach( s => ((Dictionary<string, string>) ViewBag.StateNames).Add(s.Id.ToString(), s.Name)); return View("TrackingDetails", si); //return RedirectToAction("TrackingDetails", new {trackingId = st.TrackingNumber}); } else { //need password ViewBag.PasswordRequired = true; } } else { ModelState.AddModelError("", Resource.PublicTrackingController_Index_The_item_with_speficied_number_wasn_t_found_in_our_system__Please_verify_your_input_); } } else { ModelState.AddModelError("TrackingNumber", Resource.PublicTrackingController_Index_Incorrect_tracking_number__Please_verify_your_input_); //incorrect tracking number } } catch { return View(); } return View(); }
public ActionResult TrackingDetails(string trackingId) { try { ObjectId id = ObjectId.Parse(trackingId); Tracking t = _trackingCollection.AsQueryable().FirstOrDefault(x => x.Id == id); TrackableItem ti = _trackableItemsCollection.AsQueryable().FirstOrDefault(x => x.Id == t.TrackingItemId); TrackableItemState currentState = ti.States.FirstOrDefault(state => state.Id == t.StateId); ViewBag.StateNames = new Dictionary<string, string>(); ti.States.ToList().ForEach(s => ((Dictionary<string, string>)ViewBag.StateNames).Add(s.Id.ToString(), s.Name)); SearchTrackingInfo si = new SearchTrackingInfo(); si.QrData = QRCodeHtmlHelper.CreateQrData(t.Id.ToString(), t.Password); si.TrackingName = t.Id.ToString(); si.TrackabeItemName = ti.Name; si.State = currentState.Name; si.History = t.History; si.SupportsGeolocationServices = ti.SupportsGeolocationServices; return View(si); } catch (Exception) { return new HttpNotFoundResult("The tracking with a specified tracking number doesn't exist"); } }