/// <summary> /// Executes the workflow to deactivate a device. /// </summary> /// <param name="request">The deactivate device request.</param> /// <returns>The response.</returns> protected override NullResponse Process(DeactivateDeviceRequest request) { ThrowIf.Null(request, "request"); GetCurrentTerminalIdDataRequest dataRequest = new GetCurrentTerminalIdDataRequest(); string terminalId = this.Context.Execute <SingleEntityDataServiceResponse <string> >(dataRequest).Entity; // Slect all shifts. IList <Shift> shifts = ShiftDataDataServiceHelper.GetAllOpenedShiftsOnTerminal(this.Context, this.Context.GetPrincipal().ChannelId, terminalId, true); if (shifts.HasMultiple()) { throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_TerminalHasAnOpenShift); } var serviceRequest = new DeactivateDeviceServiceRequest(this.Context.GetPrincipal().DeviceNumber, terminalId, this.Context.GetPrincipal().UserId, this.Context.GetPrincipal().DeviceToken); DeactivateDeviceServiceResponse deactivationResponse = this.Context.Execute <DeactivateDeviceServiceResponse>(serviceRequest); if (!string.IsNullOrWhiteSpace(deactivationResponse.DeactivationResult.ErrorMessage)) { throw new DeviceAuthenticationException(SecurityErrors.Microsoft_Dynamics_Commerce_Runtime_DeviceDeactivationFailed, deactivationResponse.DeactivationResult.ErrorMessage); } // Log off the user. var userLogOffRequest = new UserLogOffRequest { StaffId = this.Context.GetPrincipal().UserId, LogOnConfiguration = this.Context.GetPrincipal().LogOnConfiguration }; AuthenticationHelper.LogOff(this.Context, userLogOffRequest); return(new NullResponse()); }
/// <summary> /// Deactivates the device. /// </summary> /// <param name="request">The device deactivation request.</param> /// <returns>The device deactivation response.</returns> private static DeactivateDeviceServiceResponse DeactivateDevice(DeactivateDeviceServiceRequest request) { Device device = ConstructDeviceFromToken(request.DeviceToken); DeactivateDeviceRealtimeRequest realtimeRequest = new DeactivateDeviceRealtimeRequest(request.DeviceNumber, request.TerminalId, request.StaffId, device.TokenData); DeactivateDeviceRealtimeResponse realtimeResponse = request.RequestContext.Execute <DeactivateDeviceRealtimeResponse>(realtimeRequest); // Updating the activated device in the channel db. if (realtimeResponse.DeactivationResult.Device != null) { CreateOrUpdateDeviceDataRequest createOrUpdateDeviceDataRequest = new CreateOrUpdateDeviceDataRequest(realtimeResponse.DeactivationResult.Device); request.RequestContext.Execute <NullResponse>(createOrUpdateDeviceDataRequest); } return(new DeactivateDeviceServiceResponse(realtimeResponse.DeactivationResult)); }