Exemplo n.º 1
0
            public static async void CreateShiftV2(CreateShiftRequest request, CreateShiftResponse response)
            {
                ThrowIf.Null(request, "CreateShiftRequest");
                ThrowIf.Null(response, "CreateShiftResponse");

                string inventLocationDataAreaId = request.RequestContext.GetChannelConfiguration().InventLocationDataAreaId;

                CreateShiftRTSAsync(request, response);

                using (var databaseContext = new DatabaseContext(request))
                {
                    ParameterSet parameters = new ParameterSet();

                    parameters["@CHANNEL"]           = response.Shift.StoreRecordId;
                    parameters["@TERMINALID"]        = response.Shift.TerminalId;
                    parameters["@STOREID"]           = response.Shift.StoreId;
                    parameters["@SHIFTID"]           = response.Shift.ShiftId;
                    parameters["@STAFFID"]           = response.Shift.StaffId;
                    parameters["@CURRENTSTAFFID"]    = response.Shift.CurrentStaffId;
                    parameters["@STATUS"]            = response.Shift.Status;
                    parameters["@CURRENTTERMINALID"] = response.Shift.CurrentTerminalId;
                    parameters["@ISSHARED"]          = response.Shift.IsShared;
                    parameters["@STARTDATETIMEUTC"]  = DateTimeOffsetDataHelper.GetDbNullableDateTime(response.Shift.StartDateTime);
                    parameters["@STATUSDATETIMEUTC"] = DateTimeOffsetDataHelper.GetDbNullableDateTime(response.Shift.StatusDateTime);
                    parameters["@DATAAREAID"]        = inventLocationDataAreaId;
                    parameters["@CASHDRAWER"]        = response.Shift.CashDrawer;

                    databaseContext.ExecuteStoredProcedureNonQuery("[ext].[CreateNewShift]", parameters);
                }
            }
Exemplo n.º 2
0
            public static async Task <bool> CreateShiftRTSAsync(CreateShiftRequest request, CreateShiftResponse response)
            {
                Func <bool> function = new Func <bool>(() =>
                {
                    string inventLocationDataAreaId = request.RequestContext.GetChannelConfiguration().InventLocationDataAreaId;

                    InvokeExtensionMethodRealtimeRequest extensionRequest = new InvokeExtensionMethodRealtimeRequest(
                        "CreateNewShift",
                        response.Shift.StoreRecordId,
                        response.Shift.TerminalId,
                        response.Shift.StoreId,
                        response.Shift.ShiftId,
                        response.Shift.StaffId,
                        response.Shift.CurrentStaffId,
                        Convert.ToInt32(response.Shift.Status),
                        response.Shift.CurrentTerminalId,
                        response.Shift.IsShared,
                        response.Shift.CashDrawer,
                        inventLocationDataAreaId);

                    InvokeExtensionMethodRealtimeResponse RTSResponse = request.RequestContext.Execute <InvokeExtensionMethodRealtimeResponse>(extensionRequest);
                    ReadOnlyCollection <object> results = RTSResponse.Result;
                    bool success = Convert.ToBoolean(results[0]);
                    return(success);
                });

                return(await Task.Run <bool>(function));
            }
Exemplo n.º 3
0
 /// <summary>
 /// Return true if the shifts overlap, return false if they do not.
 /// </summary>
 /// <param name="a"></param>
 /// <param name="b"></param>
 /// <returns></returns>
 public static bool DoesShiftsOverlap(Shift a, CreateShiftRequest b)
 {
     if (a.Year == b.Year &&
         a.Month == b.Month &&
         a.Day == b.Day &&
         !(a.EndTime <= b.StartTime || a.StartTime >= b.EndTime))
     {
         return(true);
     }
     return(false);
 }
