Spaces:
Runtime error
Runtime error
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() |