public async Task <Office365LicenseModel> RemoveOffice365UserLicense(string userPrincipalName, string cloudPlusProductIdentifier)
        {
            var office365User =
                await _office365DbUserService.GetOffice365DatabaseUserWithLicensesAndOfferAsync(userPrincipalName);

            var office365License = office365User.Licenses.FirstOrDefault(l =>
                                                                         l.Office365Offer.CloudPlusProductIdentifier == cloudPlusProductIdentifier);

            if (office365License == null)
            {
                throw new ArgumentException($"Could not find user {userPrincipalName} " +
                                            $"license with CloudPlus product identifier {cloudPlusProductIdentifier}");
            }

            var licenseToRemove =
                await _cldpDbContext.Office365Licenses.FirstOrDefaultAsync(l => l.Id == office365License.Id);

            _cldpDbContext.Office365Licenses.Remove(licenseToRemove);

            await _cldpDbContext.SaveChangesAsync();

            return(new Office365LicenseModel
            {
                Id = office365License.Id,
                Office365Offer = new Office365OfferModel
                {
                    Id = office365License.Office365Offer.Id,
                    Office365Id = office365License.Office365Offer.Office365Id,
                    OfferName = office365License.Office365Offer.OfferName,
                    Sku = office365License.Office365Offer.Sku,
                    CloudPlusProductIdentifier = office365License.Office365Offer.CloudPlusProductIdentifier
                }
            });
        }
        public async Task <ExecutionResult> Execute(ExecuteContext <IDeletePartnerPlatformUserArguments> context)
        {
            var arguments = context.Arguments;

            var office365User = await _office365DbUserService.GetOffice365DatabaseUserWithLicensesAndOfferAsync(arguments.UserPrincipalName);

            var office365Customer = await _office365DbCustomerService.GetOffice365CustomerWithIncludesAsync(arguments.CompanyId);

            if (office365User == null)
            {
                throw new ArgumentException($"No Office 365 User with User Principal Name: {arguments.UserPrincipalName}");
            }

            if (office365Customer == null)
            {
                throw new ArgumentException($"No Office 365 Customer with Comapny Id: {arguments.CompanyId}");
            }

            await _office365UserService.DeleteOffice365UserAsync(office365User.Office365UserId, office365Customer.Office365CustomerId);

            return(context.CompletedWithVariables(new DeletePartnerPlatformUserLog
            {
                Office365UserId = office365User.Office365UserId,
                Office365CustomerId = office365Customer.Office365CustomerId
            }, new
            {
                office365User.Licenses.FirstOrDefault()?.Office365Offer.CloudPlusProductIdentifier
            }));
        }
        public async Task <ExecutionResult> Execute(ExecuteContext <IRemoveLicensePartnerPortalUserArguments> context)
        {
            var arguments = context.Arguments;

            var office365User = await _office365DbUserService.GetOffice365DatabaseUserWithLicensesAndOfferAsync(arguments.UserPrincipalName);

            var assignedLicense = office365User.Licenses
                                  .FirstOrDefault(l => l.Office365Offer.CloudPlusProductIdentifier == arguments.CloudPlusProductIdentifier);

            if (assignedLicense == null)
            {
                throw new NullReferenceException($"Could not find User {arguments.UserPrincipalName} license!");
            }

            await _office365LicenseService
            .RemoveUserLicense(arguments.Office365CustomerId, office365User.Office365UserId, assignedLicense.Office365Offer.Sku);

            return(context.Completed(new RemoveLicensePartnerPortalUserLog
            {
                Office365CustomerId = arguments.Office365CustomerId,
                Office365UserId = office365User.Office365UserId,
                Office365OfferSku = assignedLicense.Office365Offer.Sku
            }));
        }