sm_stock_prediction_api / data_collector.py
Arafath10's picture
Update data_collector.py
3aab50a verified
raw
history blame
4.68 kB
import mysql.connector
from decimal import Decimal
import pandas as pd
from prophet import Prophet
import math
# Define the connection parameters
host = "159.138.104.192"
user = "storemate_ml"
password = "bTgZd77VpD^o4Ai6Dw9xs9"
database = "lite_version"
def forecast(monthly_sales):
# Prepare the data for Prophet
monthly_sales.rename(columns={'transaction_date': 'ds', 'sell_qty': 'y'}, inplace=True)
# Initialize and fit the Prophet model
model = Prophet()
model.fit(monthly_sales)
# Make a future dataframe for the next month
future = model.make_future_dataframe(periods=1, freq='M')
forecast = model.predict(future)
# Extract the forecasted sales for the next month
forecasted_sales = forecast[['ds', 'yhat']].tail(2)
# Combine historical and forecasted data
combined_sales = pd.concat([monthly_sales, forecasted_sales[-1:]], ignore_index=True)
original_forecasted_value = combined_sales.tail(1)
rounded_value = combined_sales.tail(1)
rounded_value['yhat'] = rounded_value['yhat'].apply(lambda x: max(0, math.ceil(x)))
return combined_sales,original_forecasted_value,rounded_value
def get_data(b_id,product_name):
# Create a connection to the MySQL server
try:
# Create a connection to the MySQL server
connection = mysql.connector.connect(
host=host,
user=user,
password=password,
database=database
)
if connection.is_connected():
print("Connected to MySQL database")
# Create a cursor object for executing SQL queries
cursor = connection.cursor()
# Define the SQL SELECT query
sql_query = f"""
SELECT
`b`.`id` AS `business_id`,
`b`.`name` AS `business_name`,
`p`.`name` AS `product_name`,
`p`.`type` AS `product_type`,
`c1`.`name` AS `category_name`,
`pv`.`name` AS `product_variation`,
`v`.`name` AS `variation_name`,
`v`.`sub_sku`,
`c`.`name` AS `customer`,
`c`.`contact_id`,
`t`.`id` AS `transaction_id`,
`t`.`invoice_no`,
`t`.`transaction_date` AS `transaction_date`,
(transaction_sell_lines.quantity - transaction_sell_lines.quantity_returned) AS sell_qty,
`u`.`short_name` AS `unit`,
transaction_sell_lines.unit_price_inc_tax,
transaction_sell_lines.unit_price_before_discount
FROM `transaction_sell_lines`
INNER JOIN `transactions` AS `t`
ON `transaction_sell_lines`.`transaction_id` = `t`.`id`
INNER JOIN `variations` AS `v`
ON `transaction_sell_lines`.`variation_id` = `v`.`id`
LEFT JOIN `transaction_sell_lines_purchase_lines` AS `tspl`
ON `transaction_sell_lines`.`id` = `tspl`.`sell_line_id`
LEFT JOIN `purchase_lines` AS `pl`
ON `tspl`.`purchase_line_id` = `pl`.`id`
INNER JOIN `product_variations` AS `pv`
ON `v`.`product_variation_id` = `pv`.`id`
INNER JOIN `contacts` AS `c`
ON `t`.`contact_id` = `c`.`id`
INNER JOIN `products` AS `p`
ON `pv`.`product_id` = `p`.`id`
LEFT JOIN `business` AS `b`
ON `p`.`business_id` = `b`.`id`
LEFT JOIN `categories` AS `c1`
ON `p`.`category_id` = `c1`.`id`
LEFT JOIN `tax_rates`
ON `transaction_sell_lines`.`tax_id` = `tax_rates`.`id`
LEFT JOIN `units` AS `u`
ON `p`.`unit_id` = `u`.`id`
LEFT JOIN `transaction_payments` AS `tp`
ON `tp`.`transaction_id` = `t`.`id`
LEFT JOIN `transaction_sell_lines` AS `tsl`
ON `transaction_sell_lines`.`parent_sell_line_id` = `tsl`.`id`
WHERE `t`.`type` = 'sell'
AND `t`.`status` = 'final'
AND `t`.`business_id` = {b_id}
AND `p`.`name` = '{product_name}'
GROUP BY `b`.`id`,
`transaction_sell_lines`.`id`;
"""
# Execute the SQL query
cursor.execute(sql_query)
# Fetch all the rows as a list of tuples
results = cursor.fetchall()
results = [tuple(
float(val) if isinstance(val, Decimal) else val for val in row
) for row in results]
#print(results)
# Display the results
#for row in results:
#print(row) # You can process the results as needed
# Close the cursor and connection
cursor.close()
connection.close()
# Create a DataFrame
columns = ["business_id","business_name","product_name","product_type","category_name","product_variation","variation_name","sub_sku","customer","contact_id","transaction_id","invoice_no","transaction_date","sell_qty","unit","cost_price","selling_price"]
df = pd.DataFrame(results, columns=columns)
return df,"done"
except mysql.connector.Error as e:
return e,"error"