From 08d4d7a3061fccdbe69f926d397992326320cf88 Mon Sep 17 00:00:00 2001 From: Tor-Einar Skog <tor-einar.skog@bioforsk.no> Date: Wed, 2 Sep 2015 13:02:20 +0200 Subject: [PATCH] First version with charts and cool stuff! --- calculators/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 2608 bytes calculators/locale/nb/LC_MESSAGES/django.po | 133 ++++++++++++++++++++ calculators/static/calculators/js/eil.js | 86 +++++++++++++ calculators/templates/calculators/eil.html | 89 +++++++++---- 4 files changed, 283 insertions(+), 25 deletions(-) create mode 100644 calculators/locale/nb/LC_MESSAGES/django.mo create mode 100644 calculators/locale/nb/LC_MESSAGES/django.po diff --git a/calculators/locale/nb/LC_MESSAGES/django.mo b/calculators/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..89eab9bc1f153aff64ce9d529027bd83837f7d4b GIT binary patch literal 2608 zcmca7#4?qEfq_8=ivKV$FsL#xFx+7Ti83%0FflOjF)%O`GBGf4GcYhTFflOjFfcIm zFflL)FfcI8gvzgi(mR<L7&sUh7)~%TFjzA%FkEC}V31>AVBlqDU{GXWV9;S^V9;b> zVDN+TE0`G=bQu^JW-&7`sDSh_Gcc$zFfhDjW?*1tU|<kof!HU-!oVQKz`&r+!oVQR zz`)?d!oa}Jz`zj3!oa}Ez`zj40<kxPg@M5Z<X#pA20I1@hHWei3<(Sj3}0Cw_JpxA zFz_=lFto5TFk~|_Fic^Em=7`x<S$-!i1||N3=BdH3=Deg3=Dz{3=ED?I+&e-fsKKI zA(fqh!JL7CA%~rTL4kpRVF^0}gE|8P!%=pq`=R0@91IL53=9mW91#CyaX{4db3oj` zor8fvnt_2~KL-PYBm)D(Z4L$oF_3#X7#O%17#MgsA?_3BWMJTBU|>+;WMJ@PU|=xf zWMI%>U|?wEWMBwnU|?9q$-tn*z`*c_6A~}-Tnr4*C<I3&D1JfV2eJb!zyR?Vhz+s_ z6xJ*Z5W7KQObihBfx>{90TRZb_y)OEgn@xU6r_j&5*8qLf#O6QDh5g~ptK^v0ErV& zxPqiW;m+Wkn3G(ZlUS0PqTuT31Lx)!6*D;J=am%Y=O`rS7ni^}scC7M$%)C849-RQ z1qz8psfh}ud6^{;Zf;_6F_c?cRFs;RT*=^)n46fMs*qYyP?TC+oSLGLSgeo?(ps6B znv<fClV4n{P>@=rP>@<&qL7=KSX^3^nU@YR1gaO8w5z8N$h1U-w9>rflFa-(h5R&y zWMoHURgsxjoSIycnVgxDssQ&5R+YJlMcJt(3T25orKt>9RbcZ3I5_aAF32xQ%`3@F z%wcd%&d<xw%}iFv%*!e*s#M5HElbT&&~Wwi(Nsu=#!G$?gJ)hrX$gZbvSa*8bCXhw zK>kfE$jD5A24PNOUI{}0mVgXOEiTO|DP{;N%~QzDPf5*T2u>|2$;?YHW(dhh1xGN* ztb)>_<c!2(Q1~b2r6?p86y#KbI3-{;ki?J(326<aP}Bq)f*e>N!@!zA5uKT*kdvRB zn4^#kO%vewE>F!&&nSV!Gsq3Oi4~c-rMU`_5CunhQGQA(#5Pcn>M3|+7MJ7~WrB<X zM@ca#`6-lC7J!6uDiumW$tx|tNTDPnvly1*GV}BF!0sz3$}h+-f+Z7>>%d8_Ain^V z{6VQFJ2NLIHARmh5}Yy-(G*aWpOu<iqU)KW8<tvBoSC0zr4Zog?Ct38su1QH6zu8m z#}$+cGF;cUI6X5(*QqqUST`i!N`WiDKSbBLC^Zpet*%RANvf5Ck%6J9u7RblfuVw- ziIt(Hwt<m>0at*(Zcu7jCdhE8x=2^YAYEU7T^C0M4}U9PPwgmwKUXfF#Nra&kfOxA z;+({i{30s_w@@D+1wTh$R|OkaUq??L2S*o|AlKkvJ1(EZy!6t<^i<uD)WlpX1s_L0 z_fU|NZG3zjax(Sui_#HltQ5F>J$+pf{xj4w-~#3U)VvbikjjEoD}|EOiW2>ToW#sL zYlY;D#G>NV65G%aH(d*aI*_x{Qj2t5^OEyZGV{`{6fBZ5OSl4ZN{bS6blvica*M4L z@(RG*Vp}6?1qjntBTqrmR>4rynv20HwJ0?`FSP_*7<nh=WP>6nzbLhc!6`L6D>b(u zHK#bWI6J?%Brh=qMJzQfEj7D@!Lcj{l&(PqQ%-7LMk-tcR5qnTM8XntN=p(Mg0mA- zQWZ)|N{TA8OB9Opa}^RHnoAN3z-hD?q#!-(@Q$L?qTItvbD-KG`anq(hXPRM2N{=E znwMRim7k}OSf-GK#rcHPLA``c892A46qltIrDQT-Q-H@SkU+qr37qtcK_%4T8QI_> zsyJH#?AMaiqT=k-oNRc+KuRkH&%C^p#F9ivAq91oLZ(7aes*FGxcn?hWN^$YNzBPn zNXkh}$tguDu~H!sff>$_QY*0}wTQtR6bX=`D+gp*aY<$lD4s!5khGARr%;xfqL7)F zmz{NZM}b0qx<XP>X*PP$=cbnAr=%)qr0Jz*7wah$fQro2vecry+{~1e)ErHGK2Rtq zQYcH!E`fxfZ(??FW^Q6m2`ts*WtJUY3QjkO#HXj=l3JpWTBJ~xn3t28u5frM*j1?t t8IZE9I6GAV9EYhzdJK+vDXBTB;M4*RY-ospQ)Wt0YC&o-EOjFy2ml<1@W%iE literal 0 HcmV?d00001 diff --git a/calculators/locale/nb/LC_MESSAGES/django.po b/calculators/locale/nb/LC_MESSAGES/django.po new file mode 100644 index 00000000..c5ce9609 --- /dev/null +++ b/calculators/locale/nb/LC_MESSAGES/django.po @@ -0,0 +1,133 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-01 14:19+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: templates/calculators/eil.html:25 +#: templates/calculators/eil.html.py:27 +msgid "Economic injury level (EIL) calculator" +msgstr "Økonomisk skadeterskelkalkulator (EIL)" + +#: templates/calculators/eil.html:32 +msgid "Input" +msgstr "Inndata" + +#: templates/calculators/eil.html:35 +msgid "The cost of purchasing and applying the control action (insecticide)" +msgstr "Kostnaden ved innkjøp og bruk av bekjempelsesmetode (f.eks. plantevernmiddel)" + +#: templates/calculators/eil.html:36 +msgid "Control cost" +msgstr "Bekjempelseskostnad" + +#: templates/calculators/eil.html:42 +msgid "The market value of the crop in local currency per weight unit" +msgstr "Markedsverdi i lokal valuta pr vektenhet" + +#: templates/calculators/eil.html:43 +msgid "Market value" +msgstr "Markedsverdi i lokal valuta" + +#: templates/calculators/eil.html:49 +msgid "" +"The maximum yield per production unit. Historical values are typically used " +"for this expression." +msgstr "Maksimalt avlingsnivå per arealenhet. Det er vanlig å bruke historiske " +"verdier." + +#: templates/calculators/eil.html:50 +msgid "Yield potential" +msgstr "Avlingspotensial" + +#: templates/calculators/eil.html:57 +msgid "The proportion of the pest population killed." +msgstr "Andelen av skadegjører som drepes" + +#: templates/calculators/eil.html:58 +msgid "Control efficacy" +msgstr "Bekjempelseseffekt" + +#: templates/calculators/eil.html:64 +msgid "Damage expressed as crop yield loss per pest measuring unit" +msgstr "Skade uttrykt som avlingstap per skadegjørermåleenhet" + +#: templates/calculators/eil.html:65 +msgid "Damage per pest measuring unit" +msgstr "Skade per skadegjørermåleenhet" + +#: templates/calculators/eil.html:69 +msgid "Settings" +msgstr "Innstillinger" + +#: templates/calculators/eil.html:71 +msgid "Currency" +msgstr "Valuta" + +#: templates/calculators/eil.html:75 +msgid "Crop mass unit" +msgstr "Avlingsmasseenhet" + +#: templates/calculators/eil.html:79 +msgid "Crop area unit" +msgstr "Avlingsarealenhet" + +#: templates/calculators/eil.html:83 +msgid "Pest measuring unit" +msgstr "Skadegjørermåleenhet" + +#: templates/calculators/eil.html:84 +msgid "Number of aphids per plant" +msgstr "Antall bladlus per plante" + +#: templates/calculators/eil.html:87 +msgid "Run model" +msgstr "Kjør modell" + +#: templates/calculators/eil.html:91 +msgid "Results" +msgstr "Resultater" + +#: templates/calculators/eil.html:93 +msgid "Calculated EIL" +msgstr "Beregnet EIL" + +#: templates/calculators/eil.html:115 +msgid "EIL as a function of yield loss per pest unit" +msgstr "EIL som funksjon av avlingstap per skadegjørerenhet" + +#: templates/calculators/eil.html:116 +msgid "EIL as a function of control cost" +msgstr "EIL som funksjon av bekjempelseskostnad" + +#: templates/calculators/eil.html:117 +msgid "EIL as a function of market value" +msgstr "EIL som funksjon av markedsverdi" + +#: templates/calculators/eil.html:118 +msgid "EIL as a function of yield potential" +msgstr "EIL som funksjon av avlingspotensial" + +#: templates/calculators/eil.html:119 +msgid "EIL as a function of insecticide efficacy" +msgstr "EIL som funksjon av bekjempelseseffekt" + +#: templates/calculators/index.html:25 +#: templates/calculators/index.html:27 +msgid "Calculators" +msgstr "Kalkulatorer" + diff --git a/calculators/static/calculators/js/eil.js b/calculators/static/calculators/js/eil.js index 2154ad94..37e60e24 100644 --- a/calculators/static/calculators/js/eil.js +++ b/calculators/static/calculators/js/eil.js @@ -35,6 +35,7 @@ function calculateEIL(C,V,Yp,K,D) { // From Pedigo et al (1986) return C / (V * Yp * (K/100) * D); + //return C / (V * Yp * K * D); } function renderResult(formId) @@ -52,4 +53,89 @@ function renderResult(formId) document.getElementById("resultParameters").innerHTML = resultParameters; document.getElementById("resultValue").innerHTML = resultValue; +} + +function renderCharts(formId){ + + var chartContainerIds = ["EILvC","EILvV","EILvYp","EILvK"]; + var theForm = document.getElementById(formId); + // Get the settings right + var currency = theForm["currency"].value; + document.getElementById("currency1").innerHTML=currency; + document.getElementById("currency2").innerHTML=currency; + var cropAreaUnit = theForm["cropAreaUnit"].value; + document.getElementById("cropAreaUnit1").innerHTML=cropAreaUnit; + document.getElementById("cropAreaUnit2").innerHTML=cropAreaUnit; + var cropMassUnit = theForm["cropMassUnit"].value; + document.getElementById("cropMassUnit1").innerHTML=cropMassUnit; + document.getElementById("cropMassUnit2").innerHTML=cropMassUnit; + document.getElementById("cropMassUnit3").innerHTML=cropMassUnit; + var pestMeasuringUnit = theForm["pestMeasuringUnit"].value; + document.getElementById("pestMeasuringUnit").innerHTML = pestMeasuringUnit; + + if(theForm["D"].value != "") + { + for(var i in chartContainerIds) + { + document.getElementById(chartContainerIds[i]).style.display="block"; + //document.getElementById(chartContainerIds[i]).style.width=document.getElementById("EILvD").style.width; + } + renderEILChart(formId, "EILvC", "C", currency + "/" + cropAreaUnit, 0,500,1,chartTitles["EILvC"]); + renderEILChart(formId, "EILvV", "V", currency + "/" + cropMassUnit, 1,100,1,chartTitles["EILvV"]); + renderEILChart(formId, "EILvYp", "Yp", cropMassUnit + "/" + cropAreaUnit, 1,200,1,chartTitles["EILvYp"]); + renderEILChart(formId, "EILvK", "K", "%", 1,100,0.1,chartTitles["EILvK"]); + //document.getElementById("chartContainer").style.display="block"; + renderResult(formId); + } + else + { + for(var i in chartContainerIds) + { + document.getElementById(chartContainerIds[i]).style.display="none"; + } + // + } + renderEILChart(formId, "EILvD", "D", cropMassUnit + "/" + pestMeasuringUnit, 0.1,5,0.1,chartTitles["EILvD"]); +} + +function renderEILChart(formId, containerId, paramName, paramUnit, paramMin, paramMax, step, chartTitle) +{ + // Create the data set + var theForm = document.getElementById(formId); + var data = []; + for(var i=paramMin;i<=paramMax;i+=step) + { + data[data.length] = [i,calculateEIL( + paramName == "C" ? i : theForm["C"].value, + paramName == "V" ? i : theForm["V"].value, + paramName == "Yp" ? i : theForm["Yp"].value, + paramName == "K" ? i : theForm["K"].value, + paramName == "D" ? i : theForm["D"].value + ) + ]; + } + //console.log(data);var pestMeasuringUnit = theForm["pestMeasuringUnit"].value; + var options = { + title: { + text: chartTitle, + }, + chart: { + renderTo: containerId, + type: 'spline', + zoomType: "x" + }, + xAxis: { + title: {text:paramName + " (" + paramUnit + ")"} + }, + yAxis: { + title: {text:"EIL (" + theForm["pestMeasuringUnit"].value + ")"}, + floor: 0 + }, + series: [ + {"data":data} + + ], + legend: {enabled: false} + }; + var chart = new Highcharts.Chart(options); } \ No newline at end of file diff --git a/calculators/templates/calculators/eil.html b/calculators/templates/calculators/eil.html index fb712949..402deabc 100644 --- a/calculators/templates/calculators/eil.html +++ b/calculators/templates/calculators/eil.html @@ -28,51 +28,77 @@ <p>(Forklaring...)</p> <form role="form" id="{{ form_id }}"> <div class="row"> - <div class="col-md-6"> + <div class="col-md-3"> + <h1>{% trans "Input" %}</h1> <div class="form-group"> - <label for="C">{% trans "Control cost" %} (C) [NOK/daa]</label> <br/> - (the cost of purchasing and applying the control action (insecticide), expressed as dollar amount per acre ($/acre).) - <input type="number" name="C" class="form-control" min="0" onblur="validateField(this);"/> + <label for="C" data-toggle="tooltip" data-placement="top" + title="{% trans "The cost of purchasing and applying the control action (insecticide)" %}" + >{% trans "Control cost" %} (C) [<span id="currency1">NOK</span>/<span id="cropAreaUnit1">daa</span>]</label><br/> + <input type="number" name="C" class="form-control" min="0" value="200" onblur="validateField(this);" onchange="renderCharts('{{ form_id }}');"/> <span class="help-block" id="{{ form_id }}_C_validation"></span> </div> <div class="form-group"> - <label for="V">{% trans "Market value" %} (V) [NOK/kg]</label><br/> - the market value of peas or the contracted price per hundred-weight, expressed as the dollar amount per hundred-weight ($/cwt). - <input type="number" name="V" class="form-control" min="0" onblur="validateField(this);"/> + <label for="V" data-toggle="tooltip" data-placement="top" + title="{% trans "The market value of the crop in local currency per weight unit" %}" + >{% trans "Market value" %} (V) [<span id="currency2">NOK</span>/<span id="cropMassUnit1">kg</span>]</label><br/> + <input type="number" name="V" class="form-control" min="0" value="40" onblur="validateField(this);" onchange="renderCharts('{{ form_id }}');"/> <span class="help-block" id="{{ form_id }}_V_validation"></span> </div> <div class="form-group"> - <label for="Yp">{% trans "Yield potential" %} (Yp) [kg/daa]</label><br/> - the maximum yield per production unit, expressed as hundred-weight per acre (cwt/acre), historical values are typically used for this expression. - <input type="number" name="Yp" class="form-control" min="0" onblur="validateField(this);"/> + <label for="Yp" data-toggle="tooltip" data-placement="top" + title="{% trans "The maximum yield per production unit. Historical values are typically used for this expression." %}" + >{% trans "Yield potential" %} (Yp) [<span id="cropMassUnit2">kg</span>/<span id="cropAreaUnit2">daa</span>]</label><br/> + <input type="number" name="Yp" class="form-control" min="0" value="1000" onblur="validateField(this);" onchange="renderCharts('{{ form_id }}');"/> <span class="help-block" id="{{ form_id }}_Yp_validation"></span> </div> - <div class="form-group"> - <button type="button" class="btn btn-default" onclick="if(validateForm(document.getElementById('{{ form_id }}'))){renderResult('{{ form_id }}');}">{% trans "Run model" %}</button> - </div> - </div> - <div class="col-md-6"> <div class="form-group"> - <label for="K">{% trans "Insecticide efficacy" %} (K) [%]</label><br/> - the efficacy of any insecticide is the proportion of the pest population killed, it can range from 0 to 1 (typically it is expressed as 1, meaning 100% of the pest population is killed). - <input type="number" name="K" class="form-control" min="0" max="1" onblur="validateField(this);"/> + <label for="K" data-toggle="tooltip" data-placement="top" + title="{% trans "The proportion of the pest population killed." %}" + >{% trans "Control efficacy" %} (K) [%]</label><br/> + <input type="number" name="K" class="form-control" min="0" max="100" value="50" onblur="validateField(this);" onchange="renderCharts('{{ form_id }}');"/> <span class="help-block" id="{{ form_id }}_K_validation"></span> </div> <div class="form-group"> - <label for="D">{% trans "Damage per pest individual" %} (?) (D) [kg/skadegjørermåleenhet]</label> <br/> - Damage per aphid, expressed as a percentage of crop yield loss per aphid during the start of flowering. - <input type="number" name="D" class="form-control" min="0" onblur="validateField(this);"/> + <label for="D" data-toggle="tooltip" data-placement="top" + title="{% trans "Damage expressed as crop yield loss per pest measuring unit" %}" + >{% trans "Damage per pest measuring unit" %} (D) [<span id="cropMassUnit3">kg</span>/<span id="pestMeasuringUnit">skadegjørermåleenhet</span>]</label> <br/> + <input type="number" name="D" class="form-control" min="0" onblur="validateField(this);" onchange="renderCharts('{{ form_id }}');"/> <span class="help-block" id="{{ form_id }}_D_validation"></span> </div> - + <h2>{% trans "Settings" %}</h2> + <div class="form-group"> + <label for="currency">{% trans "Currency" %}</label> + <input type="text" name="currency" class="form-control" onchange="renderCharts('{{ form_id }}')" value="NOK"/> + </div> + <div class="form-group"> + <label for="cropMassUnit">{% trans "Crop mass unit" %}</label> + <input type="text" name="cropMassUnit" class="form-control" onchange="renderCharts('{{ form_id }}')" value="kg"/> + </div> + <div class="form-group"> + <label for="cropAreaUnit">{% trans "Crop area unit" %}</label> + <input type="text" name="cropAreaUnit" class="form-control" onchange="renderCharts('{{ form_id }}')" value="daa"/> + </div> + <div class="form-group"> + <label for="pestMeasuringUnit">{% trans "Pest measuring unit" %}</label> + <input type="text" name="pestMeasuringUnit" class="form-control" onchange="renderCharts('{{ form_id }}')" value="{% trans "Number of aphids per plant" %}"/> + </div> + <!--div class="form-group"> + <button type="button" class="btn btn-default" onclick="if(validateForm(document.getElementById('{{ form_id }}'))){renderResult('{{ form_id }}');}">{% trans "Run model" %}</button> + </div--> </div> - </div> - <div class="row"> - <div class="col-md-12"> + <div class="col-md-9"> + <h1>{% trans "Results" %}</h1> <div id="result" style="font-weight: bold;"> {% trans "Calculated EIL" %} = C / (V * Yp * D * (K/100))<span id="resultParameters"></span>: <span id="resultValue"></span> </div> + <div id="EILvC" style="width:50%; height:300px;float: right;"></div> + <div id="EILvV" style="width:50%; height:300px; "></div> + + <div id="EILvYp" style="width:50%; height:300px;float: right;"></div> + <div id="EILvK" style="width:50%; height:300px;"></div> + <div id="EILvD" style="width:100%; height:300px;"></div> + </div> </div> </form> @@ -81,10 +107,23 @@ {% block customJS %} <script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script> <script type="text/javascript" src="{% static "js/validateForm.js" %}"></script> +<script type="text/javascript" src="{% static "js/util.js" %}"></script> +<script type="text/javascript" src="{% static "js/3rdparty/highcharts.js" %}"></script> <script type="text/javascript" src="{% static "calculators/js/eil.js" %}"></script> <script type="text/javascript"> +var chartTitles = { + "EILvD" : "{% trans "EIL as a function of yield loss per pest unit" %}", + "EILvC" : "{% trans "EIL as a function of control cost" %}", + "EILvV" : "{% trans "EIL as a function of market value" %}", + "EILvYp" : "{% trans "EIL as a function of yield potential" %}", + "EILvK" : "{% trans "EIL as a function of insecticide efficacy" %}", +}; $(document).ready(function() { + $('[data-toggle="tooltip"]').tooltip(); loadFormDefinition("{{ form_id }}","/static/calculators/formdefinitions/"); + renderCharts("{{ form_id }}"); + + }); </script> {% endblock %} \ No newline at end of file -- GitLab