Fifo-Simulation / app.py
AnnasBlackHat's picture
display changes
a1203a8
import gradio as gr
import pandas as pd
import requests
import json
from collections import defaultdict
def filter_records(records):
# Convert DataFrame to JSON
data = records.to_dict(orient='records')
# Add additional fields
for i, item in enumerate(data):
item['stock_price_id'] = i + 1
item['product_detail_fkid'] = 1
item['stock_in'] = float(item['stock_in'])
item['stock_out'] = float(item['stock_out'])
item['price'] = float(item['price'])
item['stock_in_id'] = "100"
item['stock_in_source'] = "purchase"
json_data = json.dumps(data)
print('request: ', json_data)
# Make POST request
url = 'https://api-report.uniq-dev.xyz/v1/simulation/fifo'
headers = {'Content-type': 'application/json'}
response = requests.post(url, data=json_data, headers=headers)
# Check response status code
if response.status_code != 200:
return "Error: API response status code " + str(response.status_code)
# Convert response JSON to DataFrame and return
print('response: ', response.text)
response_json = json.loads(response.text)
df_response = pd.DataFrame(response_json['data'])
# Keep only certain columns
columns = ['stock_in', 'stock_out', 'price']
df_response = df_response[columns]
changes = json.dumps(response_json['changes'].copy(), indent=4)
print(changes)
return df_response, generate_markdown(response_json['changes']), changes
def generate_markdown(data):
grouped = defaultdict(lambda: defaultdict(list))
for key, value in data.items():
for item in value:
grouped[item['StockPriceId']][key].append(item)
result = dict(grouped)
grouped_json = json.dumps(result)
# Sort keys
sorted_keys = sorted(result.keys(), reverse=False)
# Build sorted dict
sorted_data = {}
for key in sorted_keys:
sorted_data[key] = result[key]
md = ""
for stock_price_id, group in sorted_data.items():
qtys = [item["Qty"] for v in group.values() for item in v]
md += f"### StockPriceId {stock_price_id}, Qty Changes: {sum(qtys)}\n"
md += "| StockPriceId | Qty | Price |\n"
md += "|---|---|---|\n"
for key, value in group.items():#for value in group.values():
for item in value:
md += f"| {key} | {item['Qty']} | {item['Price']} |\n"
md += "\n"
return md
columns = ['stock_in', 'stock_out', 'price']
exaples = [[{"stock_price_id":1,"product_detail_fkid":1,"stock_in":6,"stock_out":0,"price":80000,"stock_in_id":"156634","stock_in_source":"purchase"},{"stock_price_id":2,"product_detail_fkid":1,"stock_in":20,"stock_out":10,"price":18000,"stock_in_id":"156640","stock_in_source":"purchase","stock_out_id":None}],
[{"stock_price_id":1,"product_detail_fkid":1,"stock_in":16,"stock_out":1,"price":80000,"stock_in_id":"156634","stock_in_source":"purchase"},{"stock_price_id":2,"product_detail_fkid":1,"stock_in":5,"stock_out":5,"price":18000,"stock_in_id":"156640","stock_in_source":"purchase"},{"stock_price_id":3,"product_detail_fkid":1,"stock_in":21,"stock_out":4,"price":18000,"stock_in_id":"156640","stock_in_source":"purchase"}],
[{"stock_price_id":1,"product_detail_fkid":1,"stock_in":6,"stock_out":0,"price":80000,"stock_in_id":"156634","stock_in_source":"purchase"},{"stock_price_id":2,"product_detail_fkid":1,"stock_in":10,"stock_out":10,"price":18000,"stock_in_id":"156640","stock_in_source":"purchase"},{"stock_price_id":3,"product_detail_fkid":1,"stock_in":20,"stock_out":10,"price":18000,"stock_in_id":"156640","stock_in_source":"purchase"}],
[{"stock_price_id":1,"product_detail_fkid":1,"stock_in":10,"stock_out":0,"price":5000,"stock_in_id":"100","stock_in_source":"purchase"},{"stock_price_id":2,"product_detail_fkid":1,"stock_in":10,"stock_out":10,"price":6000,"stock_in_id":"101","stock_in_source":"purchase"},{"stock_price_id":3,"product_detail_fkid":1,"stock_in":20,"stock_out":0,"price":7000,"stock_in_id":"102","stock_in_source":"purchase"},{"stock_price_id":4,"product_detail_fkid":1,"stock_in":10,"stock_out":0,"price":5000,"stock_in_id":"103","stock_in_source":"purchase"}],
[{"stock_price_id":1,"product_detail_fkid":1,"stock_in":10,"stock_out":20,"price":5000,"stock_in_id":"100","stock_in_source":"purchase"},{"stock_price_id":2,"product_detail_fkid":1,"stock_in":5,"stock_out":5,"price":6000,"stock_in_id":"101","stock_in_source":"purchase"},{"stock_price_id":3,"product_detail_fkid":1,"stock_in":4,"stock_out":4,"price":7000,"stock_in_id":"102","stock_in_source":"purchase"}]]
example_df = [pd.DataFrame(json_data)[columns] for json_data in exaples]
demo = gr.Interface(
filter_records,
[
gr.Dataframe(
headers=["stock_in", "stock_out", "price"],
datatype=["number", "number", "number"],
row_count=2,
col_count=(3, "fixed"),
)
],
["dataframe", "markdown", "json"],
description="Enter Stock Price to Recalculate!",
examples = example_df
)
if __name__ == "__main__":
demo.launch()