Spaces:
Sleeping
Sleeping
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" | |