public FrayteAgent GetAgentDetail(int?agentId) { FrayteAgent agentDetail = new FrayteAgent(); WorkingWeekDay workingDays = new WorkingWeekDay(); //Step 1: Get Agent's basic information var agent = dbContext.Users.Where(p => p.UserId == agentId).FirstOrDefault(); if (agent != null) { agentDetail = UtilityRepository.AgentMapping(agent); agentDetail.RoleId = (int)FrayteUserRole.Agent; // get Working Week Time if (agentDetail.WorkingWeekDay.WorkingWeekDayId > 0) { workingDays = dbContext.WorkingWeekDays.Find(agentDetail.WorkingWeekDay.WorkingWeekDayId); } if (workingDays != null) { agentDetail.WorkingWeekDay = workingDays; } //Step 1.1: Get Agent's time zone var timeZone = dbContext.Timezones.Where(p => p.TimezoneId == agent.TimezoneId).FirstOrDefault(); if (timeZone != null) { agentDetail.Timezone = new TimeZoneModal(); agentDetail.Timezone.TimezoneId = timeZone.TimezoneId; agentDetail.Timezone.Name = timeZone.Name; agentDetail.Timezone.Offset = timeZone.Offset; agentDetail.Timezone.OffsetShort = timeZone.OffsetShort; } //Step 2: Get Agent's other information var agentOtherDetails = dbContext.UserAdditionals.Where(p => p.UserId == agentId).FirstOrDefault(); if (agentOtherDetails != null) { //Get associated Frayte User's detail GetAssociateUsersDetail(agent.UserId, agentDetail); } // Step 3: Get AgentShipmentType if (agentDetail != null && agentDetail.UserId > 0) { var agentShipmentType = dbContext.UserShipmentTypes.Where(p => p.UserId == agent.UserId).FirstOrDefault(); if (agentShipmentType != null) { agentDetail.UserShipmentTypeId = agentShipmentType.UserShipmentTypeId; agentDetail.IsAir = agentShipmentType.IsAir; agentDetail.IsSea = agentShipmentType.IsSea; agentDetail.IsExpryes = agentShipmentType.IsExpryes; } } //Step 4: Get Agents's Address information var agentAddress = dbContext.UserAddresses.Where(p => p.UserId == agentId && (p.AddressTypeId == (int)FrayteAddressType.MainAddress || p.AddressTypeId == (int)FrayteAddressType.OtherAddress)).ToList(); if (agentAddress != null) { agentDetail.OtherAddresses = new List <FrayteAddress>(); foreach (UserAddress address in agentAddress) { if (address.AddressTypeId == (int)FrayteAddressType.MainAddress) { //Step 3.1: Set Agent main address agentDetail.UserAddress = new FrayteAddress(); agentDetail.UserAddress = UtilityRepository.UserAddressMapping(address); //Step : Get country information var country = dbContext.Countries.Where(p => p.CountryId == address.CountryId).FirstOrDefault(); if (country != null) { agentDetail.UserAddress.Country = new FrayteCountryCode(); agentDetail.UserAddress.Country.CountryId = country.CountryId; agentDetail.UserAddress.Country.Code = country.CountryCode; agentDetail.UserAddress.Country.Name = country.CountryName; } } else { //Step 4.2: Set Agent's other addresses FrayteAddress otherAddress = UtilityRepository.UserAddressMapping(address); //Step : Get country information var country = dbContext.Countries.Where(p => p.CountryId == otherAddress.Country.CountryId).FirstOrDefault(); if (country != null) { otherAddress.Country = new FrayteCountryCode(); otherAddress.Country.CountryId = country.CountryId; otherAddress.Country.Code = country.CountryCode; otherAddress.Country.Name = country.CountryName; } agentDetail.OtherAddresses.Add(otherAddress); } } } } return(agentDetail); }