Example #1
0
        /// <summary>
        /// Updates product's imageBlobId
        /// </summary>
        public Response UpdateImage(Objects.Product product, Objects.File file)
        {
            Response response = new Response();

            try
            {
                Database.Connection.Open();

                var          query   = " UPDATE Products SET ImageBlobId=@ImageBlobId WHERE ProductId=@ProductId ";
                MySqlCommand Command = new MySqlCommand(query, Database.Connection);
                Command.Parameters.AddWithValue("ProductId", product.Id);
                Command.Parameters.AddWithValue("ImageBlobId", file.BlobId);
                Command.ExecuteNonQuery();

                Database.Connection.Close();

                // Updated Successfully
                response.StatusCode = 200;
                response.Data       = product;
            }
            catch (MySqlException e)
            {
                Logger.QueryError(e, "Product", "Updating Image");
                // Status Code
                response.StatusCode = 500;
            }
            //Close Connection if Open
            if (Database.Connection.State == ConnectionState.Open)
            {
                Database.Connection.Close();
            }

            return(response);
        }
Example #2
0
        /// <summary>
        ///  Update Product Stock
        ///  </summary>
        public Response UpdateStock(Objects.Product product)
        {
            int      statusCode = 204;
            Response response   = new Response();

            try
            {
                Database.Connection.Open();

                var          query   = " UPDATE Products SET Stock=@Stock WHERE ProductId=@ProductId ";
                MySqlCommand Command = new MySqlCommand(query, Database.Connection);
                Command.Parameters.AddWithValue("ProductId", product.Id);
                Command.Parameters.AddWithValue("Stock", product.Stock);
                Command.ExecuteNonQuery();

                Database.Connection.Close();

                // Updated Successfully
                statusCode          = 204;
                response.StatusCode = statusCode;
                response.Data       = product;
            }
            catch (MySqlException e)
            {
                Logger.QueryError(e, "Product", "Update Stock");
                // Status Code
                response.StatusCode = 500;
            }
            if (Database.Connection.State == ConnectionState.Open)
            {
                Database.Connection.Close();
            }

            return(response);
        }
Example #3
0
        /// <summary>
        /// Checks if Id is valid
        /// </summary>
        /// <returns></returns>
        public bool IsValid(Objects.Product product)
        {
            bool isValid;

            try
            {
                //Open Connection
                Database.Connection.Open();

                string       query   = "SELECT ProductId FROM Products WHERE ProductId=@ProductId";
                MySqlCommand Command = new MySqlCommand(query, Database.Connection);
                Command.Parameters.AddWithValue("ProductId", product.Id);
                MySqlDataReader DataReader = Command.ExecuteReader();
                if (!DataReader.HasRows)
                {
                    isValid = false;
                }
                else
                {
                    isValid = true;
                }

                //Close Connection
                Database.Connection.Close();
            }
            catch (MySqlException e)
            {
                Logger.QueryError(e, "Product", "Verifying Id");
                isValid = false;
            }

            //Close Connection if Open
            if (Database.Connection.State == ConnectionState.Open)
            {
                Database.Connection.Close();
            }

            return(isValid);
        }
Example #4
0
        /// <summary>
        ///  Delete
        /// </summary>
        public Response Delete(Objects.Product product)
        {
            //Props
            int      statusCode = 204;
            Response response   = new Response();

            try
            {
                Database.Connection.Open();

                string Query = "DELETE FROM Products WHERE ProductId=@ProductId ";
                //Execute Query With Connection  => DataReader
                MySqlCommand Command = new MySqlCommand(Query, Database.Connection);
                Command.Parameters.AddWithValue("ProductId", product.Id);
                Command.ExecuteNonQuery();

                //Close Connection
                Database.Connection.Close();

                //[HTTP Status Code] OK : Successfully Deleted : Returning No Content
                statusCode          = 204;
                response.StatusCode = statusCode;
            }
            catch (MySqlException e)
            {
                Logger.QueryError(e, "Product", "Delete ");
                // Internal Error :
                response.StatusCode = 500;
            }
            //Close Connection if Open
            if (Database.Connection.State == ConnectionState.Open)
            {
                Database.Connection.Close();
            }

            return(response);
        }
