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() |