private async Task <bool> DoClockOut(string actualServicePerformed) { ClockOutDto clockOutDto = new ClockOutDto(); clockOutDto.JobId = long.Parse(this.btnClockInClick.CommandParameter.ToString()); clockOutDto.ActualClockOut = DateTime.Now; clockOutDto.ActualServicePerformed = actualServicePerformed; double weight = 0.0; if (CurrentJob.JobRequiresWeighInOut && !actualServicePerformed.StartsWith("Skipped")) { if (double.TryParse(txtWeightOut.Text, out weight)) { clockOutDto.ActualWeightOut = weight; } else { await DisplayAlert("Weigh Out is Required", "Before you clock out and leave the site, you must Weigh Out.", "OK"); SetSiteCompleteDisplay(btnClockInClick); return(false); } } bool success = await TripContext.ClockOut(clockOutDto); return(success); }
public async Task <bool> ClockOutAsync(ClockOutDto clockOutDto) { try { using (var client = new HttpClient()) { client.BaseAddress = new Uri(TripApiUrlBase); string requestUrl = $"PostClockOut"; var request = GetRequestHeaders(HttpMethod.Get, requestUrl); var jsonContent = JsonConvert.SerializeObject(clockOutDto); request.Content = new StringContent(jsonContent, Encoding.UTF8, "application/json"); var result = await client.SendAsync(request).ConfigureAwait(false); if (result.IsSuccessStatusCode) { string serializedJson = await result.Content.ReadAsStringAsync().ConfigureAwait(false); clockOutDto = JsonConvert.DeserializeObject <ClockOutDto>(serializedJson); return(true); } else { return(false); } } } catch (Exception ex) { var message = ex.Message; return(false); } }
public static async Task <bool> ClockOut(ClockOutDto clockOutDto) { bool success = await Task.Run <bool>(async() => { var api = new ApiClient.ApiClient(Credentials.TruckNumber, Credentials.ApiKey); return(await api.ClockOutAsync(clockOutDto)); }); if (success) { ClockInOutState = String.Empty; } return(success); }
public IHttpActionResult PostClockOut([FromBody] ClockOutDto clockOut) { Log.Info($"Clock Out for job {clockOut.JobId.ToString()} at {clockOut.ActualClockOut.ToString()}, service: {clockOut.ActualServicePerformed}, weight: {(clockOut.ActualWeightOut.HasValue? clockOut.ActualWeightOut.Value.ToString(): "null")}"); Job job = db.Jobs.Include("TripRoute.Trip").FirstOrDefault(j => j.JobId.Equals(clockOut.JobId)); if (VerifyBasicAuthCredentials(job.ActualTruckId.Value)) { if (job != null && job.TripRoute.TripStatusId == Enums.TripStatusEnum.InProcess.GetHashCode() && job.TripStatusId == Enums.TripStatusEnum.InProcess.GetHashCode()) { try { job.ActualClockOut = clockOut.ActualClockOut; if (clockOut.ActualServicePerformed.ToLower() == job.JobServiceName.ToLower()) { job.ActualPropertyFlatRateId = job.JobPropertyFlatRateId; job.TripStatusId = Enums.TripStatusEnum.Completed.GetHashCode(); } else if (!clockOut.ActualServicePerformed.ToLower().StartsWith("skipped")) { var propertyFlatRateContract = db.PropertyFlatRates.FirstOrDefault(p => p.PropertyFlatRateId.Equals(job.JobPropertyFlatRateId)); job.ActualPropertyFlatRateId = LookupAltService(propertyFlatRateContract, clockOut.ActualServicePerformed); if (!job.ActualPropertyFlatRateId.HasValue) { job.IsFlaggedForReview = true; job.Comments += $" Actual Service performed was {clockOut.ActualServicePerformed}. Cannot determine the matching Flat Rate."; } else { job.IsFlaggedForReview = true; job.Comments += $" Actual service {clockOut.ActualServicePerformed} is different than requested service {job.JobServiceName}."; } } else if (clockOut.ActualServicePerformed == Enums.TripStatusEnum.SkippedNotPlowed.ToString()) { job.TripStatusId = Enums.TripStatusEnum.SkippedNotPlowed.GetHashCode(); } else if (clockOut.ActualServicePerformed == Enums.TripStatusEnum.SkippedNoAccess.ToString()) { job.TripStatusId = Enums.TripStatusEnum.SkippedNoAccess.GetHashCode(); } if (job.JobRequiresWeighInOut) { job.ActualWeightOut = clockOut.ActualWeightOut; bool compliant = (job.ActualWeightOut.HasValue && job.ActualWeightIn.HasValue); job.ActualTonnage = compliant? job.ActualWeightOut - job.ActualWeightIn : null; if (!compliant) { job.IsFlaggedForReview = true; job.Comments += $" Property requires Weigh In and Out but one or both were not provided."; } } job.TripRoute.CompletedStops++; if (job.TripRoute.CompletedStops == job.TripRoute.ScheduledStops) { job.TripRoute.TripStatusId = Enums.TripStatusEnum.Completed.GetHashCode(); } db.SaveChanges(); return(Ok(clockOut)); } catch (Exception ex) { Log.Error("Error: " + ex.InnerException + "Message: " + ex.Message + "StackTrace: " + ex.StackTrace); return(NotFound()); } } else { return(Unauthorized()); } } return(NotFound()); }