Example #5
0
        /// <summary>
        ///  Update
        ///  </summary>
        public Response Update(Objects.Product product)
        {
            //Props
            int      statusCode        = 200;
            Response response          = new Response();
            var      color             = ColorUtil.ToHEXColor(product.Color);
            var      isBalanceRequired = Func.ToString(product.IsBalanceRequired);

            try
            {
                Database.Connection.Open();

                var query = " UPDATE Products SET ProductId=@ProductId, Barcode=@Barcode, Name=@Name, Description=@Description," +
                            " Stock=@Stock, IsBalanceRequired=@IsBalanceRequired, SupplyPrice=@SupplyPrice, RetailPrice=@RetailPrice, Markup=@Markup, TaxId=@TaxId, TypeId=@TypeId, " +
                            " BrandId=@BrandId, SupplierId=@SupplierId, Color=@Color " +
                            " WHERE ProductId=@ProductId ";
                MySqlCommand Command = new MySqlCommand(query, Database.Connection);

                Command.Parameters.AddWithValue("ProductId", product.Id);
                Command.Parameters.AddWithValue("Barcode", product.Barcode);
                Command.Parameters.AddWithValue("Name", product.Name);
                Command.Parameters.AddWithValue("Description", product.Description);
                Command.Parameters.AddWithValue("Stock", product.Stock);
                Command.Parameters.AddWithValue("IsBalanceRequired", isBalanceRequired);
                Command.Parameters.AddWithValue("SupplyPrice", product.SupplyPrice);
                Command.Parameters.AddWithValue("RetailPrice", product.RetailPrice);
                Command.Parameters.AddWithValue("Markup", product.Markup);
                Command.Parameters.AddWithValue("Color", color);

                Command.Parameters.AddWithValue("TaxId", product.Tax.Id);
                Command.Parameters.AddWithValue("TypeId", product.Type.Id);
                Command.Parameters.AddWithValue("BrandId", product.Brand.Id);
                Command.Parameters.AddWithValue("SupplierId", product.Supplier.Id);

                Command.ExecuteNonQuery();

                Database.Connection.Close();

                // Updated Successfully
                statusCode = 204;

                //Response
                response.StatusCode = statusCode;
            }
            catch (MySqlException e)
            {
                if (e.Message.Contains("Duplicate entry"))
                {
                    //Duplicate Key or Conflict
                    statusCode = 409;
                }
                else
                {
                    // Internal Server Error
                    statusCode = 500;
                }

                Logger.QueryError(e, "Product", "Update");
                // Status Code
                response.StatusCode = statusCode;
            }
            //Close Connection if Open
            if (Database.Connection.State == ConnectionState.Open)
            {
                Database.Connection.Close();
            }

            return(response);
        }
Example #6
0
        /// <summary>
        /// Create a new Product
        /// </summary>
        /// <returns></returns>
        public Response Create(Objects.Product product)
        {
            //Props
            int      statusCode = 201;
            Response response   = new Response();

            //Random Tokens
            product.Id = ServerUtil.GenerateToken(TokenLengths.ProductIdLength);
            var color             = ColorUtil.ToHEXColor(product.Color);
            var isBalanceRequired = Func.ToString(product.IsBalanceRequired);

            try
            {
                //Database.Reconnect();
                Database.Connection.Open();
                var query = " INSERT INTO Products (ProductId, Barcode, Name, Description, Stock, IsBalanceRequired, SupplyPrice, RetailPrice, Markup," +
                            " TaxId, TypeId, BrandId, SupplierId, ImageBlobId, Color) " +
                            " VALUES (@ProductId, @Barcode, @Name, @Description, @Stock, @IsBalanceRequired, @SupplyPrice, @RetailPrice, @Markup," +
                            " @TaxId, @TypeId, @BrandId, @SupplierId, @ImageBlobId, @Color) ";
                MySqlCommand Command = new MySqlCommand(query, Database.Connection);

                Command.Parameters.AddWithValue("ProductId", product.Id);
                Command.Parameters.AddWithValue("Barcode", product.Barcode);
                Command.Parameters.AddWithValue("Name", product.Name);
                Command.Parameters.AddWithValue("Description", product.Description);
                Command.Parameters.AddWithValue("Stock", product.Stock);
                Command.Parameters.AddWithValue("IsBalanceRequired", isBalanceRequired);
                Command.Parameters.AddWithValue("SupplyPrice", product.SupplyPrice);
                Command.Parameters.AddWithValue("RetailPrice", product.RetailPrice);
                Command.Parameters.AddWithValue("Markup", product.Markup);
                Command.Parameters.AddWithValue("Color", color);

                Command.Parameters.AddWithValue("TaxId", product.Tax.Id);
                Command.Parameters.AddWithValue("TypeId", product.Type.Id);
                Command.Parameters.AddWithValue("BrandId", product.Brand.Id);
                Command.Parameters.AddWithValue("SupplierId", product.Supplier.Id);
                Command.Parameters.AddWithValue("ImageBlobId", product.ImageBlobId);

                Command.ExecuteNonQuery();

                Database.Connection.Close();

                // Status Code
                statusCode = 201;
            }
            catch (MySqlException e)
            {
                if (e.Message.Contains("Duplicate entry"))
                {
                    //Duplicate Key or Conflict
                    statusCode = 409;
                }
                else
                {
                    // Internal Server Error
                    statusCode = 500;
                }
                Logger.QueryError(e, "Product", "Create");
            }
            //Close Connection if Open
            if (Database.Connection.State == ConnectionState.Open)
            {
                Database.Connection.Close();
            }

            //Response

            response.StatusCode = statusCode;
            response.Data       = product;

            return(response);
        }
