public async Task <ExecutionResult> Execute(ExecuteContext <IAssignLicenseToPartnerPlatformUserArguments> context)
        {
            var arguments = context.Arguments;

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

            if (office365User == null)
            {
                throw new Exception($"No Office365 user with upn {arguments.UserPrincipalName}");
            }

            var office365Offer = await _office356DbOfferService
                                 .GetOffice365OfferAsync(arguments.CloudPlusProductIdentifier);

            await _office365LicenseService
            .AssignUserLicense(arguments.Office365CustomerId, office365User.Office365UserId, office365Offer.Sku);

            return(context.Completed());
        }
        public async Task <ExecutionResult> Execute(ExecuteContext <IRestorePartnerPlatformUserArguments> context)
        {
            var arguments = context.Arguments;

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

            if (office365User == null)
            {
                throw new Exception($"No Office365 user with upn {arguments.UserPrincipalName}");
            }
            var office365Customer = await _office365DbCustomerService.GetOffice365CustomerWithIncludesAsync(arguments.CompanyId);

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

            return(context.Completed(new RestorePartnerPlatformUserLog
            {
                Office365UserId = office365User.Office365UserId,
                Office365CustomerId = office365Customer.Office365CustomerId
            }));
        }
        public async Task Execute(ConsumeContext <IOffice365UserAssignLicenseCommand> context)
        {
            var builder = new RoutingSlipBuilder(NewId.NextGuid());
            var command = context.Message;

            var customer = await _office365DbCustomerService.GetOffice365CustomerAsync(command.CompanyId);

            var o365UserId =
                await _office365UserService.GetOffice365UserIdAsync(command.UserPrincipalName,
                                                                    customer.Office365CustomerId);

            var o365DbUser = await _office365DbUserService.GetOffice365DatabaseUserAsync(command.UserPrincipalName);

            builder.AddVariable("Office365CustomerId", customer.Office365CustomerId);

            if (o365UserId == null)
            {
                builder.AddActivity(Office365ServiceConstants.ActivityCreateOffice365PartnerPlatformUser,
                                    _activityConfigurator.GetActivityExecuteUri(context, typeof(ICreatePartnerPlatformUserActivity)),
                                    _activityOffice365UserArgumentsMapper.MapCreatePartnerPlatformUserArguments(command));
            }

            if (o365DbUser == null)
            {
                if (o365UserId != null)
                {
                    builder.AddVariable("Office365UserId", o365UserId);
                }

                builder.AddActivity(Office365ServiceConstants.ActivityCreateOffice365DatabaseUser,
                                    _activityConfigurator.GetActivityExecuteUri(context, typeof(ICreateDatabaseUserActivity)),
                                    _activityOffice365UserArgumentsMapper.MapCreateOffice365DatabaseUserArguments(command));
            }

            builder.AddActivity(Office365ServiceConstants.ActivityAssignLicenseOffice365PartnerPlatformUser,
                                _activityConfigurator.GetActivityExecuteUri(context,
                                                                            typeof(IAssignLicenseToPartnerPlatformUserActivity)),
                                _activityOffice365UserArgumentsMapper.MapAssignLicenseOffice365PartnerPlatformUserArguments(command));

            builder.AddActivity(Office365ServiceConstants.ActivityAssignLicenseOffice365DatabaseUser,
                                _activityConfigurator.GetActivityExecuteUri(context, typeof(IAssignLicenseToDatabaseUserActivity)),
                                _activityOffice365UserArgumentsMapper.MapAssignLicenseOffice365DatabaseUserArguments(command));

            if (command.UserRoles.Any())
            {
                builder.AddActivity(Office365ServiceConstants.ActivityAssignUserRoles,
                                    _activityConfigurator.GetActivityExecuteUri(context, typeof(IAssignUserRolesActivity)),
                                    _activityOffice365UserArgumentsMapper.MapAssignUserRolesArguments(command));
            }

            builder.AddActivity(Office365ServiceConstants.ActivitySendOffice365UserSetupEmail,
                                _activityConfigurator.GetActivityExecuteUri(context, typeof(ISendUserSetupEmailActivity)),
                                _activityOffice365UserArgumentsMapper.MapSendOffice365UserSetupEmailArguments(command));

            builder.AddVariable("userPrincipalName", context.Message.UserPrincipalName);
            builder.AddVariable("workflowActivityType", WorkflowActivityType.Office365UserAssignLicense.ToString());

            builder.AddSubscription(Office365ServiceConstants.QueueOffice365RoutingSlipEventUri,
                                    RoutingSlipEvents.Completed |
                                    RoutingSlipEvents.Faulted |
                                    RoutingSlipEvents.ActivityCompleted |
                                    RoutingSlipEvents.ActivityFaulted |
                                    RoutingSlipEvents.ActivityCompensated |
                                    RoutingSlipEvents.ActivityCompensationFailed);

            var routingSlip = builder.Build();

            await context.Send <IRoutingSlipStarted>(Office365ServiceConstants.QueueOffice365RoutingSlipStartedUri, new
            {
                builder.TrackingNumber,
                CreateTimestamp      = DateTime.UtcNow,
                Arguments            = context.Message,
                WorkflowActivityType = WorkflowActivityType.Office365UserAssignLicense.ToString()
            });

            await context.Execute(routingSlip);
        }