using System; using System.Collections.Generic; using System.Linq; using System.Web.Mvc; using NHibernate; using NHibernate.Linq; using Sleis.Models; using Sleis.ViewModels; using Sleis.Infrastructure; using Sleis.Service; using Sleis.Utility; using Sleis.Validation; using Sleis.Validation.Attribute; namespace Sleis.Controllers { [HandleError] public class FacilityController : BaseController { public string MissingSecurityQuestionMessage { get; set; } public int RequiredNumberOfQuestions { get; set; } public string VersionOfSubmissionSent { get; set; } public string NoSubmissionSent { get; set; } IReportService ReportService { get; set; } public override void Init() { base.Init(); ArgumentValidationUtility.ThrowOnNull(ReportService, "ReportService"); ArgumentValidationUtility.ThrowOnNull(MissingSecurityQuestionMessage, "MissingSecurityQuestionMessage"); ArgumentValidationUtility.ThrowOnNull(VersionOfSubmissionSent, "VersionOfSubmissionSent"); ArgumentValidationUtility.ThrowOnNull(NoSubmissionSent, "NoSubmissionSent"); } [Authorize] public ActionResult Add() { FacilityAddView view = new FacilityAddView(AppUser.User.Id); view.Fields = PageService.GetPageFields(GetPageContext("Add", "Facility")); return View(view); } [Authorize, AppRoleValidation(AppUserRoleType.FacilityEditor, AppUserRoleType.AgencyEditor), HttpPost] public ActionResult Add(FacilityAddView model) { ActionResult resultView = null; IList identifiers = new List(); TryUpdateModel>(identifiers, "Facility.Identifiers"); model.Facility.Identifiers = new List(); //A bit of a hack. Cannot just simply do ToList() because NHIbernate will error out. This is only way to retain child object type. foreach (AgencyFacilityIdentifierModel iden in identifiers) { model.Facility.Identifiers.Add(iden); } if (Validator.Validate(model, ModelState)) { //UserService.Audit(new AppEventModel(EventType.Audit, AppUser.User.Email, "Save Facility Emission Report", Request.UserHostAddress)); try { FacilityService.SaveAgencyFacility(model.Facility, AppUser.User.Id); TempData[Constants.GlobalMessageKey] = new SimpleMessage("The facility was successfully added."); resultView = RedirectToAction("Home", "Facility", new { facilityId = model.Facility.Id }); } catch (UniqueIdentifierException ex) { Log.Error("Master Facility", ex); TempData[Constants.GlobalMessageKey] = new SimpleMessage(ex.Message, true); //ModelState.AddModelError(dv.Item.Identifier, ex.Message); //TempData[Constants.GlobalMessageKey] = new SimpleMessage(ErrorOnSave, true); } catch (Exception ex) { Log.Error("Facility", ex); TempData[Constants.GlobalMessageKey] = new SimpleMessage(Constants.SavingDataErrorMessage, true); } } else { TempData[Constants.GlobalMessageKey] = new SimpleMessage(Constants.TabErrorMessage, true); } if (resultView == null) { //model.User = AppUser; model.Fields = PageService.GetPageFields(GetPageContext("Add", "Facility")); resultView = View(model); } return resultView; } [Authorize] public ActionResult Home(int facilityId) { SetSelectedAgencyFacility(facilityId); SelectedFacilityView fview = AppUser.SelectedFacility; // fview.Facility = Get The Facility ConsoleKeyInfo; return View(fview); } /// /// Currently Will only display Agency and Master Facility Records /// /// /// [Authorize] public ActionResult View(int id) { FacilityView view = new FacilityView(); view.Facility = FacilityService.GetFacility(id) as AgencyFacilityModel; view.Fields = PageService.GetPageFields(GetPageContext("Facility", "View")); view.CustomFields = GetCustomFields(id, 0, CustomFieldEntityType.AgencyFacility); return View(view); } [Authorize] public ActionResult DeleteReport(int reportId = 0, int facilityId = 0) { ReportService.DeleteReport(reportId); TempData[Constants.GlobalMessageKey] = new SimpleMessage("The emissions reports was successfully deleted.", false); return RedirectToAction("Home", "Facility", new { facilityId = facilityId }); } [Authorize] public ActionResult List() { if (AppUser.User.IsElectronicSigVerified && AppUser.User.ContactSecAnswers.Count < RequiredNumberOfQuestions) { TempData[Constants.GlobalMessageKey] = new SimpleMessage(MissingSecurityQuestionMessage, false); } return View(); } [Authorize, HttpGet] public JsonResult Get(int userId = 0) { ListView facs = new ListView(); if (userId > 0) { facs.List = FacilityService.GetFacilities(userId); } facs.List = facs.List.OrderBy(x => x.FacilityIdentifier).ToList(); return Json(facs, JsonRequestBehavior.AllowGet); } //[Authorize, AppRoleValidation(AppUserRoleType.FacilityEditor, AppUserRoleType.AgencyEditor), HttpGet] public JsonResult GetFacilities() { JsonResult result = new JsonResult(); result.Data = SessionUtility.CurrentUser.IsAgencyUser() ? FacilityService.GetFacilities(x=>x.IsMaster==true, x=>new AgencyFacilityModel{Id = x.Id, Identifier = x.FacilityIdentifier, FacName = x.FacName, Description = x.Description}).OrderBy(x=>x.FacName).ToList(): FacilityService.GetFacilitiesByUserId(SessionUtility.CurrentUser.Id).OrderBy(x=>x.FacName).ToList(); return Json(result, JsonRequestBehavior.AllowGet); } [Authorize] public ActionResult Detail(int id = 0) { if (id > 0) { SetSelectedFacility(id); return View(AppUser.SelectedFacility); } return View(); } [Authorize,AppRoleValidation(AppUserRoleType.FacilityEditor,AppUserRoleType.AgencyEditor), HttpGet] public ActionResult Edit(int id, bool master = false) { FacilityView fv = new FacilityView(); fv.Facility = FacilityService.GetFacility(id); fv.Fields = PageService.GetPageFields(GetPageContext("Facility", "Edit")); fv.CustomFields = GetCustomFields(fv.Facility.Id, 0, CustomFieldEntityType.AgencyFacility); foreach (FacilityContact c in fv.Facility.Contacts) { //inialize blank record so row gets generated on UI if (c.Contacts.Count == 0) { c.Contacts = new List(){ new AgencyFacilityContactMethod() }; } } return View(fv); } [Authorize, HttpPost] public ActionResult Edit(FacilityView model, ListcustomFields, FormCollection args) { AgencyFacilityModel facility = FacilityService.GetFacility(model.Facility.Id) as AgencyFacilityModel; TryUpdateModel(facility, "Facility"); //update changed values IList identifiers = new List(); TryUpdateModel>(identifiers, "Facility.Identifiers"); facility.Contacts = new List(); facility.Contacts.Add(model.EmissionContact); facility.Contacts.Add(model.PermitContact); facility.Contacts.Add(model.ComplianceContact); facility.Identifiers = new List(); //A bit of a hack. Cannot just simply do ToList() because NHIbernate will error out. This is only way to retain child object type. foreach (AgencyFacilityIdentifierModel iden in identifiers) { facility.Identifiers.Add(iden); } //reset facility model.Facility = facility; if (Validator.Validate(model, ModelState)) //if(true) { //UserService.Audit(new AppEventModel(EventType.Audit, AppUser.User.Email, "Save Facility Emission Report", Request.UserHostAddress)); //add contacts to domain model. //facility.FacilityAgencyIdentifiers try { FacilityService.SaveFacility(facility, facility.SiteAddress, facility.MailAddress, customFields); TempData[Constants.GlobalMessageKey] = new SimpleMessage("The facility was successfully saved."); return RedirectToAction("Home", "Facility", new { facilityId = model.Facility.Id }); } catch (Exception ex) { Log.Error("Error updating master facility: ", ex); TempData[Constants.GlobalMessageKey] = new SimpleMessage(Constants.SavingDataErrorMessage, true); } } else { TempData[Constants.GlobalMessageKey] = new SimpleMessage(Constants.TabErrorMessage, true); } //FacilityView model = new FacilityView(); model.Fields = PageService.GetPageFields(GetPageContext("Edit", "Facility")); model.Facility = facility; return View(model); } [Authorize] public ActionResult FacilityUser(int id = 0) { /*if (SessionUtility.CurrentUser.IsAgencyUser()) { //Not yet implemented, so redirect. return RedirectToAction("NotYetImplemented"); } */ if (id > 0) { SetSelectedFacility(id); return View(AppUser.SelectedFacility.Facility); } return View(); } //[Authorize, AppRoleValidation(AppUserRoleType.AgencyEditor,AppUserRoleType.FacilityEditor), HttpGet] [Authorize, HttpGet] public JsonResult GetFacilityUsers(int id) { ListView facs = new ListView(); if (id > 0) { facs.List = FacilityService.GetFacilityUsers(id); } return Json(facs, JsonRequestBehavior.AllowGet); } [Authorize] public ActionResult ViewUser(int id = 0, int facilityId = 0) { return RedirectToAction("ViewUser", "User", new { id = id, facilityId = facilityId }); } [Authorize,AppRoleValidation(AppUserRoleType.AgencyEditor,AppUserRoleType.FacilityEditor)] public ActionResult ManageUser(int id = 0, int facilityId = 0) { return RedirectToAction("ManageUser", "User", new { id = id, facilityId = facilityId }); } [Authorize] public ActionResult Report(int id, int facilityId) { ArgumentValidationUtility.ThrowOnDefault(id, "id"); ArgumentValidationUtility.ThrowOnDefault(facilityId, "facilityId"); SetSelectedFacility(facilityId); ReportView facReport = new ReportView(FacilityService.AmendmentRequestData.HasPendingRequest(id), FacilityService.RepudiationData.GetPendingRepudiationsCount(id)); facReport.Report = FacilityService.GetFacilityEmissionReport(facilityId, id); //FacilityService.AddFacilityEmissionReport(facReport.Report); facReport.SubmissionVersion = FacilityService.FacilityData.GetVersionOfEmissionReportSubnission(id); if (facReport.SubmissionVersion == 1) { facReport.SubmissionMessage = String.Format("{0} {1}", facReport.SubmissionVersion, VersionOfSubmissionSent.Replace("versions", "version").Replace("have", "has")); } else if (facReport.SubmissionVersion > 1) { facReport.SubmissionMessage = String.Format("{0} {1}", facReport.SubmissionVersion, VersionOfSubmissionSent); } else { facReport.SubmissionMessage = NoSubmissionSent; } return View(facReport); } public ActionResult SelectionTest() { return View(); } [Authorize] public ActionResult Selection() { if (Request.UrlReferrer == null) { return RedirectToAction("FileNotFound", "Utility"); } TempData[Constants.ReturnUrlKey] = Request.UrlReferrer.AbsoluteUri; SessionUtility.SetSessionVar(Constants.ReturnUrlKey, Request.UrlReferrer.AbsoluteUri); FacilitySelectionView view = new FacilitySelectionView(); view.Categories.AddRange(FacilityService.FacilityData.GetCategories()); view.ReportingYears.AddRange(FacilityService.FacilityData.GetReportingYears()); return View(view); } //Return selected results to calling page. [Authorize, HttpPost] public ActionResult Selection(FacilitySelectionView model) { SessionUtility.SetSessionVar>("SelectedFacilities", model.SelectedFacilities); return new RedirectResult(SessionUtility.Get(Constants.ReturnUrlKey)); } //Retun to calling pgae [Authorize] public ActionResult SelectionCancel() { return new RedirectResult(SessionUtility.Get(Constants.ReturnUrlKey)); } [Authorize, HttpGet] public JsonResult GetFacilitiesByCategoriesAndYears(string selCategory, string selYear) { bool hasNoReportsSubmitted = false; bool hasNullCategoryCode = false; List parsedCategories = new List(); if (selCategory != null && selCategory!="null" && selCategory!="undefined") { foreach (string cat in selCategory.Split(',')) { if (!String.IsNullOrEmpty(cat)) { parsedCategories.Add(cat); } else { hasNullCategoryCode = true; } } } List parsedYears = new List(); if (selYear != null && selYear!="null" && selCategory!="undefined") { foreach (string year in selYear.Split(',')) { if (!String.IsNullOrEmpty(year)) { parsedYears.Add(int.Parse(year)); } else { hasNoReportsSubmitted = true; } } } ListView facilities = new ListView(); facilities.List = FacilityService.GetFacilitiesByCategoriesAndYears(parsedCategories.ToArray(), parsedYears.ToArray(), hasNullCategoryCode, hasNoReportsSubmitted); //Test data -- AgencyFacilityModel model = FacilityService.FacilityData.GetAgencyFacility(facilities.List[0].Id); return Json(facilities, JsonRequestBehavior.AllowGet); } //[Authorize, HttpPost] //public ActionResult Selection() //{ // return View(); //} } }