Example #7
0
        /// <summary>
        /// Get Inventory Products
        /// </summary>
        /// <returns></returns>
        public Response GetInventoryProducts(Objects.InventorySearchQuery searchQuery, Objects.Pagination pagination)
        {
            int           statusCode = 200;
            Response      response   = new Response();
            List <object> products   = new List <object>();

            try
            {
                Database.Connection.Open();

                var q     = $"%{searchQuery.Query}%";
                var query = GetInventorySearchQuery(searchQuery) + Func.GetPaginationLimit(pagination);

                //Execute Query
                MySqlCommand Command = new MySqlCommand(query, Database.Connection);
                Command.Parameters.AddWithValue("SearchQuery", q);
                Command.Parameters.AddWithValue("StockQuery", searchQuery.StockQuery);
                Command.Parameters.AddWithValue("DateFrom", searchQuery.DateFrom);
                Command.Parameters.AddWithValue("DateTo", searchQuery.DateTo);
                Command.Parameters.AddWithValue("Status", searchQuery.Status);
                MySqlDataReader DataReader = Command.ExecuteReader();

                //Read Data
                while (DataReader.Read())
                {
                    Objects.Product product = new Objects.Product
                    {
                        Id          = DataReader["ProductId"].ToString(),
                        Barcode     = DataReader["Barcode"].ToString(),
                        Name        = DataReader["Name"].ToString(),
                        Description = DataReader["Description"].ToString(),

                        Stock             = Func.ToDecimal(DataReader["Stock"].ToString()),
                        IsBalanceRequired = Func.ToBoolean(DataReader["IsBalanceRequired"].ToString()),
                        SupplyPrice       = Func.ToDecimal(DataReader["SupplyPrice"].ToString()),
                        RetailPrice       = Func.ToDecimal(DataReader["RetailPrice"].ToString()),
                        Markup            = Func.ToDecimal(DataReader["Markup"].ToString()),
                        ImageBlobId       = DataReader["ImageBlobId"].ToString(),
                        Color             = ColorUtil.HEXToColor(DataReader["Color"].ToString()),

                        UpdatedAt = Convert.ToDateTime(DataReader["UpdatedAt"].ToString()),
                        CreatedAt = Convert.ToDateTime(DataReader["CreatedAt"].ToString()),

                        Tax = new Objects.Tax {
                            Id = DataReader["TaxId"].ToString()
                        },
                        Brand = new Objects.ProductBrand {
                            Id = DataReader["BrandId"].ToString()
                        },
                        Supplier = new Objects.ProductSupplier {
                            Id = DataReader["SupplierId"].ToString()
                        },
                        Type = new Objects.ProductType {
                            Id = DataReader["TypeId"].ToString()
                        },

                        IsSearchItem = true,
                    };

                    products.Add(product);
                }
                if (!DataReader.HasRows)
                {
                    // Nothing
                    statusCode = 204;
                }
                else
                {
                    // OK
                    statusCode = 200;
                }

                Database.Connection.Close();

                //Response
                response.StatusCode = statusCode;
                response.DataArray  = products;
                response.Pagination = pagination;
            }
            catch (MySqlException e)
            {
                Logger.QueryError(e, "Product", "Getting Products");
                // Internal Error :
                response.StatusCode = 500;
            }
            //Close Connection if Open
            if (Database.Connection.State == ConnectionState.Open)
            {
                Database.Connection.Close();
            }

            return(response);
        }
