GIGAParviz's picture
Upload 9 files
3fde923 verified
{% extends "layout.html" %}
{% block content %}
<div class="row">
<div class="col-lg-4">
<div class="card bg-secondary mb-3">
<div class="card-header">پارامترهای مدل</div>
<div class="card-body">
{% if import_error %}
<div class="alert alert-danger">خطا در بارگذاری main.py — لطفاً فایل و وابستگی‌ها را بررسی کنید.<pre style="white-space:pre-wrap">{{ import_error }}</pre></div>
{% endif %}
<form method="post" action="{{ url_for('run') }}">
<div class="mb-2">
<label class="form-label">نرخ تورم (مثلاً 0.015)</label>
<input name="inflation" type="text" class="form-control" value="{{ defaults.inflation if defaults else '0.015' }}">
</div>
<div class="mb-2">
<label class="form-label">نرخ مالیات (مثلاً 0.10)</label>
<input name="tax" type="text" class="form-control" value="{{ defaults.tax if defaults else '0.10' }}">
</div>
<div class="mb-2">
<label class="form-label">طول پروژه (سال)</label>
<input name="years" type="number" class="form-control" value="{{ defaults.years if defaults else 15 }}">
</div>
<div class="mb-2">
<label class="form-label">ظرفیت (KTA) - حداقل</label>
<input name="cap_min" type="number" step="1" class="form-control" value="{{ defaults.cap_min if defaults else 500 }}">
</div>
<div class="mb-2">
<label class="form-label">ظرفیت (KTA) - حداکثر</label>
<input name="cap_max" type="number" step="1" class="form-control" value="{{ defaults.cap_max if defaults else 600 }}">
</div>
<div class="mb-2">
<label class="form-label">Technology</label>
<select name="technology" class="form-select">
{% for t in techs %}
<option {{ 'selected' if loop.first }}>{{ t }}</option>
{% endfor %}
</select>
</div>
<div class="mb-2">
<label class="form-label">Export market mix (0-1)</label>
<input name="export_mix" type="number" step="0.01" class="form-control" value="{{ defaults.export_mix if defaults else 0.7 }}">
</div>
<div class="form-check mb-2">
<input class="form-check-input" type="checkbox" id="sell_byproducts" name="sell_byproducts" checked>
<label class="form-check-label" for="sell_byproducts">فروش محصولات جانبی (Sell byproducts)</label>
</div>
<hr class="my-3">
<label class="form-label">اعمال تغییرات پیشرفته (JSON)</label>
<small class="text-muted d-block mb-2">برای ویرایش / اضافه کردن تکنولوژی یا قیمت‌ها از JSON استفاده کنید (اختیاری)</small>
<div class="mb-2">
<textarea name="tech_json" rows="6" class="form-control" placeholder='مثال: {"MyTech": {"capex_base_M": 200, "opex_base_cents_kg": 150}}'></textarea>
</div>
<div class="mb-2">
<textarea name="prices_json" rows="4" class="form-control" placeholder='مثال: {"pvc_s65_export": 1200}'></textarea>
</div>
<button class="btn btn-primary w-100" type="submit">اجرا و محاسبه</button>
</form>
</div>
</div>
<div class="card bg-secondary">
<div class="card-header">فایل خروجی</div>
<div class="card-body">
<a class="btn btn-outline-light w-100" href="{{ url_for('download_results') }}">دانلود CSV نتایج</a>
</div>
</div>
</div>
<div class="col-lg-8">
{% if top_kpis %}
<div class="row mb-3">
<div class="col-md-3">
<div class="card text-dark bg-light mb-2">
<div class="card-body text-center">
<h6>بهترین IRR (%)</h6>
<h4>{{ top_kpis.irr }}</h4>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card text-dark bg-light mb-2">
<div class="card-body text-center">
<h6>سود سالانه ($M)</h6>
<h4>{{ top_kpis.annual_profit_M }}</h4>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card text-dark bg-light mb-2">
<div class="card-body text-center">
<h6>CAPEX ($M)</h6>
<h4>{{ top_kpis.capex_M }}</h4>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card text-dark bg-light mb-2">
<div class="card-body text-center">
<h6>Payback (yrs)</h6>
<h4>{{ top_kpis.payback }}</h4>
</div>
</div>
</div>
</div>
{% endif %}
<!-- Charts -->
<div class="card bg-secondary mb-3">
<div class="card-header">نمودارها و تحلیل حساسیت</div>
<div class="card-body text-center">
{% if kpi_img %}
<h6 class="text-light mb-2">KPI Dashboard</h6>
<img src="{{ url_for('static', filename=kpi_img) }}" alt="KPI Dashboard" class="img-fluid rounded shadow border border-secondary mb-3">
{% else %}
<div class="row">
<div class="col-md-6">
<canvas id="kpiChart" height="200"></canvas>
</div>
<div class="col-md-6">
<canvas id="tornadoChart" height="200"></canvas>
</div>
</div>
{% endif %}
{% if tornado_img %}
<h6 class="text-light mt-4 mb-2">Sensitivity Analysis</h6>
<img src="{{ url_for('static', filename=tornado_img) }}" alt="Tornado Chart" class="img-fluid rounded shadow border border-secondary">
{% endif %}
</div>
</div>
</div>
</div>
<script>
const chartsPayload = {{ charts_json|safe if charts_json else 'null' }};
if (chartsPayload) {
const labels = chartsPayload.map((r, i) => r.Method ? r.Method : `M${i+1}`);
const irrs = chartsPayload.map(r => Number(r.irr) || 0);
renderKPIChart(labels, irrs);
const ranges = chartsPayload.map(r => {
const low = r.irr - 5; const high = r.irr + 5; return high - low;
});
renderTornadoChart(labels, ranges);
}
</script>
{% endblock %}