Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        // 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);
            }
        }