diff --git a/VIPSWeb/local_settings_sample.py b/VIPSWeb/local_settings_sample.py index 5f49103e21a9c0553088a137aee132a286ee5c1f..e87634e2e1f4944d2f77f1e99da15004921dd4dc 100755 --- a/VIPSWeb/local_settings_sample.py +++ b/VIPSWeb/local_settings_sample.py @@ -1,3 +1,5 @@ +# -*- coding: UTF-8 -*- + # # Copyright (c) 2016 NIBIO <http://www.nibio.no/>. # @@ -27,7 +29,6 @@ from django.utils.translation import ugettext_lazy as _ DEBUG = True MAINTENANCE_MODE = False -TEMPLATE_DEBUG = DEBUG # Hosts/domain names that are valid for this site; required if DEBUG is False # See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts @@ -115,6 +116,8 @@ VIPSLOGIC_SERVER_NAME = "vipslogic" VIPSLOGIC_PROTOCOL = "https" # This organization's ID in VIPSLogic/CoreManager VIPS_ORGANIZATION_ID = 1 +# Use this if you want to override and show icons for stations belonging to several organizations +#FORECAST_MAP_ORGANIZATION_IDS =[1,6] # The server name used for VIPSCoreManager VIPSCOREMANAGER_SERVER_NAME = "vipscoremanager" # Local path to self signed certificate of VIPSCoreManager. diff --git a/VIPSWeb/static/js/frontpage.js b/VIPSWeb/static/js/frontpage.js index ae22a091dc338e52f1fbbb0e118f677eb145a0f5..9b2546149909804cd840e5d8d212bfb2770cde3c 100755 --- a/VIPSWeb/static/js/frontpage.js +++ b/VIPSWeb/static/js/frontpage.js @@ -72,6 +72,7 @@ function cacheObservations(callback) { var systemTime = moment().add(settings.systemTimeOffsetMonths,"months"); var from = systemTime.format("YYYY") + "-01-01"; // XXXX-01-01 + systemTime.add(1,'days'); var to = systemTime.format("YYYY-MM-DD"); var uuidParam = settings.userUuid != null ? "&userUUID=" + settings.userUuid : ""; //$.getJSON(settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/observation/broadcast/list/" + settings.vipsOrganizationId, function( json ) { @@ -532,7 +533,9 @@ var cachedPois; function cacheForecastSummaries() { //$.getJSON(settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/forecastconfigurationsummaries/" + settings.vipsOrganizationId, function( json ) { - $.getJSON( "/vipslogicproxy/rest/forecastconfigurationsummaries/" + settings.vipsOrganizationId, function( json ) { + $.getJSON( "/vipslogicproxy/rest/forecastconfigurationsummaries/" + settings.vipsOrganizationId + + (settings.includeOrganizationIds != null ? "?includeOrganizationIds=" + settings.includeOrganizationIds.join(",") : "") + , function( json ) { cachedForecastSummaries = json; cachePrivateForecastSummaries(); diff --git a/VIPSWeb/static/js/frontpageMap.js b/VIPSWeb/static/js/frontpageMap.js index 87c021cf3f2909b3ec89e5fcc2bba0d383a5b91f..16b1537481d5de767a74ff0806747f04ea6e2a6a 100755 --- a/VIPSWeb/static/js/frontpageMap.js +++ b/VIPSWeb/static/js/frontpageMap.js @@ -408,7 +408,13 @@ function updateForecastLayers() forecastLayer = new ol.layer.Vector({ source: new ol.source.Vector({ //url: settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/forecastresults/aggregate/" + settings.vipsOrganizationId + "?" + cropCategoryIdStr, - url: "/vipslogicproxy/rest/forecastresults/aggregate/" + settings.vipsOrganizationId + "?" + cropCategoryIdStr, + url: "/vipslogicproxy/rest/forecastresults/aggregate/" + + ( + settings.includeOrganizationIds != null && settings.includeOrganizationIds.length > 0 ? + "orgspan?organizationId=" + settings.includeOrganizationIds.join("&organizationId=") + cropCategoryIdStr + : settings.vipsOrganizationId + "?" + cropCategoryIdStr + ) + , format: new ol.format.KML(), projection: ol.proj.get('EPSG:3857') }) @@ -427,21 +433,22 @@ var renderObservationFeatures = function(){ var geoJSON = {"type":"FeatureCollection","features":[]}; for(var i=0;i<filteredObservations.length;i++) { - var observation = filteredObservations[i]; - var obsFeatures = null; - if(!observation.locationIsPrivate && observation.geoInfo !== null && observation.geoInfo.trim() !== "") - { - obsFeatures = JSON.parse(observation.geoInfo).features; - } - else - { - continue; - } - - for(var j=0; j<obsFeatures.length; j++) - { - geoJSON.features.push(obsFeatures[j]); - } + var observation = filteredObservations[i]; + var obsFeatures = null; + if(!observation.locationIsPrivate && observation.geoInfo !== null && observation.geoInfo.trim() !== "") + { + obsFeatures = JSON.parse(observation.geoInfo).features; + } + else + { + continue; + } + + for(var j=0; j<obsFeatures.length; j++) + { + geoJSON.features.push(obsFeatures[j]); + } + } var format = new ol.format.GeoJSON(); diff --git a/VIPSWeb/templates/index.html b/VIPSWeb/templates/index.html index 4edbaf51008d8e064102699bf0606aea44be416a..7523c55e6ff6da6770601f4b95c316e363d381eb 100755 --- a/VIPSWeb/templates/index.html +++ b/VIPSWeb/templates/index.html @@ -44,7 +44,7 @@ if(settings.userIsIE) { - alert("{% trans "WARNING: We suspect you are using Internet Explorer to view this site. VIPS is not designed to work with Internet Explorer, you may experience errors and missing features. Please use a different browser, like Microsoft Edge or Google Chrome." %}"); + alert("{% trans "WARNING: We suspect you are using Internet Explorer to view this site. VIPS is not designed to work with Internet Explorer, you may experience errors and missing features. Please use a different browser, like Firefox, Microsoft Edge or Google Chrome." %}"); } diff --git a/VIPSWeb/templates/settings.js b/VIPSWeb/templates/settings.js index 918e8f69193c4d484c3bdd7353e6aa83babfb866..611638dd658c17665d63bc2d3cd5107eaf1bfe92 100755 --- a/VIPSWeb/templates/settings.js +++ b/VIPSWeb/templates/settings.js @@ -25,6 +25,8 @@ var settings = { vipslogicProtocol: "{{settings.VIPSLOGIC_PROTOCOL}}", vipsCoremanagerServerName : "{{settings.VIPSCOREMANAGER_SERVER_NAME}}", + includeOrganizationIds: {% if settings.INCLUDE_ORGANIZATION_IDS == None %}null{%else%}{{settings.INCLUDE_ORGANIZATION_IDS}}{%endif%}, + mapZoomlevel: {{settings.MAP_ZOOMLEVEL}}, systemTimeOffsetMonths: {{settings.SYSTEM_TIME_OFFSET_MONTHS}}, diff --git a/forecasts/models.py b/forecasts/models.py index 42b2a96cab7beb4e6fcfe80be392babbc3adf05b..d9cd618c4b31289e77ac9bdec42ad6b8c3ce38c8 100755 --- a/forecasts/models.py +++ b/forecasts/models.py @@ -230,24 +230,34 @@ class ForecastConfiguration: for crop_organism_id in crop_organism_ids: crop_organism_id_paramstring += "&cropOrganismId=%s" % crop_organism_id - print "%s://%s/rest/organizationforecastconfigurations/%s?from=%s-01-01&to=%s-12-31%s" % ( - settings.VIPSLOGIC_PROTOCOL, - settings.VIPSLOGIC_SERVER_NAME, - settings.VIPS_ORGANIZATION_ID, - season, - season, - crop_organism_id_paramstring - ) - - request_result = requests.get("%s://%s/rest/organizationforecastconfigurations/%s?from=%s-01-01&to=%s-12-31%s" % ( - settings.VIPSLOGIC_PROTOCOL, - settings.VIPSLOGIC_SERVER_NAME, - settings.VIPS_ORGANIZATION_ID, - season, - season, - crop_organism_id_paramstring - ) - ) + request_result = None + if settings.INCLUDE_ORGANIZATION_IDS == None: + print "%s://%s/rest/organizationforecastconfigurations/%s?from=%s-01-01&to=%s-12-31%s" % ( + settings.VIPSLOGIC_PROTOCOL, + settings.VIPSLOGIC_SERVER_NAME, + settings.VIPS_ORGANIZATION_ID, + season, + season, + crop_organism_id_paramstring + ) + + request_result = requests.get("%s://%s/rest/organizationforecastconfigurations/%s?from=%s-01-01&to=%s-12-31%s" % ( + settings.VIPSLOGIC_PROTOCOL, + settings.VIPSLOGIC_SERVER_NAME, + settings.VIPS_ORGANIZATION_ID, + season, + season, + crop_organism_id_paramstring + ) + ) + else: + request_result = requests.get("%s://%s/rest/forecastconfigurationsincludeorgs/%s?includeOrganizationIds=%s" % ( + settings.VIPSLOGIC_PROTOCOL, + settings.VIPSLOGIC_SERVER_NAME, + settings.VIPS_ORGANIZATION_ID, + ",".join(str(x) for x in settings.INCLUDE_ORGANIZATION_IDS) + ) + ) return request_result @staticmethod diff --git a/fusarium/static/fusarium/js/oatFloweringModelForm.js b/fusarium/static/fusarium/js/oatFloweringModelForm.js index eb124c30cbc4fee33c3b83a014777363cb1d0fe2..fdf05ec7c5284b526482615e9333e6af2de389e9 100755 --- a/fusarium/static/fusarium/js/oatFloweringModelForm.js +++ b/fusarium/static/fusarium/js/oatFloweringModelForm.js @@ -34,7 +34,7 @@ // Internal ID for the form var theFormId = "_oatFloweringModelForm"; var detailURL = null; -var DEBUG = false; +var DEBUG = true; // Settings for VIPS forecasting system //var serverUri = settings.vipsCoremanagerServerName; @@ -219,15 +219,16 @@ var displayResults = function(data) now = getNow(); var weekNow = now.isoWeek(); var weeksFromNowToZ625 = Math.abs(weekZ625-weekNow); - /*console.log("now: " + now.tz("Europe/Oslo").format()); - console.log("week now: " +weekNow); - console.log("weekZ625: " +weekZ625); - console.log("weeksFromNowToZ625: " + weeksFromNowToZ625); - console.log("z60: " + dateZ60.tz("Europe/Oslo").format()); - console.log("z62.5: " + getDateForZ(data,62.5).tz("Europe/Oslo").format()); - console.log("z69: " + dateZ69.tz("Europe/Oslo").format());*/ - - + /* + console.info(data); + console.log("now: " + now.tz("Europe/Oslo").format()); + console.log("week now: " +weekNow); + console.log("weekZ625: " +weekZ625); + console.log("weeksFromNowToZ625: " + weeksFromNowToZ625); + console.log("z60: " + dateZ60.tz("Europe/Oslo").format()); + console.log("z62.5: " + getDateForZ(data,62.5).tz("Europe/Oslo").format()); + console.log("z69: " + dateZ69.tz("Europe/Oslo").format()); + */ // Scenario 1: Today is before date of sowing if(now.isBefore(dateOfSowing)) { @@ -320,8 +321,10 @@ var getDateForZ = function(data,z) { for(var key in data) { - if(data[key].allValues["OATFLOWERM.ZREACHED"] == z) + //console.info (key + ":" + getAllValues(data[key].allValues)["OATFLOWERM.ZREACHED"]); + if(getAllValues(data[key].allValues)["OATFLOWERM.ZREACHED"] == z) { + //console.info(moment(data[key].validTimeStart)); return moment(data[key].validTimeStart); } } @@ -335,9 +338,9 @@ var getWeekForZ = function(data,z) { for(var key in data) { - if(data[key].allValues["OATFLOWERM.ZREACHED"] == z) + if(getAllValues(data[key].allValues)["OATFLOWERM.ZREACHED"] == z) { - return data[key].allValues["OATFLOWERM.WEEK_IN_YEAR"]; + return getAllValues(data[key].allValues)["OATFLOWERM.WEEK_IN_YEAR"]; } } } @@ -394,3 +397,8 @@ var getStartHTML = function() "<div id='resultsTable'></div>" ].join(""); } + +var getAllValues = function(allValuesStr) +{ + return JSON.parse(allValuesStr); +}; diff --git a/observations/static/observations/js/observationList.js b/observations/static/observations/js/observationList.js index 1ad744f711e880a43c3be3b4c7ff0090767b137d..054a89e2e7fb8c2ecfe8f82218f70451ca8c2a37 100644 --- a/observations/static/observations/js/observationList.js +++ b/observations/static/observations/js/observationList.js @@ -106,7 +106,8 @@ var initMap = function( var centerPosition = ol.proj.transform(center, 'EPSG:4326', map.getView().getProjection().getCode()); var view = new ol.View({ center: centerPosition, - zoom:zoomLevel + zoom:zoomLevel, + maxZoom:7 }); map.setView(view); diff --git a/observations/templates/observations/detail.html b/observations/templates/observations/detail.html index 642f2b8558ec918c25c32554c2fca12d68d5c438..40f4aa9b46d2026571e490c8a2486c3d990ca685 100755 --- a/observations/templates/observations/detail.html +++ b/observations/templates/observations/detail.html @@ -35,8 +35,6 @@ <p id="cropOrganismName"></p> <h4>{% trans "Time of observation" %}</h4> <p id="timeOfObservation"></p> - <h4>{% trans "Observer" %}</h4> - <p id="observerName"></p> <h2 id="observationHeading"></h2> <p id="observationText"></p> <h2>{% trans "Observation data" %}</h2> @@ -67,7 +65,7 @@ document.getElementById("organismName").innerHTML = getLocalizedOrganismName(observation.organism) + " <i>(" + observation.organism.latinName + ")</i>"; document.getElementById("cropOrganismName").innerHTML = getLocalizedOrganismName(observation.cropOrganism) + " <i>(" + observation.cropOrganism.latinName + ")</i>"; document.getElementById("timeOfObservation").innerHTML = getStandardFormattedTimestamp(observation.timeOfObservation); - document.getElementById("observerName").innerHTML = observation.user.firstName + " " + observation.user.lastName; + //document.getElementById("observerName").innerHTML = observation.user.firstName + " " + observation.user.lastName; document.getElementById("observationHeading").innerHTML = observation.observationHeading; document.getElementById("observationText").innerHTML = observation.observationText; if(observation.isQuantified != undefined && observation.isQuantified) diff --git a/observations/views.py b/observations/views.py index 3b5e60e615f90aa511b491a10aed7056af5946f2..1591cc104d8a2425d481d6483c8c94cf1460458c 100755 --- a/observations/views.py +++ b/observations/views.py @@ -47,7 +47,7 @@ def index(request): if request.GET.get("to", None) is not None: date_to = datetime.strptime(request.GET["to"], "%Y-%m-%d") else: - date_to = datetime.now() + relativedelta(months = settings.SYSTEM_TIME_OFFSET_MONTHS) + date_to = datetime.now() + relativedelta(months = settings.SYSTEM_TIME_OFFSET_MONTHS) + relativedelta(days=1) #date_to = datetime.strptime(request.GET.get("to", "%s-12-31" % (datetime.now() + relativedelta(months = settings.SYSTEM_TIME_OFFSET_MONTHS)).year),"%Y-%m-%d") period_days = date_to - date_from current_day_in_period = (datetime.now() + relativedelta(months = settings.SYSTEM_TIME_OFFSET_MONTHS)) - date_from diff --git a/requirements.txt b/requirements.txt index 34ce8a43ead9280e59479b51a21bdcf225c746fd..51f11c6da1b8daae6f360022959a1d7b15d3c7b4 100755 --- a/requirements.txt +++ b/requirements.txt @@ -21,5 +21,5 @@ Django==1.11 Pillow requests==2.6.0 -django-tinymce==2.6.0 +django-tinymce==2.8.0 python-dateutil==1.5 diff --git a/roughage/templates/roughage/nutrition.html b/roughage/templates/roughage/nutrition.html index 59b58c44ed4c123cc95f0c3f330479f8663aef42..cc1806b0d5e6bcb891d02d0b8e40e67940cc5e59 100755 --- a/roughage/templates/roughage/nutrition.html +++ b/roughage/templates/roughage/nutrition.html @@ -25,13 +25,22 @@ {% block content %} <div class="singleBlockContainer"> <h1>{% trans "Roughage nutrition model" %}</h1> +<form action="/i18n/setlang/" method="post" id="forceLanguageLink"> <p> - Modellen skal underveis i vekstsesongen gi støtte for valg av høstetid i to- og - treslåttsystem i eng som brukes til fôrproduksjon. Den er utvikla på grunnlag - av data fra timoteidominert eng, men kan også brukes på bestand dominert av - fleirårig raigras. <a href="http://gamlevips.nibio.no/information/if105s.jsp?HTTP_REFERRER=/information/if105s.jsp&BUTTON=kapittel&menyValg=9#grovformodell" target="new">Les mer om modellen</a> - eller <a href="https://vimeo.com/147571372" target="new">se video</a> + + {% csrf_token %} + <input type="hidden" name="next" value="/information/12/#grovformodell"/> + <input type="hidden" name="language" value="nb"/> + Modellen skal underveis i vekstsesongen gi støtte for valg av høstetid i to- og + treslåttsystem i eng som brukes til fôrproduksjon. Den er utvikla på grunnlag + av data fra timoteidominert eng, men kan også brukes på bestand dominert av + fleirårig raigras. + <a style="cursor:pointer;" onclick="document.getElementById('forceLanguageLink').submit();">Les mer om modellen</a> + + eller <a href="https://vimeo.com/147571372" target="new">se video</a> + </p> +</form> <p> Felt merket med * må fylles ut. Velg klimastasjon for årets klimadata, normaldata eller begge. </p> @@ -149,7 +158,7 @@ Ved å legge inn kalibreringsmålinger vil modellen justeres slik at prediksjonene blir mer presise. For å bestemme MSC, kan du bruke hjelpetabeller for <a href="http://gamlevips.nibio.no/models/mo1004s.jsp?grastype=timotei" target="new">timotei</a> og <a href="http://gamlevips.nibio.no/models/mo1004s.jsp?grastype=raigras" target="new">raigras</a>. - <a href="http://gamlevips.nibio.no/information/if105s.jsp?BUTTON=kapittel&menyValg=9#grovformodellKalibreringMSC" target="new">Les mer om kalibrering</a> + <a href="/information/12/#grovformodell_kalibrering" target="new">Les mer om kalibrering</a> </p> <fieldset> <table id="optimeringstabell" class="table">