private NullResponse InsertShiftsStagingTable(CreateShiftDataRequest request)
            {
                var databaseAccessor = new ShiftsSqliteDatabaseAccessor(request.RequestContext);

                databaseAccessor.InsertShiftStaging(request.Shift);

                return(new NullResponse());
            }
            /// <summary>
            /// The data service method to insert the shift into staging table if the shift status is not closed.
            /// </summary>
            /// <param name="request">The create shift data request.</param>
            /// <returns>A null response.</returns>
            private NullResponse InsertShiftStagingTable(CreateShiftDataRequest request)
            {
                ThrowIf.Null(request, "request");
                ThrowIf.Null(request.Shift, "request.Shift");

                Shift shift = request.Shift;

                if (shift.Status == ShiftStatus.Closed)
                {
                    this.ConvertShiftToTableVariableParametersAndCallStoredProcedure(InsertShiftSprocName, request, isShiftStagingTableRow: false);
                }
                else
                {
                    this.ConvertShiftToTableVariableParametersAndCallStoredProcedure(UpsertShiftStagingSprocName, request);
                }

                return(new NullResponse());
            }
            /// <summary>
            /// Executes the create shift staging workflow.
            /// </summary>
            /// <param name="request">The new Shift request.</param>
            /// <returns>The new Shift response.</returns>
            protected override CreateShiftResponse Process(CreateShiftRequest request)
            {
                ThrowIf.Null(request, "request");

                // Validate Shift id.
                if (request.ShiftId == null || request.ShiftId <= 0)
                {
                    throw new ArgumentException("Shift identifier should not be null and should be greater than 0 to open a shift.");
                }

                GetCurrentTerminalIdDataRequest dataRequest = new GetCurrentTerminalIdDataRequest();

                request.TerminalId = this.Context.Execute <SingleEntityDataServiceResponse <string> >(dataRequest).Entity;
                this.ValidateCanOpenShift(request);

                Shift shift = this.CreateNewShift(request);

                var createShiftRequest = new CreateShiftDataRequest(shift);

                request.RequestContext.Runtime.Execute <NullResponse>(createShiftRequest, this.Context);

                return(new CreateShiftResponse(shift));
            }