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); } }
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)); }
/// <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); }
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(); }
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); }