public PartnerActionMapModel UpdateMap(PartnerActionMapModel map)
        {
            if (!_partnerService.Exists(map.PartnerId))
            {
                throw new InvalidOperationException(ServicesConstants.UpdatePartnerActionMap_NotAllowedReasonMessage_PartnerDoesNotExist);
            }
            if (!_actionService.Exists(map.ActionId))
            {
                throw new InvalidOperationException(ServicesConstants.UpdatePartnerActionMap_NotAllowedReasonMessage_ActionDoesNotExist);
            }

            if (_service.PartnerActionMapExists(map.PartnerId, map.ActionId))
            {
                throw new InvalidOperationException(ServicesConstants.UpdatePartnerActionMap_NotAllowedReasonMessage_MapAlreadyExists);
            }

            var dMap = _service.GetPartnerActionMap(map.Id);

            dMap.PartnerId = map.PartnerId;
            dMap.ActionId  = map.ActionId;

            var ret = _service.Update(dMap);

            return(_mapper.Map <PartnerActionMap, PartnerActionMapModel>(ret));
        }
        public async Task <IActionResult> Edit(int id, [Bind("Id,PartnerId,ActionId,CreatedDate")] PartnerActionMapModel map)
        {
            if (id != map.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    map = _factory.UpdateMap(map);
                    return(RedirectToAction(nameof(Index)));
                }
                catch (InvalidOperationException e)
                {
                    // log error here

                    var allowedErrors = new List <string>()
                    {
                        ServicesConstants.UpdatePartnerActionMap_NotAllowedReasonMessage_ActionDoesNotExist,
                        ServicesConstants.UpdatePartnerActionMap_NotAllowedReasonMessage_PartnerDoesNotExist,
                        ServicesConstants.UpdatePartnerActionMap_NotAllowedReasonMessage_MapAlreadyExists,
                    };

                    if (allowedErrors.Contains(e.Message ?? ""))
                    {
                        return(View("CustomError", new CustomErrorViewModel()
                        {
                            HeaderMessage = "Not allowed",
                            Message = e.Message,
                            ReturnUrls = new Dictionary <string, string>()
                            {
                                { "Back to Edit Partner Action Map page", Url.Action("Edit", "PartnerActionMap", new { area = "Admin" }) },
                                { "Go to Partner Action Maps List", Url.Action("Index", "PartnerActionMap", new { area = "Admin" }) },
                            }
                        }));
                    }
                    else
                    {
                        return(RedirectToAction(nameof(Index)));
                    }
                }
                catch (Exception e)
                {
                    // log error here

                    return(RedirectToAction(nameof(Index)));
                }
            }
            ViewData["ActionId"]  = new SelectList(_actionFactory.GetAll(), "Id", "Name", map.ActionId);
            ViewData["PartnerId"] = new SelectList(_partnerFactory.GetAll(), "Id", "Name", map.PartnerId);
            return(View(map));
        }
        public PartnerActionMapModel CreateMap(PartnerActionMapModel map)
        {
            if (!_partnerService.Exists(map.PartnerId))
            {
                throw new InvalidOperationException(ServicesConstants.CreatePartnerActionMap_NotAllowedReasonMessage_PartnerDoesNotExist);
            }
            if (!_actionService.Exists(map.ActionId))
            {
                throw new InvalidOperationException(ServicesConstants.CreatePartnerActionMap_NotAllowedReasonMessage_ActionDoesNotExist);
            }

            if (_service.PartnerActionMapExists(map.PartnerId, map.ActionId))
            {
                throw new InvalidOperationException(ServicesConstants.CreatePartnerActionMap_NotAllowedReasonMessage_MapAlreadyExists);
            }

            var nMap = _mapper.Map <PartnerActionMapModel, PartnerActionMap>(map);

            nMap.CreatedDate = DateTime.UtcNow;

            var ret = _service.Create(nMap);

            return(_mapper.Map <PartnerActionMap, PartnerActionMapModel>(ret));
        }