public UltimatePurposeDTO GetPurposeById(Guid purposeId)
        {
            var buff = _purposeRepository.FindById(purposeId);

            var pp      = GetPurposePriceByPuposeID(buff.Id);
            var currDto = new UltimatePurposeDTO();

            currDto.PurposeId          = buff.Id;
            currDto.IsPromo            = buff.IsPromo;
            currDto.ItemId             = buff.ItemId;
            currDto.AvailabilityTypeID = buff.AvailabilityTypeID;

            currDto.Price     = pp.Price;
            currDto.CurencyID = pp.CurencyID;
            currDto.PurposeId = buff.Id;
            currDto.Date      = pp.Date;

            return(currDto);
        }
        //Ultimate Purpose use in admin controls for creating new purpose & purpose price
        #region Ultimate Purpose
        public void CreateUltimatePurpose(UltimatePurposeDTO dto)
        {
            var newPurpose      = new Purpose();
            var newPurposePrice = new PurposePrice();

            newPurpose.Id                 = Guid.NewGuid();
            newPurpose.IsPromo            = dto.IsPromo;
            newPurpose.ItemId             = dto.ItemId;
            newPurpose.AvailabilityTypeID = dto.AvailabilityTypeID;

            newPurposePrice.Id        = Guid.NewGuid();
            newPurposePrice.PurposeId = newPurpose.Id;
            newPurposePrice.Price     = dto.Price;
            newPurposePrice.CurencyID = dto.CurencyID;
            newPurposePrice.Date      = DateTime.Now;

            _purposeRepository.Create(newPurpose);
            _purposePriceRepository.Create(newPurposePrice);
        }
        public ActionResult EditPurpose(UltimatePurposeVM ultimatePurposeVM)
        {
            if (string.IsNullOrEmpty(ultimatePurposeVM.ItemId.ToString()))
            {
                ModelState.AddModelError("ItemId", "Item must be chosen!");
            }
            if (string.IsNullOrEmpty(ultimatePurposeVM.Price.ToString()))
            {
                ModelState.AddModelError("Price", "Fill price");
            }
            if (string.IsNullOrEmpty(ultimatePurposeVM.AvailabilityTypeID.ToString()))
            {
                ModelState.AddModelError("AvailabilityTypeID", "Choose availability type");
            }
            if (string.IsNullOrEmpty(ultimatePurposeVM.CurencyID.ToString()))
            {
                ModelState.AddModelError("CurencyID", "Choose currency");
            }

            if (ModelState.IsValid)
            {
                var ultPurposeDTO = new UltimatePurposeDTO();
                ultPurposeDTO.PurposeId          = ultimatePurposeVM.PurposeId;
                ultPurposeDTO.ItemId             = ultimatePurposeVM.ItemId;
                ultPurposeDTO.Price              = ultimatePurposeVM.Price;
                ultPurposeDTO.IsPromo            = ultimatePurposeVM.IsPromo;
                ultPurposeDTO.AvailabilityTypeID = ultimatePurposeVM.AvailabilityTypeID;
                ultPurposeDTO.CurencyID          = ultimatePurposeVM.CurencyID;

                _catalog.UpdateUltimatePurpose(ultPurposeDTO);
                return(RedirectToAction("PurposesEditor", new { categoryId = ultimatePurposeVM.CategoryId }));
            }

            ultimatePurposeVM.AvailabilityTypes = new SelectList(_catalog.GetAvailabilityTypeList(), "Id", "Name");
            ultimatePurposeVM.CurrencyList      = new SelectList(_catalog.GetCurrencyList(), "Id", "Name");
            if (ultimatePurposeVM.ItemId != null)
            {
                var item = _catalog.GetItemById((Guid)ultimatePurposeVM.ItemId);
                ultimatePurposeVM.ItemName  = item.Name;
                ultimatePurposeVM.ItemBrand = _catalog.GetBrandById((Guid)item.BrandID).Name;
            }
            return(View(ultimatePurposeVM));
        }
        public void UpdateUltimatePurpose(UltimatePurposeDTO dto)
        {
            var selectedPurpose      = _purposeRepository.FindById((Guid)dto.PurposeId);
            var selectedPurposePrice = GetPurposePriceByPuposeID((Guid)dto.PurposeId);

            selectedPurpose.Id                 = (Guid)dto.PurposeId;
            selectedPurpose.IsPromo            = dto.IsPromo;
            selectedPurpose.ItemId             = dto.ItemId;
            selectedPurpose.AvailabilityTypeID = dto.AvailabilityTypeID;

            if (dto.Price != selectedPurposePrice.Price || dto.CurencyID != selectedPurposePrice.CurencyID)
            {
                var newPurposePrice = new PurposePrice();
                newPurposePrice.Id        = Guid.NewGuid();
                newPurposePrice.Price     = dto.Price;
                newPurposePrice.PurposeId = dto.PurposeId;
                newPurposePrice.Date      = DateTime.Now;
                newPurposePrice.CurencyID = dto.CurencyID;
                _purposePriceRepository.Create(newPurposePrice);
            }

            _purposeRepository.Update(selectedPurpose);
        }
        public IEnumerable <UltimatePurposeDTO> GetPurposeListByCategoryId(Guid categoryId)
        {
            var buff    = _purposeRepository.GetWithInclude(x => x.Item.CategoryID == categoryId, y => y.Item);
            var dtoList = new List <UltimatePurposeDTO>();

            foreach (var i in buff)
            {
                var pp      = GetPurposePriceByPuposeID(i.Id);
                var currDto = new UltimatePurposeDTO();
                currDto.PurposeId          = i.Id;
                currDto.IsPromo            = i.IsPromo;
                currDto.ItemId             = i.ItemId;
                currDto.AvailabilityTypeID = i.AvailabilityTypeID;

                currDto.Price     = pp.Price;
                currDto.CurencyID = pp.CurencyID;
                currDto.PurposeId = i.Id;
                currDto.Date      = pp.Date;

                dtoList.Add(currDto);
            }
            return(dtoList);
        }