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; }