public IEnumerable <PartnerAgenciesViewModel> GetPartnerAgencies(object id) { using (var uow = new UnitOfWork(ctx)) { List <PartnerAgenciesViewModel> lst = new List <PartnerAgenciesViewModel>(); var allAgencies = uow.agencyRepository.GetAll(); var partner = uow.partnerRepository.GetById((int)id); var agenciesIds = partner.AgencyPartners.ToList(); List <Agency> agencies = new List <Agency>(); foreach (var agency in agenciesIds) { agencies.Add(agency.Agency); //hmm repo } var notPartnerAgencies = allAgencies.Except(agencies); foreach (var p in notPartnerAgencies) { var d = new PartnerAgenciesViewModel { FromPartner = false, AgencyId = p.Id, Name = p.Name }; lst.Add(d); } foreach (var p in agencies) { var d = new PartnerAgenciesViewModel { FromPartner = true, AgencyId = p.Id, Name = p.Name }; lst.Add(d); } return(lst); } }
// same logic as in Agency Update() public Partner Update(PartnerUpdateViewModel model, object partnerId) { using (var uow = new UnitOfWork(ctx)) { // partners before update List <PartnerAgenciesViewModel> oldAgencies = new List <PartnerAgenciesViewModel>(); var allAgencies = uow.agencyRepository.GetAll(); var partner = uow.partnerRepository.GetById((int)partnerId); partner.City = model.Partner.City; var partnerVehicle = uow.vehicleRepository.GetById(model.VehicleId); if (partner.Vehicle != partnerVehicle) { partner.VehicleId = partnerVehicle.Id; } var agenciesIds = partner.AgencyPartners.ToList(); List <Agency> agencies = new List <Agency>(); foreach (var agency in agenciesIds) { agencies.Add(agency.Agency); } var notPartnerAgencies = allAgencies.Except(agencies); foreach (var p in notPartnerAgencies) { var d = new PartnerAgenciesViewModel { FromPartner = false, AgencyId = p.Id, Name = p.Name }; oldAgencies.Add(d); } foreach (var p in agencies) { var d = new PartnerAgenciesViewModel { FromPartner = true, AgencyId = p.Id, Name = p.Name }; oldAgencies.Add(d); } foreach (var newPartnerAgency in model.PartnerAgencies) { var oldPartnerAgency = oldAgencies.First(id => id.AgencyId == newPartnerAgency.AgencyId); if (oldPartnerAgency != null) //if this is not new partnerAgency, maybe this if statement is not needed { if (oldPartnerAgency.FromPartner != newPartnerAgency.FromPartner) // if there is a difference from the old join table { if (newPartnerAgency.FromPartner == true) // agency is added to partner { partner.AgencyPartners.Add( new AgencyPartner { PartnerId = (int)partnerId, AgencyId = newPartnerAgency.AgencyId }); } else //agency is removed from partner { // delete a join table entry var apToRemove = partner.AgencyPartners.SingleOrDefault(ap => ap.AgencyId == oldPartnerAgency.AgencyId); partner.AgencyPartners.Remove(apToRemove); } } else // there is no difference in join table entry { ; } } } var updated = uow.partnerRepository.Update(partner, partner.Id); uow.Complete(); return(updated); } }