示例#1
0
        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);
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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());
        }