Пример #1
0
        public async Task Search_Call()
        {
            //--------------    Arrange     -------------

            CommonArrangements();
            var searchRequest = new Last24HoursRequest();

            //--------------    Act     -------------
            var resp = await last24HoursApplicationService.SearchAsync(searchRequest);


            //--------------    Assert     -------------
            A.CallTo(() => last24HoursDataAccess.ListAsync(null, null, null)).WithAnyArguments().MustHaveHappened();
        }
        private Expression <Func <Last24HoursDTO, bool> > GetQueryFilter(Last24HoursRequest search)
        {
            Expression <Func <Last24HoursDTO, bool> > queryFilter = p => true;

            if (search.AmigoTenantTUserId != null)
            {
                queryFilter = queryFilter.And(p => p.AmigoTenantTUserId == search.AmigoTenantTUserId);
            }


            if (!string.IsNullOrEmpty(search.TractorNumber))
            {
                queryFilter = queryFilter.And(p => p.TractorNumber.Contains(search.TractorNumber));
            }

            if (!string.IsNullOrEmpty(search.ShipmentIdOrCostCenterCode))
            {
                queryFilter = queryFilter.And(p => p.ChargeNo.Contains(search.ShipmentIdOrCostCenterCode));
            }

            if (!string.IsNullOrEmpty(search.ChassisNumber))
            {
                queryFilter = queryFilter.And(p => p.ChassisNumber.Contains(search.ChassisNumber));
            }

            if (!string.IsNullOrEmpty(search.EquipmentNumber))
            {
                queryFilter = queryFilter.And(p => p.EquipmentNumber.Contains(search.EquipmentNumber));
            }

            //if (!string.IsNullOrEmpty(search.ActivityTypeCode))
            //{
            //    queryFilter = queryFilter.And(p => p.ActivityTypeCode == search.ActivityTypeCode);
            //}

            if (search.ActivityTypeCodes != null && search.ActivityTypeCodes.Count() > 0)
            {
                queryFilter = queryFilter.And(p => search.ActivityTypeCodes.Contains(p.ActivityTypeCode));
            }


            return(queryFilter);
        }
        public async Task <ResponseDTO <List <Last24HoursDTO> > > SearchAsync(Last24HoursRequest search)
        {
            //---------------------------------------------------------------------------------------------
            //----------------  Get driver's last 24 hours logs from AmigoTenant DB -------------------
            //---------------------------------------------------------------------------------------------
            var queryFilter = GetQueryFilter(search);
            IEnumerable <Last24HoursDTO> eventLogs;

            Expression <Func <Last24HoursDTO, object> > expressionReportedActivityDate = p => p.ReportedActivityDate;
            List <OrderExpression <Last24HoursDTO> >    orderExpressions = new List <OrderExpression <Last24HoursDTO> >();

            orderExpressions.Add(new OrderExpression <Last24HoursDTO>(OrderType.Desc, expressionReportedActivityDate));

            var mostRecent = await _last24HoursDataAccess.FirstOrDefaultAsync(queryFilter, orderExpressions.ToArray());

            if (mostRecent != null)
            {
                var before24Hours = mostRecent.ReportedActivityDate.Value.Subtract(new TimeSpan(24, 0, 0));
                eventLogs =
                    await
                    _last24HoursDataAccess.ListAsync(queryFilter.And(w => w.ReportedActivityDate >= before24Hours));

                //eventLogs = eventLogs.Select(s => s.);
                eventLogs.ToList().ForEach(x => x.Username = x.Username.ToUpper());

                var myGroup = eventLogs.GroupBy(
                    p => new
                {
                    p.AmigoTenantTUserId,
                    p.Username,
                    p.Latitude,
                    p.Longitude,
                    p.ChargeNo,
                    p.ChargeType,
                    p.ActivityTypeName,
                    p.ActivityTypeCode,
                    p.TractorNumber,
                    p.FirstName,
                    p.LastName,
                    p.ChassisNumber,
                    p.EquipmentNumber
                }

                    );
                eventLogs = myGroup
                            .Select(el => new Last24HoursDTO
                {
                    AmigoTenantTUserId       = el.Key.AmigoTenantTUserId,
                    Username                 = el.Key.Username,
                    Latitude                 = el.Key.Latitude,
                    Longitude                = el.Key.Longitude,
                    ChargeNo                 = el.Key.ChargeNo,
                    ChargeType               = el.Key.ChargeType,
                    ActivityTypeName         = el.Key.ActivityTypeName,
                    ActivityTypeCode         = el.Key.ActivityTypeCode,
                    TractorNumber            = el.Key.TractorNumber,
                    FirstName                = el.Key.FirstName,
                    LastName                 = el.Key.LastName,
                    ChassisNumber            = el.Key.ChassisNumber,
                    EquipmentNumber          = el.Key.EquipmentNumber,
                    ReportedActivityTimeZone = el.Last().ReportedActivityTimeZone,
                    ReportedActivityDate     = el.Last().ReportedActivityDate,
                    Product           = el.Last().Product,
                    Origin            = el.Last().Origin,
                    Destination       = el.Last().Destination,
                    ServiceName       = el.Last().ServiceName,
                    EquipmentTypeName = el.Last().EquipmentTypeName
                }).ToList().OrderByDescending(o => o.ReportedActivityDate);
            }
            else
            {
                List <Last24HoursDTO> res = new List <Last24HoursDTO>();
                return(ResponseBuilder.Correct(res));
            }

            //---------------------------------------------------------------------------------------------
            //----------------  Get driver's firstName/lastName from Identity server ----------------------
            //---------------------------------------------------------------------------------------------


            string usernameParameter = "username="******"api/Users/GetUser?" + usernameParameter);

            if (rspUserDetails.IsSuccessStatusCode)
            {
                var userDetailsJson = await rspUserDetails.Content.ReadAsStringAsync().ConfigureAwait(false);

                var user = JsonConvert.DeserializeObject <ResponseDTO <UserResponse> >(userDetailsJson);

                //----------------------------------------------------------------------
                //----------------------    merge with results list -------------------
                //----------------------------------------------------------------------
                int i = 0;
                foreach (var log in eventLogs)
                {
                    i++;
                    log.FirstName = user.Data.FirstName;
                    log.LastName  = user.Data.LastName;
                    log.Index     = i;
                }

                return(ResponseBuilder.Correct(eventLogs.ToList()));
            }
            else
            {
                throw new Exception("Amigo.Tenant.Application.Services.Tracking - Last24HoursService - SearchAsync - call to IdentityServerHttpClient api/Users/GetUsersDetails was not successful");
            }
        }
Пример #4
0
        public async Task <ResponseDTO <List <Last24HoursDTO> > > Search([FromUri] Last24HoursRequest search)
        {
            var resp = await _last24HoursService.SearchAsync(search);

            return(resp);
        }