Example #8
0
        /// <summary>
        /// Get Product
        /// </summary>
        public Response Get(Objects.Product product, bool isSellItem = false)
        {
            //Props
            int      statusCode = 200;
            Response response = new Response();
            string   taxId = null, typeId = null, brandId = null, supplierId = null;

            try
            {
                Database.Connection.Open();

                var noramlQuery   = "SELECT * FROM Products WHERE (ProductId=@ProductId OR  Barcode=@Barcode)";
                var sellItemQuery = " SELECT DISTINCT Products.*, ProductDiscounts.DiscountId,  " +
                                    " IF(ProductDiscounts.DiscountId IS NOT NULL AND " +
                                    "       ( NOW() BETWEEN( SELECT Discounts.StartDate FROM Discounts " +
                                    "       WHERE Discounts.DiscountId = ProductDiscounts.DiscountId )   " +
                                    "       AND( SELECT Discounts.EndDate FROM Discounts WHERE Discounts.DiscountId = ProductDiscounts.DiscountId))," +
                                    "       TRUE, FALSE) " +
                                    " AS IsDiscounted FROM Products " +

                                    " LEFT JOIN ProductDiscounts " +
                                    "   ON(Products.ProductId = ProductDiscounts.ProductId) " +
                                    " LEFT JOIN Discounts " +
                                    "   ON(Discounts.DiscountId = ProductDiscounts.DiscountId) " +
                                    " WHERE (Products.ProductId=@ProductId OR  Products.Barcode=@Barcode) ";

                var query = (isSellItem) ? sellItemQuery : noramlQuery;

                //Execute Query
                MySqlCommand Command = new MySqlCommand(query, Database.Connection);
                Command.Parameters.AddWithValue("ProductId", product.Id);
                Command.Parameters.AddWithValue("Barcode", product.Barcode);
                MySqlDataReader DataReader = Command.ExecuteReader();

                //Read Data
                while (DataReader.Read())
                {
                    product.Id          = DataReader["ProductId"].ToString();
                    product.Barcode     = DataReader["Barcode"].ToString();
                    product.Name        = DataReader["Name"].ToString();
                    product.Description = DataReader["Description"].ToString();

                    product.Stock             = Func.ToDecimal(DataReader["Stock"].ToString());
                    product.IsBalanceRequired = Func.ToBoolean(DataReader["IsBalanceRequired"].ToString());

                    if (isSellItem)
                    {
                        product.IsDiscounted = Func.ToBoolean(DataReader["IsDiscounted"].ToString());
                        product.Discount     = new Objects.DiscountProduct
                        {
                            DiscountId = DataReader["DiscountId"].ToString(),
                            ProductId  = DataReader["ProductId"].ToString(),
                        };
                    }

                    product.SupplyPrice = Func.ToDecimal(DataReader["SupplyPrice"].ToString());
                    product.RetailPrice = Func.ToDecimal(DataReader["RetailPrice"].ToString());
                    product.Markup      = Func.ToDecimal(DataReader["Markup"].ToString());
                    product.ImageBlobId = DataReader["ImageBlobId"].ToString();
                    product.Color       = ColorUtil.HEXToColor(DataReader["Color"].ToString());

                    product.UpdatedAt = Convert.ToDateTime(DataReader["UpdatedAt"].ToString());
                    product.CreatedAt = Convert.ToDateTime(DataReader["CreatedAt"].ToString());

                    taxId      = DataReader["TaxId"].ToString();
                    typeId     = DataReader["TaxId"].ToString();
                    brandId    = DataReader["TaxId"].ToString();
                    supplierId = DataReader["TaxId"].ToString();
                }
                if (!DataReader.HasRows)
                {
                    // Bad Request
                    statusCode = 400;
                }
                else
                {
                    // OK
                    statusCode = 200;
                }

                //Close Connection
                Database.Connection.Close();

                if (statusCode == 200)
                {
                    product.Image = GetImage(product.ImageBlobId, product.Name, product.Color);
                }

                // Get Objects
                product.Type     = ProductType.GetTypeById(typeId);
                product.Brand    = ProductBrand.GetBrand(brandId);
                product.Supplier = ProductSupplier.GetSupplier(supplierId);
                product.Tax      = Tax.GetTax(taxId);

                //Response
                response.StatusCode = statusCode;
                response.Data       = product;
            }
            catch (MySqlException e)
            {
                Logger.QueryError(e, "Product", "Getting Product");
                // Internal Error :
                response.StatusCode = 500;
            }
            //Close Connection if Open
            if (Database.Connection.State == ConnectionState.Open)
            {
                Database.Connection.Close();
            }

            return(response);
        }
