// POST: /Organisation/Dashboard public async Task <ActionResult> Dashboard(OrganisationMembershipActionViewModel model) { Organisation organisation = await db.Organisations.FindAsync(userContext.ItemId); if (organisation == null) { return(HttpNotFound()); } if (ModelState.IsValid) { OrganisationProvider item = organisation.OrganisationProviders.FirstOrDefault(x => x.ProviderId == model.Id); if (model.Action != "switchto" && !Permission.HasPermission(false, true, Permission.PermissionName.CanManageOrganisationProviderMembership)) { model.Action = "notpermitted"; } switch (model.Action) { case "invite": if (item != null) { ViewBag.Message = AppGlobal.Language.GetText(this, "AlreadyAssociated", "This provider is already associated with your organisation."); break; } OrganisationProvider op = db.OrganisationProviders.Create(); op.OrganisationId = organisation.OrganisationId; op.ProviderId = model.Id; op.IsAccepted = false; op.IsRejected = false; op.CanOrganisationEditProvider = false; op.Reason = null; organisation.OrganisationProviders.Add(op); ProvisionUtilities.SendProviderMembershipEmail( db, Constants.EmailTemplates.ProviderInviteNotification, model.Id, userContext.ItemId.Value, null); ShowGenericSavedMessage(); break; case "remove": ProvisionUtilities.SendProviderMembershipEmail( db, Constants.EmailTemplates.ProviderRemovedFromOrganisation, model.Id, userContext.ItemId.Value, null); db.OrganisationProviders.Remove(item); ShowGenericSavedMessage(); break; case "withdraw": ProvisionUtilities.SendProviderMembershipEmail( db, Constants.EmailTemplates.ProviderInviteWithdrawn, model.Id, userContext.ItemId.Value, null); db.OrganisationProviders.Remove(item); ShowGenericSavedMessage(); break; case "switchto": if (Permission.HasPermission(false, true, Permission.PermissionName.CanViewAdministratorHomePage)) { new RecentProvisions(Permission.GetCurrentUserId()).Add("P" + model.Id, model.Name); } bool success = item != null && item.CanOrganisationEditProvider && UserContext.SetUserContext(db, UserContext.UserContextName.Provider, model.Id); if (!success) { ViewBag.Message = AppGlobal.Language.GetText(this, "UnableToSwitch", "Unable to switch to the selected provider."); } else { return(RedirectToAction("Dashboard", "Provider")); } break; default: ViewBag.Message = AppGlobal.Language.GetText(this, "NotPermitted", "Unable to perform that action."); break; } await db.SaveChangesAsync(); } // Something happened so return the model var viewModel = new OrganisationDashboardViewModel(organisation); return(View(viewModel)); }
public async Task <ActionResult> Membership(OrganisationMembershipActionViewModel model) { Provider provider = await db.Providers.FindAsync(userContext.ItemId); if (provider == null) { return(HttpNotFound()); } if (ModelState.IsValid) { OrganisationProvider item = provider.OrganisationProviders.FirstOrDefault(x => x.OrganisationId == model.Id); if (item == null) { return(HttpNotFound()); } switch (model.Action) { case "accept": item.IsAccepted = true; item.IsRejected = false; item.CanOrganisationEditProvider = model.Flag.HasValue && !model.Flag.Value; item.RespondedByUserId = Permission.GetCurrentUserId(); item.RespondedByDateTimeUtc = DateTime.UtcNow; ProvisionUtilities.SendOrganisationMembershipEmail( db, item.CanOrganisationEditProvider ? Constants.EmailTemplates.ProviderInviteAcceptedCanEdit : Constants.EmailTemplates.ProviderInviteAcceptedCannotEdit, userContext.ItemId.Value, model.Id, null); ShowGenericSavedMessage(); break; case "reject": item.IsAccepted = false; item.IsRejected = true; item.Reason = model.Reason; item.RespondedByUserId = Permission.GetCurrentUserId(); item.RespondedByDateTimeUtc = DateTime.UtcNow; ProvisionUtilities.SendOrganisationMembershipEmail( db, Constants.EmailTemplates.ProviderInviteRejected, userContext.ItemId.Value, model.Id, new List <EmailParameter> { new EmailParameter("%REASONS%", model.Reason) }); ShowGenericSavedMessage(); break; case "leave": item.IsAccepted = true; item.IsRejected = true; item.Reason = model.Reason; item.RespondedByUserId = Permission.GetCurrentUserId(); item.RespondedByDateTimeUtc = DateTime.UtcNow; ProvisionUtilities.SendOrganisationMembershipEmail( db, Constants.EmailTemplates.ProviderLeftOrganisation, userContext.ItemId.Value, model.Id, new List <EmailParameter> { new EmailParameter("%REASONS%", model.Reason) }); ShowGenericSavedMessage(); break; case "toggleorg": item.CanOrganisationEditProvider = model.Flag.HasValue && model.Flag.Value; ProvisionUtilities.SendOrganisationMembershipEmail( db, item.CanOrganisationEditProvider ? Constants.EmailTemplates.ProviderAllowedOrganisationToManageData : Constants.EmailTemplates.ProviderDisallowedOrganisationToManageData, userContext.ItemId.Value, model.Id, null); ShowGenericSavedMessage(); break; default: ViewBag.Message = AppGlobal.Language.GetText(this, "NotPermitted", "Unable to perform that action."); break; } await db.SaveChangesAsync(); } var viewModel = new ProviderOrganisationsViewModel(provider); return(View(viewModel)); }