def plot(): if request.method == "POST": data = request.get_json() if data['product'] == "Example Product": header = ['IIP', 'INI', 'D', 'FIP', 'FNI', 'LS', 'AVG', 'ORD', 'LT'] df_A = DataFrame(index=np.arange(52), columns=header).fillna(1) price = 18 order_cost = 200 else: product_A = ProductDB.get_product(data['product']) policy = data['policy'] periods = int(data['periods']) p1 = int(data['p1']) p2 = int(data['p2']) df_A = make_data(product_A, policy={'method': policy, 'param1': p1, 'param2': p2}, periods=periods) price = product_A.price order_cost = product_A.order_cost carrying_costs = int(df_A['AVG'].sum() * price * (0.21/52)) stock_out_costs = int(df_A['LS'].sum() * price) ordering_costs = int(df_A.ORD[df_A.ORD > 0].count() * order_cost) step_data = [{"PERIOD": int(x), "FIP": int(y)} for x, y in zip(df_A.index, df_A["FIP"])] pie_data = [{"TipoCosto": "Carrying", "Costo": carrying_costs}, {"TipoCosto": "Stock-Out", "Costo": stock_out_costs}, {"TipoCosto": "Ordering", "Costo": ordering_costs}] data = [step_data, pie_data] return json.dumps(data)
import unittest import pandas as pd import numpy as np from functions import make_data, Product, make_distribution # Product with constants distributions product_A = Product(name="Product_A", demand_dist=8000, lead_time_dist=1, initial_inventory=24000, price=18) df_A = make_data(product_A, policy={"method": "Qs", "param1": 20000, "param2": 10000}, periods=52) # Product with a normal demand and triangular lead_time # Set the seed so we can get the same sequence of number np.random.seed(42) product_B = Product( name="Product_B", demand_dist=make_distribution(np.random.normal, 8082, 783), lead_time_dist=make_distribution(np.random.triangular, 1, 1, 2), initial_inventory=24000, price=18, ) df_B = make_data(product_B, policy={"method": "Qs", "param1": 20000, "param2": 10000}, periods=52) class TestDataframe(unittest.TestCase): def test_dataframeA_type(self): "make_data() return a dataframe" self.assertEqual(type(df_A), pd.DataFrame)