public async Task <ItemSearchResponse <T> > SearchItems(ItemSearchParams searchparams)
        {
            var result = await Search(ResourceType.items, searchparams);

            var response = new ItemSearchResponse <T>()
            {
                ResponseCode = result.ResponseCode, RequestURL = result.RequestURL
            };

            if (result.ResponseCode == 200)
            {
                JArray           array    = (JArray)result.Message;
                List <Item <T> > itemSets = new List <Item <T> >();
                foreach (var entry in array)
                {
                    Item <T> r = Item <T> .FromJObject((JObject)entry);

                    itemSets.Add(r);
                }

                response.Items = itemSets;
            }
            return(response);
        }
        public IEnumerable <Item> Find(ItemSearchParams searchParams)
        {
            var hasSiteSync = this.IsColumnExists($"Items", "SITESYNC");
            var hasKupaSync = this.IsColumnExists($"Items", "KUPASYNC");
            var hasUpdDate  = this.IsColumnExists($"Items", "UitemDate");

            try
            {
                var items = new List <Item>();

                // ignore tables search with updated-date filter but no updated-date column
                // to prevent receiving incorrect data
                var hasUpdDateFilter = searchParams.FromUpdateDate.HasValue || searchParams.ToUpdateDate.HasValue;
                if (searchParams.PauseIfNoUpdateDateColumn && !hasUpdDate && hasUpdDateFilter)
                {
                    return(items);
                }

                using (var connection = new OdbcConnection(this.ConnetionString))
                {
                    connection.Open();
                    var query = $@"
                        SELECT  * 
                        FROM    Items
                        WHERE   ('{searchParams.ItemId ?? ""}' = '' OR ItemNo = '{searchParams.ItemId}')       
                        AND     ('{searchParams.Barcode ?? ""}' = '' OR Barcode = '{searchParams.Barcode}')                                                                           
                        AND     ({searchParams.SortCode} = 0 OR SortCode1 = {searchParams.SortCode} OR SortCode2 = {searchParams.SortCode} OR SortCode3 = {searchParams.SortCode})                                                   
                    ";
                    /// AND     (totqty >= {searchParams.QtyInStock})

                    if (searchParams.IsBlocked.HasValue)
                    {
                        query += $"AND(TITLE {(searchParams.IsBlocked.Value ? "=" : "<>")} '{ SafeConvert.ToPervasiveString("כ")}') ";
                    }
                    if (hasSiteSync)
                    {
                        query += $"AND SITESYNC = {(searchParams.SyncToSite ? 1 : 0)} ";
                    }
                    if (hasKupaSync)
                    {
                        query += $"AND KUPASYNC = {(searchParams.SyncToFunds ? 1 : 0)} ";
                    }
                    if (hasUpdDate)
                    {
                        query += $@"
                        AND({ PervasiveDBHelper.ToPervasiveDate(searchParams.FromUpdateDate)} <= 0 OR UitemDate >= { PervasiveDBHelper.ToPervasiveDate(searchParams.FromUpdateDate)})
                        AND({ PervasiveDBHelper.ToPervasiveDate(searchParams.ToUpdateDate)} <= 0 OR UitemDate <= { PervasiveDBHelper.ToPervasiveDate(searchParams.ToUpdateDate)}) 
                    ";
                    }
                    query += "ORDER BY ItemNo DESC";

                    var command = new OdbcCommand(query);
                    command.Connection = connection;

                    /// throw new Exception(query);

                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            items.Add(new Item
                            {
                                Id              = SafeConvert.ToString(reader["ItemNo"]),
                                ItemNameHE      = SafeConvert.ToString(reader["ItemName"]),
                                ItemNameEN      = SafeConvert.ToString(reader["Ename"]),
                                Barcode         = SafeConvert.ToString(reader["Barcode"]),
                                Characteristic1 = SafeConvert.ToString(reader["ifun1"]),
                                Characteristic2 = SafeConvert.ToString(reader["ifun2"]),
                                CurrencyCode1   = SafeConvert.ToInt32(reader["FC1"]),
                                CurrencyCode2   = SafeConvert.ToInt32(reader["FC2"]),
                                CurrencyCode3   = SafeConvert.ToInt32(reader["FC3"]),
                                CurrencyCode4   = SafeConvert.ToInt32(reader["FC4"]),
                                CurrencyCode5   = SafeConvert.ToInt32(reader["FC5"]),
                                CurrencyCode6   = SafeConvert.ToInt32(reader["FC6"]),
                                CurrencyCode7   = SafeConvert.ToInt32(reader["FC7"]),
                                CurrencyCode8   = SafeConvert.ToInt32(reader["FC8"]),
                                CurrencyCode9   = SafeConvert.ToInt32(reader["FC9"]),
                                CurrencyCode10  = SafeConvert.ToInt32(reader["FC10"]),
                                Price1          = SafeConvert.ToSingle(reader["Prc1"]),
                                Price2          = SafeConvert.ToSingle(reader["Prc2"]),
                                Price3          = SafeConvert.ToSingle(reader["Prc3"]),
                                Price4          = SafeConvert.ToSingle(reader["Prc4"]),
                                Price5          = SafeConvert.ToSingle(reader["Prc5"]),
                                Price6          = SafeConvert.ToSingle(reader["Prc6"]),
                                Price7          = SafeConvert.ToSingle(reader["Prc7"]),
                                Price8          = SafeConvert.ToSingle(reader["Prc8"]),
                                Price9          = SafeConvert.ToSingle(reader["Prc9"]),
                                Price10         = SafeConvert.ToSingle(reader["Prc10"]),
                                SortCode1       = SafeConvert.ToInt32(reader["SortCode1"]),
                                SortCode2       = SafeConvert.ToInt32(reader["SortCode2"]),
                                SortCode3       = SafeConvert.ToInt32(reader["SortCode3"]),
                                SupplerId1      = SafeConvert.ToInt32(reader["Supl1"]),
                                SupplerId2      = SafeConvert.ToInt32(reader["Supl2"]),
                                SupplerId3      = SafeConvert.ToInt32(reader["Supl3"]),
                                SupplerId4      = SafeConvert.ToInt32(reader["Supl4"]),
                                Unit            = SafeConvert.ToString(reader["Unit"]),
                                ///QtyInStock = SafeConvert.ToSingle(reader["totqty"]),
                                VatFlag     = SafeConvert.ToBoolean(reader["Patur"]),
                                SyncToSite  = SafeConvert.ToBoolean(reader.ReadOrDefault <bool>("SITESYNC")),
                                SyncToFunds = SafeConvert.ToBoolean(reader.ReadOrDefault <bool>("KUPASYNC")),
                                IsBlocked   = SafeConvert.ToBoolean(reader["TITLE"]),
                                UpdatedDate = FromPervasiveDate(Convert.ToDouble(reader.ReadOrDefault <double>("UitemDate"))),
                                ProviderId  = 0
                            });
                        }
                    }

                    return(items);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                throw;
            }
        }