File size: 5,182 Bytes
1975be4
c1a2245
 
 
a9c6a56
1975be4
 
c1a2245
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a9c6a56
 
c1a2245
 
 
 
 
a9c6a56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c1a2245
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a1203a8
c1a2245
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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()