Exemplo n.º 4
0
            public static void CreateShiftAsync(CreateShiftRequest request, CreateShiftResponse response)
            {
                ThrowIf.Null(request, "CreateShiftRequest");
                ThrowIf.Null(response, "CreateShiftResponse");

                string inventLocationDataAreaId = request.RequestContext.GetChannelConfiguration().InventLocationDataAreaId;

                Task.Run <bool>(() => {
                    InvokeExtensionMethodRealtimeRequest extensionRequest = new InvokeExtensionMethodRealtimeRequest(
                        "CreateNewShift",
                        response.Shift.StoreRecordId,
                        response.Shift.TerminalId,
                        response.Shift.StoreId,
                        response.Shift.ShiftId,
                        response.Shift.StaffId,
                        response.Shift.CurrentStaffId,
                        Convert.ToInt32(response.Shift.Status),
                        response.Shift.CurrentTerminalId,
                        response.Shift.IsShared,
                        response.Shift.CashDrawer,
                        inventLocationDataAreaId);

                    InvokeExtensionMethodRealtimeResponse RTSResponse = request.RequestContext.Execute <InvokeExtensionMethodRealtimeResponse>(extensionRequest);
                    ReadOnlyCollection <object> results = RTSResponse.Result;
                    bool success = Convert.ToBoolean(results[0]);
                    return(success);
                });

                Task.Run(() =>
                {
                    using (var databaseContext = new DatabaseContext(request))
                    {
                        ParameterSet parameters          = new ParameterSet();
                        parameters["@CHANNEL"]           = response.Shift.StoreRecordId;
                        parameters["@TERMINALID"]        = response.Shift.TerminalId;
                        parameters["@STOREID"]           = response.Shift.StoreId;
                        parameters["@SHIFTID"]           = response.Shift.ShiftId;
                        parameters["@STAFFID"]           = response.Shift.StaffId;
                        parameters["@CURRENTSTAFFID"]    = response.Shift.CurrentStaffId;
                        parameters["@STATUS"]            = response.Shift.Status;
                        parameters["@CURRENTTERMINALID"] = response.Shift.CurrentTerminalId;
                        parameters["@ISSHARED"]          = response.Shift.IsShared;
                        parameters["@STARTDATETIMEUTC"]  = DateTimeOffsetDataHelper.GetDbNullableDateTime(response.Shift.StartDateTime);
                        parameters["@STATUSDATETIMEUTC"] = DateTimeOffsetDataHelper.GetDbNullableDateTime(response.Shift.StatusDateTime);
                        parameters["@DATAAREAID"]        = inventLocationDataAreaId;
                        parameters["@CASHDRAWER"]        = response.Shift.CashDrawer;

                        databaseContext.ExecuteStoredProcedureNonQuery("[ext].[CreateNewShift]", parameters);
                    }
                }).Wait();
            }
Exemplo n.º 5
0
        public async Task <IActionResult> Create([FromRoute] Guid employeeId, [FromBody] CreateShiftRequest request)
        {
            #region Error-handling
            // NOTE:    An issue with amount of days per month where a month might have 30 days, but 31 is a valid input
            //          Would be better to have a type like DateTime that handles this
            if (request.Day < 1 || request.Day > 31 || request.Month < 1 || request.Month > 12 || request.Year < 1 ||
                new DateTime(request.Year, request.Month, request.Day) < DateTime.Now)
            {
                return(StatusCode(StatusCodes.Status406NotAcceptable, "The given date for the shift is not valid!" +
                                  "\nMake sure the date is not in the past, and that Day is between 1-31, and Month is between 1-12!"));
            }
            // Handle out of bounds start time
            if (request.StartTime < 0 || request.StartTime > 23)
            {
                return(StatusCode(StatusCodes.Status406NotAcceptable, "The time given for the start of the shift is not valid! Must be between 0 and 23!"));
            }
            // Handle out of bounds end time
            if (request.EndTime <= request.StartTime || request.EndTime > 24)
            {
                return(StatusCode(StatusCodes.Status406NotAcceptable, "The time given for the end of the shift is not valid! Must be higher than the start time (" + request.StartTime + "), but no higher than 24!"));
            }
            // Check that shift does not overlap with an existing shift for the given employee
            List <Shift> employeeShifts = await _shiftService.GetShiftsForSpecificEmployeeByIdAsync(employeeId);

            for (int i = 0; i < employeeShifts.Count; i++)
            {
                if (DoesShiftsOverlap(employeeShifts[i], request))
                {
                    return(StatusCode(StatusCodes.Status406NotAcceptable, "The new time for this shift overlaps with a different shift (Id:" + employeeShifts[i].Id + ") for this employee (Id:" + employeeId + ")"));
                }
            }
            #endregion

            Shift shift = new Shift {
                ShiftOwnerId = employeeId, Day = request.Day, Month = request.Month,
                Year         = request.Year, StartTime = request.StartTime, EndTime = request.EndTime
            };

            await _shiftService.CreateShiftAsync(shift);

            string baseUrl     = HttpContext.Request.Scheme + "//" + HttpContext.Request.Host.ToUriComponent();
            string locationUri = baseUrl + "/" + ApiRoutes.Shifts.Get.Replace("{shiftId}", shift.Id.ToString());

            ShiftResponse response = new ShiftResponse {
                Id = shift.Id
            };
            return(Created(locationUri, response));
        }
 private void CreateShift(CreateShiftRequest request, CreateShiftResponse response)
 {
     UnclosedShiftDataServiceAsync.CreateShiftAsync(request, response);
 }