Example #1
0
        // 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));
        }
Example #2
0
        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));
        }