public async Task <IActionResult> Details(int id)
        {
            Models.Territory territory = await _unitOfWork.Territory.GetFirstOrDefaultAsync(t => t.Id == id);

            PublisherTerritory publisherTerritoryObj = new PublisherTerritory()
            {
                Territory   = territory,
                TerritoryId = territory.Id
            };

            return(View(publisherTerritoryObj));
        }
        public async Task <IActionResult> Details(PublisherTerritory publisherTerritory)
        {
            if (ModelState.IsValid)
            {
                var claimsIdentity = (ClaimsIdentity)User.Identity;
                var claim          = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

                publisherTerritory.ApplicationUserId = claim.Value;

                var applUser =
                    await _unitOfWork.ApplicationUser.GetFirstOrDefaultAsync(u => u.Id == publisherTerritory.ApplicationUserId);

                var territoryFromDb =
                    await _unitOfWork.Territory.GetFirstOrDefaultAsync(t => t.Id == publisherTerritory.TerritoryId);

                if (territoryFromDb == null)
                {
                    return(RedirectToAction(nameof(Index)));
                }

                if (territoryFromDb.IsTaken == true)
                {
                    _unitOfWork.Territory.Update(territoryFromDb);
                    return(RedirectToAction(nameof(Index)));
                }

                //Look in DB to see if that publisher territory exist
                var publisherTerritoryFromDb = await _unitOfWork.PublisherTerritory.GetFirstOrDefaultAsync(
                    t => t.ApplicationUserId == claim.Value && t.TerritoryId == publisherTerritory.TerritoryId,
                    includeProperties : "Territory");

                if (publisherTerritoryFromDb == null)
                {
                    PublisherTerritory publisherTerritoryToBeAdded = new PublisherTerritory();
                    publisherTerritoryToBeAdded.Territory            = territoryFromDb;
                    publisherTerritoryToBeAdded.ApplicationUser      = applUser;
                    publisherTerritoryToBeAdded.TerritoryId          = publisherTerritory.TerritoryId;
                    publisherTerritoryToBeAdded.ApplicationUserId    = claim.Value;
                    publisherTerritoryToBeAdded.Territory.IsTaken    = true;
                    publisherTerritoryToBeAdded.Territory.CurrentPub =
                        applUser.FirstName + " " +
                        applUser.LastName;
                    publisherTerritoryToBeAdded.Territory.DateCurrentPub = DateTime.Now;

                    await _unitOfWork.PublisherTerritory.AddAsync(publisherTerritoryToBeAdded);
                }
                else
                {
                    _unitOfWork.PublisherTerritory.Update(publisherTerritoryFromDb);
                }

                _unitOfWork.Save();
                return(RedirectToAction(nameof(Index)));
            }
            else
            {
                var territory = await _unitOfWork.Territory.GetFirstOrDefaultAsync(t => t.Id == publisherTerritory.TerritoryId);

                var publisherTerritoryObj = new PublisherTerritory()
                {
                    Territory   = territory,
                    TerritoryId = territory.Id
                };

                _unitOfWork.Save();
                return(View(publisherTerritoryObj));
            }
        }