예제 #1
0
 private void DataGridView2_CellClick(object sender, DataGridViewCellEventArgs e)
 {
     if (e.RowIndex > -1)
     {
         DataGridViewRow row = dataGridView2.Rows[e.RowIndex];
         if ((row.Cells["Name"].Selected || row.Cells["Code"].Selected))
         {
             int SelectedItemId = ItemMapper.SelectItemId();
             if (SelectedItemId > 0)
             {
                 DataTable dt = Sql.GetTable("SelectItemList", new object[] { "@ItemId", SelectedItemId });
                 if (dt != null && dt.Rows.Count > 0)
                 {
                     _handle = false;
                     row.Cells["Name"].Value         = NullCheck.IsNullString(dt.Rows[0]["Name"]);
                     row.Cells["Code"].Value         = NullCheck.IsNullString(dt.Rows[0]["Code"]);
                     row.Cells["Barcode"].Value      = NullCheck.IsNullString(dt.Rows[0]["Barcode"]);
                     row.Cells["Description"].Value  = NullCheck.IsNullString(dt.Rows[0]["Description"]);
                     row.Cells["ItemTypeName"].Value = NullCheck.IsNullString(dt.Rows[0]["Name"]);
                     row.Cells["NetWeight"].Value    = NullCheck.IsNullString(dt.Rows[0]["NetWeight"]);
                     row.Cells["BrutoWeight"].Value  = NullCheck.IsNullString(dt.Rows[0]["BrutoWeight"]);
                     row.Cells["UnitName"].Value     = NullCheck.IsNullString(dt.Rows[0]["UnitName"]);
                     row.Cells["Volume"].Value       = NullCheck.IsNullString(dt.Rows[0]["Volume"]);
                     row.Cells["Width"].Value        = NullCheck.IsNullString(dt.Rows[0]["Width"]);
                     row.Cells["Height"].Value       = NullCheck.IsNullString(dt.Rows[0]["Height"]);
                     row.Cells["ItemId"].Value       = SelectedItemId;
                     _handle = true;
                     row.Cells["Name"].Selected = false;
                     row.Cells["Code"].Selected = false;
                 }
             }
         }
     }
 }
        /// <summary>
        /// Saving to a text file what is in a Item list
        /// </summary>
        private void SaveItems()
        {
            StreamWriter sw = null;

            try
            {
                sw = new StreamWriter(FILENAME);

                foreach (Item Item in Items)
                {
                    sw.WriteLine(ItemMapper.ToStringCsv(Item));
                    sw.Flush();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Something went wrong");
            }
            finally
            {
                if (sw != null)
                {
                    sw.Close();
                }
            }
        }
예제 #3
0
    public void RemoveAtReseed(int index)
    {
        ItemMapper m = ItemDatabase[index];

        ItemDatabase.Remove(m);
        Reseed();
    }
        /// <summary>
        /// Load from a text file into the Item list
        /// </summary>

        protected void Load()
        {
            List <Item>  results = new List <Item>();
            StreamReader sr      = null;

            try
            {
                sr = new StreamReader(FILENAME);
                string row = "";
                while ((row = sr.ReadLine()) != null)
                {
                    Item c = ItemMapper.ToObject(row);
                    results.Add(c);
                }
                Items = results;
            }
            catch (FileNotFoundException fileNotFound)
            {
                Console.WriteLine(fileNotFound.FileName + " was not found");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (sr != null)
                {
                    sr.Close();
                }
            }
        }
예제 #5
0
        public SearchItemFacadeTest()
        {
            _itemMapper = new ItemMapper();

            _fixture = new Fixture();
            _fixture.Behaviors.Remove(new ThrowingRecursionBehavior());
            _fixture.Behaviors.Add(new OmitOnRecursionBehavior());
            _fixture.Customizations.Add(new TypeRelay(typeof(Item), typeof(Book)));
            _fixture.Customizations.Add(new TypeRelay(typeof(ItemBusinessModel), typeof(BookBusinessModel)));

            _readerBusinessModel = _fixture.Create <ReaderBusinessModel>();
            ReaderMapper readerMapper = new ReaderMapper();

            _reader = readerMapper.Map(_readerBusinessModel);

            _item = _fixture.Create <Item>();
            _itemBusinessModel = _itemMapper.Map(_item);

            _tag = _fixture.Create <Tag>();

            this.uow = Initializer.GetLibraryUow();

            uow.Readers.Add(this._reader);
            uow.Items.Add(this._item);
            uow.Tags.Add(_tag);
            this._searchItemFacade = new SearchItemFacade(uow);
        }
예제 #6
0
        Nancy.Response UpdateItem(string id)
        {
            ItemModel item = null;

            // capture actual string posted in case the bind fails (as it will if the JSON is bad)
            // need to do it now as the bind operation will remove the data
            String rawBody = this.GetRawBody();

            try {
                item = this.Bind <ItemModel>();

                ItemMapper itm_mpr = new ItemMapper();
                item.Id = id;

                ItemModel res = itm_mpr.GetById(id);

                if (res == null)
                {
                    return(ErrorBuilder.ErrorResponse(this.Request.Url.ToString(), "GET", HttpStatusCode.NotFound, String.Format("An Item with Id = {0} does not exist", id)));
                }
                itm_mpr.update(item);

                Nancy.Response response = Response.AsJson(item);
                response.StatusCode = HttpStatusCode.OK;

                string uri = this.Request.Url.SiteBase + this.Request.Path + "/" + item.Id;
                response.Headers["Location"] = uri;

                return(response);
            } catch (Exception e) {
                String operation = String.Format("ItemModule.UpdateBadge({0})", (item == null) ? "No Model Data" : item.Url);
                return(HandleException(e, operation));
            }
        }
예제 #7
0
 public ItemCrudFactory() : base()
 {
     foto           = new ArchivoMapper();
     mapper         = new ItemMapper();
     dao            = SqlDao.GetInstance();
     impuestomapper = new ImpuestoMapper();
 }
예제 #8
0
        /// <summary>
        /// Method GetItemByTag(string tagName)
        /// </summary>
        /// <returns>The ItemBusinessModel list</returns>
        public List <ItemBusinessModel> GetItemByTag(string tagName)
        {
            var itemModels = new List <ItemBusinessModel>();

            var itemInfoMapper = new ItemMapper();
            var items          = uow.Items.GetAll().OfType <Item>().ToList();

            foreach (var item in items)
            {
                // Get Items by TagName
                var tags = (item as Item).Tags;

                foreach (var tag in tags)
                {
                    if (tag.Name.ToLower() == tagName.ToLower())
                    {
                        var itemToMap = itemInfoMapper.Map(item);

                        if (!itemModels.Any(b => b.Id == itemToMap.Id))
                        {
                            itemModels.Add(itemToMap);
                        }
                    }
                }
            }

            return(itemModels);
        }
예제 #9
0
        public ScannedPageFacadeTest()
        {
            _scannedPageMapper = new ScannedPageMapper();

            _fixture = new Fixture();
            _fixture.Behaviors.Remove(new ThrowingRecursionBehavior());
            _fixture.Behaviors.Add(new OmitOnRecursionBehavior());
            _fixture.Customizations.Add(new TypeRelay(typeof(Item), typeof(Book)));
            _fixture.Customizations.Add(new TypeRelay(typeof(ItemBusinessModel), typeof(BookBusinessModel)));

            _scannedPage = _fixture.Create <ScannedPage>();
            _scannedPageBusinessModel = _fixture.Create <ScannedPageBusinessModel>();

            _readerBusinessModel = _fixture.Create <ReaderBusinessModel>();
            ReaderMapper readerMapper = new ReaderMapper();

            _reader = readerMapper.Map(_readerBusinessModel);

            _itemBusinessModel = _fixture.Create <ItemBusinessModel>();
            ItemMapper itemMapper = new ItemMapper();

            _item = itemMapper.Map(_itemBusinessModel);

            this.uow = Initializer.GetLibraryUow();
            uow.ScannedPages.Add(this._scannedPage);
            uow.Readers.Add(this._reader);
            uow.Items.Add(this._item);
            this._scannedPageFacade = new ScannedPageFacade(uow);
        }
예제 #10
0
        Nancy.Response AddItem()
        {
            // capture actual string posted in case the bind fails (as it will if the JSON is bad)
            // need to do it now as the bind operation will remove the data
            String rawBody = this.GetRawBody();

            ItemModel item = this.Bind <ItemModel>();

            // Reject request with an ID param
            if (item.Id != null)
            {
                return(ErrorBuilder.ErrorResponse(this.Request.Url.ToString(), "POST", HttpStatusCode.Conflict, String.Format("Use PUT to update an existing Item with Id = {0}", item.Id)));
            }

            // Save the item to the DB
            try {
                ItemMapper itm_mpr = new ItemMapper();
                item.CreateId();
                itm_mpr.Add(item);
                Nancy.Response response = Response.AsJson(item);
                response.StatusCode = HttpStatusCode.Created;

                string uri = this.Request.Url.SiteBase + this.Request.Path + "/" + item.Id;
                response.Headers["Location"] = uri;

                return(response);
            } catch (Exception e) {
                Console.WriteLine(rawBody);
                String operation = String.Format("ItemModule.AddItem({0})", (item == null) ? "No Model Data" : item.Url);
                return(HandleException(e, operation));
            }
        }
예제 #11
0
        private static XElement CheckItemsExistence(ItemMapper mapper, XDocument inputXml)
        {
            XDocument dbResultXml = mapper.ExecuteStoredProcedure(StoredProcedure.custom_p_checkItemsExistenceByCode, true, inputXml);

            //Oczekuje kolekcji w postaci <line><id></id><lineNumber></lineNumber></line>

            //dodanie do xml idków
            foreach (var dbElement in dbResultXml.Root.Elements())
            {
                XElement idElement = dbElement.Element(XmlName.Id);
                if (idElement != null && !String.IsNullOrEmpty(idElement.Value))
                {
                    XElement lineNumberElement = dbElement.Element("lineNumber");
                    string   lineNumber        = lineNumberElement != null ? lineNumberElement.Value : String.Empty;
                    XElement srcLineElement    = inputXml.Root.Elements()
                                                 .Where(line => line.Element("LineNumber") != null &&
                                                        line.Element("LineNumber").Value == lineNumber).FirstOrDefault();
                    if (srcLineElement != null)
                    {
                        srcLineElement.Add(new XElement(idElement));
                        srcLineElement.Add(new XElement(dbElement.Element(XmlName.Id)));
                        srcLineElement.Add(new XElement(dbElement.Element("version")));
                        srcLineElement.Add(new XElement(dbElement.Element("unitId")));
                        srcLineElement.Add(new XElement(dbElement.Element("vatRateId")));
                        srcLineElement.Add(new XElement(dbElement.Element("code")));
                        srcLineElement.Add(new XElement(dbElement.Element("name")));
                        srcLineElement.Add(new XElement(dbElement.Element("itemTypeId")));
                        srcLineElement.Add(new XElement(dbElement.Element("defaultPrice")));
                    }
                }
            }

            return(inputXml.Root);
        }
예제 #12
0
 public ItemsViewController(IAppBLL bll)
 {
     _bll            = bll;
     _brandMapper    = new BrandMapper();
     _categoryMapper = new CategoryMapper();
     _itemMapper     = new ItemMapper();
 }
예제 #13
0
        /// <summary>
        /// Validates the <see cref="BusinessObject"/>.
        /// </summary>
        public override void Validate()
        {
            if (this.Status == BusinessObjectStatus.New)
            {
                int catalogueLimit = ConfigurationMapper.Instance.CatalogueLimit;

                if (catalogueLimit > 0)
                {
                    ItemMapper mapper = DependencyContainerManager.Container.Get <ItemMapper>();
                    int        count  = mapper.GetItemsCount();

                    if (count >= catalogueLimit)
                    {
                        throw new ClientException(ClientExceptionId.CatalogueLimitError, null, "catalogueLimit:" + catalogueLimit.ToString(CultureInfo.InvariantCulture));
                    }
                }
            }

            if (ConfigurationMapper.Instance.MinimalProfitMarginValidation)
            {
                var modified = this.GroupMemberships.Where(g => g.Status != BusinessObjectStatus.Unchanged).FirstOrDefault();

                if (modified != null)
                {
                    throw new ClientException(ClientExceptionId.ItemsGroupChangeError);
                }

                Item alternateItem = (Item)this.AlternateVersion;

                if (alternateItem != null)
                {
                    modified = alternateItem.GroupMemberships.Where(g => g.Status == BusinessObjectStatus.Deleted).FirstOrDefault();

                    if (modified != null)
                    {
                        throw new ClientException(ClientExceptionId.ItemsGroupChangeError);
                    }
                }
            }

            Configuration.Configuration conf = ConfigurationMapper.Instance.GetConfiguration(SessionManager.User, "items.allowOneGroupMembership").FirstOrDefault();

            if (conf != null && conf.Value.Value.ToUpperInvariant() == "TRUE" &&
                this.GroupMemberships != null && this.GroupMemberships.Children.Count > 1)
            {
                throw new ClientException(ClientExceptionId.ItemOneGroupMembershipEnforcement
                                          , null, "code:" + this.Code);
            }

            conf = ConfigurationMapper.Instance.GetConfiguration(SessionManager.User, "items.enforceGroupMembership").FirstOrDefault();

            if (conf != null && conf.Value.Value.ToUpperInvariant() == "TRUE" &&
                this.GroupMemberships != null && this.GroupMemberships.Children.Count == 0)
            {
                throw new ClientException(ClientExceptionId.ItemGroupMembershipEnforcement
                                          , null, "code:" + this.Code);
            }

            base.Validate();
        }
예제 #14
0
 public ItemsController()
 {
     _itemConfig  = new Configuration.Configurations();
     _itemService = _itemConfig.GetItemService();
     _itemMapper  = new ItemMapper(_itemConfig);
     _cartMapper  = new CartMapper();
 }
예제 #15
0
 /// <summary>
 /// Cart controller
 /// </summary>
 /// <param name="bll"></param>
 public CartsViewController(IAppBLL bll)
 {
     _bll              = bll;
     _cartMapper       = new CartMapper();
     _itemInCartMapper = new ItemInCartMapper();
     _itemMapper       = new ItemMapper();
 }
예제 #16
0
 public SearchPageController(IAppBLL bll)
 {
     _bll            = bll;
     _brandMapper    = new BrandMapper();
     _categoryMapper = new CategoryMapper();
     _itemMapper     = new ItemMapper();
 }
예제 #17
0
        public async Task <IHttpActionResult> Post(ItemModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var itemsWithExtId = await Dao.GetItemsByExternalId(model.ExternalId);

            if (itemsWithExtId.Count() != 0)
            {
                return(BadRequest("Item with that ExternalID already exists"));
            }

            var item  = ItemMapper.ModelToEntity(model);
            var newId = await Dao.CreateItem(item);

            if (newId == 0)
            {
                return(InternalServerError());
            }

            var newItem = await Dao.GetItemById(newId);

            return(CreatedAtRoute("GetItemById", new { id = newId }, ItemMapper.EntityToModel(newItem)));
        }
        public ScannedPageFacadeTest() 
        {
            _scannedPageMapper = new ScannedPageMapper();

            _fixture = new Fixture();
            _fixture.Behaviors.Remove(new ThrowingRecursionBehavior());
            _fixture.Behaviors.Add(new OmitOnRecursionBehavior());
            _fixture.Customizations.Add(new TypeRelay(typeof(Item), typeof(Book)));
            _fixture.Customizations.Add(new TypeRelay(typeof(ItemBusinessModel), typeof(BookBusinessModel)));

            _scannedPage = _fixture.Create<ScannedPage>();
            _scannedPageBusinessModel = _fixture.Create<ScannedPageBusinessModel>();

            _readerBusinessModel = _fixture.Create<ReaderBusinessModel>();
            ReaderMapper readerMapper = new ReaderMapper();
            _reader = readerMapper.Map(_readerBusinessModel);

            _itemBusinessModel = _fixture.Create<ItemBusinessModel>();
            ItemMapper itemMapper = new ItemMapper();
            _item = itemMapper.Map(_itemBusinessModel);

            this.uow = Initializer.GetLibraryUow();
            uow.ScannedPages.Add(this._scannedPage);
            uow.Readers.Add(this._reader);
            uow.Items.Add(this._item);
            this._scannedPageFacade = new ScannedPageFacade(uow);
        }
        public SearchItemFacadeTest() 
        {
            _itemMapper = new ItemMapper();

            _fixture = new Fixture();
            _fixture.Behaviors.Remove(new ThrowingRecursionBehavior());
            _fixture.Behaviors.Add(new OmitOnRecursionBehavior());
            _fixture.Customizations.Add(new TypeRelay(typeof(Item), typeof(Book)));
            _fixture.Customizations.Add(new TypeRelay(typeof(ItemBusinessModel), typeof(BookBusinessModel)));

            _readerBusinessModel = _fixture.Create<ReaderBusinessModel>();
            ReaderMapper readerMapper = new ReaderMapper();
            _reader = readerMapper.Map(_readerBusinessModel);

            _item = _fixture.Create<Item>();
            _itemBusinessModel = _itemMapper.Map(_item);

            _tag = _fixture.Create<Tag>();

            this.uow = Initializer.GetLibraryUow();

            uow.Readers.Add(this._reader);
            uow.Items.Add(this._item);
            uow.Tags.Add(_tag);
            this._searchItemFacade = new SearchItemFacade(uow);
        }
예제 #20
0
 public void SeedItems(string seedPath)
 {
     ItemSeed[] itemArray;
     using (var itemStream = new StreamReader(seedPath + "/item.json"))
     {
         itemArray = JsonConvert.DeserializeObject <ItemSeed[]>(itemStream.ReadToEnd());
     }
     foreach (var itemSeed in itemArray)
     {
         var itemEntity = _itemRepository.GetById(itemSeed.Id);
         if (itemEntity == null)
         {
             var newItem = ItemMapper.MapSeedToEntity(itemSeed);
             newItem.CreatedBy = "SeedItems";
             newItem.SeedData  = true;
             _itemRepository.Add(newItem);
         }
         else
         {
             ItemMapper.MapSeedToEntity(itemSeed, itemEntity);
             itemEntity.ModifiedBy = "SeedItems";
             _itemRepository.Update(itemEntity);
         }
     }
 }
예제 #21
0
        public Item EnsureItemWithUnit(string itemDescription)
        {
            itemDescription = itemDescription ?? "";

            var parts = itemDescription.Split(',');

            string name = parts[0].Trim();
            string unit = parts.Count() > 1 ? parts[1] : null;

            if (string.IsNullOrWhiteSpace(name))
            {
                throw new Exception($"Incorrect item description provided: {itemDescription}");
            }

            var entity = _rep.GetByText(name);

            if (entity == null)
            {
                entity = new ItemEntity
                {
                    Text = name,
                    Unit = CodeUtils.CreateCode(unit),
                    Code = CodeUtils.CreateCode(name)
                };
                _rep.Add(entity);
            }

            return(ItemMapper.MapToModel(entity));
        }
예제 #22
0
 public ItemService()
 {
     _dbService        = new DynamoDBService();
     _map              = new ItemMapper();
     _loadTableSuccess = Table.TryLoadTable(
         _dbService.DbClient,
         _tableName,
         DynamoDBEntryConversion.V2, out _table);
 }
예제 #23
0
 public async Task CreateAsync(ItemDTO item)
 {
     if (item == null)
     {
         throw new ArgumentNullException(nameof(item));
     }
     _unitOfWork.Items.Create(ItemMapper.MapToEntity(item));
     await _unitOfWork.SaveAsync();
 }
예제 #24
0
        public override void OnValidateTransaction(IBusinessObject businessObject)
        {
            ItemMapper mapper = DependencyContainerManager.Container.Get <ItemMapper>();
            bool       b      = mapper.CheckItemCodeExistence(businessObject.FullXml);

            if (b)
            {
                throw new ClientException(ClientExceptionId.ItemCodeAlreadyExists);
            }
        }
예제 #25
0
        public ItemViewModel UpdateItem(int id, ItemViewModel item)
        {
            var originalItem = _itemRepository.GetById(id);

            ItemMapper.MapModelToEntity(item, originalItem);
            originalItem.ModifiedBy = "TEST";
            var updatedItem = _itemRepository.Update(originalItem);

            return(ItemMapper.MapEntityToModel(updatedItem));
        }
예제 #26
0
        public async Task <ItemDTO> GetByIdAsync(int id)
        {
            Item res = await _unitOfWork.Items.GetAsync(id);

            if (res == null)
            {
                return(null);
            }
            return(ItemMapper.MapToDTO(res));
        }
예제 #27
0
        public static Item Get(int id)
        {
            Item       item;
            ItemEntity entity;

            entity = ItemDao.Get(id);
            item   = ItemMapper.Get(entity);

            return(item);
        }
예제 #28
0
 public void SetUp()
 {
     _itemsGateway = Substitute.For <IItemsGateway>();
     _itemsMaper   = new ItemMapper();
     _view         = Substitute.For <IBrowserView>();
     _presenter    = new HomePagePresenter(new GetItemsInteractor(_itemsGateway),
                                           new Executor(),
                                           _view,
                                           _itemsMaper);
 }
예제 #29
0
        public ItemViewModel AddItem(ItemViewModel item)
        {
            var newItem = ItemMapper.MapModelToEntity(item);

            newItem.CreatedBy = "TEST";
            newItem.SeedData  = false;
            var addedItem = _itemRepository.Add(newItem);

            return(ItemMapper.MapEntityToModel(addedItem));
        }
예제 #30
0
        public async Task <IHttpActionResult> GetById(int id)
        {
            var item = await Dao.GetItemById(id);

            if (item is null)
            {
                return(NotFound());
            }
            return(Ok(ItemMapper.EntityToModel(item)));
        }
예제 #31
0
        private async Task <T> GetItem <T>(IAuthenticationScope authenticationScope, ItemMapper <T> mapper, ItemId itemId)
            where T : Item, new()
        {
            using (var client = CreateClient(authenticationScope))
            {
                var item = await client.GetItemAsync($"item/{itemId}");

                return(mapper.Map(item));
            }
        }
예제 #32
0
 public IActionResult GetItemDetails(long id)
 {
     try
     {
         return(Ok(ItemMapper.map(itemRepository.GetItemById(id))));
     }
     catch (Exception)
     {
         return(BadRequest());
     }
 }
        public ScannedPageMapperTests()
        {
            this._scannedPageMapper = new ScannedPageMapper();

            Fixture fixture = new Fixture { RepeatCount = 1 };
            fixture.Behaviors.Remove(new ThrowingRecursionBehavior());
            fixture.Behaviors.Add(new OmitOnRecursionBehavior());
            fixture.Customizations.Add(new TypeRelay(typeof(Item), typeof(Book)));
            fixture.Customizations.Add(new TypeRelay(typeof(ItemBusinessModel), typeof(BookBusinessModel)));

            Reader reader = fixture.Create<Reader>();
            ReaderMapper readerMapper = new ReaderMapper();
            var readerModel = readerMapper.Map(reader);

            var item = fixture.Create<Item>();
            var itemMapper = new ItemMapper();
            var itemModel = itemMapper.Map(item);

            _scannedPage = fixture.Create<ScannedPage>();
            _scannedPageBusinessModel = fixture.Create<ScannedPageBusinessModel>();
        }
예제 #34
0
        /// <summary>
        /// Method GetItemByTag(string tagName)
        /// </summary>
        /// <returns>The ItemBusinessModel list</returns>
        public List<ItemBusinessModel> GetItemByTag(string tagName)
        {
            var itemModels = new List<ItemBusinessModel>();

            var itemInfoMapper = new ItemMapper();
            var items = uow.Items.GetAll().OfType<Item>().ToList();
            foreach (var item in items)
            {
                // Get Items by TagName
                var tags = (item as Item).Tags;

                foreach (var tag in tags)
                {
                    if (tag.Name.ToLower() == tagName.ToLower())
                    {
                        var itemToMap = itemInfoMapper.Map(item);

                        if (!itemModels.Any(b => b.Id == itemToMap.Id))
                        {
                            itemModels.Add(itemToMap);
                        }
                    }
                }
            }
            
            return itemModels;
        }
예제 #35
0
파일: Listing.cs 프로젝트: sgauzel/main
        public void Get_all_listing()
        {
            var context = new DataContext();
            var results = context.ListingItems.ToList().Where(x=>x.Listing.Name =="Test");

            var map = new ItemMapper<People>();
            var result = map.Map(new People(), results.ToList());
        }
예제 #36
0
        /// <summary>
        /// Method GetItemByName(string searchString)
        /// </summary>
        /// <returns>The ItemBusinessModel list</returns>
        public List<ItemBusinessModel> GetItemByName(string searchString)
        {
            var itemModels = new List<ItemBusinessModel>();

            string[] words = null;

            if (!string.IsNullOrEmpty(searchString))
            {
                words = searchString.Trim().Split(' ');
            }
            
            var itemInfoMapper = new ItemMapper();
            var items = uow.Items.GetAll().OfType<Item>().ToList();

            // Search by ItemName
            foreach (var item in items)
            {
                foreach (string word in words)
                {
                    if (item.Name.ToLower().Contains(word.ToLower()) || word.ToLower().Contains(item.Name.ToLower()))
                    {
                        var itemToMap = itemInfoMapper.Map(item);

                        // Distinct
                        if (!itemModels.Any(b => b.Id == itemToMap.Id))
                        {
                            itemModels.Add(itemToMap);
                        }
                    }
                }
            }

            // Search by Book Authors FirstName or LastName
            foreach (var item in items)
            {
                if (item is Book)
                {
                    var authors = (item as Book).Authors;

                    foreach (var author in authors)
                    {
                        foreach (string word in words)
                        {
                            if (author.FirstName.ToLower().Contains(word.ToLower()) || word.ToLower().Contains(author.FirstName.ToLower()) ||
                            author.LastName.ToLower().Contains(word.ToLower()) || word.ToLower().Contains(author.LastName.ToLower()))
                            {
                                var bookToMap = itemInfoMapper.Map(item);

                                if (!itemModels.Any(b => b.Id == bookToMap.Id))
                                {
                                    itemModels.Add(bookToMap);
                                }
                            }
                        }
                    }
                }

                // Search by Disk Producer
                if (item is Disk)
                {
                    foreach (string word in words)
                    {
                        if ((item as Disk).Producer.ToLower().Contains(word.ToLower()) || word.ToLower().Contains((item as Disk).Producer.ToLower()))
                        {
                            var itemToMap = itemInfoMapper.Map(item);

                            // Distinct
                            if (!itemModels.Any(b => b.Id == itemToMap.Id))
                            {
                                itemModels.Add(itemToMap);
                            }
                        }
                    }
                }

                // Search by Magazine Publisher
                if (item is Magazine)
                {
                    foreach (string word in words)
                    {
                        if ((item as Magazine).Publisher.ToLower().Contains(word.ToLower()) || word.ToLower().Contains((item as Magazine).Publisher.ToLower()))
                        {
                            var itemToMap = itemInfoMapper.Map(item);

                            // Distinct
                            if (!itemModels.Any(b => b.Id == itemToMap.Id))
                            {
                                itemModels.Add(itemToMap);
                            }
                        }
                    }
                }
            }
            
            return itemModels;
        }