private List<TransporterRequisition> AssignTransporterForEachWoreda(int transportRequisitionId)
        {
            var transportRequision = _unitOfWork.TransportRequisitionDetailRepository.Get(
                t => t.TransportRequisitionID == transportRequisitionId, null, null).Select(t => t.RequisitionID);

            var reqDetails = _unitOfWork.ReliefRequisitionDetailRepository.Get(t => transportRequision.Contains(t.RequisitionID));
            var transportSourceDestination = new List<TransporterRequisition>();
            foreach (var reliefRequisitionDetail in reqDetails)
            {
                var transportRequisition = new TransporterRequisition();
                //var requi =
                //    _unitOfWork.ReliefRequisitionRepository.Get(
                //        t => t.RequisitionID == reliefRequisitionDetail.RequisitionID, null, "HubAllocations").FirstOrDefault();
                transportRequisition.TransportRequisitionDetailID = reliefRequisitionDetail.ReliefRequisition.TransportRequisitionDetails.First().TransportRequisitionDetailID;
                transportRequisition.RequisitionID = reliefRequisitionDetail.RequisitionID;
                transportRequisition.HubID = _unitOfWork.HubAllocationRepository.FindBy(t => t.RequisitionID == reliefRequisitionDetail.RequisitionID).FirstOrDefault().HubID;//requi.HubAllocations.FirstOrDefault().HubID;
                transportRequisition.WoredaID = reliefRequisitionDetail.FDP.AdminUnitID;
                var transportBidWinner = _transporterService.GetCurrentBidWinner(transportRequisition.HubID,
                                                                          transportRequisition.WoredaID);
                //_unitOfWork.BidWinnerRepository.Get(
                //    t => t.SourceID == transportRequisition.HubID && t.DestinationID == transportRequisition.WoredaID).FirstOrDefault();
                if (transportBidWinner == null)
                {
                    var transReqWithoutTransporter = new TransReqWithoutTransporter();
                    transReqWithoutTransporter.TransportRequisitionDetailID = transportRequisition.TransportRequisitionDetailID;
                    transReqWithoutTransporter.RequisitionDetailID = reliefRequisitionDetail.RequisitionDetailID;
                    transReqWithoutTransporter.IsAssigned = false;
                    _unitOfWork.TransReqWithoutTransporterRepository.Add(transReqWithoutTransporter);
                    _unitOfWork.Save();
                    //throw new Exception(string.Format("Transporter Couldn't be found for from {0} to {1}", transportRequisition.HubID, transportRequisition.WoredaID));
                }
                else
                {
                    //TODO: these commented lines should be figured out how they affect the rest of the code
                    transportRequisition.TransporterID = transportBidWinner.TransporterID;
                    transportRequisition.TariffPerQtl = transportBidWinner.Tariff!=null ? (decimal) transportBidWinner.Tariff : 0;

                    transportSourceDestination.Add(transportRequisition);
                }

            }
            return transportSourceDestination;
        }
        private List<TransporterRequisition> AssignTransporterForEachWoreda(int transportRequisitionId,int bidId)
        {
            var transportRequision = _unitOfWork.TransportRequisitionDetailRepository.Get(
                t => t.TransportRequisitionID == transportRequisitionId, null, null).Select(t => t.RequisitionID);

            var reqDetails = _unitOfWork.ReliefRequisitionDetailRepository.Get(t => transportRequision.Contains(t.RequisitionID));
            var transportSourceDestination = new List<TransporterRequisition>();
            foreach (var reliefRequisitionDetail in reqDetails)
            {
                //var transportRequisition = new TransporterRequisition();
                //var requi =
                //    _unitOfWork.ReliefRequisitionRepository.Get(
                //        t => t.RequisitionID == reliefRequisitionDetail.RequisitionID, null, "HubAllocations").FirstOrDefault();
                var transRequisDetailId = reliefRequisitionDetail.ReliefRequisition.TransportRequisitionDetails.First().TransportRequisitionDetailID;
                var reqId = reliefRequisitionDetail.RequisitionID;
                var hubId = _unitOfWork.HubAllocationRepository.FindBy(t => t.RequisitionID == reliefRequisitionDetail.RequisitionID).FirstOrDefault().HubID;//requi.HubAllocations.FirstOrDefault().HubID;
                var woredaId = reliefRequisitionDetail.FDP.AdminUnitID;
                var regionId = reliefRequisitionDetail.ReliefRequisition.RegionID;
                //transportRequisition.TransportRequisitionDetailID = reliefRequisitionDetail.ReliefRequisition.TransportRequisitionDetails.First().TransportRequisitionDetailID;
                //transportRequisition.RequisitionID = reliefRequisitionDetail.RequisitionID;
                //transportRequisition.HubID = _unitOfWork.HubAllocationRepository.FindBy(t => t.RequisitionID == reliefRequisitionDetail.RequisitionID).FirstOrDefault().HubID;//requi.HubAllocations.FirstOrDefault().HubID;
                //transportRequisition.WoredaID = reliefRequisitionDetail.FDP.AdminUnitID;

                var transportBidWinners = _transporterService.GetBidWinner(hubId,woredaId,bidId);

                //_unitOfWork.BidWinnerRepository.Get(
                //    t => t.SourceID == transportRequisition.HubID && t.DestinationID == transportRequisition.WoredaID).FirstOrDefault();
                if (transportBidWinners.Count == 0)
                {
                    var transReqWithoutTransporter = new TransReqWithoutTransporter();
                    transReqWithoutTransporter.TransportRequisitionDetailID = transRequisDetailId;
                    transReqWithoutTransporter.RequisitionDetailID = reliefRequisitionDetail.RequisitionDetailID;
                    transReqWithoutTransporter.IsAssigned = false;
                    _unitOfWork.TransReqWithoutTransporterRepository.Add(transReqWithoutTransporter);
                    _unitOfWork.Save();
                    //throw new Exception(string.Format("Transporter Couldn't be found for from {0} to {1}", transportRequisition.HubID, transportRequisition.WoredaID));
                }
                else
                {
                    //TODO: these commented lines should be figured out how they affect the rest of the code
                    foreach (var transportBidWinner in transportBidWinners)
                    {
                        var transportRequisition = new TransporterRequisition();
                        transportRequisition.TransportRequisitionDetailID = transRequisDetailId;
                        transportRequisition.RequisitionID = reqId;
                        transportRequisition.HubID = hubId;
                        transportRequisition.WoredaID = woredaId;
                        //transportRequisition.BidID = transportBidWinner.BidID;
                        transportRequisition.TransporterID = transportBidWinner.TransporterID;
                        transportRequisition.TariffPerQtl = transportBidWinner.Tariff != null ? (decimal)transportBidWinner.Tariff : 0;
                        transportRequisition.noOfWinners = transportBidWinners.Count;
                        transportRequisition.RegionID = (int) regionId;

                        transportSourceDestination.Add(transportRequisition);
                    }

                }

            }
            var groupedTransportSourceDestination = transportSourceDestination.GroupBy(ac => new
                {
                    ac.HubID,
                    ac.RequisitionID,
                    ac.TransporterID,
                    ac.TransportRequisitionDetailID,
                    ac.WoredaID
                }).Select(ac => new TransporterRequisition
                    {
                        HubID = ac.Key.HubID,
                        RequisitionID = ac.Key.RequisitionID,
                        TariffPerQtl = ac.FirstOrDefault().TariffPerQtl,
                        noOfWinners = ac.FirstOrDefault().noOfWinners,
                        TransporterID = ac.Key.TransporterID,
                        TransportRequisitionDetailID = ac.Key.TransportRequisitionDetailID,
                        WoredaID = ac.Key.WoredaID
                    }).ToList();
            return groupedTransportSourceDestination;
        }