Example #9
0
        /// <summary>
        /// Get Top Sold Products
        /// </summary>
        /// <returns></returns>
        public Response GetTopSoldProducts(Objects.Insights insights, int limit = 0)
        {
            int           statusCode = 200;
            Response      response   = new Response();
            List <object> products   = new List <object>();

            try
            {
                Database.Connection.Open();

                var append = (limit != 0) ? " LIMIT @Limit" : " ";
                var query  = " SELECT DISTINCT " +
                             " SUM(SaleItems.Quantity) As TotalQuantity, Products.* " +
                             " FROM SaleItems INNER JOIN Products " +
                             " ON Products.ProductId = SaleItems.ProductId " +
                             "GROUP BY ProductId " +
                             "ORDER BY TotalQuantity DESC" + append;

                MySqlCommand Command = new MySqlCommand(query, Database.Connection);
                Command.Parameters.AddWithValue("Limit", limit);
                MySqlDataReader DataReader = Command.ExecuteReader();

                while (DataReader.Read())
                {
                    Objects.Product product = new Objects.Product
                    {
                        Id          = DataReader["ProductId"].ToString(),
                        Barcode     = DataReader["Barcode"].ToString(),
                        Name        = DataReader["Name"].ToString(),
                        Description = DataReader["Description"].ToString(),

                        Stock             = decimal.Parse(DataReader["Stock"].ToString()),
                        IsBalanceRequired = Func.ToBoolean(DataReader["IsBalanceRequired"].ToString()),
                        SupplyPrice       = decimal.Parse(DataReader["SupplyPrice"].ToString()),
                        RetailPrice       = decimal.Parse(DataReader["RetailPrice"].ToString()),
                        Markup            = decimal.Parse(DataReader["Markup"].ToString()),
                        ImageBlobId       = DataReader["ImageBlobId"].ToString(),
                        Color             = ColorUtil.HEXToColor(DataReader["Color"].ToString()),

                        UpdatedAt = Convert.ToDateTime(DataReader["UpdatedAt"].ToString()),
                        CreatedAt = Convert.ToDateTime(DataReader["CreatedAt"].ToString()),

                        Tax = new Objects.Tax {
                            Id = DataReader["TaxId"].ToString()
                        },
                        Brand = new Objects.ProductBrand {
                            Id = DataReader["BrandId"].ToString()
                        },
                        Supplier = new Objects.ProductSupplier {
                            Id = DataReader["SupplierId"].ToString()
                        },
                        Type = new Objects.ProductType {
                            Id = DataReader["TypeId"].ToString()
                        },

                        IsSearchItem = true,
                    };

                    products.Add(product);
                }
                if (!DataReader.HasRows)
                {
                    // No Content
                    statusCode = 204;
                }
                else
                {
                    // OK
                    statusCode = 200;
                }

                Database.Connection.Close();

                //Response
                insights.TopSoldProducts = products;
                response.StatusCode      = statusCode;
                response.Data            = insights;
            }
            catch (MySqlException e)
            {
                Logger.QueryError(e, "Store", "Getting Top Sold Products");
                // Internal Error :
                response.StatusCode = 500;
            }
            if (Database.Connection.State == ConnectionState.Open)
            {
                Database.Connection.Close();
            }

            return(response);
        }