def calculate(): try: city = str(request.form['city']) customer_type = str(request.form['cust_type']) # residentaial-> R, commercial-> C, industrial -> I connection_type = str(request.form['conn_type']) # LT, HT rooftop_area = int(request.form['area']) # sqft # rooftop_type = 0 # 450 monthly_bill = int(request.form['bill']) # Rs. sanction_load = int(request.form['load']) # kVA except: flash('Wrong Information!') return redirect(url_for('calculator')) print(city, customer_type, connection_type, rooftop_area, monthly_bill, sanction_load) # customer_type = 'R' # residentaial-> R, commercial-> C, industrial -> I # connection_type = 'LT' # LT, HT # rooftop_area = 200 # sqft # rooftop_type = 0 # 450 # monthly_bill = 1000 # Rs. # sanction_load = 3 # kVA if (customer_type == 'R') & (connection_type == 'LT'): # Residential and LT total_units = lt2a(monthly_bill) sys_type = 'Grid-tie' elif (customer_type == 'C') & (connection_type == 'LT'): # Commercial & LT total_units = lt3(monthly_bill) sys_type = 'Grid-tie' elif (customer_type == 'I') & (connection_type == 'LT'): # Industrial & LT total_units = lt3(monthly_bill) sys_type = 'Grid-interactive' elif (customer_type == 'R') & (connection_type == 'HT'): # Residential and HT total_units = ht4(monthly_bill) sys_type = 'Grid-tie' elif (customer_type == 'C') & (connection_type == 'HT'): # Commercial & HT total_units = ht2b(monthly_bill) sys_type = 'Grid-interactive' elif (customer_type == 'I') & (connection_type == 'HT'): # Industrial & HT total_units = ht2a(monthly_bill) sys_type = 'Grid-interactive' elif (customer_type == 'R') & (connection_type == 0): # Residential and - total_units = lt2a(monthly_bill) sys_type = 'Grid-tie' elif (customer_type == 'C') & (connection_type == 0): # Commercial & - total_units = lt3(monthly_bill) sys_type = 'Grid-tie' elif (customer_type == 'I') & (connection_type == 0): # Industrial & - total_units = ht2a(monthly_bill) sys_type = 'Grid-interactive' else: flash('Wrong Information!') return redirect(url_for('index')) size_of_rooftop_sys = ((total_units / 5) / 30) if size_of_rooftop_sys <= (rooftop_area / 100): system_size = math.ceil( size_of_rooftop_sys * 10) / 10.0 # math.ceil(num * 100) / 100.0 returns roundup to a float # print(1, system_size) else: system_size = math.ceil((rooftop_area / 100) * 10) / 10.0 # print(2) system_size = min(sanction_load, system_size) total_cost = system_size * 90000 units_prod_year = system_size * 5 * 300 # produced from solar units_used_year = total_units * 12 # from grid net_units_consumed = units_used_year - units_prod_year if net_units_consumed > 0: net_yearly_bill = net_units_consumed * 5.25 else: net_yearly_bill = net_units_consumed * 9.56 fst_year_bill = 12 * monthly_bill yearly_bills = [0, fst_year_bill] savings = [-total_cost, round(fst_year_bill - net_yearly_bill)] # round(fst_year_bill - net_yearly_bill) for i in range(2, 14): # print(i) yearly_bills.append(round(yearly_bills[i - 1] * 1.025)) savings.append(round(yearly_bills[i] - net_yearly_bill)) sum1 = 0 for i in range(1, len(savings)): # print(i) if sum1 > total_cost: i -= 1 break else: sum1 += savings[i] sum2 = sum1 sum1 = sum1 - savings[i] i = i - 1 months = (total_cost - sum1) / savings[i + 1] roi = math.ceil((i + months) * 10) / 10.0 print(sum1, sum2, i, roi) savings_irr = [] for j in range(i + 2): savings_irr.append(savings[j]) print(yearly_bills) print(savings) print(savings_irr) average_savings = 0 for i in range(1, 11): # print(i) average_savings += savings[i] average_savings = average_savings / 10 irr = round((numpy.irr(savings_irr) * 100.0), 2) print(irr) temp = { 'total_units': total_units, 'sys_type': sys_type, 'size_of_rooftop_sys': size_of_rooftop_sys, 'system_size': system_size, 'total_cost': total_cost, 'units_prod_year': units_prod_year, 'units_used_year': units_used_year, 'net_units_consumed': net_units_consumed, 'irr': irr, 'roi': roi, 'average_savings': average_savings } res = { 'system_size': system_size, 'sys_type': sys_type, 'total_cost': total_cost, 'irr': irr, 'roi': roi, 'average_savings': average_savings } result = resultClass(system_size, sys_type, total_cost, irr, roi, average_savings) return render_template('results.html', result=result)