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