diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index efa01fc0e..6a79047d5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,7 +30,13 @@ jobs: with: node-version: 16 + - run: npm config set //npm.pkg.github.com/:_authToken $NODE_AUTH_TOKEN + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - run: npm install + + - name: Validate Gradle wrapper uses: gradle/wrapper-validation-action@v1.0.6 diff --git a/.gitignore b/.gitignore index c3ffcbbf6..46bd4e399 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,6 @@ grails-app/assets/vendor-ext /build/ /.gradle/ /grails-app/assets/components/compile/templates.js +/ehcache/.lock +/ehcache/file/homePageStatistics_c96622e3da276e1ccd3532e6f1f975756232b01a/offheap-disk-store/ehcache-disk-store.data +/ehcache/file/homePageStatistics_c96622e3da276e1ccd3532e6f1f975756232b01a/offheap-disk-store/ehcache-disk-store.meta diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..737d3ce72 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +@atlasoflivingaustralia:registry=https://npm.pkg.github.com \ No newline at end of file diff --git a/README.md b/README.md index b82d59bda..bceac21ce 100644 --- a/README.md +++ b/README.md @@ -28,10 +28,14 @@ It is currently in use by the Australian Government. This configuration file largely specifies URLs to MERIT dependencies. See https://github.com/AtlasOfLivingAustralia/fieldcapture/wiki/MERIT-Dependencies for information about these. Note that you will need to obtain an ALA API key to use ALA services and a Google Maps API key and specify them in this file. +npm / nodejs are used to run javascript unit tests. There is a dependency on the ecodata-client-plugin for some javascript which is published to github packages which requires an access token to read. + * Install npm and nodejs (see https://www.npmjs.com/get-npm) +* Authenticate to github packages using your github username and access token setup for package:read * Install the node dependencies for MERIT. Note these are currently only used for testing. ``` +npm login --scope=@atlasoflivingaustralia --auth-type=legacy --registry=https://npm.pkg.github.com npm install npm install -g karma ``` diff --git a/build.gradle b/build.gradle index 3dbad12d5..b039b7c2e 100644 --- a/build.gradle +++ b/build.gradle @@ -97,8 +97,7 @@ dependencies { implementation "org.grails.plugins:gsp" implementation 'dk.glasius:external-config:3.0.0' implementation "org.grails.plugins:ala-auth:$alaSecurityLibsVersion" - // Needs to be left at 2.0 until we finish replacing pdfgen HTML report generation - implementation "org.grails.plugins:ala-ws-security-plugin:2.0" + implementation "org.grails.plugins:ala-ws-security-plugin:$alaSecurityLibsVersion" implementation "org.grails.plugins:ala-ws-plugin:$alaSecurityLibsVersion" implementation "au.org.ala:userdetails-service-client:$alaSecurityLibsVersion" implementation "com.github.ben-manes.caffeine:caffeine:3.1.6" @@ -150,6 +149,7 @@ dependencies { implementation "commons-io:commons-io:2.6" implementation "org.seleniumhq.selenium:selenium-chrome-driver:3.14.0" implementation "com.bertramlabs.plugins:asset-pipeline-grails:$assetPipelineVersion" + implementation group: 'com.googlecode.owasp-java-html-sanitizer', name: 'owasp-java-html-sanitizer', version: '20220608.1' compileOnly "io.micronaut:micronaut-inject-groovy" console "org.grails:grails-console" @@ -186,7 +186,7 @@ dependencies { providedCompile "io.methvin:directory-watcher:0.4.0" if (!Boolean.valueOf(inplace)) { - implementation "org.grails.plugins:ecodata-client-plugin:6.1.2" + implementation "org.grails.plugins:ecodata-client-plugin:6.2" } } @@ -244,15 +244,16 @@ clientDependencies { 'underscore'('1.12.1') { include 'underscore.js' } - 'datatables.net-bs4'("1.10.25") - "datatables.net-buttons-dt"("1.7.1") - 'datatables.net-buttons-bs4'("1.7.1") + 'datatables.net'("1.13.6") + 'datatables.net-bs4'("1.13.6") + "datatables.net-buttons-dt"("2.4.2") + 'datatables.net-buttons-bs4'("2.4.2") '@danielfarrell/bootstrap-combobox'('1.1.8', transitive:false) 'fancybox'('3.0.1') "fuelux"("3.17.2", transitive:false) "fuse.js"("6.4.6", transitive:false) "leaflet"("0.7.7") - "select2-theme-bootstrap4"("1.0.0") + "select2-theme-bootstrap4"("1.0.2") "slickgrid"("2.4.38") "slider-pro"("1.6.0", transitive:false) "jquery-appear-original"("0.4.1", transitive:false) diff --git a/forms/bushfires/bushfiresStatesProgressReport.json b/forms/bushfires/bushfiresStatesProgressReport.json index aab43862d..444389452 100644 --- a/forms/bushfires/bushfiresStatesProgressReport.json +++ b/forms/bushfires/bushfiresStatesProgressReport.json @@ -9968,52 +9968,39 @@ "name": "sitesTested" }, { - "defaultValue": { - "type": "computed", + "computed": { "expression": "$geom.areaHa(sitesTested)" }, "dataType": "number", "name": "areaTestedHa", - "units": "Ha", - "validate": [ - { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.areaHa(sitesTested)*0.9" - } - }, + "units": "ha", + "decimalPlaces": 3, + "behaviour": [ { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.areaHa(sitesTested)*1.1" + "condition": "areaTestedChangeHa > 0", + "type": "conditional_validation", + "value": { + "message": "", + "validate": "required,min[0.0001]" } } ] }, { - "defaultValue": { - "type": "computed", + "computed": { "expression": "$geom.lengthKm(sitesTested)" }, "dataType": "number", "name": "lengthTestedKm", - "units": "Km", - "validate": [ - { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTested)*0.9", - "errorMessages": "Please Select" - } - }, + "units": "km", + "decimalPlaces": 3, + "behaviour": [ { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTested)*1.1" + "condition": "lengthTestedChangeKm > 0", + "type": "conditional_validation", + "value": { + "message": "", + "validate": "required,min[0.0001]" } } ] diff --git a/forms/nht/nhtOutputReport.json b/forms/nht/nhtOutputReport.json index a793fc5e1..15cbb1f9a 100644 --- a/forms/nht/nhtOutputReport.json +++ b/forms/nht/nhtOutputReport.json @@ -1,13 +1,15 @@ { - "id": "62b005e698aff40faac38c16", - "dateCreated": "2022-06-20T05:30:14Z", + "id": "64bf6c1ac9126a73736284ff", + "dateCreated": "2023-07-25T06:30:50Z", "minOptionalSectionsCompleted": 0, "supportsSites": true, - "lastUpdated": "2023-03-16T12:49:16Z", + "lastUpdated": "2023-10-04T11:46:09Z", "createdUserId": "1493", + "external": false, "activationDate": null, "supportsPhotoPoints": false, "publicationStatus": "published", + "externalIds": null, "gmsId": null, "name": "NHT Output Report", "sections": [ @@ -20,7 +22,7 @@ { "name": "nhtCommunications", "dataType": "text", - "description": "This does not include communication activities undertaken under the 'Communication Materials' Project Service or regional capacity service. All Communication Materials must correctly acknowledge Australian Government funding.", + "description": "This does not include communication activities undertaken under the 'Communication Materials' Project Service or regional capacity service. Refer to the Project Services and Overheads (PS&O) service summary to clarify what type of communications activity is paid under the PS&O service. All Communication Materials must correctly acknowledge Australian Government funding.", "validate": "required", "constraints": [ "Yes", @@ -31,12 +33,18 @@ "name": "yesCommunicationsMaterial", "dataType": "text", "validate": "required,maxSize[300]", + "description": "Upload documents by clicking onto the 'Attach Document' button or provide a link in the free text field.", "behaviour": [ { "condition": "nhtCommunications == \"Yes\"", "type": "enable" } ] + }, + { + "dataType": "document", + "name": "attachments", + "description": "Please attach any Evidence of Service Delivery here." } ], "viewModel": [ @@ -60,6 +68,27 @@ "preLabel": "If yes, please provide link or copy of the material." } ] + }, + { + "type": "row", + "behaviour": [ + { + "type": "if_expression", + "condition": "nhtCommunications == \"Yes\"" + } + ], + "items": [ + { + "type": "col", + "items": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] + } + ] } ] }, @@ -108,6 +137,27 @@ "dataType": "number", "name": "engagementNoParticipants", "validate": "required" + }, + { + "dataType": "date", + "name": "activityDateFrom", + "validate": "required" + }, + { + "dataType": "date", + "name": "activityDateTo", + "validate": [ + { + "rule": "required" + }, + { + "rule": "future", + "param": { + "expression": "formatDateForValidation(activityDateFrom)", + "type": "computed" + } + } + ] } ] }, @@ -117,14 +167,14 @@ "validate": "maxSize[1500]" }, { - "dataType": "text", - "name": "projectAssuranceDetails", + "dataType": "boolean", + "name": "dataUploaded", "description": "" }, { - "dataType": "boolean", - "name": "booleanField", - "description": "" + "name": "projectAssuranceDetails", + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -133,7 +183,7 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } @@ -144,12 +194,13 @@ { "type": "table", "source": "engagementDetails", - "title": "Please list community engagement activities undertaken, including the title, description, and the number of participants for each activity undertaken in this reporting period, if any.", + "title": "Please list community engagement activities undertaken, including the title, description, and the number of participants for each activity undertaken in this reporting period, if any.Each activity must be reported in a separate row.This does not include engagement activities undertaken in community/stakeholder engagement service or regional capacity service. The Register of Engagement must be retained as evidence.", + "preLabel": "If yes, please provide link or copy of the material.", "userAddedRows": true, "columns": [ { "source": "engagementType", - "type": "select2Many", + "type": "selectOne", "width": "20%", "title": "Type" }, @@ -162,6 +213,7 @@ { "type": "textarea", "source": "engagementPurpose", + "width": "25%", "title": "Purpose", "rows": 4 }, @@ -170,6 +222,18 @@ "type": "number", "width": "10%", "title": "Number of participants" + }, + { + "title": "Activity Date from", + "source": "activityDateFrom", + "type": "date", + "width": "10%" + }, + { + "title": "Activity Date to", + "source": "activityDateTo", + "type": "date", + "width": "10%" } ] } @@ -206,7 +270,7 @@ { "name": "yesUndergoneReview", "dataType": "text", - "validate": "required,maxSize[300]", + "validate": "required,maxSize[4000]", "behaviour": [ { "condition": "undergoneReview == \"Yes\"", @@ -227,7 +291,7 @@ "constraints": [ "Yes", "No", - "NA" + "Not Applicable" ] }, { @@ -237,11 +301,22 @@ "constraints": [ "Yes", "No", - "NA" + "Not Applicable" + ] + }, + { + "name": "planName", + "dataType": "text", + "validate": "required,maxSize[100]", + "behaviour": [ + { + "condition": "plansDeveloped == \"Yes\"", + "type": "enable" + } ] }, { - "name": "yesPlansDeveloped", + "name": "planPurpose", "dataType": "text", "validate": "required,maxSize[300]", "behaviour": [ @@ -258,7 +333,7 @@ "constraints": [ "Yes", "No", - "NA" + "Not Applicable" ] }, { @@ -273,9 +348,41 @@ "condition": "facilitatedPlanningMeetings == \"Yes\"" } ], - "name": "meetingDate", + "name": "meetingDateFrom", "validate": "required" }, + { + "dataType": "date", + "behaviour": [ + { + "type": "enable_and_clear", + "condition": "facilitatedPlanningMeetings == \"Yes\"" + } + ], + "name": "meetingDateTo", + "validate": [ + { + "rule": "required" + }, + { + "rule": "future", + "param": { + "expression": "formatDateForValidation(meetingDateFrom)", + "type": "computed" + } + }] + }, + { + "dataType": "text", + "behaviour": [ + { + "type": "enable_and_clear", + "condition": "facilitatedPlanningMeetings == \"Yes\"" + } + ], + "name": "meetingName", + "validate": "required,maxSize[100]" + }, { "dataType": "text", "behaviour": [ @@ -285,7 +392,7 @@ } ], "name": "meetingDescription", - "validate": "required" + "validate": "required,maxSize[4000]" } ] }, @@ -295,14 +402,14 @@ "validate": "maxSize[1500]" }, { - "dataType": "text", - "name": "projectAssuranceDetails", + "dataType": "boolean", + "name": "dataUploaded", "description": "" }, { - "dataType": "boolean", - "name": "booleanField", - "description": "" + "name": "projectAssuranceDetails", + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -311,7 +418,7 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } @@ -364,9 +471,16 @@ "type": "row", "items": [ { + "css": "span3", + "type": "text", + "source": "planName", + "preLabel": "Name of plan" + }, + { + "css": "span6", "type": "textarea", - "source": "yesPlansDeveloped", - "preLabel": "If yes, please provide name and purpose of plan." + "source": "planPurpose", + "preLabel": "Purpose of plan" } ] }, @@ -389,10 +503,22 @@ "userAddedRows": true, "columns": [ { - "source": "meetingDate", + "source": "meetingDateFrom", "type": "date", "width": "10%", - "title": "Meeting/Workshop Date" + "title": "Date from" + }, + { + "source": "meetingDateTo", + "type": "date", + "width": "10%", + "title": "Date to" + }, + { + "type": "text", + "source": "meetingName", + "title": "Name of event", + "rows": 4 }, { "type": "textarea", @@ -421,9 +547,7 @@ "template": { "name": "NHT - Project Commencement", "title": "Project Commencement", - "dataModel": [ - - ], + "dataModel": [], "viewModel": [ { "type": "row", @@ -455,7 +579,7 @@ "name": "undergoneWhsReview", "dataType": "text", "validate": "required", - "description":"The WHS risk register for project services must be reviewed and updated where new risks are identified, or control measures have changed.", + "description": "The WHS risk register for project services must be reviewed and updated where new risks are identified, or control measures have changed.", "constraints": [ "Yes", "No" @@ -476,7 +600,7 @@ "name": "hasNotifiableIncident", "dataType": "text", "validate": "required", - "description":"A WHS Notifiable incident is defined within Work Health and Safety Act (Cth) 2011 Part 3 – Incident Notification. (https://www.legislation.gov.au/Details/C2018C00293). Refer to Deed of Standing offer clause 42 Work Health and Safety for further information on these requirements.", + "description": "A WHS Notifiable incident is defined within Work Health and Safety Act (Cth) 2011 Part 3 – Incident Notification. (https://www.legislation.gov.au/Details/C2018C00293). Refer to Deed of Standing offer clause 42 Work Health and Safety for further information on these requirements.", "constraints": [ "Yes", "No" @@ -500,11 +624,11 @@ "name": "hasVerifiedSubContractors", "dataType": "text", "validate": "required", - "description":"If there have been no current or new subcontracting arrangement during this reporting period, please report as Not Applicable. Refer to Deed of standing offer clause 20 Subcontracting and 42 Work Health and Safety for further information on these requirements.", + "description": "If there have been no current or new subcontracting arrangement during this reporting period, please report as Not Applicable. Refer to Deed of standing offer clause 20 Subcontracting and 42 Work Health and Safety for further information on these requirements.", "constraints": [ "Yes", "No", - "NA" + "Not Applicable" ] }, { @@ -573,7 +697,7 @@ ], "items": [ { - "source": "If not, provide notification as outlined in the Deed of Standing offer clause 42.3 Notifying the customer.", + "source": "If no, provide notification as outlined in the Deed of Standing offer clause 42.3 Notifying the customer.", "type": "literal" } ] @@ -612,360 +736,533 @@ }, { "collapsedByDefault": false, - "template": { - "title": "Synthesising and finalising baseline data", - "modelName": "NHT - Baseline data", + "template": { "dataModel": [ { - "dataType": "list", - "name": "baselineDetails", + "allowRowDelete": "false", "columns": [ { "dataType": "text", - "name": "datasetName", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], "validate": "required" }, { - "name": "projectBaseline", + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { "dataType": "text", - "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", - "validate": "required", - "constraints": { - "textProperty": "baseline", - "valueProperty": "baseline", - "type": "pre-populated", - "excludePath": "baselineDetails.projectBaseline", - "config": { - "source": { - "context-path": "owner.custom.details.baseline.rows" - } + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } - } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] }, { - "name": "datasetSupports", "dataType": "text", - "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableCbp" + }, + { + "columns": [ + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", "validate": "required", "constraints": { - "textProperty": "name", - "valueProperty": "dataSetId", + "textProperty": "label", + "valueProperty": "value", "type": "pre-populated", "config": { "source": { - "context-path": "owner.custom.dataSets" + "context-path": "outcomes" } } } }, { + "name": "investmentPriorities2", "dataType": "text", - "name": "baselineDescription", - "validate": "required,maxSize[500]" - }, - { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", + "description": "", "validate": "required", "constraints": { "textProperty": "label", - "valueProperty": "label", + "valueProperty": "value", "type": "pre-populated", "config": { "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] + "context-path": "owner.investmentPriorities" } } } }, { "dataType": "text", - "description": "", - "name": "outcomeStatementNew" - } - ] - }, - { - "name": "numberBaselineDataSets", - "type": "number", - "decimalPlaces": 0, - "computed": { - "expression": "count(baselineDetails, \"projectBaseline\")" - } - }, - { - "dataType": "text", - "name": "comments", - "validate": "maxSize[1500]" - }, - { - "dataType": "text", - "name": "projectAssuranceDetails", - "description": "" - }, - { - "dataType": "boolean", - "name": "booleanField", - "description": "" - }, - { - "dataType": "list", - "name": "assuranceDocuments", - "columns": [ + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, { - "dataType": "document", - "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" - } - ] - } - ], - "viewModel": [ - { - "items": [ + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, { - "preLabel": "Total number of baseline datasets synthesised and finalised:", - "noEdit": true, - "type": "number", - "source": "numberBaselineDataSets" + "dataType": "text", + "name": "activityType", + "constraints": [ + "Captive Breeding", + "Release", + "Translocation", + "Re-introduction" + ], + "validate": "required" }, { - "type": "table", - "source": "baselineDetails", - "userAddedRows": true, - "columns": [ - { - "source": "datasetName", - "type": "text", - "width": "20%", - "title": "Name of Baseline Dataset" - }, - { - "source": "projectBaseline", - "type": "selectOne", - "width": "15%", - "title": "Which Project Baseline are you reporting on?" - }, - { - "source": "datasetSupports", - "type": "select2Many", - "width": "15%", - "title": "What dataset supports this Project Baseline?" - }, - { - "preLabel": "", - "source": "baselineDescription", - "type": "textarea", - "width": "25%", - "rows": 3, - "placeholder": "", - "title": "Briefly describe the baseline you have established under this service and its purpose." - }, - { - "source": "relatedOutcomes", - "type": "selectOne", - "width": "25%", - "title": "Which outcome statement/s aligns with this Baseline Dataset?" - } - ] + "dataType": "text", + "name": "activityPermit", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" }, { - "type": "row", - "items": [ - { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n• any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" - } - ] + "dataType": "text", + "name": "inSituExSitu", + "constraints": [ + "Ex-situ", + "In-situ" + ], + "validate": "required" }, { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please attach any evidence you have available for this service and/or provide information (e.g. links) to where the evidence is stored. This field will help the Department and Service Providers during assurance activities or audits. Refer to the Evidence Guide for details of the types of acceptable evidence." - }, + "dataType": "text", + "name": "newOrMaintained", + "constraints": [ + "Newly established", + "Maintained" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "numberOfCaptiveBreeding", + "validate": "required" + }, + { + "dataType": "feature", + "name": "areaOfSourceSite", + "description": "Mapping field to be done and Area (ha) field be auto-calculated from mapping." + }, + { + "computed": { + "expression": "$geom.areaHa(areaOfSourceSite)" + }, + "dataType": "number", + "name": "calculatedAreaOfSourceSiteAreaHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaOfSourceSiteAreaHa" + }, + "dataType": "number", + "name": "areaOfSourceSiteTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReasonSourceSite", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ { - "preLabel": "Data have been uploaded", - "source": "booleanField", - "type": "boolean" + "condition": "not (within(areaOfSourceSiteTreatedHa, calculatedAreaOfSourceSiteAreaHa, 0.1))", + "type": "if" } ] }, { - "type": "row", - "items": [ + "dataType": "text", + "name": "mappingNotAlignedCommentsSourceSite", + "validate": "required,maxSize[100]", + "behaviour": [ { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReasonSourceSite" } ] }, { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ + "dataType": "document", + "name": "extraMappingDetailsSourceSite", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ { - "title": "Attached documents", - "source": "attachments", - "type": "document" + "condition": "not (within(areaOfSourceSiteTreatedHa, calculatedAreaOfSourceSiteAreaHa, 0.1))", + "type": "if" } ] - } - ], - "type": "section" - } - ] - }, - "modelName": null, - "templateName": "nhtBaselineData", - "optional": true, - "optionalQuestionText": null, - "title": "Collecting, or synthesising baseline data", - "collapsibleHeading": null, - "name": "NHT - Baseline data", - "description": null - }, - { - "collapsedByDefault": false, - "template": { - "dataModel": [ - { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ + }, + { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "dataType": "feature", + "name": "areaOfReleaseSite", + "description": "Mapping field to be done and Area (ha) field be auto-calculated from mapping." + }, { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ + "computed": { + "expression": "$geom.areaHa(areaOfReleaseSite)" + }, + "dataType": "number", + "name": "calculatedAreaOfReleaseSiteHa", + "units": "ha", + "decimalPlaces": 3 + }, { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "columns": [ + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaOfReleaseSiteHa" + }, + "dataType": "number", + "name": "areaOfReleaseSiteTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, { "dataType": "text", - "name": "communicationMaterialType", + "name": "mappingNotAlignedReasonReleaseSite", "constraints": [ - "Advertising", - "Book", - "Brochures", - "Extension materials", - "Fliers", - "Media release", - "Report", - "Social media posts", - "Videos", + "Mapped area simplifies more complex area/s where work was undertaken during this period", "Other" ], - "validate": "required" + "validate": "required", + "behaviour": [ + { + "condition": "not (within(areaOfReleaseSiteTreatedHa, calculatedAreaOfReleaseSiteHa, 0.1))", + "type": "if" + } + ] }, { "dataType": "text", - "name": "otherCommunicationMaterialType", + "name": "mappingNotAlignedCommentsReleaseSite", + "validate": "required,maxSize[100]", "behaviour": [ { - "condition": "communicationMaterialType == \"Other\"", - "type": "enable" + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReasonReleaseSite" } - ], - "validate": "required,maxSize[100]" - }, - { - "dataType": "number", - "name": "numberOfCommunicationMaterialsPublished", - "description": "Refers to unique publications not number printed", - "validate": "required,min[0]" + ] }, { - "dataType": "text", - "name": "communicationMaterialPurpose", - "validate": "required,maxSize[300]" + "dataType": "document", + "name": "extraMappingDetailsReleaseSite", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaOfReleaseSiteTreatedHa, calculatedAreaOfReleaseSiteHa, 0.1))", + "type": "if" + } + ] + }, + + { + "columns": [ + { + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required" + }, + { + "dataType": "date", + "name": "activitiesEndDate", + "description": "Specific the dates these events were held on.", + "validate": [ + { + "rule": "required" + }, + { + "rule": "future", + "param": { + "expression": "formatDateForValidation(activitiesStartDate)", + "type": "computed" + } + } + ] + }, + { + "dataType": "text", + "name": "breedingTechnique", + "constraints": [ + "Captive breeding", + "Fauna captive breeding program", + "Fauna wild breeding program", + "Other" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "otherBreedingTechnique", + "description": "", + "behaviour": [ + { + "condition": "breedingTechnique == \"Other\"", + "type": "enable" + } + ], + "validate": "required,maxSize[300]" + }, + { + "dataType": "text", + "name": "individualsOrGroups", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "numberOfIndividualsOrGroups", + "validate": "required,min[0]" + }, + { + "dataType": "number", + "name": "numberOfIndividualsReleased", + "validate": "required,min[0]" + }, + { + "dataType": "number", + "name": "numberOfAdnimalDiedPreReleased", + "validate": "required,min[0]" + }, + { + "name": "projectBaseline", + "dataType": "text", + "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", + "validate": "required", + "constraints": { + "textProperty": "baseline", + "valueProperty": "code", + "type": "pre-populated", + "excludePath": "projectBaseline", + "config": { + "source": { + "context-path": "owner.custom.details.baseline.rows" + } + } + } + }, + { + "name": "datasetSupports", + "dataType": "text", + "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", + "validate": "required", + "constraints": { + "textProperty": "name", + "valueProperty": "dataSetId", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.custom.dataSets" + } + } + } + } + ], + "dataType": "list", + "name": "speciesInBreedingProgram" } ], "dataType": "list", - "name": "communicationMaterials" + "name": "breedingProgramDetails" + }, + { + "name": "numberOfBreedingProgramsSurveysConducted", + "type": "number", + "decimalPlaces": 0, + "computed": { + "expression": "count(breedingProgramDetails, \"numberOfIndividualsReleased\")" + } + }, + { + "dataType": "number", + "name": "totalCaptiveBreedingEstablished", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(breedingProgramDetails, \"newOrMaintained == 'Newly established' ? numberOfCaptiveBreeding : 0\")" + } + }, + { + "dataType": "number", + "name": "totalCaptiveBreedingEstablishedInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalCaptiveBreedingEstablished", + "type": "computed" + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalCaptiveBreedingMaintained", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(breedingProgramDetails, \"newOrMaintained == 'Maintained' ? numberOfCaptiveBreeding : 0\")" + } + }, + { + "dataType": "number", + "name": "totalCaptiveBreedingMaintainedInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalCaptiveBreedingMaintained", + "type": "computed" + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "text", + "name": "totalInvoicedCaptiveBreedingMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalCaptiveBreedingEstablishedInvoiced < +totalCaptiveBreedingEstablished or +totalCaptiveBreedingMaintainedInvoiced < +totalCaptiveBreedingMaintained", + "type": "enable" + } + ] }, { "dataType": "text", @@ -979,12 +1276,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -993,26 +1290,37 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Communication Materials", - "title": "Communication Materials", + "modelName": "NHT - Establishing ex-situ breeding programs", + "title": "Captive Breeding, Translocation or Re-introduction Program", "viewModel": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -1027,7 +1335,8 @@ { "type": "col", "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "firstNationIndividualNumber", @@ -1040,962 +1349,4250 @@ ] }, { + "width": "20%", "source": "participationDetails", "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", "type": "textarea" } ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", + "source": "participationInformationTableCbp", "type": "table" }, { - "type": "section", + "type": "row", "items": [ { - "columns": [ - { - "width": "25%", - "source": "communicationMaterialType", - "title": "Type of communication material published", - "type": "select2" - }, - { - "width": "25%", - "source": "otherCommunicationMaterialType", - "title": "Type of communication material published (if Other)", - "type": "textarea" - }, - { - "width": "15%", - "source": "numberOfCommunicationMaterialsPublished", - "title": "Number of communication materials published", - "type": "number" - }, - { - "width": "35%", - "source": "communicationMaterialPurpose", - "title": "Purpose of communication material", - "type": "textarea" - } - ], - "userAddedRows": true, - "source": "communicationMaterials", - "type": "table" - }, + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ { - "type": "row", + "type": "col", + "css": "span4 col-border-right", "items": [ { - "source": "Note: to upload a communication material refer to the documents tab.", - "type": "literal" + "type": "row", + "items": [ + { + "preLabel": "(i) Total number of captive breeding and release, translocation or re-introduction programs (established) for this reporting period", + "source": "totalCaptiveBreedingEstablished", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total number of captive breeding and release, translocation or re-introduction programs (established) invoiced for this reporting period", + "source": "totalCaptiveBreedingEstablishedInvoiced", + "type": "number" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span4 col-border-right", "items": [ { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" - } - ] - }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "type": "row", + "items": [ + { + "preLabel": "(iii) Total number of captive breeding and release, translocation or re-introduction programs (maintained) for this reporting period", + "source": "totalCaptiveBreedingMaintained", + "type": "number" + } + ] }, { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." - } - ] - }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] - }, - { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ - { - "title": "Attached documents", - "source": "attachments", - "type": "document" + "type": "row", + "items": [ + { + "preLabel": "(iv) Total number of captive breeding and release, translocation or re-introduction programs (maintained) invoiced for this reporting period", + "source": "totalCaptiveBreedingMaintainedInvoiced", + "type": "number" + } + ] } ] } ] - } - ] - }, - "modelName": null, - "templateName": "nhtCommunicationMaterials", - "optional": true, - "optionalQuestionText": null, - "title": "Communication materials", - "collapsibleHeading": null, - "name": "NHT - Communication materials", - "description": null - }, - { - "collapsedByDefault": false, - "template": { - "dataModel": [ - { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" }, { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ + "type": "row", + "items": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedCaptiveBreedingMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" + ] }, { - "columns": [ - { - "dataType": "text", - "name": "eventType", - "constraints": [ - "Field days", - "Training / workshop events", - "Conferences / seminars", - "One-on-one technical advice interactions", - "On-ground trials / demonstrations", - "On-ground works" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "numberOfEvents", - "validate": "required" - }, - { - "dataType": "number", - "name": "numberOfParticipants", - "validate": "required,min[0]" - }, - { - "dataType": "number", - "name": "numberOfIndigenousParticipants", - "validate": "required,min[0]" - }, - { - "dataType": "number", - "name": "numberOfFarmers", - "validate": "required,min[0]" - }, - { - "dataType": "number", - "name": "numberOfGroups", - "validate": "required,min[0]" - }, - { - "dataType": "stringList", - "name": "industryType", - "constraints": [ - "Cropping", - "Dairy", - "Dryland agriculture", - "Horticulture", - "Grazing", - "Fisheries", - "Aquaculture", - "Environmental" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "eventPurpose", - "validate": "required,maxSize[300]" - }, - { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } - } - } - }, - { - "name": "investmentPriorities2", - "dataType": "stringList", - "validate": "required", - "constraints": { - "type": "pre-populated", - "config": { - "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" - } - } - } - }, + "type": "section", + "items": [ { - "dataType": "text", - "name": "otherInvestmentPriority", - "behaviour": [ + "addRowText": "Add a new breeding area", + "userAddedRows": true, + "source": "breedingProgramDetails", + "type": "repeat", + "items": [ { - "type": "enable", - "condition": "\"Other\" in investmentPriorities2" - } - ] - } - ], - "dataType": "list", - "name": "events" - }, - { - "dataType": "text", - "name": "comments", - "validate": "maxSize[1500]" - }, - { - "dataType": "image", - "name": "photographicEvidence" - }, - { - "dataType": "boolean", - "name": "dataUploaded", - "description": "" - }, - { - "dataType": "text", - "name": "projectAssuranceDetails", - "description": "" - }, - { - "dataType": "list", - "name": "assuranceDocuments", - "columns": [ - { - "dataType": "document", - "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" - } - ] - } - ], - "modelName": "NHT - Community engagement", - "title": "Community/stakeholder engagement", - "viewModel": [ - { - "type": "section", - "items": [ - { - "columns": [ - { - "width": "10%", - "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", - "type": "selectOne" - }, - { - "width": "20%", - "type": "col", - "title": "Total Number of people delivering this service", + "type": "row", "items": [ { - "source": "participationIndividualNumber", - "type": "number" + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] + } + ] }, { - "source": "participationGroupNumber", - "type": "selectOne" + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] } ] }, { - "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "type": "row", + "css": "border-bottom", "items": [ { - "source": "firstNationIndividualNumber", - "type": "number" + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Type of activity", + "source": "activityType", + "type": "selectOne" + } + ] + } + ] }, { - "source": "firstNationGroupNumber", - "type": "selectOne" - } - ] - }, - { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" - } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" - }, - { - "columns": [ - { - "width": "10%", - "source": "eventType", - "title": "Type of Community / Stakeholder engagement activity", - "type": "select2" - }, - { - "width": "10%", - "source": "numberOfEvents", - "title": "Number of Community / Stakeholder engagement type events", - "type": "number" - }, - { - "width": "10%", - "source": "eventPurpose", - "title": "Purpose of engagement", - "type": "textarea" - }, - { - "width": "10%", - "source": "numberOfGroups", - "title": "Number of communities or groups engaged", - "type": "number" - }, - { - "width": "10%", - "source": "numberOfParticipants", - "title": "Total number of attendees / participants", - "type": "number" - }, - { - "width": "10%", - "source": "numberOfIndigenousParticipants", - "title": "Number of Indigenous attendees / participants", - "type": "number" - }, - { - "width": "10%", - "source": "numberOfFarmers", - "title": "Number of farmers attending / participating", - "type": "number" - }, - { - "width": "10%", - "source": "industryType", - "title": "Industry type engaged", - "type": "select2Many" - }, - { - "width": "10%", - "type": "col", - "title": "Which investment priority does this activity relate to?", - "items": [ + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Is this an established or maintained activity?", + "source": "newOrMaintained", + "type": "selectOne" + } + ] + } + ] + }, { - "source": "investmentPriorities2", - "type": "select2Many" + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Were permits obtained to support this activity?", + "source": "activityPermit", + "type": "selectOne" + } + ] + } + ] }, { - "source": "otherInvestmentPriority", - "type": "text" - } - ] - }, - { - "source": "relatedOutcomes", - "type": "selectOne", - "width": "10%", - "title": "Which outcome statement/s relates to this survey?" - } - ], - "userAddedRows": true, - "source": "events", - "type": "table" - }, - { - "type": "row", - "items": [ - { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" - } - ] - }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." - }, - { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." - } - ] - }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] - }, - { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Ex-situ / In-situ", + "source": "inSituExSitu", + "type": "selectOne" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "areaOfSourceSite", + "type": "feature", + "preLabel": "Site/s of captive breeding, pre-translocation capture (source site)" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedAreaOfSourceSiteAreaHa", + "type": "number", + "readonly": true, + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetailsSourceSite", + "type": "document" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) of captive breeding, pre-translocation capture (source site)", + "source": "areaOfSourceSiteTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReasonSourceSite", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedCommentsSourceSite", + "type": "textarea", + "rows": 5 + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "areaOfReleaseSite", + "type": "feature", + "preLabel": " Site/s of release of captive breeding, re-introduced or translocated animals (release site)" + } + ] + }, + { + "type": "row", + "items": [ + { + "readonly": "readonly", + "source": "calculatedAreaOfReleaseSiteHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetailsReleaseSite", + "type": "document" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) of release of captive breeding, re-introduced or translocated animals (release site)", + "source": "areaOfReleaseSiteTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReasonReleaseSite", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedCommentsReleaseSite", + "type": "textarea", + "rows": 5 + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Number of captive breeding, release, translocation, or re-introduction sites established/ maintained", + "source": "numberOfCaptiveBreeding", + "type": "number" + } + ] + } + ] + } + ] + }, + { + "addRowText": "Add a species", + "columns": [ + { + "width": "15%", + "source": "activitiesStartDate", + "type": "date", + "title": "Activity start date" + }, + { + "width": "15%", + "source": "activitiesEndDate", + "type": "date", + "title": "Activity end date" + }, + { + "width": "15%", + "source": "individualsOrGroups", + "type": "selectOne", + "title": "Individuals or groups?" + }, + { + "width": "10%", + "source": "numberOfIndividualsOrGroups", + "title": "Number of groups/individuals of the investment priority species in captive breeding, release, translocation or re-introduction program", + "type": "number" + }, + { + "width": "10%", + "source": "numberOfAdnimalDiedPreReleased", + "title": "Number of groups/individuals of the investment priority species that died (pre-release)", + "type": "number" + }, + { + "width": "10%", + "source": "numberOfIndividualsReleased", + "title": "Number of groups/individuals released, translocated or re-introduced to the wild", + "type": "number" + }, + { + "width": "10%", + "type": "col", + "title": "Technique of captive breeding, release, translocation or re-introduction used", + "items": [ + { + "source": "breedingTechnique", + "type": "selectOne" + }, + { + "source": "otherBreedingTechnique", + "type": "text" + } + ] + }, + { + "source": "projectBaseline", + "type": "selectOne", + "width": "15%", + "title": "Which project baseline relates to this activity?" + } + ], + "userAddedRows": true, + "disableTableUpload": true, + "source": "speciesInBreedingProgram", + "type": "table" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" + }, + { + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, + { + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] + } + ] + } + ] + }, + "modelName": null, + "templateName": "nhtExSituBreedingSites", + "optional": true, + "optionalQuestionText": null, + "title": "Establishing ex-situ breeding program", + "collapsibleHeading": null, + "name": "NHT - Establishing ex-situ breeding programs", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ + { + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableCom" + }, + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } + } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, + { + "columns": [ + { + "dataType": "text", + "name": "communicationMaterialType", + "constraints": [ + "Booklets", + "Educational/Interpretive Signage", + "Fact Sheets/Brochures", + "Videos" + ], + "validate": "required" + }, + { + "dataType": "date", + "name": "communicationDate", + "validate": "required" + }, + { + "dataType": "number", + "name": "numberOfCommunicationMaterialsPublished", + "description": "Refers to unique publications not number printed.", + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "communicationMaterialPurpose", + "validate": "required,maxSize[300]", + "description": "e.g. public awareness, warnings, advertisements" + } + ], + "dataType": "list", + "name": "communicationMaterials" + }, + { + "dataType": "number", + "name": "totalMaterialsPublished", + "validate": "min[0]", + "decimalPlaces": 0, + "defaultValue": 1, + "computed": { + "expression": "sum(communicationMaterials, \"numberOfCommunicationMaterialsPublished\")" + } + }, + { + "dataType": "number", + "name": "totalMaterialsPublishedInvoiced", + "defaultValue": "", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalMaterialsPublished", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "totalInvoicedCommunicationMaterialsMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required,min[0]", + "behaviour": [ + { + "condition": "+totalMaterialsPublishedInvoiced < +totalMaterialsPublished", + "type": "enable" + } + ] + }, + { + "dataType": "text", + "name": "comments", + "validate": "maxSize[1500]" + }, + { + "dataType": "image", + "name": "photographicEvidence" + }, + { + "dataType": "boolean", + "name": "dataUploaded", + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" + }, + { + "name": "projectAssuranceDetails", + "dataType": "text", + "validate": "required,maxSize[5000]" + }, + { + "dataType": "list", + "name": "assuranceDocuments", + "columns": [ + { + "dataType": "document", + "name": "attachments", + "description": "Please attach any Evidence of Service Delivery here." + } + ] + } + ], + "modelName": "NHT - Communication Materials", + "title": "Communication Materials", + "viewModel": [ + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, + "columns": [ + { + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", + "type": "selectOne" + }, + { + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableCom", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total Number of communication materials published for this reporting period", + "source": "totalMaterialsPublished", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total Number of communication materials invoiced for this reporting period", + "source": "totalMaterialsPublishedInvoiced", + "type": "number" + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedCommunicationMaterialsMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "type": "row", + "items": [ + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + } + ] + }, + { + "type": "section", + "items": [ + { + "columns": [ + { + "width": "25%", + "source": "communicationMaterialType", + "title": "Type of communication material published", + "type": "select2" + }, + { + "width": "15%", + "source": "communicationDate", + "title": "Date", + "type": "date" + }, + { + "width": "20%", + "source": "numberOfCommunicationMaterialsPublished", + "title": "Number of communication materials published", + "type": "number" + }, + { + "width": "40%", + "source": "communicationMaterialPurpose", + "title": "Purpose of communication material", + "type": "textarea" + } + ], + "userAddedRows": true, + "disableTableUpload": true, + "source": "communicationMaterials", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "source": "Note: to upload a communication material refer to the documents tab.", + "type": "literal" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" + }, + { + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, + { + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] + } + ] + } + ] + }, + "modelName": null, + "templateName": "nhtCommunicationMaterials", + "optional": true, + "optionalQuestionText": null, + "title": "Communication materials", + "collapsibleHeading": null, + "name": "NHT - Communication materials", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ + { + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableCse" + }, + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } + } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, + { + "columns": [ + { + "dataType": "text", + "name": "eventType", + "description": "Type of engagement events are training/workshops, on-ground trials/demonstrations and field days. Note field days should be reported as an event e.g, 3 field days is considered 1 event NOT 3 days", + "constraints": [ + "Field days", + "On-ground trials / demonstrations facilitated or hosted", + "Training workshops hosted" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "numberOfEvents", + "validate": "required", + "description": "This field can contribute to Number of the engagement event types: training/workshops, on-ground trials/demonstrations and field days" + }, + { + "dataType": "number", + "name": "numberOfParticipants", + "validate": "required,min[0]" + }, + { + "dataType": "number", + "name": "numberOfIndigenousParticipants", + "validate": "required,min[0]" + }, + { + "dataType": "number", + "name": "numberOfFarmers", + "validate": "required,min[0]" + }, + { + "dataType": "number", + "name": "numberOfGroups", + "validate": "required,min[0]" + }, + { + "dataType": "stringList", + "name": "industryType", + "constraints": [ + "Cropping", + "Dairy", + "Dryland agriculture", + "Horticulture", + "Grazing", + "Fisheries", + "Aquaculture", + "Environmental" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "eventPurpose", + "validate": "required,maxSize[300]" + }, + { + "dataType": "date", + "name": "dateFrom", + "validate": "required" + }, + { + "dataType": "date", + "name": "dateTo", + "validate": [ + { + "rule": "required" + }, + { + "rule": "future", + "param": { + "expression": "formatDateForValidation(dateFrom)", + "type": "computed" + } + } + ] + } + ], + "dataType": "list", + "name": "events" + }, + { + "dataType": "number", + "name": "totalNumberEngagementHeld", + "validate": "min[0]", + "decimalPlaces": 0, + "defaultValue": 1, + "computed": { + "expression": "sum(events, \"numberOfEvents\")" + } + }, + { + "dataType": "number", + "name": "totalNumberEngagementHeldInvoiced", + "description": "Number of events invoiced for this reporting period.", + "defaultValue": "", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalNumberEngagementHeld", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "totalNumberEngagementInvoicedMismatched", + "description": "Please explain why the Total invoiced field is different from the Totals tally field.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalNumberEngagementHeldInvoiced < +totalNumberEngagementHeld", + "type": "enable" + } + ] + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "text", + "name": "comments", + "validate": "maxSize[1500]" + }, + { + "dataType": "image", + "name": "photographicEvidence" + }, + { + "dataType": "boolean", + "name": "dataUploaded", + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" + }, + { + "name": "projectAssuranceDetails", + "dataType": "text", + "validate": "required,maxSize[5000]" + }, + { + "dataType": "list", + "name": "assuranceDocuments", + "columns": [ + { + "dataType": "document", + "name": "attachments", + "description": "Please attach any Evidence of Service Delivery here." + } + ] + } + ], + "modelName": "NHT - Community engagement", + "title": "Community/Stakeholder Engagement", + "viewModel": [ + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, + "columns": [ + { + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", + "type": "selectOne" + }, + { + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableCse", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total number of events held/attended", + "source": "totalNumberEngagementHeld", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span5 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total number of events invoiced for this reporting period", + "source": "totalNumberEngagementHeldInvoiced", + "type": "number" + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalNumberEngagementInvoicedMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "type": "section", + "items": [ + { + "type": "row", + "items": [ + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + } + ] + }, + { + "columns": [ + { + "width": "10%", + "source": "dateFrom", + "title": "Date from", + "type": "date" + }, + { + "width": "10%", + "source": "dateTo", + "title": "Date to", + "type": "date" + }, + { + "width": "10%", + "source": "eventType", + "title": "Type of Community / Stakeholder engagement event", + "type": "selectOne" + }, + { + "width": "10%", + "source": "numberOfEvents", + "title": "Number of engagement events", + "type": "number" + }, + { + "width": "10%", + "source": "eventPurpose", + "title": "Purpose of engagement", + "type": "textarea" + }, + { + "width": "10%", + "source": "numberOfGroups", + "title": "Number of communities or groups engaged", + "type": "number" + }, + { + "width": "10%", + "source": "numberOfParticipants", + "title": "Total number of attendees / participants", + "type": "number" + }, + { + "width": "10%", + "source": "numberOfIndigenousParticipants", + "title": "Number of Indigenous attendees / participants", + "type": "number" + }, + { + "width": "10%", + "source": "numberOfFarmers", + "title": "Number of farmers attending / participating", + "type": "number" + }, + { + "width": "10%", + "source": "industryType", + "title": "Industry/Stakeholder type engaged", + "type": "select2Many" + } + ], + "userAddedRows": true, + "disableTableUpload": true, + "source": "events", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" + }, + { + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, + { + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] + } + ] + } + ] + }, + "modelName": null, + "templateName": "nhtCommunityEngagement", + "optional": true, + "optionalQuestionText": null, + "title": "Community/stakeholder engagement", + "collapsibleHeading": null, + "name": "NHT - Community engagement", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ + { + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableCoa" + }, + { + "columns": [ + { + "columns": [ + { + "dataType": "feature", + "name": "protectedSites" + }, + { + "computed": { + "expression": "$geom.areaHa(protectedSites)" + }, + "dataType": "number", + "decimalPlaces": 3, + "name": "areaProtectedHa", + "units": "ha" + }, + { + "defaultValue": { + "expression": "$geom.lengthKm(protectedSites)", + "type": "computed" + }, + "dataType": "number", + "name": "lengthProtectedKm", + "units": "km", + "decimalPlaces": 3 + }, + { + "dataType": "text", + "name": "accessControlType", + "description": "", + "constraints": [ + "Boardwalks", + "Bollards & barriers", + "Constructed parking bays", + "Fencing, styles, gates & grids", + "Formed traffic ways", + "Signage", + "Other" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "otherAccessControlType", + "description": "Please specify the type of access control if Other (specify in notes) was selected in the Type of Access Control Installed column.", + "behaviour": [ + { + "condition": "accessControlType == \"Other\"", + "type": "enable" + } + ], + "validate": "required,maxSize[100]" + }, + { + "dataType": "text", + "name": "controlObjective", + "description": "What is your access control method? and/or What do you intend to achieve by using your structure/s?", + "validate": "required,maxSize[300]" + }, + { + "dataType": "date", + "name": "dateFrom", + "validate": "required" + }, + { + "dataType": "date", + "name": "dateTo", + "validate": [ + { + "rule": "required" + }, + { + "rule": "future", + "param": { + "expression": "formatDateForValidation(dateFrom)", + "type": "computed" + } + } + ] + } + ], + "dataType": "list", + "name": "accessControlDetails" + }, + { + "dataType": "number", + "name": "numberInstalled", + "validate": "required,min[0]" + }, + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } + } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, + { + "dataType": "feature", + "name": "sitesCoveredForControlAccess", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." + }, + { + "computed": { + "expression": "$geom.areaHa(sitesCoveredForControlAccess)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesCoveredForControlAccess)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ + { + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReason", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ + { + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + } + ], + "dataType": "list", + "name": "controllingAccessAreasControlled" + }, + { + "dataType": "number", + "name": "totalStructuresInstalled", + "decimalPlaces": 0, + "validate": "min[0]", + "computed": { + "expression": "sum(controllingAccessAreasControlled, \"numberInstalled\")" + } + }, + { + "dataType": "number", + "name": "totalStructuresInstalledInvoiced", + "defaultValue": "", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalStructuresInstalled", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "number", + "name": "totalLengthStructuresInstalled", + "decimalPlaces": 3, + "validate": "min[0]", + "computed": { + "expression": "sum(controllingAccessAreasControlled, \"lengthTreatedKm\")" + } + }, + { + "dataType": "number", + "name": "totalLengthStructuresInstalledInvoiced", + "decimalPlaces": 3, + "defaultValue": "", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalLengthStructuresInstalled", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ] + }, + { + "dataType": "number", + "name": "totalAreaStructuresInstalled", + "decimalPlaces": 3, + "validate": "min[0]", + "computed": { + "expression": "sum(controllingAccessAreasControlled, \"areaTreatedHa\")" + } + }, + { + "dataType": "number", + "name": "totalAreaStructuresInstalledInvoiced", + "decimalPlaces": 3, + "defaultValue": "", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaStructuresInstalled", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "totalInvoicedControllingAccessMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required,min[0]", + "behaviour": [ + { + "condition": "+totalStructuresInstalledInvoiced < +totalStructuresInstalled or +totalLengthStructuresInstalledInvoiced < +totalLengthStructuresInstalled or +totalAreaStructuresInstalledInvoiced < +totalAreaStructuresInstalled", + "type": "enable" + } + ] + }, + { + "dataType": "text", + "name": "comments", + "validate": "maxSize[1500]" + }, + { + "dataType": "image", + "name": "photographicEvidence" + }, + { + "dataType": "boolean", + "name": "dataUploaded", + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" + }, + { + "name": "projectAssuranceDetails", + "dataType": "text", + "validate": "required,maxSize[5000]" + }, + { + "dataType": "list", + "name": "assuranceDocuments", + "columns": [ + { + "dataType": "document", + "name": "attachments", + "description": "Please attach any Evidence of Service Delivery here." + } + ] + } + ], + "modelName": "NHT - Controlling access", + "title": "Controlling Access", + "viewModel": [ + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, + "columns": [ + { + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", + "type": "selectOne" + }, + { + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableCoa", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total number of structures installed that control access for this reporting period", + "source": "totalStructuresInstalled", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total number of structures that control access invoiced for this reporting period", + "source": "totalStructuresInstalledInvoiced", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total area (ha) of structures installed that control access for this reporting period", + "source": "totalAreaStructuresInstalled", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total area (ha) of structures installed that control access invoiced for this reporting period", + "source": "totalAreaStructuresInstalledInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(v) Total length (km) of structures installed that control access for this reporting period", + "source": "totalLengthStructuresInstalled", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(vi) Total length (km) of structures installed that control access invoiced for this reporting period", + "source": "totalLengthStructuresInstalledInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedControllingAccessMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add a new controlled area", + "userAddedRows": true, + "source": "controllingAccessAreasControlled", + "type": "repeat", + "items": [ + { + "type": "row", + "items": [ + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + } + ] + }, + { + "type": "row", + "css": "border-bottom", + "items": [ + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "numberInstalled", + "preLabel": "Number of structures installed", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Site/s where structures have been installed to control access", + "source": "sitesCoveredForControlAccess", + "type": "feature" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedLengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) / length (km) where access has been controlled", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "lengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] + } + ] + } + ] + }, + { + "columns": [ + { + "width": "20%", + "type": "col", + "title": "Site/s protected by access control structures", + "items": [ + { + "source": "protectedSites", + "type": "feature" + }, + { + "type": "row", + "items": [ + { + "readonly": true, + "source": "areaProtectedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "readonly": true, + "source": "lengthProtectedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + } + ] + }, + { + "width": "20%", + "type": "col", + "title": "Type of access control installed", + "items": [ + { + "source": "accessControlType", + "type": "selectOne" + }, + { + "source": "otherAccessControlType", + "type": "text" + } + ] + }, + { + "width": "30%", + "source": "controlObjective", + "title": "Control objective", + "type": "textarea", + "rows": 5 + }, + { + "width": "15%", + "source": "dateFrom", + "title": "Date from", + "type": "date" + }, + { + "width": "15%", + "source": "dateTo", + "title": "Date to", + "type": "date" + } + ], + "userAddedRows": true, "disableTableUpload": true, + "source": "accessControlDetails", + "type": "table" + } + + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" + }, + { + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, + { + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] + } + ] + }, + "modelName": null, + "templateName": "nhtControllingAccess", + "optional": true, + "optionalQuestionText": null, + "title": "Controlling access", + "collapsibleHeading": null, + "name": "NHT - Controlling access", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ + { + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableCpa" + }, + { + "columns": [ + { + "dataType": "text", + "name": "initialOrFollowup", + "constraints": [ + "Initial", + "Follow-up" + ], + "validate": "required" + }, + { + "dataType": "feature", + "name": "sitesTreatedForPestAnimal", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping.", + "validate": "required" + }, + { + "computed": { + "expression": "$geom.areaHa(sitesTreatedForPestAnimal)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesTreatedForPestAnimal)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ + { + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReason", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ + { + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { "columns": [ { - "title": "Attached documents", - "source": "attachments", - "type": "document" + "dataType": "species", + "name": "pestSpecies", + "dwcAttribute": "scientificName", + "description": "Pest species targeted for treatment (start typing a scientific or common name for a species).", + "validate": "required" + }, + { + "dataType": "text", + "name": "pestManagementMethod", + "dwcAttribute": "treatmentMethod", + "description": "The method used in this activity to manage pests.", + "constraints": [ + "Aerial shoot", + "Bait & trap", + "Bait only", + "Feral free enclosure", + "Exclusion fencing", + "Fumigation", + "Ground shoot", + "Trap & cull", + "Trap & remove", + "Other" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "otherManagementMethod", + "description": "Please specify the management method used if Other was selected in the Management Method column.", + "behaviour": [ + { + "condition": "pestManagementMethod == \"Other\"", + "type": "enable" + } + ], + "validate": "required,maxSize[100]" + }, + { + "dataType": "text", + "name": "treatmentObjective", + "validate": "required,maxSize[300]" + }, + { + "dataType": "text", + "name": "individualsOrColonies", + "constraints": [ + "Colonies", + "Individuals" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "individualsOrColoniesRemoved", + "validate": "required" + } + ], + "dataType": "list", + "name": "pestAnimalsControlled" + }, + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } + } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + } + ], + "dataType": "list", + "name": "areasControlled" + }, + { + "dataType": "number", + "name": "totalAreaPestAnimalsTreatedInitial", + "decimalPlaces": 3, + "computed": { + "expression": "sum(areasControlled, \"initialOrFollowup == 'Initial' ? areaTreatedHa : 0\")" + } + }, + { + "decimalPlaces": 3, + "defaultValue": "", + "dataType": "number", + "name": "totalAreaPestAnimalsTreatedInitialInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaPestAnimalsTreatedInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ] + }, + + { + "dataType": "number", + "name": "totalAreaPestAnimalsTreatedFollowUp", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(areasControlled, \"initialOrFollowup == 'Follow-up' ? areaTreatedHa : 0\")" + } + }, + { + "decimalPlaces": 3, + "defaultValue": "", + "dataType": "number", + "name": "totalAreaPestAnimalsTreatedFollowUpInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaPestAnimalsTreatedFollowUp", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ] + }, + { + "dataType": "number", + "name": "totalLengthPestAnimalsTreatedInitial", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(areasControlled, \"initialOrFollowup == 'Initial' ? lengthTreatedKm : 0\")" + } + }, + { + "decimalPlaces": 3, + "defaultValue": "", + "dataType": "number", + "name": "totalLengthPestAnimalsTreatedInitialInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalLengthPestAnimalsTreatedInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ] + }, + { + "dataType": "number", + "name": "totalLengthPestAnimalsTreatedFollowUp", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(areasControlled, \"initialOrFollowup == 'Follow-up' ? lengthTreatedKm : 0\")" + } + }, + { + "decimalPlaces": 3, + "defaultValue": "", + "dataType": "number", + "name": "totalLengthPestAnimalsTreatedFollowUpInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalLengthPestAnimalsTreatedFollowUp", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "totalInvoicedControllingPestMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required,min[0]", + "behaviour": [ + { + "condition": "+totalAreaPestAnimalsTreatedInitialInvoiced < +totalAreaPestAnimalsTreatedInitial or +totalAreaPestAnimalsTreatedFollowUpInvoiced < +totalAreaPestAnimalsTreatedFollowUp or +totalLengthPestAnimalsTreatedInitialInvoiced < +totalLengthPestAnimalsTreatedInitial or +totalLengthPestAnimalsTreatedFollowUpInvoiced < +totalLengthPestAnimalsTreatedFollowUp", + "type": "enable" + } + ] + }, + { + "dataType": "text", + "name": "comments", + "validate": "maxSize[1500]" + }, + { + "dataType": "image", + "name": "photographicEvidence" + }, + { + "dataType": "boolean", + "name": "dataUploaded", + "description": "" + }, + { + "dataType": "text", + "name": "projectAssuranceDetails", + "description": "", + "validate": "required,maxSize[5000]" + }, + { + "dataType": "list", + "name": "assuranceDocuments", + "columns": [ + { + "dataType": "document", + "name": "attachments", + "description": "Please attach any Evidence of Service Delivery here." + } + ] + } + ], + "modelName": "NHT - Pest animal management", + "title": "Controlling Pest Animals", + "viewModel": [ + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, + "columns": [ + { + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", + "type": "selectOne" + }, + { + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableCpa", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total area (ha) treated for pest animals (initial) for this reporting period", + "source": "totalAreaPestAnimalsTreatedInitial", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total area (ha) treated for pest animals (initial) invoiced for this reporting period", + "source": "totalAreaPestAnimalsTreatedInitialInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total area (ha) treated for pest animals (follow up) for this reporting period", + "source": "totalAreaPestAnimalsTreatedFollowUp", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total area (ha) treated for pest animals (follow up) invoiced for this reporting period", + "source": "totalAreaPestAnimalsTreatedFollowUpInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(v) Total length (km) treated for pest animals (initial) for this reporting period", + "source": "totalLengthPestAnimalsTreatedInitial", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(vi) Total length (km) treated for pest animals (initial) invoiced for this reporting period", + "source": "totalLengthPestAnimalsTreatedInitialInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(vii) Total length (km) treated for pest animals (follow up) for this reporting period", + "source": "totalLengthPestAnimalsTreatedFollowUp", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(viii) Total length (km) treated for pest animals (follow up) invoiced for this reporting period", + "source": "totalLengthPestAnimalsTreatedFollowUpInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedControllingPestMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add a new area", + "userAddedRows": true, + "source": "areasControlled", + "type": "repeat", + "items": [ + { + "type": "row", + "items": [ + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + } + ] + }, + { + "type": "row", + "css": "border-bottom", + "items": [ + { + "preLabel": "Initial or follow-up control?", + "css": "span3", + "source": "initialOrFollowup", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "css": "border-bottom", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Site/s where pest control was undertaken", + "source": "sitesTreatedForPestAnimal", + "type": "feature" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedLengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) / length (km) treated for pest animals", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "lengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "addRowText": "Add a species", + "columns": [ + { + "width": "20%", + "source": "pestSpecies", + "title": "Target pest species", + "type": "speciesSelect" + }, + { + "width": "20%", + "type": "col", + "title": "Type of control", + "items": [ + { + "source": "pestManagementMethod", + "type": "selectOne" + }, + { + "source": "otherManagementMethod", + "type": "text" + } + ] + }, + { + "width": "30%", + "source": "treatmentObjective", + "title": "Treatment objective", + "type": "textarea" + }, + { + "width": "15%", + "source": "individualsOrColonies", + "title": "Individuals or colonies?", + "type": "selectOne" + }, + { + "width": "15%", + "source": "individualsOrColoniesRemoved", + "title": "Number of individuals or colonies removed / destroyed", + "type": "number" + } + ], + "userAddedRows": true, + "disableTableUpload": true, + "source": "pestAnimalsControlled", + "type": "table" } ] } ] - } - ] - }, - "modelName": null, - "templateName": "nhtCommunityEngagement", - "optional": true, - "optionalQuestionText": null, - "title": "Community/stakeholder engagement", - "collapsibleHeading": null, - "name": "NHT - Community engagement", - "description": null - }, - { - "collapsedByDefault": false, - "template": { - "dataModel": [ - { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" }, { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "type": "row", + "items": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" } - ], - "validate": "required,min[0]" + ] }, { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ + "type": "row", + "items": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + ] }, { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "type": "row", + "items": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" + }, + { + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" } - ], - "validate": "required,min[0]" + ] }, { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ + "type": "row", + "items": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + ] }, { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] + } + ] + }, + "modelName": null, + "templateName": "nhtPestAnimalManagement", + "optional": true, + "optionalQuestionText": null, + "title": "Controlling pest animals", + "collapsibleHeading": null, + "name": "NHT - Pest animal management", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ { + "allowRowDelete": "false", "columns": [ { - "columns": [ - { - "dataType": "number", - "name": "numberInstalled", - "validate": "required,min[0]" - }, - { - "dataType": "feature", - "name": "sitesInstalled" - }, - { - "computed": { - "expression": "$geom.areaHa(sitesInstalled)" - }, - "dataType": "number", - "decimalPlaces": 3, - "name": "sitesInstalledCalculatedAreaHa", - "units": "ha", - "behaviour": [ - { - "condition": "areaInvoicedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The controlled area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "computed": { - "expression": "$geom.lengthKm(sitesInstalled)" - }, - "dataType": "number", - "decimalPlaces": 3, - "name": "sitesInstalledCalculatedLengthKm", - "units": "km", - "behaviour": [ - { - "condition": "lengthInvoicedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The length controlled must be mapped", - "validate": "required,min[0.001]" - } - } - ] - }, - { - "dataType": "document", - "name": "extraMappingDetails", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", - "behaviour": [ - { - "condition": "not (within(areaInstalledHa, sitesInstalledCalculatedAreaHa, 0.1) and within(lengthInstalledKm, sitesInstalledCalculatedLengthKm, 0.1)) or roundTo(areaInstalledHa, 2) != roundTo(areaInvoicedHa, 2) or roundTo(lengthInstalledKm, 2) != roundTo(lengthInvoicedKm, 2)", - "type": "visible" - } - ], - "validate": "required" - }, + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ { - "defaultValue": { - "expression": "$geom.areaHa(sitesInstalled)", - "type": "computed" - }, - "dataType": "number", - "name": "areaInstalledHa", - "decimalPlaces": 3, - "units": "ha", - "validate": "required,min[0]" - }, + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ { - "defaultValue": { - "expression": "$geom.lengthKm(sitesInstalled)", - "type": "computed" - }, - "dataType": "number", - "name": "lengthInstalledKm", - "decimalPlaces": 3, - "units": "km", - "validate": "required,min[0]" - }, + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ { - "dataType": "number", - "name": "areaInvoicedHa", - "decimalPlaces": 3, - "units": "ha", - "validate": [ - { - "rule": "required" - }, - { - "rule": "min[0]" - }, - { - "param": { - "expression": "areaInstalledHa", - "type": "computed" - }, - "rule": "max" - } - ] - }, + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ { - "dataType": "number", - "name": "lengthInvoicedKm", - "decimalPlaces": 3, - "units": "km", - "validate": [ - { - "rule": "required" - }, - { - "rule": "min[0]" - }, - { - "param": { - "expression": "lengthInstalledKm", - "type": "computed" - }, - "rule": "max" - } - ] + "rule": "required" }, { - "dataType": "text", - "name": "mappingNotAlignedReason", - "behaviour": [ - { - "condition": "not (within(areaInstalledHa, sitesInstalledCalculatedAreaHa, 0.1) and within(lengthInstalledKm, sitesInstalledCalculatedLengthKm, 0.1))", - "type": "visible" - } - ], - "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" - ], - "validate": "required" + "rule": "min[0]" }, { - "dataType": "text", - "name": "mappingNotAlignedComments", - "behaviour": [ - { - "condition": "\"Other\" == mappingNotAlignedReason", - "type": "visible" - } - ], - "validate": "required,maxSize[300]" - }, + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ { - "dataType": "text", - "name": "invoicedNotActualReason", - "behaviour": [ - { - "condition": "roundTo(areaInstalledHa, 2) != roundTo(areaInvoicedHa, 2) or roundTo(lengthInstalledKm, 2) != roundTo(lengthInvoicedKm, 2)", - "type": "visible" - } - ], - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required" - }, + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ { - "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ - { - "condition": "\"Other\" == invoicedNotActualReason", - "type": "visible" - } - ], - "validate": "required,maxSize[300]" + "rule": "required" }, { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } - } - } - }, + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableDer" + }, + { + "columns": [ + { + "dataType": "text", + "name": "initialOrFollowup", + "constraints": [ + "Initial", + "Follow-up" + ], + "validate": "required" + }, + { + "dataType": "feature", + "name": "sitesOfDebrisRemoved", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." + }, + { + "computed": { + "expression": "$geom.areaHa(sitesOfDebrisRemoved)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesOfDebrisRemoved)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ { - "name": "investmentPriorities2", - "dataType": "stringList", - "validate": "required", - "constraints": { - "type": "pre-populated", - "config": { - "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" - } - } + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" } - }, + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReason", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ { - "dataType": "text", - "name": "otherInvestmentPriority", - "behaviour": [ - { - "type": "enable", - "condition": "\"Other\" in investmentPriorities2" - } - ] - }, + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ + { + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } + } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ { - "dataType": "feature", - "name": "protectedSites" - }, + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, + { + "columns": [ { - "defaultValue": { - "expression": "$geom.areaHa(protectedSites)", - "type": "computed" - }, - "dataType": "number", - "name": "areaProtectedHa", - "decimalPlaces": 3, - "units": "ha" + "dataType": "text", + "name": "teqDebrisRemoval", + "description": "", + "validate": "required,maxSize[300]" }, { "dataType": "text", - "name": "accessControlType", + "name": "debrisType", "description": "", "constraints": [ - "Boardwalks", - "Bollards & barriers", - "Constructed parking bays", - "Fencing, styles, gates & grids", - "Formed traffic ways", - "Signage", + "Building & Industrial waste", + "Domestic waste", + "Green waste", "Other" ], "validate": "required" }, { "dataType": "text", - "name": "otherAccessControlType", - "description": "Please specify the type of access control if Other (specify in notes) was selected in the Type of Access Control Installed column.", + "name": "otherDebrisType", + "description": "if Other", "behaviour": [ { - "condition": "accessControlType == \"Other\"", + "condition": "debrisType == \"Other\"", "type": "enable" } ], - "validate": "required" + "validate": "required,maxSize[100]" }, { - "dataType": "text", - "name": "controlObjective", - "description": "What is your access control method? and/or What do you intend to achieve by using your structure/s?", - "validate": "required,maxSize[300]" + "validated": "required,min[0]", + "dataType": "number", + "name": "weightOfDebrisTonnes", + "units": "tonnes" + }, + { + "validated": "required,min[0]", + "dataType": "number", + "name": "volumeRemovedM3", + "units": "m3" } ], "dataType": "list", - "name": "accessControlDetails" + "name": "debrisRemovalDetails" } ], "dataType": "list", - "name": "controllingAccessSurveys", - "minSize": 1 + "name": "debrisRemovalAreasControlled" }, { - "name": "surveyCountHeader", - "type": "number", - "decimalPlaces": 0, + "dataType": "number", + "name": "totalAreaDebrisRemovedInitial", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(debrisRemovalAreasControlled, \"initialOrFollowup == 'Initial' ? areaTreatedHa : 0\")" + } + }, + { + "dataType": "number", + "name": "totalAreaDebrisRemovedInitialInvoiced", + "decimalPlaces": 3, + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaDebrisRemovedInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalLengthDebrisRemovedInitial", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(debrisRemovalAreasControlled, \"initialOrFollowup == 'Initial' ? lengthTreatedKm : 0\")" + } + }, + { + "dataType": "number", + "name": "totalLengthDebrisRemovedInvoicedInitial", + "decimalPlaces": 3, + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalLengthDebrisRemovedInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalAreaDebrisRemovedFollowup", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(debrisRemovalAreasControlled, \"initialOrFollowup == 'Follow-up' ? areaTreatedHa : 0\")" + } + }, + { + "dataType": "number", + "name": "totalAreaDebrisRemovedInvoicedFollowup", + "decimalPlaces": 3, + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaDebrisRemovedFollowup", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalLengthDebrisRemovedFollowup", + "validate": "min[0]", + "decimalPlaces": 3, "computed": { - "expression": "count(controllingAccessSurveys, \"numberInstalled\")" + "expression": "sum(debrisRemovalAreasControlled, \"initialOrFollowup == 'Follow-up' ? lengthTreatedKm : 0\")" } }, + { + "dataType": "number", + "name": "totalLengthDebrisRemovedInvoicedFollowup", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "decimalPlaces": 3, + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalLengthDebrisRemovedFollowup", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "text", + "name": "totalInvoicedDebrisRemovedMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required,min[0]", + "behaviour": [ + { + "condition": "+totalAreaDebrisRemovedInitialInvoiced < +totalAreaDebrisRemovedInitial or +totalLengthDebrisRemovedInvoicedInitial < +totalLengthDebrisRemovedInitial or +totalAreaDebrisRemovedInvoicedFollowup < +totalAreaDebrisRemovedFollowup or +totalLengthDebrisRemovedInvoicedFollowup < +totalLengthDebrisRemovedFollowup", + "type": "enable" + } + ] + }, { "dataType": "text", "name": "comments", @@ -2008,12 +5605,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -2022,252 +5619,367 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Controlling access", - "title": "Controlling access", + "modelName": "NHT - Debris removal", + "title": "Debris Removal", "viewModel": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { - "width": "20%", + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableDer", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total area (ha) of debris removal (initial) for this reporting period", + "source": "totalAreaDebrisRemovedInitial", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total area (ha) of debris removal (initial) invoiced for this reporting period", + "source": "totalAreaDebrisRemovedInitialInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { "type": "col", - "title": "Total Number of people delivering this service", + "css": "span4 col-border-right", "items": [ { - "source": "participationIndividualNumber", - "type": "number" + "type": "row", + "items": [ + { + "preLabel": "(iii) Total area (ha) of debris removal (follow up) for this reporting period", + "source": "totalAreaDebrisRemovedFollowup", + "type": "number" + } + ] }, { - "source": "participationGroupNumber", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "(iv) Total area (ha) of debris removal (follow up) invoiced for this reporting period", + "source": "totalAreaDebrisRemovedInvoicedFollowup", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] } ] }, { "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "css": "span4 col-border-right", "items": [ { - "source": "firstNationIndividualNumber", - "type": "number" + "type": "row", + "items": [ + { + "preLabel": "(v) Total length (km) of debris removal (initial) for this reporting period", + "source": "totalLengthDebrisRemovedInitial", + "type": "number" + } + ] }, { - "source": "firstNationGroupNumber", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "(vi) Total length (km) of debris removal (initial) invoiced for this reporting period", + "source": "totalLengthDebrisRemovedInvoicedInitial", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] } ] }, { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(vii) Total length (km) of debris removal (follow up) for this reporting period", + "source": "totalLengthDebrisRemovedFollowup", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(viii) Total length (km) of debris removal (follow up) invoiced for this reporting period", + "source": "totalLengthDebrisRemovedInvoicedFollowup", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" + ] }, { - "type": "section", + "type": "row", "items": [ { - "preLabel": "Number of Controlling Access surveys conducted:", - "noEdit": true, - "type": "number", - "source": "surveyCountHeader" - }, + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedDebrisRemovedMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add a new debris removal activity", + "userAddedRows": true, + "source": "debrisRemovalAreasControlled", + "type": "repeat", + "items": [ { - "addRowText": "New survey site", - "userAddedRows": true, - "source": "controllingAccessSurveys", - "type": "repeat", + "type": "row", "items": [ { - "columns": [ - { - "width": "5%", - "source": "numberInstalled", - "type": "number", - "title": "Number of structures installed" - }, + "css": "span3", + "type": "col", + "items": [ { - "width": "10%", - "type": "col", - "title": "Site/s where access has been controlled", + "type": "row", "items": [ { - "source": "sitesInstalled", - "type": "feature" - }, - { - "type": "row", - "items": [ - { - "readonly": true, - "source": "sitesInstalledCalculatedAreaHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "readonly": true, - "source": "sitesInstalledCalculatedLengthKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" - } - ] + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" } ] - }, + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "helpText": "May be changed manually if different to the calculated areas", - "width": "10%", - "type": "col", - "title": "Actual length (km) / area (ha) where access has been controlled", + "type": "row", "items": [ { - "source": "areaInstalledHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, - { - "source": "lengthInstalledKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, - { - "type": "row", - "items": [ - { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" - } - ] - }, - { - "type": "row", - "items": [ - { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 - } - ] + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" } ] - }, + } + ] + }, + { + "css": "span3", + "type": "col", + "items": [ { - "helpText": "Enter the amount you will invoice for during this reporting period.", - "width": "10%", - "type": "col", - "title": "Invoiced area (ha)/length (km) where access has been controlled", + "type": "row", "items": [ { - "source": "areaInvoicedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, - { - "source": "lengthInvoicedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, - { - "type": "row", - "items": [ - { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedNotActualReason", - "type": "selectOne" - } - ] - }, + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + } + ] + }, + { + "type": "row", + "css": "border-bottom", + "items": [ + { + "preLabel": "Initial or follow-up activity?", + "css": "span3", + "source": "initialOrFollowup", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "css": "border-bottom", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ { - "type": "row", - "items": [ - { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedNotActualComments", - "type": "textarea", - "rows": 5 - } - ] + "preLabel": "Site/s where debris removal was implemented", + "source": "sitesOfDebrisRemoved", + "type": "feature" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" } ] }, { - "source": "relatedOutcomes", - "type": "selectOne", - "width": "10%", - "title": "Which outcome statement/s relates to this survey?" + "type": "row", + "items": [ + { + "source": "calculatedLengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] }, { - "width": "15%", - "type": "col", - "title": "Which investment priority does this activity relate to?", + "type": "row", "items": [ { - "source": "investmentPriorities2", - "type": "select2Many" - }, + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ { - "source": "otherInvestmentPriority", - "type": "text" + "preLabel": "Actual area (ha) / length (km) of debris removal", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } } ] }, { - "width": "10%", - "type": "col", - "title": "Site/s protected by access control structures", + "type": "row", "items": [ { - "source": "protectedSites", - "type": "feature" - }, - { - "source": "areaProtectedHa", + "source": "lengthTreatedKm", "type": "number", "displayOptions": { "displayUnits": true @@ -2276,476 +5988,210 @@ ] }, { - "width": "10%", - "type": "col", - "title": "Type of access control installed", + "type": "row", "items": [ { - "source": "accessControlType", - "type": "select2" - }, - { - "source": "otherAccessControlType", - "type": "text" + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" } ] }, { - "width": "20%", - "source": "controlObjective", - "title": "Control objective", - "type": "textarea", - "rows": 5 - } - ], - "userAddedRows": true, - "source": "accessControlDetails", - "type": "table" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" - } - ] - }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." - }, - { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." - } - ] - }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] - }, - { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ - { - "title": "Attached documents", - "source": "attachments", - "type": "document" - } - ] - } - ] - } - ] - }, - "modelName": null, - "templateName": "nhtControllingAccess", - "optional": true, - "optionalQuestionText": null, - "title": "Controlling access", - "collapsibleHeading": null, - "name": "NHT - Controlling access", - "description": null - }, - { - "collapsedByDefault": false, - "template": { - "dataModel": [ - { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "columns": [ - { - "dataType": "text", - "name": "initialOrFollowup", - "constraints": [ - "Initial", - "Follow-up" - ], - "validate": "required" - }, - { - "dataType": "feature", - "name": "site", - "validate": "required" - }, - { - "dataType": "number", - "name": "siteCalculatedAreaHa", - "computed": { - "expression": "$geom.areaHa(site)" - }, - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "areaInvoicedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The controlled area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "dataType": "number", - "name": "siteCalculatedLengthKm", - "computed": { - "expression": "$geom.lengthKm(site)" - }, - "units": "km", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "lengthInvoicedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The controlled length must be mapped", - "validate": "required,min[0.0001]" - } + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] + } + ] } ] }, { - "dataType": "number", - "name": "areaControlledHa", - "validate": "required,min[0]", - "units": "ha", - "decimalPlaces": 3, - "defaultValue": { - "type": "computed", - "expression": "$geom.areaHa(site)" - } - }, - { - "dataType": "number", - "name": "lengthControlledKm", - "validate": "required,min[0]", - "units": "km", - "decimalPlaces": 3, - "defaultValue": { - "type": "computed", - "expression": "$geom.lengthKm(site)" - } - }, - { - "dataType": "number", - "name": "areaInvoicedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": [ - { - "rule": "required" - }, + "columns": [ { - "rule": "min[0]" + "width": "20%", + "title": "Type of debris removed", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "debrisType", + "type": "selectOne" + } + ] + }, + { + "source": "otherDebrisType", + "type": "text" + } + ] }, { - "rule": "max", - "param": { - "type": "computed", - "expression": "areaControlledHa" - } - } - ] - }, - { - "dataType": "number", - "name": "lengthInvoicedKm", - "units": "km", - "decimalPlaces": 3, - "validate": [ - { - "rule": "required" + "width": "20%", + "source": "weightOfDebrisTonnes", + "title": "Weight (tonnes) of debris removed", + "type": "number" }, { - "rule": "min[0]" + "width": "20%", + "source": "volumeRemovedM3", + "title": "Volume (m3) of debris removed", + "type": "number" }, { - "rule": "max", - "param": { - "type": "computed", - "expression": "lengthControlledKm" - } + "width": "40%", + "source": "teqDebrisRemoval", + "title": "Technique used to remove debris", + "type": "textarea", + "rows": 5 } - ] - }, - { - "dataType": "text", - "name": "mappingNotAlignedReason", - "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" ], - "validate": "required", - "behaviour": [ - { - "condition": "not (within(areaControlledHa, siteCalculatedAreaHa, 0.1))", - "type": "if" - } - ] - }, + "userAddedRows": true, + "disableTableUpload": true, + "source": "debrisRemovalDetails", + "type": "table" + } + ] + }, + + { + "type": "row", + "items": [ { - "dataType": "text", - "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", - "behaviour": [ - { - "type": "if", - "condition": "not within(areaControlledHa, siteCalculatedAreaHa, 0.1) and \"Other\" == mappingNotAlignedReason" - } - ] - }, + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" + } + ] + }, + { + "type": "row", + "items": [ { - "dataType": "text", - "name": "mappingLengthNotAlignedReason", - "constraints": [ - "Mapped area simplifies more complex length/s where work was undertaken during this period", - "Other" - ], - "validate": "required", - "behaviour": [ - { - "condition": "not (within(lengthControlledKm, siteCalculatedLengthKm, 0.1))", - "type": "if" - } - ] - }, + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] + }, + { + "type": "row", + "items": [ { - "dataType": "text", - "name": "mappingLengthNotAlignedComments", - "validate": "required,maxSize[300]", - "behaviour": [ - { - "type": "if", - "condition": "not (within(lengthControlledKm, siteCalculatedLengthKm, 0.1)) and \"Other\" == mappingLengthNotAlignedReason" - } - ] + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { - "dataType": "text", - "name": "invoicedNotActualReason", - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required", - "behaviour": [ - { - "condition": "roundTo(areaControlledHa, 2) != roundTo(areaInvoicedHa, 2)", - "type": "if" - } - ] - }, + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, + { + "type": "row", + "items": [ { - "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ - { - "type": "if", - "condition": "roundTo(areaControlledHa, 2) != roundTo(areaInvoicedHa, 2) and \"Other\" == invoicedNotActualReason" - } - ], - "validate": "required,maxSize[300]" - }, + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, + { + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ { - "dataType": "text", - "name": "invoicedLengthNotActualReason", - "constraints": [ - "Work was undertaken over a greater length than will be invoiced for", - "Other" - ], - "validate": "required", - "behaviour": [ - { - "condition": "roundTo(lengthControlledKm, 2) != roundTo(lengthInvoicedKm, 2)", - "type": "if" - } - ] - }, + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] + } + ] + }, + "modelName": null, + "templateName": "nhtDebrisRemoval", + "optional": true, + "optionalQuestionText": null, + "title": "Debris removal", + "collapsibleHeading": null, + "name": "NHT - Debris removal", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ + { + "allowRowDelete": "false", + "columns": [ { "dataType": "text", - "name": "invoicedLengthNotActualComments", - "behaviour": [ - { - "type": "if", - "condition": "roundTo(lengthControlledKm, 2) != roundTo(lengthInvoicedKm, 2) and \"Other\" == invoicedLengthNotActualReason" - } + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" ], - "validate": "required,maxSize[300]" - }, - { - "dataType": "document", - "name": "extraMappingDetails", - "validate": "required", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", - "behaviour": [ - { - "condition": "not (within(areaControlledHa, siteCalculatedAreaHa, 0.1) and within(lengthControlledKm, siteCalculatedLengthKm, 0.1)) or roundTo(areaControlledHa, 2) != roundTo(areaInvoicedHa, 2)", - "type": "if" - } - ] - }, - { - "dataType": "number", - "name": "areaControlledHa", - "validate": "required,min[0]", - "units": "ha", - "decimalPlaces": 3, - "defaultValue": { - "type": "computed", - "expression": "$geom.areaHa(site)" - } - }, - { - "dataType": "number", - "name": "lengthControlledKm", - "validate": "required,min[0]", - "units": "km", - "decimalPlaces": 3, - "defaultValue": { - "type": "computed", - "expression": "$geom.lengthKm(site)" - } + "validate": "required" }, { "dataType": "number", - "name": "areaInvoicedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": [ - { - "rule": "required" - }, + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ { - "rule": "min[0]" - }, + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ { - "rule": "max", - "param": { - "type": "computed", - "expression": "areaControlledHa" - } + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" ] }, { "dataType": "number", - "name": "lengthInvoicedKm", - "units": "km", - "decimalPlaces": 3, + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], "validate": [ { "rule": "required" @@ -2754,108 +6200,115 @@ "rule": "min[0]" }, { - "rule": "max", "param": { - "type": "computed", - "expression": "lengthControlledKm" - } + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" } ] }, { "dataType": "text", - "name": "mappingNotAlignedReason", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" ], - "validate": "required", - "behaviour": [ + "validate": [ { - "condition": "not (within(areaControlledHa, siteCalculatedAreaHa, 0.1))", - "type": "if" + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" } ] }, { "dataType": "text", - "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", - "behaviour": [ - { - "type": "if", - "condition": "not within(areaControlledHa, siteCalculatedAreaHa, 0.1) and \"Other\" == mappingNotAlignedReason" - } - ] - }, + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableErm" + }, + { + "columns": [ { "dataType": "text", - "name": "mappingLengthNotAlignedReason", + "name": "initialOrFollowup", "constraints": [ - "Mapped area simplifies more complex length/s where work was undertaken during this period", - "Other" + "Initial", + "Follow-up" ], - "validate": "required", - "behaviour": [ - { - "condition": "not (within(lengthControlledKm, siteCalculatedLengthKm, 0.1))", - "type": "if" - } - ] + "validate": "required" }, { - "dataType": "text", - "name": "mappingLengthNotAlignedComments", - "validate": "required,maxSize[300]", - "behaviour": [ - { - "type": "if", - "condition": "not (within(lengthControlledKm, siteCalculatedLengthKm, 0.1)) and \"Other\" == mappingLengthNotAlignedReason" - } - ] + "dataType": "number", + "name": "numberInstalled", + "validate": "required,min[0]" + }, + { + "dataType": "feature", + "name": "sitesOfErosionControl", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." }, { + "computed": { + "expression": "$geom.areaHa(sitesOfErosionControl)" + }, "dataType": "number", - "name": "areaInvoicedHa", + "name": "calculatedAreaTreatedHa", "units": "ha", - "decimalPlaces": 3, - "validate": [ - { - "rule": "required" - }, - { - "rule": "min[0]" - }, - { - "rule": "max", - "param": { - "type": "computed", - "expression": "areaControlledHa" - } - } - ] + "decimalPlaces": 3 }, { + "computed": { + "expression": "$geom.lengthKm(sitesOfErosionControl)" + }, "dataType": "number", - "name": "lengthInvoicedKm", + "name": "calculatedLengthTreatedKm", "units": "km", "decimalPlaces": 3, - "validate": [ - { - "rule": "required" - }, - { - "rule": "min[0]" - }, + "behaviour": [ { - "rule": "max", - "param": { - "type": "computed", - "expression": "lengthControlledKm" + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" } } ] }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, { "dataType": "text", "name": "mappingNotAlignedReason", @@ -2866,7 +6319,7 @@ "validate": "required", "behaviour": [ { - "condition": "not (within(areaControlledHa, siteCalculatedAreaHa, 0.1))", + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", "type": "if" } ] @@ -2874,141 +6327,109 @@ { "dataType": "text", "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", + "validate": "required,maxSize[100]", "behaviour": [ { - "type": "if", - "condition": "not within(areaControlledHa, siteCalculatedAreaHa, 0.1) and \"Other\" == mappingNotAlignedReason" + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" } ] }, { - "dataType": "text", - "name": "mappingLengthNotAlignedReason", - "constraints": [ - "Mapped area simplifies more complex length/s where work was undertaken during this period", - "Other" - ], + "dataType": "document", + "name": "extraMappingDetails", "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", "behaviour": [ { - "condition": "not (within(lengthControlledKm, siteCalculatedLengthKm, 0.1))", + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", "type": "if" } ] }, { - "dataType": "text", - "name": "mappingLengthNotAlignedComments", - "validate": "required,maxSize[300]", - "behaviour": [ - { - "type": "if", - "condition": "not (within(lengthControlledKm, siteCalculatedLengthKm, 0.1)) and \"Other\" == mappingLengthNotAlignedReason" - } - ] + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 }, { + "name": "relatedOutcomes", "dataType": "text", - "name": "invoicedNotActualReason", - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", "validate": "required", - "behaviour": [ - { - "condition": "roundTo(areaControlledHa, 2) != roundTo(areaInvoicedHa, 2)", - "type": "if" + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } } - ] + } }, { + "name": "investmentPriorities2", "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ - { - "type": "if", - "condition": "roundTo(areaControlledHa, 2) != roundTo(areaInvoicedHa, 2) and \"Other\" == invoicedNotActualReason" + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } } - ], - "validate": "required,maxSize[300]" + } }, { "dataType": "text", - "name": "invoicedLengthNotActualReason", - "constraints": [ - "Work was undertaken over a greater length than will be invoiced for", - "Other" - ], - "validate": "required", + "name": "otherInvestmentPriority", "behaviour": [ { - "condition": "roundTo(lengthControlledKm, 2) != roundTo(lengthInvoicedKm, 2)", - "type": "if" + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" } ] }, { "dataType": "text", - "name": "invoicedLengthNotActualComments", - "behaviour": [ - { - "type": "if", - "condition": "roundTo(lengthControlledKm, 2) != roundTo(lengthInvoicedKm, 2) and \"Other\" == invoicedLengthNotActualReason" - } + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" ], - "validate": "required,maxSize[300]" - }, - { - "dataType": "number", - "name": "noStructuresInstalled", - "validate": "required" - }, - { - "dataType": "number", - "name": "invoiceLocationsStructures", "validate": "required" }, { "columns": [ { - "dataType": "species", - "name": "pestSpecies", - "dwcAttribute": "scientificName", - "description": "Pest species targeted for treatment (start typing a scientific or common name for a species)", - "validate": "required" - }, - { - "dataType": "text", - "name": "pestManagementMethod", - "dwcAttribute": "treatmentMethod", - "description": "The method used in this activity to manage pests", - "constraints": [ - "Aerial shoot", - "Bait & trap", - "Bait only", - "Feral free enclosure", - "Exclusion fencing", - "Fumigation", - "Ground shoot", - "Trap & cull", - "Trap & remove", - "Other" - ], + "dataType": "date", + "name": "dateFrom", "validate": "required" }, { - "dataType": "text", - "name": "otherManagementMethod", - "description": "Please specify the management method used if Other was selected in the Management Method column.", - "behaviour": [ + "dataType": "date", + "name": "dateTo", + "validate": [ { - "condition": "pestManagementMethod == \"Other\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "future", + "param": { + "expression": "formatDateForValidation(dateFrom)", + "type": "computed" + } } - ], - "validate": "required,maxSize[100]" + ] }, { "dataType": "text", @@ -3017,90 +6438,241 @@ }, { "dataType": "text", - "name": "individualsOrColonies", + "name": "erosionManagementMethod", "constraints": [ - "Colonies", - "Individuals" + "Alternative watering point", + "Erosion control structures", + "Farming practice change", + "Fencing", + "Revegetation", + "Terracing", + "Vegetated waterway (bioswale)", + "Windbreaks", + "Other" ], "validate": "required" }, - { - "dataType": "number", - "name": "individualsOrColoniesRemoved", - "validate": "required" - }, - { - "name": "investmentPriorities2", - "dataType": "stringList", - "validate": "required", - "constraints": { - "type": "pre-populated", - "config": { - "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" - } - } - } - }, { "dataType": "text", - "name": "otherInvestmentPriority", + "name": "otherErosionManagementMethod", "behaviour": [ { - "type": "enable", - "condition": "\"Other\" in investmentPriorities2" + "condition": "erosionManagementMethod == \"Other\"", + "type": "enable" } - ] + ], + "validate": "required,max[300]" + }, + { + "dataType": "number", + "name": "numberDaysCollecting", + "validate": "required,min[0]" }, { - "name": "relatedOutcomes", "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } - } - } + "name": "threatenedEcologicalCommunity", + "validate": "maxSize[300]" } ], "dataType": "list", - "name": "pestAnimalsControlled" + "name": "erosionManagementDetails", + "minSize": 0 } ], "dataType": "list", - "name": "areasControlled" + "name": "erosionManagementAreasControlled" }, { - "name": "pestSurveyCountHeader", - "type": "number", - "decimalPlaces": 0, + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } + } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "totalLengthStreamCoastlineInitial", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(erosionManagementAreasControlled, \"initialOrFollowup == 'Initial' ? lengthTreatedKm : 0\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalLengthStreamCoastlineInitialInvoice", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalLengthStreamCoastlineInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalLengthStreamCoastlineFollowup", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(erosionManagementAreasControlled, \"initialOrFollowup == 'Follow-up' ? lengthTreatedKm : 0\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalLengthStreamCoastlineInvoicedFollowup", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalLengthStreamCoastlineFollowup", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalAreaErosionControlInitial", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(erosionManagementAreasControlled, \"initialOrFollowup == 'Initial' ? areaTreatedHa : 0\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalAreaErosionControlInvoicedInitial", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaErosionControlInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalAreaErosionControlFollowup", + "validate": "min[0]", + "decimalPlaces": 3, "computed": { - "expression": "count(areasControlled, \"relatedOutcomes\")" + "expression": "sum(erosionManagementAreasControlled, \"initialOrFollowup == 'Follow-up' ? areaTreatedHa : 0\")" } }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalAreaErosionControlInvoicedFollowup", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaErosionControlFollowup", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "text", + "name": "totalInvoicedErosionMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required,min[0]", + "behaviour": [ + { + "condition": "+totalLengthStreamCoastlineInitialInvoice < +totalLengthStreamCoastlineInitial or +totalLengthStreamCoastlineInvoicedFollowup < +totalLengthStreamCoastlineFollowup or +totalAreaErosionControlInvoicedInitial < +totalAreaErosionControlInitial or +totalAreaErosionControlInvoicedFollowup < +totalAreaErosionControlFollowup", + "type": "enable" + } + ] + }, { "dataType": "text", "name": "comments", @@ -3113,12 +6685,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -3127,139 +6699,292 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Pest animal management", - "title": "Controlling pest animals", + "modelName": "NHT - Erosion Management", + "title": "Erosion Management", "viewModel": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { - "width": "20%", + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableErm", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(vii) Total area (ha) of erosion control (initial) for this reporting period", + "source": "totalAreaErosionControlInitial", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(viii) Total area (ha) of erosion control (initial) invoiced for this reporting period", + "source": "totalAreaErosionControlInvoicedInitial", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { "type": "col", - "title": "Total Number of people delivering this service", + "css": "span4 col-border-right", "items": [ { - "source": "participationIndividualNumber", - "type": "number" + "type": "row", + "items": [ + { + "preLabel": "(ix) Total area (ha) of erosion control (follow up) for this reporting period", + "source": "totalAreaErosionControlFollowup", + "type": "number" + } + ] }, { - "source": "participationGroupNumber", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "(x) Total area (ha) of erosion control invoiced (follow up) for this reporting period", + "source": "totalAreaErosionControlInvoicedFollowup", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] } ] }, { "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "css": "span4 col-border-right", "items": [ { - "source": "firstNationIndividualNumber", - "type": "number" + "type": "row", + "items": [ + { + "preLabel": "(iii) Total length (km) of stream/coastline treated for erosion (initial) for this reporting period", + "source": "totalLengthStreamCoastlineInitial", + "type": "number" + } + ] }, { - "source": "firstNationGroupNumber", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "(iv) Total length (km) of stream/coastline treated for erosion (initial) invoiced for this reporting period", + "source": "totalLengthStreamCoastlineInitialInvoice", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] } ] }, { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(v) Total length (km) of stream/coastline treated for erosion (follow up) for this reporting period", + "source": "totalLengthStreamCoastlineFollowup", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(vi) Total length (km) of stream/coastline treated for erosion (follow up) invoiced for this reporting period", + "source": "totalLengthStreamCoastlineInvoicedFollowup", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" + ] }, { - "preLabel": "Number of Pest Animals surveys conducted:", - "noEdit": true, - "type": "number", - "source": "pestSurveyCountHeader" + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedErosionMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] }, { - "addRowText": "Add a new controlled area", + "addRowText": "Add a new erosion control area", "userAddedRows": true, - "source": "areasControlled", + "source": "erosionManagementAreasControlled", "type": "repeat", "items": [ { "type": "row", - "css": "border-bottom", "items": [ { - "preLabel": "Initial or follow-up control?", "css": "span3", - "source": "initialOrFollowup", - "type": "selectOne" - } - ] - }, - { - "type": "row", - "css": "border-bottom", - "items": [ - { "type": "col", - "css": "span2 col-border-right", "items": [ { "type": "row", "items": [ { - "source": "site", - "type": "feature", - "preLabel": "Site/s where pest control was undertaken" + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" } ] - }, + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { "type": "row", "items": [ { - "source": "siteCalculatedAreaHa", - "type": "number", - "readonly": true, - "displayOptions": { - "displayUnits": true - } + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" } ] - }, + } + ] + }, + { + "css": "span3", + "type": "col", + "items": [ { "type": "row", "items": [ { - "source": "siteCalculatedLengthKm", - "type": "number", - "readonly": true, - "displayOptions": { - "displayUnits": true - } + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" } ] - }, + } + ] + } + ] + }, + { + "type": "row", + "css": "border-bottom", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { "type": "row", "items": [ { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" + "source": "initialOrFollowup", + "preLabel": "Initial or follow-up control?", + "type": "selectOne" } ] } @@ -3273,33 +6998,31 @@ "type": "row", "items": [ { - "preLabel": "Actual area (ha) treated for pest animals", - "source": "areaControlledHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Reason for actual area being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" + "source": "numberInstalled", + "preLabel": "Number of erosion control structures installed", + "type": "number" } ] - }, + } + ] + } + ] + }, + { + "type": "row", + "css": "border-bottom", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { "type": "row", "items": [ { - "placeholder": "Please enter the reason/s the mapping area didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 + "preLabel": "Site/s where erosion has been controlled", + "source": "sitesOfErosionControl", + "type": "feature" } ] }, @@ -3307,13 +7030,12 @@ "type": "row", "items": [ { - "preLabel": "Actual length (km) treated for pest animals", - "source": "lengthControlledKm", + "source": "calculatedAreaTreatedHa", "type": "number", - "validate": "required", "displayOptions": { "displayUnits": true - } + }, + "readonly": "readonly" } ] }, @@ -3321,9 +7043,12 @@ "type": "row", "items": [ { - "preLabel": "Reason for actual length being different to mapped amount", - "source": "mappingLengthNotAlignedReason", - "type": "selectOne" + "source": "calculatedLengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" } ] }, @@ -3331,10 +7056,9 @@ "type": "row", "items": [ { - "placeholder": "Please enter the reason/s the mapping length didn't align with the invoiced amount", - "source": "mappingLengthNotAlignedComments", - "type": "textarea", - "rows": 5 + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" } ] } @@ -3348,9 +7072,8 @@ "type": "row", "items": [ { - "preLabel": "Invoiced area (ha) treated for pest animals", - "helpText": "", - "source": "areaInvoicedHa", + "preLabel": "Actual area (ha) / length (km) of erosion control", + "source": "areaTreatedHa", "type": "number", "displayOptions": { "displayUnits": true @@ -3362,30 +7085,7 @@ "type": "row", "items": [ { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedNotActualReason", - "type": "selectOne" - } - ] - }, - { - "type": "row", - "items": [ - { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedNotActualComments", - "type": "textarea", - "rows": 5 - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Invoiced length (km) treated for pest animals", - "helpText": "", - "source": "lengthInvoicedKm", + "source": "lengthTreatedKm", "type": "number", "displayOptions": { "displayUnits": true @@ -3397,8 +7097,8 @@ "type": "row", "items": [ { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedLengthNotActualReason", + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", "type": "selectOne" } ] @@ -3408,45 +7108,91 @@ "items": [ { "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedLengthNotActualComments", + "source": "mappingNotAlignedComments", "type": "textarea", "rows": 5 } ] } ] + } + ] + }, + + { + "columns": [ + { + "title": "Date from", + "source": "dateFrom", + "type": "date", + "width": "15%" + }, + { + "title": "Date to", + "source": "dateTo", + "type": "date", + "width": "15%" + }, + { + "width": "20%", + "source": "treatmentObjective", + "title": "Treatment objective", + "type": "textarea" }, { + "width": "20%", "type": "col", - "css": "span2 col-border-right", + "title": "Type of treatment being used", "items": [ { "type": "row", "items": [ { - "source": "noStructuresInstalled", - "preLabel": "Number of structures installed/maintained", - "type": "number" + "source": "erosionManagementMethod", + "type": "selectOne" } ] - } - ] - }, - { - "type": "col", - "css": "span2 col-border-right", - "items": [ + }, { "type": "row", "items": [ { - "source": "invoiceLocationsStructures", - "preLabel": "Invoiced number of locations where structures were installed/maintained", - "type": "number" + "source": "otherErosionManagementMethod", + "placeholder": "Type of treatment method", + "type": "textarea" } ] } ] + }, + { + "width": "10%", + "source": "numberDaysCollecting", + "title": "Number of days collecting seeds/propagating plants ", + "type": "number" + }, + { + "width": "20%", + "source": "threatenedEcologicalCommunity", + "title": "Threatened Ecological Community (TEC) benefitting from this activity", + "type": "textarea" + } + ], + "userAddedRows": true, + "disableTableUpload": true, + "source": "erosionManagementDetails", + "type": "table" + } + ] + }, + + { + "type": "row", + "items": [ + { + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" } ] }, @@ -3454,145 +7200,64 @@ "type": "row", "items": [ { - "addRowText": "Add a species", - "columns": [ - { - "width": "15%", - "source": "pestSpecies", - "title": "Target pest species", - "type": "speciesSelect" - }, - { - "width": "10%", - "source": "pestManagementMethod", - "title": "Type of control", - "type": "selectOne" - }, - { - "width": "10%", - "source": "otherManagementMethod", - "title": "Type of control (if other)", - "type": "text" - }, - { - "width": "15%", - "source": "treatmentObjective", - "title": "Treatment objective", - "type": "textarea" - }, - { - "width": "10%", - "source": "individualsOrColonies", - "title": "Individuals or colonies?", - "type": "selectOne" - }, - { - "width": "10%", - "source": "individualsOrColoniesRemoved", - "title": "Number of individuals or colonies removed / destroyed", - "type": "number" - }, - { - "width": "15%", - "type": "col", - "title": "Which investment priority does this activity relate to?", - "items": [ - { - "source": "investmentPriorities2", - "type": "select2Many" - }, - { - "source": "otherInvestmentPriority", - "type": "text" - } - ] - }, - { - "width": "15%", - "source": "relatedOutcomes", - "type": "selectOne", - "title": "Which outcome statement/s relates to this survey?" - } - ], - "userAddedRows": true, - "source": "pestAnimalsControlled", - "type": "table" + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" } ] - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" - } - ] - }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." }, { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" - } - ] - }, - { - "type": "row", - "items": [ + "type": "row", + "items": [ + { + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" + }, + { + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." - } - ] - }, - { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ + "type": "row", + "items": [ + { + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, { - "title": "Attached documents", - "source": "attachments", - "type": "document" + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] } - ] - } + ] }, "modelName": null, - "templateName": "nhtPestAnimalManagement", + "templateName": "nhtErosionManagement", "optional": true, "optionalQuestionText": null, - "title": "Controlling pest animals", + "title": "Erosion management", "collapsibleHeading": null, - "name": "NHT - Pest animal management", + "name": "NHT - Erosion Management", "description": null }, { @@ -3600,372 +7265,459 @@ "template": { "dataModel": [ { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "allowRowDelete": "false", + "columns": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "columns": [ + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, { - "columns": [ - { - "dataType": "text", - "name": "initialOrFollowup", - "constraints": [ - "Initial", - "Follow-up" - ], - "validate": "required" - }, + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ { - "dataType": "feature", - "name": "clearedSites" - }, + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ { - "computed": { - "expression": "$geom.areaHa(clearedSites)" - }, - "dataType": "number", - "name": "calculatedDebrisRemovedHa", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "areaOfRemovedDebrisInvoicedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The cleared area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ { - "computed": { - "expression": "$geom.lengthKm(clearedSites)" - }, - "dataType": "number", - "name": "calculatedDebrisRemovedKm", - "units": "km", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "debrisRemovedKm > 0", - "type": "conditional_validation", - "value": { - "message": "", - "validate": "required,min[0.0001]" - } - } - ] + "rule": "required" }, { - "defaultValue": { - "type": "computed", - "expression": "calculatedDebrisRemovedHa" - }, - "dataType": "number", - "units": "ha", - "decimalPlaces": 3, - "name": "debrisRemovedHa", - "validate": "required,min[0]" + "rule": "min[0]" }, { - "defaultValue": { - "type": "computed", - "expression": "calculatedDebrisRemovedKm" + "param": { + "expression": "participationIndividualNumber", + "type": "computed" }, - "dataType": "number", - "units": "km", - "decimalPlaces": 3, - "name": "debrisRemovedKm", - "validate": "required,min[0]" - }, - { - "dataType": "document", - "name": "extraMappingDetails", - "validate": "required", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", - "behaviour": [ - { - "condition": "not (within(debrisRemovedHa, calculatedDebrisRemovedHa, 0.1)) or roundTo(debrisRemovedHa, 2) != roundTo(areaOfRemovedDebrisInvoicedHa, 2)", - "type": "visible" - } - ] - }, - { - "dataType": "text", - "name": "mappingNotAlignedReason", - "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" - ], - "validate": "required", - "behaviour": [ - { - "condition": "not (within(calculatedDebrisRemovedHa, debrisRemovedHa, 0.1))", - "type": "visible" - } - ] - }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ { - "dataType": "text", - "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", - "behaviour": [ - { - "type": "visible", - "condition": "\"Other\" == mappingNotAlignedReason" - } - ] - }, + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ { - "dataType": "number", - "units": "ha", - "decimalPlaces": 3, - "name": "areaOfRemovedDebrisInvoicedHa", - "validate": [ - { - "rule": "min[0]" - }, - { - "rule": "max", - "param": { - "type": "computed", - "expression": "debrisRemovedHa" - } - } - ] + "rule": "required" }, { - "dataType": "number", - "name": "areaOfRemovedDebrisInvoicedKm", - "decimalPlaces": 3, - "units": "km", - "validate": [ - { - "rule": "required" - }, - { - "rule": "min[0]" - }, - { - "param": { - "expression": "debrisRemovedKm", - "type": "computed" - }, - "rule": "max" - } - ] - }, + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableEmp" + }, + { + "columns": [ + { + "dataType": "text", + "name": "newOrMaintained", + "constraints": [ + "Initial", + "Maintained" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "numberOfPestFreeEnclosures", + "validate": "required" + }, + { + "dataType": "number", + "name": "daysSpentOnMaintenanceOfEnclosures", + "description": "Number of days should be calculated as number of days by number of people (eg. 4.5 days by 3 people is 13.5 days).", + "validate": "required, min[0]" + }, + { + "dataType": "feature", + "name": "sitesOfPestAnimalFreeEnclosure", + "description": "Mapping field to be done and Area (ha) field be auto-calculated from mapping.", + "validate": "required" + }, + { + "computed": { + "expression": "$geom.areaHa(sitesOfPestAnimalFreeEnclosure)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesOfPestAnimalFreeEnclosure)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ { - "dataType": "text", - "name": "invoicedNotActualReason", - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required", - "behaviour": [ - { - "condition": "roundTo(debrisRemovedHa, 2) != roundTo(areaOfRemovedDebrisInvoicedHa, 2) or roundTo(debrisRemovedKm, 2) != roundTo(areaOfRemovedDebrisInvoicedKm, 2)", - "type": "visible" - } - ] - }, + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReason", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ { - "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ - { - "type": "visible", - "condition": "\"Other\" == invoicedNotActualReason" - } - ], - "validate": "required,maxSize[300]" - }, + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1))", + "type": "if" + } + ] + }, + { + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } - } - } - }, + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ { - "name": "investmentPriorities2", - "dataType": "stringList", - "validate": "required", - "constraints": { - "type": "pre-populated", - "config": { - "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" - } - } - } - }, + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1))", + "type": "if" + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { + "columns": [ { - "dataType": "text", - "name": "otherInvestmentPriority", - "behaviour": [ - { - "type": "enable", - "condition": "\"Other\" in investmentPriorities2" - } - ] + "dataType": "species", + "name": "protectedSpecies", + "dwcAttribute": "scientificName", + "description": "The threatened species protected by the enclosure.", + "validate": "required" }, { - "dataType": "text", - "name": "teqDebrisRemoval", + "dataType": "species", + "name": "targetFeralSpecies", + "dwcAttribute": "scientificName", "description": "", "validate": "required" }, { "dataType": "text", - "name": "debrisType", - "description": "", + "name": "individualsOrPopulations", "constraints": [ - "Building & Industrial waste", - "Domestic waste", - "Green waste", - "Other" + "Individuals", + "Populations" ], "validate": "required" }, { - "dataType": "text", - "name": "otherDebrisType", - "description": "if Other", - "behaviour": [ - { - "condition": "debrisType == \"Other\"", - "type": "visible" - } - ], - "validate": "required,maxSize[300]" - }, - { - "validated": "required,min[0]", - "dataType": "number", - "name": "weightOfDebrisTonnes", - "units": "tonnes" - }, - { - "validated": "required,min[0]", "dataType": "number", - "name": "volumeRemovedM3", - "units": "m3" + "name": "numberOfPopulationsOrIndividualsProtected", + "validate": "required,min[0]" } ], "dataType": "list", - "name": "debrisRemovalDetails" + "name": "speciesProtected" + }, + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } + } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" } ], "dataType": "list", - "name": "debrisRemovalSurveys", - "minSize": 1 + "name": "enclosureDetails" }, { - "name": "surveyCountHeader", - "type": "number", + "dataType": "number", + "name": "totalNoPestFreeSurveyEstablished", + "validate": "min[0]", + "decimalPlaces": 0, + "defaultValue": 0, + "computed": { + "expression": "sum(enclosureDetails, \"newOrMaintained == 'Initial' ? numberOfPestFreeEnclosures : 0\")" + } + }, + { + "dataType": "number", + "name": "totalNoPestFreeSurveyEstablishedInvoiced", + "decimalPlaces": 0, + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalNoPestFreeSurveyEstablished", + "type": "computed" + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalNoPestFreeSurveyMaintained", + "validate": "required,min[0]", + "decimalPlaces": 0, + "defaultValue": 0, + "computed": { + "expression": "sum(enclosureDetails, \"newOrMaintained == 'Maintained' ? numberOfPestFreeEnclosures : 0\")" + } + }, + { + "dataType": "number", + "name": "totalNoPestFreeSurveyMaintainedInvoiced", + "decimalPlaces": 0, + "defaultValue": "", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalNoPestFreeSurveyMaintained", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "number", + "name": "totalNoDaysMaintainingPestFree", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(enclosureDetails, \"daysSpentOnMaintenanceOfEnclosures\")" + } + }, + { + "dataType": "number", + "name": "totalNoDaysMaintainingPestFreeInvoiced", "decimalPlaces": 0, + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalNoDaysMaintainingPestFree", + "type": "computed" + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalAreaPestFreeSurveyInitial", + "validate": "min[0]", + "decimalPlaces": 3, + "defaultValue": 0, "computed": { - "expression": "count(debrisRemovalSurveys, \"numberInstalled\")" + "expression": "sum(enclosureDetails, \"areaTreatedHa\")" } }, + { + "dataType": "number", + "name": "totalAreaPestFreeSurveyInitialInvoiced", + "decimalPlaces": 3, + "defaultValue": "", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaPestFreeSurveyInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "totalInvoicedPestFreeMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalNoPestFreeSurveyEstablishedInvoiced < +totalNoPestFreeSurveyEstablished or +totalNoPestFreeSurveyMaintainedInvoiced < +totalNoPestFreeSurveyMaintained or +totalNoDaysMaintainingPestFreeInvoiced < +totalNoDaysMaintainingPestFree or +totalAreaPestFreeSurveyInitialInvoiced < +totalAreaPestFreeSurveyInitial", + "type": "enable" + } + ] + }, { "dataType": "text", "name": "comments", @@ -3978,12 +7730,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -3992,26 +7744,37 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Debris removal", - "title": "Debris removal", + "modelName": "NHT - Maintaining feral free enclosures", + "title": "Establishing and Maintaining Pest Animal-free Enclosures", "viewModel": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -4026,7 +7789,8 @@ { "type": "col", "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "firstNationIndividualNumber", @@ -4039,104 +7803,265 @@ ] }, { + "width": "20%", "source": "participationDetails", "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", "type": "textarea" } ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", + "source": "participationInformationTableEmp", "type": "table" }, { - "type": "section", + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", "items": [ { - "preLabel": "Number of Debris Removal surveys conducted:", - "noEdit": true, - "type": "number", - "source": "surveyCountHeader" + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total number of pest animal-free enclosures (initial) for this reporting period", + "source": "totalNoPestFreeSurveyEstablished", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total number of pest animal-free enclosures (initial) invoiced for this reporting period", + "source": "totalNoPestFreeSurveyEstablishedInvoiced", + "type": "number", + "readonly": false + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total number of pest animal-free enclosures (maintained) for this reporting period", + "source": "totalNoPestFreeSurveyMaintained", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total number of pest animal-free enclosures (maintained) invoiced for this reporting period", + "source": "totalNoPestFreeSurveyMaintainedInvoiced", + "type": "number", + "readonly": false + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(v) Total number of days maintaining pest animal-free enclosures for this reporting period", + "source": "totalNoDaysMaintainingPestFree", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(vi) Total number of days maintaining pest animal-free enclosures invoiced for this reporting period", + "source": "totalNoDaysMaintainingPestFreeInvoiced", + "type": "number" + } + ] + } + ] }, { - "addRowText": "New survey site", + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(vii) Total area (ha) of pest animal-free enclosures for this reporting period", + "source": "totalAreaPestFreeSurveyInitial", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(viii) Total area (ha) of pest animal-free enclosures invoiced for this reporting period", + "source": "totalAreaPestFreeSurveyInitialInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedPestFreeMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "type": "section", + "items": [ + { + "addRowText": "Add a new pest animal free area", "userAddedRows": true, - "source": "debrisRemovalSurveys", + "source": "enclosureDetails", "type": "repeat", "items": [ { - "columns": [ + "type": "row", + "items": [ { - "width": "10%", - "source": "initialOrFollowup", - "title": "Initial or follow-up activity?", - "type": "selectOne" + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] + } + ] }, { - "width": "15%", - "title": "Site/s where debris removal was implemented", "type": "col", + "css": "span3 col-border-right", "items": [ - { - "type": "feature", - "source": "clearedSites" - }, - { - "source": "calculatedDebrisRemovedHa", - "readonly": "readonly", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, - { - "source": "calculatedDebrisRemovedKm", - "readonly": "readonly", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, { "type": "row", "items": [ { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" } ] } ] }, { - "width": "15%", + "css": "span3", "type": "col", - "title": "Actual area (ha) / length (km) of debris removed", - "helpText": "Enter the amount which were actually removed during this reporting period.", "items": [ { - "source": "debrisRemovedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + } + ] + }, + { + "css": "border-bottom", + "type": "row", + "items": [ + { + "preLabel": "Initial or maintained feral free enclosure?", + "css": "span3", + "source": "newOrMaintained", + "type": "selectOne" + }, + { + "preLabel": "Number of pest animal-free enclosures", + "css": "span3", + "source": "numberOfPestFreeEnclosures", + "type": "number" + }, + { + "preLabel": "Number of days maintaining pest animal-free enclosures", + "css": "span3", + "source": "daysSpentOnMaintenanceOfEnclosures", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "source": "debrisRemovedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "preLabel": "Site/s of pest animal-free enclosure", + "source": "sitesOfPestAnimalFreeEnclosure", + "type": "feature" + } + ] }, { "type": "row", "items": [ { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" } ] }, @@ -4144,41 +8069,37 @@ "type": "row", "items": [ { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" } ] } ] }, { - "width": "15%", "type": "col", - "title": "Invoiced area (ha) of debris removed", - "helpText": "Enter the amount you will invoice for during this reporting period.", + "css": "span3 col-border-right", "items": [ { - "source": "areaOfRemovedDebrisInvoicedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, - { - "source": "areaOfRemovedDebrisInvoicedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) of pest animal-free enclosure", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] }, { "type": "row", "items": [ { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedNotActualReason", + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", "type": "selectOne" } ] @@ -4188,347 +8109,496 @@ "items": [ { "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedNotActualComments", + "source": "mappingNotAlignedComments", "type": "textarea", "rows": 5 } ] } ] - }, - { - "source": "relatedOutcomes", - "type": "selectOne", - "width": "10%", - "title": "Which outcome statement/s relates to this survey?" - }, - { - "width": "15%", - "type": "col", - "title": "Which investment priority does this activity relate to?", - "items": [ - { - "source": "investmentPriorities2", - "type": "select2Many" - }, - { - "source": "otherInvestmentPriority", - "type": "text" - } - ] - }, + } + ] + }, + { + "addRowText": "Add a species", + "columns": [ { - "width": "10%", - "source": "teqDebrisRemoval", - "title": "Technique used to remove debris", - "type": "textarea", - "rows": 5 + "width": "30%", + "source": "protectedSpecies", + "title": "Targeted species being protected", + "type": "speciesSelect" }, { - "width": "10%", - "title": "Type of debris removed", - "type": "col", - "validate": "required", - "items": [ - { - "type": "row", - "items": [ - { - "source": "debrisType", - "type": "select2" - } - ] - }, - { - "source": "otherDebrisType", - "type": "text" - } - ] + "width": "30%", + "source": "targetFeralSpecies", + "title": "Targeted pest animal species being controlled", + "type": "speciesSelect" }, { - "width": "5%", - "source": "weightOfDebrisTonnes", - "title": "Weight (tonnes) of debris removed", - "type": "number" + "width": "20%", + "source": "individualsOrPopulations", + "title": "Individuals or populations of species being protected?", + "type": "selectOne" }, { - "width": "5%", - "source": "volumeRemovedM3", - "title": "Volume (m3) of debris removed", + "width": "20%", + "source": "numberOfPopulationsOrIndividualsProtected", + "title": "Number of populations (or individuals) within pest animal-free enclosures", "type": "number" } ], "userAddedRows": true, - "source": "debrisRemovalDetails", + "disableTableUpload": true, + "source": "speciesProtected", "type": "table" } - ] + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" + }, + { + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, + { + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] + } + ] + } + ] + }, + "modelName": null, + "templateName": "nhtFeralFreeEnclosures", + "optional": true, + "optionalQuestionText": null, + "title": "Establishing and maintaining feral-free enclosures", + "collapsibleHeading": null, + "name": "NHT - Maintaining feral free enclosures", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ + { + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableEsa" + }, + { + "columns": [ + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "label", + "type": "pre-populated", + "config": { + "source": { + "url": "/project/outcomesByScores", + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + }, + { + "expression": "scores", + "name": "scoreIds", + "type": "computed" + } + ] + } + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } + } + } }, { - "type": "row", - "items": [ + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" } ] }, { - "type": "row", - "items": [ - { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" - } - ] + "dataType": "text", + "name": "establishedOrImplementation", + "constraints": [ + "Established", + "Implementation" + ], + "validate": "required" }, { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." - }, + "dataType": "feature", + "name": "sitesAgreementsEstablished", + "description": "Mapping field to be done and Area (ha) field be auto-calculated from mapping." + }, + { + "computed": { + "expression": "$geom.areaHa(sitesAgreementsEstablished)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesAgreementsEstablished)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } } ] }, { - "type": "row", - "items": [ + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReason", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1))", + "type": "if" } ] }, { - "type": "row", - "items": [ + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" } ] }, { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ { - "title": "Attached documents", - "source": "attachments", - "type": "document" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1))", + "type": "if" } ] - } - ] - } - ] - }, - "modelName": null, - "templateName": "nhtDebrisRemoval", - "optional": true, - "optionalQuestionText": null, - "title": "Debris removal", - "collapsibleHeading": null, - "name": "NHT - Debris removal", - "description": null - }, - { - "collapsedByDefault": false, - "template": { - "dataModel": [ - { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "dataType": "text", - "name": "initialOrFollowup", - "constraints": [ - "Initial", - "Follow-up" - ], - "validate": "required" - }, - { - "dataType": "feature", - "name": "existingErosionSites" - }, - { - "defaultValue": { - "expression": "$geom.areaHa(existingErosionSites)", - "type": "computed" - }, - "dataType": "number", - "name": "existingErosionAreaHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "min[0]" - }, - { - "dataType": "feature", - "name": "sitesManaged" - }, - { - "computed": { - "expression": "$geom.areaHa(sitesManaged)" - }, - "dataType": "number", - "name": "calculatedAreaOfErosionControlHa", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "areaOfErosionControlInvoicedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The controlled area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "computed": { - "expression": "$geom.lengthKm(sitesManaged)" - }, - "dataType": "number", - "name": "calculatedLengthOfErosionControlKm", - "units": "km", - "decimalPlaces": 3, - "behaviour": [ + }, { - "condition": "lengthOfErosionControlInvoicedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The controlled length must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "dataType": "document", - "name": "extraMappingDetails", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", - "behaviour": [ + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, { - "condition": "not (within(areaOfErosionControlHa, calculatedAreaOfErosionControlHa, 0.1) and within(lengthOfErosionControlKm, calculatedLengthOfErosionControlKm, 0.1)) or roundTo(areaOfErosionControlHa, 2) != roundTo(areaOfErosionControlInvoicedHa, 2) or roundTo(lengthOfErosionControlKm, 2) != roundTo(lengthOfErosionControlInvoicedKm, 2)", - "type": "visible" + "columns": [ + { + "dataType": "text", + "name": "agreementType", + "description": "", + "constraints": [ + "On title in perpetuity (e.g. conservation convenant)", + "Binding agreement not on title in perpetuity (e.g. property vegetation plan)", + "Termed agreement not on title - binding (e.g. land management agreement)", + "Not on title - non-binding (e.g. Wildlife Refuge)", + "No protection mechanism applicable", + "Other" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "otherAgreementType", + "description": "", + "behaviour": [ + { + "condition": "agreementType == \"Other\"", + "type": "enable" + } + ], + "validate": "required,maxSize[300]" + }, + { + "dataType": "number", + "name": "numberOfAgreements", + "validate": "required,min[0]" + }, + { + "dataType": "number", + "name": "numberOfDaysMaintainingAgreements", + "description": "Number of days should be calculated as number of days by number of people (eg. 4.5 days by 3 people is 13.5 days).", + "validate": "required,min[0]" + }, + { + "dataType": "number", + "name": "yearsOfTheAgreement", + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "agreementPurpose", + "validate": "required,maxSize[300]" + }, + { + "dataType": "text", + "name": "agreementMadeWith", + "validate": "required,maxSize[300]" + }, + { + "dataType": "text", + "name": "implementationType", + "constraints": [ + "Managing Sward Height", + "Native Herbivore Management", + "Pest Animal Management", + "Weed Removal/Management", + "Biomass Control", + "Revegetation (including planting and seeding)", + "Regeneration", + "Restoration of Habitat Features", + "Improving Land Management Practices", + "Other (explanation of the activity required)" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "otherImplementationType", + "description": "", + "validate": "maxSize[300]" + } + ], + "dataType": "list", + "name": "agreementsTable" } - ], - "validate": "required" - }, - { - "defaultValue": { - "expression": "$geom.areaHa(sitesManaged)", - "type": "computed" - }, - "dataType": "number", - "name": "areaOfErosionControlHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "required,min[0]" + ], + "dataType": "list", + "name": "conservationAgreementsControlled" }, { - "defaultValue": { - "expression": "$geom.lengthKm(sitesManaged)", - "type": "computed" - }, "dataType": "number", - "name": "lengthOfErosionControlKm", - "units": "km", + "name": "totalAreaConservationAgreements", + "validate": "min[0]", "decimalPlaces": 3, - "validate": "required,min[0]" + "computed": { + "expression": "sum(conservationAgreementsControlled, \"establishedOrImplementation == 'Established' ? areaTreatedHa : 0\")" + } }, { "dataType": "number", - "name": "areaOfErosionControlInvoicedHa", - "units": "ha", "decimalPlaces": 3, + "name": "totalAreaConservationAgreementsInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", "validate": [ { "rule": "required" @@ -4538,18 +8608,29 @@ }, { "param": { - "expression": "areaOfErosionControlHa", - "type": "computed" + "expression": "totalAreaConservationAgreements", + "type": "computed", + "decimalPlaces": 3 }, "rule": "max" } - ] + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalAreaActivitiesConducted", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(conservationAgreementsControlled, \"establishedOrImplementation == 'Implementation' ? areaTreatedHa : 0\")" + } }, { "dataType": "number", - "name": "lengthOfErosionControlInvoicedKm", - "units": "km", "decimalPlaces": 3, + "name": "totalAreaActivitiesConductedInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", "validate": [ { "rule": "required" @@ -4559,200 +8640,26 @@ }, { "param": { - "expression": "lengthOfErosionControlKm", - "type": "computed" + "expression": "totalAreaActivitiesConducted", + "type": "computed", + "decimalPlaces": 3 }, "rule": "max" } - ] - }, - { - "dataType": "text", - "name": "mappingNotAlignedReason", - "behaviour": [ - { - "condition": "not (within(areaOfErosionControlHa, calculatedAreaOfErosionControlHa, 0.1) and within(lengthOfErosionControlKm, calculatedLengthOfErosionControlKm, 0.1))", - "type": "visible" - } - ], - "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "mappingNotAlignedComments", - "behaviour": [ - { - "condition": "\"Other\" == mappingNotAlignedReason", - "type": "visible" - } - ], - "validate": "required,maxSize[300]" - }, - { - "dataType": "text", - "name": "invoicedNotActualReason", - "behaviour": [ - { - "condition": "roundTo(areaOfErosionControlHa, 2) != roundTo(areaOfErosionControlInvoicedHa, 2) or roundTo(lengthOfErosionControlKm, 2) != roundTo(lengthOfErosionControlInvoicedKm, 2)", - "type": "visible" - } - ], - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" ], - "validate": "required" + "defaultValue": "" }, { "dataType": "text", - "name": "invoicedNotActualComments", + "name": "totalInvoicedActivitiesConductedMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", "behaviour": [ { - "condition": "\"Other\" == invoicedNotActualReason", - "type": "visible" - } - ], - "validate": "required,maxSize[300]" - }, - { - "columns": [ - { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } - } - } - }, - { - "name": "investmentPriorities2", - "dataType": "stringList", - "validate": "required", - "constraints": { - "type": "pre-populated", - "config": { - "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" - } - } - } - }, - { - "dataType": "text", - "name": "otherInvestmentPriority", - "behaviour": [ - { - "type": "enable", - "condition": "\"Other\" in investmentPriorities2" - } - ] - }, - { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "number", - "name": "numberInstalled", - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "erosionManagementMethod", - "constraints": [ - "Alternative watering point", - "Erosion control structures", - "Farming practice change", - "Fencing", - "Revegetation", - "Terracing", - "Vegetated waterway (bioswale)", - "Windbreaks", - "Other" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "otherErosionManagementMethod", - "behaviour": [ - { - "condition": "erosionManagementMethod == \"Other\"", - "type": "visible" - } - ], - "validate": "required,max[300]" - }, - { - "dataType": "number", - "name": "numberDaysCollecting", - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "threatenedEcologicalCommunity", - "validate": "maxSize[300]" - }, - { - "dataType": "feature", - "name": "sitesBenefittingFromErosionControl" - }, - { - "defaultValue": { - "expression": "$geom.areaHa(sitesBenefittingFromErosionControl)", - "type": "computed" - }, - "dataType": "number", - "name": "areaBenefitingHa", - "decimalPlaces": 3, - "units": "ha" - }, - { - "dataType": "text", - "name": "evidenceOfBenefit", - "validate": "maxSize[300]" + "condition": "+totalAreaConservationAgreementsInvoiced < +totalAreaConservationAgreements or +totalAreaActivitiesConductedInvoiced < +totalAreaActivitiesConducted", + "type": "enable" } - ], - "dataType": "list", - "name": "erosionManagementDetails", - "minSize": 0 + ] }, { "dataType": "text", @@ -4766,12 +8673,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -4780,26 +8687,37 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Erosion Management", - "title": "Erosion management", + "modelName": "NHT - Establishing Agreements", + "title": "Establishing and Implementing Conservation Agreements", "viewModel": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -4814,7 +8732,8 @@ { "type": "col", "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "firstNationIndividualNumber", @@ -4827,336 +8746,346 @@ ] }, { - "source": "participationDetails", + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableEsa", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total area (ha) covered by conservation agreements during this reporting period (Established)", + "source": "totalAreaConservationAgreements", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total area (ha) covered by conservation agreements invoiced for during this reporting period (Established)", + "source": "totalAreaConservationAgreementsInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total area (ha) where implementation activities conducted during this reporting period (Implementation/Stewardship)", + "source": "totalAreaActivitiesConducted", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total Area (ha) where implementation activities conducted invoiced for during this reporting period (Implementation/Stewardship)", + "source": "totalAreaActivitiesConductedInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedActivitiesConductedMismatched", + "type": "textarea", "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" + "placeholder": "" } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" + ] }, { "type": "section", "items": [ { - "type": "row", - "css": "border-bottom", - "items": [ - { - "preLabel": "Initial or follow-up activity?", - "css": "span3", - "source": "initialOrFollowup", - "type": "selectOne" - } - ] - }, - { - "type": "row", - "css": "border-bottom", + "addRowText": "Add a new agreement area", + "userAddedRows": true, + "source": "conservationAgreementsControlled", + "type": "repeat", "items": [ { - "type": "col", - "css": "span2 col-border-right", + "type": "row", "items": [ { - "type": "row", + "css": "span3", + "type": "col", "items": [ { - "source": "existingErosionSites", - "type": "feature", - "preLabel": "Site/s where erosion is evident" + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "existingErosionAreaHa", - "type": "number", - "readonly": true, - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] } ] } ] }, { - "type": "col", - "css": "span2 col-border-right", + "type": "row", + "css": "border-bottom", "items": [ { - "type": "row", - "items": [ - { - "source": "sitesManaged", - "type": "feature", - "preLabel": "Site/s of erosion control" - } - ] - }, - { - "type": "row", - "items": [ - { - "readonly": "readonly", - "source": "calculatedAreaOfErosionControlHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "readonly": "readonly", - "source": "calculatedLengthOfErosionControlKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" + "type": "row", + "items": [ + { + "source": "establishedOrImplementation", + "type": "selectOne", + "preLabel": "Established or implementation?" + } + ] } ] } ] }, { - "type": "col", - "css": "span2 col-border-right", + "type": "row", + "css": "border-bottom", "items": [ { - "type": "row", - "items": [ - { - "helpText": "Manually enter correct figure for this reporting period if different to mapped value.", - "preLabel": "Actual area (ha) / length (km) of erosion control", - "source": "areaOfErosionControlHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "lengthOfErosionControlKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" - } - ] - }, - { - "type": "row", - "items": [ + "type": "row", + "items": [ + { + "preLabel": "Site/s where agreements were established", + "source": "sitesAgreementsEstablished", + "type": "feature" + } + ] + }, { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 - } - ] - } - ] - }, - { - "type": "col", - "css": "span2 col-border-right", - "items": [ - { - "type": "row", - "items": [ + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, { - "helpText": "Enter the amount you will invoice for during this reporting period.", - "preLabel": "Invoiced area (ha) / length (km) of erosion control", - "source": "areaOfErosionControlInvoicedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "lengthOfErosionControlInvoicedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) of site/s agreements", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedNotActualReason", - "type": "selectOne" - } - ] - }, - { - "type": "row", - "items": [ + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] + }, { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedNotActualComments", - "type": "textarea" - } - ] - } - ] - } - ] - }, - { - "columns": [ - { - "source": "relatedOutcomes", - "type": "selectOne", - "width": "15%", - "title": "Which outcome statement/s relates to this survey?" - }, - { - "width": "15%", - "type": "col", - "title": "Which investment priority does this activity relate to?", - "items": [ - { - "source": "investmentPriorities2", - "type": "select2Many" - }, - { - "source": "otherInvestmentPriority", - "type": "text" + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] + } + ] } ] }, { - "title": "Activities start date", - "source": "activitiesStartDate", - "type": "date", - "width": "10%" - }, - { - "title": "Activities end date", - "source": "activitiesEndDate", - "type": "date", - "width": "10%" - }, - { - "width": "5%", - "source": "numberInstalled", - "title": "Number of erosion control structures installed", - "type": "number" - }, - { - "width": "15%", - "type": "col", - "title": "Type of treatment being used", - "items": [ + "columns": [ { - "type": "row", + "width": "15%", + "title": "Type of agreement", + "type": "col", "items": [ { - "source": "erosionManagementMethod", - "type": "select2" + "type": "row", + "items": [ + { + "source": "agreementType", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "otherAgreementType", + "title": "Type of Agreement (if other)", + "type": "textarea" + } + ] } ] }, { - "type": "row", - "items": [ - { - "source": "otherErosionManagementMethod", - "placeholder": "Type of treatment method", - "type": "textarea" - } - ] - } - ] - }, - { - "width": "5%", - "source": "numberDaysCollecting", - "title": "Number of days collecting seeds/propagating plants ", - "type": "number" - }, - { - "width": "15%", - "source": "threatenedEcologicalCommunity", - "title": "Threatened Ecological Community (TEC) benefitting from this activity", - "type": "text" - }, - { - "width": "20%", - "title": "Please map any off-site area/s if they benefitted from this erosion management activity", - "type": "col", - "items": [ + "width": "10%", + "source": "numberOfAgreements", + "type": "number", + "title": "Number of conservation agreements established" + }, { - "source": "sitesBenefittingFromErosionControl", - "type": "feature" + "width": "10%", + "source": "numberOfDaysMaintainingAgreements", + "type": "number", + "title": "Number of days maintaining agreements (if applicable)" }, { - "source": "areaBenefitingHa", + "width": "10%", + "source": "yearsOfTheAgreement", "type": "number", - "displayOptions": { - "displayUnits": true - } + "title": "Length (years of the agreement)" }, { - "type": "row", + "width": "20%", + "source": "agreementPurpose", + "title": "Purpose of agreement", + "type": "textarea" + }, + { + "width": "20%", + "source": "agreementMadeWith", + "title": "Who the agreement was made with?", + "type": "textarea" + }, + { + "width": "10%", + "title": "Types of implementation/stewardship activities undertaken", + "type": "col", "items": [ { - "source": "evidenceOfBenefit", - "placeholder": "Please describe evidence of off-site benefits", - "type": "textarea" + "type": "row", + "items": [ + { + "source": "implementationType", + "type": "select2Many" + } + ] + }, + { + "source": "otherImplementationType", + "placeholder": "If Other was selected", + "type": "text" } ] } - ] + ], + "userAddedRows": true, + "disableTableUpload": true, + "source": "agreementsTable", + "type": "table" } - ], - "userAddedRows": true, - "source": "erosionManagementDetails", - "type": "table" - }, + ] + } + ] + }, + { + "type": "section", + "items": [ { "type": "row", "items": [ @@ -5185,7 +9114,7 @@ "items": [ { "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { "preLabel": "Data have been uploaded", @@ -5206,15 +9135,6 @@ } ] }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] - }, { "type": "table", "source": "assuranceDocuments", @@ -5233,12 +9153,12 @@ ] }, "modelName": null, - "templateName": "nhtErosionManagement", + "templateName": "nhtEstablishingAgreements", "optional": true, "optionalQuestionText": null, - "title": "Erosion management", + "title": "Establishing and Implementing Conservation Agreements", "collapsibleHeading": null, - "name": "NHT - Erosion Management", + "name": "NHT - Establishing Agreements", "description": null }, { @@ -5246,138 +9166,58 @@ "template": { "dataModel": [ { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { + "allowRowDelete": "false", "columns": [ { "dataType": "text", - "name": "newOrMaintained", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", "constraints": [ - "Newly established", - "Maintained" + "Individuals", + "Groups" ], "validate": "required" }, { "dataType": "number", - "name": "numberOfEnclosures", - "validate": "required" - }, - { - "dataType": "number", - "name": "daysSpentOnMaintenanceOfEnclosures", - "description": "Number of days should be calculated as number of days by number of people (eg. 4.5 days by 3 people is 13.5 days)", - "validate": "min[0]" - }, - { - "dataType": "feature", - "name": "siteOfEnclosures" + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" }, { - "computed": { - "expression": "$geom.areaHa(siteOfEnclosures)" - }, - "dataType": "number", - "name": "calculatedAreaOfEnclosuresHa", - "units": "ha", - "decimalPlaces": 3, + "dataType": "text", + "name": "participationGroupNumber", "behaviour": [ { - "condition": "areaInvoicedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The area of the enclosure must be mapped", - "validate": "required,min[0.0001]" - } + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" ] }, - { - "defaultValue": { - "expression": "$geom.areaHa(siteOfEnclosures)", - "type": "computed" - }, - "dataType": "number", - "name": "areaOfEnclosuresHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "required,min[0]" - }, { "dataType": "number", - "name": "areaInvoicedHa", - "units": "ha", - "decimalPlaces": 3, + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], "validate": [ { "rule": "required" @@ -5387,7 +9227,7 @@ }, { "param": { - "expression": "areaOfEnclosuresHa", + "expression": "participationIndividualNumber", "type": "computed" }, "rule": "max" @@ -5396,92 +9236,176 @@ }, { "dataType": "text", - "name": "mappingNotAlignedReason", + "name": "firstNationGroupNumber", "behaviour": [ { - "condition": "not within(areaOfEnclosuresHa, calculatedAreaOfEnclosuresHa, 0.1)", - "type": "if" + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } ], "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" ], - "validate": "required" + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] }, { "dataType": "text", - "name": "mappingNotAlignedComments", - "behaviour": [ - { - "condition": "\"Other\" == mappingNotAlignedReason", - "type": "if" + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableFms" + }, + { + "name": "farmManagementSurveys", + "dataType": "list", + "minSize": 1, + "columns": [ + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } } - ], - "validate": "required,maxSize[300]" + } }, { "dataType": "text", - "name": "invoicedNotActualReason", - "behaviour": [ - { - "condition": "roundTo(areaOfEnclosuresHa, 2) != roundTo(areaInvoicedHa, 2)", - "type": "visible" - } - ], + "name": "baselineOrIndicatorSurvey", + "description": "", "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" + "Baseline", + "Indicator" ], "validate": "required" }, { "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ - { - "condition": "\"Other\" == invoicedNotActualReason", - "type": "if" - } - ], - "validate": "required,maxSize[300]" - }, - { - "dataType": "document", - "name": "extraMappingDetails", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", - "behaviour": [ - { - "condition": "not within(areaOfEnclosuresHa, calculatedAreaOfEnclosuresHa, 0.1) or roundTo(areaOfEnclosuresHa, 2) != roundTo(areaInvoicedHa, 2)", - "type": "if" - } - ], - "validate": "required" + "name": "surveyObjective", + "description": "What the survey aim to capture? How will the information obtained from the survey be used?", + "validate": "required,maxSize[3000]" }, { + "dataType": "list", + "name": "farmManagementDataSets", "columns": [ { - "name": "relatedOutcomes", + "name": "dataSetId", + "entityType": "au.org.ala.ecodata.DataSetSummary", "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", + "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", "validate": "required", "constraints": { - "textProperty": "label", - "valueProperty": "label", + "textProperty": "name", + "valueProperty": "dataSetId", + "excludePath": "farmManagementSurveys.farmManagementDataSets.dataSetId", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.custom.dataSets" + }, + "filter": { + "namespace": "dataSet", + "expression": "dataSet.serviceId == 12 and dataSet.progress == 'finished' and dataSet.alreadyReported == false and baselineOrIndicatorSurvey == baselineIndicatorMapping.lookupValue(dataSet.type) and deepEquals(relatedOutcomes,dataSet.outcomesLabel)" + } + } + }, + "behaviour": [ + { + "type": "pre_populate", + "config": { + "waitForInitialisation": true, + "source": { + "url": "/site/geojson", + "params": [ + { + "expression": "x=find(owner.custom.dataSets, \"dataSetId\", dataSetId); x.siteId", + "name": "id", + "type": "computed", + "required": true + } + ] + }, + "target": { + "type": "singleValue", + "name": "sitesTreated" + } + } + } + ] + }, + { + "columns": [ + { + "dataType": "species", + "name": "species", + "validate": "required" + }, + { + "dataType": "text", + "name": "threatenedEcologicalCommunity", + "validate": "maxSize[300]" + }, + { + "dataType": "text", + "name": "individualsOrGroups", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "numberOfIndividualsOrGroups", + "validate": "required,min[0]" + } + ], + "dataType": "list", + "name": "farmManagementSurveySpeciesTable" + }, + { + "name": "projectBaselines", + "dataType": "stringList", + "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.baselines" + }, + "constraints": { + "textProperty": "baseline", + "valueProperty": "code", "type": "pre-populated", + "excludePath": "projectBaselines", "config": { "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] + "context-path": "owner.custom.details.baseline.rows" } } } @@ -5490,6 +9414,9 @@ "name": "investmentPriorities2", "dataType": "stringList", "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.investmentPriorities" + }, "constraints": { "type": "pre-populated", "config": { @@ -5517,39 +9444,246 @@ ] }, { - "dataType": "species", - "name": "protectedSpecies", - "dwcAttribute": "scientificName", - "description": "The threatened species protected by the enclosure", - "validate": "required" + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.startDate" + } }, { - "dataType": "text", - "name": "targetFeralSpecies", - "description": "", - "validate": "required,maxSize[300]" + "dataType": "date", + "name": "activitiesEndDate", + "description": "Specific the dates these events were held on.", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.endDate" + } + }, + { + "dataType": "feature", + "name": "sitesCoveredForFarmSurvey", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." + }, + { + "computed": { + "expression": "$geom.areaHa(sitesCoveredForFarmSurvey)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesCoveredForFarmSurvey)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ + { + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" }, { "dataType": "text", - "name": "individualsOrPopulations", + "name": "mappingNotAlignedReason", "constraints": [ - "Individuals", - "Populations" + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" ], - "validate": "required" + "validate": "required", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ + { + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] }, { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, "dataType": "number", - "name": "numberOfPopulationsOrIndividualsProtected", - "validate": "required,min[0]" + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { + "dataType": "text", + "description": "Select the technique used to conduct the survey. If the EMSA Application tool was not used, you should select 'Other'.", + "name": "emsaProtocol", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.protocol" + }, + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.protocols" + } + } + } + }, + { + "dataType": "stringList", + "description": "Describe the technique (if Other) was selected.", + "name": "otherEmsaProtocol", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methods" + } + }, + { + "dataType": "text", + "name": "surveyMethodology", + "description": "Provide more details on what is being done.", + "validate": "required,maxSize[3000]", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methodDescription" + } + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" } ], - "dataType": "list", - "name": "speciesProtected" + "minSize": 1 + } + ] + }, + { + "dataType": "lookupTable", + "name": "baselineIndicatorMapping", + "config": { + "source": { + "literal": { + "Baseline dataset associated with a project outcome": "Baseline", + "Project progress dataset that is tracking change against an established project baseline dataset": "Indicator" + } + } + } + }, + { + "dataType": "number", + "name": "totalSurveyBaseline", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(farmManagementSurveys, \"baselineOrIndicatorSurvey == 'Baseline' ? 1 : 0\")" + } + }, + { + "dataType": "number", + "name": "totalSurveyBaselineInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyBaseline", + "type": "computed" + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalSurveyIndicator", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(farmManagementSurveys, \"baselineOrIndicatorSurvey == 'Indicator' ? 1 : 0\")" + } + }, + { + "dataType": "number", + "name": "totalSurveyIndicatorInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyIndicator", + "type": "computed" + }, + "rule": "max" } ], - "dataType": "list", - "name": "enclosureDetails" + "defaultValue": "" + }, + { + "dataType": "text", + "name": "totalInvoicedFarmMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalSurveyIndicatorInvoiced < +totalSurveyIndicator or +totalSurveyBaselineInvoiced < +totalSurveyBaseline", + "type": "enable" + } + ] }, { "dataType": "text", @@ -5568,7 +9702,8 @@ { "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "description": "", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -5577,94 +9712,195 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Maintaining feral free enclosures", - "title": "Establishing and maintaining feral-free enclosures", + "modelName": "NHT - Farm Management Survey", + "title": "Farm Management Survey", "viewModel": [ { - "columns": [ + "type": "section", + "items": [ { - "width": "10%", - "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", - "type": "selectOne" + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] }, { - "width": "20%", - "type": "col", - "title": "Total Number of people delivering this service", - "items": [ + "disableTableUpload": true, + "columns": [ { - "source": "participationIndividualNumber", - "type": "number" + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", + "type": "selectOne" }, { - "source": "participationGroupNumber", - "type": "selectOne" + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableFms", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Survey informationBefore completing this section, please ensure you have created a Data Set Summary information for every data set produced by the surveys you intend to reportEach survey reported must relate to a combination of outcomes as described in your MERI planEach Data Set Summary recorded for a survey must be addressing the same outcomes as selected for the surveyIf a survey produced more than one data set, use the New Data Set button to add each Data Set Summary under your surveyA single survey can be made up of multiple dataset" } ] }, { - "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "type": "row", "items": [ { - "source": "firstNationIndividualNumber", - "type": "number" + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total Number of baseline farm management surveys completed for this reporting period", + "source": "totalSurveyBaseline", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total Number of baseline farm management surveys invoiced for this reporting period", + "source": "totalSurveyBaselineInvoiced", + "type": "number" + } + ] + } + ] }, { - "source": "firstNationGroupNumber", - "type": "selectOne" + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total Number of indicator farm management surveys completed for this reporting period", + "source": "totalSurveyIndicator", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total Number of indicator farm management surveys invoiced for this reporting period", + "source": "totalSurveyIndicatorInvoiced", + "type": "number" + } + ] + } + ] } ] }, { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" - } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" - }, - { - "type": "section", - "items": [ + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedFarmMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, { - "addRowText": "Add a new feral free area", + "addRowText": "Add survey", + "removeRowText": "Delete this survey", "userAddedRows": true, - "source": "enclosureDetails", + "source": "farmManagementSurveys", "type": "repeat", "items": [ { - "css": "border-bottom", "type": "row", "items": [ { - "preLabel": "Newly established or maintained feral free enclosure?", - "css": "span4", - "source": "newOrMaintained", - "type": "selectOne" - }, - { - "preLabel": "Number of pest animal-free enclosures", - "css": "span3", - "source": "numberOfEnclosures", - "type": "number" + "type": "col", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s relates to this survey?" + } + ] }, { - "preLabel": "Number of days maintaining pest animal-free enclosures", - "css": "span3", - "source": "daysSpentOnMaintenanceOfEnclosures", - "type": "number" + "type": "col", + "items": [ + { + "source": "baselineOrIndicatorSurvey", + "type": "selectOne", + "preLabel": "Baseline survey or indicator (follow-up) survey?" + } + ] } ] }, @@ -5672,173 +9908,270 @@ "type": "row", "items": [ { - "css": "span3 col-border-right", - "type": "col", + "source": "surveyObjective", + "preLabel": "Survey objective", + "type": "text" + } + ] + }, + { + "type": "repeat", + "source": "farmManagementDataSets", + "userAddedRows": true, + "addRowText": "New data set", + "removeRowText": "Delete this data set", + "items": [ + { + "type": "row", + "css": "border-bottom", "items": [ { - "type": "row", + "type": "col", "items": [ { - "preLabel": "Site/s (ha) of pest animal-free enclosure", - "source": "siteOfEnclosures", - "type": "feature" + "source": "dataSetId", + "type": "selectOne", + "preLabel": "Please select the data set produced by this survey. Note it must have already been entered on the Data Set Summary tab." + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "projectBaselines", + "type": "selectMany", + "preLabel": "Which project baseline/s relate to this survey?", + "readonly": "readonly" + } + ] } ] }, { - "readonly": "readonly", - "source": "calculatedAreaOfEnclosuresHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" + "type": "row", + "items": [ + { + "preLabel": "Activity start date", + "source": "activitiesStartDate", + "type": "date" + } + ] } ] - } - ] - }, - { - "css": "span4 col-border-right", - "type": "col", - "items": [ + }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Actual area (ha) of pest animal-free enclosure", - "source": "areaOfEnclosuresHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "preLabel": "Activity end date", + "source": "activitiesEndDate", + "type": "date" + } + ] } ] }, + { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "Sites covered by farm management survey", + "source": "sitesCoveredForFarmSurvey", + "type": "feature" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedLengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) / length (km) covered by farm management survey", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "lengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] } ] - } - ] - }, - { - "css": "span4", - "type": "col", - "items": [ + }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Invoiced area (ha) of pest animal-free enclosure", - "source": "areaInvoicedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "preLabel": "Survey technique", + "source": "emsaProtocol", + "type": "selectOne", + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Survey technique (if Other)", + "source": "otherEmsaProtocol", + "type": "select2Many" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedNotActualReason", - "type": "selectOne" + "type": "row", + "items": [ + { + "source": "surveyMethodology", + "preLabel": "Survey methodology", + "type": "text" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedNotActualComments", - "type": "textarea", - "rows": 5 + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] } ] } ] } ] - }, - { - "addRowText": "Add a species", - "columns": [ - { - "source": "relatedOutcomes", - "type": "selectOne", - "width": "15%", - "title": "Which outcome statement/s relates to this survey?" - }, - { - "width": "20%", - "type": "col", - "title": "Which investment priority does this activity relate to?", - "items": [ - { - "source": "investmentPriorities2", - "type": "select2Many" - }, - { - "source": "otherInvestmentPriority", - "type": "text" - } - ] - }, - { - "width": "20%", - "source": "protectedSpecies", - "title": "Targeted species being protected", - "type": "speciesSelect" - }, - { - "width": "20%", - "source": "targetFeralSpecies", - "title": "Targeted pest animal species being controlled", - "type": "text" - }, - { - "width": "15%", - "source": "individualsOrPopulations", - "title": "Individuals or populations?", - "type": "selectOne" - }, - { - "width": "10%", - "source": "numberOfPopulationsOrIndividualsProtected", - "title": "Number of populations (or individuals) within pest animal-free enclosures", - "type": "number" - } - ], - "userAddedRows": true, - "source": "speciesProtected", - "type": "table" } ] }, @@ -5870,7 +10203,7 @@ "items": [ { "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { "preLabel": "Data have been uploaded", @@ -5891,15 +10224,6 @@ } ] }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] - }, { "type": "table", "source": "assuranceDocuments", @@ -5918,12 +10242,12 @@ ] }, "modelName": null, - "templateName": "nhtFeralFreeEnclosures", + "templateName": "nhtFarmManagementSurvey", "optional": true, "optionalQuestionText": null, - "title": "Establishing and maintaining feral-free enclosures", + "title": "Farm management survey", "collapsibleHeading": null, - "name": "NHT - Maintaining feral free enclosures", + "name": "NHT - Farm Management Survey", "description": null }, { @@ -5931,113 +10255,143 @@ "template": { "dataModel": [ { + "name": "faunaSurveys", + "dataType": "list", + "minSize": 1, "columns": [ { + "name": "relatedOutcomes", "dataType": "text", - "name": "activityType", - "constraints": [ - "Captive Breeding", - "Release" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "activityPermit", - "constraints": [ - "Yes", - "No" - ], - "validate": "required" + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } + } + } }, { "dataType": "text", - "name": "inSituExSitu", + "name": "baselineOrIndicatorSurvey", + "description": "", "constraints": [ - "Ex-situ", - "In-situ" + "Baseline", + "Indicator" ], "validate": "required" }, { "dataType": "text", - "name": "newOrMaintained", - "constraints": [ - "Newly established", - "Maintained" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "numberOfCaptiveBreeding", - "validate": "required" - }, - - { - "dataType": "feature", - "name": "areaOfSourceSite" + "name": "surveyObjective", + "description": "What the survey aim to capture? How will the information obtained from the survey be used?", + "validate": "required,maxSize[3000]" }, { - "computed": { - "expression": "$geom.areaHa(areaOfSourceSite)" - }, - "dataType": "number", - "name": "areaOfSourceSiteAreaHa", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ + "dataType": "list", + "name": "faunaDataSets", + "columns": [ { - "condition": "areaOfErosionControlInvoicedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The controlled area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "dataType": "feature", - "name": "areaOfReleaseSite" - }, - { - "computed": { - "expression": "$geom.areaHa(areaOfReleaseSite)" - }, - "dataType": "number", - "name": "calculatedAreaOfReleaseSiteHa", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ + "name": "dataSetId", + "entityType": "au.org.ala.ecodata.DataSetSummary", + "dataType": "text", + "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", + "validate": "required", + "constraints": { + "textProperty": "name", + "valueProperty": "dataSetId", + "excludePath": "faunaSurveys.faunaDataSets.dataSetId", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.custom.dataSets" + }, + "filter": { + "namespace": "dataSet", + "expression": "dataSet.serviceId == 13 and dataSet.progress == 'finished' and dataSet.alreadyReported == false and baselineOrIndicatorSurvey == baselineIndicatorMapping.lookupValue(dataSet.type) and deepEquals(relatedOutcomes,dataSet.outcomesLabel)" + } + } + }, + "behaviour": [ + { + "type": "pre_populate", + "config": { + "waitForInitialisation": true, + "source": { + "url": "/site/geojson", + "params": [ + { + "expression": "x=find(owner.custom.dataSets, \"dataSetId\", dataSetId); x.siteId", + "name": "id", + "type": "computed", + "required": true + } + ] + }, + "target": { + "type": "singleValue", + "name": "sitesCoveredForFaunaSurvey" + } + } + } + ] + }, { - "condition": "areaOfErosionControlInvoicedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The controlled area must be mapped", - "validate": "required,min[0.0001]" + "columns": [ + { + "dataType": "species", + "name": "species", + "validate": "required" + }, + { + "dataType": "text", + "name": "individualsOrGroups", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "numberOfIndividualsOrGroups", + "validate": "required,min[0]" + } + ], + "dataType": "list", + "name": "faunaSurveySpeciesTable" + }, + { + "name": "projectBaselines", + "dataType": "stringList", + "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.baselines" + }, + "constraints": { + "textProperty": "baseline", + "valueProperty": "code", + "type": "pre-populated", + "excludePath": "projectBaselines", + "config": { + "source": { + "context-path": "owner.custom.details.baseline.rows" + } + } } - } - ] - }, - { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "columns": [ + }, { "name": "investmentPriorities2", "dataType": "stringList", "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.investmentPriorities" + }, "constraints": { "type": "pre-populated", "config": { @@ -6055,141 +10409,365 @@ } }, { - "dataType": "text", - "name": "otherInvestmentPriority", + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.startDate" + } + }, + { + "dataType": "date", + "name": "activitiesEndDate", + "description": "Specific the dates these events were held on.", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.endDate" + } + }, + { + "dataType": "feature", + "name": "sitesCoveredForFaunaSurvey", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." + }, + { + "computed": { + "expression": "$geom.areaHa(sitesCoveredForFaunaSurvey)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesCoveredForFaunaSurvey)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, "behaviour": [ { - "type": "enable", - "condition": "\"Other\" in investmentPriorities2" + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } } ] }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, { "dataType": "text", - "name": "breedingTechnique", + "name": "mappingNotAlignedReason", "constraints": [ - "Seed bank or captive breeding", - "Seed orchard", - "Seed nursery", - "Propagation", - "Seed viability testing", - "Seed genetic testing", - "Fauna captive breeding program", - "Fauna wild breeding program", + "Mapped area simplifies more complex area/s where work was undertaken during this period", "Other" ], - "validate": "required" - }, - { - "dataType": "text", - "name": "otherBreedingTechnique", - "description": "", + "validate": "required", "behaviour": [ { - "condition": "breedingTechnique == \"Other\"", - "type": "enable" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" } - ], - "validate": "required,maxSize[300]" + ] }, { "dataType": "text", - "name": "individualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "numberOfIndividualsOrGroups", - "validate": "required,min[0]" + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ + { + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" + } + ] }, { - "dataType": "number", - "name": "numberOfIndividualsReleased", - "validate": "required,min[0]" + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] }, { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, "dataType": "number", - "name": "numberOfAdnimalDiedPreReleased", - "validate": "required,min[0]" + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 }, { - "name": "projectBaseline", "dataType": "text", - "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", + "description": "Select the technique used to conduct the survey. If the EMSA Application tool was not used, you should select 'Other'.", + "name": "emsaProtocol", "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.protocol" + }, "constraints": { - "textProperty": "baseline", - "valueProperty": "code", + "textProperty": "label", + "valueProperty": "value", "type": "pre-populated", - "excludePath": "projectBaseline", "config": { "source": { - "context-path": "owner.custom.details.baseline.rows" + "context-path": "owner.protocols" } } } }, { - "name": "datasetSupports", - "dataType": "text", - "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "name", - "valueProperty": "dataSetId", - "type": "pre-populated", - "config": { - "source": { - "context-path": "owner.custom.dataSets" - } - } + "dataType": "stringList", + "description": "Describe the technique (if Other) was selected.", + "name": "otherEmsaProtocol", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methods" } }, { - "name": "relatedOutcomes", "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } - } + "name": "surveyMethodology", + "description": "Provide more details on what is being done.", + "validate": "required,maxSize[3000]", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methodDescription" } + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" } ], - "dataType": "list", - "name": "speciesInBreedingProgram" + "minSize": 1 + } + ] + }, + { + "dataType": "lookupTable", + "name": "baselineIndicatorMapping", + "config": { + "source": { + "literal": { + "Baseline dataset associated with a project outcome": "Baseline", + "Project progress dataset that is tracking change against an established project baseline dataset": "Indicator" + } + } + } + }, + { + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableFau" + }, + { + "dataType": "number", + "name": "totalSurveyBaseline", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(faunaSurveys, \"baselineOrIndicatorSurvey == 'Baseline' ? 1 : 0\")" + } + }, + { + "dataType": "number", + "name": "totalSurveyBaselineInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyBaseline", + "type": "computed" + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalSurveyIndicator", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(faunaSurveys, \"baselineOrIndicatorSurvey == 'Indicator' ? 1 : 0\")" + } + }, + { + "dataType": "number", + "name": "totalSurveyIndicatorInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyIndicator", + "type": "computed" + }, + "rule": "max" } ], - "dataType": "list", - "name": "breedingProgramDetails" + "defaultValue": "" }, { - "name": "numberOfBreedingProgramsSurveysConducted", - "type": "number", - "decimalPlaces": 0, - "computed": { - "expression": "count(breedingProgramDetails, \"numberOfIndividualsReleased\")" - } + "dataType": "text", + "name": "totalInvoicedFaunaMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalSurveyIndicatorInvoiced < +totalSurveyIndicator or +totalSurveyBaselineInvoiced < +totalSurveyBaseline", + "type": "enable" + } + ] }, { "dataType": "text", @@ -6200,10 +10778,16 @@ "dataType": "image", "name": "photographicEvidence" }, + { + "dataType": "boolean", + "name": "dataUploaded", + "description": "" + }, { "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "description": "", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -6212,249 +10796,491 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Establishing ex-situ breeding programs", - "title": "Establishing and maintaining breeding programs", + "modelName": "NHT - Fauna survey", + "title": "Fauna Survey", "viewModel": [ { "type": "section", "items": [ { - "preLabel": "Number of establishing and maintaining breeding programs surveys conducted:", - "noEdit": true, - "type": "number", - "source": "numberOfBreedingProgramsSurveysConducted" + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] }, { - "addRowText": "Add a new breeding area", - "userAddedRows": true, - "source": "breedingProgramDetails", - "type": "repeat", - "items": [ + "disableTableUpload": true, + "columns": [ { - "type": "row", + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", + "type": "selectOne" + }, + { + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { - "preLabel": "Type of activity", - "css": "span3", - "source": "activityType", - "type": "selectOne" + "source": "participationIndividualNumber", + "type": "number" }, { - "preLabel": "Were permits obtained to support this activity?", - "css": "span3", - "source": "activityPermit", + "source": "participationGroupNumber", "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" }, { - "preLabel": "Ex-situ / In-situ", - "css": "span3", - "source": "inSituExSitu", + "source": "firstNationGroupNumber", "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableFau", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Survey informationBefore completing this section, please ensure you have created a Data Set Summary information for every data set produced by the surveys you intend to reportEach survey reported must relate to a combination of outcomes as described in your MERI planEach Data Set Summary recorded for a survey must be addressing the same outcomes as selected for the surveyIf a survey produced more than one data set, use the New Data Set button to add each Data Set Summary under your surveyA single survey can be made up of multiple dataset" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total Number of baseline fauna surveys completed for this reporting period", + "source": "totalSurveyBaseline", + "type": "number" + } + ] }, { - "preLabel": "Is this an established or maintained activity?", - "css": "span3", - "source": "newOrMaintained", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "(ii) Total Number of baseline fauna surveys invoiced for this reporting period", + "source": "totalSurveyBaselineInvoiced", + "type": "number" + } + ] } ] }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total Number of indicator fauna surveys completed for this reporting period", + "source": "totalSurveyIndicator", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total Number of indicator fauna surveys invoiced for this reporting period", + "source": "totalSurveyIndicatorInvoiced", + "type": "number" + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedFaunaMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add survey", + "removeRowText": "Delete this survey", + "userAddedRows": true, + "source": "faunaSurveys", + "type": "repeat", + "items": [ { "type": "row", - "css": "border-bottom", "items": [ { "type": "col", - "css": "span2 col-border-right", "items": [ { - "type": "row", + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s relates to this survey?" + } + ] + }, + { + "type": "col", + "items": [ + { + "source": "baselineOrIndicatorSurvey", + "type": "selectOne", + "preLabel": "Baseline survey or indicator (follow-up) survey?" + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "surveyObjective", + "preLabel": "Survey objective", + "type": "text" + } + ] + }, + { + "type": "repeat", + "source": "faunaDataSets", + "userAddedRows": true, + "addRowText": "New data set", + "removeRowText": "Delete this data set", + "items": [ + { + "type": "row", + "css": "border-bottom", + "items": [ + { + "type": "col", "items": [ { - "preLabel": "Number of captive breeding, releases, translocation or re-introduction sites established or maintained", - "source": "numberOfCaptiveBreeding", - "type": "number" + "source": "dataSetId", + "type": "selectOne", + "preLabel": "Please select the data set produced by this survey. Note it must have already been entered on the Data Set Summary tab." } ] } ] }, { - "type": "col", - "css": "span2 col-border-right", + "type": "row", "items": [ { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "areaOfSourceSite", - "type": "feature", - "preLabel": "Site/s of captive breeding, pre-translocation capture (source site)" + "type": "row", + "items": [ + { + "source": "projectBaselines", + "type": "selectMany", + "preLabel": "Which project baseline/s relate to this survey?", + "readonly": "readonly" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "areaOfSourceSiteAreaHa", - "type": "number", - "readonly": true, - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] } ] - } - ] - }, - { - "type": "col", - "css": "span2 col-border-right", - "items": [ + }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "areaOfReleaseSite", - "type": "feature", - "preLabel": " Site/s of release of captive breeding, re-introduced or translocated animals (release site)" + "type": "row", + "items": [ + { + "preLabel": "Activity start date", + "source": "activitiesStartDate", + "type": "date" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "readonly": "readonly", - "source": "calculatedAreaOfReleaseSiteHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "preLabel": "Activity end date", + "source": "activitiesEndDate", + "type": "date" + } + ] } ] - } - ] - }, - { - "type": "col", - "css": "span2 col-border-right", - "items": [ + }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Activities start date", - "source": "activitiesStartDate", - "type": "date" + "type": "row", + "items": [ + { + "preLabel": "Sites covered by fauna survey", + "source": "sitesCoveredForFaunaSurvey", + "type": "feature" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedLengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" + } + ] } ] - } - ] - }, - { - "type": "col", - "css": "span2 col-border-right", - "items": [ + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) / length (km) covered by fauna survey", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "lengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Survey technique", + "source": "emsaProtocol", + "type": "selectOne", + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Survey technique (if Other)", + "source": "otherEmsaProtocol", + "type": "select2Many" + } + ] + } + ] + }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Activities end date", - "source": "activitiesEndDate", - "type": "date" + "type": "row", + "items": [ + { + "source": "surveyMethodology", + "preLabel": "Survey methodology", + "type": "text" + } + ] } ] - } - ] - } - ] - }, - { - "addRowText": "Add a species", - "columns": [ - { - "width": "20%", - "type": "col", - "title": "Investment priority species", - "items": [ - { - "source": "investmentPriorities2", - "type": "select2Many" }, { - "source": "otherInvestmentPriority", - "type": "text" + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] } ] }, { - "width": "10%", - "source": "individualsOrGroups", - "type": "selectOne", - "title": "Individuals or groups?" - }, - { - "width": "10%", - "source": "numberOfIndividualsOrGroups", - "title": "Number of groups / individuals", - "type": "number" - }, - { - "width": "10%", - "source": "numberOfIndividualsReleased", - "title": "Number of individuals released, translocated, or re-introduced to the wild", - "type": "number" - }, - { - "width": "10%", - "source": "numberOfAdnimalDiedPreReleased", - "title": "Number of animals bred, died (pre-release), released, translocated, or re-introduced", - "type": "number" - }, - { - "width": "10%", - "type": "col", - "title": "Technique used", - "items": [ + "columns": [ { - "source": "breedingTechnique", - "type": "select2" + "width": "55%", + "source": "species", + "title": "Target species recorded", + "type": "speciesSelect" }, { - "source": "otherBreedingTechnique", - "type": "text" + "width": "25%", + "source": "individualsOrGroups", + "title": "Individuals or groups?", + "type": "selectOne" + }, + { + "width": "20%", + "source": "numberOfIndividualsOrGroups", + "title": "Number of individuals / groups in fauna survey", + "type": "number" } - ] - }, - { - "source": "projectBaseline", - "type": "selectOne", - "width": "10%", - "title": "Which project baseline relates to this survey?" - }, - { - "source": "datasetSupports", - "type": "select2Many", - "width": "10%", - "title": "What dataset supports this?" - }, - { - "source": "relatedOutcomes", - "type": "selectOne", - "width": "10%", - "title": "Which outcome statement/s relates to this survey?" + ], + "userAddedRows": true, + "disableTableUpload": true, + "source": "faunaSurveySpeciesTable", + "type": "table" } - ], - "userAddedRows": true, - "source": "speciesInBreedingProgram", - "type": "table" + ] } ] }, @@ -6486,7 +11312,12 @@ "items": [ { "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please attach any evidence you have available for this service and/or provide information (e.g. links) to where the evidence is stored. This field will help the Department and Service Providers during assurance activities or audits. Refer to the Evidence Guide for details of the types of acceptable evidence." + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" + }, + { + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" } ] }, @@ -6502,15 +11333,6 @@ } ] }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] - }, { "type": "table", "source": "assuranceDocuments", @@ -6529,12 +11351,12 @@ ] }, "modelName": null, - "templateName": "nhtExSituBreedingSites", + "templateName": "nhtFaunaSurvey", "optional": true, "optionalQuestionText": null, - "title": "Establishing ex-situ breeding program", + "title": "Fauna survey", "collapsibleHeading": null, - "name": "NHT - Establishing ex-situ breeding programs", + "name": "NHT - Fauna survey", "description": null }, { @@ -6542,248 +11364,472 @@ "template": { "dataModel": [ { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "allowRowDelete": "false", + "columns": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" } ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + "dataType": "list", + "name": "participationInformationTableFna" }, { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "columns": [ + { + "dataType": "number", + "name": "noDaysConductingCulturalPractices", + "description": "", + "validate": "required" + }, + { + "dataType": "text", + "name": "individualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "noOfParticipants", + "defaultValue": 0, + "behaviour": [ + { + "condition": "individualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "groupParticipants", + "behaviour": [ + { + "condition": "individualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "noOfFirstNationsParticipants", + "defaultValue": 0, + "behaviour": [ + { + "condition": "individualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "noOfParticipants", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "groupFirstNationsParticipants", + "behaviour": [ + { + "condition": "individualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "groupParticipants", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required" + }, { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "dataType": "text", - "name": "establishedOrImplementation", - "constraints": [ - "Established", - "Implementation" - ], - "validate": "required" - }, - { - "dataType": "feature", - "name": "agreementSites" - }, - { - "computed": { - "expression": "$geom.areaHa(agreementSites)" - }, - "dataType": "number", - "name": "calculatedAreaCoveredByAgreementsHa", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ + "dataType": "date", + "name": "activitiesEndDate", + "description": "", + "validate": [ + { + "rule": "required" + }, + { + "rule": "future", + "param": { + "expression": "formatDateForValidation(activitiesStartDate)", + "type": "computed" + } + } + ] + }, { - "condition": "areaOfCoveredByAgreementsInvoicedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "defaultValue": { - "expression": "calculatedAreaCoveredByAgreementsHa", - "type": "computed" - }, - "dataType": "number", - "name": "areaCoveredByAgreementsHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "mappingNotAlignedReason", - "behaviour": [ + "dataType": "text", + "name": "siteVisit", + "constraints": [ + "Single", + "Multiple" + ], + "validate": "required" + }, { - "condition": "not (within(areaCoveredByAgreementsHa, calculatedAreaCoveredByAgreementsHa, 0.1))", - "type": "visible" - } - ], - "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "mappingNotAlignedComments", - "behaviour": [ + "dataType": "number", + "name": "noOfSitesActivityOccurred", + "description": "", + "validate": "required" + }, { - "condition": "\"Other\" == mappingNotAlignedReason", - "type": "visible" - } - ], - "validate": "required,maxSize[300]" - }, - { - "dataType": "number", - "name": "areaOfCoveredByAgreementsInvoicedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": [ + "dataType": "text", + "name": "typeOfSite", + "constraints": [ + "Sacred", + "Food source", + "Ceremonial", + "Other" + ], + "validate": "required" + }, { - "rule": "required" + "dataType": "text", + "name": "otherTypeOfSite", + "description": "", + "behaviour": [ + { + "condition": "typeOfSite == \"Other\"", + "type": "enable" + } + ], + "validate": "required,maxSize[100]" }, { - "rule": "min[0]" + "dataType": "feature", + "name": "sitesUndertakeForFirstNations", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." }, { - "param": { - "expression": "areaCoveredByAgreementsHa", - "type": "computed" + "computed": { + "expression": "$geom.areaHa(sitesUndertakeForFirstNations)" }, - "rule": "max" - } - ] - }, - { - "dataType": "document", - "name": "extraMappingDetails", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", - "behaviour": [ - { - "condition": "not (within(calculatedAreaCoveredByAgreementsHa, areaCoveredByAgreementsHa, 0.1)) or roundTo(areaCoveredByAgreementsHa, 2) != roundTo(areaOfCoveredByAgreementsInvoicedHa, 2)", - "type": "visible" - } - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "invoicedNotActualReason", - "behaviour": [ + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, { - "condition": "roundTo(areaOfCoveredByAgreementsInvoicedHa, 2) != roundTo(areaCoveredByAgreementsHa, 2)", - "type": "visible" - } - ], - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ + "computed": { + "expression": "$geom.lengthKm(sitesUndertakeForFirstNations)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ + { + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } + } + ] + }, { - "condition": "\"Other\" == invoicedNotActualReason", - "type": "visible" - } - ], - "validate": "required,maxSize[300]" - }, - { - "columns": [ + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, { "dataType": "text", - "name": "agreementType", - "description": "", + "name": "mappingNotAlignedReason", "constraints": [ - "On title in perpetuity (e.g. conservation convenant)", - "Binding agreement not on title in perpetuity (e.g. property vegetation plan)", - "Termed agreement not on title - binding (e.g. land management agreement)", - "Not on title - non-binding (e.g. Wildlife Refuge)", - "No protection mechanism applicable", + "Mapped area simplifies more complex area/s where work was undertaken during this period", "Other" ], - "validate": "required" + "validate": "required", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] }, { "dataType": "text", - "name": "otherAgreementType", - "description": "", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ + { + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", "behaviour": [ { - "condition": "agreementType == \"Other\"", - "type": "enable" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { + "columns": [ + { + "dataType": "text", + "name": "activityTypeUndertaken", + "constraints": [ + "Survey", + "Site management", + "Assessment", + "Cultural event", + "Curation", + "Other" + ] + }, + { + "dataType": "text", + "name": "otherActivityTypeUndertaken", + "description": "", + "behaviour": [ + { + "condition": "activityTypeUndertaken == \"Other\"", + "type": "enable" + } + ], + "validate": "required,maxSize[100]" + }, + { + "dataType": "text", + "name": "purposeOfActivity", + "description": "", + "validate": "required,maxSize[300]" + }, + { + "dataType": "text", + "name": "activityDescription", + "description": "", + "validate": "maxSize[300]" + }, + { + "dataType": "text", + "name": "surveyObjective", + "description": "", + "validate": "required,maxSize[300]", + "behaviour": [ + { + "condition": "activityTypeUndertaken == \"Survey\" or activityTypeUndertaken == \"Assessment\"", + "type": "enable" + } + ] + }, + { + "dataType": "text", + "name": "surveyTechnique", + "description": "", + "validate": "required,maxSize[300]", + "behaviour": [ + { + "condition": "activityTypeUndertaken == \"Survey\" or activityTypeUndertaken == \"Assessment\"", + "type": "enable" + } + ] + }, + { + "dataType": "text", + "name": "siteCondition", + "constraints": [ + "Poor", + "Fair", + "Good", + "Excellent" + ], + "validate": "required", + "behaviour": [ + { + "condition": "activityTypeUndertaken == \"Survey\" or activityTypeUndertaken == \"Assessment\"", + "type": "enable" + } + ] + }, + { + "dataType": "text", + "name": "siteConditionDetails", + "description": "", + "validate": "required,maxSize[300]", + "behaviour": [ + { + "condition": "activityTypeUndertaken == \"Survey\" or activityTypeUndertaken == \"Assessment\"", + "type": "enable" + } + ] } ], - "validate": "required,maxSize[300]" - }, - { - "dataType": "number", - "name": "numberOfAgreements", - "validate": "required,min[0]" - }, - { - "dataType": "number", - "name": "numberOfDaysMaintainingAgreements", - "description": "Number of days should be calculated as number of days by number of people (eg. 4.5 days by 3 people is 13.5 days)", - "validate": "required,min[0]" + "dataType": "list", + "name": "firstNationsDetails" }, { "name": "relatedOutcomes", "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", "validate": "required", "constraints": { "textProperty": "label", @@ -6792,15 +11838,17 @@ "config": { "source": { "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + }, + { + "expression": "scores", + "name": "scoreIds", + "type": "computed" + } ] } } @@ -6808,20 +11856,16 @@ }, { "name": "investmentPriorities2", - "dataType": "stringList", + "dataType": "text", + "description": "", "validate": "required", "constraints": { + "textProperty": "label", + "valueProperty": "value", "type": "pre-populated", "config": { "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" + "context-path": "owner.investmentPriorities" } } } @@ -6829,6 +11873,7 @@ { "dataType": "text", "name": "otherInvestmentPriority", + "description": "Describe the investment priority (if Other) was selected", "behaviour": [ { "type": "enable", @@ -6836,29 +11881,67 @@ } ] }, - { - "dataType": "number", - "name": "yearsOfTheAgreement", - "validate": "required,min[0]" - }, { "dataType": "text", - "name": "agreementPurpose", - "validate": "required,maxSize[300]" + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + } + ], + "dataType": "list", + "name": "firstNationAreasControlled" + }, + { + "name": "sitePrepCountHeader", + "type": "number", + "decimalPlaces": 0, + "computed": { + "expression": "count(firstNationAreasControlled, \"threatenedEcologicalCommunity\")" + } + }, + { + "dataType": "number", + "name": "totalNoDaysCulturalPractices", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(firstNationAreasControlled, \"noDaysConductingCulturalPractices\")" + } + }, + { + "dataType": "number", + "name": "totalNoDaysCulturalPracticesInvoiced", + "validate": [ + { + "rule": "required" }, { - "dataType": "text", - "name": "agreementMadeWith", - "validate": "required,maxSize[300]" + "rule": "min[0]" }, { - "dataType": "text", - "name": "implementationType", - "validate": "required,maxSize[300]" + "param": { + "expression": "totalNoDaysCulturalPractices", + "type": "computed" + }, + "rule": "max" } ], - "dataType": "list", - "name": "agreements" + "defaultValue": "" + }, + { + "dataType": "text", + "name": "totalInvoicedFirstNationsMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalNoDaysCulturalPracticesInvoiced < +totalNoDaysCulturalPractices", + "type": "enable" + } + ] }, { "dataType": "text", @@ -6872,12 +11955,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -6886,26 +11969,37 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Establishing Agreements", - "title": "Establishing and maintaining agreements", + "modelName": "NHT - First nations australians cultural practices", + "title": "First Nations Australians Cultural Practices", "viewModel": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -6920,7 +12014,8 @@ { "type": "col", "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "firstNationIndividualNumber", @@ -6933,20 +12028,134 @@ ] }, { + "width": "20%", "source": "participationDetails", "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", "type": "textarea" } ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", + "source": "participationInformationTableFna", "type": "table" }, { - "type": "section", + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total number of days conducting cultural practices during this reporting period", + "source": "totalNoDaysCulturalPractices", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total number of days conducting cultural practices invoiced for during this reporting period", + "source": "totalNoDaysCulturalPracticesInvoiced", + "type": "number" + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedFirstNationsMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add new First Nations Cultural Practice", + "userAddedRows": true, + "source": "firstNationAreasControlled", + "type": "repeat", "items": [ + { + "type": "row", + "items": [ + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + } + ] + }, { "type": "row", "css": "border-bottom", @@ -6959,9 +12168,67 @@ "type": "row", "items": [ { - "source": "establishedOrImplementation", - "type": "selectOne", - "preLabel": "Established or implementation?" + "preLabel": "Number of days conducting cultural practices", + "source": "noDaysConductingCulturalPractices", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Site Visit", + "source": "siteVisit", + "type": "selectOne" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Number of sites where activity occurred", + "source": "noOfSitesActivityOccurred", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Type of site", + "source": "typeOfSite", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Type of site (If Other)", + "source": "otherTypeOfSite", + "type": "text" } ] } @@ -6975,8 +12242,8 @@ "type": "row", "items": [ { - "preLabel": "Site/s where agreements were established", - "source": "agreementSites", + "preLabel": "Site/s where activity was undertaken", + "source": "sitesUndertakeForFirstNations", "type": "feature" } ] @@ -6985,12 +12252,25 @@ "type": "row", "items": [ { - "readonly": "readonly", - "source": "calculatedAreaCoveredByAgreementsHa", + "source": "calculatedAreaTreatedHa", "type": "number", "displayOptions": { "displayUnits": true - } + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedLengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" } ] }, @@ -7014,9 +12294,20 @@ "type": "row", "items": [ { - "helpText": "Enter the actual amount during this reporting period.", - "preLabel": "Actual area (ha) of site/s agreements", - "source": "areaCoveredByAgreementsHa", + "preLabel": "Actual area (ha) / length (km) where activity has been undertaken", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "lengthTreatedKm", "type": "number", "displayOptions": { "displayUnits": true @@ -7028,7 +12319,7 @@ "type": "row", "items": [ { - "preLabel": "Reason for actual amount being different to aligned amount", + "preLabel": "Reason for actual being different to mapped amount", "source": "mappingNotAlignedReason", "type": "selectOne" } @@ -7038,9 +12329,10 @@ "type": "row", "items": [ { - "placeholder": "Please enter the reason/s the actual didn't align with the agreed amount", + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", "source": "mappingNotAlignedComments", - "type": "textarea" + "type": "textarea", + "rows": 5 } ] } @@ -7054,13 +12346,57 @@ "type": "row", "items": [ { - "helpText": "Enter the amount you will invoice for during this reporting period.", - "preLabel": "Invoiced area (ha) of site/s agreements", - "source": "areaOfCoveredByAgreementsInvoicedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "preLabel": "Activity start date", + "source": "activitiesStartDate", + "type": "date" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Activity end date", + "source": "activitiesEndDate", + "type": "date" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Individuals or groups?", + "source": "individualsOrGroups", + "type": "selectOne" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Number of participants", + "source": "noOfParticipants", + "type": "number" } ] }, @@ -7068,20 +12404,33 @@ "type": "row", "items": [ { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedNotActualReason", + "source": "groupParticipants", "type": "selectOne" } ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Number of First Nations participants", + "source": "noOfFirstNationsParticipants", + "type": "number" + } + ] }, { "type": "row", "items": [ { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedNotActualComments", - "type": "textarea", - "rows": 5 + "source": "groupFirstNationsParticipants", + "type": "selectOne" } ] } @@ -7093,15 +12442,15 @@ "columns": [ { "width": "15%", - "title": "Type of agreement", + "title": "Type of activity undertaken", "type": "col", "items": [ { "type": "row", "items": [ { - "source": "agreementType", - "type": "select2" + "source": "activityTypeUndertaken", + "type": "selectOne" } ] }, @@ -7109,8 +12458,8 @@ "type": "row", "items": [ { - "source": "otherAgreementType", - "title": "Type of Agreement (if other)", + "source": "otherActivityTypeUndertaken", + "title": "Type of activity (if other)", "type": "textarea" } ] @@ -7118,255 +12467,262 @@ ] }, { - "width": "10%", - "source": "numberOfAgreements", - "type": "number", - "title": "Number of conservation agreements established" - }, - { - "width": "10%", - "source": "numberOfDaysMaintainingAgreements", - "type": "number", - "title": "Number of days maintaining agreements (if applicable)" - }, - { - "source": "relatedOutcomes", - "type": "selectOne", - "width": "10%", - "title": "Which outcome statement/s relates to this survey?" + "width": "15%", + "source": "purposeOfActivity", + "title": "Purpose of activity", + "type": "textarea" }, { - "width": "10%", - "type": "col", - "title": "Which investment priority does this activity relate to?", - "items": [ - { - "source": "investmentPriorities2", - "type": "select2Many" - }, - { - "source": "otherInvestmentPriority", - "type": "text" - } - ] + "width": "15%", + "source": "activityDescription", + "title": "Detailed description of activity", + "type": "textarea" }, { - "width": "5%", - "source": "yearsOfTheAgreement", - "type": "number", - "title": "Length (years of the agreement)" + "width": "15%", + "source": "surveyObjective", + "title": "Survey/assessment objective (if applicable)", + "type": "textarea" }, { "width": "15%", - "source": "agreementPurpose", - "title": "Purpose of agreement", + "source": "surveyTechnique", + "title": "Survey/assessment technique (if applicable)", "type": "textarea" }, { "width": "10%", - "source": "agreementMadeWith", - "title": "Who the agreement was made with?", - "type": "textarea" + "source": "siteCondition", + "title": "Site condition (if applicable)", + "type": "selectOne" }, { - "width": "10%", - "source": "implementationType", - "title": "Types of implementation/stewardship activities undertaken", + "width": "15%", + "source": "siteConditionDetails", + "title": "Site condition further details (if applicable)", "type": "textarea" } ], "userAddedRows": true, - "source": "agreements", + "disableTableUpload": true, + "source": "firstNationsDetails", "type": "table" - }, - { - "type": "row", - "items": [ - { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" - } - ] - }, + } + ] + }, + { + "type": "row", + "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" - } - ] - }, + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" + } + ] + }, + { + "type": "row", + "items": [ { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." - }, - { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" - } - ] - }, + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] + }, + { + "type": "row", + "items": [ { - "type": "row", - "items": [ - { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." - } - ] + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] - }, + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, + { + "type": "row", + "items": [ { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ - { - "title": "Attached documents", - "source": "attachments", - "type": "document" - } - ] + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, + { + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" } ] } ] }, "modelName": null, - "templateName": "nhtEstablishingAgreements", + "templateName": "nhtFirstNation", "optional": true, "optionalQuestionText": null, - "title": "Establishing and maintaining agreements", + "title": "First Nations Australians Cultural Practices", "collapsibleHeading": null, - "name": "NHT - Establishing Agreements", + "name": "NHT - First nations australians cultural practices", "description": null }, { "collapsedByDefault": false, "template": { - "title": "Farm management surveys", - "modelName": "NHT - Farm Management Survey", "dataModel": [ { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "name": "floraSurveys", + "dataType": "list", + "minSize": 1, + "columns": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } + } + } + }, { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "dataType": "text", + "name": "baselineOrIndicatorSurvey", + "description": "", + "constraints": [ + "Baseline", + "Indicator" + ], + "validate": "required" + }, { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ + "dataType": "text", + "name": "surveyObjective", + "description": "What the survey aim to capture? How will the information obtained from the survey be used?", + "validate": "required,maxSize[3000]" + }, { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "columns": [ + "dataType": "number", + "name": "numberOfSurveys", + "validate": "required,min[1],max[1]", + "defaultValue": 1, + "readonly": true + }, { "dataType": "list", - "name": "surveyBaselineDetails", + "name": "floraDataSets", "columns": [ { + "name": "dataSetId", + "entityType": "au.org.ala.ecodata.DataSetSummary", "dataType": "text", - "name": "baselineOrIndicatorSurvey", - "description": "", - "constraints": [ - "Baseline", - "Indicator" + "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", + "validate": "required", + "constraints": { + "textProperty": "name", + "valueProperty": "dataSetId", + "excludePath": "floraSurveys.floraDataSets.dataSetId", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.custom.dataSets" + }, + "filter": { + "namespace": "dataSet", + "expression": "dataSet.serviceId == 15 and dataSet.progress == 'finished' and dataSet.alreadyReported == false and baselineOrIndicatorSurvey == baselineIndicatorMapping.lookupValue(dataSet.type) and deepEquals(relatedOutcomes,dataSet.outcomesLabel)" + } + } + }, + "behaviour": [ + { + "type": "pre_populate", + "config": { + "waitForInitialisation": true, + "source": { + "url": "/site/geojson", + "params": [ + { + "expression": "x=find(owner.custom.dataSets, \"dataSetId\", dataSetId); x.siteId", + "name": "id", + "type": "computed", + "required": true + } + ] + }, + "target": { + "type": "singleValue", + "name": "sitesCoveredForFloraSurvey" + } + } + } + ] + }, + { + "columns": [ + { + "dataType": "species", + "name": "species", + "validate": "required" + }, + { + "dataType": "text", + "name": "threatenedEcologicalCommunity", + "validate": "maxSize[300]" + }, + { + "dataType": "text", + "name": "individualsOrGroups", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "numberOfIndividualsOrGroups", + "validate": "required,min[0]" + } ], - "validate": "required" + "dataType": "list", + "name": "floraSurveySpeciesTable" }, { - "name": "projectBaseline", - "dataType": "text", + "name": "projectBaselines", + "dataType": "stringList", "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.baselines" + }, "constraints": { "textProperty": "baseline", "valueProperty": "code", "type": "pre-populated", - "excludePath": "projectBaseline", + "excludePath": "projectBaselines", "config": { "source": { "context-path": "owner.custom.details.baseline.rows" @@ -7375,109 +12731,391 @@ } }, { - "name": "datasetSupports", - "dataType": "text", - "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "name", - "valueProperty": "dataSetId", - "type": "pre-populated", - "config": { - "source": { - "context-path": "owner.custom.dataSets" - } - } - } + "name": "investmentPriorities2", + "dataType": "stringList", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.investmentPriorities" + }, + "constraints": { + "type": "pre-populated", + "config": { + "source": { + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + } + ], + "url": "/project/listProjectInvestmentPriorities/" + } + } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.startDate" + } + }, + { + "dataType": "date", + "name": "activitiesEndDate", + "description": "Specific the dates these events were held on.", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.endDate" + } + }, + { + "dataType": "feature", + "name": "sitesCoveredForFloraSurvey", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." + + + }, + { + "computed": { + "expression": "$geom.areaHa(sitesCoveredForFloraSurvey)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesCoveredForFloraSurvey)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ + { + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReason", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ + { + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "$geom.lengthKm(sitesCoveredForFloraSurvey)" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 }, { - "name": "relatedOutcomes", "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", + "description": "Select the technique used to conduct the survey. If the EMSA Application tool was not used, you should select 'Other'.", + "name": "emsaProtocol", "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.protocol" + }, "constraints": { "textProperty": "label", - "valueProperty": "label", + "valueProperty": "value", "type": "pre-populated", "config": { "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] + "context-path": "owner.protocols" } } } }, { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", - "validate": "required" + "dataType": "stringList", + "description": "Describe the technique (if Other) was selected.", + "name": "otherEmsaProtocol", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methods" + } }, { - "dataType": "stringList", - "name": "ternSurveyTechnique", - "validate": "required", - "constraints": [ - "Tern Survey technique 1", - "Tern Survey technique 1", - "Tern Survey technique 1", - "Other" - ] + "dataType": "text", + "name": "surveyMethodology", + "description": "Provide more details on what is being done.", + "validate": "required,maxSize[3000]", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methodDescription" + } }, { "dataType": "text", - "description": "Please describe the Survey technique if other was selected.", - "name": "otherTernSurveyTechnique", - "behaviour": [ - { - "condition": "ternSurveyTechnique == \"Other\"", - "type": "enable_and_clear" - } + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" ], "validate": "required" + } + ], + "minSize": 1 + } + ] + }, + { + "dataType": "lookupTable", + "name": "baselineIndicatorMapping", + "config": { + "source": { + "literal": { + "Baseline dataset associated with a project outcome": "Baseline", + "Project progress dataset that is tracking change against an established project baseline dataset": "Indicator" + } + } + } + }, + { + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" }, { - "dataType": "text", - "name": "surveyMethodology", - "description": "Provide more details on what is being done", - "validate": "required,maxSize[3000]" + "rule": "min[0]" }, { - "dataType": "text", - "name": "surveyObjective", - "description": "How will the information obtained from the survey be used", - "validate": "required,maxSize[3000]" + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" } ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" } ], "dataType": "list", - "name": "farmSurveys", - "minSize": 1 + "name": "participationInformationTableFls" }, { - "name": "numberFarmManagementSurveysConducted", - "type": "number", + "dataType": "number", + "name": "totalSurveyBaseline", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(floraSurveys, \"baselineOrIndicatorSurvey == 'Baseline' ? 1 : 0\")" + } + }, + { + "dataType": "number", + "name": "totalSurveyBaselineInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyBaseline", + "type": "computed" + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalSurveyIndicator", + "validate": "min[0]", "decimalPlaces": 0, "computed": { - "expression": "count(farmSurveys, \"baselineOrIndicatorSurvey\")" + "expression": "sum(floraSurveys, \"baselineOrIndicatorSurvey == 'Indicator' ? 1 : 0\")" } }, + { + "dataType": "number", + "name": "totalSurveyIndicatorInvoiced", + "defaultValue": "", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyIndicator", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "totalInvoicedFloraMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalSurveyIndicatorInvoiced < +totalSurveyIndicator or +totalSurveyBaselineInvoiced < +totalSurveyBaseline", + "type": "enable" + } + ] + }, { "dataType": "text", "name": "comments", @@ -7495,7 +13133,8 @@ { "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "description": "", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -7504,27 +13143,40 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], + "modelName": "NHT - Flora survey", + "title": "Flora Survey", "viewModel": [ { "type": "section", "items": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -7538,110 +13190,448 @@ }, { "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableFls", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Survey informationBefore completing this section, please ensure you have created a Data Set Summary information for every data set produced by the surveys you intend to reportEach survey reported must relate to a combination of outcomes as described in your MERI planEach Data Set Summary recorded for a survey must be addressing the same outcomes as selected for the surveyIf a survey produced more than one data set, use the New Data Set button to add each Data Set Summary under your surveyA single survey can be made up of multiple dataset" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total Number of baseline flora surveys completed for this reporting period", + "source": "totalSurveyBaseline", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total Number of baseline flora surveys invoiced for this reporting period", + "source": "totalSurveyBaselineInvoiced", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", "items": [ { - "source": "firstNationIndividualNumber", - "type": "number" + "type": "row", + "items": [ + { + "preLabel": "(iii) Total Number of indicator flora surveys completed for this reporting period", + "source": "totalSurveyIndicator", + "type": "number" + } + ] }, { - "source": "firstNationGroupNumber", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "(iv) Total Number of indicator flora surveys invoiced for this reporting period", + "source": "totalSurveyIndicatorInvoiced", + "type": "number" + } + ] } ] - }, - { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" + ] }, { - "preLabel": "Number of Farm Management surveys conducted:", - "noEdit": true, - "type": "number", - "source": "numberFarmManagementSurveysConducted" + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedFloraMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] }, { - "addRowText": "New survey site", + "addRowText": "Add survey", + "removeRowText": "Delete this survey", "userAddedRows": true, - "source": "farmSurveys", + "source": "floraSurveys", "type": "repeat", "items": [ { - "type": "table", - "source": "surveyBaselineDetails", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ - { - "source": "baselineOrIndicatorSurvey", - "type": "selectOne", - "width": "8%", - "title": "Baseline survey or indicator (follow-up) survey?" - }, - { - "source": "projectBaseline", - "type": "selectOne", - "width": "8%", - "title": "Which project baseline relates to this survey?" - }, - { - "source": "datasetSupports", - "type": "select2Many", - "width": "10%", - "title": "What dataset supports this?" - }, - { - "source": "relatedOutcomes", - "type": "selectOne", - "width": "10%", - "title": "Which outcome statement/s relates to this survey?" - }, + "type": "row", + "items": [ { - "title": "Activities start date", - "source": "activitiesStartDate", - "type": "date", - "width": "10%" + "type": "col", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s relates to this survey?" + } + ] }, { - "title": "Activities end date", - "source": "activitiesEndDate", - "type": "date", - "width": "10%" - }, + "type": "col", + "items": [ + { + "source": "baselineOrIndicatorSurvey", + "type": "selectOne", + "preLabel": "Baseline survey or indicator (follow-up) survey?" + } + ] + } + ] + }, + { + "type": "row", + "items": [ { - "width": "10%", - "title": "Survey technique", - "source": "ternSurveyTechnique", - "type": "selectOne" - }, + "source": "surveyObjective", + "preLabel": "Survey objective", + "type": "text" + } + ] + }, + { + "type": "repeat", + "source": "floraDataSets", + "userAddedRows": true, + "addRowText": "New data set", + "removeRowText": "Delete this data set", + "items": [ { - "width": "10%", - "title": "Survey technique (if Other)", - "source": "otherTernSurveyTechnique", - "type": "textarea" + "type": "row", + "css": "border-bottom", + "items": [ + { + "type": "col", + "items": [ + { + "source": "dataSetId", + "type": "selectOne", + "preLabel": "Please select the data set produced by this survey. Note it must have already been entered on the Data Set Summary tab." + } + ] + } + ] }, { - "width": "12%", - "rows": 4, - "source": "surveyMethodology", - "title": "Survey methodology", - "type": "textarea" + "type": "row", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "projectBaselines", + "type": "selectMany", + "preLabel": "Which project baseline/s relate to this survey?", + "readonly": "readonly" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Activity start date", + "source": "activitiesStartDate", + "type": "date" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Activity end date", + "source": "activitiesEndDate", + "type": "date" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Sites covered by flora survey", + "source": "sitesCoveredForFloraSurvey", + "type": "feature" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedLengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) / length (km) covered by flora survey", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "lengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Survey technique", + "source": "emsaProtocol", + "type": "selectOne", + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Survey technique (if Other)", + "source": "otherEmsaProtocol", + "type": "select2Many" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "surveyMethodology", + "preLabel": "Survey methodology", + "type": "text" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + } + ] }, { - "width": "12%", - "rows": 4, - "source": "surveyObjective", - "title": "Survey objective", - "type": "textarea" + "columns": [ + { + "width": "40%", + "source": "species", + "title": "Target species recorded", + "type": "speciesSelect" + }, + { + "width": "35%", + "source": "threatenedEcologicalCommunity", + "title": "Threatened ecological communities (if applicable)", + "type": "text" + }, + { + "width": "15%", + "source": "individualsOrGroups", + "title": "Individuals or groups?", + "type": "selectOne" + }, + { + "width": "10%", + "source": "numberOfIndividualsOrGroups", + "title": "Number of groups / individuals in flora survey", + "type": "number" + } + ], + "userAddedRows": true, + "disableTableUpload": true, + "source": "floraSurveySpeciesTable", + "type": "table" } ] } @@ -7675,7 +13665,7 @@ "items": [ { "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { "preLabel": "Data have been uploaded", @@ -7696,15 +13686,6 @@ } ] }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] - }, { "type": "table", "source": "assuranceDocuments", @@ -7716,194 +13697,162 @@ "source": "attachments", "type": "document" } - ] - } - ] - } - ] - }, - "modelName": null, - "templateName": "nhtFarmManagementSurvey", - "optional": true, - "optionalQuestionText": null, - "title": "Farm management survey", - "collapsibleHeading": null, - "name": "NHT - Farm Management Survey", - "description": null - }, - { - "collapsedByDefault": false, - "template": { - "dataModel": [ - { - "columns": [ - { - "columns": [ - { - "dataType": "species", - "name": "species", - "validate": "required" - }, - { - "dataType": "text", - "name": "individualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "numberOfIndividualsOrGroups", - "validate": "required,min[0]" - }, - { - "dataType": "stringList", - "name": "ternSurveyTechnique", - "validate": "required", - "constraints": [ - "Tern Survey technique 1", - "Tern Survey technique 1", - "Tern Survey technique 1", - "Other" - ] - }, - { - "dataType": "text", - "description": "Please describe the Survey technique if other was selected.", - "name": "otherTernSurveyTechnique", - "behaviour": [ - { - "condition": "ternSurveyTechnique == \"Other\"", - "type": "enable_and_clear" - } - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "surveyMethodology", - "description": "Provide more details on what is being done", - "validate": "required,maxSize[3000]" - }, - { - "dataType": "text", - "name": "surveyObjective", - "description": "How will the information obtained from the survey be used", - "validate": "required,maxSize[3000]" - } - ], - "dataType": "list", - "name": "faunaSurveyBaselineTable" - }, + ] + } + ] + } + ] + }, + "modelName": null, + "templateName": "nhtFloraSurvey", + "optional": true, + "optionalQuestionText": null, + "title": "Flora survey", + "collapsibleHeading": null, + "name": "NHT - Flora survey", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ + { + "allowRowDelete": "false", + "columns": [ { "dataType": "text", - "name": "baselineOrIndicatorSurvey", - "description": "", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", "constraints": [ - "Baseline", - "Indicator" + "Individuals", + "Groups" ], "validate": "required" }, { - "name": "projectBaseline", - "dataType": "text", - "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", - "validate": "required", - "constraints": { - "textProperty": "baseline", - "valueProperty": "code", - "type": "pre-populated", - "excludePath": "projectBaseline", - "config": { - "source": { - "context-path": "owner.custom.details.baseline.rows" - } + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } - } + ], + "validate": "required,min[0]" }, { - "name": "datasetSupports", "dataType": "text", - "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "name", - "valueProperty": "dataSetId", - "type": "pre-populated", - "config": { - "source": { - "context-path": "owner.custom.dataSets" - } + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } - } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] }, { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } - } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] }, { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] }, { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableHaa" + }, + { + "columns": [ + { + "dataType": "text", + "name": "initialOrMaintained", + "constraints": [ + "Initial", + "Maintained" + ], "validate": "required" }, { "dataType": "feature", - "name": "sitesTreated" + "name": "sitesOfHabitatAugmentation", + "description": "Mapping field to be done and Area (ha) field be auto-calculated from mapping." }, { "computed": { - "expression": "$geom.areaHa(sitesTreated)" + "expression": "$geom.areaHa(sitesOfHabitatAugmentation)" }, "dataType": "number", "name": "calculatedAreaTreatedHa", "units": "ha", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "areaInvoicedTreatedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The managed area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] + "decimalPlaces": 3 }, { "computed": { - "expression": "$geom.lengthKm(sitesTreated)" + "expression": "$geom.lengthKm(sitesOfHabitatAugmentation)" }, "dataType": "number", "name": "calculatedLengthTreatedKm", @@ -7927,6 +13876,7 @@ }, "dataType": "number", "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", "units": "ha", "decimalPlaces": 3, "validate": "required,min[0]" @@ -7941,15 +13891,15 @@ "validate": "required", "behaviour": [ { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1))", - "type": "visible" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1))", + "type": "if" } ] }, { "dataType": "text", "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", + "validate": "required,maxSize[100]", "behaviour": [ { "type": "visible", @@ -7964,170 +13914,275 @@ "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", "behaviour": [ { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1)) or roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1))", + "type": "if" } ] }, { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, "dataType": "number", - "name": "areaInvoicedTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": [ + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { + "dataType": "number", + "name": "noStructuresInstalled", + "validate": "required" + }, + { + "columns": [ { - "rule": "min[0]" + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required" }, { - "rule": "max", - "param": { - "type": "computed", - "expression": "areaTreatedHa" - } + "dataType": "date", + "name": "activitiesEndDate", + "description": "Specific the dates these events were held on.", + "validate": [ + { + "rule": "required" + }, + { + "rule": "future", + "param": { + "expression": "formatDateForValidation(activitiesStartDate)", + "type": "computed" + } + } + ] + }, + { + "dataType": "text", + "name": "habitatAugmentationType", + "description": "", + "constraints": [ + "Artificial fauna movement devices", + "Artificial nesting or roosting habitat (incl. tiles, fence posts)", + "Environmental thinning", + "Improving fish passage", + "Natural features (rocks, logs)", + "Other" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "otherHabitatAugmentationType", + "description": "Please specify the habitat augmentation type if Other (specify in notes) was selected in the Type of habitat augmentation column.", + "behaviour": [ + { + "condition": "habitatAugmentationType == \"Other\"", + "type": "enable" + } + ], + "validate": "required,maxSize[100]" + }, + { + "dataType": "text", + "name": "habitatAugmentationObjective", + "description": "", + "validate": "required,maxSize[300]" } - ] + ], + "dataType": "list", + "name": "habitatAugmentationDetails" }, { + "name": "relatedOutcomes", "dataType": "text", - "name": "invoicedNotActualReason", - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", "validate": "required", - "behaviour": [ - { - "condition": "roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } } - ] + } }, { + "name": "investmentPriorities2", "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ - { - "type": "visible", - "condition": "\"Other\" == invoicedNotActualReason" + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } } - ], - "validate": "required,maxSize[300]" + } }, { - "defaultValue": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)" - }, - "dataType": "number", - "name": "lengthTreatedKm", - "units": "km", - "decimalPlaces": 3, - "validate": [ - { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*0.9" - } - }, + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*1.1" - } + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" } ] }, { - "dataType": "number", - "name": "numberOfSurveyInvoice", - "validate": "required,min[0]" + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" } ], "dataType": "list", - "name": "faunaSurveys", - "minSize": 1 + "name": "habitatAugmentationAreas" }, { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" + "dataType": "number", + "name": "totalAreaAugmentationInitial", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(habitatAugmentationAreas, \"initialOrMaintained == 'Initial' ? areaTreatedHa : 0\")" + } }, { "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "decimalPlaces": 3, + "name": "totalAreaAugmentationInitialInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaAugmentationInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" } ], - "validate": "required,min[0]" + "defaultValue": "" }, { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ + "dataType": "number", + "name": "totalAreaAugmentationMaintained", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(habitatAugmentationAreas, \"initialOrMaintained == 'Maintained' ? areaTreatedHa : 0\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalAreaAugmentationMaintainedInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaAugmentationMaintained", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" } ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + "defaultValue": "" }, { "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "name": "totalStructuresInstalledInitial", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(habitatAugmentationAreas, \"initialOrMaintained == 'Initial' ? noStructuresInstalled : 0\")" + } + }, + { + "dataType": "number", + "name": "totalStructuresInstalledInitialInvoiced", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalStructuresInstalledInitial", + "type": "computed" + }, + "rule": "max" } ], - "validate": "required,min[0]" + "defaultValue": "" }, { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ + "dataType": "number", + "name": "totalStructuresInstalledMaintained", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(habitatAugmentationAreas, \"initialOrMaintained == 'Maintained' ? noStructuresInstalled : 0\")" + } + }, + { + "dataType": "number", + "name": "totalStructuresInstalledMaintainedInvoiced", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalStructuresInstalledMaintained", + "type": "computed" + }, + "rule": "max" } ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + "defaultValue": "" }, { "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "name": "numberFaunaSurveysConducted", - "type": "number", - "decimalPlaces": 0, - "computed": { - "expression": "count(faunaSurveys, \"baselineOrIndicatorSurvey\")" - } + "name": "totalInvoicedHabitatAugmentationMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalAreaAugmentationInitialInvoiced < +totalAreaAugmentationInitial or +totalAreaAugmentationMaintainedInvoiced < +totalAreaAugmentationMaintained or +totalStructuresInstalledInitialInvoiced < +totalStructuresInstalledInitial or +totalStructuresInstalledMaintainedInvoiced < +totalStructuresInstalledMaintained", + "type": "enable" + } + ] }, { "dataType": "text", @@ -8141,12 +14196,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -8155,840 +14210,1062 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Fauna survey", - "title": "Fauna survey", + "modelName": "NHT - Habitat augmentation", + "title": "Habitat Augmentation", "viewModel": [ { - "type": "section", + "type": "row", "items": [ { - "columns": [ + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, + "columns": [ + { + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", + "type": "selectOne" + }, + { + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ { - "width": "10%", - "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableHaa", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total area (ha) of augmentation (initial) during this reporting period", + "source": "totalAreaAugmentationInitial", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total area (ha) of augmentation (initial) invoiced for during this reporting period", + "source": "totalAreaAugmentationInitialInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total area (ha) of augmentation (maintained) during this reporting period", + "source": "totalAreaAugmentationMaintained", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total area (ha) of augmentation (maintained) invoiced for during this reporting period", + "source": "totalAreaAugmentationMaintainedInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(v) Number of locations where structures installed (initial) during this reporting period", + "source": "totalStructuresInstalledInitial", + "type": "number" + } + ] }, { - "width": "20%", - "type": "col", - "title": "Total Number of people delivering this service", + "type": "row", + "items": [ + { + "preLabel": "(vi) Number of locations where structures installed (initial) invoiced for during this reporting period", + "source": "totalStructuresInstalledInitialInvoiced", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", "items": [ { - "source": "participationIndividualNumber", + "preLabel": "(vii) Number of locations where structures installed (maintained) during this reporting period", + "source": "totalStructuresInstalledMaintained", "type": "number" - }, - { - "source": "participationGroupNumber", - "type": "selectOne" } ] }, { - "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "type": "row", "items": [ { - "source": "firstNationIndividualNumber", + "preLabel": "(viii) Number of locations where structures installed (maintained) invoiced for during this reporting period", + "source": "totalStructuresInstalledMaintainedInvoiced", "type": "number" - }, - { - "source": "firstNationGroupNumber", - "type": "selectOne" } ] - }, - { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" - }, + ] + } + ] + }, + { + "type": "row", + "items": [ { - "preLabel": "Number of Fauna surveys conducted:", - "noEdit": true, - "type": "number", - "source": "numberFaunaSurveysConducted" - }, + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedHabitatAugmentationMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add new area of habitat augmentation", + "userAddedRows": true, + "source": "habitatAugmentationAreas", + "type": "repeat", + "items": [ { - "addRowText": "New survey site", - "userAddedRows": true, - "source": "faunaSurveys", - "type": "repeat", + "type": "row", "items": [ { - "type": "row", - "css": "border-bottom", + "css": "span3 col-border-right", + "type": "col", "items": [ { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "source": "baselineOrIndicatorSurvey", - "type": "selectOne", - "preLabel": "Baseline survey or indicator (follow-up) survey?" - } - ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "source": "projectBaseline", - "type": "selectOne", - "preLabel": "Which project baseline relates to this survey?" - } - ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "datasetSupports", - "type": "select2Many", - "preLabel": "What dataset supports this?" - } - ] + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" } ] - }, + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "relatedOutcomes", - "type": "selectOne", - "preLabel": "Which outcome statement/s relates to this survey?" - } - ] + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" } ] - }, + } + ] + }, + { + "css": "span3 col-border-right", + "type": "col", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Activities start date", - "source": "activitiesStartDate", - "type": "date" - } - ] + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" } ] - }, + } + ] + } + ] + }, + { + "type": "row", + "css": "border-bottom", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Activities end date", - "source": "activitiesEndDate", - "type": "date" - } - ] + "source": "initialOrMaintained", + "preLabel": "Initial or Maintenance Treatment?", + "type": "selectOne" } ] - }, + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Sites covered by fauna surveys", - "source": "sitesTreated", - "type": "feature" - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "calculatedAreaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "calculatedLengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" - } - ] + "source": "noStructuresInstalled", + "preLabel": "Number of locations where structures installed/maintained", + "type": "number" } ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "preLabel": "Actual area (ha) / length (km) treated by fauna surveys", - "source": "areaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "lengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" - } - ] - }, + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ { - "type": "row", - "items": [ - { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 - } - ] + "preLabel": "Site/s of habitat augmentation", + "source": "sitesOfHabitatAugmentation", + "type": "feature" } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "How may surveys will you be invoicing for?", - "source": "numberOfSurveyInvoice", - "type": "number" - } - ] + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" } ] } ] }, { - "columns": [ - { - "width": "20%", - "source": "species", - "title": "Target species recorded", - "type": "speciesSelect" - }, - { - "width": "10%", - "source": "individualsOrGroups", - "title": "Individuals or groups?", - "type": "selectOne" - }, - { - "width": "10%", - "source": "numberOfIndividualsOrGroups", - "title": "Number of groups / individuals in flora survey", - "type": "number" - }, - { - "width": "10%", - "title": "Survey technique", - "source": "ternSurveyTechnique", - "type": "selectOne" - }, + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "width": "10%", - "title": "Survey technique (if Other)", - "source": "otherTernSurveyTechnique", - "type": "text" + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) of habitat augmentation", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] }, { - "width": "20%", - "source": "surveyMethodology", - "title": "Survey methodology", - "type": "text" + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] }, { - "width": "20%", - "source": "surveyObjective", - "title": "Survey objective", - "type": "text" + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] } - ], - "userAddedRows": true, - "disableTableUpload": true, - "source": "faunaSurveyBaselineTable", - "type": "table" + ] } ] }, { - "type": "row", - "items": [ + "columns": [ { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" - } - ] - }, - { - "type": "row", - "items": [ + "title": "Activity start date", + "source": "activitiesStartDate", + "type": "date", + "width": "20%" + }, { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" - } - ] - }, - { - "type": "row", - "items": [ + "title": "Activity end date", + "source": "activitiesEndDate", + "type": "date", + "width": "20%" + }, { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "width": "25%", + "title": "Type of habitat augmentation / installed", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "habitatAugmentationType", + "type": "select2" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "otherHabitatAugmentationType", + "type": "textarea" + } + ] + } + ] }, { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" + "width": "35%", + "source": "habitatAugmentationObjective", + "title": "Purpose of habitat augmentation", + "type": "textarea" } - ] - }, + ], + "userAddedRows": true, + "disableTableUpload": true, + "source": "habitatAugmentationDetails", + "type": "table" + } + ] + }, + { + "type": "row", + "items": [ { - "type": "row", - "items": [ - { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." - } - ] - }, + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" + } + ] + }, + { + "type": "row", + "items": [ { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ - { - "title": "Attached documents", - "source": "attachments", - "type": "document" - } - ] + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, + { + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" } ] } ] }, "modelName": null, - "templateName": "nhtFaunaSurvey", + "templateName": "nhtHabitatAugmentation", "optional": true, "optionalQuestionText": null, - "title": "Fauna survey", + "title": "Habitat augmentation", "collapsibleHeading": null, - "name": "NHT - Fauna survey", + "name": "NHT - Habitat augmentation", "description": null }, - { "collapsedByDefault": false, "template": { "dataModel": [ { + "name": "habitatConditionSurveys", + "dataType": "list", + "minSize": 1, "columns": [ { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } + } + } + }, + { + "dataType": "text", + "name": "baselineOrIndicatorSurvey", + "description": "", + "constraints": [ + "Baseline", + "Indicator" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "surveyObjective", + "description": "What the survey aim to capture? How will the information obtained from the survey be used?", + "validate": "required,maxSize[3000]" + }, + { + "dataType": "number", + "name": "numberOfSurveys", + "validate": "required,min[1],max[1]", + "defaultValue": 1, + "readonly": true + }, + { + "dataType": "list", + "name": "habitatConditionDataSets", "columns": [ { - "dataType": "species", - "name": "species", - "validate": "required" + "name": "dataSetId", + "entityType": "au.org.ala.ecodata.DataSetSummary", + "dataType": "text", + "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", + "validate": "required", + "constraints": { + "textProperty": "name", + "valueProperty": "dataSetId", + "excludePath": "habitatConditionSurveys.habitatConditionDataSets.dataSetId", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.custom.dataSets" + }, + "filter": { + "namespace": "dataSet", + "expression": "dataSet.serviceId == 42 and dataSet.progress == 'finished' and dataSet.alreadyReported == false and baselineOrIndicatorSurvey == baselineIndicatorMapping.lookupValue(dataSet.type) and deepEquals(relatedOutcomes,dataSet.outcomesLabel)" + } + } + }, + "behaviour": [ + { + "type": "pre_populate", + "config": { + "waitForInitialisation": true, + "source": { + "url": "/site/geojson", + "params": [ + { + "expression": "x=find(owner.custom.dataSets, \"dataSetId\", dataSetId); x.siteId", + "name": "id", + "type": "computed", + "required": true + } + ] + }, + "target": { + "type": "singleValue", + "name": "sitesCoveredForHabitatConditionSurvey" + } + } + } + ] }, { - "dataType": "text", - "name": "threatenedEcologicalCommunity", - "validate": "maxSize[300]" + "name": "projectBaselines", + "dataType": "stringList", + "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.baselines" + }, + "constraints": { + "textProperty": "baseline", + "valueProperty": "code", + "type": "pre-populated", + "excludePath": "projectBaselines", + "config": { + "source": { + "context-path": "owner.custom.details.baseline.rows" + } + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "stringList", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.investmentPriorities" + }, + "constraints": { + "type": "pre-populated", + "config": { + "source": { + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + } + ], + "url": "/project/listProjectInvestmentPriorities/" + } + } + } }, { "dataType": "text", - "name": "individualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.startDate" + } + }, + { + "dataType": "date", + "name": "activitiesEndDate", + "description": "Specific the dates these events were held on.", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.endDate" + } + }, + { + "dataType": "feature", + "name": "sitesCoveredForHabitatConditionSurvey", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." }, { + "computed": { + "expression": "$geom.areaHa(sitesCoveredForHabitatConditionSurvey)" + }, "dataType": "number", - "name": "numberOfIndividualsOrGroups", - "validate": "required,min[0]" + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3, + "behaviour": [ + { + "condition": "areaInvoicedTreatedHa > 0", + "type": "conditional_validation", + "value": { + "message": "The managed area must be mapped", + "validate": "required,min[0.0001]" + } + } + ] }, { - "dataType": "stringList", - "name": "ternSurveyTechnique", - "validate": "required", - "constraints": [ - "Tern Survey technique 1", - "Tern Survey technique 1", - "Tern Survey technique 1", - "Other" + "computed": { + "expression": "$geom.lengthKm(sitesCoveredForHabitatConditionSurvey)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ + { + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } + } ] }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, { "dataType": "text", - "description": "Please describe the Survey technique if other was selected.", - "name": "otherTernSurveyTechnique", + "name": "mappingNotAlignedReason", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", "behaviour": [ { - "condition": "ternSurveyTechnique == \"Other\"", - "type": "enable_and_clear" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" } - ], - "validate": "required" + ] }, { "dataType": "text", - "name": "surveyMethodology", - "description": "Provide more details on what is being done", - "validate": "required,maxSize[3000]" + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ + { + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" + } + ] }, { - "dataType": "text", - "name": "surveyObjective", - "description": "How will the information obtained from the survey be used", - "validate": "required,maxSize[3000]" - } - ], - "dataType": "list", - "name": "floraSurveySpeciesTable" - }, - { - "dataType": "text", - "name": "baselineOrIndicatorSurvey", - "description": "", - "constraints": [ - "Baseline", - "Indicator" - ], - "validate": "required" - }, - { - "name": "projectBaseline", - "dataType": "text", - "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", - "validate": "required", - "constraints": { - "textProperty": "baseline", - "valueProperty": "code", - "type": "pre-populated", - "excludePath": "projectBaseline", - "config": { - "source": { - "context-path": "owner.custom.details.baseline.rows" - } - } - } - }, - { - "name": "datasetSupports", - "dataType": "text", - "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "name", - "valueProperty": "dataSetId", - "type": "pre-populated", - "config": { - "source": { - "context-path": "owner.custom.dataSets" - } - } - } - }, - { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { + "dataType": "text", + "description": "Select the technique used to conduct the survey. If the EMSA Application tool was not used, you should select 'Other'.", + "name": "emsaProtocol", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.protocol" + }, + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.protocols" + } } - ] } - } - } - }, - { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "feature", - "name": "sitesTreated" - }, - { - "computed": { - "expression": "$geom.areaHa(sitesTreated)" - }, - "dataType": "number", - "name": "calculatedAreaTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ + }, { - "condition": "areaInvoicedTreatedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The managed area must be mapped", - "validate": "required,min[0.0001]" + "dataType": "stringList", + "description": "Describe the technique (if Other) was selected.", + "name": "otherEmsaProtocol", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methods" } - } - ] - }, - { - "computed": { - "expression": "$geom.lengthKm(sitesTreated)" - }, - "dataType": "number", - "name": "calculatedLengthTreatedKm", - "units": "km", - "decimalPlaces": 3, - "behaviour": [ + }, { - "condition": "lengthTreatedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The managed length must be mapped", - "validate": "required,min[0.0001]" + "dataType": "text", + "name": "surveyMethodology", + "description": "Provide more details on what is being done.", + "validate": "required,maxSize[3000]", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methodDescription" } + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, + { + "columns": [ + { + "dataType": "species", + "name": "species", + "validate": "required" + }, + { + "dataType": "text", + "name": "typesOfHabitat", + "description": "", + "constraints": [ + "Desert", + "Grassland/Savanna", + "Bush/Forest", + "Subterranean", + "Marsh/Swamps", + "Rivers/Streams/Wetlands", + "Coastal areas", + "Marine areas", + "Other" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "habitatCondition", + "validate": "maxSize[300]" + } + ], + "dataType": "list", + "name": "habitatConditionSurveySpeciesTable" } - ] - }, - { - "defaultValue": { - "type": "computed", - "expression": "calculatedAreaTreatedHa" - }, - "dataType": "number", - "name": "areaTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "required,min[0]" - }, + ], + "minSize": 1 + } + ] + }, + { + "dataType": "lookupTable", + "name": "baselineIndicatorMapping", + "config": { + "source": { + "literal": { + "Baseline dataset associated with a project outcome": "Baseline", + "Project progress dataset that is tracking change against an established project baseline dataset": "Indicator" + } + } + } + }, + { + "allowRowDelete": "false", + "columns": [ { "dataType": "text", - "name": "mappingNotAlignedReason", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" + "Individuals", + "Groups" ], - "validate": "required", + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, "behaviour": [ { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1))", - "type": "visible" + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } - ] + ], + "validate": "required,min[0]" }, { "dataType": "text", - "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", + "name": "participationGroupNumber", "behaviour": [ { - "type": "visible", - "condition": "\"Other\" == mappingNotAlignedReason" + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" ] }, { - "dataType": "document", - "name": "extraMappingDetails", - "validate": "required", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, "behaviour": [ { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1)) or roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } - ] - }, - { - "dataType": "number", - "name": "areaInvoicedTreatedHa", - "units": "ha", - "decimalPlaces": 3, + ], "validate": [ + { + "rule": "required" + }, { "rule": "min[0]" }, { - "rule": "max", "param": { - "type": "computed", - "expression": "areaTreatedHa" - } - } - ] - }, - { - "dataType": "text", - "name": "invoicedNotActualReason", - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required", - "behaviour": [ - { - "condition": "roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" } ] }, { "dataType": "text", - "name": "invoicedNotActualComments", + "name": "firstNationGroupNumber", "behaviour": [ { - "type": "visible", - "condition": "\"Other\" == invoicedNotActualReason" + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } ], - "validate": "required,maxSize[300]" - }, - { - "defaultValue": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)" - }, - "dataType": "number", - "name": "lengthTreatedKm", - "units": "km", - "decimalPlaces": 3, + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], "validate": [ { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*0.9" - } + "rule": "required" }, { - "rule": "max", "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*1.1" - } + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" } ] }, { - "dataType": "number", - "name": "numberOfSurveyInvoice", - "validate": "required,min[0]" + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" } ], "dataType": "list", - "name": "floraSurveys", - "minSize": 1 + "name": "participationInformationTableHca" }, { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" + "dataType": "number", + "name": "totalSurveyBaseline", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(habitatConditionSurveys, \"baselineOrIndicatorSurvey == 'Baseline' ? 1 : 0\")" + } }, { "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "name": "totalSurveyBaselineInvoiced", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ + "rule": "required" + }, { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyBaseline", + "type": "computed" + }, + "rule": "max" } ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + "defaultValue": "" }, { "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" + "name": "totalSurveyIndicator", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(habitatConditionSurveys, \"baselineOrIndicatorSurvey == 'Indicator' ? 1 : 0\")" + } }, { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ + "dataType": "number", + "name": "totalSurveyIndicatorInvoiced", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyIndicator", + "type": "computed" + }, + "rule": "max" } ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" + "defaultValue": "" }, { - "name": "numberFloraSurveysConducted", - "type": "number", - "decimalPlaces": 0, - "computed": { - "expression": "count(floraSurveys, \"baselineOrIndicatorSurvey\")" - } + "dataType": "text", + "name": "totalInvoicedHabitatConditionMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalSurveyIndicatorInvoiced < +totalSurveyIndicator or +totalSurveyBaselineInvoiced < +totalSurveyBaseline", + "type": "enable" + } + ] }, { "dataType": "text", @@ -9007,7 +15284,8 @@ { "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "description": "", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -9016,29 +15294,40 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Flora survey", - "title": "Flora survey", + "modelName": "NHT - Habitat condition assessment survey", + "title": "Habitat Condition Assessment Survey", "viewModel": [ { "type": "section", "items": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -9053,7 +15342,8 @@ { "type": "col", "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "firstNationIndividualNumber", @@ -9066,306 +15356,423 @@ ] }, { + "width": "20%", "source": "participationDetails", "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", "type": "textarea" } ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", + "source": "participationInformationTableHca", "type": "table" }, { - "preLabel": "Number of Flora surveys conducted:", - "noEdit": true, - "type": "number", - "source": "numberFloraSurveysConducted" + "type": "row", + "items": [ + { + "type": "literal", + "source": "Survey informationBefore completing this section, please ensure you have created a Data Set Summary information for every data set produced by the surveys you intend to reportEach survey reported must relate to a combination of outcomes as described in your MERI planEach Data Set Summary recorded for a survey must be addressing the same outcomes as selected for the surveyIf a survey produced more than one data set, use the New Data Set button to add each Data Set Summary under your surveyA single survey can be made up of multiple dataset" + } + ] }, { - "addRowText": "New survey site", - "userAddedRows": true, - "source": "floraSurveys", - "type": "repeat", + "type": "row", "items": [ { - "type": "row", - "css": "border-bottom", + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "baselineOrIndicatorSurvey", - "type": "selectOne", - "preLabel": "Baseline survey or indicator (follow-up) survey?" - } - ] + "preLabel": "(i) Total Number of baseline habitat condition assessment surveys completed for this reporting period", + "source": "totalSurveyBaseline", + "type": "number" } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "projectBaseline", - "type": "selectOne", - "preLabel": "Which project baseline relates to this survey?" - } - ] + "preLabel": "(ii) Total Number of baseline habitat condition assessment surveys invoiced for this reporting period", + "source": "totalSurveyBaselineInvoiced", + "type": "number" } ] - }, + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "datasetSupports", - "type": "select2Many", - "preLabel": "What dataset supports this?" - } - ] + "preLabel": "(iii) Total Number of indicator habitat condition assessment surveys completed for this reporting period", + "source": "totalSurveyIndicator", + "type": "number" } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "relatedOutcomes", - "type": "selectOne", - "preLabel": "Which outcome statement/s relates to this survey?" - } - ] + "preLabel": "(iv) Total Number of indicator habitat condition assessment surveys invoiced for this reporting period", + "source": "totalSurveyIndicatorInvoiced", + "type": "number" } ] - }, + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedHabitatConditionMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add survey", + "removeRowText": "Delete this survey", + "userAddedRows": true, + "source": "habitatConditionSurveys", + "type": "repeat", + "items": [ + { + "type": "row", + "items": [ { "type": "col", - "css": "span3 col-border-right", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Activities start date", - "source": "activitiesStartDate", - "type": "date" - } - ] + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s relates to this survey?" } ] }, { "type": "col", - "css": "span3 col-border-right", "items": [ { - "type": "row", + "source": "baselineOrIndicatorSurvey", + "type": "selectOne", + "preLabel": "Baseline survey or indicator (follow-up) survey?" + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "surveyObjective", + "preLabel": "Survey objective", + "type": "text" + } + ] + }, + { + "type": "repeat", + "source": "habitatConditionDataSets", + "userAddedRows": true, + "addRowText": "New data set", + "removeRowText": "Delete this data set", + "items": [ + { + "type": "row", + "css": "border-bottom", + "items": [ + { + "type": "col", "items": [ { - "preLabel": "Activities end date", - "source": "activitiesEndDate", - "type": "date" + "source": "dataSetId", + "type": "selectOne", + "preLabel": "Please select the data set produced by this survey. Note it must have already been entered on the Data Set Summary tab." } ] } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Sites surveyed by flora surveys", - "source": "sitesTreated", - "type": "feature" + "type": "row", + "items": [ + { + "source": "projectBaselines", + "type": "selectMany", + "preLabel": "Which project baseline/s relate to this survey?", + "readonly": "readonly" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "calculatedAreaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "calculatedLengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" + "type": "row", + "items": [ + { + "preLabel": "Activity start date", + "source": "activitiesStartDate", + "type": "date" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" + "type": "row", + "items": [ + { + "preLabel": "Activity end date", + "source": "activitiesEndDate", + "type": "date" + } + ] } ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ + }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Actual area (ha) / length (km) treated by flora surveys", - "source": "areaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "preLabel": "Sites covered by habitat condition assessment survey", + "source": "sitesCoveredForHabitatConditionSurvey", + "type": "feature" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedLengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "lengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) / length (km) covered by habitat condition assessment survey", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "lengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "Survey technique", + "source": "emsaProtocol", + "type": "selectOne", + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Survey technique (if Other)", + "source": "otherEmsaProtocol", + "type": "select2Many" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 + "type": "row", + "items": [ + { + "source": "surveyMethodology", + "preLabel": "Survey methodology", + "type": "text" + } + ] } ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ + }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "How many surveys will you be invoicing for?", - "source": "numberOfSurveyInvoice", - "type": "number" + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] } ] } ] - } - ] - }, - { - "columns": [ - { - "width": "20%", - "source": "species", - "title": "Target species recorded", - "type": "speciesSelect" - }, - { - "width": "15%", - "source": "threatenedEcologicalCommunity", - "title": "Threatened ecological communities (if applicable)", - "type": "text" - }, - { - "width": "10%", - "source": "individualsOrGroups", - "title": "Individuals or groups?", - "type": "selectOne" - }, - { - "width": "10%", - "source": "numberOfIndividualsOrGroups", - "title": "Number of groups / individuals in flora survey", - "type": "number" - }, - { - "width": "10%", - "title": "Survey technique", - "source": "ternSurveyTechnique", - "type": "selectOne" - }, - { - "width": "10%", - "title": "Survey technique (if Other)", - "source": "otherTernSurveyTechnique", - "type": "text" - }, - { - "width": "15%", - "source": "surveyMethodology", - "title": "Survey methodology", - "type": "text" }, { - "width": "15%", - "source": "surveyObjective", - "title": "Survey objective", - "type": "text" + "columns": [ + { + "width": "40%", + "source": "typesOfHabitat", + "title": "Types of habitat", + "type": "selectOne" + }, + { + "width": "60%", + "source": "habitatCondition", + "title": "Condition of habitat", + "type": "text" + } + ], + "userAddedRows": true, + "disableTableUpload": true, + "source": "habitatConditionSurveySpeciesTable", + "type": "table" } - ], - "userAddedRows": true, - "disableTableUpload": true, - "source": "floraSurveySpeciesTable", - "type": "table" + ] } ] }, @@ -9397,7 +15804,7 @@ "items": [ { "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { "preLabel": "Data have been uploaded", @@ -9436,211 +15843,73 @@ ] }, "modelName": null, - "templateName": "nhtFloraSurvey", + "templateName": "nhtHabitatConditionAssessmentSurvey", "optional": true, "optionalQuestionText": null, - "title": "Flora survey", + "title": "Habitat condition assessment", "collapsibleHeading": null, - "name": "NHT - Flora survey", + "name": "NHT - Habitat condition assessment", "description": null }, { "collapsedByDefault": false, "template": { + "title": "Identifying and Prioritising the Location of Potential Sites", + "modelName": "NHT - Identifying sites", "dataModel": [ - - { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { + "allowRowDelete": "false", "columns": [ { "dataType": "text", - "name": "initialOrMaintained", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", "constraints": [ - "Initial", - "Maintained" + "Individuals", + "Groups" ], "validate": "required" }, { - "dataType": "feature", - "name": "implementationSite" - }, - { - "computed": { - "expression": "$geom.areaHa(implementationSite)" - }, - "dataType": "number", - "name": "calculatedAreaImplementedHa", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "areaImplementedInvoicedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "computed": { - "expression": "$geom.lengthKm(implementationSite)" - }, "dataType": "number", - "name": "calculatedLengthImplementedKm", - "units": "ha", - "decimalPlaces": 3, + "name": "participationIndividualNumber", + "defaultValue": 0, "behaviour": [ { - "condition": "lengthImplementedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The length must be mapped", - "validate": "required,min[0.0001]" - } + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } - ] - }, - { - "defaultValue": { - "expression": "$geom.areaHa(implementationSite)", - "type": "computed" - }, - "dataType": "number", - "name": "areaImplementedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "required,min[0]" - }, - { - "defaultValue": { - "expression": "$geom.lengthKm(implementationSite)", - "type": "computed" - }, - "dataType": "number", - "name": "lengthImplementedKm", - "units": "km", - "decimalPlaces": 3, + ], "validate": "required,min[0]" }, { "dataType": "text", - "name": "mappingNotAlignedReason", + "name": "participationGroupNumber", "behaviour": [ { - "condition": "not (within(calculatedAreaImplementedHa, areaImplementedHa, 0.1))", - "type": "visible" + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } ], "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "mappingNotAlignedComments" - , - "behaviour": [ - { - "condition": "\"Other\" == mappingNotAlignedReason", - "type": "visible" - } - ], - "validate": "required,maxSize[300]" + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] }, { - "dataType": "document", - "name": "extraMappingDetails", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, "behaviour": [ { - "condition": "not (within(calculatedAreaImplementedHa, areaImplementedHa, 0.1)) or roundTo(areaImplementedHa, 2) != roundTo(areaImplementedInvoicedHa, 2)", - "type": "visible" + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } ], - "validate": "required" - }, - { - "dataType": "number", - "name": "areaInvoicedHa", - "units": "ha", - "decimalPlaces": 3, "validate": [ { "rule": "required" @@ -9649,221 +15918,408 @@ "rule": "min[0]" }, { - "rule": "max", "param": { - "type": "computed", - "expression": "areaControlledHa" - } + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" } ] }, { - "dataType": "number", - "name": "lengthInvoicedKm", - "units": "km", - "decimalPlaces": 3, + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], "validate": [ { "rule": "required" }, { - "rule": "min[0]" - }, - { - "rule": "max", "param": { - "type": "computed", - "expression": "lengthControlledKm" - } + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" } ] }, { "dataType": "text", - "name": "invoicedNotActualReason", - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required", - "behaviour": [ - { - "condition": "roundTo(areaControlledHa, 2) != roundTo(areaInvoicedHa, 2)", - "type": "if" - } - ] + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableIpl" + }, + { + "columns": [ + { + "dataType": "text", + "name": "sitesHaveBeenIdentified", + "description": "", + "validate": "required,maxSize[300]" }, { "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ - { - "type": "if", - "condition": "roundTo(areaControlledHa, 2) != roundTo(areaInvoicedHa, 2) and \"Other\" == invoicedNotActualReason" - } - ], + "name": "methodsUsedToIdentify", + "description": "", "validate": "required,maxSize[300]" }, { "dataType": "text", - "name": "invoicedLengthNotActualReason", - "constraints": [ - "Work was undertaken over a greater length than will be invoiced for", - "Other" - ], + "name": "outcomesAchievement", + "description": "", + "validate": "required,maxSize[300]" + }, + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", "validate": "required", - "behaviour": [ - { - "condition": "roundTo(lengthControlledKm, 2) != roundTo(lengthInvoicedKm, 2)", - "type": "if" + "constraints": { + "textProperty": "label", + "valueProperty": "label", + "type": "pre-populated", + "config": { + "source": { + "url": "/project/outcomesByScores", + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + }, + { + "expression": "scores", + "name": "scoreIds", + "type": "computed" + } + ] + } } - ] + } }, { + "name": "investmentPriorities2", "dataType": "text", - "name": "invoicedLengthNotActualComments", - "behaviour": [ - { - "type": "if", - "condition": "roundTo(lengthControlledKm, 2) != roundTo(lengthInvoicedKm, 2) and \"Other\" == invoicedLengthNotActualReason" + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } } - ], - "validate": "required,maxSize[300]" + } }, { - "dataType": "document", - "name": "extraMappingDetails", - "validate": "required", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "dataType": "text", + "name": "otherInvestmentPriority", + "description": "Describe the investment priority (if Other) was selected", "behaviour": [ { - "condition": "not (within(areaControlledHa, siteCalculatedAreaHa, 0.1) and within(lengthControlledKm, siteCalculatedLengthKm, 0.1)) or roundTo(areaControlledHa, 2) != roundTo(areaInvoicedHa, 2)", - "type": "if" + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" } ] }, { - "dataType": "number", - "name": "noStructuresInstalled", - "validate": "required" - }, - { - "dataType": "number", - "name": "invoiceLocationsStructures", + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], "validate": "required" }, { "columns": [ { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", + "dataType": "feature", + "name": "sitesAssessed", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping.", "validate": "required" }, { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", - "validate": "required" + "computed": { + "expression": "$geom.areaHa(sitesAssessed)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHaAssessed", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesAssessed)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKmAssessed", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ + { + "condition": "lengthTreatedKmAssessed > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHaAssessed" + }, + "dataType": "number", + "name": "areaTreatedHaAssessed", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" }, { "dataType": "text", - "name": "habitatAugmentationType", - "description": "", + "name": "mappingNotAlignedReasonAssessed", "constraints": [ - "Artificial fauna movement devices", - "Artificial nesting or roosting habitat (incl. tiles, fence posts)", - "Environmental thinning", - "Improving fish passage", - "Natural features (rocks, logs)", + "Mapped area simplifies more complex area/s where work was undertaken during this period", "Other" ], - "validate": "required" + "validate": "required", + "behaviour": [ + { + "condition": "not (within(areaTreatedHaAssessed, calculatedAreaTreatedHaAssessed, 0.1) and within(lengthTreatedKmAssessed, calculatedLengthTreatedKmAssessed, 0.1))", + "type": "visible" + } + ] }, { "dataType": "text", - "name": "otherHabitatAugmentationType", - "description": "Please specify the habitat augmentation type if Other (specify in notes) was selected in the Type of habitat augmentation column.", + "name": "mappingNotAlignedCommentsAssessed", + "validate": "required,maxSize[100]", "behaviour": [ { - "condition": "habitatAugmentationType == \"Other\"", + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReasonAssessed" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetailsAssessed", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHaAssessed, calculatedAreaTreatedHaAssessed, 0.1) and within(lengthTreatedKmAssessed, calculatedLengthTreatedKmAssessed, 0.1))", "type": "visible" } - ], - "validate": "required,maxSize[100]" + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "$geom.lengthKm(sitesAssessed)" + }, + "dataType": "number", + "name": "lengthTreatedKmAssessed", + "units": "km", + "decimalPlaces": 3 }, { "dataType": "text", - "name": "habitatAugmentationObjective", + "name": "assessedSitesName", "description": "", "validate": "required,maxSize[300]" }, + { "dataType": "feature", - "name": "sitesBenefittedByHabitatAugmentation" + "name": "sitesIdentified", + "validate": [ + { + "rule": "required" + } + ] }, { "computed": { - "expression": "$geom.areaHa(sitesBenefittedByHabitatAugmentation)" + "expression": "$geom.areaHa(sitesIdentified)" }, "dataType": "number", - "name": "areaBenefittedByHabitatAugmentationHa", + "name": "calculatedAreaTreatedHaIdentified", "units": "ha", "decimalPlaces": 3 }, { - "dataType": "text", - "name": "evidenceOfBenefit", - "validate": "maxSize[300]" + "computed": { + "expression": "$geom.lengthKm(sitesIdentified)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKmIdentified", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ + { + "condition": "lengthTreatedKmIdentified > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHaIdentified" + }, + "dataType": "number", + "name": "areaTreatedHaIdentified", + "units": "ha", + "decimalPlaces": 3, + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + } + ] }, { "dataType": "text", - "name": "investmentPrioritiesActivityRelates", - "description": "", - "validate": "required,maxSize[300]" + "name": "mappingNotAlignedReasonIdentified", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ + { + "condition": "not (within(areaTreatedHaIdentified, calculatedAreaTreatedHaIdentified, 0.1) and within(lengthTreatedKmIdentified, calculatedLengthTreatedKmIdentified, 0.1))", + "type": "visible" + } + ] }, { - "name": "relatedOutcomes", "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", + "name": "mappingNotAlignedCommentsIdentified", + "validate": "required,maxSize[100]", + "behaviour": [ + { + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReasonIdentified" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetailsIdentified", "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHaIdentified, calculatedAreaTreatedHaIdentified, 0.1) and within(lengthTreatedKmIdentified, calculatedLengthTreatedKmIdentified, 0.1))", + "type": "visible" } - } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "$geom.lengthKm(sitesIdentified)" + }, + "dataType": "number", + "name": "lengthTreatedKmIdentified", + "units": "km", + "decimalPlaces": 3 + }, + { + "dataType": "text", + "name": "identifiedSitesName", + "description": "", + "validate": "maxSize[300]" } ], "dataType": "list", - "name": "habitatAugmentationDetails" + "name": "potentialSitesSurveyBaselineTable" + }, + { + "dataType": "number", + "name": "rowCount", + "decimalPlaces": 0, + "computed": { + "expression": "sum(potentialSitesSurveyBaselineTable, \"assessedSitesName ? 1 : 0\")" + } } ], "dataType": "list", - "name": "habitatAugmentationAreas" + "name": "potentialSiteSurveys", + "minSize": 1 }, { - "name": "habitatSurveyCountHeader", - "type": "number", + "dataType": "number", + "name": "totalPotentialSites", + "validate": "min[0]", "decimalPlaces": 0, "computed": { - "expression": "count(habitatAugmentationAreas, \"relatedOutcomes\")" + "expression": "sum(potentialSiteSurveys, \"rowCount\")" } }, + { + "dataType": "number", + "name": "totalPotentialSitesInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalPotentialSites", + "type": "computed" + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "text", + "name": "totalInvoicedIdentifyingMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalPotentialSitesInvoiced < +totalPotentialSites", + "type": "enable" + } + ] + }, { "dataType": "text", "name": "comments", @@ -9876,12 +16332,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -9890,469 +16346,505 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Habitat augmentation", - "title": "Habitat augmentation", "viewModel": [ { - "columns": [ + "type": "section", + "items": [ { - "width": "10%", - "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", - "type": "selectOne" + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, + "columns": [ + { + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", + "type": "selectOne" + }, + { + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableIpl", + "type": "table" }, { - "width": "20%", - "type": "col", - "title": "Total Number of people delivering this service", + "type": "row", "items": [ { - "source": "participationIndividualNumber", - "type": "number" - }, - { - "source": "participationGroupNumber", - "type": "selectOne" + "type": "literal", + "source": "Totals Summary" } ] }, { - "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "type": "row", "items": [ { - "source": "firstNationIndividualNumber", - "type": "number" + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total number of potential sites assessed during this reporting period", + "source": "totalPotentialSites", + "type": "number" + } + ] + } + ] }, { - "source": "firstNationGroupNumber", - "type": "selectOne" + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total number of potential sites assessed invoiced for during this reporting period", + "source": "totalPotentialSitesInvoiced", + "type": "number" + } + ] + } + ] } ] }, - { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" - } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" - }, - { - "preLabel": "Number of Habitat Augmentation surveys conducted:", - "noEdit": true, - "type": "number", - "source": "habitatSurveyCountHeader" - }, - { - "addRowText": "Add a new controlled area", - "userAddedRows": true, - "source": "habitatAugmentationAreas", - "type": "repeat", - "items": [ { "type": "row", - "css": "border-bottom", "items": [ { - "preLabel": "Initial or Maintenance Treatment?", - "css": "span3", - "source": "initialOrMaintained", - "type": "selectOne" + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedIdentifyingMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" } ] }, { - "type": "row", - "css": "border-bottom", + "addRowText": "Add a new outcome statement and assessed sites", + "userAddedRows": true, + "source": "potentialSiteSurveys", + "type": "repeat", "items": [ { - "type": "col", - "css": "span2 col-border-right", + "type": "row", "items": [ { - "type": "row", + "css": "span3", + "type": "col", "items": [ { - "source": "implementationSite", - "type": "feature", - "preLabel": "Site/s of habitat augmentation" + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "calculatedAreaImplementedHa", - "type": "number", - "readonly": true, - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] } ] }, { - "type": "row", + "css": "span3", + "type": "col", "items": [ { - "source": "calculatedLengthImplementedKm", - "type": "number", - "readonly": true, - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "sitesHaveBeenIdentified", + "preLabel": "What have the sites identified for?", + "type": "text" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" + "type": "row", + "items": [ + { + "source": "methodsUsedToIdentify", + "preLabel": "What method/s were used to identify and prioritise?", + "type": "text" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "outcomesAchievement", + "preLabel": "How do they contribute to the achievement of the outcome statement/s?", + "type": "textarea" + } + ] } ] } ] }, { - "type": "col", - "css": "span2 col-border-right", - "items": [ + "columns": [ { - "type": "row", + "width": "15%", + "title": "Site/s assessed*", + "helpText": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping.", + "type": "col", "items": [ { - "preLabel": "Actual area (ha) / length (km) of habitat augmentation", - "helpText": "Manually enter correct figure for this reporting period if different to mapped value.", - "source": "areaImplementedHa", + "source": "sitesAssessed", + "type": "feature" + }, + { + "source": "calculatedAreaTreatedHaAssessed", "type": "number", "displayOptions": { "displayUnits": true - } + }, + "readonly": "readonly" + }, + { + "source": "calculatedLengthTreatedKmAssessed", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetailsAssessed", + "type": "document" + } + ] } ] }, { - "type": "row", + "width": "15%", + "type": "col", + "title": "Actual area (ha) / length (km) of assessed site*", + "helpText": "Manually enter correct figure for this reporting period if different to mapped value.", "items": [ { - "preLabel": "", - "source": "lengthImplementedKm", + "source": "areaTreatedHaAssessed", + "type": "number", + "displayOptions": { + "displayUnits": true + } + }, + { + "source": "lengthTreatedKmAssessed", "type": "number", - "validate": "required", "displayOptions": { "displayUnits": true } + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReasonAssessed", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedCommentsAssessed", + "type": "textarea", + "rows": 5 + } + ] } ] }, { - "type": "row", - "items": [ - { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" - } - ] + "width": "20%", + "source": "assessedSitesName", + "title": "Name of assessed site", + "type": "text" }, { - "type": "row", + "width": "15%", + "title": "Site/s identified and prioritised", + "helpText": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping.", + "type": "col", "items": [ { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 - } - ] - } - ] - }, - { - "type": "col", - "css": "span2 col-border-right", - "items": [ - { - "type": "row", - "items": [ + "source": "sitesIdentified", + "type": "feature" + }, + { + "source": "calculatedAreaTreatedHaIdentified", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + }, { - "preLabel": "Invoiced area (ha) / length (km) treated of habitat augmentation", - "helpText": "Enter the amount you will invoice for during this reporting period.", - "source": "areaInvoicedHa", + "source": "calculatedLengthTreatedKmIdentified", "type": "number", "displayOptions": { "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedNotActualReason", - "type": "selectOne" - } - ] - }, - { - "type": "row", - "items": [ + }, + "readonly": "readonly" + }, { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedNotActualComments", - "type": "textarea", - "rows": 5 + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetailsIdentified", + "type": "document" + } + ] } ] }, { - "type": "row", + "width": "15%", + "type": "col", + "title": "Actual area (ha) / length (km) of identified and prioritised site", + "helpText": "Manually enter correct figure for this reporting period if different to mapped value.", "items": [ { - "preLabel": "", - "helpText": "", - "source": "lengthInvoicedKm", + "source": "areaTreatedHaIdentified", "type": "number", "displayOptions": { "displayUnits": true } - } - ] - }, - { - "type": "row", - "items": [ + }, { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedLengthNotActualReason", - "type": "selectOne" - } - ] - }, - { - "type": "row", - "items": [ + "source": "lengthTreatedKmIdentified", + "type": "number", + "displayOptions": { + "displayUnits": true + } + }, { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedLengthNotActualComments", - "type": "textarea", - "rows": 5 - } - ] - } - ] - }, - { - "type": "col", - "css": "span2 col-border-right", - "items": [ - { - "type": "row", - "items": [ + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReasonIdentified", + "type": "selectOne" + } + ] + }, { - "source": "noStructuresInstalled", - "preLabel": "Number of structures installed/maintained", - "type": "number" + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedCommentsIdentified", + "type": "textarea", + "rows": 5 + } + ] } ] - } - ] - }, - { - "type": "col", - "css": "span2 col-border-right", - "items": [ + }, { - "type": "row", - "items": [ - { - "source": "invoiceLocationsStructures", - "preLabel": "Invoiced number of locations where structures were installed/maintained", - "type": "number" - } - ] + "width": "20%", + "source": "identifiedSitesName", + "title": "Name of identified and prioritised site", + "type": "textarea" } - ] + ], + "addRowText": "Add a new assessed site to this outcome", + "userAddedRows": true, + "disableTableUpload": true, + "source": "potentialSitesSurveyBaselineTable", + "type": "table" } ] }, { - "columns": [ - { - "title": "Activities start date", - "source": "activitiesStartDate", - "type": "date", - "width": "10%" - }, - { - "title": "Activities end date", - "source": "activitiesEndDate", - "type": "date", - "width": "10%" - }, - { - "width": "10%", - "title": "Type of habitat augmentation / installed", - "type": "col", - "items": [ - { - "type": "row", - "items": [ - { - "source": "habitatAugmentationType", - "type": "select2" - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "otherHabitatAugmentationType", - "type": "textarea" - } - ] - } - ] - }, - { - "width": "15%", - "source": "habitatAugmentationObjective", - "title": "Purpose of habitat augmentation", - "type": "textarea" - }, - { - "width": "15%", - "title": "Please map any off-site area/s if they benefitted from this habitat augmentation", - "type": "col", - "items": [ - { - "source": "sitesBenefittedByHabitatAugmentation", - "type": "feature" - }, - { - "source": "areaBenefittedByHabitatAugmentationHa", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" - } - ] - }, - { - "width": "15%", - "source": "evidenceOfBenefit", - "title": "If off-site area was mapped please provide a description on the evidence available to reflect this benefit", - "type": "textarea" - }, - { - "width": "15%", - "source": "investmentPrioritiesActivityRelates", - "title": "Which investment priority does this activity relate to?", - "type": "text" - }, + "type": "row", + "items": [ { - "width": "15%", - "source": "relatedOutcomes", - "type": "selectOne", - "title": "Which outcome statement/s relates to this survey?" + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" } - ], - "userAddedRows": false, - "source": "habitatAugmentationDetails", - "type": "table" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" - } - ] - }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + ] }, { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" - } - ] - }, - { - "type": "row", - "items": [ + "type": "row", + "items": [ + { + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] + }, { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." - } - ] - }, - { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ + "type": "row", + "items": [ + { + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" + }, + { + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, { - "title": "Attached documents", - "source": "attachments", - "type": "document" + "type": "row", + "items": [ + { + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, + { + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] } ] } ] }, "modelName": null, - "templateName": "nhtHabitatAugmentation", + "templateName": "nhtIdentifyingSites", "optional": true, "optionalQuestionText": null, - "title": "Habitat augmentation", + "title": "Identifying and Prioritising the Location of Potential Sites", "collapsibleHeading": null, - "name": "NHT - Habitat augmentation", + "name": "NHT - Identifying sites", "description": null }, { @@ -10360,197 +16852,164 @@ "template": { "dataModel": [ { + "allowRowDelete": "false", "columns": [ { - "columns": [ - { - "dataType": "species", - "name": "species", - "validate": "required" - }, - { - "dataType": "text", - "name": "habitatCondition", - "description": "", - "validate": "required,maxSize[300]" - }, + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ { - "name": "investmentPriorities2", - "dataType": "stringList", - "validate": "required", - "constraints": { - "type": "pre-populated", - "config": { - "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" - } - } - } - }, + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ { - "dataType": "text", - "name": "otherInvestmentPriority", - "behaviour": [ - { - "type": "enable", - "condition": "\"Other\" in investmentPriorities2" - } - ] - }, + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ { - "dataType": "stringList", - "name": "ternSurveyTechnique", - "validate": "required", - "constraints": [ - "Tern Survey technique 1", - "Tern Survey technique 1", - "Tern Survey technique 1", - "Other" - ] - }, + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ { - "dataType": "text", - "description": "Please describe the Survey technique if other was selected.", - "name": "otherTernSurveyTechnique", - "behaviour": [ - { - "condition": "ternSurveyTechnique == \"Other\"", - "type": "enable_and_clear" - } - ], - "validate": "required" + "rule": "required" }, { - "dataType": "text", - "name": "surveyMethodology", - "description": "Provide more details on what is being done", - "validate": "required,maxSize[3000]" + "rule": "min[0]" }, { - "dataType": "text", - "name": "surveyObjective", - "description": "How will the information obtained from the survey be used", - "validate": "required,maxSize[3000]" + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" } - ], - "dataType": "list", - "name": "habitatConditionBaselineTable" + ] }, { "dataType": "text", - "name": "baselineOrIndicatorSurvey", - "description": "", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], "constraints": [ - "Baseline", - "Indicator" + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" ], - "validate": "required" - }, - { - "name": "projectBaseline", - "dataType": "text", - "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", - "validate": "required", - "constraints": { - "textProperty": "baseline", - "valueProperty": "code", - "type": "pre-populated", - "excludePath": "projectBaseline", - "config": { - "source": { - "context-path": "owner.custom.details.baseline.rows" - } + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" } - } + ] }, { - "name": "datasetSupports", "dataType": "text", - "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "name", - "valueProperty": "dataSetId", - "type": "pre-populated", - "config": { - "source": { - "context-path": "owner.custom.dataSets" - } - } - } - }, + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableIfm" + }, + { + "columns": [ { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } + "columns": [ + { + "dataType": "feature", + "name": "sitesBenefittedByFireAction" + }, + { + "computed": { + "expression": "$geom.areaHa(sitesBenefittedByFireAction)" + }, + "dataType": "number", + "name": "areaBenefittedByFireActionHa" + }, + { + "dataType": "text", + "name": "evidenceOfBenefit", + "validate": "maxSize[300]" } - } - }, - { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" + ], + "dataType": "list", + "name": "fireManagementDetails" }, { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", + "dataType": "text", + "name": "initialOrFollowup", + "constraints": [ + "Initial", + "Follow-up" + ], "validate": "required" }, { "dataType": "feature", - "name": "sitesTreated", - "description": "Manually enter correct figure for this reporting period if different to mapped value" + "name": "sitesTreatedByFireManagement", + "description": "Mapping field to be done and Area (ha) field be auto-calculated from mapping." }, { "computed": { - "expression": "$geom.areaHa(sitesTreated)" + "expression": "$geom.areaHa(sitesTreatedByFireManagement)" }, "dataType": "number", "name": "calculatedAreaTreatedHa", "units": "ha", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "areaInvoicedTreatedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The managed area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] + "decimalPlaces": 3 }, { "computed": { - "expression": "$geom.lengthKm(sitesTreated)" + "expression": "$geom.lengthKm(sitesTreatedByFireManagement)" }, "dataType": "number", "name": "calculatedLengthTreatedKm", @@ -10574,6 +17033,7 @@ }, "dataType": "number", "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", "units": "ha", "decimalPlaces": 3, "validate": "required,min[0]" @@ -10588,15 +17048,15 @@ "validate": "required", "behaviour": [ { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1))", - "type": "visible" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" } ] }, { "dataType": "text", "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", + "validate": "required,maxSize[100]", "behaviour": [ { "type": "visible", @@ -10611,165 +17071,186 @@ "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", "behaviour": [ { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1)) or roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" } ] }, { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, "dataType": "number", - "name": "areaInvoicedTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": [ - { - "rule": "min[0]" - }, - { - "rule": "max", - "param": { - "type": "computed", - "expression": "areaTreatedHa" - } - } - ] + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 }, { "dataType": "text", - "name": "invoicedNotActualReason", + "name": "fireManagementType", + "description": "", "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", + "Cultural burn", + "Ecological burn", + "Grading", + "Hazard reduction burn", + "Herbicide", + "Slashing", "Other" ], - "validate": "required", - "behaviour": [ - { - "condition": "roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" - } - ] + "validate": "required" }, { "dataType": "text", - "name": "invoicedNotActualComments", + "name": "otherFireManagementType", "behaviour": [ { - "type": "visible", - "condition": "\"Other\" == invoicedNotActualReason" + "condition": "fireManagementType == \"Other\"", + "type": "enable" } ], - "validate": "required,maxSize[300]" + "validate": "required,maxSize[100]" }, { - "defaultValue": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)" + "dataType": "feature", + "name": "sitesBenefittedByFireAction" + }, + { + "computed": { + "expression": "$geom.areaHa(sitesBenefittedByFireAction)" }, "dataType": "number", - "name": "lengthTreatedKm", - "units": "km", - "decimalPlaces": 3, - "validate": [ - { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*0.9" + "name": "areaBenefittedByFireActionHa2", + "units": "ha", + "decimalPlaces": 3 + }, + { + "dataType": "text", + "name": "evidenceOfBenefit", + "validate": "maxSize[300]" + }, + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" } - }, - { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*1.1" + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" } } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } ] } ], "dataType": "list", - "name": "conditionAssessmentSurveys", - "minSize": 1 + "name": "fireManagementAreasControlled" }, { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" + "dataType": "number", + "name": "totalAreaTreatedFireMgmtInitial", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(fireManagementAreasControlled, \"initialOrFollowup == 'Initial' ? areaTreatedHa : 0\")" + } }, { "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "decimalPlaces": 3, + "name": "totalAreaTreatedFireMgmtInitialInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaTreatedFireMgmtInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" } ], - "validate": "required,min[0]" + "defaultValue": "" }, { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + "dataType": "number", + "name": "totalAreaTreatedFireMgmtFollowup", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(fireManagementAreasControlled, \"initialOrFollowup == 'Follow-up' ? areaTreatedHa : 0\")" + } }, { "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "decimalPlaces": 3, + "name": "totalAreaTreatedFireMgmtFollowupInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaTreatedFireMgmtFollowup", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" } ], - "validate": "required,min[0]" + "defaultValue": "" }, { "dataType": "text", - "name": "firstNationGroupNumber", + "name": "totalInvoicedFireMgmtMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", "behaviour": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", + "condition": "+totalAreaTreatedFireMgmtInitialInvoiced < +totalAreaTreatedFireMgmtInitial or +totalAreaTreatedFireMgmtFollowupInvoiced < +totalAreaTreatedFireMgmtFollowup", "type": "enable" } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "name": "numberHabitatConditionAssessmentSurveysConducted", - "type": "number", - "decimalPlaces": 0, - "computed": { - "expression": "count(conditionAssessmentSurveys, \"baselineOrIndicatorSurvey\")" - } + ] }, { "dataType": "text", @@ -10783,12 +17264,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -10797,497 +17278,608 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Habitat condition assessment", - "title": "Habitat condition assessment", + "modelName": "NHT - Fire management", + "title": "Implementing Fire Management Actions", "viewModel": [ { - "type": "section", + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, + "columns": [ + { + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", + "type": "selectOne" + }, + { + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableIfm", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total area (ha) treated by fire management action/s (initial) during this reporting period", + "source": "totalAreaTreatedFireMgmtInitial", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total area (ha) treated by fire management action/s (initial) invoiced for during this reporting period", + "source": "totalAreaTreatedFireMgmtInitialInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total area (ha) treated by fire management action/s (follow up) during this reporting period", + "source": "totalAreaTreatedFireMgmtFollowup", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total area (ha) treated by fire management action/s (follow up) invoiced for during this reporting period", + "source": "totalAreaTreatedFireMgmtFollowupInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedFireMgmtMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add a new area of fire management actions", + "userAddedRows": true, + "source": "fireManagementAreasControlled", + "type": "repeat", "items": [ { - "columns": [ - { - "width": "10%", - "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", - "type": "selectOne" - }, + "type": "row", + "items": [ { - "width": "20%", + "css": "span3", "type": "col", - "title": "Total Number of people delivering this service", "items": [ { - "source": "participationIndividualNumber", - "type": "number" - }, - { - "source": "participationGroupNumber", - "type": "selectOne" + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] } ] }, { "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "css": "span3 col-border-right", "items": [ { - "source": "firstNationIndividualNumber", - "type": "number" - }, - { - "source": "firstNationGroupNumber", - "type": "selectOne" + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] } ] - }, - { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" - }, - { - "preLabel": "Number of Habitat Condition Assessment surveys conducted:", - "noEdit": true, - "type": "number", - "source": "numberHabitatConditionAssessmentSurveysConducted" + ] }, { - "addRowText": "New survey site", - "userAddedRows": true, - "source": "conditionAssessmentSurveys", - "type": "repeat", + "type": "row", + "css": "border-bottom", "items": [ { - "type": "row", - "css": "border-bottom", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "baselineOrIndicatorSurvey", - "type": "selectOne", - "preLabel": "Baseline survey or indicator (follow-up) survey?" - } - ] + "source": "initialOrFollowup", + "preLabel": "Initial or follow-up?", + "type": "selectOne" } ] - }, + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "projectBaseline", - "type": "selectOne", - "preLabel": "Which project baseline relates to this survey?" - } - ] + "preLabel": "Site/s treated by fire management action", + "source": "sitesTreatedByFireManagement", + "type": "feature" } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "datasetSupports", - "type": "select2Many", - "preLabel": "What dataset supports this?" - } - ] + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "relatedOutcomes", - "type": "selectOne", - "preLabel": "Which outcome statement/s relates to this survey?" - } - ] + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" } ] - }, + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Activities start date", - "source": "activitiesStartDate", - "type": "date" - } - ] + "preLabel": "Actual area (ha) treated by fire management action", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Activities end date", - "source": "activitiesEndDate", - "type": "date" - } - ] + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Sites surveyed for habitat condition assessment", - "source": "sitesTreated", - "type": "feature" - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "calculatedAreaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "calculatedLengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" - } - ] + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 } ] - }, + } + ] + } + ] + }, + { + "type": "row", + "css": "border-bottom", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Actual area (ha) / length (km) covered by habitatat condition assessment survey", - "source": "areaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "lengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" - } - ] - }, + "source": "fireManagementType", + "preLabel": "Type of fire management action", + "type": "select2" + } + ] + }, + { + "type": "row", + "items": [ { - "type": "row", - "items": [ - { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 - } - ] + "source": "otherFireManagementType", + "preLabel": "", + "type": "text" } ] } ] }, { - "columns": [ - { - "width": "20%", - "source": "species", - "title": "Type of habitat", - "type": "speciesSelect" - }, - { - "width": "15%", - "source": "habitatCondition", - "title": "Condition of habitat", - "type": "text" - }, + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "width": "15%", - "type": "col", - "title": "Which investment priority does this activity relate to?", + "type": "row", "items": [ { - "source": "investmentPriorities2", - "type": "select2Many" - }, - { - "source": "otherInvestmentPriority", - "type": "text" + "source": "sitesBenefittedByFireAction", + "type": "feature", + "preLabel": "Please map any off-site area/s if they benefitted from this fire management action" } ] }, { - "width": "10%", - "title": "Survey technique", - "source": "ternSurveyTechnique", - "type": "selectOne" - }, - { - "width": "10%", - "title": "Survey technique (if Other)", - "source": "otherTernSurveyTechnique", - "type": "text" - }, - { - "width": "15%", - "source": "surveyMethodology", - "title": "Survey methodology", - "type": "text" - }, + "type": "row", + "items": [ + { + "source": "areaBenefittedByFireActionHa2", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "width": "15%", - "source": "surveyObjective", - "title": "Survey objective", - "type": "text" + "type": "row", + "items": [ + { + "source": "evidenceOfBenefit", + "type": "textarea", + "preLabel": "If off-site area was mapped please provide a description on the evidence available to reflect this benefit" + } + ] } - ], - "userAddedRows": true, - "disableTableUpload": true, - "source": "habitatConditionBaselineTable", - "type": "table" + ] } ] - }, + } + ] + }, + { + "type": "row", + "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" - } - ] - }, + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" + } + ] + }, + { + "type": "row", + "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" - } - ] - }, + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] + }, + { + "type": "row", + "items": [ { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." - }, - { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" - } - ] + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { - "type": "row", - "items": [ - { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." - } - ] - }, + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, + { + "type": "row", + "items": [ { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] - }, + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, + { + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ - { - "title": "Attached documents", - "source": "attachments", - "type": "document" - } - ] + "title": "Attached documents", + "source": "attachments", + "type": "document" } ] } ] }, "modelName": null, - "templateName": "nhtHabitatConditionAssessmentSurvey", + "templateName": "nhtFireManagement", "optional": true, "optionalQuestionText": null, - "title": "Habitat condition assessment", + "title": "Fire management actions", "collapsibleHeading": null, - "name": "NHT - Habitat condition assessment", + "name": "NHT - Fire management", "description": null }, { "collapsedByDefault": false, "template": { - "title": "Identifying the location of potential sites", - "modelName": "NHT - Identifying sites", "dataModel": [ { + "allowRowDelete": "false", "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, { "dataType": "number", - "name": "numberPotentialSitesAssessed", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], "validate": "required,min[0]" }, { "dataType": "text", - "name": "sitesHaveBeenIdentified", - "description": "", - "validate": "required,maxSize[300]" - }, + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableHyd" + }, + { + "columns": [ { "dataType": "text", - "name": "methodsUsedToIdentify", - "description": "", - "validate": "required,maxSize[300]" + "name": "initialOrFollowup", + "constraints": [ + "Initial", + "Follow-up" + ], + "validate": "required" }, { "name": "relatedOutcomes", "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", "validate": "required", "constraints": { "textProperty": "label", - "valueProperty": "label", + "valueProperty": "value", "type": "pre-populated", "config": { "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] + "context-path": "outcomes" } } } }, { "name": "investmentPriorities2", - "dataType": "stringList", + "dataType": "text", + "description": "", "validate": "required", "constraints": { + "textProperty": "label", + "valueProperty": "value", "type": "pre-populated", "config": { "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" + "context-path": "owner.investmentPriorities" } } } @@ -11303,283 +17895,227 @@ ] }, { - "columns": [ - { - "dataType": "feature", - "name": "sitesTreated", - "validate": [ - { - "rule": "required" - } - ] - }, - { - "computed": { - "expression": "$geom.areaHa(sitesTreated)" - }, - "dataType": "number", - "name": "calculatedAreaTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "areaInvoicedTreatedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The managed area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "computed": { - "expression": "$geom.lengthKm(sitesTreated)" - }, - "dataType": "number", - "name": "calculatedLengthTreatedKm", - "units": "km", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "lengthTreatedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The managed length must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "defaultValue": { - "type": "computed", - "expression": "calculatedAreaTreatedHa" - }, - "dataType": "number", - "name": "areaTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": [ - { - "rule": "required" - }, - { - "rule": "min[0]" - } - ] - }, - { - "dataType": "text", - "name": "mappingNotAlignedReason", - "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" - ], - "validate": "required", - "behaviour": [ - { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1))", - "type": "visible" - } - ] - }, - { - "dataType": "text", - "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", - "behaviour": [ - { - "type": "visible", - "condition": "\"Other\" == mappingNotAlignedReason" - } - ] - }, - { - "dataType": "document", - "name": "extraMappingDetails", - "validate": "required", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", - "behaviour": [ - { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1)) or roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" - } - ] - }, - { - "dataType": "text", - "name": "identifiedSitesName", - "description": "", - "validate": "required,maxSize[300]" - }, + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, + { + "dataType": "feature", + "name": "sitesOfHydrological", + "description": "Mapping field to be done and Area (ha) field be auto-calculated from mapping." + }, + { + "computed": { + "expression": "$geom.areaHa(sitesOfHydrological)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesOfHydrological)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ { - "dataType": "number", - "name": "areaInvoicedTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": [ - { - "rule": "required" - }, - { - "rule": "min[0]" - }, - { - "rule": "max", - "param": { - "type": "computed", - "expression": "areaTreatedHa" - } - } - ] - }, + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReason", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ { - "dataType": "text", - "name": "invoicedNotActualReason", - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required", - "behaviour": [ - { - "condition": "roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" - } - ] - }, + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1))", + "type": "if" + } + ] + }, + { + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ { - "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ - { - "type": "visible", - "condition": "\"Other\" == invoicedNotActualReason" - } - ], - "validate": "required,maxSize[300]" - }, + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ { - "defaultValue": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)" - }, - "dataType": "number", - "name": "lengthTreatedKm", - "units": "km", - "decimalPlaces": 3, - "validate": [ - { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*0.9" - } - }, - { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*1.1" - } - } - ] - }, + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1))", + "type": "if" + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { + "dataType": "number", + "name": "noTreatments", + "defaultValue": "", + "validate": "required,min[0]" + }, + { + "dataType": "number", + "name": "waterVolume", + "defaultValue": "", + "validate": "required,min[0]" + }, + { + "dataType": "number", + "name": "stormWaterVolume", + "defaultValue": "", + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "treatmentType", + "description": "", + "constraints": [ + "Removing barriers (e.g fish barriers)", + "Structure instalment or modification (e.g. weirs, flow gauging stations, fords, culverts)", + "Resnagging", + "Other" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "otherTreatmentType", + "behaviour": [ { - "dataType": "text", - "name": "assessedSitesName", - "description": "", - "validate": "required,maxSize[300]" + "condition": "treatmentType == \"Other\"", + "type": "enable" } ], - "dataType": "list", - "name": "potentialSitesSurveyBaselineTable" + "validate": "required,maxSize[300]" + }, + { + "dataType": "text", + "name": "treatmentObjective", + "description": "Aim of the action - e.g. hydrological regime change from X to Y.", + "validate": "required,maxSize[300]" } ], "dataType": "list", - "name": "potentialSiteSurveys", - "minSize": 1 + "name": "hydroAreasControlled" }, { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" + "dataType": "number", + "name": "totalHydroTreatmentsInitial", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(hydroAreasControlled, \"initialOrFollowup == 'Initial' ? noTreatments : 0\")" + } }, { "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "name": "totalHydroTreatmentsInitialInvoiced", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalHydroTreatmentsInitial", + "type": "computed" + }, + "rule": "max" } ], - "validate": "required,min[0]" + "defaultValue": "" }, { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + "dataType": "number", + "name": "totalHydroTreatmentsFollowup", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(hydroAreasControlled, \"initialOrFollowup == 'Follow-up' ? noTreatments : 0\")" + } }, { "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "name": "totalHydroTreatmentsFollowupInvoiced", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalHydroTreatmentsFollowup", + "type": "computed" + }, + "rule": "max" } ], - "validate": "required,min[0]" + "defaultValue": "" }, { "dataType": "text", - "name": "firstNationGroupNumber", + "name": "totalInvoicedIdentifyingMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", "behaviour": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", + "condition": "+totalHydroTreatmentsInitialInvoiced < +totalHydroTreatmentsInitial or +totalHydroTreatmentsFollowupInvoiced < +totalHydroTreatmentsFollowup", "type": "enable" } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "name": "numberPotentialSitesConducted", - "type": "number", - "decimalPlaces": 0, - "computed": { - "expression": "count(potentialSiteSurveys, \"baselineOrIndicatorSurvey\")" - } + ] }, { "dataType": "text", @@ -11593,12 +18129,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -11607,346 +18143,488 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], + "modelName": "NHT - Improving hydrological regimes", + "title": "Improving Hydrological Regimes for Site Eco-hydrology", "viewModel": [ { - "type": "section", + "type": "row", "items": [ { - "columns": [ + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, + "columns": [ + { + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", + "type": "selectOne" + }, + { + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ { - "width": "10%", - "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableHyd", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total number of treatments implemented to improve site eco-hydrology (initial) for this reporting period", + "source": "totalHydroTreatmentsInitial", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total number of treatments implemented to improve site eco-hydrology (initial) invoiced for this reporting period", + "source": "totalHydroTreatmentsInitialInvoiced", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total number of treatments implemented to improve site eco-hydrology (follow up) for this reporting period", + "source": "totalHydroTreatmentsFollowup", + "type": "number" + } + ] }, { - "width": "20%", + "type": "row", + "items": [ + { + "preLabel": "(iv) Total number of treatments implemented to improve site eco-hydrology (follow up) invoiced for this reporting period", + "source": "totalHydroTreatmentsFollowupInvoiced", + "type": "number" + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedIdentifyingMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add a new area treated to improve hydrological regimes", + "userAddedRows": true, + "source": "hydroAreasControlled", + "type": "repeat", + "items": [ + { + "type": "row", + "items": [ + { + "css": "span3 col-border-right", "type": "col", - "title": "Total Number of people delivering this service", "items": [ { - "source": "participationIndividualNumber", - "type": "number" - }, - { - "source": "participationGroupNumber", - "type": "selectOne" + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] } ] }, { "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "css": "span3 col-border-right", "items": [ { - "source": "firstNationIndividualNumber", - "type": "number" - }, - { - "source": "firstNationGroupNumber", - "type": "selectOne" + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] } ] }, { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" - } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" - }, - { - "preLabel": "Number of Potential sites conducted:", - "noEdit": true, - "type": "number", - "source": "numberPotentialSitesConducted" - }, - { - "addRowText": "New survey site", - "userAddedRows": true, - "source": "potentialSiteSurveys", - "type": "repeat", - "items": [ - { - "type": "row", - "css": "border-bottom", + "css": "span3 col-border-right", + "type": "col", "items": [ { - "type": "col", - "css": "span2 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "numberPotentialSitesAssessed", - "type": "number", - "preLabel": "Number of potential sites identified and prioritised" - } - ] + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" } ] - }, + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "sitesHaveBeenIdentified", - "preLabel": "What sites have been identified?", - "type": "text" - } - ] + "source": "initialOrFollowup", + "preLabel": "Initial or Follow-up?", + "type": "selectOne" } ] - }, + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "type": "col", - "css": "span2 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "methodsUsedToIdentify", - "preLabel": "What method/s were used to identify and prioritise?", - "type": "text" - } - ] + "preLabel": "Site/s where hydrological regimes have been improved", + "source": "sitesOfHydrological", + "type": "feature" } ] }, { - "type": "col", - "css": "span2 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "relatedOutcomes", - "type": "selectOne", - "preLabel": "Which outcome statement/s relates to this survey?" - } - ] + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "investmentPriorities2", - "preLabel": "Which investment priority does this activity relate to?", - "type": "select2Many" - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "otherInvestmentPriority", - "type": "text" - } - ] + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" } ] } ] }, { - "columns": [ + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "width": "25%", - "title": "Identified and prioritised sites", - "type": "col", + "type": "row", "items": [ { - "source": "sitesTreated", - "type": "feature" - }, - { - "source": "calculatedAreaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" - }, - { - "source": "calculatedLengthTreatedKm", + "preLabel": "Actual area (ha) where the hydrological regimes have been improved", + "source": "areaTreatedHa", "type": "number", "displayOptions": { "displayUnits": true - }, - "readonly": "readonly" - }, - { - "type": "row", - "items": [ - { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" - } - ] + } } ] }, { - "width": "25%", - "source": "identifiedSitesName", - "title": "Name of identified and prioritised site/s", - "type": "text" - }, - { - "width": "25%", - "type": "col", - "title": "Assessed sites", - "helpText": "", + "type": "row", "items": [ { - "source": "areaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, - { - "source": "lengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, - { - "type": "row", - "items": [ - { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" - } - ] - }, - { - "type": "row", - "items": [ - { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 - } - ] + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" } ] }, { - "width": "25%", - "source": "assessedSitesName", - "title": "Name of assessed site/s", - "type": "text" - } - ], - "userAddedRows": true, - "source": "potentialSitesSurveyBaselineTable", - "type": "table" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] + } + ] } ] }, { "type": "row", + "css": "border-bottom", "items": [ { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "noTreatments", + "preLabel": "Number of treatments implemented to improve site eco-hydrology", + "type": "number" + } + ] + } + ] }, { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "waterVolume", + "type": "number", + "preLabel": "Volume of water (in megalitres) introduced as a result of the intervention" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "stormWaterVolume", + "type": "number", + "preLabel": "Volume of stormwater (in megalitres) redirected or removed" + } + ] + } + ] } ] }, { "type": "row", + "css": "border-bottom", "items": [ { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "treatmentType", + "preLabel": "Type of treatment implemented to improve eco-hydrological treatment", + "type": "select2" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "otherTreatmentType", + "placeholder": "Type of treatment implemented (if Other)", + "type": "text" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "treatmentObjective", + "type": "textarea", + "preLabel": "Treatment objective" + } + ] + } + ] } ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ - { - "title": "Attached documents", - "source": "attachments", - "type": "document" - } - ] + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, + { + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" } ] } ] }, "modelName": null, - "templateName": "nhtIdentifyingSites", + "templateName": "nhtImprovingHydrologicalRegimes", "optional": true, "optionalQuestionText": null, - "title": "Identifying the location of potential sites", + "title": "Improving hydrological regimes", "collapsibleHeading": null, - "name": "NHT - Identifying sites", + "name": "NHT - Improving hydrological regimes", "description": null }, { @@ -11954,79 +18632,197 @@ "template": { "dataModel": [ { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "allowRowDelete": "false", + "columns": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" } ], - "validate": "required,min[0]" + "dataType": "list", + "name": "participationInformationTableIlm" }, { "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + "name": "comments", + "validate": "maxSize[1500]" + }, + { + "dataType": "image", + "name": "photographicEvidence" }, { + "dataType": "boolean", + "name": "dataUploaded", + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" + }, + { + "name": "projectAssuranceDetails", "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" + "validate": "required,maxSize[5000]" + }, + { + "dataType": "list", + "name": "assuranceDocuments", + "columns": [ + { + "dataType": "document", + "name": "attachments", + "description": "Please attach any Evidence of Service Delivery here." + } + ] }, { "columns": [ + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } + } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, { "dataType": "text", "name": "initialOrFollowup", @@ -12036,345 +18832,278 @@ ], "validate": "required" }, - { - "columns": [ - { - "dataType": "feature", - "name": "sitesTreated", - "validate": "required" - }, - { - "computed": { - "expression": "$geom.areaHa(sitesTreated)" - }, - "dataType": "number", - "name": "calculatedAreaTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "areaInvoicedTreatedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The managed area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "computed": { - "expression": "$geom.lengthKm(sitesTreated)" - }, - "dataType": "number", - "name": "calculatedLengthTreatedKm", - "units": "km", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "lengthTreatedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The managed length must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "defaultValue": { - "type": "computed", - "expression": "calculatedAreaTreatedHa" - }, - "dataType": "number", - "name": "areaTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "required,min[0]" - }, - { - "defaultValue": { - "type": "computed", - "expression": "calculatedLengthTreatedKm" - }, - "dataType": "number", - "name": "lengthTreatedKm", - "units": "km", - "decimalPlaces": 3, - "validate": "required,min[0]" - }, + "dataType": "feature", + "name": "sitesCoveredByPracticeChange", + "description": "Mapping field to be done and Area (ha) field be auto-calculated from mapping." + }, + { + "computed": { + "expression": "$geom.areaHa(sitesCoveredByPracticeChange)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesCoveredByPracticeChange)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ { - "dataType": "text", - "name": "mappingNotAlignedReason", - "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" - ], - "validate": "required", - "behaviour": [ - { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1))", - "type": "visible" - } - ] - }, + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReason", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ { - "dataType": "text", - "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", - "behaviour": [ - { - "type": "visible", - "condition": "\"Other\" == mappingNotAlignedReason" - } - ] - }, + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1))", + "type": "if" + } + ] + }, + { + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ { - "dataType": "document", - "name": "extraMappingDetails", - "validate": "required", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", - "behaviour": [ - { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1)) or roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" - } - ] - }, + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ { - "dataType": "number", - "name": "areaInvoicedTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": [ - { - "rule": "required" - }, - { - "rule": "min[0]" - }, - { - "rule": "max", - "param": { - "type": "computed", - "expression": "areaTreatedHa" - } - } - ] - }, + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1))", + "type": "if" + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { + "columns": [ { "dataType": "text", - "name": "invoicedNotActualReason", + "name": "practiceChangeType", + "description": "", "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", + "Fencing", + "Erosion management", + "Stocking rates", + "Watering arrangements", + "Paddock design", + "Rotation grazing", + "Permaculture", "Other" ], - "validate": "required", - "behaviour": [ - { - "condition": "roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" - } - ] + "validate": "required" }, { "dataType": "text", - "name": "invoicedNotActualComments", + "name": "otherPracticeChangeType", + "description": "Please specify the type of land management practice change if Other (specify in notes) was selected in the Type of land management practice change.", "behaviour": [ { - "type": "visible", - "condition": "\"Other\" == invoicedNotActualReason" + "condition": "practiceChangeType == \"Other\"", + "type": "enable" } ], - "validate": "required,maxSize[300]" - }, - { - "defaultValue": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)" - }, - "dataType": "number", - "name": "lengthTreatedKm", - "units": "km", - "decimalPlaces": 3, - "validate": [ - { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*0.9" - } - }, - { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*1.1" - } - } - ] + "validate": "required,maxSize[100]" }, { "dataType": "text", - "name": "fireManagementType", - "description": "", + "name": "industryType", "constraints": [ - "Cultural burn", - "Ecological burn", - "Grading", - "Hazard reduction burn", - "Herbicide", - "Slashing", - "Other" + "Broad acre cropping", + "Dairy", + "Horticulture", + "Grazing", + "Fisheries", + "Aquaculture", + "Environment" ], "validate": "required" }, { "dataType": "text", - "name": "otherFireManagementType", - "behaviour": [ - { - "condition": "fireManagementType == \"Other\"", - "type": "enable" - } - ], - "validate": "required,maxSize[100]" + "name": "practiceChangeObjective", + "description": "How will the practice change/s contribute to the area?", + "validate": "required,maxSize[300]" }, { "dataType": "feature", - "name": "sitesBenefittedByFireAction" + "name": "offSiteBenefitSites" }, { "computed": { - "expression": "$geom.areaHa(sitesBenefittedByFireAction)" + "expression": "$geom.areaHa(offSiteBenefitSites)" }, "dataType": "number", - "name": "areaBenefittedByFireActionHa" + "name": "offSiteBenefitAreaHa2", + "units": "ha", + "decimalPlaces": 3 }, { "dataType": "text", "name": "evidenceOfBenefit", "validate": "maxSize[300]" - }, - { - "name": "investmentPriorities2", - "dataType": "stringList", - "validate": "required", - "constraints": { - "type": "pre-populated", - "config": { - "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" - } - } - } - }, - { - "dataType": "text", - "name": "otherInvestmentPriority", - "behaviour": [ - { - "type": "enable", - "condition": "\"Other\" in investmentPriorities2" - } - ] - }, - { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } - } - } } ], "dataType": "list", - "name": "fireManagementDetails" + "name": "landManagementDetails" } ], "dataType": "list", - "name": "areasControlled" + "name": "landManagementAreasControlled" }, { - "name": "fireMgmtCountHeader", - "type": "number", - "decimalPlaces": 0, + "dataType": "number", + "name": "totalAreaPracticeChangeInitial", + "validate": "min[0]", + "decimalPlaces": 3, "computed": { - "expression": "count(areasControlled, \"relatedOutcomes\")" + "expression": "sum(landManagementAreasControlled, \"initialOrFollowup == 'Initial' ? areaTreatedHa : 0\")" } }, { - "dataType": "text", - "name": "comments", - "validate": "maxSize[1500]" + "dataType": "number", + "decimalPlaces": 3, + "name": "totalAreaPracticeChangeInitialInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaPracticeChangeInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" }, { - "dataType": "image", - "name": "photographicEvidence" + "dataType": "number", + "name": "totalAreaPracticeChangeFollowup", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(landManagementAreasControlled, \"initialOrFollowup == 'Follow-up' ? areaTreatedHa : 0\")" + } }, { - "dataType": "boolean", - "name": "dataUploaded", - "description": "" + "dataType": "number", + "decimalPlaces": 3, + "name": "totalAreaPracticeChangeInvoicedFollowup", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaPracticeChangeFollowup", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" }, { "dataType": "text", - "name": "projectAssuranceDetails", - "description": "" - }, - { - "dataType": "list", - "name": "assuranceDocuments", - "columns": [ + "name": "totalInvoicedPracticeChangeMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ { - "dataType": "document", - "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "condition": "+totalAreaPracticeChangeInitialInvoiced < +totalAreaPracticeChangeInitial or +totalAreaPracticeChangeInvoicedFollowup < +totalAreaPracticeChangeFollowup", + "type": "enable" } ] } ], - "modelName": "NHT - Fire management", - "title": "Implementing fire management actions", + "modelName": "NHT - Improving land management practices", + "title": "Improving Land Management Practices", "viewModel": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -12389,7 +19118,8 @@ { "type": "col", "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "firstNationIndividualNumber", @@ -12402,108 +19132,210 @@ ] }, { + "width": "20%", "source": "participationDetails", "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", "type": "textarea" } ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", + "source": "participationInformationTableIlm", "type": "table" }, { - "preLabel": "Number of Fire Management Actions surveys conducted:", - "noEdit": true, - "type": "number", - "source": "fireMgmtCountHeader" + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total area (ha) covered by practice change (initial) during this reporting period", + "source": "totalAreaPracticeChangeInitial", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total area (ha) covered by practice change (initial) invoiced for during this reporting period", + "source": "totalAreaPracticeChangeInitialInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total area (ha) covered by practice change (follow up) during this reporting period", + "source": "totalAreaPracticeChangeFollowup", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total area (ha) covered by practice change (follow up) invoiced for during this reporting period", + "source": "totalAreaPracticeChangeInvoicedFollowup", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedPracticeChangeMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] }, { - "addRowText": "Add a new controlled area", + "addRowText": "Add a new area of improved land management", "userAddedRows": true, - "source": "areasControlled", + "source": "landManagementAreasControlled", "type": "repeat", "items": [ { "type": "row", - "css": "border-bottom", "items": [ { - "preLabel": "Initial or follow-up?", "css": "span3", - "source": "initialOrFollowup", - "type": "selectOne" + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] } ] }, - { - "columns": [ + "type": "row", + "css": "border-bottom", + "items": [ { - "width": "10%", - "title": "Site/s treated by fire management action", "type": "col", + "css": "span3 col-border-right", "items": [ - { - "source": "sitesTreated", - "type": "feature" - }, - { - "source": "calculatedAreaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" - }, - { - "source": "calculatedLengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" - }, { "type": "row", "items": [ { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" + "source": "initialOrFollowup", + "preLabel": "Initial or follow-up?", + "type": "selectOne" } ] } ] - }, + } + ] + }, + { + "type": "row", + "css": "border-bottom", + "items": [ { - "width": "10%", "type": "col", - "title": "Actual area (ha) / length (km) treated by managment action", - "helpText": "Enter the amount you will invoice for during this reporting period.", + "css": "span3 col-border-right", "items": [ { - "source": "areaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, - { - "source": "lengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "preLabel": "Sites covered by practice change", + "source": "sitesCoveredByPracticeChange", + "type": "feature" + } + ] }, { "type": "row", "items": [ { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" } ] }, @@ -12511,34 +19343,37 @@ "type": "row", "items": [ { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" } ] } ] }, { - "width": "10%", "type": "col", - "title": "Invoiced area (ha) treated by management action", - "helpText": "Enter the amount you will invoice for during this reporting period.", + "css": "span3 col-border-right", "items": [ { - "source": "areaInvoicedTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) covered by practice change", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] }, { "type": "row", "items": [ { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedNotActualReason", + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", "type": "selectOne" } ] @@ -12548,158 +19383,164 @@ "items": [ { "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedNotActualComments", + "source": "mappingNotAlignedComments", "type": "textarea", "rows": 5 } ] } ] - }, + } + ] + }, + { + "columns": [ { - "width": "10%", - "title": "Type of fire management action", + "width": "20%", + "title": "Type of action", "type": "col", "items": [ { "type": "row", "items": [ { - "source": "fireManagementType", - "type": "select2" + "source": "practiceChangeType", + "type": "selectOne" } ] }, { - "source": "otherFireManagementType", + "source": "otherPracticeChangeType", + "title": "Type of action (if Other)", "type": "text" } ] }, { - "width": "15%", - "type": "col", - "title": "Please map any off-site area/s if they benefitted from this fire management action", - "items": [ - { - "source": "sitesBenefittedByFireAction", - "type": "feature", - "title": "Please map any off-site area/s if they benefitted from this fire management action" - }, - { - "source": "areaBenefittedByFireActionHa", - "type": "number", - "readonly": "readonly", - "title": "Area (ha) protected by fire management action" - } - ] + "width": "20%", + "source": "industryType", + "title": "Industry type", + "type": "selectOne" }, { - "width": "15%", - "source": "evidenceOfBenefit", - "type": "textarea", - "rows": 3, - "title": "If off-site area was mapped please provide a description on the evidence available to reflect this benefit" + "width": "35%", + "source": "practiceChangeObjective", + "title": "Purpose of improving land management practice", + "type": "textarea" }, { - "width": "15%", + "width": "25%", + "title": "Please map any off-site area/s if they benefitted from this practice change", "type": "col", - "title": "Which investment priority does this activity relate to?", "items": [ { - "source": "investmentPriorities2", - "type": "select2Many" + "source": "offSiteBenefitSites", + "type": "feature" }, { - "source": "otherInvestmentPriority", - "type": "text" + "type": "row", + "items": [ + { + "source": "offSiteBenefitAreaHa2", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "source": "evidenceOfBenefit", + "placeholder": "If off-site area was mapped please provide a description on the evidence available to reflect this benefit", + "type": "textarea" } ] - }, - { - "width": "15%", - "source": "relatedOutcomes", - "type": "selectOne", - "title": "Which outcome statement/s relates to this survey?" } ], "userAddedRows": true, - "source": "fireManagementDetails", + "disableTableUpload": true, + "source": "landManagementDetails", "type": "table" } ] }, { - "type": "row", + "type": "section", "items": [ { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" - } - ] - }, - { - "type": "row", - "items": [ + "type": "row", + "items": [ + { + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" + } + ] + }, { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" - } - ] - }, - { - "type": "row", - "items": [ + "type": "row", + "items": [ + { + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] + }, { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "type": "row", + "items": [ + { + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" + }, + { + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] }, { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." - } - ] - }, - { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ + "type": "row", + "items": [ + { + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, { - "title": "Attached documents", - "source": "attachments", - "type": "document" + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] } ] } ] }, "modelName": null, - "templateName": "nhtFireManagement", + "templateName": "nhtLandManagementPractices", "optional": true, "optionalQuestionText": null, - "title": "Fire management actions", + "title": "Improving land management practices", "collapsibleHeading": null, - "name": "NHT - Fire management", + "name": "NHT - Improving land management practices", "description": null }, { @@ -12707,362 +19548,459 @@ "template": { "dataModel": [ { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { + "allowRowDelete": "false", "columns": [ { "dataType": "text", - "name": "initialOrFollowup", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", "constraints": [ - "Initial", - "Follow-up" + "Individuals", + "Groups" ], "validate": "required" }, { - "columns": [ - { - "dataType": "feature", - "name": "improvedSites", - "validate": "required" - }, - { - "computed": { - "expression": "$geom.areaHa(improvedSites)" - }, - "dataType": "number", - "name": "calculatedAreaCoveringRegimeChangeHa", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "invoicedAreaHa > 0", - "type": "conditional_validation", - "value": { - "message": "The area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ { - "computed": { - "expression": "$geom.lengthKm(improvedSites)" - }, - "dataType": "number", - "name": "calculatedLengthOfRegimeChangeKm", - "units": "km", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "lengthOfRegimeChangeKm > 0", - "type": "conditional_validation", - "value": { - "message": "The length must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ { - "dataType": "document", - "name": "extraMappingDetails", - "validate": "required", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", - "behaviour": [ - { - "condition": "not (within(calculatedAreaCoveringRegimeChangeHa, areaCoveringRegimeChangeHa, 0.1) and within(calculatedLengthOfRegimeChangeKm, lengthOfRegimeChangeKm, 0.1))", - "type": "visible" - } - ] - }, + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ { - "dataType": "text", - "name": "mappingNotAlignedReason", - "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" - ], - "validate": "required", - "behaviour": [ - { - "condition": "not (within(calculatedAreaCoveringRegimeChangeHa, areaCoveringRegimeChangeHa, 0.1) and within(calculatedLengthOfRegimeChangeKm, lengthOfRegimeChangeKm, 0.1))", - "type": "visible" - } - ] - }, + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ { - "dataType": "text", - "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", - "behaviour": [ - { - "type": "visible", - "condition": "\"Other\" == mappingNotAlignedReason" - } - ] + "rule": "required" }, { - "defaultValue": { - "type": "computed", - "expression": "calculatedAreaCoveringRegimeChangeHa" - }, - "dataType": "number", - "name": "areaCoveringRegimeChangeHa", - "validate": "min[0]", - "decimalPlaces": 3, - "units": "ha" + "rule": "min[0]" }, { - "defaultValue": { - "type": "computed", - "expression": "calculatedLengthOfRegimeChangeKm" + "param": { + "expression": "participationIndividualNumber", + "type": "computed" }, - "dataType": "number", - "name": "lengthOfRegimeChangeKm", - "validate": "min[0]", - "decimalPlaces": 3, - "units": "km" - }, - { - "dataType": "number", - "name": "areaInvoicedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": [ - { - "rule": "required" - }, - { - "rule": "min[0]" - }, - { - "param": { - "expression": "areaCoveringRegimeChangeHa", - "type": "computed" - }, - "rule": "max" - } - ] - }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ { - "dataType": "number", - "name": "areaInvoicedKm", - "units": "km", - "decimalPlaces": 3, - "validate": [ - { - "rule": "required" - }, - { - "rule": "min[0]" - }, - { - "param": { - "expression": "lengthOfRegimeChangeKm", - "type": "computed" - }, - "rule": "max" - } - ] - }, + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ { - "dataType": "text", - "name": "invoicedNotActualReason", - "behaviour": [ - { - "condition": "roundTo(areaCoveringRegimeChangeHa, 2) != roundTo(areaInvoicedHa, 2) or roundTo(lengthOfRegimeChangeKm, 2) != roundTo(areaInvoicedKm, 2)", - "type": "visible" - } - ], - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required" + "rule": "required" }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableMad" + }, + { + "columns": [ + { + "dataType": "text", + "name": "initialOrFollowup", + "constraints": [ + "Initial", + "Follow-up" + ], + "validate": "required" + }, + { + "columns": [ { "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ - { - "condition": "\"Other\" == invoicedNotActualReason", - "type": "if" - } - ], - "validate": "required,maxSize[300]" + "name": "targetDisease", + "description": "", + "validate": "required,maxSize[100]" }, { "dataType": "text", - "name": "treatmentType", - "description": "", + "name": "managementMethod", + "dwcAttribute": "treatmentMethod", "constraints": [ - "Removing barriers (e.g fish barriers)", - "Structure instalment or modification (e.g. weirs, flow gauging stations, fords, culverts)", - "Resnagging", + "Biological control agents", + "Fumigation", + "Host destruction", + "Plant disease management - quarantine", + "Plant disease management - treatment", + "Plant disease management - hygiene", + "Positive competition", "Other" ], "validate": "required" }, { "dataType": "text", - "name": "otherTreatmentType", + "name": "otherManagementMethod", + "description": "Please specify the management method used if Other (specify in notes) was selected in the Management Method column.", "behaviour": [ { - "condition": "treatmentType == \"Other\"", + "condition": "managementMethod == \"Other\"", "type": "enable" } ], - "validate": "required,maxSize[300]" + "validate": "required,maxSize[100]" }, { "dataType": "text", "name": "treatmentObjective", - "description": "Aim of the action - e.g. hydrological regime change from X to Y", + "description": "Please start with either part of the field heading [dash]. If reporting on both separate the information with a ';'. (eg. 'Management method -' and a brief description of method being used to fix the area; 'Treatment objective -' and a brief description of how the work will contribute to the area.", "validate": "required,maxSize[300]" - }, - { - "name": "investmentPriorities2", - "dataType": "stringList", - "validate": "required", - "constraints": { - "type": "pre-populated", - "config": { - "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" - } - } + } + ], + "dataType": "list", + "name": "diseaseManagementDetails" + }, + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" } - }, + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } + } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ { - "dataType": "text", - "name": "otherInvestmentPriority", - "behaviour": [ - { - "type": "enable", - "condition": "\"Other\" in investmentPriorities2" - } - ] - }, + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, + { + "dataType": "feature", + "name": "sitesDiseaseManaged", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." + }, + { + "computed": { + "expression": "$geom.areaHa(sitesDiseaseManaged)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesDiseaseManaged)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } - } + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" } } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReason", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" ], - "dataType": "list", - "name": "hydrologicalRegimeDetails" + "validate": "required", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ + { + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + } + ], + "dataType": "list", + "name": "diseaseManagementAreasControlled" + }, + { + "dataType": "number", + "name": "totalAreaDiseaseManagementInitial", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(diseaseManagementAreasControlled, \"initialOrFollowup == 'Initial' ? areaTreatedHa : 0\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalAreaDiseaseManagementInitialInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaDiseaseManagementInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" } ], - "dataType": "list", - "name": "hydroAreasControlled" + "defaultValue": "" }, { - "name": "numberEcoHydroTreatments", - "type": "number", - "decimalPlaces": 0, + "dataType": "number", + "name": "totalAreaDiseaseManagementFollowup", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(diseaseManagementAreasControlled, \"initialOrFollowup == 'Follow-up' ? areaTreatedHa : 0\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalAreaDiseaseManagementInvoicedFollowup", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaDiseaseManagementFollowup", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalLengthDiseaseManagementInitial", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(diseaseManagementAreasControlled, \"initialOrFollowup == 'Initial' ? lengthTreatedKm : 0\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalLengthDiseaseManagementInvoicedInitial", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalLengthDiseaseManagementInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalLengthDiseaseManagementFollowup", + "validate": "min[0]", + "decimalPlaces": 3, "computed": { - "expression": "count(hydroAreasControlled, \"relatedOutcomes\")" + "expression": "sum(diseaseManagementAreasControlled, \"initialOrFollowup == 'Follow-up' ? lengthTreatedKm : 0\")" } }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalLengthDiseaseManagementInvoicedFollowup", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalLengthDiseaseManagementFollowup", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "text", + "name": "totalInvoicedDiseaseMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalAreaDiseaseManagementInitialInvoiced < +totalAreaDiseaseManagementInitial or +totalAreaDiseaseManagementInvoicedFollowup < +totalAreaDiseaseManagementFollowup or +totalLengthDiseaseManagementInvoicedInitial < +totalLengthDiseaseManagementInitial or +totalLengthDiseaseManagementInvoicedFollowup < +totalLengthDiseaseManagementFollowup", + "type": "enable" + } + ] + }, { "dataType": "text", "name": "comments", @@ -13075,12 +20013,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -13089,26 +20027,37 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Improving hydrological regimes", - "title": "Improving hydrological regimes", + "modelName": "NHT - Disease management", + "title": "Managing Disease", "viewModel": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -13123,7 +20072,8 @@ { "type": "col", "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "firstNationIndividualNumber", @@ -13136,29 +20086,218 @@ ] }, { + "width": "20%", "source": "participationDetails", "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", "type": "textarea" } ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", + "source": "participationInformationTableMad", "type": "table" }, { - "preLabel": "Number of Hydrological Regimes surveys conducted:", - "noEdit": true, - "type": "number", - "source": "numberEcoHydroTreatments" + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] }, { - "addRowText": "Add a new controlled area", + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total area (ha) for disease treatment/prevention (initial) for this reporting period", + "source": "totalAreaDiseaseManagementInitial", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total area (ha) for disease treatment/prevention (initial) invoiced for this reporting period", + "source": "totalAreaDiseaseManagementInitialInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total area (ha) for disease treatment/prevention (follow up) for this reporting period", + "source": "totalAreaDiseaseManagementFollowup", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total Area (ha) for disease treatment/prevention (follow up) invoiced for this reporting period", + "source": "totalAreaDiseaseManagementInvoicedFollowup", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(v) Total length (km) for disease treatment/prevention (initial) for this reporting period", + "source": "totalLengthDiseaseManagementInitial", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(vi) Total length (km) for disease treatment/prevention (initial) invoiced for this reporting period", + "source": "totalLengthDiseaseManagementInvoicedInitial", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(vii) Total length (km) for disease treatment/prevention (follow up) for this reporting period", + "source": "totalLengthDiseaseManagementFollowup", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(viii) Total length (km) for disease treatment/prevention (follow up) invoiced for this reporting period", + "source": "totalLengthDiseaseManagementInvoicedFollowup", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedDiseaseMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add a new area where disease is being managed", "userAddedRows": true, - "source": "hydroAreasControlled", + "source": "diseaseManagementAreasControlled", "type": "repeat", "items": [ + { + "type": "row", + "items": [ + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + } + ] + }, { "type": "row", "css": "border-bottom", @@ -13171,27 +20310,34 @@ } ] }, - { - "columns": [ + "type": "row", + "css": "border-bottom", + "items": [ { - "width": "10%", "type": "col", + "css": "span3 col-border-right", "items": [ { - "type": "feature", - "source": "improvedSites" + "type": "row", + "items": [ + { + "preLabel": "Site/s where disease managed", + "source": "sitesDiseaseManaged", + "type": "feature" + } + ] }, { "type": "row", "items": [ { + "source": "calculatedAreaTreatedHa", "type": "number", - "source": "calculatedAreaCoveringRegimeChangeHa", "displayOptions": { "displayUnits": true }, - "readonly": true + "readonly": "readonly" } ] }, @@ -13199,12 +20345,12 @@ "type": "row", "items": [ { + "source": "calculatedLengthTreatedKm", "type": "number", - "source": "calculatedLengthOfRegimeChangeKm", "displayOptions": { "displayUnits": true }, - "readonly": true + "readonly": "readonly" } ] }, @@ -13218,19 +20364,18 @@ } ] } - ], - "title": "Site/s where hydrological regimes have been improved" + ] }, { - "width": "10%", - "title": "Actual area (ha) / length (km) where the hydrological regimes have benn improved", "type": "col", + "css": "span3 col-border-right", "items": [ { "type": "row", "items": [ { - "source": "areaCoveringRegimeChangeHa", + "preLabel": "Actual area (ha) / length (km) where disease has been managed", + "source": "areaTreatedHa", "type": "number", "displayOptions": { "displayUnits": true @@ -13242,7 +20387,7 @@ "type": "row", "items": [ { - "source": "lengthOfRegimeChangeKm", + "source": "lengthTreatedKm", "type": "number", "displayOptions": { "displayUnits": true @@ -13272,110 +20417,49 @@ ] } ] - }, + } + ] + }, + { + "columns": [ { - "width": "10%", - "title": "Invoiced area (ha) where the hydrological regimes have been improved", - "type": "col", - "items": [ - { - "type": "row", - "items": [ - { - "source": "areaInvoicedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "areaInvoicedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedNotActualReason", - "type": "selectOne" - } - ] - }, - { - "type": "row", - "items": [ - { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedNotActualComments", - "type": "textarea", - "rows": 5 - } - ] - } - ] + "width": "30%", + "source": "targetDisease", + "title": "Disease treated", + "type": "textarea" }, { "width": "20%", - "title": "Type of treatment implemented to improve eco-hydrological treatment", "type": "col", + "title": "Type of management method / treatment", "items": [ { "type": "row", "items": [ { - "source": "treatmentType", - "type": "select2" + "source": "managementMethod", + "type": "selectOne" } ] }, { - "source": "otherTreatmentType", - "placeholder": "Type of treatment implemented (if Other)", + "source": "otherManagementMethod", + "placeholder": "Type of management method / treatment (if other)", "type": "text" } ] }, { - "width": "20%", + "width": "50%", "source": "treatmentObjective", - "title": "Treatment objective", + "title": "Management method / treatment objective", "type": "textarea" - }, - { - "width": "15%", - "type": "col", - "title": "Which investment priority does this activity relate to?", - "items": [ - { - "source": "investmentPriorities2", - "type": "select2Many" - }, - { - "source": "otherInvestmentPriority", - "type": "text" - } - ] - }, - { - "width": "15%", - "source": "relatedOutcomes", - "type": "selectOne", - "title": "Which outcome statement/s relates to this survey?" } ], "userAddedRows": true, - "source": "hydrologicalRegimeDetails", + "addRowText": "Add a new disease being managed in this area", + "disableTableUpload": true, + "source": "diseaseManagementDetails", "type": "table" } ] @@ -13408,7 +20492,7 @@ "items": [ { "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { "preLabel": "Data have been uploaded", @@ -13445,12 +20529,12 @@ ] }, "modelName": null, - "templateName": "nhtImprovingHydrologicalRegimes", + "templateName": "nhtDiseaseManagement", "optional": true, "optionalQuestionText": null, - "title": "Improving hydrological regimes", + "title": "Managing disease", "collapsibleHeading": null, - "name": "NHT - Improving hydrological regimes", + "name": "NHT - Disease management", "description": null }, { @@ -13458,585 +20542,692 @@ "template": { "dataModel": [ { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "dataType": "text", - "name": "comments", - "validate": "maxSize[1500]" - }, - { - "dataType": "image", - "name": "photographicEvidence" - }, - { - "dataType": "boolean", - "name": "dataUploaded", - "description": "" - }, - { - "dataType": "text", - "name": "projectAssuranceDetails", - "description": "" - }, - { + "name": "pestAnimalSurveys", "dataType": "list", - "name": "assuranceDocuments", + "minSize": 1, "columns": [ { - "dataType": "document", - "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" - } - ] - }, - { - "columns": [ + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } + } + } + }, { "dataType": "text", - "name": "initialOrFollowup", + "name": "baselineOrIndicatorSurvey", + "description": "", "constraints": [ - "Initial", - "Follow-up" + "Baseline", + "Indicator" ], "validate": "required" }, - { + "dataType": "text", + "name": "surveyObjective", + "description": "What the survey aim to capture? How will the information obtained from the survey be used?", + "validate": "required,maxSize[3000]" + }, + { + "dataType": "number", + "name": "numberOfSurveys", + "validate": "required,min[1],max[1]", + "defaultValue": 1, + "readonly": true + }, + { + "dataType": "number", + "name": "numberOfSurveysInvoiced", + "validate": "required,min[0]", + "defaultValue": 1 + }, + { + "dataType": "list", + "name": "pestAnimalDataSets", "columns": [ { - "dataType": "feature", - "name": "implementationSite" - }, - { - "computed": { - "expression": "$geom.areaHa(implementationSite)" + "name": "dataSetId", + "entityType": "au.org.ala.ecodata.DataSetSummary", + "dataType": "text", + "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", + "validate": "required", + "constraints": { + "textProperty": "name", + "valueProperty": "dataSetId", + "excludePath": "pestAnimalSurveys.pestAnimalDataSets.dataSetId", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.custom.dataSets" + }, + "filter": { + "namespace": "dataSet", + "expression": "dataSet.serviceId == 23 and dataSet.progress == 'finished' and dataSet.alreadyReported == false and baselineOrIndicatorSurvey == baselineIndicatorMapping.lookupValue(dataSet.type) and deepEquals(relatedOutcomes,dataSet.outcomesLabel)" + } + } }, - "dataType": "number", - "name": "calculatedAreaImplementedHa", - "units": "ha", - "decimalPlaces": 3, "behaviour": [ { - "condition": "areaImplementedInvoicedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The area must be mapped", - "validate": "required,min[0.0001]" + "type": "pre_populate", + "config": { + "waitForInitialisation": true, + "source": { + "url": "/site/geojson", + "params": [ + { + "expression": "x=find(owner.custom.dataSets, \"dataSetId\", dataSetId); x.siteId", + "name": "id", + "type": "computed", + "required": true + } + ] + }, + "target": { + "type": "singleValue", + "name": "sitesCoveredForPestAnimal" + } } } ] }, { - "computed": { - "expression": "$geom.lengthKm(implementationSite)" - }, - "dataType": "number", - "name": "calculatedLengthImplementedKm", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ + "columns": [ { - "condition": "lengthImplementedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The length must be mapped", - "validate": "required,min[0.0001]" - } + "dataType": "species", + "name": "species", + "validate": "required" + }, + { + "dataType": "text", + "name": "individualsOrGroups", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "numberOfIndividualsOrGroups", + "validate": "required,min[0]" } - ] + ], + "dataType": "list", + "name": "pestAnimalSurveySpeciesTable" }, { - "defaultValue": { - "expression": "$geom.areaHa(implementationSite)", - "type": "computed" + "name": "projectBaselines", + "dataType": "stringList", + "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.baselines" }, - "dataType": "number", - "name": "areaImplementedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "required,min[0]" + "constraints": { + "textProperty": "baseline", + "valueProperty": "code", + "type": "pre-populated", + "excludePath": "projectBaselines", + "config": { + "source": { + "context-path": "owner.custom.details.baseline.rows" + } + } + } }, { - "defaultValue": { - "expression": "$geom.lengthKm(implementationSite)", - "type": "computed" + "name": "investmentPriorities2", + "dataType": "stringList", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.investmentPriorities" }, - "dataType": "number", - "name": "lengthImplementedKm", - "units": "km", - "decimalPlaces": 3, - "validate": "required,min[0]" + "constraints": { + "type": "pre-populated", + "config": { + "source": { + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + } + ], + "url": "/project/listProjectInvestmentPriorities/" + } + } + } }, { "dataType": "text", - "name": "mappingNotAlignedReason", + "name": "otherInvestmentPriority", "behaviour": [ { - "condition": "not (within(calculatedAreaImplementedHa, areaImplementedHa, 0.1))", - "type": "visible" + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" } - ], - "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" - ], - "validate": "required" + ] }, { - "dataType": "text", - "name": "mappingNotAlignedComments" - , - "behaviour": [ - { - "condition": "\"Other\" == mappingNotAlignedReason", - "type": "visible" - } - ], - "validate": "required,maxSize[300]" + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.startDate" + } }, { - "dataType": "document", - "name": "extraMappingDetails", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", - "behaviour": [ - { - "condition": "not (within(calculatedAreaImplementedHa, areaImplementedHa, 0.1)) or roundTo(areaImplementedHa, 2) != roundTo(areaImplementedInvoicedHa, 2)", - "type": "visible" - } - ], - "validate": "required" + "dataType": "date", + "name": "activitiesEndDate", + "description": "Specific the dates these events were held on.", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.endDate" + } }, + { + "dataType": "feature", + "name": "sitesCoveredForPestAnimal", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." + }, { + "computed": { + "expression": "$geom.areaHa(sitesCoveredForPestAnimal)" + }, "dataType": "number", - "name": "areaImplementedInvoicedHa", + "name": "calculatedAreaTreatedHa", "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesCoveredForPestAnimal)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", "decimalPlaces": 3, - "validate": [ - { - "rule": "min[0]" - }, + "behaviour": [ { - "param": { - "expression": "lengthOfErosionControlKm", - "type": "computed" - }, - "rule": "max" + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } } ] }, { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, "dataType": "number", - "name": "areaImplementedInvoicedKm", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", "units": "ha", "decimalPlaces": 3, - "validate": [ - { - "rule": "min[0]" - }, - { - "param": { - "expression": "lengthImplementedKm", - "type": "computed" - }, - "rule": "max" - } - ] + "validate": "required,min[0]" }, { "dataType": "text", - "name": "invoicedNotActualReason", - "behaviour": [ - { - "condition": "roundTo(areaImplementedHa, 2) != roundTo(areaImplementedInvoicedHa, 2) or roundTo(lengthImplementedKm, 2) != roundTo(areaImplementedInvoicedKm, 2)", - "type": "visible" - } - ], + "name": "mappingNotAlignedReason", "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", + "Mapped area simplifies more complex area/s where work was undertaken during this period", "Other" ], - "validate": "required" - }, - { - "dataType": "text", - "name": "invoicedNotActualComments", + "validate": "required", "behaviour": [ { - "condition": "\"Other\" == invoicedNotActualReason", - "type": "visible" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" } - ], - "validate": "required,maxSize[300]" - }, - { - "dataType": "text", - "name": "practiceChangeType", - "description": "", - "constraints": [ - "Fencing", - "Erosion management", - "Stocking rates", - "Watering arrangements", - "Paddock design", - "Rotation grazing", - "Permaculture", - "Other" - ], - "validate": "required" + ] }, { "dataType": "text", - "name": "otherPracticeChangeType", - "description": "Please specify the type of land management practice change if Other (specify in notes) was selected in the Type of land management practice change.", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", "behaviour": [ { - "condition": "practiceChangeType == \"Other\"", - "type": "enable" - } - ], - "validate": "required,maxSize[100]" - }, - { - "dataType": "text", - "name": "industryType", - "constraints": [ - "Broad acre cropping", - "Dairy", - "Horticulture", - "Grazing", - "Fisheries", - "Aquaculture", - "Environment" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "practiceChangeObjective", - "description": "How will the practice change/s contribute to the area", - "validate": "required,maxSize[300]" - }, - { - "dataType": "feature", - "name": "offSiteBenefitSites" - }, - { - "defaultValue": { - "expression": "$geom.areaHa(offSiteBenefitSites)", - "type": "computed" - }, - "dataType": "number", - "name": "offSiteBenefitAreaHa", - "validate": [ - { - "param": { - "expression": "$geom.areaHa(offSiteBenefitSites)*0.9", - "type": "computed" - }, - "rule": "min" - }, - { - "param": { - "expression": "$geom.areaHa(offSiteBenefitSites)*1.1", - "type": "computed" - }, - "rule": "max" + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" } ] }, { - "dataType": "text", - "name": "evidenceOfBenefit", - "validate": "maxSize[300]" - }, - { - "name": "investmentPriorities2", - "dataType": "stringList", + "dataType": "document", + "name": "extraMappingDetails", "validate": "required", - "constraints": { - "type": "pre-populated", - "config": { - "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" - } - } - } - }, - { - "dataType": "text", - "name": "otherInvestmentPriority", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", "behaviour": [ { - "type": "enable", - "condition": "\"Other\" in investmentPriorities2" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" } ] }, { - "name": "relatedOutcomes", + "defaultValue": { + "type": "computed", + "expression": "$geom.lengthKm(sitesCoveredForPestAnimal)" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", + "description": "Select the technique used to conduct the survey. If the EMSA Application tool was not used, you should select 'Other'.", + "name": "emsaProtocol", "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.protocol" + }, "constraints": { "textProperty": "label", - "valueProperty": "label", + "valueProperty": "value", "type": "pre-populated", "config": { "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] + "context-path": "owner.protocols" } } } + }, + { + "dataType": "stringList", + "description": "Describe the technique (if Other) was selected.", + "name": "otherEmsaProtocol", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methods" + } + }, + { + "dataType": "text", + "name": "surveyMethodology", + "description": "Provide more details on what is being done.", + "validate": "required,maxSize[3000]", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methodDescription" + } + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" } ], - "dataType": "list", - "name": "landManagementDetails" + "minSize": 1 + } + ] + }, + { + "dataType": "lookupTable", + "name": "baselineIndicatorMapping", + "config": { + "source": { + "literal": { + "Baseline dataset associated with a project outcome": "Baseline", + "Project progress dataset that is tracking change against an established project baseline dataset": "Indicator" + } + } + } + }, + { + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" } ], "dataType": "list", - "name": "landManagementControlledArea" + "name": "participationInformationTablePas" }, { - "name": "landMgmtSurveyCountHeader", - "type": "number", + "dataType": "number", + "name": "totalSurveyBaseline", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(pestAnimalSurveys, \"baselineOrIndicatorSurvey == 'Baseline' ? 1 : 0\")" + } + }, + { + "dataType": "number", + "name": "totalSurveyBaselineInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyBaseline", + "type": "computed" + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalSurveyIndicator", + "validate": "min[0]", "decimalPlaces": 0, "computed": { - "expression": "count(landManagementControlledArea, \"relatedOutcomes\")" + "expression": "sum(pestAnimalSurveys, \"baselineOrIndicatorSurvey == 'Indicator' ? 1 : 0\")" } + }, + { + "dataType": "number", + "name": "totalSurveyIndicatorInvoiced", + "defaultValue": "", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyIndicator", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "totalInvoicedPestAnimalMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalSurveyIndicatorInvoiced < +totalSurveyIndicator or +totalSurveyBaselineInvoiced < +totalSurveyBaseline", + "type": "enable" + } + ] + }, + { + "dataType": "text", + "name": "comments", + "validate": "maxSize[1500]" + }, + { + "dataType": "image", + "name": "photographicEvidence" + }, + { + "dataType": "boolean", + "name": "dataUploaded", + "description": "" + }, + { + "dataType": "text", + "name": "projectAssuranceDetails", + "description": "", + "validate": "required,maxSize[5000]" + }, + { + "dataType": "list", + "name": "assuranceDocuments", + "columns": [ + { + "dataType": "document", + "name": "attachments", + "description": "Please attach any Evidence of Service Delivery here." + } + ] } ], - "modelName": "NHT - Improving land management practices", - "title": "Improving land management practices", + "modelName": "NHT - Pest animal survey", + "title": "Pest Animal Survey", "viewModel": [ { - "columns": [ + "type": "section", + "items": [ { - "width": "10%", - "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", - "type": "selectOne" + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] }, { - "width": "20%", - "type": "col", - "title": "Total Number of people delivering this service", - "items": [ + "disableTableUpload": true, + "columns": [ { - "source": "participationIndividualNumber", - "type": "number" + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", + "type": "selectOne" }, { - "source": "participationGroupNumber", - "type": "selectOne" + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" } - ] + ], + "source": "participationInformationTablePas", + "type": "table" }, { - "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "type": "row", "items": [ { - "source": "firstNationIndividualNumber", - "type": "number" - }, - { - "source": "firstNationGroupNumber", - "type": "selectOne" + "type": "literal", + "source": "Survey informationBefore completing this section, please ensure you have created a Data Set Summary information for every data set produced by the surveys you intend to reportEach survey reported must relate to a combination of outcomes as described in your MERI planEach Data Set Summary recorded for a survey must be addressing the same outcomes as selected for the surveyIf a survey produced more than one data set, use the New Data Set button to add each Data Set Summary under your surveyA single survey can be made up of multiple dataset" } ] }, - { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" - } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" - }, - { - "preLabel": "Number of Land Management Practices surveys conducted:", - "noEdit": true, - "type": "number", - "source": "landMgmtSurveyCountHeader" - }, - { - "addRowText": "Add a new controlled area", - "userAddedRows": true, - "source": "landManagementControlledArea", - "type": "repeat", - "items": [ { "type": "row", - "css": "border-bottom", "items": [ { - "preLabel": "Initial or Follow-up?", - "css": "span3", - "source": "initialOrFollowup", - "type": "selectOne" + "type": "literal", + "source": "Totals Summary" } ] }, - { - "columns": [ + "type": "row", + "items": [ { - "width": "10%", "type": "col", - "title": "Site/s covered by practice change", + "css": "span4 col-border-right", "items": [ { - "source": "implementationSite", - "type": "feature" - }, - { - "readonly": "readonly", - "source": "calculatedAreaImplementedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, - { - "readonly": "readonly", - "source": "calculatedLengthImplementedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "preLabel": "(i) Total Number of baseline pest animal surveys completed for this reporting period", + "source": "totalSurveyBaseline", + "type": "number" + } + ] }, { "type": "row", "items": [ { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" + "preLabel": "(ii) Total Number of baseline pest animal surveys invoiced for this reporting period", + "source": "totalSurveyBaselineInvoiced", + "type": "number" } ] } ] }, { - "helpText": "Enter the amount you will invoice for during this reporting period.", - "width": "10%", "type": "col", - "title": "Actual area (ha) / length (km) covered by practice change", + "css": "span4 col-border-right", "items": [ - { - "source": "areaImplementedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, - { - "source": "lengthImplementedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, { "type": "row", "items": [ { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" + "preLabel": "(iii) Total Number of indicator pest animal surveys completed for this reporting period", + "source": "totalSurveyIndicator", + "type": "number" } ] }, @@ -14044,213 +21235,429 @@ "type": "row", "items": [ { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 + "preLabel": "(iv) Total Number of indicator pest animal surveys invoiced for this reporting period", + "source": "totalSurveyIndicatorInvoiced", + "type": "number" } ] } ] - }, + } + ] + }, + { + "type": "row", + "items": [ { - "helpText": "Enter the amount you will invoice for during this reporting period.", - "width": "10%", - "type": "col", - "title": "Invoiced area (ha) covered by practice change", + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedPestAnimalMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add survey", + "removeRowText": "Delete this survey", + "userAddedRows": true, + "source": "pestAnimalSurveys", + "type": "repeat", + "items": [ + { + "type": "row", "items": [ { - "source": "areaImplementedInvoicedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, - { - "source": "areaImplementedInvoicedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, - { - "type": "row", + "type": "col", "items": [ { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedNotActualReason", - "type": "selectOne" + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s relates to this survey?" } ] }, { - "type": "row", + "type": "col", "items": [ { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedNotActualComments", - "type": "textarea", - "rows": 5 + "source": "baselineOrIndicatorSurvey", + "type": "selectOne", + "preLabel": "Baseline survey or indicator (follow-up) survey?" } ] } ] }, { - "width": "10%", - "title": "Type of action", - "type": "col", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "practiceChangeType", - "type": "select2" - } - ] - }, - { - "source": "otherPracticeChangeType", - "title": "Type of action (if Other)", + "source": "surveyObjective", + "preLabel": "Survey objective", "type": "text" } ] }, { - "width": "10%", - "source": "industryType", - "title": "Industry type", - "type": "selectOne" - }, - { - "width": "10%", - "source": "practiceChangeObjective", - "title": "Purpose of improving land management practice", - "type": "textarea" - }, - { - "width": "10%", - "title": "Please map any off-site area/s if they benefitted from this practice change", - "type": "col", + "type": "repeat", + "source": "pestAnimalDataSets", + "userAddedRows": true, + "addRowText": "New data set", + "removeRowText": "Delete this data set", "items": [ { - "source": "offSiteBenefitSites", - "type": "feature" - }, - { - "source": "offSiteBenefitAreaHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "css": "border-bottom", + "items": [ + { + "type": "col", + "items": [ + { + "source": "dataSetId", + "type": "selectOne", + "preLabel": "Please select the data set produced by this survey. Note it must have already been entered on the Data Set Summary tab." + } + ] + } + ] }, { - "source": "evidenceOfBenefit", - "placeholder": "Please provide a description on the evidence available to reflect this benefit", - "type": "textarea" - } - ] - }, - { - "width": "15%", - "type": "col", - "title": "Which investment priority does this activity relate to?", - "items": [ - { - "source": "investmentPriorities2", - "type": "select2Many" + "type": "row", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "projectBaselines", + "type": "selectMany", + "preLabel": "Which project baseline/s relate to this survey?", + "readonly": "readonly" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Activity start date", + "source": "activitiesStartDate", + "type": "date" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Activity end date", + "source": "activitiesEndDate", + "type": "date" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Sites covered by pest animal survey", + "source": "sitesCoveredForPestAnimal", + "type": "feature" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedLengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) / length (km) covered by pest animal survey", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "lengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Survey technique", + "source": "emsaProtocol", + "type": "selectOne", + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Survey technique (if Other)", + "source": "otherEmsaProtocol", + "type": "select2Many" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "surveyMethodology", + "preLabel": "Survey methodology", + "type": "text" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + } + ] }, { - "source": "otherInvestmentPriority", - "type": "text" + "columns": [ + { + "width": "55%", + "source": "species", + "title": "Target species recorded", + "type": "speciesSelect" + }, + { + "width": "25%", + "source": "individualsOrGroups", + "title": "Individuals or groups?", + "type": "selectOne" + }, + { + "width": "20%", + "source": "numberOfIndividualsOrGroups", + "title": "Number of individuals / groups in pest animal survey", + "type": "number" + } + ], + "userAddedRows": true, + "disableTableUpload": true, + "source": "pestAnimalSurveySpeciesTable", + "type": "table" } ] - }, + } + ] + }, + { + "type": "row", + "items": [ { - "width": "15%", - "source": "relatedOutcomes", - "type": "selectOne", - "title": "Which outcome statement/s relates to this survey?" + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" } - ], - "userAddedRows": true, - "source": "landManagementDetails", - "type": "table" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" - } - ] - }, - { - "type": "row", - "items": [ + ] + }, { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "type": "row", + "items": [ + { + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] }, { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" - } - ] - }, - { - "type": "row", - "items": [ + "type": "row", + "items": [ + { + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" + }, + { + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." - } - ] - }, - { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ + "type": "row", + "items": [ + { + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, { - "title": "Attached documents", - "source": "attachments", - "type": "document" + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] } ] } ] }, "modelName": null, - "templateName": "nhtLandManagementPractices", + "templateName": "nhtPestAnimalSurvey", "optional": true, "optionalQuestionText": null, - "title": "Improving land management practices", + "title": "Pest animal survey", "collapsibleHeading": null, - "name": "NHT - Improving land management practices", + "name": "NHT - Pest animal survey", "description": null }, { @@ -14258,80 +21665,167 @@ "template": { "dataModel": [ { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "allowRowDelete": "false", + "columns": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" } ], - "validate": "required,min[0]" + "dataType": "list", + "name": "participationInformationTableRem" }, { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ + "columns": [ + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } + } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - - { - "columns": [ + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, { "dataType": "text", "name": "initialOrFollowup", @@ -14342,318 +21836,482 @@ "validate": "required" }, { - "columns": [ - { - "dataType": "feature", - "name": "siteTreated" - }, - { - "defaultValue": { - "expression": "$geom.areaHa(siteTreated)", - "type": "computed" - }, - "dataType": "number", - "name": "calculatedAreaTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "areaTreatedInvoicedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The managed area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "computed": { - "expression": "$geom.lengthKm(siteTreated)" - }, - "dataType": "number", - "name": "calculatedLengthTreatedKm", - "units": "km", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "lengthTreatedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The managed length must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "defaultValue": { - "expression": "calculatedAreaTreatedHa", - "type": "computed" - }, - "dataType": "number", - "name": "areaTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "required,min[0]" - }, - { - "defaultValue": { - "expression": "calculatedLengthTreatedKm", - "type": "computed" - }, - "dataType": "number", - "name": "lengthTreatedKm", - "units": "km", - "decimalPlaces": 3, - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "mappingNotAlignedReason", - "behaviour": [ - { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1))", - "type": "visible" - } - ], - "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "mappingNotAlignedComments", - "behaviour": [ - { - "condition": "\"Other\" == mappingNotAlignedReason", - "type": "visible" - } - ], - "validate": "required,maxSize[300]" - }, - { - "dataType": "document", - "name": "extraMappingDetails", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", - "behaviour": [ - { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1)) or roundTo(areaTreatedHa, 2) != roundTo(areaTreatedInvoicedHa, 2)", - "type": "visible" - } - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "areaTreatedInvoicedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": [ - { - "rule": "min[0]" - }, - { - "param": { - "expression": "areaTreatedHa", - "type": "computed" - }, - "rule": "max" - } - ] - }, - { - "dataType": "number", - "name": "areaTreatedInvoicedKm", - "units": "km", - "decimalPlaces": 3, - "validate": [ - { - "rule": "required" - }, - { - "rule": "min[0]" - }, - { - "param": { - "expression": "lengthTreatedKm", - "type": "computed" - }, - "rule": "max" - } - ] - }, - { - "dataType": "text", - "name": "invoicedNotActualReason", - "behaviour": [ - { - "condition": "roundTo(areaTreatedHa, 2) != roundTo(areaTreatedInvoicedHa, 2) or roundTo(lengthTreatedKm, 2) != roundTo(areaTreatedInvoicedKm, 2)", - "type": "visible" - } - ], - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ - { - "condition": "\"Other\" == invoicedNotActualReason", - "type": "visible" - } - ], - "validate": "required,maxSize[300]" - }, + "dataType": "number", + "name": "noRemediationInterventions", + "validate": "required" + }, + { + "dataType": "feature", + "name": "sitesRemediated", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." + }, + { + "computed": { + "expression": "$geom.areaHa(sitesRemediated)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHaRemediated", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesRemediated)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKmRemediated", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ { - "dataType": "text", - "name": "targetDisease", - "description": "", - "validate": "required,maxSize[100]" - }, + "condition": "lengthTreatedKmRemediated > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHaRemediated" + }, + "dataType": "number", + "name": "areaTreatedHaRemediated", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReasonRemediated", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ { - "dataType": "text", - "name": "managementMethod", - "dwcAttribute": "treatmentMethod", - "constraints": [ - "Biological control agents", - "Fumigation", - "Host destruction", - "Plant disease management - quarantine", - "Plant disease management - treatment", - "Plant disease management - hygiene", - "Positive competition", - "Other" - ], - "validate": "required" - }, + "condition": "not (within(areaTreatedHaRemediated, calculatedAreaTreatedHaRemediated, 0.1) and within(lengthTreatedKmRemediated, calculatedLengthTreatedKmRemediated, 0.1))", + "type": "if" + } + ] + }, + { + "dataType": "text", + "name": "mappingNotAlignedCommentsRemediated", + "validate": "required,maxSize[100]", + "behaviour": [ { - "dataType": "text", - "name": "otherManagementMethod", - "description": "Please specify the management method used if Other (specify in notes) was selected in the Management Method column.", - "behaviour": [ - { - "condition": "managementMethod == \"Other\"", - "type": "enable" - } - ], - "validate": "required,maxSize[100]" - }, + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReasonRemediated" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetailsRemediated", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ { - "dataType": "text", - "name": "treatmentObjective", - "description": "Please start with either part of the field heading [dash]. If reporting on both separate the information with a ';'. (eg. 'Management method -' and a brief description of method being used to fix the area; 'Treatment objective -' and a brief description of how the work will contribute to the area.", - "validate": "required,maxSize[300]" - }, + "condition": "not (within(areaTreatedHaRemediated, calculatedAreaTreatedHaRemediated, 0.1) and within(lengthTreatedKmRemediated, calculatedLengthTreatedKmRemediated, 0.1))", + "type": "if" + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKmRemediated" + }, + "dataType": "number", + "name": "lengthTreatedKmRemediated", + "units": "km", + "decimalPlaces": 3 + }, + { + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required" + }, + { + "dataType": "date", + "name": "activitiesEndDate", + "description": "Specific the dates these events were held on.", + "validate": [ { - "dataType": "feature", - "name": "offSiteBenefitSites" + "rule": "required" }, { - "defaultValue": { - "expression": "$geom.areaHa(offSiteBenefitSites)", + "rule": "future", + "param": { + "expression": "formatDateForValidation(activitiesStartDate)", "type": "computed" - }, - "dataType": "number", - "name": "offSiteBenefitAreaHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "min[0]" - }, + } + } + ] + }, + { + "dataType": "text", + "name": "typesOfRemediationInstalled", + "description": "", + "constraints": [ + "Access control", + "Bank grooming", + "Flow gauging stations", + "Fords", + "Culverts", + "Revegetation", + "Weirs", + "Other" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "otherRemediationType", + "behaviour": [ { - "defaultValue": { - "expression": "$geom.lengthKm(offSiteBenefitSites)", - "type": "computed" - }, - "dataType": "number", - "name": "offSiteBenefitLengthKm", - "units": "km", - "decimalPlaces": 3, - "validate": "min[0]" - }, + "condition": "typesOfRemediationInstalled == \"Other\"", + "type": "enable" + } + ], + "validate": "required,maxSize[100]" + }, + { + "dataType": "text", + "name": "remediationType", + "description": "", + "constraints": [ + "Access control", + "Bank grooming", + "Flow gauging stations", + "Fords", + "Culverts", + "Revegetation", + "Weirs", + "Other" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "otherAquaticOrRemediationType", + "behaviour": [ { - "dataType": "text", - "name": "evidenceOfBenefit", - "validate": "maxSize[300]" - }, + "condition": "remediationType == \"Other\"", + "type": "enable" + } + ], + "validate": "required,maxSize[100]" + }, + { + "dataType": "feature", + "name": "sitesBenefitted", + "description": "Mapping field to be done and Area (ha) field be auto-calculated from mapping." + }, + { + "computed": { + "expression": "$geom.areaHa(sitesBenefitted)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHaBenefitted", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesBenefitted)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKmBenefitted", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ { - "name": "investmentPriorities2", - "dataType": "stringList", - "validate": "required", - "constraints": { - "type": "pre-populated", - "config": { - "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" - } - } + "condition": "lengthTreatedKmBenefitted > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" } - }, + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHaBenefitted" + }, + "dataType": "number", + "name": "areaTreatedHaBenefitted", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReasonBenefitted", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ { - "dataType": "text", - "name": "otherInvestmentPriority", - "behaviour": [ - { - "type": "enable", - "condition": "\"Other\" in investmentPriorities2" - } - ] - }, + "condition": "not (within(areaTreatedHaBenefitted, calculatedAreaTreatedHaBenefitted, 0.1))", + "type": "if" + } + ] + }, + { + "dataType": "text", + "name": "mappingNotAlignedCommentsBenefitted", + "validate": "required,maxSize[100]", + "behaviour": [ { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } - } - } + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReasonBenefitted" } - ], - "dataType": "list", - "name": "diseaseManagementDetails" + ] + }, + { + "dataType": "document", + "name": "extraMappingDetailsBenefitted", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHaBenefitted, calculatedAreaTreatedHaBenefitted, 0.1) and within(lengthTreatedKmBenefitted, calculatedLengthTreatedKmBenefitted, 0.1))", + "type": "if" + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKmBenefitted" + }, + "dataType": "number", + "name": "lengthTreatedKmBenefitted", + "units": "km", + "decimalPlaces": 3 + }, + { + "dataType": "text", + "name": "evidenceOfBenefit", + "validate": "maxSize[100]" + } + ], + "dataType": "list", + "name": "remediatingAreas" + }, + { + "dataType": "number", + "name": "totalAreaRemediationInitial", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(remediatingAreas, \"initialOrFollowup == 'Initial' ? areaTreatedHaRemediated : 0\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalAreaRemediationInitialInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaRemediationInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalAreaRemediationFollowup", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(remediatingAreas, \"initialOrFollowup == 'Follow-up' ? areaTreatedHaRemediated : 0\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalAreaRemediationFollowupInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaRemediationFollowup", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" } ], - "dataType": "list", - "name": "diseaseManagementAreasControlled" + "defaultValue": "" }, + { - "name": "diseaseSurveyCountHeader", - "type": "number", + "dataType": "number", + "name": "totalLengthRemediationInitial", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(remediatingAreas, \"initialOrFollowup == 'Initial' ? lengthTreatedKmRemediated : 0\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalLengthRemediationInitialInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalLengthRemediationInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalLengthRemediationFollowup", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(remediatingAreas, \"initialOrFollowup == 'Follow-up' ? lengthTreatedKmRemediated : 0\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalLengthRemediationFollowupInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalLengthRemediationFollowup", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + + { + "dataType": "number", + "name": "totalStructuresInstalled", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(remediatingAreas, \"noRemediationInterventions\")" + } + }, + { + "dataType": "number", + "name": "totalStructuresInstalledInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalStructuresInstalled", + "type": "computed" + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalStructuresInstalledFollowup", + "validate": "min[0]", "decimalPlaces": 0, "computed": { - "expression": "count(diseaseManagementAreasControlled, \"relatedOutcomes\")" + "expression": "sum(remediatingAreas, \"initialOrFollowup == 'Follow-up' ? noRemediationInterventions : 0\")" } }, + { + "dataType": "number", + "name": "totalStructuresInstalledFollowupInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalStructuresInstalledFollowup", + "type": "computed" + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "text", + "name": "totalInvoicedRemediationMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalAreaRemediationInitialInvoiced < +totalAreaRemediationInitial or +totalAreaRemediationFollowupInvoiced < +totalAreaRemediationFollowup or +totalLengthRemediationInitialInvoiced < +totalLengthRemediationInitial or +totalLengthRemediationFollowupInvoiced < +totalLengthRemediationFollowup or +totalStructuresInstalledInvoiced < +totalStructuresInstalled", + "type": "enable" + } + ] + }, { "dataType": "text", "name": "comments", @@ -14666,12 +22324,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -14680,26 +22338,37 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Disease management", - "title": "Managing disease", + "modelName": "NHT - Remediating riparian and aquatic areas", + "title": "Remediating Riparian and Aquatic Areas", "viewModel": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -14714,87 +22383,339 @@ { "type": "col", "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "firstNationIndividualNumber", "type": "number" }, { - "source": "firstNationGroupNumber", - "type": "selectOne" + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableRem", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total area (ha) of remediation of riparian/aquatic areas (initial) during this reporting period", + "source": "totalAreaRemediationInitial", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total area (ha) of remediation of riparian/aquatic areas (initial) invoiced for during this reporting period", + "source": "totalAreaRemediationInitialInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total area (ha) of remediation of riparian/aquatic areas (follow - up) during this reporting period", + "source": "totalAreaRemediationFollowup", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total area (ha) of remediation of riparian/aquatic areas (follow - up) invoiced for during this reporting period", + "source": "totalAreaRemediationFollowupInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(v) Total length (km) of remediation of riparian/aquatic areas (initial) during this reporting period", + "source": "totalLengthRemediationInitial", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(vi) Total length (km) of remediation of riparian/aquatic areas (initial) invoiced for during this reporting period", + "source": "totalLengthRemediationInitialInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(vii) Total length (km) of remediation of riparian/aquatic areas (follow-up) during this reporting period", + "source": "totalLengthRemediationFollowup", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(viii) Total length (km) of remediation of riparian/aquatic areas (follow-up) invoiced for during this reporting period", + "source": "totalLengthRemediationFollowupInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(ix) Number of remediation interventions applied to promote aquatic health during this reporting period", + "source": "totalStructuresInstalled", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(x) Number of remediation interventions applied to promote aquatic health invoiced for during this reporting period", + "source": "totalStructuresInstalledInvoiced", + "type": "number" + } + ] } ] - }, - { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" + ] }, { - "preLabel": "Number of Managing Disease surveys conducted:", - "noEdit": true, - "type": "number", - "source": "diseaseSurveyCountHeader" + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedRemediationMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] }, { - "addRowText": "Add a new controlled area", + "addRowText": "Add a new remediated area", "userAddedRows": true, - "source": "diseaseManagementAreasControlled", + "source": "remediatingAreas", "type": "repeat", "items": [ { "type": "row", - "css": "border-bottom", "items": [ { - "preLabel": "Initial or Follow-up?", + "css": "span3 col-border-right", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { "css": "span3", - "source": "initialOrFollowup", - "type": "selectOne" + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] } ] }, { - "columns": [ + "type": "row", + "items": [ { - "width": "15%", "type": "col", - "title": "Site/s where disease managed", + "css": "span3 col-border-right", "items": [ { - "source": "siteTreated", - "type": "feature" + "type": "row", + "items": [ + { + "source": "noRemediationInterventions", + "preLabel": "Number of remediation interventions installed", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "initialOrFollowup", + "preLabel": "Initial or follow-up treatment?", + "type": "selectOne" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Site/s covered by remediation", + "source": "sitesRemediated", + "type": "feature" + } + ] }, { - "readonly": "readonly", - "source": "calculatedAreaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHaRemediated", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] }, { - "readonly": "readonly", - "source": "calculatedLengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "source": "calculatedLengthTreatedKmRemediated", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] }, { "type": "row", "items": [ { "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", + "source": "extraMappingDetailsRemediated", "type": "document" } ] @@ -14802,31 +22723,40 @@ ] }, { - "helpText": "Enter the amount you will invoice for during this reporting period.", - "width": "10%", "type": "col", - "title": "Actual area (ha) / length (km) where disease has been managed", + "css": "span3 col-border-right", "items": [ { - "source": "areaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) / length (km) being remediated", + "source": "areaTreatedHaRemediated", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] }, { - "source": "lengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "source": "lengthTreatedKmRemediated", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] }, { "type": "row", "items": [ { "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", + "source": "mappingNotAlignedReasonRemediated", "type": "selectOne" } ] @@ -14836,36 +22766,119 @@ "items": [ { "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", + "source": "mappingNotAlignedCommentsRemediated", "type": "textarea", "rows": 5 } ] } ] + } + ] + }, + { + "type": "row", + "items": [ + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "activitiesStartDate", + "type": "date", + "preLabel": "Activity start date" + } + ] + } + ] }, { - "helpText": "Enter the amount you will invoice for during this reporting period.", - "width": "10%", "type": "col", - "title": "Invoiced area (ha) where disease has been managed", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "activitiesEndDate", + "preLabel": "Activity end date", + "type": "date" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Type of remediation intervention", + "source": "typesOfRemediationInstalled", + "type": "select2" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "otherRemediationType", + "placeholder": "Type of remediation intervention (if Other)", + "type": "text" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Type of aquatic or riparian remediation", + "source": "remediationType", + "type": "select2" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "otherAquaticOrRemediationType", + "placeholder": "Type of aquatic or riparian remediation (if Other)", + "type": "text" + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", "items": [ - { - "source": "areaTreatedInvoicedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, { "type": "row", "items": [ { - "source": "areaTreatedInvoicedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "preLabel": "Please identify any off-site area/s that may benefit from this service", + "source": "sitesBenefitted", + "type": "feature" } ] }, @@ -14873,9 +22886,12 @@ "type": "row", "items": [ { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedNotActualReason", - "type": "selectOne" + "source": "calculatedAreaTreatedHaBenefitted", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" } ] }, @@ -14883,352 +22899,144 @@ "type": "row", "items": [ { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedNotActualComments", - "type": "textarea", - "rows": 5 + "preLabel": "Please attach mapping details", + "source": "extraMappingDetailsBenefitted", + "type": "document" } ] } ] }, { - "width": "10%", - "source": "targetDisease", - "title": "Disease treated", - "type": "text" - }, - { - "width": "10%", "type": "col", - "title": "Type of management method / treatment", + "css": "span3 col-border-right", "items": [ { "type": "row", "items": [ { - "source": "managementMethod", - "type": "select2" + "source": "evidenceOfBenefit", + "preLabel": "Please provide a description on the evidence available to reflect this benefit", + "type": "textarea" } ] - }, - { - "source": "otherManagementMethod", - "placeholder": "Type of management method / treatment (if other)", - "type": "text" - } - ] - }, - { - "width": "10%", - "source": "treatmentObjective", - "title": "Management method / treatment objective", - "type": "textarea" - }, - { - "width": "15%", - "type": "col", - "title": "Please map any off-site area/s if they have also benefitted from this disease management", - "items": [ - { - "source": "offSiteBenefitSites", - "type": "feature" - }, - { - "source": "offSiteBenefitAreaHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, - { - "source": "offSiteBenefitLengthKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, - { - "source": "evidenceOfBenefit", - "placeholder": "Please provide a description on the evidence available to reflect this benefit", - "type": "textarea" - } - ] - }, - { - "width": "10%", - "type": "col", - "title": "Which investment priority does this activity relate to?", - "items": [ - { - "source": "investmentPriorities2", - "type": "select2Many" - }, - { - "source": "otherInvestmentPriority", - "type": "text" } ] - }, - { - "width": "10%", - "source": "relatedOutcomes", - "type": "selectOne", - "title": "Which outcome statement/s relates to this survey?" } - ], - "userAddedRows": true, - "source": "diseaseManagementDetails", - "type": "table" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" - } - ] - }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." - }, - { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" + ] } ] }, { - "type": "row", + "type": "section", "items": [ { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." - } - ] - }, - { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ - { - "title": "Attached documents", - "source": "attachments", - "type": "document" - } - ] - } - ] - }, - "modelName": null, - "templateName": "nhtDiseaseManagement", - "optional": true, - "optionalQuestionText": null, - "title": "Managing disease", - "collapsibleHeading": null, - "name": "NHT - Disease management", - "description": null - }, - { - "collapsedByDefault": false, - "template": { - "dataModel": [ - { - "columns": [ - { - "columns": [ - { - "dataType": "species", - "name": "species", - "validate": "required" - }, - { - "dataType": "text", - "name": "individualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "numberOfIndividualsOrGroups", - "validate": "required,min[0]" - }, - { - "dataType": "stringList", - "name": "ternSurveyTechnique", - "validate": "required", - "constraints": [ - "Tern Survey technique 1", - "Tern Survey technique 1", - "Tern Survey technique 1", - "Other" - ] - }, - { - "dataType": "text", - "description": "Please describe the Survey technique if other was selected.", - "name": "otherTernSurveyTechnique", - "behaviour": [ - { - "condition": "ternSurveyTechnique == \"Other\"", - "type": "enable_and_clear" - } - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "surveyMethodology", - "description": "Provide more details on what is being done", - "validate": "required,maxSize[3000]" - }, + "type": "row", + "items": [ { - "dataType": "text", - "name": "surveyObjective", - "description": "How will the information obtained from the survey be used", - "validate": "required,maxSize[3000]" - } - ], - "dataType": "list", - "name": "pestAnimalSurveySpeciesTable" - }, - { - "dataType": "text", - "name": "baselineOrIndicatorSurvey", - "description": "", - "constraints": [ - "Baseline", - "Indicator" - ], - "validate": "required" - }, - { - "name": "projectBaseline", - "dataType": "text", - "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", - "validate": "required", - "constraints": { - "textProperty": "baseline", - "valueProperty": "code", - "type": "pre-populated", - "excludePath": "projectBaseline", - "config": { - "source": { - "context-path": "owner.custom.details.baseline.rows" - } + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" } - } + ] }, { - "name": "datasetSupports", - "dataType": "text", - "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "name", - "valueProperty": "dataSetId", - "type": "pre-populated", - "config": { - "source": { - "context-path": "owner.custom.dataSets" - } + "type": "row", + "items": [ + { + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" } - } + ] }, { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } + "type": "row", + "items": [ + { + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" + }, + { + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" } - } + ] }, { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" + "type": "row", + "items": [ + { + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] }, { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] + } + ] + } + ] + }, + "modelName": null, + "templateName": "nhtRemediatingRiparianAndAquaticAreas", + "optional": true, + "optionalQuestionText": null, + "title": "Remediating riparian and aquatic areas", + "collapsibleHeading": null, + "name": "NHT - Remediating riparian and aquatic areas", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ + { + "columns": [ + { + "dataType": "text", + "name": "initialOrFollowup", + "constraints": [ + "Initial", + "Follow-up" + ], "validate": "required" }, { "dataType": "feature", - "name": "sitesTreated" + "name": "sitesUndertakenForWeedTreatment", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." }, { "computed": { - "expression": "$geom.areaHa(sitesTreated)" + "expression": "$geom.areaHa(sitesUndertakenForWeedTreatment)" }, "dataType": "number", "name": "calculatedAreaTreatedHa", "units": "ha", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "areaInvoicedTreatedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The managed area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] + "decimalPlaces": 3 }, { "computed": { - "expression": "$geom.lengthKm(sitesTreated)" + "expression": "$geom.lengthKm(sitesUndertakenForWeedTreatment)" }, "dataType": "number", "name": "calculatedLengthTreatedKm", @@ -15252,6 +23060,7 @@ }, "dataType": "number", "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", "units": "ha", "decimalPlaces": 3, "validate": "required,min[0]" @@ -15260,199 +23069,430 @@ "dataType": "text", "name": "mappingNotAlignedReason", "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ + { + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "label", + "type": "pre-populated", + "config": { + "source": { + "url": "/project/outcomesByScores", + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + }, + { + "expression": "scores", + "name": "scoreIds", + "type": "computed" + } + ] + } + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } + } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, + { + "columns": [ + { + "dataType": "species", + "name": "weedTargetSpecies", + "dwcAttribute": "scientificName", + "description": "Weed species targeted for treatment (start typing a scientific or common name for a species).", + "validate": "required" + }, + { + "dataType": "text", + "name": "threatenedEcologicalCommunity", + "validate": "maxSize[100]" + }, + { + "dataType": "text", + "name": "treatmentMethod", + "description": "The primary method used to treat the patch of the target species.", + "constraints": [ + "Basal bark spraying", + "Biological agents", + "Cut stump", + "Cut and swab", + "Dozing", + "Felling", + "Fire", + "Foliar spraying", + "Grubbing / chipping", + "Hand pulling", + "Moisture and nutrient control", + "Mowing", + "Overplanting", + "Pushing", + "Slashing", + "Spot spraying", + "Splatter gun", + "Stem injection", + "Stem scraper", + "Wick applicators", + "Other" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "otherTreatmentMethod", + "description": "Please specify the method of treatment used if Other was selected in the Type of treatment column.", + "behaviour": [ + { + "condition": "treatmentMethod == \"Other\"", + "type": "enable" + } + ], + "validate": "required,maxSize[100]" + }, + { + "dataType": "text", + "name": "treatmentObjective", + "description": "How will the work contribute to protecting the area?", + "validate": "required,maxSize[300]" + } + ], + "dataType": "list", + "name": "weedSpeciesTreated" + } + ], + "dataType": "list", + "name": "weedTreatmentAreasControlled" + }, + { + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" ], - "validate": "required", + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, "behaviour": [ { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1))", - "type": "visible" + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } - ] + ], + "validate": "required,min[0]" }, { "dataType": "text", - "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", + "name": "participationGroupNumber", "behaviour": [ { - "type": "visible", - "condition": "\"Other\" == mappingNotAlignedReason" + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" ] }, { - "dataType": "document", - "name": "extraMappingDetails", - "validate": "required", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, "behaviour": [ { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1)) or roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } - ] - }, - { - "dataType": "number", - "name": "areaInvoicedTreatedHa", - "units": "ha", - "decimalPlaces": 3, + ], "validate": [ + { + "rule": "required" + }, { "rule": "min[0]" }, { - "rule": "max", "param": { - "type": "computed", - "expression": "areaTreatedHa" - } - } - ] - }, - { - "dataType": "text", - "name": "invoicedNotActualReason", - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required", - "behaviour": [ - { - "condition": "roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" } ] }, { "dataType": "text", - "name": "invoicedNotActualComments", + "name": "firstNationGroupNumber", "behaviour": [ { - "type": "visible", - "condition": "\"Other\" == invoicedNotActualReason" + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } ], - "validate": "required,maxSize[300]" - }, - { - "defaultValue": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)" - }, - "dataType": "number", - "name": "lengthTreatedKm", - "units": "km", - "decimalPlaces": 3, + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], "validate": [ { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*0.9" - } + "rule": "required" }, { - "rule": "max", "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*1.1" - } + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" } ] }, { - "dataType": "number", - "name": "numberOfSurveyInvoice", - "validate": "required,min[0]" + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" } ], "dataType": "list", - "name": "pestAnimalSurveys", - "minSize": 1 + "name": "participationInformationTableRew" }, { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" + "dataType": "number", + "name": "totalAreaWeedsTreatedInitial", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(weedTreatmentAreasControlled, \"initialOrFollowup == 'Initial' ? areaTreatedHa : 0\")" + } }, { "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "decimalPlaces": 3, + "name": "totalAreaWeedsTreatedInitialInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaWeedsTreatedInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" } ], - "validate": "required,min[0]" + "defaultValue": "" }, { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ + "dataType": "number", + "name": "totalAreaWeedsTreatedFollowup", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(weedTreatmentAreasControlled, \"initialOrFollowup == 'Follow-up' ? areaTreatedHa : 0\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalAreaWeedsTreatedInvoicedFollowup", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaWeedsTreatedFollowup", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" } ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + "defaultValue": "" }, { "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "name": "totalLengthWeedsTreatedInitial", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(weedTreatmentAreasControlled, \"initialOrFollowup == 'Initial' ? lengthTreatedKm : 0\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalLengthWeedsTreatedInvoicedInitial", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalLengthWeedsTreatedInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" } ], - "validate": "required,min[0]" + "defaultValue": "" }, { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ + "dataType": "number", + "name": "totalLengthWeedsTreatedFollowup", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(weedTreatmentAreasControlled, \"initialOrFollowup == 'Follow-up' ? lengthTreatedKm : 0\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalLengthWeedsTreatedInvoicedFollowup", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalLengthWeedsTreatedFollowup", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" } ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + "defaultValue": "" }, { "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "name": "numberPestAnimalSurveysConducted", - "type": "number", - "decimalPlaces": 0, - "computed": { - "expression": "count(pestAnimalSurveys, \"baselineOrIndicatorSurvey\")" - } + "name": "totalInvoicedRemovingWeedsMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalAreaWeedsTreatedInitialInvoiced < +totalAreaWeedsTreatedInitial or +totalAreaWeedsTreatedInvoicedFollowup < +totalAreaWeedsTreatedFollowup or +totalLengthWeedsTreatedInvoicedInitial < +totalLengthWeedsTreatedInitial or +totalLengthWeedsTreatedInvoicedFollowup < +totalLengthWeedsTreatedFollowup", + "type": "enable" + } + ] }, { "dataType": "text", @@ -15466,12 +23506,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -15480,29 +23520,40 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Pest animal survey", - "title": "Pest animal survey", + "modelName": "NHT - Weed treatment", + "title": "Removing Weeds", "viewModel": [ { "type": "section", "items": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -15516,98 +23567,186 @@ }, { "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableRew", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total area (ha) treated for weeds (initial) for this reporting period", + "source": "totalAreaWeedsTreatedInitial", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total area (ha) treated for weeds (initial) invoiced for this reporting period", + "source": "totalAreaWeedsTreatedInitialInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", "items": [ { - "source": "firstNationIndividualNumber", - "type": "number" + "type": "row", + "items": [ + { + "preLabel": "(iii) Total area (ha) treated for weeds (follow-up) for this reporting period", + "source": "totalAreaWeedsTreatedFollowup", + "type": "number" + } + ] }, { - "source": "firstNationGroupNumber", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "(iv) Total area (ha) treated for weeds (follow-up) invoiced for this reporting period", + "source": "totalAreaWeedsTreatedInvoicedFollowup", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] } ] }, { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" - } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" - }, - { - "preLabel": "Number of Pest Animal surveys conducted:", - "noEdit": true, - "type": "number", - "source": "numberPestAnimalSurveysConducted" - }, - { - "addRowText": "New survey site", - "userAddedRows": true, - "source": "pestAnimalSurveys", - "type": "repeat", - "items": [ - { - "type": "row", - "css": "border-bottom", + "type": "col", + "css": "span4 col-border-right", "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "baselineOrIndicatorSurvey", - "type": "selectOne", - "preLabel": "Baseline survey or indicator (follow-up) survey?" - } - ] + "preLabel": "(v) Total length (km) treated for weeds (initial) for this reporting period", + "source": "totalLengthWeedsTreatedInitial", + "type": "number" } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "projectBaseline", - "type": "selectOne", - "preLabel": "Which project baseline relates to this survey?" - } - ] + "preLabel": "(vi) Total length (km) treated for weeds (initial) invoiced for this reporting period", + "source": "totalLengthWeedsTreatedInvoicedInitial", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } } ] - }, + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "datasetSupports", - "type": "select2Many", - "preLabel": "What dataset supports this?" - } - ] + "preLabel": "(vii) Total length (km) treated for weeds (follow-up) for this reporting period", + "source": "totalLengthWeedsTreatedFollowup", + "type": "number" } ] }, { + "type": "row", + "items": [ + { + "preLabel": "(viii) Total length (km) treated for weeds (follow-up) invoiced for this reporting period", + "source": "totalLengthWeedsTreatedInvoicedFollowup", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedRemovingWeedsMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "New weed removal site", + "userAddedRows": true, + "source": "weedTreatmentAreasControlled", + "type": "repeat", + "items": [ + { + "type": "row", + "items": [ + { + "css": "span3", "type": "col", - "css": "span3 col-border-right", "items": [ { "type": "row", @@ -15615,7 +23754,7 @@ { "source": "relatedOutcomes", "type": "selectOne", - "preLabel": "Which outcome statement/s relates to this survey?" + "preLabel": "Which outcome statement/s does this activity relate to?" } ] } @@ -15629,30 +23768,47 @@ "type": "row", "items": [ { - "preLabel": "Activities start date", - "source": "activitiesStartDate", - "type": "date" + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" } ] } ] }, { + "css": "span3", "type": "col", - "css": "span3 col-border-right", "items": [ { "type": "row", "items": [ { - "preLabel": "Activities end date", - "source": "activitiesEndDate", - "type": "date" + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" } ] } ] - }, + } + ] + }, + { + "css": "border-bottom", + "type": "row", + "items": [ + { + "preLabel": "Initial or follow-up treatment", + "css": "span3", + "source": "initialOrFollowup", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ { "type": "col", "css": "span3 col-border-right", @@ -15661,8 +23817,8 @@ "type": "row", "items": [ { - "preLabel": "Sites covered by pest animal surveys", - "source": "sitesTreated", + "preLabel": "Site/s treated for weed removal", + "source": "sitesUndertakenForWeedTreatment", "type": "feature" } ] @@ -15713,7 +23869,7 @@ "type": "row", "items": [ { - "preLabel": "Actual area (ha) / length (km) covered by pest animal surveys", + "preLabel": "Actual area (ha) / length (km) treated for weed removal", "source": "areaTreatedHa", "type": "number", "displayOptions": { @@ -15756,73 +23912,46 @@ ] } ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "preLabel": "How many surveys will you be invoicing for?", - "source": "numberOfSurveyInvoice", - "type": "number" - } - ] - } - ] } ] }, { "columns": [ { - "width": "25%", - "source": "species", - "title": "Target species recorded", + "width": "20%", + "source": "weedTargetSpecies", + "title": "Target weed species", "type": "speciesSelect" }, { - "width": "10%", - "source": "individualsOrGroups", - "title": "Individuals or groups?", - "type": "selectOne" - }, - { - "width": "10%", - "source": "numberOfIndividualsOrGroups", - "title": "Number of groups / individuals in Pest Animal survey", - "type": "number" - }, - { - "width": "10%", - "title": "Survey technique", - "source": "ternSurveyTechnique", - "type": "selectOne" + "width": "22%", + "source": "threatenedEcologicalCommunity", + "title": "Threatened Ecological Communities (if applicable) benefitting from this activity", + "type": "text" }, { "width": "15%", - "title": "Survey technique (if Other)", - "source": "otherTernSurveyTechnique", - "type": "text" + "source": "treatmentMethod", + "title": "Type of treatment being used", + "type": "selectOne" }, { - "width": "15%", - "source": "surveyMethodology", - "title": "Survey methodology", + "width": "20%", + "source": "otherTreatmentMethod", + "title": "Type of treatment (if other)", "type": "text" }, { - "width": "15%", - "source": "surveyObjective", - "title": "Survey objective", - "type": "text" + "width": "23%", + "source": "treatmentObjective", + "title": "Treatment objective", + "type": "textarea" } ], "userAddedRows": true, + "addRowText": "Add a new weed species", "disableTableUpload": true, - "source": "pestAnimalSurveySpeciesTable", + "source": "weedSpeciesTreated", "type": "table" } ] @@ -15855,7 +23984,7 @@ "items": [ { "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { "preLabel": "Data have been uploaded", @@ -15894,203 +24023,155 @@ ] }, "modelName": null, - "templateName": "nhtPestAnimalSurvey", + "templateName": "nhtWeedTreatment", "optional": true, "optionalQuestionText": null, - "title": "Pest animal survey", + "title": "Removing weeds", "collapsibleHeading": null, - "name": "NHT - Pest animal survey", - "description": null - }, - { - "collapsedByDefault": false, - "template": { - "dataModel": [ - { - "columns": [ - { - "dataType": "stringList", - "name": "ternSurveyTechnique", - "validate": "required", - "constraints": [ - "Tern Survey technique 1", - "Tern Survey technique 1", - "Tern Survey technique 1", - "Other" - ] - }, - { - "dataType": "text", - "description": "Please describe the Survey technique if other was selected.", - "name": "otherTernSurveyTechnique", - "behaviour": [ - { - "condition": "ternSurveyTechnique == \"Other\"", - "type": "enable_and_clear" - } - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "surveyMethodology", - "description": "Provide more details on what is being done", - "validate": "required,maxSize[3000]" - }, - { - "dataType": "text", - "name": "surveyObjective", - "description": "How will the information obtained from the survey be used", - "validate": "required,maxSize[3000]" - }, - - { - "columns": [ - { - "dataType": "species", - "name": "species", - "validate": "required" - }, - { - "dataType": "text", - "name": "plantingMethod", - "constraints": [ - "Direct seeding", - "Tubestock/Seedling planting" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "hectaresPlanted", - "validate": "required,min[0]" - }, - { - "dataType": "number", - "name": "kilosOfDirectSeeding", - "validate": "required,min[0]" - }, - { - "dataType": "number", - "name": "numberPlanted", - "validate": "required,min[0]" - }, - { - "dataType": "number", - "name": "numberSurvived", - "validate": "required,min[0]" - }, - { - "dataType": "number", - "name": "survivalRate", - "validate": "required,min[0]" - } + "name": "NHT - Weed treatment", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ + { + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" ], - "dataType": "list", - "name": "surveySpeciesTable" + "validate": "required" }, - { "dataType": "number", - "name": "numberSurveysConducted" + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" }, { - "name": "projectBaseline", "dataType": "text", - "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", - "validate": "required", - "constraints": { - "textProperty": "baseline", - "valueProperty": "code", - "type": "pre-populated", - "excludePath": "projectBaseline", - "config": { - "source": { - "context-path": "owner.custom.details.baseline.rows" - } + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } - } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] }, { - "name": "datasetSupports", - "dataType": "text", - "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "name", - "valueProperty": "dataSetId", - "type": "pre-populated", - "config": { - "source": { - "context-path": "owner.custom.dataSets" - } + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } - } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] }, { - "name": "relatedOutcomes", "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } - } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] }, { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableReh" + }, + { + "columns": [ { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", + "dataType": "text", + "name": "initialOrMaintenance", + "constraints": [ + "Initial", + "Maintenance" + ], "validate": "required" }, { "dataType": "feature", - "name": "sitesTreated" + "name": "sitesBeingRevegetated", + "description": "Mapping field to be done and Area (ha) field be auto-calculated from mapping." }, { "computed": { - "expression": "$geom.areaHa(sitesTreated)" + "expression": "$geom.areaHa(sitesBeingRevegetated)" }, "dataType": "number", "name": "calculatedAreaTreatedHa", "units": "ha", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "areaInvoicedTreatedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The managed area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] + "decimalPlaces": 3 }, { "computed": { - "expression": "$geom.lengthKm(sitesTreated)" + "expression": "$geom.lengthKm(sitesBeingRevegetated)" }, "dataType": "number", "name": "calculatedLengthTreatedKm", @@ -16114,6 +24195,7 @@ }, "dataType": "number", "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", "units": "ha", "decimalPlaces": 3, "validate": "required,min[0]" @@ -16128,15 +24210,15 @@ "validate": "required", "behaviour": [ { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1))", - "type": "visible" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" } ] }, { "dataType": "text", "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", + "validate": "required,maxSize[100]", "behaviour": [ { "type": "visible", @@ -16151,165 +24233,276 @@ "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", "behaviour": [ { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1)) or roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" } ] }, { + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { + "dataType": "feature", + "name": "offSiteBenefitSites" + }, + { + "defaultValue": { + "type": "computed", + "expression": "$geom.areaHa(offSiteBenefitSites)" + }, "dataType": "number", - "name": "areaInvoicedTreatedHa", - "units": "ha", - "decimalPlaces": 3, + "name": "offSiteBenefitAreaHa", "validate": [ { - "rule": "min[0]" + "rule": "min", + "param": { + "type": "computed", + "expression": "$geom.areaHa(offSiteBenefitSites)*0.9" + } }, { "rule": "max", "param": { "type": "computed", - "expression": "areaTreatedHa" + "expression": "$geom.areaHa(offSiteBenefitSites)*1.1" } } ] }, { "dataType": "text", - "name": "invoicedNotActualReason", - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], + "name": "evidenceOfBenefit", + "validate": "maxSize[300]" + }, + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", "validate": "required", - "behaviour": [ - { - "condition": "roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" + "constraints": { + "textProperty": "label", + "valueProperty": "label", + "type": "pre-populated", + "config": { + "source": { + "url": "/project/outcomesByScores", + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + }, + { + "expression": "scores", + "name": "scoreIds", + "type": "computed" + } + ] + } } - ] + } + }, + { + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } + } + } }, { "dataType": "text", - "name": "invoicedNotActualComments", + "name": "otherInvestmentPriority", "behaviour": [ { - "type": "visible", - "condition": "\"Other\" == invoicedNotActualReason" + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" } + ] + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" ], - "validate": "required,maxSize[300]" + "validate": "required" }, { - "defaultValue": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)" - }, - "dataType": "number", - "name": "lengthTreatedKm", - "units": "km", - "decimalPlaces": 3, + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required" + }, + { + "dataType": "date", + "name": "activitiesEndDate", + "description": "Specific the dates these events were held on.", "validate": [ { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*0.9" - } + "rule": "required" + }, + { + "rule": "future", + "param": { + "expression": "formatDateForValidation(activitiesStartDate)", + "type": "computed" + } + } + ] + }, + { + "columns": [ + { + "dataType": "species", + "name": "species", + "dwcAttribute": "scientificName", + "description": "", + "validate": "required" + }, + { + "dataType": "text", + "name": "objectiveRevegetationActivity", + "validate": "required,maxSize[100]" + }, + { + "dataType": "text", + "name": "revegetationMethod", + "dwcAttribute": "establishmentMeans", + "constraints": [ + "Direct seeding", + "Tubestock planting", + "Both", + "Other" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "otherRevegetationMethod", + "behaviour": [ + { + "condition": "revegetationMethod == \"Other\"", + "type": "enable" + } + ], + "validate": "required,maxSize[100]" }, { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*1.1" - } + "dataType": "text", + "name": "threatenedEcologicalCommunity", + "description": "This free text field allows multiple TECs to be entered. They should be written as listed in EPBC, and separated by ';'", + "validate": "required,maxSize[100]" + }, + { + "dataType": "number", + "name": "numberPlanted", + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "revegetationActivityDescription", + "validate": "required,maxSize[300]" } - ] + ], + "dataType": "list", + "name": "revegetationDetails" } ], "dataType": "list", - "name": "plantSurveys", - "minSize": 1 + "name": "revegetationAreasControlled" }, { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" + "dataType": "number", + "name": "totalAreaWeedsTreatedInitial", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(revegetationAreasControlled, \"initialOrMaintenance == 'Initial' ? areaTreatedHa : 0\")" + } }, { "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "decimalPlaces": 3, + "name": "totalAreaWeedsTreatedInitialInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaWeedsTreatedInitial", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" } ], - "validate": "required,min[0]" + "defaultValue": "" }, { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + "dataType": "number", + "name": "totalAreaWeedsTreatedFollowup", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(revegetationAreasControlled, \"initialOrMaintenance == 'Maintenance' ? areaTreatedHa : 0\")" + } }, { "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "decimalPlaces": 3, + "name": "totalAreaWeedsTreatedInvoicedFollowup", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAreaWeedsTreatedFollowup", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" } ], - "validate": "required,min[0]" + "defaultValue": "" }, { "dataType": "text", - "name": "firstNationGroupNumber", + "name": "totalInvoicedRevegetatingMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", "behaviour": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", + "condition": "+totalAreaWeedsTreatedInitialInvoiced < +totalAreaWeedsTreatedInitial or +totalAreaWeedsTreatedInvoicedFollowup < +totalAreaWeedsTreatedFollowup", "type": "enable" } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "name": "numberPlantSurvivalSurveys", - "type": "number", - "decimalPlaces": 0, - "computed": { - "expression": "count(plantSurveys, \"projectBaseline\")" - } + ] }, { "dataType": "text", @@ -16323,12 +24516,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -16337,1436 +24530,2057 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Plant survival survey", - "title": "Plant survival survey", + "modelName": "NHT - Revegetating habitat", + "title": "Revegetating Habitat", "viewModel": [ { - "type": "section", + "type": "row", "items": [ { - "columns": [ + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, + "columns": [ + { + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", + "type": "selectOne" + }, + { + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ { - "width": "10%", - "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" }, { - "width": "20%", - "type": "col", - "title": "Total Number of people delivering this service", + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableReh", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", "items": [ { - "source": "participationIndividualNumber", + "preLabel": "(i) Total area (ha) of habitat revegetated (initial) for this reporting period", + "source": "totalAreaWeedsTreatedInitial", "type": "number" - }, + } + ] + }, + { + "type": "row", + "items": [ { - "source": "participationGroupNumber", - "type": "selectOne" + "preLabel": "(ii) Total area (ha) of habitat revegetated (initial) invoiced for this reporting period", + "source": "totalAreaWeedsTreatedInitialInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total area (ha) of habitat revegetated (maintenance) for this reporting period", + "source": "totalAreaWeedsTreatedFollowup", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total area (ha) of habitat revegetated (maintenance) invoiced for this reporting period", + "source": "totalAreaWeedsTreatedInvoicedFollowup", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedRevegetatingMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "New area of revegetation", + "userAddedRows": true, + "source": "revegetationAreasControlled", + "type": "repeat", + "items": [ + { + "type": "row", + "items": [ + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] } ] }, { + "css": "span3", "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", "items": [ { - "source": "firstNationIndividualNumber", - "type": "number" - }, - { - "source": "firstNationGroupNumber", - "type": "selectOne" + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] } ] - }, - { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" + ] }, { - "preLabel": "Number of Plant Survival surveys completed:", - "noEdit": true, - "type": "number", - "source": "numberPlantSurvivalSurveys" + "type": "row", + "css": "border-bottom", + "items": [ + { + "preLabel": "Initial or maintenance activity?", + "css": "span3", + "source": "initialOrMaintenance", + "type": "selectOne" + } + ] }, { - "addRowText": "New survey site", - "userAddedRows": true, - "source": "plantSurveys", - "type": "repeat", + "type": "row", "items": [ { - "type": "row", - "css": "border-bottom", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "source": "numberSurveysConducted", - "preLabel": "Number of surveys conducted", - "type": "number" - } - ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "source": "projectBaseline", - "type": "selectOne", - "preLabel": "Which project baseline relates to this survey?" - } - ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "datasetSupports", - "type": "select2Many", - "preLabel": "What dataset supports this?" - } - ] + "preLabel": "Site/s being revegetated", + "source": "sitesBeingRevegetated", + "type": "feature" } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "relatedOutcomes", - "type": "selectOne", - "preLabel": "Which outcome statement/s relates to this survey?" - } - ] + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Activities start date", - "source": "activitiesStartDate", - "type": "date" - } - ] + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" } ] - }, + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Activities end date", - "source": "activitiesEndDate", - "type": "date" - } - ] + "preLabel": "Actual area (ha) of habitat revegetated", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Sites surveyed for plant survival", - "source": "sitesTreated", - "type": "feature" - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "calculatedAreaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "calculatedLengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" - } - ] + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Actual area (ha) / length (km) surveyed for plant survival", - "source": "areaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "lengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" - } - ] - }, - { - "type": "row", - "items": [ - { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 - } - ] + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 } ] - }, + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "css": "span3", + "type": "col", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Survey technique", - "source": "ternSurveyTechnique", - "type": "selectOne" - } - ] + "source": "activitiesStartDate", + "type": "date", + "preLabel": "Activity start date" } ] - }, + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Survey technique (if Other)", - "source": "otherTernSurveyTechnique", - "type": "text" - } - ] + "source": "activitiesEndDate", + "preLabel": "Activity end date", + "type": "date" } ] - }, + } + ] + } + ] + }, + { + "columns": [ + { + "width": "20%", + "source": "species", + "title": "Target Plant Species", + "type": "speciesSelect" + }, + { + "width": "10%", + "source": "numberPlanted", + "title": "Numbers planted", + "type": "number" + }, + { + "width": "10%", + "title": "Planting method", + "type": "col", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "surveyMethodology", - "preLabel": "Survey methodology", - "type": "text" - } - ] + "source": "revegetationMethod", + "type": "selectOne" } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "source": "surveyObjective", - "preLabel": "Survey objective", - "type": "text" - } - ] + "placeholder": "Planting method (if other)", + "source": "otherRevegetationMethod", + "type": "textarea" } ] } ] }, { - "columns": [ - { - "width": "30%", - "source": "species", - "title": "Target species recorded", - "type": "speciesSelect" - }, - { - "width": "20%", - "title": "Planting Method", - "source": "plantingMethod", - "type": "selectOne" - }, - { - "width": "10%", - "source": "hectaresPlanted", - "title": "How many hectares planted?", - "type": "number" - }, - { - "width": "10%", - "source": "kilosOfDirectSeeding", - "title": "Number of kilos for direct seeding", - "type": "number" - }, - { - "width": "10%", - "source": "numberPlanted", - "title": "Number planted (Tubestock/Seedling planting)", - "type": "number" - }, - { - "width": "10%", - "source": "numberSurvived", - "title": "Number Survived", - "type": "number" - }, - { - "width": "10%", - "source": "survivalRate", - "title": "Survival Rate %", - "type": "number" - } - ], - "userAddedRows": true, - "disableTableUpload": true, - "source": "surveySpeciesTable", - "type": "table" + "width": "20%", + "source": "objectiveRevegetationActivity", + "title": "Objective of revegetation activity", + "type": "text" + }, + { + "width": "20%", + "source": "revegetationActivityDescription", + "title": "Description of revegetation activity", + "type": "textarea" + }, + { + "width": "20%", + "source": "threatenedEcologicalCommunity", + "title": "Threatened Ecological Communities (if applicable) benefitting from this activity", + "type": "text" + } + ], + "userAddedRows": true, + "addRowText": "Add a new plant species to this area", + "disableTableUpload": true, + "source": "revegetationDetails", + "type": "table" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" + }, + { + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, + { + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] + } + ] + }, + "modelName": null, + "templateName": "nhtRevegetatingHabitat", + "optional": true, + "optionalQuestionText": null, + "title": "Revegetating habitat", + "collapsibleHeading": null, + "name": "NHT - Revegetating habitat", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ + { + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" } ] }, { - "type": "row", - "items": [ + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableScp" + }, + { + "columns": [ + { + "dataType": "feature", + "name": "sitesCollectionAndPropagation", + "description": "Mapping field to be done and Area (ha) field be auto-calculated from mapping." + }, + { + "computed": { + "expression": "$geom.areaHa(sitesCollectionAndPropagation)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesCollectionAndPropagation)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } } ] }, { - "type": "row", - "items": [ + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReason", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1))", + "type": "if" } ] }, { - "type": "row", - "items": [ + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." - }, + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1))", + "type": "if" } ] }, { - "type": "row", - "items": [ + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKm" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "label", + "type": "pre-populated", + "config": { + "source": { + "url": "/project/outcomesByScores", + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + }, + { + "expression": "scores", + "name": "scoreIds", + "type": "computed" + } + ] + } + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } + } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" } ] }, { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, + { "columns": [ { - "title": "Attached documents", - "source": "attachments", - "type": "document" + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required" + }, + { + "dataType": "date", + "name": "activitiesEndDate", + "description": "Specific the dates these events were held on.", + "validate": [ + { + "rule": "required" + }, + { + "rule": "future", + "param": { + "expression": "formatDateForValidation(activitiesStartDate)", + "type": "computed" + } + } + ] + }, + { + "dataType": "text", + "name": "activityType", + "constraints": [ + "Collecting", + "Storing", + "Propagating" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "activityPurpose", + "validate": "required,maxSize[300]" + }, + { + "dataType": "text", + "name": "materialType", + "constraints": [ + "Seeds", + "Plant cuttings" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "otherSeedSources", + "validate": "maxSize[300]" + }, + { + "dataType": "text", + "name": "storingFacility", + "validate": "required,maxSize[300]" + }, + { + "dataType": "text", + "name": "threatEcoCommunity", + "validate": "maxSize[100]", + "description": "This free text field allows multiple TECs to be entered. They should be written as listed in EPBC, and separated by ';'" } - ] - } - ] - } - ] - }, - "modelName": null, - "templateName": "nhtPlantSurvivalSurvey", - "optional": true, - "optionalQuestionText": null, - "title": "Plant survival survey", - "collapsibleHeading": null, - "name": "NHT - Plant survival survey", - "description": null - }, - { - "collapsedByDefault": false, - "template": { - "dataModel": [ - { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" + ], + "dataType": "list", + "name": "seedCollectionDetails" + }, + { + "dataType": "species", + "name": "species", + "validate": "required" + }, + { + "dataType": "text", + "name": "inKgSeedCollected", + "constraints": [ + "Individuals", + "Grams" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "amountSeedCollected", + "decimalPlaces": 5, + "validate": "required" + }, + { + "dataType": "number", + "name": "numberOfDaysCollectingSeeds", + "validate": "required" + }, + { + "dataType": "number", + "name": "numberOfSourcePlants" + }, + { + "dataType": "number", + "name": "noOfPlantsPropogated" + }, + { + "name": "noOfDaysPropagating", + "dataType": "number" + } ], - "validate": "required" + "dataType": "list", + "name": "areasOfSeedCollection" }, { "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" + "name": "totalAmountSeedsCuttingsCollected", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(areasOfSeedCollection, \"amountSeedCollected\")" + } }, { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ + "dataType": "number", + "name": "totalAmountSeedsCuttingsCollectedInvoiced", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAmountSeedsCuttingsCollected", + "type": "computed" + }, + "rule": "max" } ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + "defaultValue": "" }, { "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" + "name": "totalDaysSeedsCuttingsCollected", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(areasOfSeedCollection, \"numberOfDaysCollectingSeeds\")" + } }, { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ + "dataType": "number", + "name": "totalDaysSeedsCuttingsCollectedInvoiced", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalDaysSeedsCuttingsCollected", + "type": "computed" + }, + "rule": "max" } ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + "defaultValue": "" }, { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" + "dataType": "number", + "name": "totalDaysPropagating", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(areasOfSeedCollection, \"noOfDaysPropagating\")" + } }, { - "dataType": "text", - "name": "initialOrFollowup", - "constraints": [ - "Initial", - "Follow-up" + "dataType": "number", + "name": "totalDaysPropagatingInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalDaysPropagating", + "type": "computed" + }, + "rule": "max" + } ], - "validate": "required" + "defaultValue": "" }, { - "dataType": "feature", - "name": "sitesRemediated" + "dataType": "number", + "name": "totalPlantsPropagated", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(areasOfSeedCollection, \"noOfPlantsPropogated\")" + } }, { - "computed": { - "expression": "$geom.areaHa(sitesRemediated)" - }, "dataType": "number", - "name": "calculatedAreaRemediatedHa", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ + "name": "totalPlantsPropagatedInvoiced", + "validate": [ { - "condition": "areaRemediatedInvoicedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The remediated area must be mapped", - "validate": "required,min[0.0001]" - } + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalPlantsPropagated", + "type": "computed" + }, + "rule": "max" } - ] + ], + "defaultValue": "" }, { - "computed": { - "expression": "$geom.lengthKm(sitesRemediated)" - }, - "dataType": "number", - "name": "calculatedLengthRemediatedKm", - "units": "km", - "decimalPlaces": 3, + "dataType": "text", + "name": "totalInvoicedSeedCollectionMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", "behaviour": [ { - "condition": "lengthRemediatedInvoicedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The remediated length must be mapped", - "validate": "required,min[0.0001]" - } + "condition": "+totalAmountSeedsCuttingsCollectedInvoiced < +totalAmountSeedsCuttingsCollected or +totalDaysSeedsCuttingsCollectedInvoiced < +totalDaysSeedsCuttingsCollected or +totalDaysPropagatingInvoiced < +totalDaysPropagating or +totalPlantsPropagatedInvoiced < +totalPlantsPropagated", + "type": "enable" } ] }, { - "defaultValue": { - "expression": "calculatedAreaRemediatedHa", - "type": "computed" - }, - "dataType": "number", - "name": "areaRemediatedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "required,min[0]" + "dataType": "text", + "name": "comments", + "validate": "maxSize[1500]" }, { - "defaultValue": { - "expression": "calculatedLengthRemediatedKm", - "type": "computed" - }, - "dataType": "number", - "name": "lengthRemediatedKm", - "units": "km", - "decimalPlaces": 3, - "validate": "required,min[0]" + "dataType": "image", + "name": "photographicEvidence" }, { + "dataType": "boolean", + "name": "dataUploaded", + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" + }, + { + "name": "projectAssuranceDetails", "dataType": "text", - "name": "mappingNotAlignedReason", - "behaviour": [ + "validate": "required,maxSize[5000]" + }, + { + "dataType": "list", + "name": "assuranceDocuments", + "columns": [ { - "condition": "not (within(calculatedAreaRemediatedHa, areaRemediatedHa, 0.1) and within(calculatedLengthRemediatedKm, lengthRemediatedKm, 0.1))", - "type": "visible" + "dataType": "document", + "name": "attachments", + "description": "Please attach any Evidence of Service Delivery here." } - ], - "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" - ], - "validate": "required" + ] + } + ], + "modelName": "NHT - Seed Collection", + "title": "Seed Collection and Propagation", + "viewModel": [ + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] }, { - "dataType": "text", - "name": "mappingNotAlignedComments", - "behaviour": [ + "disableTableUpload": true, + "columns": [ + { + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", + "type": "selectOne" + }, + { + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, { - "condition": "\"Other\" == mappingNotAlignedReason", - "type": "visible" + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" } ], - "validate": "required,maxSize[300]" + "source": "participationInformationTableScp", + "type": "table" }, { - "dataType": "document", - "name": "extraMappingDetails", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", - "behaviour": [ + "type": "row", + "items": [ { - "condition": "not (within(calculatedAreaRemediatedHa, areaRemediatedHa, 0.1) and within(calculatedLengthRemediatedKm, lengthRemediatedKm, 0.1)) or roundTo(areaRemediatedHa, 2) != roundTo(areaRemediatedInvoicedHa, 2) or roundTo(lengthRemediatedKm, 2) != roundTo(lengthRemediatedInvoicedKm, 2)", - "type": "visible" + "type": "literal", + "source": "Totals Summary" } - ], - "validate": "required" + ] }, { - "dataType": "number", - "name": "areaRemediatedInvoicedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": [ + "type": "row", + "items": [ { - "rule": "min[0]" + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total amount (grams)/number of seeds/cuttings collected for this reporting period", + "source": "totalAmountSeedsCuttingsCollected", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total amount (grams)/number of seeds/cuttings collected and invoiced for this reporting period", + "source": "totalAmountSeedsCuttingsCollectedInvoiced", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total number of days collecting seeds/cuttings for this reporting period", + "source": "totalDaysSeedsCuttingsCollected", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total number of days collecting seeds/cuttings invoiced for this reporting period", + "source": "totalDaysSeedsCuttingsCollectedInvoiced", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(v) Total number of plants propagated for this reporting period", + "source": "totalPlantsPropagated", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(vi) Total number of plants propagated invoiced for this reporting period", + "source": "totalPlantsPropagatedInvoiced", + "type": "number" + } + ] + } + ] }, { - "param": { - "expression": "areaRemediatedHa", - "type": "computed" - }, - "rule": "max" + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(vii) Total number of days propagating for this reporting period", + "source": "totalDaysPropagating", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(viii) Total number of days propagating invoiced for this reporting period", + "source": "totalDaysPropagatingInvoiced", + "type": "number" + } + ] + } + ] } ] }, { - "dataType": "number", - "name": "lengthRemediatedInvoicedKm", - "units": "km", - "decimalPlaces": 3, - "validate": [ - { - "rule": "min[0]" - }, + "type": "row", + "items": [ { - "param": { - "expression": "lengthRemediatedKm", - "type": "computed" - }, - "rule": "max" + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedSeedCollectionMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" } ] }, { - "dataType": "text", - "name": "invoicedNotActualReason", - "behaviour": [ + "addRowText": "Add a new collection/propagation site", + "userAddedRows": true, + "source": "areasOfSeedCollection", + "type": "repeat", + "items": [ { - "condition": "roundTo(areaRemediatedHa, 2) != roundTo(areaRemediatedInvoicedHa, 2) or roundTo(lengthRemediatedKm, 2) != roundTo(lengthRemediatedInvoicedKm, 2)", - "type": "visible" - } - ], - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ + "type": "row", + "items": [ + { + "css": "span3 col-border-right", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { + "css": "span3 col-border-right", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + } + ] + }, { - "condition": "\"Other\" == invoicedNotActualReason", - "type": "visible" - } - ], - "validate": "required,maxSize[300]" - }, - - { - "columns": [ + "type": "row", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Site/s where collection/propagation was undertaken", + "source": "sitesCollectionAndPropagation", + "type": "feature" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Actual Area (ha) where collection/propagation was undertaken", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] + } + ] + } + ] + }, { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" + "type": "row", + "items": [ + { + "css": "span3 col-border-right", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "species", + "type": "speciesSelect", + "preLabel": "Target species recorded" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "inKgSeedCollected", + "preLabel": "Individuals (cuttings) / grams of seed collected", + "type": "selectOne" + } + ] + } + ] + }, + { + "css": "span3 col-border-right", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "amountSeedCollected", + "preLabel": "Amount of seeds (grams)/Number of individuals (cuttings) collected", + "type": "number" + } + ] + } + ] + }, + { + "css": "span3 col-border-right", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "numberOfDaysCollectingSeeds", + "preLabel": "Number of days collecting seeds/cuttings", + "type": "number" + } + ] } - ] - } - } - } - }, - { - "name": "investmentPriorities2", - "dataType": "stringList", - "validate": "required", - "constraints": { - "type": "pre-populated", - "config": { - "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" - } - } - } - }, - { - "dataType": "text", - "name": "otherInvestmentPriority", - "behaviour": [ + ] + }, { - "type": "enable", - "condition": "\"Other\" in investmentPriorities2" + "css": "span3 col-border-right", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "noOfPlantsPropogated", + "preLabel": "Number of plants propagated", + "type": "number" + } + ] + } + ] + }, + { + "css": "span3 col-border-right", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "noOfDaysPropagating", + "preLabel": "Number of days propagating", + "type": "number" + } + ] + } + ] + }, + { + "css": "span3 col-border-right", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "numberOfSourcePlants", + "preLabel": "Number of source plants", + "type": "number" + } + ] + } + ] } ] }, { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "number", - "name": "numberOfStructuresInstalled", - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "typesOfStructuresInstalled", - "description": "", - "constraints": [ - "Access control", - "Bank grooming", - "Flow gauging stations", - "Fords", - "Culverts", - "Revegetation", - "Weirs", - "Other" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "otherStructuresType", - "behaviour": [ + "columns": [ { - "condition": "typesOfStructuresInstalled == \"Other\"", - "type": "enable" - } - ], - "validate": "required,maxSize[100]" - }, - { - "dataType": "text", - "name": "remediationType", - "description": "", - "constraints": [ - "Access control", - "Bank grooming", - "Flow gauging stations", - "Fords", - "Culverts", - "Revegetation", - "Weirs", - "Other" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "otherRemediationType", - "behaviour": [ + "width": "10%", + "title": "Activity start date", + "source": "activitiesStartDate", + "type": "date" + }, { - "condition": "remediationType == \"Other\"", - "type": "enable" + "width": "10%", + "title": "Activity end date", + "source": "activitiesEndDate", + "type": "date" + }, + { + "width": "10%", + "title": "Type of activity", + "source": "activityType", + "type": "selectOne" + }, + { + "width": "15%", + "title": "Purpose of activity", + "source": "activityPurpose", + "type": "textarea" + }, + { + "width": "10%", + "title": "Type of material collected/stored or propagated", + "source": "materialType", + "type": "selectOne" + }, + { + "width": "15%", + "source": "otherSeedSources", + "title": "Other seed sources (if applicable)", + "type": "textarea" + }, + { + "width": "15%", + "source": "storingFacility", + "title": "Name of storing facility", + "type": "textarea" + }, + { + "width": "15%", + "source": "threatEcoCommunity", + "title": "Threatened Ecological Community (if applicable) where the seeds were sourced from", + "type": "textarea" } ], - "validate": "required,maxSize[100]" - }, - { - "dataType": "feature", - "name": "offSiteBenefitSites" - }, - { - "defaultValue": { - "expression": "$geom.areaHa(offSiteBenefitSites)", - "type": "computed" - }, - "dataType": "number", - "name": "offSiteBenefitAreaHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "min[0]" - }, - { - "dataType": "text", - "name": "evidenceOfBenefit", - "validate": "maxSize[300]" + "userAddedRows": true, + "addRowText": "Add a new propagation/storage/collecting activity", + "disableTableUpload": true, + "source": "seedCollectionDetails", + "type": "table" } - ], - "dataType": "list", - "name": "remediationDetails" - }, - { - "dataType": "text", - "name": "comments", - "validate": "maxSize[1500]" - }, - { - "dataType": "image", - "name": "photographicEvidence" - }, - { - "dataType": "boolean", - "name": "dataUploaded", - "description": "" - }, - { - "dataType": "text", - "name": "projectAssuranceDetails", - "description": "" + ] }, { - "dataType": "list", - "name": "assuranceDocuments", - "columns": [ + "type": "section", + "items": [ { - "dataType": "document", - "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" - } - ] - } - ], - "modelName": "NHT - Remediating riparian and aquatic areas", - "title": "Remediating riparian and aquatic areas", - "viewModel": [ - { - "columns": [ + "type": "row", + "items": [ + { + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" + } + ] + }, { - "width": "10%", - "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] }, { - "width": "20%", - "type": "col", - "title": "Total Number of people delivering this service", + "type": "row", "items": [ { - "source": "participationIndividualNumber", - "type": "number" + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { - "source": "participationGroupNumber", - "type": "selectOne" + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" } ] }, { - "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "type": "row", "items": [ { - "source": "firstNationIndividualNumber", - "type": "number" - }, - { - "source": "firstNationGroupNumber", - "type": "selectOne" + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." } ] }, { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" - }, + ] + } + ] + }, + "modelName": null, + "templateName": "statesSeedCollecting", + "optional": true, + "optionalQuestionText": null, + "title": null, + "collapsibleHeading": null, + "name": "NHT - Seed Collection", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ { - "type": "section", - "items": [ + "name": "plantSurvivalSurveys", + "dataType": "list", + "minSize": 1, + "columns": [ { - "type": "row", - "css": "border-bottom", - "items": [ + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } + } + } + }, + { + "dataType": "text", + "name": "surveyObjective", + "description": "What the survey aim to capture? How will the information obtained from the survey be used?", + "validate": "required,maxSize[3000]" + }, + { + "dataType": "number", + "name": "numberOfSurveys", + "validate": "required,min[1],max[1]", + "defaultValue": 1, + "readonly": true + }, + { + "dataType": "list", + "name": "plantSurvivalDataSets", + "columns": [ { - "type": "col", - "css": "span3 col-border-right", - "items": [ + "name": "dataSetId", + "entityType": "au.org.ala.ecodata.DataSetSummary", + "dataType": "text", + "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", + "validate": "required", + "constraints": { + "textProperty": "name", + "valueProperty": "dataSetId", + "excludePath": "plantSurvivalSurveys.plantSurvivalDataSets.dataSetId", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.custom.dataSets" + }, + "filter": { + "namespace": "dataSet", + "expression": "dataSet.serviceId == 24 and dataSet.progress == 'finished' and dataSet.alreadyReported == false and deepEquals(relatedOutcomes,dataSet.outcomesLabel) and 'Indicator' == baselineIndicatorMapping.lookupValue(dataSet.type)" + } + } + }, + "behaviour": [ { - "type": "row", - "items": [ - { - "source": "initialOrFollowup", - "type": "selectOne", - "preLabel": "Initial or follow-up?" + "type": "pre_populate", + "config": { + "waitForInitialisation": true, + "source": { + "url": "/site/geojson", + "params": [ + { + "expression": "x=find(owner.custom.dataSets, \"dataSetId\", dataSetId); x.siteId", + "name": "id", + "type": "computed", + "required": true + } + ] + }, + "target": { + "type": "singleValue", + "name": "sitesCoveredForPlantSurvival" } - ] + } } ] }, { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "source": "sitesRemediated", - "type": "feature", - "preLabel": "Site/s covered by remediation" - } - ] - }, + "columns": [ { - "type": "row", - "items": [ - { - "source": "calculatedAreaRemediatedHa", - "type": "number", - "readonly": true, - "displayOptions": { - "displayUnits": true - } - } - ] + "dataType": "species", + "name": "species", + "validate": "required" }, { - "type": "row", - "items": [ - { - "source": "calculatedLengthRemediatedKm", - "type": "number", - "readonly": true, - "displayOptions": { - "displayUnits": true - } - } - ] + "dataType": "text", + "name": "plantingMethod", + "constraints": [ + "Direct seeding", + "Tubestock/Seedling planting" + ], + "validate": "required" }, { - "type": "row", - "items": [ - { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" - } - ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "helpText": "Enter the amount you will invoice for during this reporting period.", - "preLabel": "Actual area (ha) / length (km) being remediated", - "source": "areaRemediatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] + "dataType": "number", + "name": "hectaresPlanted", + "validate": "required,min[0]" }, { - "type": "row", - "items": [ - { - "source": "lengthRemediatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] + "dataType": "number", + "name": "kilosOfDirectSeeding", + "validate": "required,min[0]" }, { - "type": "row", - "items": [ - { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" - } - ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "helpText": "Enter the amount you will invoice for during this reporting period.", - "preLabel": "Invoiced area (ha) / length (km) being remediated", - "source": "areaRemediatedInvoicedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] + "dataType": "number", + "name": "numberPlanted", + "validate": "required,min[0]" }, { - "type": "row", - "items": [ - { - "source": "lengthRemediatedInvoicedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] + "dataType": "text", + "name": "individualsOrGroups", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" }, { - "type": "row", - "items": [ - { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedNotActualReason", - "type": "selectOne" - } - ] + "dataType": "number", + "name": "numberOfIndividualsGroupsSurvived", + "validate": "required,min[0]" }, { - "type": "row", - "items": [ - { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedNotActualComments", - "type": "textarea" - } - ] + "dataType": "number", + "name": "survivalRate", + "validate": "required,min[0]" + } + ], + "dataType": "list", + "name": "plantSurvivalSurveySpeciesTable" + }, + { + "dataType": "text", + "name": "baselineOrIndicatorSurvey", + "description": "", + "constraints": [ + "Baseline", + "Indicator" + ], + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); baselineIndicatorMapping.lookupValue(x.type)" + } + }, + { + "name": "projectBaselines", + "dataType": "stringList", + "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.baselines" + }, + "constraints": { + "textProperty": "baseline", + "valueProperty": "code", + "type": "pre-populated", + "excludePath": "projectBaselines", + "config": { + "source": { + "context-path": "owner.custom.details.baseline.rows" + } } - ] - } - ] - }, - - { - "columns": [ + } + }, { - "source": "relatedOutcomes", - "type": "selectOne", - "width": "10%", - "title": "Which outcome statement/s relates to this survey?" + "name": "investmentPriorities2", + "dataType": "stringList", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.investmentPriorities" + }, + "constraints": { + "type": "pre-populated", + "config": { + "source": { + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + } + ], + "url": "/project/listProjectInvestmentPriorities/" + } + } + } }, { - "width": "15%", - "type": "col", - "title": "Which investment priority does this activity relate to?", - "items": [ - { - "source": "investmentPriorities2", - "type": "select2Many" - }, + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ { - "source": "otherInvestmentPriority", - "type": "text" + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" } ] }, { - "title": "Activities start date", - "source": "activitiesStartDate", - "type": "date", - "width": "10%" + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.startDate" + } }, { - "title": "Activities end date", - "source": "activitiesEndDate", - "type": "date", - "width": "10%" + "dataType": "date", + "name": "activitiesEndDate", + "description": "Specific the dates these events were held on.", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.endDate" + } }, { - "width": "10%", - "source": "numberOfStructuresInstalled", - "type": "number", - "title": "Number of structures installed" + "dataType": "feature", + "name": "sitesCoveredForPlantSurvival", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." + }, { - "width": "15%", - "type": "col", - "title": "Type of structures installed", - "items": [ - { - "type": "row", - "items": [ - { - "source": "typesOfStructuresInstalled", - "type": "select2" - } - ] - }, + "computed": { + "expression": "$geom.areaHa(sitesCoveredForPlantSurvival)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesCoveredForPlantSurvival)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ { - "source": "otherStructuresType", - "placeholder": "Type of structures (if Other)", - "type": "text" + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } } ] }, { - "width": "15%", - "type": "col", - "title": "Type of remediation", - "items": [ - { - "type": "row", - "items": [ - { - "source": "remediationType", - "type": "select2" - } - ] - }, + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReason", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ { - "source": "otherRemediationType", - "placeholder": "Type of remediation (if Other)", - "type": "text" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" } ] }, { - "width": "15%", - "type": "col", - "title": "Please identify any area/s that have shown evidence of off-site benefits", - "items": [ - { - "source": "offSiteBenefitSites", - "type": "feature" - }, - { - "source": "offSiteBenefitAreaHa", - "title": "Area (ha) evident of improved remediation", - "type": "number", - "displayOptions": { - "displayUnits": true - } - }, + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ { - "source": "evidenceOfBenefit", - "placeholder": "Please provide a description on the evidence available to reflect this benefit", - "type": "textarea" + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" } ] - } - ], - "userAddedRows": true, - "source": "remediationDetails", - "type": "table" - }, - { - "type": "row", - "items": [ - { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" - } - ] - }, - { - "type": "row", - "items": [ + }, { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" - } - ] - }, - { - "type": "row", - "items": [ + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "defaultValue": { + "type": "computed", + "expression": "$geom.lengthKm(sitesCoveredForPlantSurvival)" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 }, { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" - } - ] - }, - { - "type": "row", - "items": [ + "dataType": "text", + "description": "Select the technique used to conduct the survey. If the EMSA Application tool was not used, you should select 'Other'.", + "name": "emsaProtocol", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.protocol" + }, + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.protocols" + } + } + } + }, { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." - } - ] - }, - { - "type": "row", - "items": [ + "dataType": "stringList", + "description": "Describe the technique (if Other) was selected.", + "name": "otherEmsaProtocol", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methods" + } + }, { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] - }, - { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ + "dataType": "text", + "name": "surveyMethodology", + "description": "Provide more details on what is being done.", + "validate": "required,maxSize[3000]", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methodDescription" + } + }, { - "title": "Attached documents", - "source": "attachments", - "type": "document" + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" } - ] + ], + "minSize": 1 } ] - } - ] - }, - "modelName": null, - "templateName": "nhtRemediatingRiparianAndAquaticAreas", - "optional": true, - "optionalQuestionText": null, - "title": "Remediating riparian and aquatic areas", - "collapsibleHeading": null, - "name": "NHT - Remediating riparian and aquatic areas", - "description": null - }, - { - "collapsedByDefault": false, - "template": { - "dataModel": [ + }, + { + "dataType": "lookupTable", + "name": "baselineIndicatorMapping", + "config": { + "source": { + "literal": { + "Baseline dataset associated with a project outcome": "Baseline", + "Project progress dataset that is tracking change against an established project baseline dataset": "Indicator" + } + } + } + }, { + "allowRowDelete": "false", "columns": [ { "dataType": "text", - "name": "initialOrFollowup", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", "constraints": [ - "Initial", - "Follow-up" + "Individuals", + "Groups" ], "validate": "required" }, { - "dataType": "feature", - "name": "sitesTreated" - }, - { - "computed": { - "expression": "$geom.areaHa(sitesTreated)" - }, "dataType": "number", - "name": "siteCalculatedAreaHa", - "units": "ha", - "decimalPlaces": 3, + "name": "participationIndividualNumber", + "defaultValue": 0, "behaviour": [ { - "condition": "areaInvoicedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The treated area must be mapped", - "validate": "required,min[0.0001]" - } + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } - ] + ], + "validate": "required,min[0]" }, { - "computed": { - "expression": "$geom.lengthKm(sitesTreated)" - }, - "dataType": "number", - "name": "siteCalculatedLengthKm", - "units": "km", - "decimalPlaces": 3, + "dataType": "text", + "name": "participationGroupNumber", "behaviour": [ { - "condition": "lengthInvoicedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The treated length must be mapped", - "validate": "required,min[0.0001]" - } + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" ] }, - { - "defaultValue": { - "expression": "$geom.areaHa(sitesTreated)", - "type": "computed" - }, - "dataType": "number", - "name": "areaTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "required,min[0]" - }, - { - "defaultValue": { - "expression": "$geom.lengthKm(sitesTreated)", - "type": "computed" - }, - "dataType": "number", - "name": "lengthTreatedKm", - "units": "km", - "decimalPlaces": 3, - "validate": "required,min[0]" - }, { "dataType": "number", - "name": "areaInvoicedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": [ - { - "rule": "required" - }, - { - "rule": "min[0]" - }, + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ { - "param": { - "expression": "areaTreatedHa", - "type": "computed" - }, - "rule": "max" + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } - ] - }, - { - "dataType": "number", - "name": "lengthInvoicedKm", - "units": "km", - "decimalPlaces": 3, + ], "validate": [ { "rule": "required" @@ -17776,7 +26590,7 @@ }, { "param": { - "expression": "lengthTreatedKm", + "expression": "participationIndividualNumber", "type": "computed" }, "rule": "max" @@ -17785,272 +26599,84 @@ }, { "dataType": "text", - "name": "mappingNotAlignedReason", - "behaviour": [ - { - "condition": "not (within(areaTreatedHa, siteCalculatedAreaHa, 0.1) and within(lengthTreatedKm, siteCalculatedLengthKm, 0.1))", - "type": "if" - } - ], - "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "mappingNotAlignedComments", - "behaviour": [ - { - "condition": "\"Other\" == mappingNotAlignedReason", - "type": "if" - } - ], - "validate": "required,maxSize[300]" - }, - { - "dataType": "text", - "name": "invoicedNotActualReason", + "name": "firstNationGroupNumber", "behaviour": [ { - "condition": "roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedHa, 2) or roundTo(lengthTreatedKm, 2) != roundTo(lengthInvoicedKm, 2)", - "type": "visible" + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } ], "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ - { - "condition": "\"Other\" == invoicedNotActualReason", - "type": "if" - } - ], - "validate": "required,maxSize[300]" - }, - { - "dataType": "document", - "name": "extraMappingDetails", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", - "behaviour": [ - { - "condition": "not (within(areaTreatedHa, siteCalculatedAreaHa, 0.1) and within(lengthTreatedKm, siteCalculatedLengthKm, 0.1)) or roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedHa, 2) or roundTo(lengthTreatedKm, 2) != roundTo(lengthInvoicedKm, 2)", - "type": "if" - } + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" ], - "validate": "required" - }, - { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } - } - } - }, - { - "name": "investmentPriorities2", - "dataType": "stringList", - "validate": "required", - "constraints": { - "type": "pre-populated", - "config": { - "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" - } - } - } - }, - { - "dataType": "text", - "name": "otherInvestmentPriority", - "behaviour": [ - { - "type": "enable", - "condition": "\"Other\" in investmentPriorities2" - } - ] - }, - { - "columns": [ - { - "dataType": "species", - "name": "weedTargetSpecies", - "dwcAttribute": "scientificName", - "description": "Weed species targeted for treatment (start typing a scientific or common name for a species)", - "validate": "required" - }, - { - "dataType": "text", - "name": "threatenedEcologicalCommunity", - "validate": "maxSize[100]" - }, - { - "dataType": "text", - "name": "treatmentMethod", - "description": "The primary method used to treat the patch of the target species", - "constraints": [ - "Basal bark spraying", - "Biological agents", - "Cut stump", - "Cut and swab", - "Dozing", - "Felling", - "Fire", - "Foliar spraying", - "Grubbing / chipping", - "Hand pulling", - "Moisture and nutrient control", - "Mowing", - "Overplanting", - "Pushing", - "Slashing", - "Spot spraying", - "Splatter gun", - "Stem injection", - "Stem scraper", - "Wick applicators", - "Other" - ], - "validate": "required" - }, + "validate": [ { - "dataType": "text", - "name": "otherTreatmentMethod", - "description": "Please specify the method of treatment used if Other was selected in the Type of treatment column.", - "behaviour": [ - { - "condition": "treatmentMethod == \"Other\"", - "type": "enable" - } - ], - "validate": "required,maxSize[100]" + "rule": "required" }, { - "dataType": "text", - "name": "treatmentObjective", - "description": "How will the work contribute to protecting the area", - "validate": "required,maxSize[300]" + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" } - ], - "dataType": "list", - "name": "weedSpeciesTreated" + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" } ], "dataType": "list", - "name": "weedTreatmentSites" + "name": "participationInformationTableSgs" }, { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" + "dataType": "number", + "name": "totalSurveyIndicator", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(plantSurvivalSurveys, \"surveyObjective ? 1 : 0\")" + } }, { "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "name": "totalSurveyIndicatorInvoiced", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ + "rule": "required" + }, { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "rule": "min[0]" + }, { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "param": { + "expression": "totalSurveyIndicator", + "type": "computed" + }, + "rule": "max" } ], - "validate": "required,min[0]" + "defaultValue": "" }, { "dataType": "text", - "name": "firstNationGroupNumber", + "name": "totalInvoicedSeedMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", "behaviour": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", + "condition": "+totalSurveyIndicatorInvoiced < +totalSurveyIndicator", "type": "enable" } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "name": "surveyCountHeader", - "type": "number", - "decimalPlaces": 0, - "computed": { - "expression": "count(weedTreatmentSites, \"treatmentObjective\")" - } + ] }, { "dataType": "text", @@ -18069,7 +26695,8 @@ { "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "description": "", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -18078,29 +26705,40 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Weed treatment", - "title": "Removing weeds", + "modelName": "NHT - Plant survival survey", + "title": "Seed Germination/Plant Survival Survey", "viewModel": [ { "type": "section", "items": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -18115,7 +26753,8 @@ { "type": "col", "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "firstNationIndividualNumber", @@ -18128,38 +26767,103 @@ ] }, { + "width": "20%", "source": "participationDetails", "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", "type": "textarea" } ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", + "source": "participationInformationTableSgs", "type": "table" }, { - "preLabel": "Number of Removing Weeds surveys conducted:", - "noEdit": true, - "type": "number", - "source": "surveyCountHeader" + "type": "row", + "items": [ + { + "type": "literal", + "source": "Survey informationBefore completing this section, please ensure you have created a Data Set Summary information for every data set produced by the surveys you intend to reportEach survey reported must relate to a combination of outcomes as described in your MERI planEach Data Set Summary recorded for a survey must be addressing the same outcomes as selected for the surveyIf a survey produced more than one data set, use the New Data Set button to add each Data Set Summary under your surveyA single survey can be made up of multiple dataset" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] }, { - "addRowText": "New weed removal site", + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total Number of indicator seed germination/plant survival surveys completed for this reporting period", + "source": "totalSurveyIndicator", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total Number of indicator seed germination/plant survival surveys invoiced for this reporting period", + "source": "totalSurveyIndicatorInvoiced", + "type": "number" + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedSeedMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add survey", + "removeRowText": "Delete this survey", "userAddedRows": true, - "source": "weedTreatmentSites", + "source": "plantSurvivalSurveys", "type": "repeat", "items": [ { - "css": "border-bottom", "type": "row", "items": [ { - "preLabel": "Initial or follow-up treatment", - "css": "span3", - "source": "initialOrFollowup", - "type": "selectOne" + "type": "col", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s relates to this survey?" + } + ] } ] }, @@ -18167,240 +26871,325 @@ "type": "row", "items": [ { - "css": "span3 col-border-right", - "type": "col", + "source": "surveyObjective", + "preLabel": "Survey objective", + "type": "text" + } + ] + }, + { + "type": "repeat", + "source": "plantSurvivalDataSets", + "userAddedRows": true, + "addRowText": "New data set", + "removeRowText": "Delete this data set", + "items": [ + { + "type": "row", + "css": "border-bottom", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Site/s where weed treatment was undertaken", - "source": "sitesTreated", - "type": "feature" - } - ] - }, - { - "type": "row", - "items": [ - { - "readonly": true, - "source": "siteCalculatedAreaHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "readonly": true, - "source": "siteCalculatedLengthKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", + "type": "col", "items": [ { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" + "source": "dataSetId", + "type": "selectOne", + "preLabel": "Please select the data set produced by this survey. Note it must have already been entered on the Data Set Summary tab." } ] } ] }, { - "css": "span4 col-border-right", - "type": "col", + "type": "row", "items": [ { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Actual area (ha) / length (km) treated for weed removal", - "helpText": "Manually enter correct figure for this reporting period if different to mapped value.", - "source": "areaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "source": "projectBaselines", + "type": "selectMany", + "preLabel": "Which project baseline/s relate to this survey?", + "readonly": "readonly" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "lengthTreatedKm", - "type": "number", - "validate": "required", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "Activity start date", + "source": "activitiesStartDate", + "type": "date" + } + ] } ] }, { - "type": "row", - "items": [ - { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 - } - ] - } - ] - }, - { - "css": "span4", - "type": "col", - "items": [ - { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Invoiced area (ha) / length (km) treated for weed removal", - "helpText": "Enter the amount you will invoice for during this reporting period.", - "source": "areaInvoicedHa", - "type": "number", - "validate": "required", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "preLabel": "Activity end date", + "source": "activitiesEndDate", + "type": "date" + } + ] } ] }, { - "source": "lengthInvoicedKm", - "type": "number", - "validate": "required", - "displayOptions": { - "displayUnits": true - } - }, - { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedNotActualReason", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "Sites covered for plant survival survey", + "source": "sitesCoveredForPlantSurvival", + "type": "feature" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedLengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedNotActualComments", - "type": "textarea", - "rows": 5 + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) covered by plant survival survey", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "lengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] } ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ + }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "relatedOutcomes", - "type": "selectOne", - "preLabel": "Which outcome statement/s relates to this survey?" + "type": "row", + "items": [ + { + "preLabel": "Survey technique", + "source": "emsaProtocol", + "type": "selectOne", + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Survey technique (if Other)", + "source": "otherEmsaProtocol", + "type": "select2Many" + } + ] } ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ + }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "investmentPriorities2", - "preLabel": "Which investment priority does this activity relate to?", - "type": "select2Many" + "type": "row", + "items": [ + { + "source": "surveyMethodology", + "preLabel": "Survey methodology", + "type": "text" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "otherInvestmentPriority", - "type": "text" + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] } ] } ] - } - ] - }, - { - "columns": [ - { - "width": "20%", - "source": "weedTargetSpecies", - "title": "Target weed species", - "type": "speciesSelect" - }, - { - "width": "22%", - "source": "threatenedEcologicalCommunity", - "title": "Threatened Ecological Community (if applicable)", - "type": "text" - }, - { - "width": "15%", - "source": "treatmentMethod", - "title": "Type of treatment", - "type": "select2" - }, - { - "width": "20%", - "source": "otherTreatmentMethod", - "title": "Type of treatment (if other)", - "type": "text" }, { - "width": "23%", - "source": "treatmentObjective", - "title": "Treatment objective", - "type": "textarea" + "columns": [ + { + "width": "30%", + "source": "species", + "title": "Target species recorded", + "type": "speciesSelect" + }, + { + "width": "20%", + "title": "Planting method", + "source": "plantingMethod", + "type": "selectOne" + }, + { + "width": "10%", + "source": "hectaresPlanted", + "title": "How many hectares planted?", + "type": "number" + }, + { + "width": "10%", + "source": "kilosOfDirectSeeding", + "title": "Number of kilos for direct seeding", + "type": "number" + }, + { + "width": "10%", + "source": "numberPlanted", + "title": "Number planted (Tubestock/Seedling planting)", + "type": "number" + }, + { + "width": "10%", + "source": "individualsOrGroups", + "title": "Individuals / groups", + "type": "selectOne" + }, + { + "width": "10%", + "source": "numberOfIndividualsGroupsSurvived", + "title": "Number of individuals / groups survived", + "type": "number" + }, + { + "width": "10%", + "source": "survivalRate", + "title": "Survival Rate %", + "type": "number" + } + ], + "userAddedRows": true, + "disableTableUpload": true, + "source": "plantSurvivalSurveySpeciesTable", + "type": "table" } - ], - "userAddedRows": true, - "source": "weedSpeciesTreated", - "type": "table" + ] } ] }, @@ -18432,7 +27221,7 @@ "items": [ { "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { "preLabel": "Data have been uploaded", @@ -18453,15 +27242,6 @@ } ] }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] - }, { "type": "table", "source": "assuranceDocuments", @@ -18480,12 +27260,12 @@ ] }, "modelName": null, - "templateName": "nhtWeedTreatment", + "templateName": "nhtPlantSurvivalSurvey", "optional": true, "optionalQuestionText": null, - "title": "Removing weeds", + "title": "Plant survival survey", "collapsibleHeading": null, - "name": "NHT - Weed treatment", + "name": "NHT - Plant survival survey", "description": null }, { @@ -18493,157 +27273,58 @@ "template": { "dataModel": [ { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { + "allowRowDelete": "false", "columns": [ { "dataType": "text", - "name": "initialOrMaintenance", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", "constraints": [ - "Initial", - "Maintenance" + "Individuals", + "Groups" ], "validate": "required" }, - { - "dataType": "feature", - "name": "sitesRevegetated" - }, { "dataType": "number", - "name": "siteCalculatedAreaHa", - "computed": { - "expression": "$geom.areaHa(sitesRevegetated)" - }, - "units": "ha", - "decimalPlaces": 3, + "name": "participationIndividualNumber", + "defaultValue": 0, "behaviour": [ { - "condition": "areaInvoicedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The revegetated area must be mapped", - "validate": "required,min[0.0001]" - } + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } - ] + ], + "validate": "required,min[0]" }, { - "dataType": "number", - "name": "siteCalculatedLengthKm", - "computed": { - "expression": "$geom.lengthKm(sitesRevegetated)" - }, - "units": "km", - "decimalPlaces": 3, + "dataType": "text", + "name": "participationGroupNumber", "behaviour": [ { - "condition": "lengthRevegetatedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The revegetated length must be mapped", - "validate": "required,min[0.0001]" - } + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" ] }, - { - "defaultValue": { - "type": "computed", - "expression": "siteCalculatedAreaHa" - }, - "dataType": "number", - "name": "areaRevegetatedHa", - "validate": "required,min[0]", - "decimalPlaces": 3, - "units": "ha" - }, - { - "defaultValue": { - "type": "computed", - "expression": "siteCalculatedLengthKm" - }, - "dataType": "number", - "name": "lengthRevegetatedKm", - "validate": "required,min[0]", - "decimalPlaces": 3, - "units": "km" - }, { "dataType": "number", - "name": "areaInvoicedHa", - "units": "ha", - "decimalPlaces": 3, + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], "validate": [ { "rule": "required" @@ -18652,36 +27333,101 @@ "rule": "min[0]" }, { - "rule": "max", "param": { - "type": "computed", - "expression": "areaRevegetatedHa" - } + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" } ] }, - { - "dataType": "number", - "name": "areaInvoicedKm", - "units": "km", - "decimalPlaces": 3, + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], "validate": [ { "rule": "required" }, - { - "rule": "min[0]" - }, { "param": { - "expression": "lengthRevegetatedKm", + "expression": "participationGroupNumber", "type": "computed" }, - "rule": "max" + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableSip" + }, + { + "columns": [ + { + "dataType": "feature", + "name": "sitesPreparation", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." + }, + { + "computed": { + "expression": "$geom.areaHa(sitesPreparation)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesPreparation)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ + { + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } } ] }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, { "dataType": "text", "name": "mappingNotAlignedReason", @@ -18692,7 +27438,7 @@ "validate": "required", "behaviour": [ { - "condition": "not within(areaRevegetatedHa, siteCalculatedAreaHa, 0.1)", + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", "type": "if" } ] @@ -18700,40 +27446,14 @@ { "dataType": "text", "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", + "validate": "required,maxSize[100]", "behaviour": [ { - "type": "if", + "type": "visible", "condition": "\"Other\" == mappingNotAlignedReason" } ] }, - { - "dataType": "text", - "name": "invoicedNotActualReason", - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required", - "behaviour": [ - { - "condition": "roundTo(areaRevegetatedHa, 2) != roundTo(areaInvoicedHa, 2) or roundTo(lengthRevegetatedKm, 2) != roundTo(areaInvoicedKm, 2)", - "type": "visible" - } - ] - }, - { - "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ - { - "type": "if", - "condition": "\"Other\" == invoicedNotActualReason" - } - ], - "validate": "required,maxSize[300]" - }, { "dataType": "document", "name": "extraMappingDetails", @@ -18741,86 +27461,158 @@ "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", "behaviour": [ { - "condition": "not within(areaRevegetatedHa, siteCalculatedAreaHa, 0.1) or roundTo(areaRevegetatedHa, 2) != roundTo(areaInvoicedHa, 2)", + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", "type": "if" } ] }, - { - "dataType": "feature", - "name": "offSiteBenefitSites" - }, { "defaultValue": { "type": "computed", - "expression": "$geom.areaHa(offSiteBenefitSites)" + "expression": "calculatedLengthTreatedKm" }, "dataType": "number", - "name": "offSiteBenefitAreaHa", - "validate": [ + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { + "columns": [ { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.areaHa(offSiteBenefitSites)*0.9" - } + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required" }, { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.areaHa(offSiteBenefitSites)*1.1" - } + "dataType": "date", + "name": "activitiesEndDate", + "description": "Specific the dates these events were held on.", + "validate": [ + { + "rule": "required" + }, + { + "rule": "future", + "param": { + "expression": "formatDateForValidation(activitiesStartDate)", + "type": "computed" + } + } + ] + }, + { + "dataType": "number", + "name": "numberOfDaysPreparingSite", + "description": "Number of days should be calculated as number of days by number of people (eg. 4.5 days by 3 people is 13.5 days).", + "validate": "required,min[0]" + }, + { + "dataType": "stringList", + "name": "industryType", + "constraints": [ + "Broad acre cropping", + "Dairy", + "Environmental", + "Horticulture", + "Grazing", + "Fisheries", + "Aquaculture", + "Other" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "otherIndustryType", + "behaviour": [ + { + "condition": "industryType == \"Other\"", + "type": "enable" + } + ], + "validate": "required,maxSize[100]" + }, + { + "dataType": "text", + "name": "actionType", + "description": "", + "constraints": [ + "Basal bark spraying", + "Biological agents", + "Cut stump", + "Cut and swab", + "Dozing", + "Felling", + "Fire", + "Foliar spraying", + "Grubbing/chipping", + "Hand pulling", + "Moisture and nutrient control", + "Mowing", + "Other earthworks", + "Overplanting", + "Pushing", + "Slashing", + "Spot spraying", + "Splatter gun", + "Stem injection", + "Stem scraper", + "Wick applicators", + "Other" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "otherActionType", + "description": "This field may be used to list multiple preparation activities. This list of activities need to be separated with a ';'", + "behaviour": [ + { + "condition": "actionType == \"Other\"", + "type": "enable" + } + ], + "validate": "required,maxSize[100]" + }, + { + "dataType": "text", + "name": "purposeOfSitePreparation", + "description": "Please provide a brief description of how the work will benefit the area.", + "validate": "required,maxSize[300]" } - ] - }, - { - "dataType": "text", - "name": "evidenceOfBenefit", - "validate": "maxSize[300]" + ], + "dataType": "list", + "name": "sitePreparationDetails" }, { "name": "relatedOutcomes", "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", "validate": "required", "constraints": { "textProperty": "label", - "valueProperty": "label", + "valueProperty": "value", "type": "pre-populated", "config": { "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] + "context-path": "outcomes" } } } }, { "name": "investmentPriorities2", - "dataType": "stringList", + "dataType": "text", + "description": "", "validate": "required", "constraints": { + "textProperty": "label", + "valueProperty": "value", "type": "pre-populated", "config": { "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" + "context-path": "owner.investmentPriorities" } } } @@ -18836,75 +27628,93 @@ ] }, { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], "validate": "required" + } + ], + "dataType": "list", + "name": "sitePreparationDetailsControlled" + }, + { + "dataType": "number", + "name": "totalAreaSitePreparation", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(sitePreparationDetailsControlled, \"areaTreatedHa\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalAreaSitePreparationInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" }, { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", - "validate": "required" + "rule": "min[0]" }, { - "columns": [ - { - "dataType": "species", - "name": "species", - "dwcAttribute": "scientificName", - "description": "", - "validate": "required" - }, - { - "dataType": "text", - "name": "typeOfRevegetationActivity", - "validate": "required,maxSize[100]" - }, - { - "dataType": "text", - "name": "revegetationMethod", - "dwcAttribute": "establishmentMeans", - "description": "If 'Other', please identify in 'Type of revegetation activity' field", - "constraints": [ - "Direct seeding", - "Tubestock planting", - "Both", - "Other" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "threatenedEcologicalCommunity", - "description": "This free text field allows multiple TECs to be entered. They should be written as listed in EPBC, and separated by ';'", - "validate": "maxSize[100]" - }, - { - "dataType": "number", - "name": "numberPlanted", - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "revegetationObjective", - "validate": "required,maxSize[300]" - } - ], - "dataType": "list", - "name": "revegetationDetails" + "param": { + "expression": "totalAreaSitePreparation", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalLengthSitePreparation", + "validate": "min[0]", + "computed": { + "expression": "sum(sitePreparationDetailsControlled, \"lengthTreatedKm\")" + } + }, + { + "dataType": "number", + "decimalPlaces": 3, + "name": "totalLengthSitePreparationInvoiced", + "description": "Manually enter if values have decimal points e.g. 0.350 or 2.545", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalLengthSitePreparation", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" } ], - "dataType": "list", - "name": "revegetationArea" + "defaultValue": "" }, { - "name": "revegetatingSurveyCountHeader", - "type": "number", - "decimalPlaces": 0, - "computed": { - "expression": "count(revegetationArea, \"revegetationObjective\")" - } + "dataType": "text", + "name": "totalInvoicedSiteCollectionMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalAreaSitePreparationInvoiced < +totalAreaSitePreparation or +totalLengthSitePreparationInvoiced < +totalLengthSitePreparation", + "type": "enable" + } + ] }, { "dataType": "text", @@ -18918,12 +27728,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -18932,26 +27742,37 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Revegetating habitat", - "title": "Revegetating habitat", + "modelName": "NHT - Site preparation", + "title": "Site Preparation", "viewModel": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -18966,7 +27787,8 @@ { "type": "col", "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "firstNationIndividualNumber", @@ -18979,82 +27801,121 @@ ] }, { + "width": "20%", "source": "participationDetails", "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", "type": "textarea" } ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", + "source": "participationInformationTableSip", "type": "table" }, { - "preLabel": "Number of Revegetating Habitat surveys conducted:", - "noEdit": true, - "type": "number", - "source": "revegetatingSurveyCountHeader" + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] }, { - "addRowText": "New area of revegetation", - "userAddedRows": true, - "source": "revegetationArea", - "type": "repeat", + "type": "row", "items": [ { - "type": "row", - "css": "border-bottom", + "type": "col", + "css": "span4 col-border-right", "items": [ { - "preLabel": "Initial or maintenance activity?", - "css": "span3", - "source": "initialOrMaintenance", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "(i) Total area (ha) of site preparation for this reporting period", + "source": "totalAreaSitePreparation", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total area (ha) of site preparation invoiced for this reporting period", + "source": "totalAreaSitePreparationInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] } ] }, { - "type": "row", - "css": "border-bottom", + "type": "col", + "css": "span4 col-border-right", "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Site/s being revegetated", - "source": "sitesRevegetated", - "type": "feature" - } - ] - }, - { - "source": "siteCalculatedAreaHa", - "type": "number", - "readonly": true, - "displayOptions": { - "displayUnits": true - } - }, + "preLabel": "(iii) Total length (km) of site preparation for this reporting period", + "source": "totalLengthSitePreparation", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ { - "source": "siteCalculatedLengthKm", + "preLabel": "(iv) Total length (km) of site preparation invoiced for this reporting period", + "source": "totalLengthSitePreparationInvoiced", "type": "number", - "readonly": true, "displayOptions": { - "displayUnits": true + "removeTrailingZeros": false } - }, + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedSiteCollectionMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add a new preparation site", + "userAddedRows": true, + "source": "sitePreparationDetailsControlled", + "type": "repeat", + "items": [ + { + "type": "row", + "items": [ + { + "css": "span3 col-border-right", + "type": "col", + "items": [ { "type": "row", "items": [ { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" } ] } @@ -19068,67 +27929,46 @@ "type": "row", "items": [ { - "preLabel": "Actual area (ha) / length (km) of habitat revegetated", - "helpText": "Manually enter correct figure for this reporting period if different to mapped value.", - "source": "areaRevegetatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "lengthRevegetatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" } ] - }, + } + ] + }, + { + "css": "span3 col-border-right", + "type": "col", + "items": [ { "type": "row", "items": [ { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", "type": "selectOne" } ] - }, - { - "type": "row", - "items": [ - { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 - } - ] } ] - }, + } + ] + }, + { + "type": "row", + "items": [ { "type": "col", - "css": "span3", + "css": "span3 col-border-right", "items": [ { "type": "row", "items": [ { - "preLabel": "Invoiced area (ha) of habitat revegetated", - "helpText": "Enter the amount you will invoice for during this reporting period.", - "source": "areaInvoicedHa", - "type": "number", - "validate": "required", - "displayOptions": { - "displayUnits": true - } + "preLabel": "Site/s where preparation was undertaken", + "source": "sitesPreparation", + "type": "feature" } ] }, @@ -19136,11 +27976,12 @@ "type": "row", "items": [ { - "source": "areaInvoicedKm", + "source": "calculatedAreaTreatedHa", "type": "number", "displayOptions": { "displayUnits": true - } + }, + "readonly": "readonly" } ] }, @@ -19148,9 +27989,12 @@ "type": "row", "items": [ { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedNotActualReason", - "type": "selectOne" + "source": "calculatedLengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" } ] }, @@ -19158,10 +28002,9 @@ "type": "row", "items": [ { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedNotActualComments", - "type": "textarea", - "rows": 5 + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" } ] } @@ -19175,9 +28018,12 @@ "type": "row", "items": [ { - "source": "investmentPriorities2", - "preLabel": "Which investment priority does this activity relate to?", - "type": "select2Many" + "preLabel": "Actual area (ha) / length (km) of site preparation", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } } ] }, @@ -19185,103 +28031,112 @@ "type": "row", "items": [ { - "source": "otherInvestmentPriority", - "type": "text" + "source": "lengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + } } ] - } - ] - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Which outcome statement/s relates to this survey?", - "css": "span3", - "source": "relatedOutcomes", - "type": "selectOne" - }, - { - "preLabel": "Activities start date", - "css": "span3", - "source": "activitiesStartDate", - "type": "date" - }, - { - "preLabel": "Activities end date", - "css": "span3", - "source": "activitiesEndDate", - "type": "date" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Please map any off-site area/s if they benefitted from this revegetation activity", - "css": "span3", - "source": "offSiteBenefitSites", - "type": "feature" - }, - { - "preLabel": "Area (ha) benefitting from revegetation activity", - "css": "span2", - "source": "offSiteBenefitAreaHa", - "type": "number" - }, - { - "preLabel": "If off-site area was mapped please provide a description on the evidence available to reflect this benefit.", - "css": "span6", - "source": "evidenceOfBenefit", - "type": "textarea" + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] + } + ] } ] }, { - "addRowText": "Add a species", "columns": [ { - "width": "20%", - "source": "species", - "title": "Target Plant Species", - "type": "speciesSelect" + "title": "Activity start date", + "source": "activitiesStartDate", + "type": "date", + "width": "10%" }, { - "width": "10%", - "source": "revegetationMethod", - "title": "Planting method", - "type": "selectOne" + "title": "Activity end date", + "source": "activitiesEndDate", + "type": "date", + "width": "10%" }, { - "width": "20%", - "source": "typeOfRevegetationActivity", - "title": "Type of revegetation activity", - "type": "text" + "width": "10%", + "source": "numberOfDaysPreparingSite", + "title": "Number of days in preparing site", + "type": "number" }, { "width": "20%", - "source": "threatenedEcologicalCommunity", - "title": "Threatened ecological community (if applicable)", - "type": "text" + "type": "col", + "title": "Industry type", + "items": [ + { + "type": "row", + "items": [ + { + "source": "industryType", + "type": "selectOne" + } + ] + }, + { + "source": "otherIndustryType", + "placeholder": "Type of industry type (if Other)", + "type": "text" + } + ] }, { - "width": "10%", - "source": "numberPlanted", - "title": "Numbers planted", - "type": "number" + "width": "25%", + "type": "col", + "title": "Type of action", + "items": [ + { + "type": "row", + "items": [ + { + "source": "actionType", + "type": "selectOne" + } + ] + }, + { + "source": "otherActionType", + "placeholder": "Type of action (if Other)", + "type": "text" + } + ] }, { - "width": "20%", - "source": "revegetationObjective", - "title": "Objective of revegetation activity", + "width": "25%", + "source": "purposeOfSitePreparation", + "title": "Purpose of site preparation", "type": "textarea" } ], "userAddedRows": true, - "source": "revegetationDetails", + "disableTableUpload": true, + "addRowText": "Add a new activity at this site", + "source": "sitePreparationDetails", "type": "table" } ] @@ -19314,7 +28169,7 @@ "items": [ { "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please attach any evidence you have available for this service and/or provide information (e.g. links) to where the evidence is stored. This field will help the Department and Service Providers during assurance activities or audits. Refer to the Evidence Guide for details of the types of acceptable evidence." + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { "preLabel": "Data have been uploaded", @@ -19335,15 +28190,6 @@ } ] }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] - }, { "type": "table", "source": "assuranceDocuments", @@ -19360,12 +28206,12 @@ ] }, "modelName": null, - "templateName": "nhtRevegetatingHabitat", + "templateName": "nhtSitePreparation", "optional": true, "optionalQuestionText": null, - "title": "Revegetating habitat", + "title": "Site preparation", "collapsibleHeading": null, - "name": "NHT - Revegetating habitat", + "name": "NHT - Site preparation", "description": null }, { @@ -19373,339 +28219,525 @@ "template": { "dataModel": [ { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { + "name": "skillsAndKnowledgeSurveys", + "dataType": "list", + "minSize": 1, "columns": [ - { - "dataType": "text", - "name": "initialOrMaintenance", - "constraints": [ - "Initial", - "Maintenance" - ], - "validate": "required" - }, { "name": "relatedOutcomes", "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", "validate": "required", "constraints": { "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } - } - } - }, - { - "dataType": "feature", - "name": "siteSeedCollected", - "validate": "required" - }, - { - "defaultValue": { - "expression": "$geom.areaHa(siteSeedCollected)", - "type": "computed" - }, - "dataType": "number", - "name": "calculatedAreaHabitatRevegetedHa", - "units": "ha", - "decimalPlaces": 3 - }, - { - "computed": { - "expression": "$geom.lengthKm(siteSeedCollected)" - }, - "dataType": "number", - "name": "calculatedLengthHabitatRevegetedKm", - "units": "km", - "decimalPlaces": 3 - }, - { - "defaultValue": { - "expression": "calculatedAreaHabitatRevegetedHa", - "type": "computed" - }, - "dataType": "number", - "name": "areaHabitatRevegetedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "required,min[0]" - }, - { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "name": "investmentPriorities2", - "dataType": "stringList", - "validate": "required", - "constraints": { + "valueProperty": "value", "type": "pre-populated", "config": { "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" + "context-path": "outcomes" } } } }, { "dataType": "text", - "name": "otherInvestmentPriority", - "behaviour": [ - { - "type": "enable", - "condition": "\"Other\" in investmentPriorities2" - } - ] - }, - { - "dataType": "text", - "name": "activityType", + "name": "baselineOrIndicatorSurvey", + "description": "", "constraints": [ - "Collecting", - "Storing", - "Propagating" + "Baseline", + "Indicator" ], "validate": "required" }, { "dataType": "text", - "name": "activityPurpose", - "validate": "required" + "name": "surveyObjective", + "description": "What the survey aim to capture? How will the information obtained from the survey be used?", + "validate": "required,maxSize[3000]" }, { - "dataType": "text", - "name": "materialType", - "constraints": [ - "Seeds", - "Plant cuttings" - ], - "validate": "required" + "dataType": "number", + "name": "numberOfSurveys", + "validate": "required,min[1],max[1]", + "defaultValue": 1, + "readonly": true + }, + { + "dataType": "number", + "name": "numberOfSurveysInvoiced", + "validate": "required,min[0]", + "defaultValue": 1 }, { + "dataType": "list", + "name": "skillsAndKnowledgeDataSets", "columns": [ { - "dataType": "text", - "name": "inKgSeedCollected", - "constraints": [ - "Individuals", - "Kilograms" - ], - "validate": "required" + "name": "dataSetId", + "entityType": "au.org.ala.ecodata.DataSetSummary", + "dataType": "text", + "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", + "validate": "required", + "constraints": { + "textProperty": "name", + "valueProperty": "dataSetId", + "excludePath": "skillsAndKnowledgeSurveys.skillsAndKnowledgeDataSets.dataSetId", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.custom.dataSets" + }, + "filter": { + "namespace": "dataSet", + "expression": "dataSet.serviceId == 29 and dataSet.progress == 'finished' and dataSet.alreadyReported == false and baselineOrIndicatorSurvey == baselineIndicatorMapping.lookupValue(dataSet.type) and deepEquals(relatedOutcomes,dataSet.outcomesLabel)" + } + } + }, + "behaviour": [ + { + "type": "pre_populate", + "config": { + "waitForInitialisation": true, + "source": { + "url": "/site/geojson", + "params": [ + { + "expression": "x=find(owner.custom.dataSets, \"dataSetId\", dataSetId); x.siteId", + "name": "id", + "type": "computed", + "required": true + } + ] + }, + "target": { + "type": "singleValue", + "name": "sitesCoveredForSkillsAndKnowledge" + } + } + } + ] + }, + { + "name": "projectBaselines", + "dataType": "stringList", + "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.baselines" + }, + "constraints": { + "textProperty": "baseline", + "valueProperty": "code", + "type": "pre-populated", + "excludePath": "projectBaselines", + "config": { + "source": { + "context-path": "owner.custom.details.baseline.rows" + } + } + } }, { - "dataType": "number", - "name": "amountSeedCollected", - "decimalPlaces": 5 + "name": "investmentPriorities2", + "dataType": "stringList", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.investmentPriorities" + }, + "constraints": { + "type": "pre-populated", + "config": { + "source": { + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + } + ], + "url": "/project/listProjectInvestmentPriorities/" + } + } + } }, { "dataType": "text", - "name": "otherSeedSources" + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] }, { - "name": "noOfDaysPropagating", - "dataType": "number" + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.startDate" + } }, { - "dataType": "number", - "name": "numberOfSourcePlants" + "dataType": "date", + "name": "activitiesEndDate", + "description": "Specific the dates these events were held on.", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.endDate" + } }, { - "dataType": "text", - "name": "storingFacility" + "dataType": "feature", + "name": "sitesCoveredForSkillsAndKnowledge", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." }, { + "computed": { + "expression": "$geom.areaHa(sitesCoveredForSkillsAndKnowledge)" + }, "dataType": "number", - "name": "noOfPlantsPropogated" - }, - { - "dataType": "feature", - "name": "siteSeedSourced" + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 }, { "computed": { - "expression": "$geom.areaHa(siteSeedSourced)" + "expression": "$geom.lengthKm(sitesCoveredForSkillsAndKnowledge)" }, "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", "decimalPlaces": 3, - "name": "siteSeedSourcedCalculatedAreaHa", - "units": "ha", "behaviour": [ { - "condition": "areaInvoicedHa > 0", + "condition": "lengthTreatedKm > 0", "type": "conditional_validation", "value": { - "message": "The controlled area must be mapped", + "message": "The managed length must be mapped", "validate": "required,min[0.0001]" } } ] }, { - "computed": { - "expression": "$geom.lengthKm(siteSeedSourced)" + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" }, "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", "decimalPlaces": 3, - "name": "siteSeedSourcedCalculatedLengthKm", - "units": "km", + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReason", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", "behaviour": [ { - "condition": "lengthInvoicedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The length controlled must be mapped", - "validate": "required,min[0.001]" - } + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ + { + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" } ] }, { "dataType": "document", "name": "extraMappingDetails", + "validate": "required", "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", "behaviour": [ { - "condition": "not (within(areaInstalledHa, siteSeedSourcedCalculatedAreaHa, 0.1) and within(lengthInstalledKm, siteSeedSourcedCalculatedLengthKm, 0.1)) or roundTo(areaInstalledHa, 2) != roundTo(areaInvoicedHa, 2) or roundTo(lengthInstalledKm, 2) != roundTo(lengthInvoicedKm, 2)", - "type": "visible" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "$geom.lengthKm(sitesCoveredForSkillsAndKnowledge)" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { + "dataType": "text", + "description": "Select the technique used to conduct the survey. If the EMSA Application tool was not used, you should select 'Other'.", + "name": "emsaProtocol", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.protocol" + }, + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.protocols" + } } + } + }, + { + "dataType": "stringList", + "description": "Describe the technique (if Other) was selected.", + "name": "otherEmsaProtocol", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methods" + } + }, + { + "dataType": "text", + "name": "surveyMethodology", + "description": "Provide more details on what is being done.", + "validate": "required,maxSize[3000]", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methodDescription" + } + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" ], "validate": "required" }, + { + "dataType": "number", + "name": "numberOfPeopleSurveying", + "validate": "required,min[0]", + "defaultValue": "" + }, { "dataType": "text", - "name": "threatEcoCommunity", - "validate": "maxSize[100]" + "name": "skillsSurveyObjective", + "validate": "maxSize[300],required", + "description": "How will the information from the surveys be used?" } ], - "dataType": "list", - "name": "seedCollectionDetails" + "minSize": 1 + } + ] + }, + { + "dataType": "lookupTable", + "name": "baselineIndicatorMapping", + "config": { + "source": { + "literal": { + "Baseline dataset associated with a project outcome": "Baseline", + "Project progress dataset that is tracking change against an established project baseline dataset": "Indicator" + } + } + } + }, + { + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableSss" + }, + { + "dataType": "number", + "name": "totalSurveyBaseline", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(skillsAndKnowledgeSurveys, \"baselineOrIndicatorSurvey == 'Baseline' ? 1 : 0\")" + } + }, + { + "dataType": "number", + "name": "totalSurveyBaselineInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyBaseline", + "type": "computed" + }, + "rule": "max" } ], - "dataType": "list", - "name": "areasOfSeedCollection" + "defaultValue": "" }, { - "name": "siteSeedCountHeader", - "type": "number", + "dataType": "number", + "name": "totalSurveyIndicator", + "validate": "min[0]", "decimalPlaces": 0, "computed": { - "expression": "count(areasOfSeedCollection, \"threatEcoCommunity\")" + "expression": "sum(skillsAndKnowledgeSurveys, \"baselineOrIndicatorSurvey == 'Indicator' ? 1 : 0\")" } }, { - "computed": { - "expression": "amountSeedCollected" - }, "dataType": "number", - "name": "totalSeedCollected" + "name": "totalSurveyIndicatorInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyIndicator", + "type": "computed" + }, + "rule": "max" + } + ], + "defaultValue": "" }, { - "computed": { - "expression": "numberOfSourcePlants" - }, "dataType": "number", - "name": "totalPlantsPropogated" + "name": "numberOfSurveysInvoiced", + "validate": "required,min[0]", + "defaultValue": 1 + }, + { + "dataType": "text", + "name": "totalInvoicedSkillsMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalSurveyIndicatorInvoiced < +totalSurveyIndicator or +totalSurveyBaselineInvoiced < +totalSurveyBaseline", + "type": "enable" + } + ] }, { "dataType": "text", @@ -19724,7 +28756,8 @@ { "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "description": "", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -19733,320 +28766,85 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Seed Collection", - "title": "Seed Collecting", + "modelName": "NHT - Skills and knowledge survey", + "title": "Skills and Knowledge Survey", "viewModel": [ { - "columns": [ - { - "width": "10%", - "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", - "type": "selectOne" - }, + "type": "section", + "items": [ { - "width": "20%", - "type": "col", - "title": "Total Number of people delivering this service", + "type": "row", "items": [ { - "source": "participationIndividualNumber", - "type": "number" - }, - { - "source": "participationGroupNumber", - "type": "selectOne" + "type": "literal", + "source": "Participation information" } ] }, { - "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", - "items": [ - { - "source": "firstNationIndividualNumber", - "type": "number" - }, + "disableTableUpload": true, + "columns": [ { - "source": "firstNationGroupNumber", + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" - } - ] - }, - { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" - } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" - }, - { - "preLabel": "Number of Seed Collection surveys conducted:", - "noEdit": true, - "type": "number", - "source": "siteSeedCountHeader" - }, - { - "addRowText": "New area of seed collection", - "userAddedRows": true, - "source": "areasOfSeedCollection", - "type": "repeat", - "items": [ - { - "type": "row", - "css": "border-bottom", - "items": [ - { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "preLabel": "Initial or maintenance activity?", - "source": "initialOrMaintenance", - "type": "selectOne" - } - ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "preLabel": "Which outcome statement/s relates to this survey?", - "source": "relatedOutcomes", - "type": "selectOne" - } - ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "preLabel": "Site/s where collection/propagation was undertaken", - "source": "siteSeedCollected", - "type": "feature" - } - ] - }, - { - "source": "calculatedAreaHabitatRevegetedHa", - "type": "number", - "readonly": true, - "displayOptions": { - "displayUnits": true - } - }, - { - "source": "calculatedLengthHabitatRevegetedKm", - "type": "number", - "readonly": true, - "displayOptions": { - "displayUnits": true - } - } - ] }, { + "width": "20%", "type": "col", - "css": "span3 col-border-right", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { - "type": "row", - "items": [ - { - "preLabel": "Which investment priority does this activity relate to?", - "source": "investmentPriorities2", - "type": "select2Many" - } - ] + "source": "participationIndividualNumber", + "type": "number" }, { - "type": "row", - "items": [ - { - "source": "otherInvestmentPriority", - "type": "text" - } - ] + "source": "participationGroupNumber", + "type": "selectOne" } ] - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Activities start date", - "css": "span2", - "source": "activitiesStartDate", - "type": "date" - }, - { - "preLabel": "Activities end date", - "css": "span2", - "source": "activitiesEndDate", - "type": "date" - }, - { - "preLabel": "Type of activity", - "css": "span2", - "source": "activityType", - "type": "selectOne" - }, - { - "preLabel": "Purpose of activity", - "css": "span2", - "source": "activityPurpose", - "type": "text" }, { - "preLabel": "Type of material collected/stored or propagated", - "css": "span2", - "source": "materialType", - "type": "selectOne" - } - ] - }, - { - "columns": [ - { - "width": "10%", - "source": "inKgSeedCollected", - "title": "Individuals / Kilograms collected", - "type": "selectOne" - }, - { - "width": "7%", - "source": "amountSeedCollected", - "title": "Amount collected", - "type": "number" - }, - { - "width": "15%", - "source": "otherSeedSources", - "title": "Other seed sources (if applicable)", - "type": "textarea" - }, - { - "width": "7%", - "source": "numberOfSourcePlants", - "title": "Number of source plants", - "type": "number" - }, - { - "width": "15%", - "source": "storingFacility", - "title": "Name of storing facility", - "type": "textarea" - }, - { - "width": "9%", - "source": "noOfPlantsPropogated", - "title": "Number of plants propogated", - "type": "number" - }, - { - "width": "7%", - "source": "noOfDaysPropagating", - "title": "Number of days propagating", - "type": "number" - }, - { - "width": "15%", "type": "col", - "title": "Site/s where the seeds/plant cuttings were sourced from", - "items": [ - { - "source": "siteSeedSourced", - "type": "feature" - }, - { - "type": "row", - "items": [ - { - "readonly": true, - "source": "siteSeedSourcedCalculatedAreaHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "readonly": true, - "source": "siteSeedSourcedCalculatedLengthKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" }, { - "type": "row", - "items": [ - { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" - } - ] + "source": "firstNationGroupNumber", + "type": "selectOne" } ] }, { - "width": "15%", - "source": "threatEcoCommunity", - "title": "Threatened ecological communities (if applicable)", + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", "type": "textarea" } ], - "userAddedRows": true, - "source": "seedCollectionDetails", + "source": "participationInformationTableSss", "type": "table" - } - ] - }, - { - "type": "section", - "items": [ + }, { "type": "row", "items": [ { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" + "type": "literal", + "source": "Survey informationBefore completing this section, please ensure you have created a Data Set Summary information for every data set produced by the surveys you intend to reportEach survey reported must relate to a combination of outcomes as described in your MERI planEach Data Set Summary recorded for a survey must be addressing the same outcomes as selected for the surveyIf a survey produced more than one data set, use the New Data Set button to add each Data Set Summary under your surveyA single survey can be made up of multiple dataset" } ] }, @@ -20054,12 +28852,8 @@ "type": "row", "items": [ { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + "type": "literal", + "source": "Totals Summary" } ] }, @@ -20067,13 +28861,56 @@ "type": "row", "items": [ { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total Number of baseline skills and knowledge surveys completed for this reporting period", + "source": "totalSurveyBaseline", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total Number of baseline skills and knowledge surveys invoiced for this reporting period", + "source": "totalSurveyBaselineInvoiced", + "type": "number" + } + ] + } + ] }, { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total Number of indicator skills and knowledge surveys completed for this reporting period", + "source": "totalSurveyIndicator", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total Number of indicator skills and knowledge surveys invoiced for this reporting period", + "source": "totalSurveyIndicatorInvoiced", + "type": "number" + } + ] + } + ] } ] }, @@ -20081,410 +28918,432 @@ "type": "row", "items": [ { - "preLabel": "", - "source": "projectAssuranceDetails", + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedSkillsMismatched", "type": "textarea", "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + "placeholder": "" } ] }, { - "type": "row", + "addRowText": "Add survey", + "removeRowText": "Delete this survey", + "userAddedRows": true, + "source": "skillsAndKnowledgeSurveys", + "type": "repeat", "items": [ { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] - }, - { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ + "type": "row", + "items": [ + { + "type": "col", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s relates to this survey?" + } + ] + }, + { + "type": "col", + "items": [ + { + "source": "baselineOrIndicatorSurvey", + "type": "selectOne", + "preLabel": "Baseline survey or indicator (follow-up) survey?" + } + ] + } + ] + }, { - "title": "Attached documents", - "source": "attachments", - "type": "document" - } - ] - } - ] - } - ] - }, - "modelName": null, - "templateName": "statesSeedCollecting", - "optional": true, - "optionalQuestionText": null, - "title": null, - "collapsibleHeading": null, - "name": "NHT - Seed Collection", - "description": null - }, - { - "collapsedByDefault": false, - "template": { - "dataModel": [ - { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "columns": [ - { - "dataType": "feature", - "name": "sitesPrepared" - }, - { - "computed": { - "expression": "$geom.areaHa(sitesPrepared)" - }, - "dataType": "number", - "name": "calculatedAreaPreparedHa", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ + "type": "row", + "items": [ + { + "source": "surveyObjective", + "preLabel": "Survey objective", + "type": "text" + } + ] + }, { - "condition": "areaPreparedInvoicedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The prepared area must be mapped", - "validate": "required,min[0.0001]" - } + "type": "repeat", + "source": "skillsAndKnowledgeDataSets", + "userAddedRows": true, + "addRowText": "New data set", + "removeRowText": "Delete this data set", + "items": [ + { + "type": "row", + "css": "border-bottom", + "items": [ + { + "type": "col", + "items": [ + { + "source": "dataSetId", + "type": "selectOne", + "preLabel": "Please select the data set produced by this survey. Note it must have already been entered on the Data Set Summary tab." + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "projectBaselines", + "type": "selectMany", + "preLabel": "Which project baseline/s relate to this survey?", + "readonly": "readonly" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Activity start date", + "source": "activitiesStartDate", + "type": "date" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Activity end date", + "source": "activitiesEndDate", + "type": "date" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Survey technique", + "source": "emsaProtocol", + "type": "selectOne", + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Survey technique (if Other)", + "source": "otherEmsaProtocol", + "type": "select2Many" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "surveyMethodology", + "preLabel": "Survey methodology", + "type": "text" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "numberOfPeopleSurveying", + "preLabel": "Number of people completing survey", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "skillsSurveyObjective", + "preLabel": "Survey objective", + "type": "text" + } + ] + } + ] + } + ] + } + ] } ] }, { - "computed": { - "expression": "$geom.lengthKm(sitesPrepared)" - }, - "dataType": "number", - "name": "calculatedLengthPreparedKm", - "units": "km", - "decimalPlaces": 3, - "behaviour": [ + "type": "row", + "items": [ { - "condition": "lengthPreparedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The prepared length must be mapped", - "validate": "required,min[0.0001]" - } + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" } ] }, { - "defaultValue": { - "expression": "calculatedAreaPreparedHa", - "type": "computed" - }, - "dataType": "number", - "name": "areaPreparedHa", - "decimalPlaces": 3, - "units": "ha", - "validate": "required,min[0]" - }, - { - "defaultValue": { - "expression": "calculatedLengthPreparedKm", - "type": "computed" - }, - "dataType": "number", - "name": "lengthPreparedKm", - "units": "km", - "decimalPlaces": 3, - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "mappingNotAlignedReason", - "behaviour": [ - { - "condition": "not (within(calculatedAreaPreparedHa, areaPreparedHa, 0.1))", - "type": "visible" - } - ], - "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "mappingNotAlignedComments", - "behaviour": [ - { - "condition": "\"Other\" == mappingNotAlignedReason", - "type": "visible" - } - ], - "validate": "required,maxSize[300]" - }, - { - "dataType": "document", - "name": "extraMappingDetails", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", - "behaviour": [ + "type": "row", + "items": [ { - "condition": "not (within(calculatedAreaPreparedHa, areaPreparedHa, 0.1)) or roundTo(areaPreparedHa, 2) != roundTo(areaPreparedInvoicedHa, 2)", - "type": "visible" + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" } - ], - "validate": "required" + ] }, { - "dataType": "number", - "name": "areaPreparedInvoicedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": [ + "type": "row", + "items": [ { - "rule": "min[0]" + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { - "param": { - "expression": "areaPreparedHa", - "type": "computed" - }, - "rule": "max" + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" } ] }, { - "dataType": "number", - "name": "areaPreparedInvoicedKm", - "units": "km", - "decimalPlaces": 3, - "validate": [ - { - "rule": "required" - }, - { - "rule": "min[0]" - }, + "type": "row", + "items": [ { - "param": { - "expression": "lengthPreparedKm", - "type": "computed" - }, - "rule": "max" + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." } ] }, { - "dataType": "text", - "name": "invoicedNotActualReason", - "behaviour": [ + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ { - "condition": "roundTo(areaPreparedHa, 2) != roundTo(areaPreparedInvoicedHa, 2) or roundTo(lengthPreparedKm, 2) != roundTo(areaPreparedInvoicedKm, 2)", - "type": "visible" + "title": "Attached documents", + "source": "attachments", + "type": "document" } - ], - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required" - }, + ] + } + ] + } + ] + }, + "modelName": null, + "templateName": "nhtSkillsAndKnowledgeSurvey", + "optional": true, + "optionalQuestionText": null, + "title": "Skills and knowledge survey", + "collapsibleHeading": null, + "name": "NHT - Skills and knowledge survey", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ + { + "name": "soilSurveys", + "dataType": "list", + "minSize": 1, + "columns": [ { + "name": "relatedOutcomes", "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ - { - "condition": "\"Other\" == invoicedNotActualReason", - "type": "visible" + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } } - ], - "validate": "required,maxSize[300]" - }, - { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "date", - "name": "activitiesEndDate", - "description": "", - "validate": "required" + } }, - { - "columns": [ - { - "dataType": "number", - "name": "numberOfDaysPreparingSite", - "description": "Number of days should be calculated as number of days by number of people (eg. 4.5 days by 3 people is 13.5 days)", - "validate": "required,min[0]" - }, - { - "dataType": "stringList", - "name": "industryType", - "constraints": [ - "Broad acre cropping", - "Dairy", - "Environmental", - "Horticulture", - "Grazing", - "Fisheries", - "Aquaculture", - "Other" - ] - }, - { - "dataType": "text", - "name": "actionType", - "description": "", - "constraints": [ - "Basal bark spraying", - "Biological agents", - "Cut stump", - "Cut and swab", - "Dozing", - "Felling", - "Fire", - "Foliar spraying", - "Grubbing/chipping", - "Hand pulling", - "Moisture and nutrient control", - "Mowing", - "Other earthworks", - "Overplanting", - "Pushing", - "Slashing", - "Spot spraying", - "Splatter gun", - "Stem injection", - "Stem scraper", - "Wick applicators", - "Other" - ], - "validate": "required" - }, + { + "dataType": "text", + "name": "baselineOrIndicatorSurvey", + "description": "", + "constraints": [ + "Baseline", + "Indicator" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "surveyObjective", + "description": "What the survey aim to capture? How will the information obtained from the survey be used?", + "validate": "required,maxSize[3000]" + }, + { + "dataType": "number", + "name": "numberOfSurveys", + "validate": "required,min[1],max[1]", + "defaultValue": 1, + "readonly": true + }, + { + "dataType": "list", + "name": "soilDataSets", + "columns": [ { + "name": "dataSetId", + "entityType": "au.org.ala.ecodata.DataSetSummary", "dataType": "text", - "name": "otherActionType", - "description": "This field may be used to list multiple preparation activities. This list of activities need to be separated with a ';'", + "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", + "validate": "required", + "constraints": { + "textProperty": "name", + "valueProperty": "dataSetId", + "excludePath": "soilSurveys.soilDataSets.dataSetId", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.custom.dataSets" + }, + "filter": { + "namespace": "dataSet", + "expression": "dataSet.serviceId == 30 and dataSet.progress == 'finished' and dataSet.alreadyReported == false and baselineOrIndicatorSurvey == baselineIndicatorMapping.lookupValue(dataSet.type) and deepEquals(relatedOutcomes,dataSet.outcomesLabel)" + } + } + }, "behaviour": [ { - "condition": "actionType == \"Other\"", - "type": "enable" + "type": "pre_populate", + "config": { + "waitForInitialisation": true, + "source": { + "url": "/site/geojson", + "params": [ + { + "expression": "x=find(owner.custom.dataSets, \"dataSetId\", dataSetId); x.siteId", + "name": "id", + "type": "computed", + "required": true + } + ] + }, + "target": { + "type": "singleValue", + "name": "sitesCoveredForSoilSurvey" + } + } } - ], - "validate": "required,maxSize[100]" - }, - { - "dataType": "text", - "name": "purposeOfSitePreparation", - "description": "Please provide a brief description of how the work will benefit the area", - "validate": "required" - }, - { - "dataType": "text", - "name": "threatenedEcologicalCommunity", - "description": "This free text field allows multiple TECs to be entered. They should be written as listed in EPBC, and separated by commas", - "validate": "maxSize[100]" + ] }, { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", + "name": "projectBaselines", + "dataType": "stringList", + "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.baselines" + }, "constraints": { - "textProperty": "label", - "valueProperty": "label", + "textProperty": "baseline", + "valueProperty": "code", "type": "pre-populated", + "excludePath": "projectBaselines", "config": { "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] + "context-path": "owner.custom.details.baseline.rows" } } } @@ -20493,6 +29352,9 @@ "name": "investmentPriorities2", "dataType": "stringList", "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.investmentPriorities" + }, "constraints": { "type": "pre-populated", "config": { @@ -20518,622 +29380,990 @@ "condition": "\"Other\" in investmentPriorities2" } ] - } - ], - "dataType": "list", - "name": "sitePreparationDetails" - } - ], - "dataType": "list", - "name": "sitePreparationAreasControlled" - }, - { - "name": "sitePrepCountHeader", - "type": "number", - "decimalPlaces": 0, - "computed": { - "expression": "count(sitePreparationAreasControlled, \"threatenedEcologicalCommunity\")" - } - }, - { - "dataType": "text", - "name": "comments", - "validate": "maxSize[1500]" - }, - { - "dataType": "image", - "name": "photographicEvidence" - }, - { - "dataType": "boolean", - "name": "dataUploaded", - "description": "" - }, - { - "dataType": "text", - "name": "projectAssuranceDetails", - "description": "" - }, - { - "dataType": "list", - "name": "assuranceDocuments", - "columns": [ - { - "dataType": "document", - "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" - } - ] - } - ], - "modelName": "NHT - Site preparation", - "title": "Site preparation", - "viewModel": [ - { - "columns": [ - { - "width": "10%", - "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", - "type": "selectOne" - }, - { - "width": "20%", - "type": "col", - "title": "Total Number of people delivering this service", - "items": [ - { - "source": "participationIndividualNumber", - "type": "number" - }, - { - "source": "participationGroupNumber", - "type": "selectOne" - } - ] - }, - { - "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", - "items": [ - { - "source": "firstNationIndividualNumber", - "type": "number" }, { - "source": "firstNationGroupNumber", - "type": "selectOne" - } - ] - }, - { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" - } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" - }, - { - "preLabel": "Number of Site Preparation surveys conducted:", - "noEdit": true, - "type": "number", - "source": "sitePrepCountHeader" - }, - { - "addRowText": "Add a new controlled area", - "userAddedRows": true, - "source": "sitePreparationAreasControlled", - "type": "repeat", - "items": [ - { - "type": "row", - "css": "border-bottom", - "items": [ - { - "type": "col", - "css": "span2 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "source": "sitesPrepared", - "type": "feature", - "preLabel": "Site/s where preparation was undertaken" - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "calculatedAreaPreparedHa", - "type": "number", - "readonly": true, - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "calculatedLengthPreparedKm", - "type": "number", - "readonly": true, - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" - } - ] - } - ] + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.startDate" + } }, { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "preLabel": "Actual area (ha) / length (km) of site preparation", - "helpText": "Enter the amount you will invoice for during this reporting period.", - "source": "areaPreparedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "lengthPreparedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" - } - ] - }, + "dataType": "date", + "name": "activitiesEndDate", + "description": "Specific the dates these events were held on.", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.endDate" + } + }, + { + "dataType": "feature", + "name": "sitesCoveredForSoilSurvey", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." + + + }, + { + "computed": { + "expression": "$geom.areaHa(sitesCoveredForSoilSurvey)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesCoveredForSoilSurvey)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ { - "type": "row", - "items": [ - { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea" - } - ] + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } } ] }, { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "preLabel": "Invoiced area (ha) of site preparation", - "helpText": "Enter the amount you will invoice for during this reporting period.", - "source": "areaPreparedInvoicedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "source": "areaPreparedInvoicedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "Reason for invoiced amount being different to actual amount", - "source": "invoicedNotActualReason", - "type": "selectOne" - } - ] - }, + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReason", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ { - "type": "row", - "items": [ - { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "invoicedNotActualComments", - "type": "textarea" - } - ] + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" } ] }, { - "type": "col", - "css": "span2 col-border-right", - "items": [ + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ { - "type": "row", - "items": [ - { - "preLabel": "Activities start date", - "source": "activitiesStartDate", - "type": "date" - } - ] + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" } ] }, { - "type": "col", - "css": "span2 col-border-right", - "items": [ + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ { - "type": "row", - "items": [ - { - "preLabel": "Activities end date", - "source": "activitiesEndDate", - "type": "date" - } - ] + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" } ] - } - ] - }, - { - "columns": [ - { - "width": "10%", - "source": "numberOfDaysPreparingSite", - "title": "Number of days in preparing site", - "type": "number" }, { - "width": "10%", - "source": "industryType", - "title": "Industry type", - "type": "select2" + "defaultValue": { + "type": "computed", + "expression": "$geom.lengthKm(sitesCoveredForSoilSurvey)" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 }, { - "width": "15%", - "type": "col", - "title": "Type of action", - "items": [ - { - "type": "row", - "items": [ - { - "source": "actionType", - "type": "select2" - } - ] - }, - { - "source": "otherActionType", - "placeholder": "Type of action (if Other)", - "type": "text" + "dataType": "text", + "description": "Select the technique used to conduct the survey. If the EMSA Application tool was not used, you should select 'Other'.", + "name": "emsaProtocol", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.protocol" + }, + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.protocols" + } } - ] + } }, { - "width": "15%", - "source": "purposeOfSitePreparation", - "title": "Aim of site preparation", - "type": "textarea" + "dataType": "stringList", + "description": "Describe the technique (if Other) was selected.", + "name": "otherEmsaProtocol", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methods" + } }, { - "width": "20%", - "source": "threatenedEcologicalCommunity", - "title": "Threatened ecological community (if applicable)", - "type": "text" + "dataType": "text", + "name": "surveyMethodology", + "description": "Provide more details on what is being done.", + "validate": "required,maxSize[3000]", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methodDescription" + } + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "testingDepth", + "constraints": [ + "1-10", + "11-20", + "21-30", + "31-40", + "41-50", + "51-60", + "61-70", + "71-80", + "81-90", + "91-100" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "testingObjective", + "description": "How will the information obtained from the tests be used?", + "validate": "required,maxSize[300]" + } + ], + "minSize": 1 + } + ] + }, + { + "dataType": "lookupTable", + "name": "baselineIndicatorMapping", + "config": { + "source": { + "literal": { + "Baseline dataset associated with a project outcome": "Baseline", + "Project progress dataset that is tracking change against an established project baseline dataset": "Indicator" + } + } + } + }, + { + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" }, { - "source": "relatedOutcomes", - "type": "selectOne", - "width": "15%", - "title": "Which outcome statement/s relates to this survey?" + "rule": "min[0]" }, { - "width": "15%", - "type": "col", - "title": "Which investment priority does this activity relate to?", - "items": [ - { - "source": "investmentPriorities2", - "type": "select2Many" - }, - { - "source": "otherInvestmentPriority", - "type": "text" - } - ] + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } ], - "userAddedRows": true, - "source": "sitePreparationDetails", - "type": "table" + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" } - ] + ], + "dataType": "list", + "name": "participationInformationTableSts" }, { - "type": "row", - "items": [ - { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" - } - ] + "dataType": "number", + "name": "totalSurveyBaseline", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(soilSurveys, \"baselineOrIndicatorSurvey == 'Baseline' ? 1 : 0\")" + } }, { - "type": "row", - "items": [ + "dataType": "number", + "name": "totalSurveyBaselineInvoiced", + "validate": [ { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyBaseline", + "type": "computed" + }, + "rule": "max" } - ] + ], + "defaultValue": "" }, { - "type": "row", - "items": [ + "dataType": "number", + "name": "totalSurveyIndicator", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(soilSurveys, \"baselineOrIndicatorSurvey == 'Indicator' ? 1 : 0\")" + } + }, + { + "dataType": "number", + "name": "totalSurveyIndicatorInvoiced", + "defaultValue": "", + "validate": [ { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "rule": "required" }, { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyIndicator", + "type": "computed" + }, + "rule": "max" } ] }, { - "type": "row", - "items": [ + "dataType": "text", + "name": "totalInvoicedSoilMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + "condition": "+totalSurveyIndicatorInvoiced < +totalSurveyIndicator or +totalSurveyBaselineInvoiced < +totalSurveyBaseline", + "type": "enable" } ] }, { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] + "dataType": "text", + "name": "comments", + "validate": "maxSize[1500]" }, { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, + "dataType": "image", + "name": "photographicEvidence" + }, + { + "dataType": "boolean", + "name": "dataUploaded", + "description": "" + }, + { + "dataType": "text", + "name": "projectAssuranceDetails", + "description": "", + "validate": "required,maxSize[5000]" + }, + { + "dataType": "list", + "name": "assuranceDocuments", "columns": [ { - "title": "Attached documents", - "source": "attachments", - "type": "document" + "dataType": "document", + "name": "attachments", + "description": "Please attach any Evidence of Service Delivery here." } ] } - - ] - }, - "modelName": null, - "templateName": "nhtSitePreparation", - "optional": true, - "optionalQuestionText": null, - "title": "Site preparation", - "collapsibleHeading": null, - "name": "NHT - Site preparation", - "description": null - }, - { - "collapsedByDefault": false, - "template": { - "title": "Skills and knowledge survey", - "modelName": "NHT - Skills and knowledge survey", - "dataModel": [ + ], + "modelName": "NHT - Soil testing", + "title": "Soil Testing", + "viewModel": [ { - "columns": [ + "type": "section", + "items": [ { - "dataType": "list", - "name": "skillsKnowledgeSurveyBaselineDetails", + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { - "dataType": "text", - "name": "baselineOrIndicator", - "description": "", - "constraints": [ - "Baseline", - "Indicator" - ], - "validate": "required" + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", + "type": "selectOne" }, { - "name": "projectBaseline", - "dataType": "text", - "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", - "validate": "required", - "constraints": { - "textProperty": "baseline", - "valueProperty": "code", - "type": "pre-populated", - "excludePath": "projectBaseline", - "config": { - "source": { - "context-path": "owner.custom.details.baseline.rows" - } + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", + "type": "selectOne" } - } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] }, { - "name": "datasetSupports", - "dataType": "text", - "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "name", - "valueProperty": "dataSetId", - "type": "pre-populated", - "config": { - "source": { - "context-path": "owner.custom.dataSets" - } + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableSts", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Survey informationBefore completing this section, please ensure you have created a Data Set Summary information for every data set produced by the surveys you intend to reportEach survey reported must relate to a combination of outcomes as described in your MERI planEach Data Set Summary recorded for a survey must be addressing the same outcomes as selected for the surveyIf a survey produced more than one data set, use the New Data Set button to add each Data Set Summary under your surveyA single survey can be made up of multiple dataset" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total Number of baseline soil testing surveys completed for this reporting period", + "source": "totalSurveyBaseline", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total Number of baseline soil testing surveys invoiced for this reporting period", + "source": "totalSurveyBaselineInvoiced", + "type": "number" + } + ] } - } + ] }, { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total Number of indicator soil testing surveys completed for this reporting period", + "source": "totalSurveyIndicator", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total Number of indicator soil testing surveys invoiced for this reporting period", + "source": "totalSurveyIndicatorInvoiced", + "type": "number" + } + ] } - } - }, - { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, + ] + } + ] + }, + { + "type": "row", + "items": [ { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedSoilMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add survey", + "removeRowText": "Delete this survey", + "userAddedRows": true, + "source": "soilSurveys", + "type": "repeat", + "items": [ { - "dataType": "stringList", - "description": "The technique used to conduct the survey.", - "name": "ternSurveyTechnique", - "validate": "required", - "constraints": [ - "Tern Survey technique 1", - "Tern Survey technique 1", - "Tern Survey technique 1", - "Other" + "type": "row", + "items": [ + { + "type": "col", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s relates to this survey?" + } + ] + }, + { + "type": "col", + "items": [ + { + "source": "baselineOrIndicatorSurvey", + "type": "selectOne", + "preLabel": "Baseline survey or indicator (follow-up) survey?" + } + ] + } ] }, { - "dataType": "number", - "name": "numberOfPeopleSurveying", - "validate": "required,min[0]" + "type": "row", + "items": [ + { + "source": "surveyObjective", + "preLabel": "Survey objective", + "type": "text" + } + ] }, { - "dataType": "text", - "description": "Please describe the Survey technique if other was selected.", - "name": "otherTernSurveyTechnique", - "behaviour": [ + "type": "repeat", + "source": "soilDataSets", + "userAddedRows": true, + "addRowText": "New data set", + "removeRowText": "Delete this data set", + "items": [ { - "condition": "ternSurveyTechnique == \"Other\"", - "type": "enable_and_clear" + "type": "row", + "css": "border-bottom", + "items": [ + { + "type": "col", + "items": [ + { + "source": "dataSetId", + "type": "selectOne", + "preLabel": "Please select the data set produced by this survey. Note it must have already been entered on the Data Set Summary tab." + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "projectBaselines", + "type": "selectMany", + "preLabel": "Which project baseline/s relate to this survey?", + "readonly": "readonly" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Activity start date", + "source": "activitiesStartDate", + "type": "date" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Activity end date", + "source": "activitiesEndDate", + "type": "date" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Sites where soil tests were conducted", + "source": "sitesCoveredForSoilSurvey", + "type": "feature" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedLengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) / length (km) where soil tests were conducted", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "lengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "Survey technique", + "source": "emsaProtocol", + "type": "selectOne", + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Survey technique (if Other)", + "source": "otherEmsaProtocol", + "type": "select2Many" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "surveyMethodology", + "preLabel": "Survey methodology", + "type": "text" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "testingDepth", + "preLabel": "Testing depth (cm)", + "type": "selectOne" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "testingObjective", + "preLabel": "Testing objective", + "type": "textarea" + } + ] + } + ] + } + ] } - ], - "validate": "required" - }, + ] + } + ] + }, + { + "type": "row", + "items": [ { - "dataType": "text", - "name": "surveyMethodology", - "description": "Provide more details on what is being done", - "validate": "required,maxSize[3000]" + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { - "dataType": "text", - "name": "surveyObjective", - "description": "How will the information obtained from the survey be used", - "validate": "required,maxSize[3000]" + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, + { + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" } ] } - ], - "dataType": "list", - "name": "skillsKnowledgeSurveys", - "minSize": 1 - }, + ] + } + ] + }, + "modelName": null, + "templateName": "nhtSoilTesting", + "optional": true, + "optionalQuestionText": null, + "title": "Soil testing", + "collapsibleHeading": null, + "name": "NHT - Soil testing", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ { + "allowRowDelete": "false", "columns": [ - { - "dataType": "species", - "name": "species", - "validate": "required" - }, { "dataType": "text", - "name": "individualsOrGroups", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", "constraints": [ "Individuals", "Groups" @@ -21142,127 +30372,323 @@ }, { "dataType": "number", - "name": "numberOfIndividualsOrGroups", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], "validate": "required,min[0]" }, { - "dataType": "stringList", - "name": "ternSurveyTechnique", - "validate": "required", + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], "constraints": [ - "Tern Survey technique 1", - "Tern Survey technique 1", - "Tern Survey technique 1", - "Other" + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" ] }, { - "dataType": "text", - "description": "Please describe the Survey technique if other was selected.", - "name": "otherTernSurveyTechnique", + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, "behaviour": [ { - "condition": "ternSurveyTechnique == \"Other\"", - "type": "enable_and_clear" + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } ], - "validate": "required" + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] }, { "dataType": "text", - "name": "surveyMethodology", - "description": "Provide more details on what is being done", - "validate": "required,maxSize[3000]" + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] }, { "dataType": "text", - "name": "surveyObjective", - "description": "How will the information obtained from the survey be used", - "validate": "required,maxSize[3000]" + "name": "participationDetails", + "validate": "required, maxSize[3000]" } ], "dataType": "list", - "name": "faunaSurveyBaselineTable" - }, - { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" + "name": "participationInformationTableSaf" }, { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "columns": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "label", + "type": "pre-populated", + "config": { + "source": { + "url": "/project/outcomesByScores", + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + }, + { + "expression": "scores", + "name": "scoreIds", + "type": "computed" + } + ] + } + } + } + }, { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } + } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "description": "Describe the investment priority (if Other) was selected", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "fullOrPartTime", + "constraints": [ + "Full-time", + "Part-time" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "fteOfThisPosition", + "decimalPlaces": 3, + "description": "Note: This must be reported in the context of this reporting period only. For example, a full time SAF = 1, and a half time SAF = 0.5", + "validate": "required,min[0],max[1]" + }, + { + "dataType": "number", + "name": "amountOfFteInvoicedFor", + "decimalPlaces": 3, + "description": "Note: This must be reported in the context of this reporting period only. For example, a full time SAF = 1, and a half time SAF = 0.5", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "fteOfThisPosition", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" + } + ] + }, + { + "dataType": "list", + "name": "sustainableAgricultureFacilitators", + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "wasPositionVacant", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, + { + "name": "yesPositionVacant", + "dataType": "text", + "validate": "required", + "constraints": [ + "Yes", + "No" + ], + "behaviour": [ + { + "condition": "wasPositionVacant == \"Yes\"", + "type": "enable_and_clear" + } + ] + }, + { + "dataType": "text", + "name": "noRecruitmentProcess", + "behaviour": [ + { + "condition": "yesPositionVacant == \"No\"", + "type": "enable" + } + ], + "validate": "required,maxSize[300]" + }, + { + "dataType": "date", + "name": "expectedDatePositionFill", + "validate": "required", + "behaviour": [ + { + "condition": "wasPositionVacant == \"Yes\" and yesPositionVacant == \"No\" or wasPositionVacant == \"Yes\" and yesPositionVacant == \"Yes\"", + "type": "enable" + } + ] + }, + { + "dataType": "text", + "name": "coveredInterimPosition", + "validate": "required,maxSize[100]", + "behaviour": [ + { + "condition": "wasPositionVacant == \"Yes\" and yesPositionVacant == \"No\" or wasPositionVacant == \"Yes\" and yesPositionVacant == \"Yes\"", + "type": "enable" + } + ] + }, + { + "dataType": "text", + "name": "deliveryOrSubcontractorEmployed", + "constraints": [ + "Delivery partner", + "Subcontractor" + ], + "validate": "required" + } + ] } ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + "dataType": "list", + "name": "safAreasControlled" }, { "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "name": "totalAnnualFtes", + "validate": "min[0]", + "decimalPlaces": 3, + "computed": { + "expression": "sum(safAreasControlled, \"fteOfThisPosition\")/4" + } + }, + { + "dataType": "number", + "name": "totalAnnualFtesInvoiced", + "decimalPlaces": 3, + "defaultValue": "", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalAnnualFtes", + "type": "computed", + "decimalPlaces": 3 + }, + "rule": "max" } - ], - "validate": "required,min[0]" + ] }, { "dataType": "text", - "name": "firstNationGroupNumber", + "name": "totalInvoicedSafMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", "behaviour": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", + "condition": "+totalAnnualFtesInvoiced < +totalAnnualFtes", "type": "enable" } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "name": "numberSkillsKnowledgeSurveysConducted", - "type": "number", - "decimalPlaces": 0, - "computed": { - "expression": "count(skillsKnowledgeSurveys, \"baselineOrIndicator\")" - } + ] }, { "dataType": "text", @@ -21276,12 +30702,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -21290,156 +30716,310 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], + "modelName": "NHT - Sustainable agriculture facilitators", + "title": "Sustainable Agriculture Facilitators", "viewModel": [ { - "type": "section", + "type": "row", "items": [ { - "columns": [ + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, + "columns": [ + { + "width": "10%", + "source": "participationIndividualsOrGroups", + "title": "Are individuals or groups delivering this service?", + "type": "selectOne" + }, + { + "width": "20%", + "type": "col", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ { - "width": "10%", - "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "source": "participationIndividualNumber", + "type": "number" + }, + { + "source": "participationGroupNumber", "type": "selectOne" + } + ] + }, + { + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" }, { - "width": "20%", - "type": "col", - "title": "Total Number of people delivering this service", + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableSaf", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", "items": [ { - "source": "participationIndividualNumber", - "type": "number" - }, + "preLabel": "(i) Total Annual FTE for this reporting period", + "source": "totalAnnualFtes", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ { - "source": "participationGroupNumber", - "type": "selectOne" + "preLabel": "(ii) Total Annual FTE invoiced for in this reporting period", + "source": "totalAnnualFtesInvoiced", + "type": "number", + "displayOptions": { + "removeTrailingZeros": false + } } ] - }, + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedSafMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add a new SAF position", + "userAddedRows": true, + "source": "safAreasControlled", + "type": "repeat", + "items": [ + { + "type": "row", + "items": [ + { + "source": "Each SAF position must be reported on in a separate section. Please add a new section for each SAF position.", + "type": "literal" + } + ] + }, + { + "type": "row", + "items": [ { + "css": "span3", "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", "items": [ { - "source": "firstNationIndividualNumber", - "type": "number" - }, + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "source": "firstNationGroupNumber", - "type": "selectOne" + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] } ] }, { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" - }, - { - "preLabel": "Number of Skills and Knowledge surveys conducted:", - "noEdit": true, - "type": "number", - "source": "numberSkillsKnowledgeSurveysConducted" + ] }, { - "addRowText": "New survey site", - "userAddedRows": true, - "source": "skillsKnowledgeSurveys", - "type": "repeat", + "type": "row", "items": [ - { - "type": "table", - "source": "skillsKnowledgeSurveyBaselineDetails", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ - { - "source": "baselineOrIndicator", - "type": "selectOne", - "width": "10%", - "title": "Baseline survey or indicator (follow-up) survey?" - }, - { - "source": "projectBaseline", - "type": "selectOne", - "width": "10%", - "title": "Which project baseline relates to this survey?" - }, - { - "source": "datasetSupports", - "type": "select2Many", - "width": "10%", - "title": "What dataset supports this?" - }, - { - "source": "relatedOutcomes", - "type": "selectOne", - "width": "10%", - "title": "Which outcome statement/s relates to this survey?" - }, - { - "title": "Activities start date", - "source": "activitiesStartDate", - "type": "date", - "width": "8%" - }, - { - "title": "Activities end date", - "source": "activitiesEndDate", - "type": "date", - "width": "8%" - }, - { - "width": "5%", - "title": "Number of people completing survey", - "source": "numberOfPeopleSurveying", - "type": "number" - }, - { - "width": "10%", - "title": "Survey technique", - "source": "ternSurveyTechnique", - "type": "selectOne" - }, - { - "width": "10%", - "title": "Survey technique (if Other)", - "source": "otherTernSurveyTechnique", - "type": "textarea" - }, + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "width": "10%", - "rows": 4, - "source": "surveyMethodology", - "title": "Survey methodology", - "type": "textarea" - }, + "type": "row", + "items": [ + { + "source": "fullOrPartTime", + "preLabel": "Full time or part-time employment", + "type": "selectOne" + } + ] + } + ] + }, + { + "css": "span3", + "type": "col", + "items": [ { - "width": "10%", - "rows": 4, - "source": "surveyObjective", - "title": "Survey objective", - "type": "textarea" + "type": "row", + "items": [ + { + "source": "fteOfThisPosition", + "preLabel": "FTE of this position for this reporting period", + "type": "number" + } + ] + } + ] + }, + { + "css": "span4", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "amountOfFteInvoicedFor", + "preLabel": "Amount of FTE for this position that are being invoiced for", + "type": "number" + } + ] } ] } ] }, + { + "columns": [ + { + "width": "15%", + "source": "wasPositionVacant", + "title": "Was the position(s) vacant for any amount of time during the reporting period (not including leave)", + "type": "selectOne" + }, + { + "width": "15%", + "source": "yesPositionVacant", + "title": "If yes, is there a recruitment process being run?", + "type": "selectOne" + }, + { + "width": "20%", + "source": "noRecruitmentProcess", + "title": "If no, what are the reasons?", + "type": "textarea" + }, + { + "width": "15%", + "source": "expectedDatePositionFill", + "title": "Expected date to fill the position(s)", + "type": "date" + }, + { + "width": "20%", + "source": "coveredInterimPosition", + "title": "How is the position(s) being covered in the interim?", + "type": "textarea" + }, + { + "width": "15%", + "source": "deliveryOrSubcontractorEmployed", + "title": "Is the position employed by delivery partner or subcontractor?", + "type": "selectOne" + } + ], + "source": "sustainableAgricultureFacilitators", + "type": "table", + "userAddedRows": true, + "disableTableUpload": true + } + ] + }, + { + "type": "section", + "items": [ { "type": "row", "items": [ @@ -21468,7 +31048,7 @@ "items": [ { "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { "preLabel": "Data have been uploaded", @@ -21481,7 +31061,6 @@ "type": "row", "items": [ { - "preLabel": "", "source": "projectAssuranceDetails", "type": "textarea", "rows": 4, @@ -21489,15 +31068,6 @@ } ] }, - { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] - }, { "type": "table", "source": "assuranceDocuments", @@ -21516,116 +31086,194 @@ ] }, "modelName": null, - "templateName": "nhtSkillsAndKnowledgeSurvey", + "templateName": "nhtSustainableAgricultureFacilitators", "optional": true, "optionalQuestionText": null, - "title": "Skills and knowledge survey", + "title": "Sustainable agriculture facilitators", "collapsibleHeading": null, - "name": "NHT - Skills and knowledge survey", + "name": "NHT - Sustainable agriculture facilitators", "description": null }, { "collapsedByDefault": false, "template": { + "title": "Synthesising and finalising baseline data", + "modelName": "NHT - Baseline data", "dataModel": [ { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "allowRowDelete": "false", + "columns": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": "required,min[0]" + }, { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" } ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "dataType": "text", - "name": "baselineOrIndicator", - "description": "", - "constraints": [ - "Baseline", - "Indicator" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "numberOfSoilTests", - "validate": "required,min[0]" - }, - { - "dataType": "number", - "name": "numberOfSoilTestInvoice", - "validate": "required,min[0]" + "dataType": "list", + "name": "participationInformationTableSyn" }, { "columns": [ + { + "dataType": "list", + "name": "baselineDetails", + "columns": [ + { + "dataType": "text", + "name": "datasetName", + "validate": "required" + }, + { + "name": "projectBaseline", + "dataType": "text", + "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", + "validate": "required", + "constraints": { + "textProperty": "baseline", + "valueProperty": "code", + "type": "pre-populated", + "excludePath": "baselineDetailsControlled.baselineDetails.projectBaseline", + "config": { + "source": { + "context-path": "owner.custom.details.baseline.rows" + } + } + } + }, + { + "name": "monitoringIndicator", + "dataType": "stringList", + "description": "", + + + "computed": { + "expression": "if(projectBaseline, x=pluck(findAll($context.owner.custom.details.monitoring.rows, \"relatedBaseline\", projectBaseline), \"data1\", \"No monitoring indicators associated with this baseline\"), '')" + } + }, + { + "name": "datasetSupports", + "dataType": "text", + "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", + "validate": "required", + "constraints": { + "textProperty": "name", + "valueProperty": "dataSetId", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.custom.dataSets" + } + } + } + }, + { + "dataType": "text", + "name": "purpose", + "validate": "required,maxSize[500]" + } + ] + }, { "name": "relatedOutcomes", "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", "validate": "required", "constraints": { "textProperty": "label", @@ -21634,15 +31282,17 @@ "config": { "source": { "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + }, + { + "expression": "scores", + "name": "scoreIds", + "type": "computed" + } ] } } @@ -21650,20 +31300,16 @@ }, { "name": "investmentPriorities2", - "dataType": "stringList", + "dataType": "text", + "description": "", "validate": "required", "constraints": { + "textProperty": "label", + "valueProperty": "value", "type": "pre-populated", "config": { "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" + "context-path": "owner.investmentPriorities" } } } @@ -21671,6 +31317,7 @@ { "dataType": "text", "name": "otherInvestmentPriority", + "description": "Describe the investment priority (if Other) was selected", "behaviour": [ { "type": "enable", @@ -21679,99 +31326,68 @@ ] }, { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], "validate": "required" - }, + } + ], + "dataType": "list", + "name": "baselineDetailsControlled" + }, + { + "name": "numberBaselineDataSets", + "type": "number", + "decimalPlaces": 0 + }, + { + "dataType": "number", + "name": "totalNumberBaselineDatasets", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(baselineDetailsControlled, \"relatedOutcomes ? 1 : 0\")" + } + }, + { + "dataType": "number", + "name": "totalNumberBaselineDatasetsInvoiced", + "validate": [ { - "dataType": "feature", - "name": "sitesTested" + "rule": "required" }, { - "defaultValue": { - "type": "computed", - "expression": "$geom.areaHa(sitesTested)" - }, - "dataType": "number", - "name": "areaTestedHa", - "validate": [ - { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.areaHa(sitesTested)*0.9" - } - }, - { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.areaHa(sitesTested)*1.1" - } - } - ] + "rule": "min[0]" }, { - "defaultValue": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTested)" + "param": { + "expression": "totalNumberBaselineDatasets", + "type": "computed" }, - "dataType": "number", - "name": "lengthTestedKm", - "validate": [ - { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTested)*0.9" - } - }, - { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTested)*1.1" - } - } - ] - }, - { - "dataType": "text", - "name": "testingTechnique", - "description": "What/How will these tests capture information", - "validate": "required,maxSize[100]" - }, - { - "dataType": "text", - "name": "testingObjective", - "description": "How will the information obtained from the tests be used", - "validate": "required,maxSize[300]" - }, - { - "dataType": "text", - "name": "testingDepth", - "description": "", - "validate": "required,maxSize[300]" + "rule": "max" } ], - "dataType": "list", - "name": "soilTestingDetails" + "defaultValue": "" }, { "dataType": "text", - "name": "comments", - "validate": "maxSize[1500]" + "name": "totalInvoicedBaselineMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalNumberBaselineDatasetsInvoiced < +totalNumberBaselineDatasets", + "type": "enable" + } + ] }, { - "dataType": "image", - "name": "photographicEvidence" + "dataType": "text", + "name": "comments", + "validate": "maxSize[1500]" }, { "dataType": "boolean", @@ -21779,9 +31395,9 @@ "description": "" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -21790,26 +31406,35 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], - "modelName": "NHT - Soil testing", - "title": "Soil testing", "viewModel": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -21822,296 +31447,435 @@ ] }, { - "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", - "items": [ + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableSyn", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total number of baseline datasets synthesised and finalised for this reporting period", + "source": "totalNumberBaselineDatasets", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total number of baseline datasets synthesised and finalised invoiced for this reporting period", + "source": "totalNumberBaselineDatasetsInvoiced", + "type": "number" + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedBaselineMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add a new baseline", + "userAddedRows": true, + "source": "baselineDetailsControlled", + "type": "repeat", + "items": [ + { + "type": "row", + "items": [ + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + } + ] + }, + { + "type": "table", + "source": "baselineDetails", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ { - "source": "firstNationIndividualNumber", - "type": "number" + "source": "datasetName", + "type": "text", + "width": "20%", + "title": "Name of Baseline Dataset" }, { - "source": "firstNationGroupNumber", - "type": "selectOne" + "source": "projectBaseline", + "type": "selectOne", + "width": "20%", + "title": "Which Project Baseline are you reporting on?" + }, + { + "source": "monitoringIndicator", + "type": "selectMany", + "width": "20%", + "title": "What monitoring indicator does the baseline support?" + }, + { + "source": "datasetSupports", + "type": "select2Many", + "width": "15%", + "title": "What dataset supports this Project Baseline?" + }, + { + "preLabel": "", + "source": "purpose", + "type": "textarea", + "width": "25%", + "rows": 3, + "placeholder": "", + "title": "Purpose" } ] - }, + } + ] + }, + + { + "type": "row", + "items": [ { - "source": "participationDetails", + "preLabel": "Clarification, if needed", + "type": "textarea", "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n• any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" + ] }, { "type": "row", "items": [ { - "preLabel": "Baseline survey or indicator (follow-up) survey?", - "css": "span3", - "source": "baselineOrIndicator", - "type": "selectOne" - }, - { - "preLabel": "Number of soil tests conducted in targeted areas", - "css": "span2", - "source": "numberOfSoilTests", - "type": "number" + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { - "preLabel": "How many soil tests will you be invoicing for?", - "css": "span2", - "source": "numberOfSoilTestInvoice", - "type": "number" + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" } ] }, { - "type": "section", + "type": "row", "items": [ { - "columns": [ - { - "source": "relatedOutcomes", - "type": "selectOne", - "width": "15%", - "title": "Which outcome statement/s relates to this survey?" - }, - { - "width": "15%", - "type": "col", - "title": "Which investment priority does this activity relate to?", - "items": [ - { - "source": "investmentPriorities2", - "type": "select2Many" - }, - { - "source": "otherInvestmentPriority", - "type": "text" - } - ] - }, - { - "title": "Activities start date", - "source": "activitiesStartDate", - "type": "date", - "width": "10%" - }, - { - "title": "Activities end date", - "source": "activitiesEndDate", - "type": "date", - "width": "10%" - }, - { - "width": "5%", - "source": "sitesTested", - "type": "feature", - "title": "Project site/s where soil tests were conducted" - }, - { - "width": "10%", - "source": "areaTestedHa", - "type": "number", - "title": "Area (ha) where soil tests were conducted" - }, - { - "width": "5%", - "source": "lengthTestedKm", - "type": "number", - "title": "Length (km) where soil tests were conducted" - }, - { - "width": "10%", - "source": "testingTechnique", - "title": "Testing technique", - "type": "textarea" - }, - { - "width": "10%", - "source": "testingObjective", - "title": "Testing objective", - "type": "textarea" - }, + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, + { + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" + } + ] + } + ] + }, + "modelName": null, + "templateName": "nhtBaselineData", + "optional": true, + "optionalQuestionText": null, + "title": "Collecting, or synthesising baseline data", + "collapsibleHeading": null, + "name": "NHT - Baseline data", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ + { + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" + }, + { + "dataType": "number", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ { - "width": "10%", - "source": "testingDepth", - "title": "Testing depth", - "type": "textarea" + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } ], - "userAddedRows": true, - "source": "soilTestingDetails", - "type": "table" + "validate": "required,min[0]" }, { - "type": "row", - "items": [ + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" ] }, { - "type": "row", - "items": [ + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" } ] }, { - "type": "row", - "items": [ + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" }, { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" } ] }, { - "type": "row", - "items": [ - { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" + } + ], + "dataType": "list", + "name": "participationInformationTableUei" + }, + { + "columns": [ + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "label", + "type": "pre-populated", + "config": { + "source": { + "url": "/project/outcomesByScores", + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + }, + { + "expression": "scores", + "name": "scoreIds", + "type": "computed" + } + ] + } } - ] + } }, { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." + "name": "investmentPriorities2", + "dataType": "text", + "description": "", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.investmentPriorities" + } } - ] + } }, { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ { - "title": "Attached documents", - "source": "attachments", - "type": "document" + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" } ] - } - ] - } - ] - }, - "modelName": null, - "templateName": "nhtSoilTesting", - "optional": true, - "optionalQuestionText": null, - "title": "Soil testing", - "collapsibleHeading": null, - "name": "NHT - Soil testing", - "description": null - }, - { - "collapsedByDefault": false, - "template": { - "dataModel": [ - { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" - } - ], - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "firstNationGroupNumber", - "behaviour": [ + }, { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "columns": [ + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" + }, { "dataType": "text", "name": "initialOrFollowup", @@ -22128,28 +31892,33 @@ }, { "dataType": "feature", - "name": "siteOfIntervention" + "name": "sitesInterventionsOccurred", + "description": "Mapping field to be done and Area (ha) field be auto-calculated from mapping." }, { - "defaultValue": { - "type": "computed", - "expression": "$geom.areaHa(siteOfIntervention)" + "computed": { + "expression": "$geom.areaHa(sitesInterventionsOccurred)" }, "dataType": "number", - "name": "areaOfInterventionHa", - "validate": [ - { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.areaHa(siteOfIntervention)*0.9" - } - }, + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesInterventionsOccurred)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.areaHa(siteOfIntervention)*1.1" + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" } } ] @@ -22157,129 +31926,179 @@ { "defaultValue": { "type": "computed", - "expression": "$geom.lengthKm(siteOfIntervention)" + "expression": "calculatedAreaTreatedHa" }, "dataType": "number", - "name": "lengthOfInterventionKm", - "validate": [ + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReason", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(siteOfIntervention)*0.9" - } - }, + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1))", + "type": "if" + } + ] + }, + { + "dataType": "text", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", + "behaviour": [ { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(siteOfIntervention)*1.1" - } + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" } ] }, { - "dataType": "feature", - "name": "relocationSite", - "description": "If translocation is required please map site" + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1))", + "type": "if" + } + ] }, { "defaultValue": { "type": "computed", - "expression": "$geom.areaHa(relocationSite)" + "expression": "calculatedLengthTreatedKm" }, "dataType": "number", - "name": "areaOfRelocationSiteHa", - "validate": [ + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + + { + "dataType": "feature", + "name": "sitesInterventionsReleased", + "description": "Mapping field to be done and Area (ha) field be auto-calculated from mapping." + }, + { + "computed": { + "expression": "$geom.areaHa(sitesInterventionsReleased)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHaReleased", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesInterventionsReleased)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKmReleased", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.areaHa(relocationSite)*0.9" + "condition": "lengthTreatedKmReleased > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" } - }, + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHaReleased" + }, + "dataType": "number", + "name": "areaTreatedHaReleased", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReasonReleased", + "constraints": [ + "Mapped area simplifies more complex area/s where work was undertaken during this period", + "Other" + ], + "validate": "required", + "behaviour": [ { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.areaHa(relocationSite)*1.1" - } + "condition": "not (within(areaTreatedHaReleased, calculatedAreaTreatedHaReleased, 0.1))", + "type": "if" + } + ] + }, + { + "dataType": "text", + "name": "mappingNotAlignedCommentsReleased", + "validate": "required,maxSize[100]", + "behaviour": [ + { + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReasonReleased" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetailsReleased", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHaReleased, calculatedAreaTreatedHaReleased, 0.1))", + "type": "if" } ] }, { - "dataType": "text", - "name": "purposeOfIntervention", - "description": "This field may be used to list What type of intervention is required. A list of multiple interventions need to be separated with a ';'.", - "validate": "required,maxSize[500]" + "defaultValue": { + "type": "computed", + "expression": "calculatedLengthTreatedKmReleased" + }, + "dataType": "number", + "name": "lengthTreatedKmReleased", + "units": "km", + "decimalPlaces": 3 }, { "columns": [ { "dataType": "date", "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", + "description": "Specific the dates these events were held on.", "validate": "required" }, { "dataType": "date", "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } - } - } - }, - { - "name": "investmentPriorities2", - "dataType": "stringList", - "validate": "required", - "constraints": { - "type": "pre-populated", - "config": { - "source": { - "params": [ - { - "expression": "owner.projectId", - "name": "id", - "type": "computed" - } - ], - "url": "/project/listProjectInvestmentPriorities/" - } - } - } - }, - { - "dataType": "text", - "name": "otherInvestmentPriority", - "behaviour": [ + "description": "Specific the dates these events were held on.", + "validate": [ { - "type": "enable", - "condition": "\"Other\" in investmentPriorities2" + "rule": "required" + }, + { + "rule": "future", + "param": { + "expression": "formatDateForValidation(activitiesStartDate)", + "type": "computed" + } } ] }, @@ -22290,7 +32109,7 @@ }, { "dataType": "text", - "name": "participationIndividualsOrGroups", + "name": "groupsOrIndividual", "constraints": [ "Individuals", "Groups" @@ -22301,6 +32120,12 @@ "dataType": "number", "name": "numberOfIndividualsInvolved", "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "purposeOfIntervention", + "description": "This field may be used to list What type of intervention is required. A list of multiple interventions need to be separated with a ';'.", + "validate": "required,maxSize[500]" } ], "dataType": "list", @@ -22310,6 +32135,76 @@ "dataType": "list", "name": "interventionDetails" }, + { + "dataType": "number", + "name": "totalNumberInterventionsInitial", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(interventionDetails, \"initialOrFollowup == 'Initial' ? numberOfInterventions : 0\")" + } + }, + { + "dataType": "number", + "name": "totalNumberInterventionsInitialInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalNumberInterventionsInitial", + "type": "computed" + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "number", + "name": "totalNumberInterventionsFollowUp", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(interventionDetails, \"initialOrFollowup == 'Follow-up' ? numberOfInterventions : 0\")" + } + }, + { + "dataType": "number", + "name": "totalNumberInterventionsFollowUpInvoiced", + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalNumberInterventionsFollowUp", + "type": "computed" + }, + "rule": "max" + } + ], + "defaultValue": "" + }, + { + "dataType": "text", + "name": "totalInvoicedInterventionsMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", + "behaviour": [ + { + "condition": "+totalNumberInterventionsInitialInvoiced < +totalNumberInterventionsInitial or +totalNumberInterventionsFollowUpInvoiced < +totalNumberInterventionsFollowUp", + "type": "enable" + } + ] + }, { "dataType": "text", "name": "comments", @@ -22322,12 +32217,12 @@ { "dataType": "boolean", "name": "dataUploaded", - "description": "" + "description": "Tick box to confirm data has been uploadedURL Link (mandatory if below is ticked) in available evidence" }, { - "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "dataType": "text", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -22336,26 +32231,37 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], "modelName": "NHT - Emergency Interventions", - "title": "Undertaking emergency interventions to prevent extinctions", + "title": "Undertaking Emergency Interventions to Prevent Extinctions", "viewModel": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -22368,224 +32274,478 @@ ] }, { - "type": "col", - "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "type": "col", + "width": "20%", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", + "items": [ + { + "source": "firstNationIndividualNumber", + "type": "number" + }, + { + "source": "firstNationGroupNumber", + "type": "selectOne" + } + ] + }, + { + "width": "20%", + "source": "participationDetails", + "rows": 4, + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", + "type": "textarea" + } + ], + "source": "participationInformationTableUei", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total number of interventions (initial) for this reporting period", + "source": "totalNumberInterventionsInitial", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total number of interventions (initial) invoiced for this reporting period", + "source": "totalNumberInterventionsInitialInvoiced", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total number of interventions (follow-up) for this reporting period", + "source": "totalNumberInterventionsFollowUp", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total number of interventions (follow-up) invoiced for this reporting period", + "source": "totalNumberInterventionsFollowUpInvoiced", + "type": "number" + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedInterventionsMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] + }, + { + "addRowText": "Add intervention site", + "userAddedRows": true, + "source": "interventionDetails", + "type": "repeat", + "items": [ + { + "type": "row", + "items": [ + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s does this activity relate to?" + } + ] + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] + } + ] + }, + { + "css": "span3", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] + } + ] + } + ] + }, + { + "type": "row", + "css": "border-bottom", "items": [ { - "source": "firstNationIndividualNumber", - "type": "number" + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "initialOrFollowup", + "preLabel": "Initial or follow-up activity?", + "type": "selectOne" + } + ] + } + ] }, { - "source": "firstNationGroupNumber", - "type": "selectOne" + "type": "col", + "css": "span3 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "source": "numberOfInterventions", + "preLabel": "Number of interventions", + "type": "number" + } + ] + } + ] } ] }, { - "source": "participationDetails", - "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", - "type": "textarea" - } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" - }, - { - "type": "section", - "items": [ - { - "addRowText": "Add intervention site", - "userAddedRows": true, - "source": "interventionDetails", - "type": "repeat", + "type": "row", "items": [ { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Initial or follow-up activity?", - "css": "span2", - "source": "initialOrFollowup", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "Site/s where interventions occurred (source site)", + "source": "sitesInterventionsOccurred", + "type": "feature" + } + ] }, { - "preLabel": "Number of interventions", - "css": "span2", - "source": "numberOfInterventions", - "type": "number" + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Site/s where interventions occurred (source site)", - "css": "span2", - "source": "siteOfIntervention", - "type": "feature" - }, - { - "preLabel": "Actual area (ha) where interventions occurred", - "css": "span2", - "source": "areaOfInterventionHa", - "type": "number" - }, - { - "preLabel": "Actual area (ha) where interventions were relocated to (release site)", - "css": "span2", - "source": "relocationSite", - "type": "feature" + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) where interventions occurred", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] }, { - "preLabel": "Actual area (ha) where interventions occurred", - "css": "span2", - "source": "areaOfRelocationSiteHa", - "type": "number" + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] }, { - "preLabel": "Type and goal of intervention", - "css": "span3", - "source": "purposeOfIntervention", - "type": "textarea", - "rows": 3 + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] } ] }, + { - "columns": [ - { - "title": "Activities start date", - "source": "activitiesStartDate", - "type": "date", - "width": "10%" - }, + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "title": "Activities end date", - "source": "activitiesEndDate", - "type": "date", - "width": "10%" + "type": "row", + "items": [ + { + "preLabel": "Site/s where target species were relocated to (release site)", + "source": "sitesInterventionsReleased", + "type": "feature" + } + ] }, { - "width": "15%", - "source": "relatedOutcomes", - "type": "selectOne", - "title": "Which outcome statement/s relates to this survey?" + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHaReleased", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] }, { - "width": "20%", - "type": "col", - "title": "Which investment priority does this activity relate to?", + "type": "row", "items": [ { - "source": "investmentPriorities2", - "type": "select2Many" - }, - { - "source": "otherInvestmentPriority", - "type": "text" + "preLabel": "Please attach mapping details", + "source": "extraMappingDetailsReleased", + "type": "document" } ] - }, + } + ] + }, + { + "type": "col", + "css": "span3 col-border-right", + "items": [ { - "width": "25%", - "source": "species", - "title": "Targeted species", - "type": "speciesSelect" + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) where target species were relocated to (release site)", + "source": "areaTreatedHaReleased", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] }, { - "width": "10%", - "source": "participationIndividualsOrGroups", - "title": "Group or individual", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReasonReleased", + "type": "selectOne" + } + ] }, { - "width": "10%", - "source": "numberOfIndividualsInvolved", - "type": "number", - "title": "Number of groups / individuals" + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedCommentsReleased", + "type": "textarea", + "rows": 5 + } + ] } - ], - "userAddedRows": true, - "source": "interventionSpecies", - "type": "table" + ] } ] }, { - "type": "row", - "items": [ + "columns": [ { - "preLabel": "Optionally attach photos", - "source": "photographicEvidence", - "type": "image" - } - ] - }, - { - "type": "row", - "items": [ + "width": "25%", + "source": "species", + "title": "Targeted species", + "type": "speciesSelect" + }, { - "preLabel": "Clarification, if needed", - "type": "textarea", - "rows": 4, - "css": "span8", - "source": "comments", - "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" - } - ] - }, - { - "type": "row", - "items": [ + "title": "Activity start date", + "source": "activitiesStartDate", + "type": "date", + "width": "10%" + }, { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "title": "Activity end date", + "source": "activitiesEndDate", + "type": "date", + "width": "10%" }, { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" - } - ] - }, - { - "type": "row", - "items": [ + "width": "10%", + "source": "groupsOrIndividual", + "title": "Group or individual", + "type": "selectOne" + }, { - "preLabel": "", - "source": "projectAssuranceDetails", + "width": "10%", + "source": "numberOfIndividualsInvolved", + "type": "number", + "title": "Number of groups / individuals" + }, + { + "width": "35%", + "source": "purposeOfIntervention", "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + "title": "Type and goal of intervention" } - ] - }, + ], + "userAddedRows": true, + "disableTableUpload": true, + "addRowText": "Add a new species", + "source": "interventionSpecies", + "type": "table" + } + ] + }, + { + "type": "row", + "items": [ { - "type": "row", - "items": [ - { - "type": "literal", - "source": "Evidence of Service DeliveryThis field is mandatory for all Agriculture projects as part of the invoicing process, as well as any environment projects where you have been notified as undergoing an audit or quarterly assurance check. The field allows you to attach evidence against a specific service." - } - ] + "preLabel": "Optionally attach photos", + "source": "photographicEvidence", + "type": "image" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Clarification, if needed", + "type": "textarea", + "rows": 4, + "css": "span8", + "source": "comments", + "placeholder": "Clarification comments include information for your project manager about the service like:\n • any reported items that are not being invoiced (eg, over-achievement) \n • any extraneous circumstances that affected delivery of the service \n" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ - { - "title": "Attached documents", - "source": "attachments", - "type": "document" - } - ] + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." + } + ] + }, + { + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ + { + "title": "Attached documents", + "source": "attachments", + "type": "document" } ] } @@ -22604,54 +32764,344 @@ "collapsedByDefault": false, "template": { "dataModel": [ - { + "name": "waterQualitySurveys", + "dataType": "list", + "minSize": 1, "columns": [ { + "dataType": "text", + "name": "typeOfSurvey", + "constraints": [ + "Water Quality Survey", + "Hydrology Survey" + ], + "validate": "required" + }, + { + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" + } + } + } + }, + { + "dataType": "text", + "name": "baselineOrIndicatorSurvey", + "description": "", + "constraints": [ + "Baseline", + "Indicator" + ], + "validate": "required" + }, + { + "dataType": "text", + "name": "surveyObjective", + "description": "What the survey aim to capture? How will the information obtained from the survey be used?", + "validate": "required,maxSize[3000]" + }, + { + "dataType": "number", + "name": "numberOfSurveys", + "validate": "required,min[1],max[1]", + "defaultValue": 1, + "readonly": true + }, + { + "dataType": "number", + "name": "numberOfSurveysInvoiced", + "validate": "required,min[0]", + "defaultValue": 1 + }, + { + "dataType": "list", + "name": "waterQualityDataSets", "columns": [ { - "dataType": "stringList", - "name": "waterBodyType", - "validate": "required", + "name": "dataSetId", + "entityType": "au.org.ala.ecodata.DataSetSummary", + "dataType": "text", + "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", + "validate": "required", + "constraints": { + "textProperty": "name", + "valueProperty": "dataSetId", + "excludePath": "waterQualitySurveys.waterQualityDataSets.dataSetId", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.custom.dataSets" + }, + "filter": { + "namespace": "dataSet", + "expression": "dataSet.serviceId == 32 and dataSet.progress == 'finished' and dataSet.alreadyReported == false and baselineOrIndicatorSurvey == baselineIndicatorMapping.lookupValue(dataSet.type) and deepEquals(relatedOutcomes,dataSet.outcomesLabel)" + } + } + }, + "behaviour": [ + { + "type": "pre_populate", + "config": { + "waitForInitialisation": true, + "source": { + "url": "/site/geojson", + "params": [ + { + "expression": "x=find(owner.custom.dataSets, \"dataSetId\", dataSetId); x.siteId", + "name": "id", + "type": "computed", + "required": true + } + ] + }, + "target": { + "type": "singleValue", + "name": "sitesCoveredForWaterQuality" + } + } + } + ] + }, + { + "name": "projectBaselines", + "dataType": "stringList", + "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.baselines" + }, + "constraints": { + "textProperty": "baseline", + "valueProperty": "code", + "type": "pre-populated", + "excludePath": "projectBaselines", + "config": { + "source": { + "context-path": "owner.custom.details.baseline.rows" + } + } + } + }, + { + "name": "investmentPriorities2", + "dataType": "stringList", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.investmentPriorities" + }, + "constraints": { + "type": "pre-populated", + "config": { + "source": { + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + } + ], + "url": "/project/listProjectInvestmentPriorities/" + } + } + } + }, + { + "dataType": "text", + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" + } + ] + }, + { + "dataType": "date", + "name": "activitiesStartDate", + "description": "Specific the dates these events were held on.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.startDate" + } + }, + { + "dataType": "date", + "name": "activitiesEndDate", + "description": "Specific the dates these events were held on.", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.endDate" + } + }, + { + "dataType": "feature", + "name": "sitesCoveredForWaterQuality", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." + }, + { + "computed": { + "expression": "$geom.areaHa(sitesCoveredForWaterQuality)" + }, + "dataType": "number", + "name": "calculatedAreaTreatedHa", + "units": "ha", + "decimalPlaces": 3 + }, + { + "computed": { + "expression": "$geom.lengthKm(sitesCoveredForWaterQuality)" + }, + "dataType": "number", + "name": "calculatedLengthTreatedKm", + "units": "km", + "decimalPlaces": 3, + "behaviour": [ + { + "condition": "lengthTreatedKm > 0", + "type": "conditional_validation", + "value": { + "message": "The managed length must be mapped", + "validate": "required,min[0.0001]" + } + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "calculatedAreaTreatedHa" + }, + "dataType": "number", + "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", + "units": "ha", + "decimalPlaces": 3, + "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "mappingNotAlignedReason", "constraints": [ - "Estuary", - "Freshwater stream", - "Freshwater lake", - "Saline stream", - "Saline lake", + "Mapped area simplifies more complex area/s where work was undertaken during this period", "Other" + ], + "validate": "required", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } ] }, { "dataType": "text", - "name": "otherWaterBodyType", + "name": "mappingNotAlignedComments", + "validate": "required,maxSize[100]", "behaviour": [ { - "condition": "waterBodyType == \"Other\"", - "type": "enable_and_clear" + "type": "visible", + "condition": "\"Other\" == mappingNotAlignedReason" + } + ] + }, + { + "dataType": "document", + "name": "extraMappingDetails", + "validate": "required", + "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "behaviour": [ + { + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" + } + ] + }, + { + "defaultValue": { + "type": "computed", + "expression": "$geom.lengthKm(sitesCoveredForWaterQuality)" + }, + "dataType": "number", + "name": "lengthTreatedKm", + "units": "km", + "decimalPlaces": 3 + }, + { + "dataType": "text", + "description": "Select the technique used to conduct the survey. If the EMSA Application tool was not used, you should select 'Other'.", + "name": "emsaProtocol", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.protocol" + }, + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.protocols" + } } + } + }, + { + "dataType": "stringList", + "description": "Describe the technique (if Other) was selected.", + "name": "otherEmsaProtocol", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methods" + } + }, + { + "dataType": "text", + "name": "surveyMethodology", + "description": "Provide more details on what is being done.", + "validate": "required,maxSize[3000]", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methodDescription" + } + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" ], "validate": "required" }, { "dataType": "stringList", - "description": "How/what survey will capture. The dropdown list consists of the TERN Protocols. If you did not use the TERN Technique/s you should describe the technique used in the column for other techniques.", - "name": "ternSurveyTechnique", + "name": "waterBodyType", "validate": "required", "constraints": [ - "Tern Survey technique 1", - "Tern Survey technique 1", - "Tern Survey technique 1", + "Estuary", + "Freshwater stream", + "Freshwater lake", + "Ground water", + "Mound springs", + "Saline stream", + "Saline lake", + "Stream stretch", "Other" ] }, { "dataType": "text", - "description": "Please describe the Survey technique if other was selected.", - "name": "otherTernSurveyTechnique", + "name": "otherWaterBodyType", "behaviour": [ { - "condition": "ternSurveyTechnique == \"Other\"", + "condition": "waterBodyType == \"Other\"", "type": "enable_and_clear" } ], @@ -22659,352 +33109,205 @@ }, { "dataType": "text", - "name": "surveyMethodology", - "description": "Provide more details on what is being done", - "validate": "required,maxSize[3000]" - }, - { - "dataType": "text", - "name": "surveyObjective", - "description": "How will the information obtained from the survey be used", - "validate": "required,maxSize[3000]" + "name": "waterSurveyObjective", + "validate": "maxSize[300],required", + "description": "How will the information from the surveys be used?" } ], - "dataType": "list", - "name": "waterTypeTable" - }, + "minSize": 1 + } + ] + }, + { + "dataType": "lookupTable", + "name": "baselineIndicatorMapping", + "config": { + "source": { + "literal": { + "Baseline dataset associated with a project outcome": "Baseline", + "Project progress dataset that is tracking change against an established project baseline dataset": "Indicator" + } + } + } + }, + { + "allowRowDelete": "false", + "columns": [ { "dataType": "text", - "name": "baselineOrIndicatorSurvey", - "description": "", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", "constraints": [ - "Baseline", - "Indicator" + "Individuals", + "Groups" ], "validate": "required" }, { - "name": "projectBaseline", - "dataType": "text", - "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", - "validate": "required", - "constraints": { - "textProperty": "baseline", - "valueProperty": "code", - "type": "pre-populated", - "excludePath": "projectBaseline", - "config": { - "source": { - "context-path": "owner.custom.details.baseline.rows" - } - } - } - }, - { - "name": "datasetSupports", - "dataType": "text", - "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "name", - "valueProperty": "dataSetId", - "type": "pre-populated", - "config": { - "source": { - "context-path": "owner.custom.dataSets" - } - } - } - }, - { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } - } - } - }, - { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "feature", - "name": "sitesTreated", - "description": "Manually enter correct figure for this reporting period if different to mapped value" - }, - { - "computed": { - "expression": "$geom.areaHa(sitesTreated)" - }, - "dataType": "number", - "name": "calculatedAreaTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "areaInvoicedTreatedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The managed area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "computed": { - "expression": "$geom.lengthKm(sitesTreated)" - }, "dataType": "number", - "name": "calculatedLengthTreatedKm", - "units": "km", - "decimalPlaces": 3, + "name": "participationIndividualNumber", + "defaultValue": 0, "behaviour": [ { - "condition": "lengthTreatedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The managed length must be mapped", - "validate": "required,min[0.0001]" - } + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } - ] - }, - { - "defaultValue": { - "type": "computed", - "expression": "calculatedAreaTreatedHa" - }, - "dataType": "number", - "name": "areaTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "mappingNotAlignedReason", - "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" ], - "validate": "required", - "behaviour": [ - { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1))", - "type": "visible" - } - ] + "validate": "required,min[0]" }, { "dataType": "text", - "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", + "name": "participationGroupNumber", "behaviour": [ { - "type": "visible", - "condition": "\"Other\" == mappingNotAlignedReason" + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" ] }, { - "dataType": "document", - "name": "extraMappingDetails", - "validate": "required", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, "behaviour": [ { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1)) or roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" } - ] - }, - { - "dataType": "number", - "name": "areaInvoicedTreatedHa", - "units": "ha", - "decimalPlaces": 3, + ], "validate": [ { - "rule": "min[0]" + "rule": "required" }, { - "rule": "max", - "param": { - "type": "computed", - "expression": "areaTreatedHa" - } - } - ] - }, - { - "dataType": "text", - "name": "invoicedNotActualReason", - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required", - "behaviour": [ + "rule": "min[0]" + }, { - "condition": "roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" } ] }, { "dataType": "text", - "name": "invoicedNotActualComments", + "name": "firstNationGroupNumber", "behaviour": [ { - "type": "visible", - "condition": "\"Other\" == invoicedNotActualReason" + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" } ], - "validate": "required,maxSize[300]" - }, - { - "defaultValue": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)" - }, - "dataType": "number", - "name": "lengthTreatedKm", - "units": "km", - "decimalPlaces": 3, + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], "validate": [ { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*0.9" - } + "rule": "required" }, { - "rule": "max", "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*1.1" - } + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" } ] }, { - "dataType": "number", - "name": "numberOfSurveyInvoice", - "validate": "required,min[0]" + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" } ], "dataType": "list", - "name": "waterQualitySurveys", - "minSize": 1 + "name": "participationInformationTableWhs" }, { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" + "dataType": "number", + "name": "totalSurveyBaseline", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(waterQualitySurveys, \"baselineOrIndicatorSurvey == 'Baseline' ? 1 : 0\")" + } }, { "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "name": "totalSurveyBaselineInvoiced", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyBaseline", + "type": "computed" + }, + "rule": "max" } ], - "validate": "required,min[0]" + "defaultValue": "" }, { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + "dataType": "number", + "name": "totalSurveyIndicator", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(waterQualitySurveys, \"baselineOrIndicatorSurvey == 'Indicator' ? 1 : 0\")" + } }, { "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "name": "totalSurveyIndicatorInvoiced", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyIndicator", + "type": "computed" + }, + "rule": "max" } ], - "validate": "required,min[0]" + "defaultValue": "" }, { "dataType": "text", - "name": "firstNationGroupNumber", + "name": "totalInvoicedWaterMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", "behaviour": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", + "condition": "+totalSurveyIndicatorInvoiced < +totalSurveyIndicator or +totalSurveyBaselineInvoiced < +totalSurveyBaseline", "type": "enable" } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "name": "numberWaterQualitySurveyConducted", - "type": "number", - "decimalPlaces": 0, - "computed": { - "expression": "count(waterQualitySurveys, \"baselineOrIndicatorSurvey\")" - } + ] }, { "dataType": "text", @@ -23023,7 +33326,8 @@ { "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "description": "", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -23032,29 +33336,40 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], "modelName": "NHT - Water quality survey", - "title": "Water quality survey", + "title": "Water Quality or Hydrology Survey", "viewModel": [ { "type": "section", "items": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -23069,7 +33384,8 @@ { "type": "col", "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "firstNationIndividualNumber", @@ -23082,294 +33398,455 @@ ] }, { + "width": "20%", "source": "participationDetails", "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", "type": "textarea" } ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", + "source": "participationInformationTableWhs", "type": "table" }, { - "preLabel": "Number of Water Quality surveys conducted:", - "noEdit": true, - "type": "number", - "source": "numberWaterQualitySurveyConducted" + "type": "row", + "items": [ + { + "type": "literal", + "source": "Survey informationBefore completing this section, please ensure you have created a Data Set Summary information for every data set produced by the surveys you intend to reportEach survey reported must relate to a combination of outcomes as described in your MERI planEach Data Set Summary recorded for a survey must be addressing the same outcomes as selected for the surveyIf a survey produced more than one data set, use the New Data Set button to add each Data Set Summary under your surveyA single survey can be made up of multiple dataset" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total Number of baseline water quality surveys completed for this reporting period", + "source": "totalSurveyBaseline", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total Number of baseline water quality surveys invoiced for this reporting period", + "source": "totalSurveyBaselineInvoiced", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total Number of indicator water quality surveys completed for this reporting period", + "source": "totalSurveyIndicator", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total Number of indicator water quality surveys invoiced for this reporting period", + "source": "totalSurveyIndicatorInvoiced", + "type": "number" + } + ] + } + ] + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedWaterMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] }, { - "addRowText": "New survey site", + "addRowText": "Add survey", + "removeRowText": "Delete this survey", "userAddedRows": true, "source": "waterQualitySurveys", "type": "repeat", "items": [ { "type": "row", - "css": "border-bottom", "items": [ { "type": "col", - "css": "span3 col-border-right", "items": [ { - "type": "row", - "items": [ - { - "source": "baselineOrIndicatorSurvey", - "type": "selectOne", - "preLabel": "Baseline survey or indicator (follow-up) survey?" - } - ] + "source": "typeOfSurvey", + "type": "selectOne", + "preLabel": "Type of survey" } ] }, { "type": "col", - "css": "span3 col-border-right", "items": [ { - "type": "row", - "items": [ - { - "source": "projectBaseline", - "type": "selectOne", - "preLabel": "Which project baseline relates to this survey?" - } - ] + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s relates to this survey?" } ] }, { "type": "col", - "css": "span3 col-border-right", "items": [ { - "type": "row", - "items": [ - { - "source": "datasetSupports", - "type": "select2Many", - "preLabel": "What Dataset supports?" - } - ] + "source": "baselineOrIndicatorSurvey", + "type": "selectOne", + "preLabel": "Baseline survey or indicator (follow-up) survey?" } ] - }, + } + ] + }, + { + "type": "row", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "source": "surveyObjective", + "preLabel": "Survey objective", + "type": "text" + } + ] + }, + { + "type": "repeat", + "source": "waterQualityDataSets", + "userAddedRows": true, + "addRowText": "New data set", + "removeRowText": "Delete this data set", + "items": [ + { + "type": "row", + "css": "border-bottom", "items": [ { - "type": "row", + "type": "col", "items": [ { - "source": "relatedOutcomes", + "source": "dataSetId", "type": "selectOne", - "preLabel": "Which outcome statement/s relates to this survey?" + "preLabel": "Please select the data set produced by this survey. Note it must have already been entered on the Data Set Summary tab." } ] } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Activities start date", - "source": "activitiesStartDate", - "type": "date" + "type": "row", + "items": [ + { + "source": "projectBaselines", + "type": "selectMany", + "preLabel": "Which project baseline/s relate to this survey?", + "readonly": "readonly" + } + ] } ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ + }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Activities end date", - "source": "activitiesEndDate", - "type": "date" + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] } ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ + }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Sites where water quality surveys were conducted", - "source": "sitesTreated", - "type": "feature" + "type": "row", + "items": [ + { + "preLabel": "Activity start date", + "source": "activitiesStartDate", + "type": "date" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "calculatedAreaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" + "type": "row", + "items": [ + { + "preLabel": "Activity end date", + "source": "activitiesEndDate", + "type": "date" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "calculatedLengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" + "type": "row", + "items": [ + { + "preLabel": "Sites covered by water quality survey", + "source": "sitesCoveredForWaterQuality", + "type": "feature" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "calculatedLengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) / length (km) covered by water quality survey", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "lengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] } ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ + }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Actual area (ha) covered by water quality surveys", - "source": "areaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "preLabel": "Survey technique", + "source": "emsaProtocol", + "type": "selectOne", + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Survey technique (if Other)", + "source": "otherEmsaProtocol", + "type": "select2Many" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "lengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "source": "surveyMethodology", + "preLabel": "Survey methodology", + "type": "text" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 + "type": "row", + "items": [ + { + "preLabel": "Type of Water Body", + "source": "waterBodyType", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Type of water body (if Other)", + "source": "otherWaterBodyType", + "type": "text" + } + ] } ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ + }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "How many surveys will you be invoicing for?", - "source": "numberOfSurveyInvoice", - "type": "number" + "type": "row", + "items": [ + { + "source": "waterSurveyObjective", + "preLabel": "Survey objective", + "type": "text" + } + ] } ] } ] } ] - }, - { - "columns": [ - { - "width": "15%", - "source": "waterBodyType", - "title": "Type of Water Body", - "type": "selectOne" - }, - { - "width": "15%", - "source": "otherWaterBodyType", - "title": "Type of water body (if Other)", - "type": "text" - }, - { - "width": "15%", - "title": "Survey technique", - "source": "ternSurveyTechnique", - "type": "selectOne" - }, - { - "width": "15%", - "title": "Survey technique (if Other)", - "source": "otherTernSurveyTechnique", - "type": "text" - }, - { - "width": "20%", - "source": "surveyMethodology", - "title": "Survey methodology", - "type": "text" - }, - { - "width": "20%", - "source": "surveyObjective", - "title": "Survey objective", - "type": "text" - } - ], - "userAddedRows": true, - "disableTableUpload": true, - "source": "waterTypeTable", - "type": "table" } ] }, @@ -23400,327 +33877,197 @@ "type": "row", "items": [ { - "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." - }, - { - "preLabel": "Data have been uploaded", - "source": "dataUploaded", - "type": "boolean" - } - ] - }, - { - "type": "row", - "items": [ - { - "preLabel": "", - "source": "projectAssuranceDetails", - "type": "textarea", - "rows": 4, - "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." - } - ] - }, - { - "type": "table", - "source": "assuranceDocuments", - "userAddedRows": true, - "disableTableUpload": true, - "columns": [ - { - "title": "Attached documents", - "source": "attachments", - "type": "document" - } - ] - } - ] - } - ] - }, - "modelName": null, - "templateName": "nhtWaterQualitySurvey", - "optional": true, - "optionalQuestionText": null, - "title": "Water quality survey", - "collapsibleHeading": null, - "name": "NHT - Water quality survey", - "description": null - }, - { - "collapsedByDefault": false, - "template": { - "dataModel": [ - { - "columns": [ - { - "dataType": "text", - "name": "baselineOrIndicatorSurvey", - "description": "", - "constraints": [ - "Baseline", - "Indicator" - ], - "validate": "required" - }, - { - "name": "projectBaseline", - "dataType": "text", - "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", - "validate": "required", - "constraints": { - "textProperty": "baseline", - "valueProperty": "code", - "type": "pre-populated", - "excludePath": "projectBaseline", - "config": { - "source": { - "context-path": "owner.custom.details.baseline.rows" - } - } - } - }, - { - "name": "datasetSupports", - "dataType": "text", - "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "name", - "valueProperty": "dataSetId", - "type": "pre-populated", - "config": { - "source": { - "context-path": "owner.custom.dataSets" - } - } - } - }, - { - "name": "relatedOutcomes", - "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } - } - } - }, - { - "dataType": "date", - "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "date", - "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", - "validate": "required" - }, - { - "dataType": "feature", - "name": "sitesTreated" - }, - { - "computed": { - "expression": "$geom.areaHa(sitesTreated)" - }, - "dataType": "number", - "name": "calculatedAreaTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "areaInvoicedTreatedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The managed area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "computed": { - "expression": "$geom.lengthKm(sitesTreated)" - }, - "dataType": "number", - "name": "calculatedLengthTreatedKm", - "units": "km", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "lengthTreatedKm > 0", - "type": "conditional_validation", - "value": { - "message": "The managed length must be mapped", - "validate": "required,min[0.0001]" - } - } - ] - }, - { - "defaultValue": { - "type": "computed", - "expression": "calculatedAreaTreatedHa" - }, - "dataType": "number", - "name": "areaTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": "required,min[0]" - }, - { - "dataType": "text", - "name": "mappingNotAlignedReason", - "constraints": [ - "Mapped area simplifies more complex area/s where work was undertaken during this period", - "Other" - ], - "validate": "required", - "behaviour": [ + "type": "literal", + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" + }, { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1))", - "type": "visible" + "preLabel": "Data have been uploaded", + "source": "dataUploaded", + "type": "boolean" } ] }, { - "dataType": "text", - "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", - "behaviour": [ + "type": "row", + "items": [ { - "type": "visible", - "condition": "\"Other\" == mappingNotAlignedReason" + "preLabel": "", + "source": "projectAssuranceDetails", + "type": "textarea", + "rows": 4, + "placeholder": "List the documentary evidence you have available for this project service. Include specifically, the document titles and location (e.g. internal IT network pathway, URLs) to assist with locating this material for future audits/assurance purposes." } ] }, { - "dataType": "document", - "name": "extraMappingDetails", - "validate": "required", - "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", - "behaviour": [ + "type": "table", + "source": "assuranceDocuments", + "userAddedRows": true, + "disableTableUpload": true, + "columns": [ { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1)) or roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" + "title": "Attached documents", + "source": "attachments", + "type": "document" } ] - }, + } + ] + } + ] + }, + "modelName": null, + "templateName": "nhtWaterQualitySurvey", + "optional": true, + "optionalQuestionText": null, + "title": "Water Quality or Hydrology Survey", + "collapsibleHeading": null, + "name": "NHT - Water quality survey", + "description": null + }, + { + "collapsedByDefault": false, + "template": { + "dataModel": [ + { + "name": "weedSurveys", + "dataType": "list", + "minSize": 1, + "columns": [ { - "dataType": "number", - "name": "areaInvoicedTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": [ - { - "rule": "min[0]" - }, - { - "rule": "max", - "param": { - "type": "computed", - "expression": "areaTreatedHa" + "name": "relatedOutcomes", + "dataType": "text", + "description": "Select the outcome/s as defined in your MERI plan that this service was delivered to achieve.", + "validate": "required", + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "outcomes" } } - ] + } }, { "dataType": "text", - "name": "invoicedNotActualReason", + "name": "baselineOrIndicatorSurvey", + "description": "", "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" + "Baseline", + "Indicator" ], - "validate": "required", - "behaviour": [ - { - "condition": "roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" - } - ] + "validate": "required" }, { "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ - { - "type": "visible", - "condition": "\"Other\" == invoicedNotActualReason" - } - ], - "validate": "required,maxSize[300]" + "name": "surveyObjective", + "description": "What the survey aim to capture? How will the information obtained from the survey be used?", + "validate": "required,maxSize[3000]" }, { - "defaultValue": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)" - }, "dataType": "number", - "name": "lengthTreatedKm", - "units": "km", - "decimalPlaces": 3, - "validate": [ - { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*0.9" - } - }, - { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*1.1" - } - } - ] + "name": "numberOfSurveys", + "validate": "required,min[1],max[1]", + "defaultValue": 1, + "readonly": true + }, + { + "dataType": "number", + "name": "numberOfSurveysInvoiced", + "validate": "required,min[0]", + "defaultValue": 1 }, - - - { + "dataType": "list", + "name": "weedDataSets", "columns": [ { + "name": "dataSetId", + "entityType": "au.org.ala.ecodata.DataSetSummary", "dataType": "text", - "name": "baselineOrIndicatorSurvey", - "description": "", - "constraints": [ - "Baseline", - "Indicator" + "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", + "validate": "required", + "constraints": { + "textProperty": "name", + "valueProperty": "dataSetId", + "excludePath": "weedSurveys.weedDataSets.dataSetId", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.custom.dataSets" + }, + "filter": { + "namespace": "dataSet", + "expression": "dataSet.serviceId == 33 and dataSet.progress == 'finished' and dataSet.alreadyReported == false and baselineOrIndicatorSurvey == baselineIndicatorMapping.lookupValue(dataSet.type) and deepEquals(relatedOutcomes,dataSet.outcomesLabel)" + } + } + }, + "behaviour": [ + { + "type": "pre_populate", + "config": { + "waitForInitialisation": true, + "source": { + "url": "/site/geojson", + "params": [ + { + "expression": "x=find(owner.custom.dataSets, \"dataSetId\", dataSetId); x.siteId", + "name": "id", + "type": "computed", + "required": true + } + ] + }, + "target": { + "type": "singleValue", + "name": "sitesCoveredForWeedDistribution" + } + } + } + ] + }, + { + "columns": [ + { + "dataType": "species", + "name": "species", + "validate": "required" + }, + { + "dataType": "text", + "name": "threatenedEcologicalCommunity", + "validate": "maxSize[300]" + }, + { + "dataType": "number", + "name": "estimatedCoverPercent", + "validate": "required,min[0],max[100]" + }, + { + "dataType": "text", + "name": "weedSurveyObjective", + "validate": "maxSize[300],required", + "description": "How will the information from the surveys be used?" + } ], - "validate": "required" + "dataType": "list", + "name": "weedSurveySpeciesTable" }, { - "name": "projectBaseline", - "dataType": "text", + "name": "projectBaselines", + "dataType": "stringList", "description": "Select the relevant Project Baseline as listed in the Monitoring Methodology section of the MERI Plan.", "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.baselines" + }, "constraints": { "textProperty": "baseline", "valueProperty": "code", "type": "pre-populated", - "excludePath": "projectBaseline", + "excludePath": "projectBaselines", "config": { "source": { "context-path": "owner.custom.details.baseline.rows" @@ -23729,85 +34076,72 @@ } }, { - "name": "datasetSupports", - "dataType": "text", - "description": "This section will require the Data Set Name so the Metadata fields in the Data Set Summary tab should be filled out before the Outcome Report is due. More than one dataset if relevant for this Project Baseline could be selected.", + "name": "investmentPriorities2", + "dataType": "stringList", "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.investmentPriorities" + }, "constraints": { - "textProperty": "name", - "valueProperty": "dataSetId", "type": "pre-populated", "config": { "source": { - "context-path": "owner.custom.dataSets" + "params": [ + { + "expression": "owner.projectId", + "name": "id", + "type": "computed" + } + ], + "url": "/project/listProjectInvestmentPriorities/" } } } }, { - "name": "relatedOutcomes", "dataType": "text", - "description": "More than one outcome statement/s if relevant for this Project Baseline could be selected.", - "validate": "required", - "constraints": { - "textProperty": "label", - "valueProperty": "label", - "type": "pre-populated", - "config": { - "source": { - "url": "/project/outcomesByScores", - "params": [{ - "expression": "owner.projectId", - "name": "id", - "type": "computed" - }, { - "expression": "scores", - "name": "scoreIds", - "type": "computed" - } - ] - } + "name": "otherInvestmentPriority", + "behaviour": [ + { + "type": "enable", + "condition": "\"Other\" in investmentPriorities2" } - } + ] }, { "dataType": "date", "name": "activitiesStartDate", - "description": "Specific the dates these events were held on", - "validate": "required" + "description": "Specific the dates these events were held on.", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.startDate" + } }, { "dataType": "date", "name": "activitiesEndDate", - "description": "Specific the dates these events were held on", - "validate": "required" + "description": "Specific the dates these events were held on.", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.endDate" + } }, { "dataType": "feature", - "name": "sitesTreated" + "name": "sitesCoveredForWeedDistribution", + "description": "Mapping field to be done and Area (ha)/length (km) field be auto-calculated from mapping." }, { "computed": { - "expression": "$geom.areaHa(sitesTreated)" + "expression": "$geom.areaHa(sitesCoveredForWeedDistribution)" }, "dataType": "number", "name": "calculatedAreaTreatedHa", "units": "ha", - "decimalPlaces": 3, - "behaviour": [ - { - "condition": "areaInvoicedTreatedHa > 0", - "type": "conditional_validation", - "value": { - "message": "The managed area must be mapped", - "validate": "required,min[0.0001]" - } - } - ] + "decimalPlaces": 3 }, { "computed": { - "expression": "$geom.lengthKm(sitesTreated)" + "expression": "$geom.lengthKm(sitesCoveredForWeedDistribution)" }, "dataType": "number", "name": "calculatedLengthTreatedKm", @@ -23831,6 +34165,7 @@ }, "dataType": "number", "name": "areaTreatedHa", + "description": "Manually enter correct figure for this reporting period if different to mapped value.", "units": "ha", "decimalPlaces": 3, "validate": "required,min[0]" @@ -23845,15 +34180,15 @@ "validate": "required", "behaviour": [ { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1))", - "type": "visible" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" } ] }, { "dataType": "text", "name": "mappingNotAlignedComments", - "validate": "required,maxSize[300]", + "validate": "required,maxSize[100]", "behaviour": [ { "type": "visible", @@ -23868,174 +34203,261 @@ "description": "Please fill in the Mapped/Actual/Invoice fields before attaching a document here. If those fields match this field will be void. If any of these fields differ please attach your organisation's detailed map for the area, covered by this project service - during reporting period (include the scale measure for each map).", "behaviour": [ { - "condition": "not (within(calculatedAreaTreatedHa, areaTreatedHa, 0.1)) or roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" - } - ] - }, - { - "dataType": "number", - "name": "areaInvoicedTreatedHa", - "units": "ha", - "decimalPlaces": 3, - "validate": [ - { - "rule": "min[0]" - }, - { - "rule": "max", - "param": { - "type": "computed", - "expression": "areaTreatedHa" - } - } - ] - }, - { - "dataType": "text", - "name": "invoicedNotActualReason", - "constraints": [ - "Work was undertaken over a greater area than will be invoiced for", - "Other" - ], - "validate": "required", - "behaviour": [ - { - "condition": "roundTo(areaTreatedHa, 2) != roundTo(areaInvoicedTreatedHa, 2)", - "type": "visible" - } - ] - }, - { - "dataType": "text", - "name": "invoicedNotActualComments", - "behaviour": [ - { - "type": "visible", - "condition": "\"Other\" == invoicedNotActualReason" + "condition": "not (within(areaTreatedHa, calculatedAreaTreatedHa, 0.1) and within(lengthTreatedKm, calculatedLengthTreatedKm, 0.1))", + "type": "if" } - ], - "validate": "required,maxSize[300]" + ] }, { "defaultValue": { "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)" + "expression": "$geom.lengthKm(sitesCoveredForWeedDistribution)" }, "dataType": "number", "name": "lengthTreatedKm", "units": "km", - "decimalPlaces": 3, - "validate": [ - { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*0.9" - } - }, - { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTreated)*1.1" + "decimalPlaces": 3 + }, + { + "dataType": "text", + "description": "Select the technique used to conduct the survey. If the EMSA Application tool was not used, you should select 'Other'.", + "name": "emsaProtocol", + "validate": "required", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.protocol" + }, + "constraints": { + "textProperty": "label", + "valueProperty": "value", + "type": "pre-populated", + "config": { + "source": { + "context-path": "owner.protocols" } } - ] + } + }, + { + "dataType": "stringList", + "description": "Describe the technique (if Other) was selected.", + "name": "otherEmsaProtocol", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methods" + } + }, + { + "dataType": "text", + "name": "surveyMethodology", + "description": "Provide more details on what is being done.", + "validate": "required,maxSize[3000]", + "computed": { + "expression": "x=find($context.owner.custom.dataSets, \"dataSetId\", dataSetId); x.methodDescription" + } + }, + { + "dataType": "text", + "name": "invoicingThisActivity", + "constraints": [ + "Yes", + "No" + ], + "validate": "required" } ], - "dataType": "list", - "name": "surveyBaselineTable" + "minSize": 1 + } + ] + }, + { + "dataType": "lookupTable", + "name": "baselineIndicatorMapping", + "config": { + "source": { + "literal": { + "Baseline dataset associated with a project outcome": "Baseline", + "Project progress dataset that is tracking change against an established project baseline dataset": "Indicator" + } + } + } + }, + { + "allowRowDelete": "false", + "columns": [ + { + "dataType": "text", + "name": "participationIndividualsOrGroups", + "description": "Once Individuals or groups is selected, the related number field in the next two columns will become editable to report.", + "constraints": [ + "Individuals", + "Groups" + ], + "validate": "required" }, { "dataType": "number", - "name": "numberOfSurveyInvoice", + "name": "participationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], "validate": "required,min[0]" + }, + { + "dataType": "text", + "name": "participationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ] + }, + { + "dataType": "number", + "name": "firstNationIndividualNumber", + "defaultValue": 0, + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Individuals\"", + "type": "enable" + } + ], + "validate": [ + { + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "participationIndividualNumber", + "type": "computed" + }, + "rule": "max" + } + ] + }, + { + "dataType": "text", + "name": "firstNationGroupNumber", + "behaviour": [ + { + "condition": "participationIndividualsOrGroups == \"Groups\"", + "type": "enable" + } + ], + "constraints": [ + "0", + "1-10", + "11-20", + "21-30", + "31-40", + "41-50" + ], + "validate": [ + { + "rule": "required" + }, + { + "param": { + "expression": "participationGroupNumber", + "type": "computed" + }, + "rule": "max", + "message": "The number of first nation participants cannot be greater than the total number of participants" + } + ] + }, + { + "dataType": "text", + "name": "participationDetails", + "validate": "required, maxSize[3000]" } ], "dataType": "list", - "name": "weedDistSurveys", - "minSize": 1 + "name": "participationInformationTableWds" }, { - "dataType": "text", - "name": "participationIndividualsOrGroups", - "constraints": [ - "Individuals", - "Groups" - ], - "validate": "required" + "dataType": "number", + "name": "totalSurveyBaseline", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(weedSurveys, \"baselineOrIndicatorSurvey == 'Baseline' ? 1 : 0\")" + } }, { "dataType": "number", - "name": "participationIndividualNumber", - "behaviour": [ + "name": "totalSurveyBaselineInvoiced", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyBaseline", + "type": "computed" + }, + "rule": "max" } ], - "validate": "required,min[0]" + "defaultValue": "" }, { - "dataType": "text", - "name": "participationGroupNumber", - "behaviour": [ - { - "condition": "participationIndividualsOrGroups == \"Groups\"", - "type": "enable" - } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" + "dataType": "number", + "name": "totalSurveyIndicator", + "validate": "min[0]", + "decimalPlaces": 0, + "computed": { + "expression": "sum(weedSurveys, \"baselineOrIndicatorSurvey == 'Indicator' ? 1 : 0\")" + } }, { "dataType": "number", - "name": "firstNationIndividualNumber", - "behaviour": [ + "name": "totalSurveyIndicatorInvoiced", + "validate": [ { - "condition": "participationIndividualsOrGroups == \"Individuals\"", - "type": "enable" + "rule": "required" + }, + { + "rule": "min[0]" + }, + { + "param": { + "expression": "totalSurveyIndicator", + "type": "computed" + }, + "rule": "max" } ], - "validate": "required,min[0]" + "defaultValue": "" }, { "dataType": "text", - "name": "firstNationGroupNumber", + "name": "totalInvoicedWeedMismatched", + "description": "Please provide the reason/s why you are not invoicing for the same number that have been completed and delivered, e.g. the personnel and equipment were available to deliver more than was contracted.", + "validate": "maxSize[400],required", "behaviour": [ { - "condition": "participationIndividualsOrGroups == \"Groups\"", + "condition": "+totalSurveyIndicatorInvoiced < +totalSurveyIndicator or +totalSurveyBaselineInvoiced < +totalSurveyBaseline", "type": "enable" } - ], - "constraints": [ - "1-10", - "11-20", - "21-30", - "31-40", - "41-50" - ], - "validate": "required" - }, - { - "dataType": "text", - "name": "participationDetails", - "validate": "maxSize[3000]" - }, - { - "name": "numberWeedDistributionSurveysConducted", - "type": "number", - "decimalPlaces": 0, - "computed": { - "expression": "count(weedDistSurveys, \"baselineOrIndicatorSurvey\")" - } + ] }, { "dataType": "text", @@ -24054,7 +34476,8 @@ { "dataType": "text", "name": "projectAssuranceDetails", - "description": "" + "description": "", + "validate": "required,maxSize[5000]" }, { "dataType": "list", @@ -24063,29 +34486,40 @@ { "dataType": "document", "name": "attachments", - "description": "Please attach any Evidence of Service Delivery here" + "description": "Please attach any Evidence of Service Delivery here." } ] } ], "modelName": "NHT - Weed distribution survey", - "title": "Weed distribution survey", + "title": "Weed Distribution Survey", "viewModel": [ { "type": "section", "items": [ { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Participation information" + } + ] + }, + { + "disableTableUpload": true, "columns": [ { "width": "10%", "source": "participationIndividualsOrGroups", - "title": "Individuals or groups?", + "title": "Are individuals or groups delivering this service?", "type": "selectOne" }, { "width": "20%", "type": "col", - "title": "Total Number of people delivering this service", + "title": "Total number of people delivering this service (including First Nations people)*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "participationIndividualNumber", @@ -24100,7 +34534,8 @@ { "type": "col", "width": "20%", - "title": "Total Number of First Nations people delivering this service ", + "title": "Total number of First Nations people delivering this service*", + "helpText": "Please record either the total number of individuals or the number of individuals in the group that delivered this service. If you have a mix of Individuals and groups, you should report them separately by adding a row.", "items": [ { "source": "firstNationIndividualNumber", @@ -24113,373 +34548,435 @@ ] }, { + "width": "20%", "source": "participationDetails", "rows": 4, - "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "title": "If no First Nations people participated in the delivery of this service, what are the reasons? If there was participation, please provide details.", + "helpText": "If there were no First Nations people participating in the delivery of this service, please explain the reasons. If there were First Nations people involved, please outline how they were involved.", "type": "textarea" } - ], - "userAddedRows": false, - "disableTableUpload": false, - "source": "", - "type": "table" + ], + "source": "participationInformationTableWds", + "type": "table" + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Survey informationBefore completing this section, please ensure you have created a Data Set Summary information for every data set produced by the surveys you intend to reportEach survey reported must relate to a combination of outcomes as described in your MERI planEach Data Set Summary recorded for a survey must be addressing the same outcomes as selected for the surveyIf a survey produced more than one data set, use the New Data Set button to add each Data Set Summary under your surveyA single survey can be made up of multiple dataset" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "literal", + "source": "Totals Summary" + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(i) Total Number of baseline weed distribution surveys completed for this reporting period", + "source": "totalSurveyBaseline", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(ii) Total Number of baseline weed distribution surveys invoiced for this reporting period", + "source": "totalSurveyBaselineInvoiced", + "type": "number" + } + ] + } + ] + }, + { + "type": "col", + "css": "span4 col-border-right", + "items": [ + { + "type": "row", + "items": [ + { + "preLabel": "(iii) Total Number of indicator weed distribution surveys completed for this reporting period", + "source": "totalSurveyIndicator", + "type": "number" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "(iv) Total Number of indicator weed distribution surveys invoiced for this reporting period", + "source": "totalSurveyIndicatorInvoiced", + "type": "number" + } + ] + } + ] + } + ] }, { - "preLabel": "Number of Weed Distribution surveys conducted:", - "noEdit": true, - "type": "number", - "source": "numberWeedDistributionSurveysConducted" + "type": "row", + "items": [ + { + "preLabel": "If the total invoiced is different to the total completed, please provide the reason", + "source": "totalInvoicedWeedMismatched", + "type": "textarea", + "rows": 4, + "placeholder": "" + } + ] }, { - "addRowText": "New survey site", + "addRowText": "Add survey", + "removeRowText": "Delete this survey", "userAddedRows": true, - "source": "weedDistSurveys", + "source": "weedSurveys", "type": "repeat", "items": [ { "type": "row", - "css": "border-bottom", "items": [ { "type": "col", - "css": "span3 col-border-right", "items": [ { - "type": "row", - "items": [ - { - "source": "baselineOrIndicatorSurvey", - "type": "selectOne", - "preLabel": "Baseline survey or indicator (follow-up) survey?" - } - ] + "source": "relatedOutcomes", + "type": "selectOne", + "preLabel": "Which outcome statement/s relates to this survey?" } ] }, { "type": "col", - "css": "span3 col-border-right", "items": [ { - "type": "row", - "items": [ - { - "source": "projectBaseline", - "type": "selectOne", - "preLabel": "Which project baseline relates to this survey?" - } - ] + "source": "baselineOrIndicatorSurvey", + "type": "selectOne", + "preLabel": "Baseline survey or indicator (follow-up) survey?" } ] - }, + } + ] + }, + { + "type": "row", + "items": [ { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "source": "datasetSupports", - "type": "select2Many", - "preLabel": "What dataset supports this?" - } - ] - } - ] - }, + "source": "surveyObjective", + "preLabel": "Survey objective", + "type": "text" + } + ] + }, + { + "type": "repeat", + "source": "weedDataSets", + "userAddedRows": true, + "addRowText": "New data set", + "removeRowText": "Delete this data set", + "items": [ { - "type": "col", - "css": "span3 col-border-right", + "type": "row", + "css": "border-bottom", "items": [ { - "type": "row", + "type": "col", "items": [ { - "source": "relatedOutcomes", + "source": "dataSetId", "type": "selectOne", - "preLabel": "Which outcome statement/s relates to this survey?" - } - ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ - { - "preLabel": "Activities start date", - "source": "activitiesStartDate", - "type": "date" + "preLabel": "Please select the data set produced by this survey. Note it must have already been entered on the Data Set Summary tab." } ] } ] }, { - "type": "col", - "css": "span3 col-border-right", + "type": "row", "items": [ { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Activities end date", - "source": "activitiesEndDate", - "type": "date" + "type": "row", + "items": [ + { + "source": "projectBaselines", + "type": "selectMany", + "preLabel": "Which project baseline/s relate to this survey?", + "readonly": "readonly" + } + ] } ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ + }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Sites surveyed for weed distribution", - "source": "sitesTreated", - "type": "feature" + "type": "row", + "items": [ + { + "source": "investmentPriorities2", + "preLabel": "Which investment priority does this activity relate to?", + "type": "select2Many" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "calculatedAreaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" + "type": "row", + "items": [ + { + "preLabel": "Activity start date", + "source": "activitiesStartDate", + "type": "date" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "source": "calculatedLengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" + "type": "row", + "items": [ + { + "preLabel": "Activity end date", + "source": "activitiesEndDate", + "type": "date" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" - } - ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ - { - "type": "row", - "items": [ + "type": "row", + "items": [ + { + "preLabel": "Sites covered by weed distribution survey", + "source": "sitesCoveredForWeedDistribution", + "type": "feature" + } + ] + }, { - "preLabel": "Actual area (ha) / length (km) surveyed for weed distribution", - "source": "areaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } - } - ] - }, - { - "type": "row", - "items": [ + "type": "row", + "items": [ + { + "source": "calculatedAreaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, { - "source": "lengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "type": "row", + "items": [ + { + "source": "calculatedLengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + }, + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Please attach mapping details", + "source": "extraMappingDetails", + "type": "document" + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" + "type": "row", + "items": [ + { + "preLabel": "Actual area (ha) / length (km) covered by weed distribution survey", + "source": "areaTreatedHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "lengthTreatedKm", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Reason for actual being different to mapped amount", + "source": "mappingNotAlignedReason", + "type": "selectOne" + } + ] + }, + { + "type": "row", + "items": [ + { + "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", + "source": "mappingNotAlignedComments", + "type": "textarea", + "rows": 5 + } + ] } ] }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 + "type": "row", + "items": [ + { + "preLabel": "Survey technique", + "source": "emsaProtocol", + "type": "selectOne", + "readonly": "readonly" + } + ] + }, + { + "type": "row", + "items": [ + { + "preLabel": "Survey technique (if Other)", + "source": "otherEmsaProtocol", + "type": "select2Many" + } + ] } ] - } - ] - }, - { - "type": "col", - "css": "span3 col-border-right", - "items": [ + }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "How many surveys will you be invoicing for?", - "source": "numberOfSurveyInvoice", - "type": "number" + "type": "row", + "items": [ + { + "source": "surveyMethodology", + "preLabel": "Survey methodology", + "type": "text" + } + ] } ] - } - ] - } - ] - }, - { - "columns": [ - { - "source": "baselineOrIndicatorSurvey", - "type": "selectOne", - "width": "10%", - "title": "Baseline survey or indicator (follow-up) survey?" - }, - { - "source": "projectBaseline", - "type": "selectOne", - "width": "10%", - "title": "Which project baseline relates to this survey?" - }, - { - "source": "datasetSupports", - "type": "select2Many", - "width": "15%", - "title": "What dataset supports?" - }, - { - "source": "relatedOutcomes", - "type": "selectOne", - "width": "15%", - "title": "Which outcome statement/s relates to this survey?" - }, - { - "title": "Activities start date", - "source": "activitiesStartDate", - "type": "date", - "width": "10%" - }, - { - "title": "Activities end date", - "source": "activitiesEndDate", - "type": "date", - "width": "10%" - }, - { - "width": "10%", - "title": "Sites surveyed for Weed Distribution", - "type": "col", - "items": [ - { - "source": "sitesTreated", - "type": "feature" - }, - { - "source": "calculatedAreaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" - }, - { - "source": "calculatedLengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - }, - "readonly": "readonly" }, { - "type": "row", + "type": "col", + "css": "span3 col-border-right", "items": [ { - "preLabel": "Please attach mapping details", - "source": "extraMappingDetails", - "type": "document" + "type": "row", + "items": [ + { + "source": "invoicingThisActivity", + "preLabel": "Are you invoicing for this activity in this reporting period?", + "type": "selectOne" + } + ] } ] } ] }, { - "width": "20%", - "type": "col", - "title": "Actual area (ha) surveyed for Weed Distribution", - "helpText": "Enter the amount you will invoice for during this reporting period.", - "items": [ + "columns": [ { - "source": "areaTreatedHa", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "width": "40%", + "source": "species", + "title": "Target species recorded", + "type": "speciesSelect" }, { - "source": "lengthTreatedKm", - "type": "number", - "displayOptions": { - "displayUnits": true - } + "width": "10%", + "source": "estimatedCoverPercent", + "title": "Estimated weed cover (%)", + "type": "number" }, { - "type": "row", - "items": [ - { - "preLabel": "Reason for actual being different to mapped amount", - "source": "mappingNotAlignedReason", - "type": "selectOne" - } - ] + "width": "25%", + "source": "threatenedEcologicalCommunity", + "title": "Threatened ecological communities (if applicable)", + "type": "text" }, { - "type": "row", - "items": [ - { - "placeholder": "Please enter the reason/s the mapping didn't align with the invoiced amount", - "source": "mappingNotAlignedComments", - "type": "textarea", - "rows": 5 - } - ] + "width": "25%", + "source": "weedSurveyObjective", + "title": "Survey Objective", + "type": "text" } - ] + ], + "userAddedRows": true, + "disableTableUpload": true, + "source": "weedSurveySpeciesTable", + "type": "table" } - ], - "userAddedRows": true, - "source": "surveyBaselineTable", - "type": "table" + ] } ] }, @@ -24511,7 +35008,7 @@ "items": [ { "type": "literal", - "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements." + "source": "Available EvidenceThis field is mandatory for all projects as part of the invoicing process. Please list evidence you have retained for this service and provide information to where the evidence is stored (links/file location data). Refer to the Project Service Evidence Guide and the Project Service Summaries for information on the evidence requirements.*" }, { "preLabel": "Data have been uploaded", diff --git a/forms/other/regionalCapacityServicesReport.json b/forms/other/regionalCapacityServicesReport.json index f75056e7e..1220ffc38 100644 --- a/forms/other/regionalCapacityServicesReport.json +++ b/forms/other/regionalCapacityServicesReport.json @@ -10,7 +10,6 @@ "templateName": "regionalCapacityServicesReport", "template": { "dataModel": [ - { "name": "governanceAndFinancialFrameworksOnTrack", "dataType": "text", @@ -33,7 +32,7 @@ }, { "name": "whsUndergoneReview", - "description":"Service Providers shall review the organisation's WHS management system (Manual/plan or policy) at planned intervals (not exceeding 3 years) to ensure its continuing suitability, adequacy, and effectiveness. Trigger to warrant a review may include:Change in Executive StaffChanges in LegislationAs a result of an incident or eventAs a result of an internal or external audit or assurance activity.", + "description": "Service Providers shall review the organisation's WHS management system (Manual/plan or policy) at planned intervals (not exceeding 3 years) to ensure its continuing suitability, adequacy, and effectiveness. Trigger to warrant a review may include:Change in Executive StaffChanges in LegislationAs a result of an incident or eventAs a result of an internal or external audit or assurance activity.", "dataType": "text", "validate": "required", "constraints": [ @@ -79,7 +78,7 @@ }, { "name": "whsIncidentsOccured", - "description":"A WHS Notifiable incident is defined within Work Health and Safety Act (Cth) 2011 Part 3 – Incident Notification.Refer to Deed of Standing offer clause 42 Work Health and Safety for further information on these requirements.", + "description": "A WHS Notifiable incident is defined within Work Health and Safety Act (Cth) 2011 Part 3 – Incident Notification.Refer to Deed of Standing offer clause 42 Work Health and Safety for further information on these requirements.", "dataType": "text", "validate": "required", "constraints": [ @@ -189,15 +188,15 @@ { "columns": [ { - "name": "workshopEventType", - "dataType": "text", + "name": "workshopEventType", + "dataType": "text", "validate": "required,maxSize[500]", - "behaviour": [ - { - "type": "enable_and_clear", - "condition": "communityConductWorkshops == \"Yes\"" - } - ] + "behaviour": [ + { + "type": "enable_and_clear", + "condition": "communityConductWorkshops == \"Yes\"" + } + ] }, { "name": "workshopTitle", @@ -266,7 +265,7 @@ "behaviour": [ { "type": "enable_and_clear", - "condition": "communityConductWorkshops == \"Yes\"" + "condition": "supportCommunityWorkshops == \"Yes\"" } ] }, @@ -277,7 +276,7 @@ "behaviour": [ { "type": "enable_and_clear", - "condition": "communityConductWorkshops == \"Yes\"" + "condition": "supportCommunityWorkshops == \"Yes\"" } ] }, @@ -288,7 +287,7 @@ "behaviour": [ { "type": "enable_and_clear", - "condition": "communityConductWorkshops == \"Yes\"" + "condition": "supportCommunityWorkshops == \"Yes\"" } ] } @@ -317,7 +316,6 @@ } ] }, - { "name": "communicationMaterialPublished", "dataType": "text", @@ -349,7 +347,6 @@ "modelName": "Regional capacity services - reporting", "title": "Regional capacity services - reporting", "viewModel": [ - { "type": "row", "items": [ @@ -511,7 +508,7 @@ "type": "row", "items": [ { - "preLabel": "Q5b. Please confirm that you have reported via the IPPRS this period, and this report has been uploaded to the documents tab in MERIT.", + "preLabel": "Q5b. Please confirm that you have reported via the IPPRS this period, and this report has been attached.", "source": "reportedToIpprs", "type": "boolean" } @@ -523,7 +520,7 @@ { "type": "document", "source": "ipprsReport", - "preLabel": "Please attach the document here" + "preLabel": "Please attach the document here." } ] }, diff --git a/forms/rlp/rlpOutputReport.json b/forms/rlp/rlpOutputReport.json index e3c709d42..3cba6cb23 100644 --- a/forms/rlp/rlpOutputReport.json +++ b/forms/rlp/rlpOutputReport.json @@ -13091,53 +13091,65 @@ "name": "sitesTested" }, { - "defaultValue": { - "type": "computed", + "computed": { "expression": "$geom.areaHa(sitesTested)" }, "dataType": "number", "name": "areaTestedHa", - "validate": [ - { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.areaHa(sitesTested)*0.9" - } - }, + "units": "ha", + "decimalPlaces": 3, + "behaviour": [ { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.areaHa(sitesTested)*1.1" + "condition": "areaTestedChangeHa > 0", + "type": "conditional_validation", + "value": { + "message": "", + "validate": "required,min[0.0001]" } } ] }, { - "defaultValue": { - "type": "computed", + "computed": { "expression": "$geom.lengthKm(sitesTested)" }, "dataType": "number", "name": "lengthTestedKm", - "validate": [ - { - "rule": "min", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTested)*0.9" - } - }, + "units": "km", + "decimalPlaces": 3, + "behaviour": [ { - "rule": "max", - "param": { - "type": "computed", - "expression": "$geom.lengthKm(sitesTested)*1.1" + "condition": "lengthTestedChangeKm > 0", + "type": "conditional_validation", + "value": { + "message": "", + "validate": "required,min[0.0001]" } } ] }, + { + "defaultValue": { + "type": "computed", + "expression": "areaTestedHa" + }, + "dataType": "number", + "name": "areaTestedChangeHa", + "validate": "min[0]", + "decimalPlaces": 3, + "units": "ha" + }, + { + "defaultValue": { + "type": "computed", + "expression": "lengthTestedKm" + }, + "dataType": "number", + "name": "lengthTestedChangeKm", + "validate": "min[0]", + "decimalPlaces": 3, + "units": "km" + }, { "dataType": "text", "name": "testingTechnique", @@ -13194,11 +13206,6 @@ "title": "Initial or follow-up activity?", "type": "selectOne" }, - { - "dataType": "text", - "name": "comment", - "validate": "maxSize[1500]" - }, { "width": "10%", "source": "numberOfSoilTests", @@ -13211,23 +13218,74 @@ "title": "Date range", "type": "text" }, - { - "width": "5%", - "source": "sitesTested", - "type": "feature", - "title": "Project site/s where soil tests were conducted" - }, { "width": "10%", - "source": "areaTestedHa", - "type": "number", - "title": "Area (ha) where soil tests were conducted" + "type": "col", + "title": "Project site/s where soil tests were conducted", + "items": [ + { + "type": "feature", + "source": "sitesTested" + }, + { + "type": "row", + "items": [ + { + "type": "number", + "source": "areaTestedHa", + "displayOptions": { + "displayUnits": true + }, + "readonly": true + } + ] + }, + { + "type": "row", + "items": [ + { + "type": "number", + "source": "lengthTestedKm", + "displayOptions": { + "displayUnits": true + }, + "readonly": true + } + ] + } + ] }, { - "width": "10%", - "source": "lengthTestedKm", - "type": "number", - "title": "Length (km) where soil tests were conducted" + "width": "15%", + "title": "Actual Area (ha) / length (km) where soil tests were conducted", + "helpText": "Manually enter correct figure if different to mapped value.", + "type": "col", + "items": [ + { + "type": "row", + "items": [ + { + "source": "areaTestedChangeHa", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + }, + { + "type": "row", + "items": [ + { + "source": "lengthTestedChangeKm", + "type": "number", + "displayOptions": { + "displayUnits": true + } + } + ] + } + ] }, { "width": "18%", diff --git a/gradle.properties b/gradle.properties index f0774b89f..54451aee0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ -meritVersion=3.0.2 -grailsVersion=5.3.2 +meritVersion=3.1-SNAPSHOT +grailsVersion=5.3.5 grailsGradlePluginVersion=5.3.0 groovyVersion=3.0.11 gormVersion=7.3.2 diff --git a/grails-app/assets/components/javascript/reportStatus.js b/grails-app/assets/components/javascript/reportStatus.js new file mode 100644 index 000000000..6e6c0ba25 --- /dev/null +++ b/grails-app/assets/components/javascript/reportStatus.js @@ -0,0 +1,28 @@ +ko.components.register('report-status', { + viewModel: function (params) { + var self = this; + self.statusLabel = params.reportStatus; + var labelNamespace = 'report.status.'; + if (params.reportType && params.reportType != '') { + labelNamespace += params.reportType + '.'; + } + var status = params.reportStatus || ''; + $i18nAsync(labelNamespace+status, null, function(value) { + self.statusLabel = value || ''; + }); + self.badgeClass = ''; + switch(params.reportStatus) { + case PublicationStatus.PUBLISHED: + self.badgeClass = 'badge-success'; + break; + case PublicationStatus.SUBMITTED: + self.badgeClass = 'badge-warning'; + break; + case PublicationStatus.CANCELLED: + self.badgeClass = 'badge-danger'; + default: + self.badgeClass = ''; + } + }, + template: componentService.getTemplate('report-status') +}); \ No newline at end of file diff --git a/grails-app/assets/components/template/report-status.html b/grails-app/assets/components/template/report-status.html new file mode 100644 index 000000000..80140c69b --- /dev/null +++ b/grails-app/assets/components/template/report-status.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/grails-app/assets/javascripts/common-bs4.js b/grails-app/assets/javascripts/common-bs4.js index 0ba5c503e..1da15d2e0 100644 --- a/grails-app/assets/javascripts/common-bs4.js +++ b/grails-app/assets/javascripts/common-bs4.js @@ -18,6 +18,7 @@ //= require fieldcapture-application //= require healthCheck //= require knockout-utils +//= require utils //= require knockout-dates //= require knockout-custom-bindings //= require wmd/wmd.js @@ -55,3 +56,14 @@ ReportStatus = { return status && status.toLowerCase() == this.CANCELLED; } } + +PublicationStatus = { + PUBLISHED: 'published', + SUBMITTED: 'pendingApproval', + UNPUBLISHED: 'unpublished', + CANCELLED: 'cancelled', + + isReadOnly: function(status) { + return status && status != '' && status != this.UNPUBLISHED; + } +} diff --git a/grails-app/assets/javascripts/dataSets.js b/grails-app/assets/javascripts/dataSets.js index 77831ac15..194d6e3ec 100644 --- a/grails-app/assets/javascripts/dataSets.js +++ b/grails-app/assets/javascripts/dataSets.js @@ -1,3 +1,5 @@ + +var MONITOR_APP = 'Monitor'; /** * This view model backs the "Data set summary" tab that is optionally displayed on project * pages that support it. @@ -20,17 +22,44 @@ var DataSetsViewModel =function(dataSets, projectService, config) { window.location.href = config.newDataSetUrl; }; + /** Only new data sets will have a created date, return true if any of the data sets have one */ + self.supportsDateColumn = _.find(dataSets, function(dataSet) { + return dataSet.dateCreated; + }); + function serviceName(serviceId) { + var service = _.find(config.services || [], function(service) { + return service.id == serviceId + }); + return (service && service.name); + } + + function reportName(reportId) { + var report = _.find(config.reports || [], function(report) { + return report.reportId == reportId + }); + return (report && report.name); + } + /** View model backing for a single row in the data set summary table */ function DataSetSummary(dataSet) { - this.editUrl = config.editDataSetUrl + '?dataSetId='+dataSet.dataSetId; - this.viewUrl = config.viewDataSetUrl + '?dataSetId='+dataSet.dataSetId; + this.editUrl = config.editDataSetUrl + '?dataSetId=' + dataSet.dataSetId; + this.viewUrl = config.viewDataSetUrl + '?dataSetId=' + dataSet.dataSetId; this.name = dataSet.name; + this.createdIn = dataSet.collectionApp === MONITOR_APP ? MONITOR_APP : 'MERIT'; this.progress = dataSet.progress; - this.deleteDataSet = function() { - bootbox.confirm("Are you sure?", function(yes) { + this.dateCreated = ko.observable(dataSet.dateCreated).extend({simpleDate: false}); + this.lastUpdated = ko.observable(dataSet.lastUpdated).extend({simpleDate: false}); + this.service = dataSet.serviceId ? (serviceName(dataSet.serviceId) || 'Unsupported service') : ''; + this.report = dataSet.reportId ? reportName(dataSet.reportId) : ''; + this.reportUrl = config.viewReportUrl + '?reportId=' + dataSet.reportId; + this.publicationStatus = dataSet.publicationStatus; + + this.readOnly = PublicationStatus.isReadOnly(dataSet.publicationStatus); + this.deleteDataSet = function () { + bootbox.confirm("Are you sure?", function (yes) { if (yes) { - projectService.deleteDataSet(dataSet.dataSetId).done(function() { + projectService.deleteDataSet(dataSet.dataSetId).done(function () { blockUIWithMessage("Refreshing page..."); window.location.href = config.returnToUrl; }); @@ -54,12 +83,11 @@ var DataSetsViewModel =function(dataSets, projectService, config) { */ var DataSetViewModel = function(dataSet, projectService, options) { var self = this; - var config = _.defaults({validationContainerSelector:'.validationEngineContainer'}, options); - $(config.validationContainerSelector).validationEngine(); - dataSet = dataSet || {}; + self.dateCreated = dataSet.dateCreated; self.dataSetId = dataSet.dataSetId; + self.surveyId = dataSet.surveyId; // Data set summaries created by a submission from the Monitor app will have a surveyId self.name = ko.observable(dataSet.name ); self.grantId = dataSet.grantId; self.projectName = dataSet.projectName; @@ -78,17 +106,58 @@ var DataSetViewModel = function(dataSet, projectService, options) { } }); + self.projectBaselines = options.projectBaselines; self.type = ko.observable(dataSet.type); + self.baselines = ko.observableArray(dataSet.baselines); + self.otherDataSetType = ko.observable(dataSet.otherDataSetType); self.term = ko.observable(dataSet.term); - + var selectedServiceAndOutcome = _.find(options.projectOutcomes || [], function(outcome) { + return outcome.serviceId == dataSet.serviceId && _.isEqual(outcome.outcomes, dataSet.projectOutcomes); + }); + self.serviceAndOutcomes = ko.observable(selectedServiceAndOutcome && selectedServiceAndOutcome.label); + self.projectProtocols = config.projectProtocols; + self.protocol = ko.observable(dataSet.protocol); + self.projectOutcomeList = ko.observableArray(options.projectOutcomes); + self.serviceId = ko.computed(function() { + var selectedOutcome = _.find(options.projectOutcomes || [], function(serviceAndOutcome) { + return serviceAndOutcome.label == self.serviceAndOutcomes(); + }); + return selectedOutcome && selectedOutcome.serviceId; + }); + self.projectOutcomes = ko.computed(function() { + var selectedOutcome = _.find(options.projectOutcomes || [], function(serviceAndOutcome) { + return serviceAndOutcome.label == self.serviceAndOutcomes(); + }); + return selectedOutcome && selectedOutcome.outcomes; + }); if (dataSet.measurementTypes && !_.isArray(dataSet.measurementTypes)) { dataSet.measurementTypes = [dataSet.measurementTypes]; } self.measurementTypes = ko.observableArray(dataSet.measurementTypes); self.methods = ko.observableArray(dataSet.methods); + + /** Applies a standard method description for emsa protocols */ + function syncMethodDescriptionToProtocol(protocol) { + var emsaMethodDescription = 'See EMSA Protocols Manual: https://www.tern.org.au/emsa-protocols-manual'; + if (protocol && protocol != 'other') { + self.methodDescription(emsaMethodDescription); + } + else if (self.methodDescription() == emsaMethodDescription) { + self.methodDescription(''); + } + } self.methodDescription = ko.observable(dataSet.methodDescription); - self.collectionApp = ko.observable(dataSet.collectionApp); + syncMethodDescriptionToProtocol(dataSet.protocol); + + self.protocol.subscribe(function(protocol) { + syncMethodDescriptionToProtocol(protocol); + }); + + + self.collectionApp = ko.observable(); self.location = ko.observable(dataSet.location); + self.siteId = ko.observable(dataSet.siteId); + self.siteUrl = options.viewSiteUrl + '/' + dataSet.siteId; self.startDate = ko.observable(dataSet.startDate).extend({simpleDate:false}); self.endDate = ko.observable(dataSet.endDate).extend({simpleDate:false}); self.endDate.subscribe(function (endDate) { @@ -99,18 +168,33 @@ var DataSetViewModel = function(dataSet, projectService, options) { }); self.addition = ko.observable(dataSet.addition); self.threatenedSpeciesIndex = ko.observable(dataSet.threatenedSpeciesIndex); - self.collectorType = ko.observable(dataSet.collectorType); - self.qa = ko.observable(dataSet.qa); - self.published = ko.observable(dataSet.published); - self.storageType = ko.observable(dataSet.storageType); + self.threatenedSpeciesIndexUploadDate = ko.observable(dataSet.threatenedSpeciesIndexUploadDate).extend({simpleDate:false}); self.publicationUrl = ko.observable(dataSet.publicationUrl); - self.format = ko.observable(dataSet.format); + self.format = ko.observable(); + self.collectionApp.subscribe(function(collectionApp) { + if (collectionApp == MONITOR_APP) { + self.format('Database Table'); + self.publicationUrl('Biodiversity Data Repository (URL pending)'); + } + }); + self.collectionApp(dataSet.collectionApp); // Set this after declaration to trigger the subscription above. + if (dataSet.sensitivities && !_.isArray(dataSet.sensitivities)) { dataSet.sensitivities = [dataSet.sensitivities]; } + + self.sizeInKB = ko.observable(dataSet.sizeInKB); + self.sizeUnknown = ko.observable(dataSet.sizeUnknown); + self.format.subscribe(function(format) { + if (!self.sizeInKB()) { + if (['Database Table', 'Database View', 'ESRI REST'].indexOf(format) >=0) { + self.sizeUnknown(true); + } + } + }); + self.format(dataSet.format); self.sensitivities = ko.observableArray(dataSet.sensitivities); - self.owner = ko.observable(dataSet.owner); - self.custodian = ko.observable(dataSet.custodian); + self.otherSensitivity = ko.observable(dataSet.otherSensitivity); self.progress = ko.observable(dataSet.progress); self.markedAsFinished = ko.observable(dataSet.progress === 'finished'); self.markedAsFinished.subscribe(function (finished) { @@ -118,11 +202,22 @@ var DataSetViewModel = function(dataSet, projectService, options) { }); self.dataCollectionOngoing = ko.observable(dataSet.dataCollectionOngoing); self.dataCollectionOngoing.subscribe(function (dataCollectionOngoing) { - self.dataCollectionOngoing(dataCollectionOngoing); if(dataCollectionOngoing) { $(options.endDateSelector).val(null).trigger('change'); } }); + self.validateEndDate = function() { + if (!self.dataCollectionOngoing()) { + if (!self.endDate()) { + return 'This field is required'; + } + if (self.endDate() < self.startDate()) { + return 'Date must be after '+self.startDate.formattedDate(); + } + } + }; + + self.isAutoCreated = dataSet.surveyId != null; self.validate = function() { return $(config.validationContainerSelector).validationEngine('validate'); @@ -133,7 +228,7 @@ var DataSetViewModel = function(dataSet, projectService, options) { if (valid) { var dataSet = ko.mapping.toJS(self, - {ignore: ['grantId', 'projectName', 'programName', 'validate', 'save', 'cancel', 'investmentOtherSelected']}); + {ignore: ['grantId', 'projectName', 'programName', 'validate', 'save', 'cancel', 'investmentOtherSelected', 'siteUrl', 'isAutoCreated', 'serviceAndOutcomes', 'projectOutcomeList', 'projectBaselines', 'projectProtocols']}); projectService.saveDataSet(dataSet).done(function() { // return to project window.location.href = config.returnToUrl; @@ -147,4 +242,16 @@ var DataSetViewModel = function(dataSet, projectService, options) { // return to project window.location.href = config.returnToUrl; } + + self.uniqueName = function() { + var invalidNames = config.invalidNames || []; + if (invalidNames.indexOf(self.name()) >= 0) { + return "This name is used by another data set. Please use a unique name"; + } + } + + self.attachValidation = function () { + $(config.validationContainerSelector).validationEngine(); + window.uniqueName = self.uniqueName; // Setup the validation function for the name field. + } }; diff --git a/grails-app/assets/javascripts/document.js b/grails-app/assets/javascripts/document.js index 7d1f1af21..1422c4767 100644 --- a/grails-app/assets/javascripts/document.js +++ b/grails-app/assets/javascripts/document.js @@ -4,6 +4,8 @@ var DOCUMENT_EMBEDDED_VIDEO = 'embeddedVideo'; var DOCUMENT_PROJECT_LOGIC = 'projectLogic'; var DOCUMENT_CONTRACT_ASSURANCE = 'contractAssurance'; var DOCUMENT_AUDITABLE_OUTPUTS = 'auditableOutputs'; +var DOCUMENT_SUPPORT_AND_OVERHEADS = 'projectSupportAndOverheadsEvidence'; +var DOCUMENT_PROJECT_SERVICE_EVIDENCE = 'projectServiceEvidence' var documentRoles = [ @@ -11,7 +13,9 @@ var documentRoles = {id: DOCUMENT_EMBEDDED_VIDEO, name:'Embedded Video', isPublicRole:true}, {id: DOCUMENT_PROJECT_LOGIC, name: 'Project Logic', isPublicRole:false}, {id: DOCUMENT_CONTRACT_ASSURANCE, name:'Contract Assurance', isPublicRole:false}, - {id: DOCUMENT_AUDITABLE_OUTPUTS, name:'Auditable Outputs', isPublicRole:false} + {id: DOCUMENT_AUDITABLE_OUTPUTS, name:'Auditable Outputs', isPublicRole:false}, + {id: DOCUMENT_SUPPORT_AND_OVERHEADS, name:'Project Support & Overheads Evidence', isPublicRole:false}, + {id: DOCUMENT_PROJECT_SERVICE_EVIDENCE, name:'Project Service Evidence', isPublicRole:false} ]; /** * A view model to capture metadata about a document and manage progress / feedback as a file is uploaded. diff --git a/grails-app/assets/javascripts/enterActivityData.js b/grails-app/assets/javascripts/enterActivityData.js index a7dc0a078..9fa570071 100644 --- a/grails-app/assets/javascripts/enterActivityData.js +++ b/grails-app/assets/javascripts/enterActivityData.js @@ -28,13 +28,14 @@ var Master = function (activityId, config) { var activityStorageKey = options.activityStorageKey; // client models register their name and methods to participate in saving - self.register = function (modelInstanceName, getMethod, isDirtyMethod, resetMethod, saveCallback) { + self.register = function (modelInstanceName, getMethod, isDirtyMethod, resetMethod, saveCallback, beforeSaveCallback) { self.subscribers.push({ model: modelInstanceName, get: getMethod, isDirty: isDirtyMethod, reset: resetMethod, - saveCallback: saveCallback + saveCallback: saveCallback, + beforeSaveCallback: beforeSaveCallback }); if (ko.isObservable(isDirtyMethod)) { isDirtyMethod.subscribe(function() { @@ -208,9 +209,11 @@ var Master = function (activityId, config) { dirtyFlag: ko.simpleDirtyFlag, viewRootElementId: 'ko' + options.namespace }; + // This was an observable but it's causing dirty checks to fail when the context changes state. + context.lifecycleState = {state:'initialising'}; var config = _.defaults(options, defaults); var viewModel = new config.constructorFunction(output, config.model.dataModel, context, config); - + context.lifecycleState.state = 'modelCreated'; viewModel.initialise(output.data).done(function () { // Check for locally saved data for this output - this will happen in the event of a session timeout @@ -231,7 +234,9 @@ var Master = function (activityId, config) { } // register with the master controller so this model can participate in the save cycle - self.register(viewModel, viewModel.modelForSaving, viewModel.dirtyFlag.isDirty, viewModel.dirtyFlag.reset); + self.register(viewModel, viewModel.modelForSaving, viewModel.dirtyFlag.isDirty, viewModel.dirtyFlag.reset, null, viewModel.clearDataIfOutputMarkedAsNotCompleted); + + context.lifecycleState.state = 'initialised'; }); } @@ -277,6 +282,13 @@ var Master = function (activityId, config) { valid = self.validate(); } + // Notify each output that a save is about to occur. This is for clearing data + // from sections marked "Output not completed" + _.each(self.subscribers, function(obj) { + if (_.isFunction(obj.beforeSaveCallback)) { + obj.beforeSaveCallback(); + } + }); var jsData = self.modelAsJS(valid); if (jsData === undefined) { diff --git a/grails-app/assets/javascripts/managementUnitReport.js b/grails-app/assets/javascripts/entityReport.js similarity index 66% rename from grails-app/assets/javascripts/managementUnitReport.js rename to grails-app/assets/javascripts/entityReport.js index 02c9cc771..efe1fbca4 100644 --- a/grails-app/assets/javascripts/managementUnitReport.js +++ b/grails-app/assets/javascripts/entityReport.js @@ -1,27 +1,27 @@ -function ManagementUnitReportSelectorViewModel(options) { +function EntityReportSelectorViewModel(options) { var self = this; var config = _.defaults(options); var now = convertToSimpleDate(new Date()); var d = new Date(); - d.setFullYear(2018, 6, 1); + d.setFullYear(config.fromYear || 2018, config.fromMonth || 6, config.fromDate || 1); self.fromDate = ko.observable(d).extend({simpleDate:false}); self.toDate = ko.observable(now).extend({simpleDate:false}); - self.muReportDownload = function () { + self.entityReportDownload = function () { var summaryFlag = false; - return generateMuReport(summaryFlag) + return generateEntityReport(summaryFlag) }; - self.muReportDownloadSummary = function() { + self.entityReportDownloadSummary = function() { var summaryFlag = true; - generateMuReport(summaryFlag); + generateEntityReport(summaryFlag); }; - function generateMuReport(summaryFlag) { + function generateEntityReport(summaryFlag) { var json = {fromDate:self.fromDate(), toDate:self.toDate(), summaryFlag: summaryFlag} return $.ajax({ - url: config.generateMUReportInPeriodUrl, + url: config.generateEntityReportInPeriodUrl, type: 'GET', data: json, dataType:'json', @@ -33,7 +33,7 @@ function ManagementUnitReportSelectorViewModel(options) { var details = data['details'] var message = data['message'] var detailsIcon = ' ' - var detailsPanel = 'Try this link, if you cannot get an email confirmation' + var detailsPanel = 'Try this link, if you cannot get an email confirmation' bootbox.alert(message + detailsIcon + detailsPanel) } }).fail(function() { diff --git a/grails-app/assets/javascripts/knockout-custom-bindings.js b/grails-app/assets/javascripts/knockout-custom-bindings.js index df275d240..09f0e494e 100644 --- a/grails-app/assets/javascripts/knockout-custom-bindings.js +++ b/grails-app/assets/javascripts/knockout-custom-bindings.js @@ -391,4 +391,548 @@ ko.bindingHandlers['jqueryValidationEngine'] = { element.setAttribute('data-validation-engine', 'validate[funcCallRequired[globalValidations.'+namespace+']]') } -} \ No newline at end of file +} + + +function pad(number, length){ + var str = "" + number + while (str.length < length) { + str = '0'+str + } + return str +} +//wrapper for an observable that protects value until committed +// CG - Changed the way the protected observable works from value doesn't change until commit to +// value changes as edits are made with rollback. This was to enable cross field dependencies in a table +// row - using a temp variable meant observers were not notified of changes until commit. +ko.protectedObservable = function(initialValue) { + //private variables + var _current = ko.observable(initialValue); + var _committed = initialValue; + + var result = ko.dependentObservable({ + read: _current, + write: function(newValue) { + _current(newValue); + } + }); + + //commit the temporary value to our observable, if it is different + result.commit = function() { + _committed = _current(); + }; + + //notify subscribers to update their value with the original + result.reset = function() { + _current(_committed); + }; + + return result; +}; + +// This binding allows dates to be displayed as simple text that can be clicked to access +// a date picker for in-place editing. +// A user prompt appears if the model has no value. this can be customised. +// A calendar icon is added after the bound element as a visual indicator that the date can be edited. +// A computed 'hasChanged' property provides an observable isDirty flag for external save/revert mechanisms. +// The 'datepicker' binding is applied to the element to integrate the bootstrap datepicker. +// NOTE you can use the datepicker binding directly if you have an input as your predefined element. +ko.bindingHandlers.clickToPickDate = { + init: function(element, valueAccessor, allBindingsAccessor, viewModel) { + var observable = valueAccessor(), + userPrompt = $(element).attr('data-prompt'), + prompt = userPrompt || 'Click to edit', + icon = $(''); + + observable.originalValue = observable.date(); + observable.hasChanged = ko.computed(function () { + //console.log("original: " + observable.originalValue + " current: " + observable.date()); + var original = observable.originalValue.getTime(); + var current = observable.date().getTime(); + return (original != current) && (!isNaN(original) || !isNaN(current)); + }); + + $(element).parent().append(icon); + + ko.applyBindingsToNode(element, { + text: ko.computed(function() { + // todo: style default text as grey + return ko.utils.unwrapObservable(observable) !== "" ? observable.formattedDate() : prompt; + }), + datepicker: observable.date + }); + } +}; + +/* +This binding allows text values to be displayed as simple text that can be clicked to access + an input control for in-place editing. + */ +ko.bindingHandlers.clickToEdit = { + init: function(element, valueAccessor) { + var observable = valueAccessor(), + link = document.createElement("a"), + input = document.createElement("input"), + dblclick = $(element).attr('data-edit-on-dblclick'), + userPrompt = $(element).attr('data-prompt'), + prompt = userPrompt || (dblclick ? 'Double-click to edit' : 'Click to edit'), + linkBindings; + + // add any classes specified for the link element + $(link).addClass($(element).attr('data-link-class')); + // add any classes specified for the input element + $(input).addClass($(element).attr('data-input-class')); + + element.appendChild(link); + element.appendChild(input); + + observable.editing = ko.observable(false); + observable.stopEditing = function () { + $(input).blur(); + observable.editing(false) + }; + + linkBindings = { + text: ko.computed(function() { + // todo: style default text as grey + var value = ko.utils.unwrapObservable(observable); + return value !== "" ? value : prompt; + }), + visible: ko.computed(function() { + return !observable.editing(); + }) + }; + + // bind to either the click or dblclick event + if (dblclick) { + linkBindings.event = { dblclick: observable.editing.bind(null, true) }; + } else { + linkBindings.click = observable.editing.bind(null, true); + } + + ko.applyBindingsToNode(link, linkBindings); + + ko.applyBindingsToNode(input, { + value: observable, + visible: observable.editing, + hasfocus: observable.editing + }); + + // quit editing on enter key + $(input).keydown(function(e) { + if (e.which === 13) { + observable.stopEditing(); + } + }); + } +}; + +/* +This binding allows small non-negative integers in the model to be displayed as a number of ticks + and edited by spinner buttons. + */ +ko.bindingHandlers.ticks = { + init: function(element, valueAccessor) { + var observable = valueAccessor(), + $parent = $(element).parent(), + $buttons, + $widget = $(''); + + $parent.css('padding','4px'); + $widget.append($('')); + $widget.append($('')); + $parent.append($widget); + $buttons = $parent.find('button'); + + $buttons.hide(); + + ko.utils.registerEventHandler($parent, "mouseover", function() { + $buttons.show(); + }); + + ko.utils.registerEventHandler($parent, "mouseout", function() { + $buttons.hide(); + }); + + ko.utils.registerEventHandler($buttons, "click", function() { + var isUp = $(this).hasClass('up'), + value = Number(observable()); + if (isNaN(value)) { value = 0; } + + if (isUp) { + observable("" + (value + 1)); + } else { + if (value > 0) { + observable("" + (value - 1)); + } + } + return false; + }); + }, + update: function(element, valueAccessor) { + var observable = valueAccessor(), value, + tick = '', ticks = ""; + if (observable) { + value = Number(ko.utils.unwrapObservable(observable)); + if (isNaN(value)) { + $(element).html(""); + } else { + //$(element).html(value); + $(element).empty(); + for (i=0; i < value; i++) { + ticks += tick; + } + $(element).html(ticks); + } + } + } +}; + +// handles simple or deferred computed objects +// see activity/edit.gsp for an example of use +ko.extenders.async = function(computedDeferred, initialValue) { + + var plainObservable = ko.observable(initialValue), currentDeferred; + plainObservable.inProgress = ko.observable(false); + + ko.computed(function() { + if (currentDeferred) { + currentDeferred.reject(); + currentDeferred = null; + } + + var newDeferred = computedDeferred(); + if (newDeferred && + (typeof newDeferred.done == "function")) { + + // It's a deferred + plainObservable.inProgress(true); + + // Create our own wrapper so we can reject + currentDeferred = $.Deferred().done(function(data) { + plainObservable.inProgress(false); + plainObservable(data); + }); + newDeferred.done(currentDeferred.resolve); + } else { + // A real value, so just publish it immediately + plainObservable(newDeferred); + } + }); + + return plainObservable; +}; + +ko.bindingHandlers.fileUploadNoImage = { + init: function(element, options) { + var dropzone = $(element).parent(); + var defaults = {autoUpload:true, dropZone: dropzone}; + var settings = {}; + $.extend(settings, defaults, options()); + $(element).fileupload(settings); + } +} + +// A handy binding to iterate over the properties of an object. +ko.bindingHandlers.foreachprop = { + transformObject: function (obj) { + var properties = []; + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + properties.push({ key: key, value: obj[key] }); + } + } + return properties; + }, + init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { + var value = ko.utils.unwrapObservable(valueAccessor()), + properties = ko.bindingHandlers.foreachprop.transformObject(value); + ko.applyBindingsToNode(element, { foreach: properties }); + return { controlsDescendantBindings: true }; + } +}; + +// Compares this column to the current sort parameters and displays the appropriate sort icons. +// If this is the column that the model is currently sorted by, then shows an up or down icon +// depending on the current sort order. +// Usage example: Type +// The sortIcon binding takes an object or observable that contains a 'by' property and an 'order' property. +// The data-column attr defines the model value that the column holds. This is compared to the +// current sort by value to see if this is the active column. +ko.bindingHandlers.sortIcon = { + update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { + var $element = $(element), + name = $element.data('column'), + $icon = $element.find('i'), + className = "icon-blank", + sortParams = ko.utils.unwrapObservable(valueAccessor()); + // see if this is the active sort column + if (sortParams.by() === name) { + // and if so, choose an icon based on sort order + className = sortParams.order() === 'desc' ? 'icon-chevron-down' : 'icon-chevron-up'; + } + // insert the icon markup if it doesn't exist + if ($icon.length === 0) { + $icon = $("").appendTo($element); + } + // set the computed class + $icon.removeClass('icon-chevron-down').removeClass('icon-chevron-up').removeClass('icon-blank').addClass(className); + } +}; + +/** + * A vetoableObservable is an observable that provides a mechanism to prevent changes to its value under certain + * conditions. When a change is notified, the vetoCheck function is executed - if it returns false the change is + * disallowed and the vetoCallback function is invoked. Otherwise the change is allowed and the noVetoCallback + * function is invoked. + * The only current example of it's use is when the type of an activity is changed, it + * can potentially invalidate any target score values that have been supplied by the user - hence the user is + * asked if they wish to proceed, and if so, the targets can be removed. + * @param initialValue the initial value for the observable. + * @param vetoCheck a function or string that will be invoked when the value of the vetoableObservable changes. Returning + * false from this function will disallow the change. If a string is supplied, it is used as the question text + * for a window.confirm function. + * @param noVetoCallback this callback will be invoked when a change to the vetoableObservable is allowed. + * @param vetoCallback this callback will be invoked when a change to the vetoableObservable is disallowed (has been vetoed). + * @returns {*} + */ +ko.vetoableObservable = function(initialValue, vetoCheck, noVetoCallback, vetoCallback) { + //private variables + var _current = ko.observable(initialValue); + + var vetoFunction = typeof (vetoCheck) === 'function' ? vetoCheck : function() { + return window.confirm(vetoCheck); + }; + var result = ko.dependentObservable({ + read: _current, + write: function(newValue) { + + // The equality check is treating undefined as equal to an empty string to prevent + // the initial population of the value with an empty select option from triggering the veto. + if (_current() !== newValue && (_current() !== undefined || newValue !== '')) { + + if (vetoFunction()) { + _current(newValue); + if (noVetoCallback !== undefined) { + noVetoCallback(); + } + } + else { + _current.notifySubscribers(); + if (vetoCallback !== undefined) { + vetoCallback(); + } + } + } + + } + }); + + return result; +}; + +/** + * + * @param target the knockoutjs object being extended. + * @param options {currencySymbol, decimalSeparator, thousandsSeparator} + */ +ko.extenders.currency = function(target, options) { + + var symbol, d,t; + if (options !== undefined) { + symbol = options.currencySymbol; + d = options.decimalSeparator; + t = options.thousandsSeparator; + } + target.formattedCurrency = ko.computed(function() { + var n = target(), + c = isNaN(c = Math.abs(c)) ? 2 : c, + d = d == undefined ? "." : d, + t = t == undefined ? "," : t, + s = n < 0 ? "-" : "", + sym = symbol == undefined ? "$" : symbol, + i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", + j = (j = i.length) > 3 ? j % 3 : 0; + return sym + s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ""); + }); + return target; +}; + +// custom validator to ensure that only one of two fields is populated +function exclusive (field, rules, i, options) { + var otherFieldId = rules[i+2], // get the id of the other field + otherValue = $('#'+otherFieldId).val(), + thisValue = field.val(), + message = rules[i+3]; + // checking thisValue is technically redundant as this validator is only called + // if there is a value in the field + if (otherValue !== '' && thisValue !== '') { + return message; + } else { + return true; + } +}; + +/** + * Converts markdown formatted text into html, filters an allowed list of tags. (To prevent script injection). + * @param target the knockout observable holding the text. + * @param options unused. + * @returns {*} + */ +ko.extenders.markdown = function(target, options) { + var converter = new window.Showdown.converter(); + var filterOptions = window.WMDEditor.defaults.tagFilter; + + target.markdownToHtml = ko.computed(function() { + var text = target(); + if (text) { + text = text.replace(/<[^<>]*>?/gi, function (tag) { + return (tag.match(filterOptions.allowedTags) || tag.match(filterOptions.patternLink) || tag.match(filterOptions.patternImage) || tag.match(filterOptions.patternAudio)) ? tag : ""; + }); + } + else { + text = ''; + } + return converter.makeHtml(text); + }); + return target; +}; + + +ko.bindingHandlers.stagedImageUpload = { + init: function(element, valueAccessor, allBindings, viewModel, bindingContext) { + + var defaultConfig = { + maxWidth: 300, + minWidth:150, + minHeight:150, + maxHeight: 300, + previewSelector: '.preview' + }; + var size = ko.observable(); + var progress = ko.observable(); + var error = ko.observable(); + var complete = ko.observable(true); + + var uploadProperties = { + size: size, + progress: progress, + error:error, + complete:complete + }; + var innerContext = bindingContext.createChildContext(bindingContext); + ko.utils.extend(innerContext, uploadProperties); + + var target = valueAccessor(); + var $elem = $(element); + var role = $elem.data('role'); + var ownerKey = $elem.data('owner-type'); + var ownerValue = $elem.data('owner-id'); + var url = $elem.data('url'); + var owner = {}; + owner[ownerKey] = ownerValue; + var config = { + url:url, + role: role, + owner:owner + }; + config = $.extend({}, defaultConfig, config); + + // Expected to be a ko.observableArray + $(element).fileupload({ + url:config.url, + autoUpload:true + }).on('fileuploadadd', function(e, data) { + complete(false); + progress(1); + }).on('fileuploadprocessalways', function(e, data) { + if (data.files[0].preview) { + if (config.previewSelector !== undefined) { + var previewElem = $(element).parent().find(config.previewSelector); + previewElem.append(data.files[0].preview); + } + } + }).on('fileuploadprogressall', function(e, data) { + progress(Math.floor(data.loaded / data.total * 100)); + size(data.total); + }).on('fileuploaddone', function(e, data) { + + var result = data.result; + + if (!result) { + result = {}; + error('No response from server'); + } + + if (result.files[0]) { + target.push(ko.bindingHandlers.stagedImageUpload.toDocument(result.files[0], config)); + complete(true); + } + else { + error(result.error); + } + + }).on('fileuploadfail', function(e, data) { + error(data.errorThrown); + }); + + ko.applyBindingsToDescendants(innerContext, element); + + return { controlsDescendantBindings: true }; + }, + toDocument:function(f, config) { + + var data = { + thumbnailUrl: f.thumbnail_url, + url: f.url, + contentType: f.contentType, + filename: f.name, + filesize: f.size, + dateTaken: f.isoDate, + lat: f.decimalLatitude, + lng: f.decimalLongitude, + name: f.name, + type: 'image', + role:config.role + }; + + return $.extend({}, data, config.owner); + } +}; + +var ACTIVITY_PROGRESS_CLASSES = { + 'planned':'btn-warning', + 'started':'btn-success', + 'finished':'btn-info', + 'deferred':'btn-danger', + 'cancelled':'btn-inverse', + 'corrected':'btn-danger' +}; + + +/** Returns a bootstrap class used to style activity progress labels */ +function activityProgressClass(progress) { + return ACTIVITY_PROGRESS_CLASSES[progress]; +} + +/** Allows a subscription to an observable that passes both the old and new value to the callback */ +ko.subscribable.fn.subscribeChanged = function (callback) { + var savedValue = this.peek(); + return this.subscribe(function (latestValue) { + var oldValue = savedValue; + savedValue = latestValue; + callback(latestValue, oldValue); + }); +}; + +ko.extenders.url = function(target) { + var result = ko.pureComputed({ + read:target, + write: function(url) { + var value = typeof url == 'string' && url.indexOf("://") < 0? ("http://" + url): url; + target(value); + } + }); + result(target()); + return result; +}; diff --git a/grails-app/assets/javascripts/knockout-dates.js b/grails-app/assets/javascripts/knockout-dates.js deleted file mode 100644 index 6101e70c6..000000000 --- a/grails-app/assets/javascripts/knockout-dates.js +++ /dev/null @@ -1,835 +0,0 @@ -/* -Handles the display and editing of UTC dates. - -Declares a Knockout extender that allows UTC ISODates to be displayed and edited as simple dates in the form - dd-MM-yyyy and with local timezone adjustment. Hours and minutes can optionally be shown and edited. - -Declares a custom binding that allows dates to be changed using the Bootstrap datepicker - (https://github.com/eternicode/bootstrap-datepicker). - -The date values in the ViewModel are maintained as UTC dates as strings in ISO format (ISO8601 without milliseconds). - -The extender adds a 'formattedDate' property to the observable. It is this property that should be bound - to an element, eg - - or - - -The date is defined in the view model like this: - - self.myDate = ko.observable("${myDate}").extend({simpleDate: false}); - -The boolean indicates whether to show the time as well. - -The extender also adds a 'date' property to the observable that holds the value as a Javascript date object. -This is used by the datepicker custom binding. - -The custom binding listens for changes via the datepicker as well as direct edits to the input field and - updates the model. It also updates the datepicker on change to the model. - -*/ - -(function(){ - - // creates an ISO8601 date string but without millis - to match the format used by the java thingy for BSON dates - Date.prototype.toISOStringNoMillis = function() { - function pad(n) { return n < 10 ? '0' + n : n } - return this.getUTCFullYear() + '-' - + pad(this.getUTCMonth() + 1) + '-' - + pad(this.getUTCDate()) + 'T' - + pad(this.getUTCHours()) + ':' - + pad(this.getUTCMinutes()) + ':' - + pad(this.getUTCSeconds()) + 'Z'; - }; - - // Use native ISO date parsing or shim for old browsers (IE8) - var D= new Date('2011-06-02T09:34:29+02:00'); - if(!D || +D!== 1307000069000){ - Date.fromISO= function(s){ - var day, tz, - rx=/^(\d{4}\-\d\d\-\d\d([tT ][\d:\.]*)?)([zZ]|([+\-])(\d\d):(\d\d))?$/, - p= rx.exec(s) || []; - if(p[1]){ - day= p[1].split(/\D/); - for(var i= 0, L= day.length; i= 6) { - year++; - } - - return (year-1) + '/' + year; -} - -function convertToIsoDate(date) { - if (typeof date === 'string') { - if (date.length === 20 && date.charAt(19) === 'Z') { - // already an ISO date string - return date; - } else if (date.length > 9){ - // assume a short date of the form dd-mm-yyyy - var year = date.substr(6,4), - month = Number(date.substr(3,2))- 1, - day = date.substr(0,2), - hours = date.length > 12 ? date.substr(11,2) : 0, - minutes = date.length > 15 ? date.substr(14,2) : 0; - var dt = new Date(year, month, day, hours, minutes); - if (isValidDate(dt)) { - return dt.toISOStringNoMillis(); - } - else { - return ''; - } - } else { - return ''; - } - } else if (typeof date === 'object') { - // assume a date object - if (isValidDate(date)) { - return date.toISOStringNoMillis(); - } - else { - return ''; - } - - } else { - return ''; - } -} - -function stringToDate(date) { - if (typeof date === 'string') { - if (date.length === 20 && date.charAt(19) === 'Z') { - // already an ISO date string - return Date.fromISO(date); - } else if (date.length > 9){ - // assume a short date of the form dd-mm-yyyy - var year = date.substr(6,4), - month = Number(date.substr(3,2))- 1, - day = date.substr(0,2), - hours = date.length > 12 ? date.substr(11,2) : 0, - minutes = date.length > 15 ? date.substr(14,2) : 0; - return new Date(year, month, day, hours, minutes); - } else { - return undefined; - } - } else if (typeof date === 'object') { - // assume a date object - return date; - } else { - return undefined; - } -} - -(function() { - - // This extends an observable that holds a UTC ISODate. It creates properties that hold: - // a JS Date object - useful with datepicker; and - // a simple formatted date of the form dd-mm-yyyy useful for display. - // The formatted date will include hh:MM if the includeTime argument is true - ko.extenders.simpleDate = function (target, includeTime) { - target.date = ko.computed({ - read: function () { - return Date.fromISO(target()); - }, - - write: function (newValue) { - if (newValue) { - var current = target(), - valueToWrite = convertToIsoDate(newValue); - - if (valueToWrite !== current) { - target(valueToWrite); - } - } else { - // date has been cleared - target(""); - } - } - }); - target.formattedDate = ko.computed({ - read: function () { - return convertToSimpleDate(target(), includeTime); - }, - - write: function (newValue) { - if (newValue) { - var current = target(), - valueToWrite = convertToIsoDate(newValue); - - if (valueToWrite !== current) { - target(valueToWrite); - } - } - } - }); - target.date(target()); - target.formattedDate(target()); - - return target; - }; - - /* Custom binding for Bootstrap datepicker */ - // This binds an element and a model observable to the bootstrap datepicker. - // The element can be an input or container such as span, div, td. - // The datepicker is 2-way bound to the model. An input element will be updated automatically, - // other elements may need an explicit text binding to the formatted model date (see - // clickToPickDate for an example of a simple element). - ko.bindingHandlers.datepicker = { - init: function(element, valueAccessor, allBindingsAccessor) { - // set current date into the element - var $element = $(element), - initialDate = ko.utils.unwrapObservable(valueAccessor()), - initialDateStr = convertToSimpleDate(initialDate); - if ($element.is('input')) { - $element.val(initialDateStr); - } else { - $element.data('date', initialDateStr); - } - - var defaults = {format: 'dd-mm-yyyy', autoclose: true}; - var options = _.defaults(allBindingsAccessor().datepickerOptions || {}, defaults); - - //initialize datepicker with some optional options - $element.datepicker(options); - - // if the parent container holds any element with the class 'open-datepicker' - // then add a hook to do so - $element.parent().find('.open-datepicker').click(function () { - if (!$element.prop('disabled')) { - $element.datepicker('show'); - } - }); - - var changeHandler = function(event) { - var value = valueAccessor(); - if (ko.isObservable(value)) { - value(event.date); - } - }; - - //when a user changes the date via the datepicker, update the view model - ko.utils.registerEventHandler(element, "changeDate", changeHandler); - ko.utils.registerEventHandler(element, "hide", changeHandler); - - //when a user changes the date via the input, update the view model - ko.utils.registerEventHandler(element, "change", function() { - var value = valueAccessor(); - if (ko.isObservable(value)) { - value(stringToDate(element.value)); - $(element).trigger('blur'); // This is to trigger revalidation of the date field to remove existing validation errors. - } - }); - }, - update: function(element, valueAccessor) { - var widget = $(element).data("datepicker"); - //when the view model is updated, update the widget - if (widget) { - var date = ko.utils.unwrapObservable(valueAccessor()); - widget.date = date; - if (!isNaN(widget.date)) { - widget.setDate(widget.date); - } - } - } - }; - -}()); - -function pad(number, length){ - var str = "" + number - while (str.length < length) { - str = '0'+str - } - return str -} - -//wrapper for an observable that protects value until committed -// CG - Changed the way the protected observable works from value doesn't change until commit to -// value changes as edits are made with rollback. This was to enable cross field dependencies in a table -// row - using a temp variable meant observers were not notified of changes until commit. -ko.protectedObservable = function(initialValue) { - //private variables - var _current = ko.observable(initialValue); - var _committed = initialValue; - - var result = ko.dependentObservable({ - read: _current, - write: function(newValue) { - _current(newValue); - } - }); - - //commit the temporary value to our observable, if it is different - result.commit = function() { - _committed = _current(); - }; - - //notify subscribers to update their value with the original - result.reset = function() { - _current(_committed); - }; - - return result; -}; - -// This binding allows dates to be displayed as simple text that can be clicked to access -// a date picker for in-place editing. -// A user prompt appears if the model has no value. this can be customised. -// A calendar icon is added after the bound element as a visual indicator that the date can be edited. -// A computed 'hasChanged' property provides an observable isDirty flag for external save/revert mechanisms. -// The 'datepicker' binding is applied to the element to integrate the bootstrap datepicker. -// NOTE you can use the datepicker binding directly if you have an input as your predefined element. -ko.bindingHandlers.clickToPickDate = { - init: function(element, valueAccessor, allBindingsAccessor, viewModel) { - var observable = valueAccessor(), - userPrompt = $(element).attr('data-prompt'), - prompt = userPrompt || 'Click to edit', - icon = $(''); - - observable.originalValue = observable.date(); - observable.hasChanged = ko.computed(function () { - //console.log("original: " + observable.originalValue + " current: " + observable.date()); - var original = observable.originalValue.getTime(); - var current = observable.date().getTime(); - return (original != current) && (!isNaN(original) || !isNaN(current)); - }); - - $(element).parent().append(icon); - - ko.applyBindingsToNode(element, { - text: ko.computed(function() { - // todo: style default text as grey - return ko.utils.unwrapObservable(observable) !== "" ? observable.formattedDate() : prompt; - }), - datepicker: observable.date - }); - } -}; - -/* -This binding allows text values to be displayed as simple text that can be clicked to access - an input control for in-place editing. - */ -ko.bindingHandlers.clickToEdit = { - init: function(element, valueAccessor) { - var observable = valueAccessor(), - link = document.createElement("a"), - input = document.createElement("input"), - dblclick = $(element).attr('data-edit-on-dblclick'), - userPrompt = $(element).attr('data-prompt'), - prompt = userPrompt || (dblclick ? 'Double-click to edit' : 'Click to edit'), - linkBindings; - - // add any classes specified for the link element - $(link).addClass($(element).attr('data-link-class')); - // add any classes specified for the input element - $(input).addClass($(element).attr('data-input-class')); - - element.appendChild(link); - element.appendChild(input); - - observable.editing = ko.observable(false); - observable.stopEditing = function () { - $(input).blur(); - observable.editing(false) - }; - - linkBindings = { - text: ko.computed(function() { - // todo: style default text as grey - var value = ko.utils.unwrapObservable(observable); - return value !== "" ? value : prompt; - }), - visible: ko.computed(function() { - return !observable.editing(); - }) - }; - - // bind to either the click or dblclick event - if (dblclick) { - linkBindings.event = { dblclick: observable.editing.bind(null, true) }; - } else { - linkBindings.click = observable.editing.bind(null, true); - } - - ko.applyBindingsToNode(link, linkBindings); - - ko.applyBindingsToNode(input, { - value: observable, - visible: observable.editing, - hasfocus: observable.editing - }); - - // quit editing on enter key - $(input).keydown(function(e) { - if (e.which === 13) { - observable.stopEditing(); - } - }); - } -}; - -/* -This binding allows small non-negative integers in the model to be displayed as a number of ticks - and edited by spinner buttons. - */ -ko.bindingHandlers.ticks = { - init: function(element, valueAccessor) { - var observable = valueAccessor(), - $parent = $(element).parent(), - $buttons, - $widget = $(''); - - $parent.css('padding','4px'); - $widget.append($('')); - $widget.append($('')); - $parent.append($widget); - $buttons = $parent.find('button'); - - $buttons.hide(); - - ko.utils.registerEventHandler($parent, "mouseover", function() { - $buttons.show(); - }); - - ko.utils.registerEventHandler($parent, "mouseout", function() { - $buttons.hide(); - }); - - ko.utils.registerEventHandler($buttons, "click", function() { - var isUp = $(this).hasClass('up'), - value = Number(observable()); - if (isNaN(value)) { value = 0; } - - if (isUp) { - observable("" + (value + 1)); - } else { - if (value > 0) { - observable("" + (value - 1)); - } - } - return false; - }); - }, - update: function(element, valueAccessor) { - var observable = valueAccessor(), value, - tick = '', ticks = ""; - if (observable) { - value = Number(ko.utils.unwrapObservable(observable)); - if (isNaN(value)) { - $(element).html(""); - } else { - //$(element).html(value); - $(element).empty(); - for (i=0; i < value; i++) { - ticks += tick; - } - $(element).html(ticks); - } - } - } -}; - -// handles simple or deferred computed objects -// see activity/edit.gsp for an example of use -ko.extenders.async = function(computedDeferred, initialValue) { - - var plainObservable = ko.observable(initialValue), currentDeferred; - plainObservable.inProgress = ko.observable(false); - - ko.computed(function() { - if (currentDeferred) { - currentDeferred.reject(); - currentDeferred = null; - } - - var newDeferred = computedDeferred(); - if (newDeferred && - (typeof newDeferred.done == "function")) { - - // It's a deferred - plainObservable.inProgress(true); - - // Create our own wrapper so we can reject - currentDeferred = $.Deferred().done(function(data) { - plainObservable.inProgress(false); - plainObservable(data); - }); - newDeferred.done(currentDeferred.resolve); - } else { - // A real value, so just publish it immediately - plainObservable(newDeferred); - } - }); - - return plainObservable; -}; - -ko.bindingHandlers.fileUploadNoImage = { - init: function(element, options) { - var dropzone = $(element).parent(); - var defaults = {autoUpload:true, dropZone: dropzone}; - var settings = {}; - $.extend(settings, defaults, options()); - $(element).fileupload(settings); - } -} - -// A handy binding to iterate over the properties of an object. -ko.bindingHandlers.foreachprop = { - transformObject: function (obj) { - var properties = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - properties.push({ key: key, value: obj[key] }); - } - } - return properties; - }, - init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { - var value = ko.utils.unwrapObservable(valueAccessor()), - properties = ko.bindingHandlers.foreachprop.transformObject(value); - ko.applyBindingsToNode(element, { foreach: properties }); - return { controlsDescendantBindings: true }; - } -}; - -// Compares this column to the current sort parameters and displays the appropriate sort icons. -// If this is the column that the model is currently sorted by, then shows an up or down icon -// depending on the current sort order. -// Usage example: Type -// The sortIcon binding takes an object or observable that contains a 'by' property and an 'order' property. -// The data-column attr defines the model value that the column holds. This is compared to the -// current sort by value to see if this is the active column. -ko.bindingHandlers.sortIcon = { - update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { - var $element = $(element), - name = $element.data('column'), - $icon = $element.find('i'), - className = "icon-blank", - sortParams = ko.utils.unwrapObservable(valueAccessor()); - // see if this is the active sort column - if (sortParams.by() === name) { - // and if so, choose an icon based on sort order - className = sortParams.order() === 'desc' ? 'icon-chevron-down' : 'icon-chevron-up'; - } - // insert the icon markup if it doesn't exist - if ($icon.length === 0) { - $icon = $("").appendTo($element); - } - // set the computed class - $icon.removeClass('icon-chevron-down').removeClass('icon-chevron-up').removeClass('icon-blank').addClass(className); - } -}; - -/** - * A vetoableObservable is an observable that provides a mechanism to prevent changes to its value under certain - * conditions. When a change is notified, the vetoCheck function is executed - if it returns false the change is - * disallowed and the vetoCallback function is invoked. Otherwise the change is allowed and the noVetoCallback - * function is invoked. - * The only current example of it's use is when the type of an activity is changed, it - * can potentially invalidate any target score values that have been supplied by the user - hence the user is - * asked if they wish to proceed, and if so, the targets can be removed. - * @param initialValue the initial value for the observable. - * @param vetoCheck a function or string that will be invoked when the value of the vetoableObservable changes. Returning - * false from this function will disallow the change. If a string is supplied, it is used as the question text - * for a window.confirm function. - * @param noVetoCallback this callback will be invoked when a change to the vetoableObservable is allowed. - * @param vetoCallback this callback will be invoked when a change to the vetoableObservable is disallowed (has been vetoed). - * @returns {*} - */ -ko.vetoableObservable = function(initialValue, vetoCheck, noVetoCallback, vetoCallback) { - //private variables - var _current = ko.observable(initialValue); - - var vetoFunction = typeof (vetoCheck) === 'function' ? vetoCheck : function() { - return window.confirm(vetoCheck); - }; - var result = ko.dependentObservable({ - read: _current, - write: function(newValue) { - - // The equality check is treating undefined as equal to an empty string to prevent - // the initial population of the value with an empty select option from triggering the veto. - if (_current() !== newValue && (_current() !== undefined || newValue !== '')) { - - if (vetoFunction()) { - _current(newValue); - if (noVetoCallback !== undefined) { - noVetoCallback(); - } - } - else { - _current.notifySubscribers(); - if (vetoCallback !== undefined) { - vetoCallback(); - } - } - } - - } - }); - - return result; -}; - -/** - * - * @param target the knockoutjs object being extended. - * @param options {currencySymbol, decimalSeparator, thousandsSeparator} - */ -ko.extenders.currency = function(target, options) { - - var symbol, d,t; - if (options !== undefined) { - symbol = options.currencySymbol; - d = options.decimalSeparator; - t = options.thousandsSeparator; - } - target.formattedCurrency = ko.computed(function() { - var n = target(), - c = isNaN(c = Math.abs(c)) ? 2 : c, - d = d == undefined ? "." : d, - t = t == undefined ? "," : t, - s = n < 0 ? "-" : "", - sym = symbol == undefined ? "$" : symbol, - i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", - j = (j = i.length) > 3 ? j % 3 : 0; - return sym + s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ""); - }); - return target; -}; - -// custom validator to ensure that only one of two fields is populated -function exclusive (field, rules, i, options) { - var otherFieldId = rules[i+2], // get the id of the other field - otherValue = $('#'+otherFieldId).val(), - thisValue = field.val(), - message = rules[i+3]; - // checking thisValue is technically redundant as this validator is only called - // if there is a value in the field - if (otherValue !== '' && thisValue !== '') { - return message; - } else { - return true; - } -}; - -/** - * Converts markdown formatted text into html, filters an allowed list of tags. (To prevent script injection). - * @param target the knockout observable holding the text. - * @param options unused. - * @returns {*} - */ -ko.extenders.markdown = function(target, options) { - var converter = new window.Showdown.converter(); - var filterOptions = window.WMDEditor.defaults.tagFilter; - - target.markdownToHtml = ko.computed(function() { - var text = target(); - if (text) { - text = text.replace(/<[^<>]*>?/gi, function (tag) { - return (tag.match(filterOptions.allowedTags) || tag.match(filterOptions.patternLink) || tag.match(filterOptions.patternImage) || tag.match(filterOptions.patternAudio)) ? tag : ""; - }); - } - else { - text = ''; - } - return converter.makeHtml(text); - }); - return target; -}; - - -ko.bindingHandlers.stagedImageUpload = { - init: function(element, valueAccessor, allBindings, viewModel, bindingContext) { - - var defaultConfig = { - maxWidth: 300, - minWidth:150, - minHeight:150, - maxHeight: 300, - previewSelector: '.preview' - }; - var size = ko.observable(); - var progress = ko.observable(); - var error = ko.observable(); - var complete = ko.observable(true); - - var uploadProperties = { - size: size, - progress: progress, - error:error, - complete:complete - }; - var innerContext = bindingContext.createChildContext(bindingContext); - ko.utils.extend(innerContext, uploadProperties); - - var target = valueAccessor(); - var $elem = $(element); - var role = $elem.data('role'); - var ownerKey = $elem.data('owner-type'); - var ownerValue = $elem.data('owner-id'); - var url = $elem.data('url'); - var owner = {}; - owner[ownerKey] = ownerValue; - var config = { - url:url, - role: role, - owner:owner - }; - config = $.extend({}, defaultConfig, config); - - // Expected to be a ko.observableArray - $(element).fileupload({ - url:config.url, - autoUpload:true - }).on('fileuploadadd', function(e, data) { - complete(false); - progress(1); - }).on('fileuploadprocessalways', function(e, data) { - if (data.files[0].preview) { - if (config.previewSelector !== undefined) { - var previewElem = $(element).parent().find(config.previewSelector); - previewElem.append(data.files[0].preview); - } - } - }).on('fileuploadprogressall', function(e, data) { - progress(Math.floor(data.loaded / data.total * 100)); - size(data.total); - }).on('fileuploaddone', function(e, data) { - - var result = data.result; - - if (!result) { - result = {}; - error('No response from server'); - } - - if (result.files[0]) { - target.push(ko.bindingHandlers.stagedImageUpload.toDocument(result.files[0], config)); - complete(true); - } - else { - error(result.error); - } - - }).on('fileuploadfail', function(e, data) { - error(data.errorThrown); - }); - - ko.applyBindingsToDescendants(innerContext, element); - - return { controlsDescendantBindings: true }; - }, - toDocument:function(f, config) { - - var data = { - thumbnailUrl: f.thumbnail_url, - url: f.url, - contentType: f.contentType, - filename: f.name, - filesize: f.size, - dateTaken: f.isoDate, - lat: f.decimalLatitude, - lng: f.decimalLongitude, - name: f.name, - type: 'image', - role:config.role - }; - - return $.extend({}, data, config.owner); - } -}; - -var ACTIVITY_PROGRESS_CLASSES = { - 'planned':'btn-warning', - 'started':'btn-success', - 'finished':'btn-info', - 'deferred':'btn-danger', - 'cancelled':'btn-inverse', - 'corrected':'btn-danger' -}; - - -/** Returns a bootstrap class used to style activity progress labels */ -function activityProgressClass(progress) { - return ACTIVITY_PROGRESS_CLASSES[progress]; -} - -/** Allows a subscription to an observable that passes both the old and new value to the callback */ -ko.subscribable.fn.subscribeChanged = function (callback) { - var savedValue = this.peek(); - return this.subscribe(function (latestValue) { - var oldValue = savedValue; - savedValue = latestValue; - callback(latestValue, oldValue); - }); -}; - -ko.extenders.url = function(target) { - var result = ko.pureComputed({ - read:target, - write: function(url) { - var value = typeof url == 'string' && url.indexOf("://") < 0? ("http://" + url): url; - target(value); - } - }); - result(target()); - return result; -}; - diff --git a/grails-app/assets/javascripts/meriplan.js b/grails-app/assets/javascripts/meriplan.js index 2ef572626..c296723ca 100644 --- a/grails-app/assets/javascripts/meriplan.js +++ b/grails-app/assets/javascripts/meriplan.js @@ -82,6 +82,7 @@ function MERIPlan(project, projectService, config) { self.meriPlan().services.addServiceTarget(serviceTarget); }); self.risks.load(meriPlan.risks); + self.applyAutoSave(); self.attachFloatingSave(); }; @@ -210,6 +211,15 @@ function MERIPlan(project, projectService, config) { window.open(url,'meri-plan-report'); }; + self.meriPlanChanges = function() { + var url = config.meriPlanChangesUrl; + window.open(url,'meri-planchanges-report'); + }; + + self.isPlanEditable = function() { + return projectService.isEditable(); + } + self.unlockPlanForCorrection = function () { var $declaration = $(config.declarationModalSelector); @@ -255,8 +265,7 @@ function MERIPlan(project, projectService, config) { self.cancelProjectDetailsEdits = function () { self.meriPlan().cancelAutosave(); - - document.location.reload(true); + self.unlockPlanAndReload("Reloading project..."); }; self.isProjectDetailsSaved = ko.computed(function () { @@ -383,6 +392,15 @@ function MERIPlan(project, projectService, config) { self.removeMonitoringIndicator = function(row) { self.meriPlan().monitoring.removeRow(row); } + /** Called by the extendedBaselineMonitoring template to remove any monitoring indicators associated with a + * removed baseline */ + self.removeBaseline = function(baseline) { + var code = ko.utils.unwrapObservable(baseline.code); + self.meriPlan().monitoring.rows.remove(function(row) { + return ko.utils.unwrapObservable(row.relatedBaseline) == code; + }); + self.meriPlan().baseline.removeRow(baseline); + } self.addKEQ = function () { self.meriPlan().keq.rows.push(new GenericRowViewModel()); }; @@ -469,6 +487,10 @@ function MERIPlan(project, projectService, config) { self.saveMeriPlan(false); }; + self.saveMeriPlanAndUnlock = function() { + self.saveMeriPlan(false, true); + } + self.selectedOutcomes = ko.pureComputed(function() { var outcomes = []; @@ -484,17 +506,40 @@ function MERIPlan(project, projectService, config) { return $(''+outcome.text+' - ' + (description || 'No outcome statement supplied') +''); } + self.unlockPlanAndReload = function(message) { + blockUIWithMessage(message); + window.location.href = config.removeMeriPlanEditLockUrl; + }; + // Save project details - self.saveMeriPlan = function(enableSubmit){ + self.saveMeriPlan = function(enableSubmit, unlock){ var meriPlan = self.meriPlan(); meriPlan.status('active'); meriPlan.lastUpdated = new Date().toISOStringNoMillis(); + + var valid = false; + // Only mark the plan as finished if the user has ticked the checkbox and the validation routine passes. + meriPlan.progress = ActivityProgress.started; + var markedAsFinished = meriPlan.markAsFinished(); + if (markedAsFinished) { + valid = $('#project-details-validation').validationEngine('validate'); + meriPlan.markAsFinished(valid); + meriPlan.progress = valid ? ActivityProgress.finished : ActivityProgress.started; + } blockUIWithMessage("Saving MERI Plan..."); + meriPlan.saveWithErrorDetection(function() { + if (!valid && markedAsFinished && !enableSubmit) { + bootbox.alert("Your MERI plan cannot be marked as complete until all validation errors are resolved"); + } + if (unlock) { + if (!markedAsFinished || valid) { + self.unlockPlanAndReload("MERI Plan saved and unlocked. Reloading project..."); + } + } if(enableSubmit) { - var valid = $('#project-details-validation').validationEngine('validate'); if (valid) { blockUIWithMessage("Submitting MERI Plan..."); self.submitChanges(); @@ -518,6 +563,32 @@ function MERIPlan(project, projectService, config) { }; + self.applyAutoSave = function() { + autoSaveModel( + self.meriPlan(), + config.projectUpdateUrl, + { + storageKey: config.meriStorageKey || 'meriPlan-' + project.projectId, + autoSaveIntervalInSeconds: config.autoSaveIntervalInSeconds || 60, + restoredDataWarningSelector: '#restoredData', + resultsMessageSelector: '.save-details-result-placeholder', + timeoutMessageSelector: '#timeoutMessage', + errorMessage: "Failed to save MERI Plan: ", + successMessage: 'MERI Plan saved', + preventNavigationIfDirty: true, + defaultDirtyFlag: ko.dirtyFlag, + dirtyFlagRateLimitMs: 500, + healthCheckUrl: config.healthCheckUrl + }); + } + + if (!projectService.isProjectDetailsLocked()) { + // This was in DetailsViewModel to support the (never released) MERI plan load function. + // It's been moved back here as having in the DetailsViewModel was causing issues with the new MERI + // plan because orphaned services get detected as dirty and the user is prompted to save them, even when + // the page is in read only mode. + self.applyAutoSave(); + } var $floatingSave = $('#floating-save'); var floatingSaveVisible = false; function checkSaveStatus(dirty) { @@ -606,7 +677,7 @@ function MERIPlan(project, projectService, config) { }; } -function ReadOnlyMeriPlan(project, projectService, config) { +function ReadOnlyMeriPlan(project, projectService, config, changed) { var self = this; if (!project.custom) { project.custom = {}; @@ -641,6 +712,9 @@ function ReadOnlyMeriPlan(project, projectService, config) { } else if (projectService.isSubmitted()) { result = {text: 'This plan has been submitted for approval', badgeClass: 'badge-info'}; } + else if (!projectService.isPlanComplete()) { + result = {text: 'This plan has not been completed', badgeClass: 'badge-warning'}; + } } return result; }); @@ -649,6 +723,10 @@ function ReadOnlyMeriPlan(project, projectService, config) { self.isProjectDetailsLocked = ko.computed(function () { return projectService.isProjectDetailsLocked(); }); + + self.editMeriPlan = function() { + window.location.href = config.editMeriPlanUrl; + }; var riskModel; if (config.useRlpRisksModel) { riskModel = rlpRiskModel(); @@ -687,24 +765,32 @@ function ReadOnlyMeriPlan(project, projectService, config) { * @returns {string} A string containing the labels for the scoreIds */ self.targetMeasureLabels = function(scoreIds) { - var result = ''; + var labels = []; + scoreIds = ko.utils.unwrapObservable(scoreIds); for (var i=0; i maxCodeNumber) { + maxCodeNumber = num; + } + } + } + return codePrefix+(maxCodeNumber+1); + } function newObj() { var obj = {}; if (codePrefix) { - obj.code = codePrefix + (self.rows().length+1); + obj.code = nextCode(); } return obj; } diff --git a/grails-app/assets/javascripts/projectService.js b/grails-app/assets/javascripts/projectService.js index f84bab31e..e430dca7b 100644 --- a/grails-app/assets/javascripts/projectService.js +++ b/grails-app/assets/javascripts/projectService.js @@ -15,7 +15,7 @@ ProjectStatus = { }; PROJECT_EXTERNAL_ID_TYPES = [ - 'TECH_ONE_CODE', 'INTERNAL_ORDER_NUMBER', 'GRANT_AWARD', 'RELATED_PROJECT' + 'TECH_ONE_CODE', 'INTERNAL_ORDER_NUMBER', 'GRANT_AWARD', 'RELATED_PROJECT', 'TECH_ONE_CONTRACT_NUMBER' ]; /** @@ -235,6 +235,10 @@ function ProjectService(project, options) { }); }; + self.isEditable = function() { + return (project.planStatus == PlanStatus.NOT_APPROVED || !project.planStatus); + } + self.isSubmittedOrApproved = function() { return (project.planStatus == PlanStatus.APPROVED || project.planStatus == PlanStatus.SUBMITTED); }; @@ -251,7 +255,7 @@ function ProjectService(project, options) { }; self.isProjectDetailsLocked = ko.computed(function () { - return self.isCompletedOrTerminated() || self.isSubmittedOrApproved(); + return !config.userHoldsMeriPlanLock || self.isCompletedOrTerminated() || self.isSubmittedOrApproved(); }); self.isApproved = function() { @@ -271,6 +275,10 @@ function ProjectService(project, options) { return self.areExternalIdsValid(project.externalIds); }; + self.isPlanComplete = function() { + return project.custom && project.custom.details && project.custom.details.progress == ActivityProgress.finished; + } + /** The list of external ids needs to include at least one SAP Internal Order or one Tech One Project Code */ self.areExternalIdsValid = function(externalIds) { var requiredIdTypes = ['INTERNAL_ORDER_NUMBER', 'TECH_ONE_CODE']; @@ -327,6 +335,7 @@ function ProjectService(project, options) { approvedPlans.push( { openMeriPlanUrl: config.viewHistoricalMeriPlanUrl+"?documentId="+meriPlan.documentId, + openMeriPlanChangesUrl: config.viewMeriPlanChangesUrl+"?documentId="+meriPlan.documentId, userDisplayName:meriPlan.userDisplayName, dateApproved:convertToSimpleDate(meriPlan.date, true), reason:meriPlan.reason, diff --git a/grails-app/assets/javascripts/projects.js b/grails-app/assets/javascripts/projects.js index baa888c02..abbf05790 100644 --- a/grails-app/assets/javascripts/projects.js +++ b/grails-app/assets/javascripts/projects.js @@ -22,6 +22,9 @@ //= require projectService //= require components.js //= require_self +//= require prettytextdiff/jquery.pretty-text-diff.min.js +//= require prettytextdiff/diff_match_patch.js +//= require htmldiff.js /* Utilities for managing project representations. @@ -1044,7 +1047,7 @@ function ProjectPageViewModel(project, sites, activities, organisations, userRol }; sitesViewModel.typeFilter.subscribe(function(filterValue) { - if (filterValue == 'Both') { + if (filterValue == 'All') { filterValue = ""; // Clear the search. } $sitesTable.DataTable().column(2).search(filterValue).draw(); @@ -1116,16 +1119,68 @@ function ProjectPageViewModel(project, sites, activities, organisations, userRol self.initialiseDataSets = function() { var dataSetsConfig = { + services: config.services, dataSetsSelector: config.dataSetsSelector || '#project-data-sets', newDataSetUrl: config.newDataSetUrl, editDataSetUrl: config.editDataSetUrl, deleteDataSetUrl: config.deleteDataSetUrl, viewDataSetUrl: config.viewDataSetUrl, - returnToUrl: config.returnToUrl + returnToUrl: config.returnToUrl, + reports: project.reports || [], + viewReportUrl: config.viewReportUrl }; var projectService = new ProjectService({}, config); var viewModel = new DataSetsViewModel(project.custom && project.custom.dataSets, projectService, dataSetsConfig); ko.applyBindings(viewModel, $(dataSetsConfig.dataSetsSelector)[0]); + + var dataTableConfig = { + columnDefs: [ + { + target: 0, + sortable: false + }, + { + target: 1, + sortable: true + }, + { + target: 2, + visible: true + }, + { + target: 4, + sortable: true, + orderData: 5 + }, + { + target: 5, + visible: false, + searchable: false + }, + { + target: 6, + sortable:true, + orderData: 7 + }, + { + target: 7, + visible: false, + searchable: false + }, + + ], + order: [4, 'desc'] + }; + if (!viewModel.supportsDateColumn) { + dataTableConfig.columnDefs[2].visible = false; + dataTableConfig.columnDefs[3].visible = false; + dataTableConfig.columnDefs[5].visible = false; + dataTableConfig.columnDefs[6].visible = false; + dataTableConfig.order = [1, 'asc']; + } + + $(dataSetsConfig.dataSetsSelector).find('table').dataTable(dataTableConfig); + }; self.initialiseAdminTab = function() { @@ -1133,8 +1188,12 @@ function ProjectPageViewModel(project, sites, activities, organisations, userRol var meriPlanSection = document.getElementById("edit-meri-plan"); if (meriPlanSection) { ko.applyBindings(self.meriPlan, meriPlanSection); - self.meriPlan.meriPlan().dirtyFlag.reset(); - self.meriPlan.attachFloatingSave(); + // The dirty flag is only attached if the MERI plan is in edit mode. + if (self.meriPlan.meriPlan().dirtyFlag) { + self.meriPlan.meriPlan().dirtyFlag.reset(); + self.meriPlan.attachFloatingSave(); + } + } // When the MERI plan is approved, the announcements move to their own section, otherwise they diff --git a/grails-app/assets/javascripts/sites.js b/grails-app/assets/javascripts/sites.js index 0249afcbe..c74a78867 100644 --- a/grails-app/assets/javascripts/sites.js +++ b/grails-app/assets/javascripts/sites.js @@ -994,6 +994,18 @@ var SitesViewModel = function(sites, map, mapFeatures, isUserEditor, projectId) if (!site.type) { site.type = 'worksArea'; } + site.filterType = 'P'; + site.filterTypeLabel = 'Planning site'; + if (site.type === 'compound') { + site.filterType = 'R'; + site.filterTypeLabel = 'Reporting site'; + } + else if (site.externalIds && site.externalIds[0] && site.externalIds[0].idType == 'MONITOR_PLOT_GUID') { + site.filterType = 'E'; + site.filterTypeLabel = 'Site created via EMSA protocol using the Monitor App'; + } + + site.readOnly = site.type == 'compound' || PublicationStatus.isReadOnly(site.publicationStatus); return site; }); self.selectedSiteIds = ko.computed(function() { @@ -1028,7 +1040,7 @@ var SitesViewModel = function(sites, map, mapFeatures, isUserEditor, projectId) } return ''; }; - self.typeOptions = ['Both', 'P', 'R']; + self.typeOptions = ['All', 'P', 'R', 'E']; self.typeFilter = ko.observable(self.typeOptions[0]); // Animation callbacks for the lists @@ -1159,7 +1171,7 @@ var SitesViewModel = function(sites, map, mapFeatures, isUserEditor, projectId) }; this.editSite = function (site) { if (site.type != 'compound') { - var url = fcConfig.siteEditUrl + '/' + site.siteId + '?returnTo=' + encodeURIComponent(fcConfig.returnTo); + var url = fcConfig.siteEditUrl + '/' + site.siteId; document.location.href = url; } else { @@ -1184,9 +1196,9 @@ var SitesViewModel = function(sites, map, mapFeatures, isUserEditor, projectId) }); }; this.viewSite = function (site) { - var url = fcConfig.siteViewUrl + '/' + site.siteId + '?returnTo=' + encodeURIComponent(fcConfig.returnTo); + var url = fcConfig.siteViewUrl + '/' + site.siteId; if (projectId) { - url += '&projectId='+projectId; + url += '?projectId='+projectId; } document.location.href = url; }; diff --git a/grails-app/assets/stylesheets/dataSets.css b/grails-app/assets/stylesheets/dataSets.css index 85d71f872..1ddf4e35e 100644 --- a/grails-app/assets/stylesheets/dataSets.css +++ b/grails-app/assets/stylesheets/dataSets.css @@ -6,21 +6,41 @@ *= require_self */ -table td.actions, table th.actions { - width:10%; +table.dataset-summary td.actions, table.dataset-summary th.actions { + width:3em; } -table td.dataset-name, table th.dataset-name { +table.dataset-summary td.dataset-name, table.dataset-summary th.dataset-name { width:65%; } -table td.report-start, table th.report-start { +table.dataset-summary td.report-start, table.dataset-summary th.report-start { width:15%; } -div.otherPriority { - margin-top: 10px; + +table.dataset-summary td.dataset-progress, table.dataset-summary th.dataset-progress { + width:10em; +} + +table.dataset-summary-with-dates td.actions, table.dataset-summary-with-dates th.actions { + width:3em; +} +table.dataset-summary-with-dates td.dataset-name, table.dataset-summary-with-dates th.dataset-name { + width:30%; } -table td.dataset-progress, table th.dataset-progress { + +table.dataset-summary-with-dates td.service, table.dataset-summary-with-dates th.service { + width:20%; +} +table.dataset-summary-with-dates td.report, table.dataset-summary-with-dates th.report { + width:20%; +} +table.dataset-summary td.dataset-progress, table.dataset-summary th.dataset-progress { width:10em; } + #dataCollectionOngoingDiv { margin-top: 10px; } + +div.otherPriority, div.other { + margin-top: 5px; +} \ No newline at end of file diff --git a/grails-app/assets/stylesheets/meriplan.css b/grails-app/assets/stylesheets/meriplan.css index 9482b5573..d952e67c3 100644 --- a/grails-app/assets/stylesheets/meriplan.css +++ b/grails-app/assets/stylesheets/meriplan.css @@ -114,6 +114,9 @@ table tr.header th { .meri-plan .document-url { width: 20%; + white-space: pre-wrap; + word-break: break-word; + word-wrap: break-word; } .meri-plan .service { @@ -508,4 +511,9 @@ input#changeProjectStartDate { .meri-plan .textarea-view { white-space: pre-wrap; +} + +.meri-plan .meriList { + margin-left: 0; + padding-left: 1rem; } \ No newline at end of file diff --git a/grails-app/assets/stylesheets/project.css b/grails-app/assets/stylesheets/project.css index 3b56b5aa3..3cfdd9b10 100644 --- a/grails-app/assets/stylesheets/project.css +++ b/grails-app/assets/stylesheets/project.css @@ -13,6 +13,7 @@ *= require blog *= require dataSets *= require activity.css +*= require prettytextdiff/pretty_text_diff_basic.css *= require_self */ @@ -350,4 +351,9 @@ li.select2-search input { .project-config-warning { color: orange; +} + +.meri-buttons .btn { + float: right; + margin-left: 5px; } \ No newline at end of file diff --git a/grails-app/conf/application.groovy b/grails-app/conf/application.groovy index 1f467b699..e4572a068 100644 --- a/grails-app/conf/application.groovy +++ b/grails-app/conf/application.groovy @@ -272,7 +272,7 @@ environments { ecodata.baseUrl = 'http://localhost:8080/ws/' upload.images.url = grails.serverURL+'/image/' upload.images.path = "~/data/${appName}/images/" - emailFilter = /[A-Z0-9._%-]+@csiro\.au|chris\.godwin\.ala@gmail.com/ + emailFilter = /[A-z0-9._%-]+@csiro\.au|chris\.godwin\.ala@gmail.com|[A-z0-9._%-]+@dcceew\.gov\.au/ logging.dir = '.' ecodata.service.url = 'http://localhost:8080/ws' espSupportEmail='ESPmonitoring@environment.gov.au' diff --git a/grails-app/conf/spring/resources.groovy b/grails-app/conf/spring/resources.groovy index fb9fe24c8..082f11924 100644 --- a/grails-app/conf/spring/resources.groovy +++ b/grails-app/conf/spring/resources.groovy @@ -2,6 +2,7 @@ import au.org.ala.merit.hub.HubAwareLinkGenerator import au.org.ala.merit.StatisticsFactory import au.org.ala.merit.CheckRisksAndThreatsTask +import au.org.ala.merit.reports.NHTOutputReportLifecycleListener import au.org.ala.merit.util.ProjectGroupingHelper // Place your Spring DSL code here @@ -17,4 +18,7 @@ beans = { checkForRisksAndThreatsTask(CheckRisksAndThreatsTask) projectGroupingHelper(ProjectGroupingHelper) + + // The non-standard case is used because the name is derived from the activity type + NHTOutputReport(NHTOutputReportLifecycleListener) } diff --git a/grails-app/controllers/au/org/ala/merit/DataSetController.groovy b/grails-app/controllers/au/org/ala/merit/DataSetController.groovy index 70805226c..3dc6b3c84 100644 --- a/grails-app/controllers/au/org/ala/merit/DataSetController.groovy +++ b/grails-app/controllers/au/org/ala/merit/DataSetController.groovy @@ -2,6 +2,7 @@ package au.org.ala.merit import au.org.ala.merit.PreAuthorise import au.org.ala.merit.ProjectService +import au.org.ala.merit.config.ProgramConfig import grails.converters.JSON import org.springframework.http.HttpStatus @@ -28,7 +29,7 @@ class DataSetController { if (!project) { return [projectId:projectId, project: null] } - Map config = projectService.getProgramConfiguration(project) + ProgramConfig config = projectService.getProgramConfiguration(project) String programName = config.program?.name ?: project.associatedSubProgram List outcomes = projectService.getAllProjectOutcomes(project) if (!outcomes) { @@ -47,11 +48,48 @@ class DataSetController { if (!priorities) { priorities = ['n/a'] } - if (priorities){ - priorities << 'Other' + + + List outcomeGroups = [] + List projectServices = projectService.getProjectServices(project) + project.outputTargets?.each { Map outputTarget -> + if (outputTarget.outcomeTargets) { + Map service = projectServices.find{it.scores?.find{score -> score.scoreId == outputTarget.scoreId}} + if (service) { + outputTarget.outcomeTargets.each { + outcomeGroups << [ + serviceId: service.id, + service: service.name, + outcomes:it.relatedOutcomes, + label:service.name+" "+it.relatedOutcomes + ] + } + } + else { + log.warn("No service found for scoreId ${outputTarget.scoreId} in project ${project.projectId}") + } + } + } + outcomeGroups = outcomeGroups.findAll{it.outcomes}.unique{it.label}.sort{it.label} + + List projectBaselines = projectService.listProjectBaselines(project) + projectBaselines = projectBaselines?.collect{ + // Only projects used the 2023 revision of the MERI plan will have a code attribute for their baselines + String label = it.code ? it.code + ' - '+ it.baseline : it.baseline + String value = it.code ?: it.baseline + [label:label, value: value] + } + + List projectProtocols = projectService.listProjectProtocols(project).collect{ + [label:it.name, value:it.externalId] } + projectProtocols << [label:'Other', value:'other'] + + List dataSetNames = project.custom?.dataSets?.collect{it.name} - [projectId:projectId, programName:programName, priorities:priorities, outcomes: outcomes, project:project] + [projectId:projectId, programName:programName, supportsOutcomeTargets:config.supportsOutcomeTargets(), + priorities:priorities, outcomes: outcomes, project:project, projectOutcomes:outcomeGroups, + projectBaselines:projectBaselines, projectProtocols:projectProtocols, dataSetNames:dataSetNames] } // Note that authorization is done against a project, so the project id must be supplied to the method. @@ -60,6 +98,10 @@ class DataSetController { Map projectData = projectData(id) Map dataSet = projectData.project?.custom?.dataSets?.find{it.dataSetId == dataSetId} + if (dataSet) { + projectData.dataSetNames?.remove(dataSet.name) + } + if (!dataSet) { render status: HttpStatus.NOT_FOUND } diff --git a/grails-app/controllers/au/org/ala/merit/ManagementUnitController.groovy b/grails-app/controllers/au/org/ala/merit/ManagementUnitController.groovy index 409e5befc..966297fd3 100644 --- a/grails-app/controllers/au/org/ala/merit/ManagementUnitController.groovy +++ b/grails-app/controllers/au/org/ala/merit/ManagementUnitController.groovy @@ -1,23 +1,14 @@ package au.org.ala.merit import au.org.ala.merit.command.EditManagementUnitReportCommand -import au.org.ala.merit.command.ManagementUnitReportCommand import au.org.ala.merit.command.PrintManagementUnitReportCommand import au.org.ala.merit.command.SaveReportDataCommand import au.org.ala.merit.command.ViewManagementUnitReportCommand import au.org.ala.merit.util.ProjectGroupingHelper import grails.converters.JSON import grails.core.GrailsApplication -import grails.plugin.cache.Cacheable import grails.web.mapping.LinkGenerator import org.apache.http.HttpStatus - -import java.text.DateFormat -import java.text.ParseException -import java.text.SimpleDateFormat - -import static ReportService.ReportMode - /** * Processes requests relating to MUs */ @@ -29,7 +20,6 @@ class ManagementUnitController { ReportService reportService ActivityService activityService - PdfGenerationService pdfGenerationService ProjectService projectService ProjectGroupingHelper projectGroupingHelper @@ -239,19 +229,6 @@ class ManagementUnitController { chain(action:'editReport', id:id, params:[reportId:reportId]) } - private Map activityReportModel(String managementUnitId, String reportId, ReportMode mode, Integer formVersion = null) { - Map mu = managementUnitService.get(managementUnitId) - Map config = mu.config - Map model = reportService.activityReportModel(reportId, mode, formVersion) - - model.context = mu - model.returnTo = createLink(action:'index', id:managementUnitId) - model.contextViewUrl = model.returnTo - model.reportHeaderTemplate = '/managementUnit/managementUnitReportHeader' - model.config = config - model - } - @PreAuthorise(accessLevel = 'readOnly', redirectController = 'managementUnit') def viewReport(ViewManagementUnitReportCommand cmd) { if (cmd.hasErrors()) { @@ -262,38 +239,15 @@ class ManagementUnitController { render model:cmd.model, view:'/activity/activityReportView' } - @PreAuthorise(accessLevel = 'readOnly', redirectController = 'managementUnit') - def reportPDF(String id, String reportId) { - - if (!id || !reportId) { - error('An invalid report was selected for download', id) + @PreAuthorise(accessLevel = 'readOnly') + def printManagementUnitReport(PrintManagementUnitReportCommand cmd) { + if (cmd.hasErrors()) { + error(cmd.errors.toString(), cmd.id) return } - Map reportUrlConfig = [action: 'viewReportCallback', id: id, params:[reportId:reportId]] - - Map pdfGenParams = [:] - if (params.orientation) { - pdfGenParams.orientation = params.orientation - } - boolean result = pdfGenerationService.generatePDF(reportUrlConfig, pdfGenParams, response) - if (!result) { - render view: '/error', model: [error: "An error occurred generating the project report."] - } - } - /** - * This is designed as a callback from the PDF generation service. It produces a HTML report that will - * be converted into PDF. - * @param id the project id - */ - def viewReportCallback(PrintManagementUnitReportCommand cmd) { + render model:cmd.model, view:'/activity/activityReportView' - if (pdfGenerationService.authorizePDF(request)) { - render view:'/activity/activityReportView', model:cmd.model - } - else { - render status:HttpStatus.SC_UNAUTHORIZED - } } @PreAuthorise(accessLevel = 'editor') @@ -396,39 +350,6 @@ class ManagementUnitController { render featureCollection as JSON } - @PreAuthorise(accessLevel='siteReadOnly') - def generateReportsInPeriod(){ - - String startDate = params.fromDate - String endDate = params.toDate - - try{ - - def user = userService.getUser() - def extras =[:] - extras.summaryFlag = params.summaryFlag - - String email = user.userName - extras.put("systemEmail", grailsApplication.config.getProperty('fieldcapture.system.email.address')) - extras.put("senderEmail", grailsApplication.config.getProperty('fieldcapture.system.email.address')) - extras.put("email", email) - - String reportDownloadBaseUrl= grailsLinkGenerator.link(controller:'download',action:'get', absolute: true) - extras.put("reportDownloadBaseUrl", reportDownloadBaseUrl) - - def resp = managementUnitService.generateReports(startDate, endDate,extras) - render resp as JSON - - }catch (ParseException e){ - def message = [message: 'Error: You need to provide startDate and endDate in the format of yyyy-MM-dd '] - response.setContentType("application/json") - render message as JSON - }catch(Exception e){ - def message = [message: 'Fatal: '+ e.message] - render message as JSON - } - } - /** * Star or unstar a management unit for a user * Action is determined by the URI endpoint, either: /add | /remove diff --git a/grails-app/controllers/au/org/ala/merit/OrganisationController.groovy b/grails-app/controllers/au/org/ala/merit/OrganisationController.groovy index 8336de9db..1ee5634d3 100644 --- a/grails-app/controllers/au/org/ala/merit/OrganisationController.groovy +++ b/grails-app/controllers/au/org/ala/merit/OrganisationController.groovy @@ -1,6 +1,7 @@ package au.org.ala.merit import au.org.ala.merit.command.EditOrganisationReportCommand +import au.org.ala.merit.command.PrintOrganisationReportCommand import au.org.ala.merit.command.SaveReportDataCommand import au.org.ala.merit.command.ViewOrganisationReportCommand import au.org.ala.merit.util.ProjectGroupingHelper @@ -103,7 +104,7 @@ class OrganisationController { Map projectGroups = projectGroupingHelper.groupProjectsByProgram(projects, programGroups, ["organisationId:"+organisation.organisationId], true) [about : [label: 'About', visible: true, stopBinding: false, type:'tab', default:!reportingVisible, displayedPrograms:projectGroups.displayedPrograms, servicesDashboard:[visible:true]], - projects : [label: 'Reporting', template:"/shared/projectListByProgram", visible: reportingVisible, stopBinding:true, default:reportingVisible, type: 'tab', reports:organisation.reports, adHocReportTypes:adHocReportTypes, reportOrder:reportOrder, hideDueDate:true, displayedPrograms:projectGroups.displayedPrograms], + projects : [label: 'Reporting', template:"/shared/projectListByProgram", visible: reportingVisible, stopBinding:true, default:reportingVisible, type: 'tab', reports:organisation.reports, adHocReportTypes:adHocReportTypes, reportOrder:reportOrder, hideDueDate:true, displayedPrograms:projectGroups.displayedPrograms, reportsFirst:true, declarationType:SettingPageType.RDP_REPORT_DECLARATION], sites : [label: 'Sites', visible: reportingVisible, type: 'tab', stopBinding:true, projectCount:organisation.projects?.size()?:0, showShapefileDownload:hasAdminAccess], dashboard : [label: 'Dashboard', visible: reportingVisible, stopBinding:true, type: 'tab', template:'/shared/dashboard', reports:dashboardReports], admin : [label: 'Admin', visible: hasAdminAccess, type: 'tab', template:'admin', showEditAnnoucements:showEditAnnoucements, availableReportCategories:availableReportCategories]] @@ -249,7 +250,7 @@ class OrganisationController { } } - @PreAuthorise(accessLevel = 'admin') + @PreAuthorise(accessLevel = 'admin', projectIdParam = 'entityId') def addUserAsRoleToOrganisation() { String userId = params.userId String organisationId = params.entityId @@ -268,7 +269,7 @@ class OrganisationController { } } - @PreAuthorise(accessLevel = 'admin') + @PreAuthorise(accessLevel = 'admin', projectIdParam = 'entityId') def removeUserWithRoleFromOrganisation() { String userId = params.userId String role = params.role @@ -498,7 +499,22 @@ class OrganisationController { } if (cmd.report.type == ReportService.PERFORMANCE_MANAGEMENT_REPORT) { - viewOrEditOrganisationReport(cmd.report, false) + viewOrEditOrganisationReport(cmd.model, false) + } + else { + render model:cmd.model, view:'/activity/activityReportView' + } + } + + @PreAuthorise(accessLevel = 'readOnly') + def printOrganisationReport(PrintOrganisationReportCommand cmd) { + if (cmd.hasErrors()) { + error(cmd.errors.toString(), cmd.id) + return + } + + if (cmd.report.type == ReportService.PERFORMANCE_MANAGEMENT_REPORT) { + viewOrEditOrganisationReport(cmd.model, false) } else { render model:cmd.model, view:'/activity/activityReportView' @@ -544,19 +560,20 @@ class OrganisationController { render result as JSON } - private def viewOrEditOrganisationReport(Map report, Boolean edit) { - int version = report.toDate < "2017-01-01T00:00:00Z" ? 1 : 2 - Map organisation = organisationService.get(report.organisationId) - if (organisationService.isUserAdminForOrganisation(report.organisationId)) { - Map model = reportService.performanceReportModel(report.reportId, version) + private def viewOrEditOrganisationReport(Map cmdModel, Boolean edit) { + int version = cmdModel.report.toDate < "2017-01-01T00:00:00Z" ? 1 : 2 + Map organisation = organisationService.get(cmdModel.report.organisationId) + if (organisationService.isUserAdminForOrganisation(cmdModel.report.organisationId)) { + Map model = reportService.performanceReportModel(cmdModel.report.reportId, version) model.state = organisation.state ?: 'Unknown' model.organisation = organisation - if (reportService.excludesNotApproved(model.report)) { model.submittingUserName = authService.getUserForUserId(model.report.submittedBy)?.displayName ?: 'Unknown user' model.submissionDate = DateUtils.displayFormatWithTime(model.report.dateSubmitted) edit = false } + + model.printView = (cmdModel.printView) ? cmdModel.printView : false String view = edit ? '/report/performanceReport' : '/report/performanceReportView' render view: view, model:model @@ -567,26 +584,6 @@ class OrganisationController { } } - def performanceReportPDF(String reportId) { - Map report = reportService.get(reportId) - - if (organisationService.isUserAdminForOrganisation(report.organisationId)) { - - int version = report.toDate < "2017-01-01T00:00:00Z" ? 1 : 2 - Map model = reportService.performanceReportModel(reportId, version) - model.edit = false - - String page = g.include(controller:'organisation', action:'viewOrganisationReport', id:reportId, params:[reportId:reportId]) - - response.setContentType('application/pdf') - pdfConverterService.convertToPDF(page, response.outputStream) - } - else { - flash.message = "You don't have permission to view the report" - chain(action:'index', id: report.organisationId) - } - } - @PreAuthorise(accessLevel = 'admin') def createAdHocReport(String id) { diff --git a/grails-app/controllers/au/org/ala/merit/ProgramController.groovy b/grails-app/controllers/au/org/ala/merit/ProgramController.groovy index ead346b14..f28b01ec3 100644 --- a/grails-app/controllers/au/org/ala/merit/ProgramController.groovy +++ b/grails-app/controllers/au/org/ala/merit/ProgramController.groovy @@ -1,5 +1,6 @@ package au.org.ala.merit +import au.org.ala.merit.command.PrintProgramReportCommand import au.org.ala.merit.command.SaveReportDataCommand import grails.converters.JSON import org.apache.http.HttpStatus @@ -15,7 +16,6 @@ class ProgramController { def programService, documentService, userService, roleService, commonService, webService, siteService ReportService reportService ActivityService activityService - PdfGenerationService pdfGenerationService BlogService blogService ManagementUnitService managementUnitService @@ -336,39 +336,15 @@ class ProgramController { render model:model, view:'/activity/activityReportView' } - @PreAuthorise(accessLevel = 'editor') - def reportPDF(String id, String reportId) { - - if (!id || !reportId) { - error('An invalid report was selected for download', id) + @PreAuthorise(accessLevel = 'readOnly') + def printProgramReport(PrintProgramReportCommand cmd) { + if (cmd.hasErrors()) { + error(cmd.errors.toString(), cmd.id) return } - Map reportUrlConfig = [action: 'viewReportCallback', id: id, params:[reportId:reportId]] - - Map pdfGenParams = [:] - if (params.orientation) { - pdfGenParams.orientation = params.orientation - } - boolean result = pdfGenerationService.generatePDF(reportUrlConfig, pdfGenParams, response) - if (!result) { - render view: '/error', model: [error: "An error occurred generating the project report."] - } - } - /** - * This is designed as a callback from the PDF generation service. It produces a HTML report that will - * be converted into PDF. - * @param id the project id - */ - def viewReportCallback(String id, String reportId) { + render model:cmd.model, view:'/activity/activityReportView' - if (pdfGenerationService.authorizePDF(request)) { - Map model = activityReportModel(id, reportId, ReportMode.PRINT) - render view:'/activity/activityReportView', model:model - } - else { - render status:HttpStatus.SC_UNAUTHORIZED - } } @PreAuthorise(accessLevel = 'editor') diff --git a/grails-app/controllers/au/org/ala/merit/ProjectController.groovy b/grails-app/controllers/au/org/ala/merit/ProjectController.groovy index 1201add06..9f3709853 100644 --- a/grails-app/controllers/au/org/ala/merit/ProjectController.groovy +++ b/grails-app/controllers/au/org/ala/merit/ProjectController.groovy @@ -1,11 +1,13 @@ package au.org.ala.merit +import au.org.ala.merit.command.MeriPlanChangesReportCommand import au.org.ala.merit.command.MeriPlanReportCommand import au.org.ala.merit.command.ProjectSummaryReportCommand import au.org.ala.merit.command.ReportCommand import au.org.ala.merit.command.SaveReportDataCommand import au.org.ala.merit.config.ProgramConfig import au.org.ala.merit.config.ReportConfig +import au.org.ala.merit.reports.ReportLifecycleListener import au.org.ala.merit.reports.ReportGenerationOptions import grails.converters.JSON import grails.core.GrailsApplication @@ -31,14 +33,15 @@ class ProjectController { static String MERI_PLAN_TEMPLATE = "meriPlan" def projectService, metadataService, commonService, activityService, userService, webService, roleService - def siteService, documentService, reportService, blogService, pdfGenerationService + def siteService, documentService, reportService, blogService GrailsApplication grailsApplication + LockService lockService private def espOverview(Map project, Map user, ProgramConfig config) { Map projectArea = null if (project.sites) { - projectArea = project.sites?.find({ it.type == 'projectArea' }) + projectArea = project.sites?.find({ it.type == SiteService.SITE_TYPE_PROJECT_AREA }) if (!projectArea) { projectArea = project.sites[0] } @@ -101,7 +104,10 @@ class ProjectController { } else { project.sites?.sort { it.name } project.projectSite = project.sites?.find { it.siteId == project.projectSiteId } - def roles = roleService.getRoles() + List roles = roleService.getRoles() + if (config.supportsParatoo) { + roles = roles + [RoleService.PROJECT_SURVEYOR_ROLE] + } def members = projectService.getMembersForProjectId(id) def admins = members.findAll { it.role == "admin" }.collect { it.userName }.join(",") @@ -160,6 +166,7 @@ class ProjectController { def meriPlanEnabled = user?.hasViewAccess || ((project.associatedProgram == 'National Landcare Programme' && project.associatedSubProgram == 'Regional Funding')) def meriPlanVisibleToUser = project.planStatus == 'approved' || user?.isAdmin || user?.isCaseManager || user?.hasViewAccess boolean userHasViewAccess = user?.hasViewAccess ?: false + boolean showMeriPlanComparison = config.supportsMeriPlanComparison def publicImages = project.documents.findAll { it.public == true && it.thirdPartyConsentDeclarationMade == true && it.type == 'image' @@ -185,6 +192,9 @@ class ProjectController { boolean adminTabVisible = user?.isEditor || user?.isAdmin || user?.isCaseManager || user?.hasViewAccess boolean showMeriPlanHistory = config.supportsMeriPlanHistory && userService.userIsSiteAdmin() boolean datasetsVisible = config.includesContent(ProgramConfig.ProjectContent.DATA_SETS) && userHasViewAccess + if (datasetsVisible && project.custom?.dataSets) { + projectService.filterDataSetSummaries(project.custom?.dataSets) + } def model = [overview : [label: 'Overview', visible: true, default: true, type: 'tab', publicImages: imagesModel, displayOutcomes: false, blog: blog, hasNewsAndEvents: hasNewsAndEvents, hasProjectStories: hasProjectStories, canChangeProjectDates: canChangeProjectDates, outcomes:project.outcomes, objectives:config.program?.config?.objectives], documents : [label: 'Documents', visible: config.includesContent(ProgramConfig.ProjectContent.DOCUMENTS), type: 'tab', user:user, template:'docs', activityPeriodDescriptor:config.activityPeriodDescriptor ?: 'Stage'], details : [label: 'MERI Plan', default: false, disabled: !meriPlanEnabled, visible: meriPlanVisible, meriPlanVisibleToUser: meriPlanVisibleToUser, risksAndThreatsVisible: canViewRisks, announcementsVisible: true, project:project, type: 'tab', template:'viewMeriPlan', meriPlanTemplate:MERI_PLAN_TEMPLATE+'View', config:config, activityPeriodDescriptor:config.activityPeriodDescriptor ?: 'Stage'], @@ -200,7 +210,7 @@ class ProjectController { else if (template == RLP_TEMPLATE) { // The RLP Project Template doesn't need site details or activities. - project.sites = new JSONArray(project.sites?.collect{new JSONObject([name:it.name, siteId:it.siteId, lastUpdated:it.lastUpdated, type:it.type, extent:[:]])} ?: []) + project.sites = new JSONArray(project.sites?.collect{new JSONObject([name:it.name, siteId:it.siteId, lastUpdated:it.lastUpdated, type:it.type, extent:[:], publicationStatus:it.publicationStatus, externalIds:it.externalIds])} ?: []) project.remove('activities') model.overview.template = 'rlpOverview' @@ -222,7 +232,8 @@ class ProjectController { model.details.visible = model.details.visible && userHasViewAccess boolean reportsVisible = config.includesContent(ProgramConfig.ProjectContent.REPORTING) && userHasViewAccess - Map reportingTab = [label: 'Reporting', visible:reportsVisible, type:'tab', template:'projectReporting', reports:project.reports, stopBinding:true, services: config.services, scores:scores, hideDueDate:true, isAdmin:user?.isAdmin, isGrantManager:user?.isCaseManager] + + Map reportingTab = [label: 'Reporting', visible:reportsVisible, type:'tab', template:'projectReporting', reports:project.reports, stopBinding:true, services: config.services, scores:scores, hideDueDate:true, isAdmin:user?.isAdmin, isGrantManager:user?.isCaseManager, declarationTemplate:config.getDeclarationTemplate()] if (reportingTab.visible) { reportingTab.reportOrder = config?.projectReports?.collect{ [category:it.category, description:it.description, banner:it.banner, rejectionReasonCategoryOptions:it.rejectionReasonCategoryOptions?:[]]}?.unique({it.category}) ?: [] @@ -242,6 +253,7 @@ class ProjectController { rlpModel.admin.hidePrograms = true rlpModel.admin.showAnnouncementsTab = false rlpModel.admin.risksAndThreatsVisible = risksAndThreatsVisible + rlpModel.admin.showMeriPlanComparison = showMeriPlanComparison model = buildRLPTargetsModel(rlpModel, project) } @@ -598,6 +610,16 @@ class ProjectController { render result as JSON } + + @PreAuthorise(accessLevel = "admin") + def lockMeriPlan(String id) { + Map result = projectService.lockMeriPlanForEditing(id) + if (result.error) { + flash.message = "An error occurred while attempting to lock the MERI Plan: ${result.error}" + } + redirect action:'index', id:id + } + @PreAuthorise(accessLevel = 'caseManager') def ajaxUnlockPlanForCorrection(String id) { def result = projectService.unlockPlanForCorrection(id, params.declaration) @@ -633,20 +655,6 @@ class ProjectController { projectSummaryReportCommand() } - @PreAuthorise(accessLevel = 'admin') - def projectReportPDF(String id) { - - Map reportUrlConfig = [controller: 'report', action: 'projectReportCallback', id: id, absolute: true, params: [fromStage: params.fromStage, toStage: params.toStage, sections: params.sections]] - Map pdfGenParams = [:] - if (params.orientation == 'landscape') { - pdfGenParams.options = '-O landscape' - } - boolean result = pdfGenerationService.generatePDF(reportUrlConfig, pdfGenParams, response) - if (!result) { - render view: '/error', model: [error: "An error occurred generating the project report."] - } - } - /** * Accepts a MERI Plan as an attached file and attempts to convert it into a format compatible with * MERIT. @@ -823,28 +831,22 @@ class ProjectController { } @PreAuthorise(accessLevel = 'editor') - def overrideLockAndEdit(String id, String reportId) { - reportService.overrideLock(reportId, g.createLink(action:'viewReport', id:id, params:[reportId:reportId], absolute: true)) - chain(action:'editReport', id:id, params:[reportId:reportId]) + def removeMeriPlanEditLock(String id) { + lockService.unlock(id) + redirect action:'index', id:id } - @PreAuthorise(accessLevel = 'readOnly') - def reportPDF(String id, String reportId) { - if (!id || !reportId || !projectService.doesReportBelongToProject(id, reportId)) { - error('An invalid report was selected for download', id) - return - } - - Map reportUrlConfig = [action: 'viewReportCallback', id: id, params:[reportId:reportId]] + @PreAuthorise(accessLevel = 'admin') + def overrideMeriPlanLockAndEdit(String id) { + String url = g.createLink(action:'index', id:id) + projectService.overrideLock(id, url) + redirect action:'index', id:id - Map pdfGenParams = [:] - if (params.orientation) { - pdfGenParams.orientation = params.orientation - } - boolean result = pdfGenerationService.generatePDF(reportUrlConfig, pdfGenParams, response) - if (!result) { - render view: '/error', model: [error: "An error occurred generating the project report."] - } + } + @PreAuthorise(accessLevel = 'editor') + def overrideLockAndEdit(String id, String reportId) { + reportService.overrideLock(reportId, g.createLink(action:'viewReport', id:id, params:[reportId:reportId], absolute: true)) + chain(action:'editReport', id:id, params:[reportId:reportId]) } @PreAuthorise(accessLevel = 'admin') @@ -857,23 +859,6 @@ class ProjectController { render result as JSON } - /** - * This is designed as a callback from the PDF generation service. It produces a HTML report that will - * be converted into PDF. - * @param id the project id - */ - def viewReportCallback(String id, String reportId) { - - if (pdfGenerationService.authorizePDF(request)) { - Map model = activityReportModel(id, reportId, ReportMode.PRINT) - - render view:'/activity/activityReportView', model:model - } - else { - render status:HttpStatus.SC_UNAUTHORIZED - } - } - @PreAuthorise(accessLevel = 'readOnly', redirectController = "home") def ajaxProjectSites(String id) { Map result = projectService.projectSites(id) @@ -881,22 +866,34 @@ class ProjectController { render result as JSON } + + private Map activityReportModel(String projectId, String reportId, ReportMode mode, Integer formVersion = null) { Map project = projectService.get(projectId) List sites = project.remove('sites') Map config = projectService.getProgramConfiguration(project) Map model = reportService.activityReportModel(reportId, mode, formVersion) + ReportLifecycleListener reportData = reportService.reportLifeCycleListener(model.activity.type) + model.metaModel = projectService.filterOutputModel(model.metaModel, project, model.activity) model.outputModels.each { k, v -> if (v.scores) { Map outputConfig = model.metaModel.outputConfig.find {it.outputName == k} - outputConfig?.outputContext = new JSONObject([scores:v.scores]) + if (!outputConfig) { + log.warn("Missing outputConfig for "+k) + } + else { + outputConfig.outputContext = new JSONObject([scores:v.scores]) + outputConfig.outputContext.putAll(reportData.getOutputData(project, outputConfig, model.report)) + } + } } model.context = new HashMap(project) + model.context.putAll(reportData.getContextData(project, model.report)) model.returnTo = g.createLink(action:'exitReport', id:projectId, params:[reportId:reportId]) model.contextViewUrl = g.createLink(action:'index', id:projectId) model.reportHeaderTemplate = '/project/rlpProjectReportHeader' @@ -1013,12 +1010,15 @@ class ProjectController { } private boolean hasTarget(value) { - value != 0 && value != "0" + if (value instanceof String) { + return value && value != "0" + } + value && value != 0 } private boolean hasFinancialYearTarget(Map targetRow) { def financialYearTarget = targetRow.financialYearTarget - financialYearTarget != 0 && financialYearTarget != "0" + hasTarget(financialYearTarget) } @PreAuthorise(accessLevel ='siteAdmin') @@ -1077,6 +1077,24 @@ class ProjectController { } } + @PreAuthorise(accessLevel = 'admin') + def viewMeriPlanChanges(MeriPlanChangesReportCommand meriPlanChangesReportCommand) { + Map model + // Only grant/project managers can view historical MERI plans. + if (meriPlanChangesReportCommand.documentId && !userService.userIsSiteAdmin()) { + render status:HttpStatus.SC_UNAUTHORIZED + } + else { + model = meriPlanChangesReportCommand.meriPlanChangesReportModel() + if (!model.error) { + render view:'/project/meriPlanChangesReport', model:model + } + else { + render status: HttpStatus.SC_NOT_FOUND + } + } + } + /** * This method returns the investment priorities listed in the primary and secondary outcome sections of the * RLP MERI plan into a single list for the purposes of pre-populating one of the RLP outcomes reporting forms. @@ -1097,8 +1115,9 @@ class ProjectController { @PreAuthorise(accessLevel = 'editor') def monitoringProtocolFormCategories() { + String MONITORING_TAG = 'survey' List forms = activityService.monitoringProtocolForms() - + forms = forms.findAll{MONITORING_TAG in it.tags} List categories = forms?.collect{ [label:g.message(code:it.category, default:it.category.capitalize()), value:it.category]}?.unique()?.sort({it.label}) render categories as JSON diff --git a/grails-app/controllers/au/org/ala/merit/ReportController.groovy b/grails-app/controllers/au/org/ala/merit/ReportController.groovy index b58c33725..fcaadfc0c 100644 --- a/grails-app/controllers/au/org/ala/merit/ReportController.groovy +++ b/grails-app/controllers/au/org/ala/merit/ReportController.groovy @@ -1,8 +1,6 @@ package au.org.ala.merit -import au.ala.org.ws.security.RequireApiKey -import au.org.ala.merit.command.MeriPlanReportCommand -import au.org.ala.merit.command.ProjectSummaryReportCommand + import au.org.ala.merit.command.Reef2050PlanActionReportCommand import au.org.ala.merit.command.Reef2050PlanActionReportSummaryCommand import grails.converters.JSON @@ -11,15 +9,22 @@ import org.joda.time.DateTime import org.joda.time.Interval import org.joda.time.Period -import static au.org.ala.merit.DashboardTagLib.* +import java.text.ParseException + +import static au.org.ala.merit.DashboardTagLib.estimateHeight class ReportController { - def webService, cacheService, searchService, metadataService, activityService, projectService, organisationService, commonService, statisticsFactory, reportService, userService, projectConfigurationService, pdfGenerationService, settingService + def webService, cacheService, searchService, metadataService, activityService, projectService, organisationService, commonService, statisticsFactory, reportService, userService, projectConfigurationService, settingService static defaultAction = "dashboard" def loadReport() { + if (!params.report) { + render status: HttpStatus.SC_BAD_REQUEST + return + } + forward action: params.report+'Report', params:params } @@ -486,58 +491,18 @@ class ReportController { render view:'_statistics', layout:'ajax', model:[statistics:statistics.statistics] } - /** - * Provides a way for the pdf generation service to callback into MERIT without requiring user credentials. - * (It uses an IP filter / API Key instead). - */ - @RequireApiKey - def projectReportCallback(String id, ProjectSummaryReportCommand projectSummaryReportCommand) { - - if (pdfGenerationService.authorizePDF(request)) { - Map model = projectSummaryReportCommand() - model.printable = 'pdf' - render view:'/project/projectReport', model: model - } - else { - render status:HttpStatus.SC_UNAUTHORIZED - } - - } - - private def reef2050PlanActionReportPDF(Reef2050PlanActionReportCommand command) { - boolean approvedActivitiesOnly = userService.userIsAlaOrFcAdmin() ? command.approvedActivitiesOnly : true - Map reportUrlConfig = [controller: 'report', action: 'reef2050PlanActionReportCallback', absolute: true, params:[approvedActivitiesOnly:approvedActivitiesOnly, periodEnd:command.periodEnd, type:command.type]] - Map pdfGenParams = [orientation:'landscape'] - - boolean result = pdfGenerationService.generatePDF(reportUrlConfig, pdfGenParams, response) - if (!result) { - render view: '/error', model: [error: "Arror generating the PDF of the Reef 2050 Plan Report"] - } - } - - @RequireApiKey - def reef2050PlanActionReportCallback(Reef2050PlanActionReportCommand command) { - if (pdfGenerationService.authorizePDF(request)) { - Map model = command.produceReport(true) - render model:model, view: 'reef2050PlanActionReportPrintable' - } - else { - render status:HttpStatus.SC_UNAUTHORIZED - } - - } - def reef2050PlanActionReport(Reef2050PlanActionReportCommand command) { - if (command.format == 'pdf') { - reef2050PlanActionReportPDF(command) - } - else if (command.format == 'dashboard') { + Map model = [:] + if (command.format == 'dashboard') { Reef2050PlanActionReportSummaryCommand summary = new Reef2050PlanActionReportSummaryCommand(activityService: command.activityService, approvedActivitiesOnly: command.approvedActivitiesOnly) - Map model = [reportConfig:summary.reportSummary().collect{it.toMap()}, approvedActivitiesOnly: command.approvedActivitiesOnly] + model = [reportConfig:summary.reportSummary().collect{it.toMap()}, approvedActivitiesOnly: command.approvedActivitiesOnly] render model: model, view: 'reef2050PlanAdminDashboardReport' } else { - Map model = command.produceReport() + model = command.produceReport() + if (command.format == 'pdf') { + model.printView = true + } render model:model, view: 'reef2050PlanActionReportPrintable' } } @@ -558,4 +523,39 @@ class ReportController { render view: '/report/_reportingHistory', model: [reportingHistory: reportingHistory] } + @PreAuthorise(accessLevel='siteReadOnly') + def generateReportsInPeriod(){ + + String startDate = params.fromDate + String endDate = params.toDate + + try{ + + def user = userService.getUser() + def extras =[:] + extras.summaryFlag = params.summaryFlag + + String email = user.userName + extras.put("hubId", SettingService.hubConfig?.hubId) + extras.put("entity", params.entity) + extras.put("systemEmail", grailsApplication.config.getProperty('fieldcapture.system.email.address')) + extras.put("senderEmail", grailsApplication.config.getProperty('fieldcapture.system.email.address')) + extras.put("email", email) + + String reportDownloadBaseUrl= grailsLinkGenerator.link(controller:'download',action:'get', absolute: true) + extras.put("reportDownloadBaseUrl", reportDownloadBaseUrl) + + def resp = reportService.generateReports(startDate, endDate,extras) + render resp as JSON + + }catch (ParseException e){ + def message = [message: 'Error: You need to provide startDate and endDate in the format of yyyy-MM-dd '] + response.setContentType("application/json") + render message as JSON + }catch(Exception e){ + def message = [message: 'Fatal: '+ e.message] + render message as JSON + } + } + } diff --git a/grails-app/controllers/au/org/ala/merit/SiteController.groovy b/grails-app/controllers/au/org/ala/merit/SiteController.groovy index 02db2615f..0a1c0da84 100644 --- a/grails-app/controllers/au/org/ala/merit/SiteController.groovy +++ b/grails-app/controllers/au/org/ala/merit/SiteController.groovy @@ -27,13 +27,14 @@ class SiteController { } def createForProject(){ - def project = projectService.getRich(params.projectId) + def project = projectService.get(params.projectId, 'all') // permissions check if (!projectService.canUserEditProject(userService.getCurrentUserId(), params.projectId)) { flash.message = "Access denied: User does not have editor permission for projectId ${params.projectId}" redirect(controller:'project', action:'index', id: params.projectId) } - render view: 'edit', model: [create:true, project:project, documents:[]] + + render view: 'edit', model: [create:true, project:project, documents:[], siteTypes:siteTypes(null, project)] } def index(String id) { @@ -46,6 +47,7 @@ class SiteController { if (!isUserMemberOfSiteProjects(site)) { flash.message = "Access denied: User does not have permission to view site: ${id}" redirect(controller:'home', action:'index') + return } List userProjects = site.projects?.findAll { projectService.canUserViewProject(user?.userId, it.projectId) } @@ -55,8 +57,8 @@ class SiteController { if (params.projectId) { selectedProject = userProjects.find{it.projectId == params.projectId} } - else if (userProjects.size() == 1) { - selectedProject = userProjects[0] + else if (userProjects.size() >= 1) { + selectedProject = userProjects[0] // Just pick a random project for context if navigation wasn't from the project. } // Filter visible activities to those the user has access to. @@ -116,11 +118,39 @@ class SiteController { flash.message = "Access denied: User does not have editor permission to edit site: ${id}" redirect(controller:'home', action:'index') } else { - if (result.site.type == SiteService.SITE_TYPE_COMPOUND) { + if (SiteService.isReadOnly(result.site)) { redirect(action:'index', id:id) } - result } + + Map site = result.site + Map project = null + // Don't allow a site to be a project area if it: + // 1) Isn't associated with a project + // 2) Is associated with more than one project. + if (site.projects && site.projects.size() == 1) { + project = projectService.get(site.projects[0], 'all') + } + result.siteTypes = siteTypes(site, project) + result + } + + /** + * Returns a List to use to render the site type dropdown. + * Projects are only allowed to have one project area, and project areas can only be associated with a + * single Project. + * + * @param project If this site is for a single project, supplying it here will allow a check whether + * the site is allowed to be a project area. + * @return + */ + private List siteTypes(Map site, Map project) { + List siteTypes = [SiteService.SITE_TYPE_WORKS_AREA, SiteService.SITE_TYPE_SURVEY_AREA] + if (site?.type == SiteService.SITE_TYPE_PROJECT_AREA || (project && !projectService.hasProjectArea(project))) { + siteTypes << SiteService.SITE_TYPE_PROJECT_AREA + } + + siteTypes.collect{[value:it, label:g.message(code:'site.type.'+it, default:it)]} } def downloadShapefile(String id) { @@ -140,6 +170,25 @@ class SiteController { } } + /** Returns geojon for a site */ + def geojson(String id) { + Map site = siteService.get(id) + if (!site) { + Map resp = [status:HttpStatus.SC_NOT_FOUND] + render resp as JSON + return + } + if (!isUserMemberOfSiteProjects(site)) { + Map resp = [status:HttpStatus.SC_UNAUTHORIZED] + render resp as JSON + return + } + + Map resp = siteService.getSiteGeoJson(site.siteId) + resp = resp?.resp ?: resp // Render the geojson directly if successful, otherwise render the ecodata response including the status + render resp as JSON + } + @PreAuthorise(accessLevel = 'editor') def ajaxDeleteSitesFromProject(String id){ @@ -154,7 +203,7 @@ class SiteController { List siteIds = payload.siteIds project?.sites?.each { site -> - if (site.type == SiteService.SITE_TYPE_COMPOUND) { + if (SiteService.isReadOnly(site)) { siteIds.remove(site.siteId) } } @@ -176,7 +225,7 @@ class SiteController { return } Map site = siteService.get(id) - if (!projectService.canUserEditProject(userService.getCurrentUserId(), projectId) || site.type == SiteService.SITE_TYPE_COMPOUND) { + if (!projectService.canUserEditProject(userService.getCurrentUserId(), projectId) || SiteService.isReadOnly(site)) { render status:403, text: "Access denied: User does not have permission to edit sites for project: ${projectId}" return } @@ -194,7 +243,7 @@ class SiteController { def ajaxDelete(String id) { // permissions check Map site = siteService.get(id) - if (!isUserMemberOfSiteProjects(site) || site.type == SiteService.SITE_TYPE_COMPOUND) { + if (!isUserMemberOfSiteProjects(site) || SiteService.isReadOnly(site)) { render status:403, text: "Access denied: User does not have permission to edit site: ${id}" return } @@ -214,7 +263,7 @@ class SiteController { log.debug("Updating site: " + id) Map site = siteService.get(id) // permissions check - if (!isUserMemberOfSiteProjects(site) || site.type == SiteService.SITE_TYPE_COMPOUND) { + if (!isUserMemberOfSiteProjects(site) || SiteService.isReadOnly(site)) { render status:403, text: "Access denied: User does not have permission to edit site: ${id}" return } @@ -238,10 +287,10 @@ class SiteController { } def siteUpload() { - String projectId = params.projectId + String projectId = params.id ?: params.projectId if (!projectService.canUserEditProject(userService.getCurrentUserId(), projectId)) { - flash.message = "Access denied: User does not have editor permission for projectId ${params.projectId}" - redirect(controller:'project', action:'index', id: params.projectId) + flash.message = "Access denied: User does not have editor permission for projectId ${projectId}" + redirect(controller:'project', action:'index', id: projectId) } else if (request.respondsTo('getFile')) { @@ -255,23 +304,23 @@ class SiteController { break case 'kmz': uploadKmz(projectId, file) - redirect(controller:'project', id:params.projectId) + redirect(controller:'project', id:projectId) return case 'kml': uploadKml(projectId, file) - redirect(controller:'project', id:params.projectId) + redirect(controller:'project', id:projectId) return default: flash.message = "Unsupported file type. Please attach a shapefile, kmz or kml file" - result = [view:'upload', model:[projectId: projectId, returnTo:params.returnTo]] + result = [view:'upload', model:[projectId: projectId]] } - result.model.putAll([projectId: projectId, returnTo:params.returnTo]) + result.model.putAll([projectId: projectId]) render result } else { - render view:'upload', model:[projectId: projectId, returnTo:params.returnTo] + render view:'upload', model:[projectId: projectId] } } @@ -320,7 +369,7 @@ class SiteController { def message ='There was an error uploading the shapefile. Please send an email to support for further assistance.' flash.message = "An error was encountered when processing the shapefile: ${message}" - return [view:'upload', model:[projectId: projectId, returnTo:params.returnTo]] + return [view:'upload', model:[projectId: projectId]] } } diff --git a/grails-app/controllers/au/org/ala/merit/UrlMappings.groovy b/grails-app/controllers/au/org/ala/merit/UrlMappings.groovy index 520e3c175..d8ade46b9 100644 --- a/grails-app/controllers/au/org/ala/merit/UrlMappings.groovy +++ b/grails-app/controllers/au/org/ala/merit/UrlMappings.groovy @@ -118,6 +118,16 @@ class UrlMappings { action = 'download' } + "/site/siteUpload/$projectId" { + controller = 'site' + action = 'upload' + } + + "/site/upload/$projectId" { + controller = 'site' + action = 'upload' + } + "500"(view:'/error') "404"(view:'/404') "/$hub/$controller/ws/$action/$id" { diff --git a/grails-app/i18n/messages.properties b/grails-app/i18n/messages.properties index 80a9b7308..586f309de 100644 --- a/grails-app/i18n/messages.properties +++ b/grails-app/i18n/messages.properties @@ -301,6 +301,7 @@ label.F= label.role.admin=Admin label.role.caseManager=Grant Manager label.role.editor=Editor +label.role.projectParticipant=Field Data Collector label.docType=Type label.project=Project label.site=Site @@ -341,10 +342,27 @@ label.externalId.GRANT_AWARD=Grant Award ID label.externalId.TECH_ONE_CODE=Tech One Project Code label.externalId.GRANT_OPPORTUNITY=Grant Opportunity ID label.externalId.RELATED_PROJECT=Related Project ID +label.externalId.TECH_ONE_CONTRACT_NUMBER=Tech One Contract Number label.merit.projectID = MERIT Project ID label.merit.externalID = External ID label.merit.grantAwardID = Grant Award ID label.merit.grantID = Grant ID -label.collapsible.heading = About: \ No newline at end of file +label.collapsible.heading = About: + +attach.document.subtitle = Please ensure that no documents containing sensitive data are uploaded. Information on what is considered sensitive ecological data can be found at +attach.document.subtitle.link = Sensitive Ecological Data Access and Management Policy - DCCEEW +attach.document.help = Sensitivities can include Personally Identifiable Information such as name, address, email and phone; or can be culturally or ecologically sensitive such as the location of sacred sites, threatened species nesting sites, or threatened plants. If in doubt, please contact your Project Manager or the MERIT Team for advice. +project.description.help = Do not include locations of "almost extinct" threatened species. + + +site.type.worksArea=Works Area +site.type.surveyArea=Survey Area +site.type.projectArea=Project Extent + +report.status.published=Report approved +report.status.pendingApproval=Report submitted +report.status.unpublished=Report not submitted +report.status.cancelled=Report not required +report.status.= \ No newline at end of file diff --git a/grails-app/services/au/org/ala/merit/ActivityService.groovy b/grails-app/services/au/org/ala/merit/ActivityService.groovy index 9d6845683..05a69046c 100644 --- a/grails-app/services/au/org/ala/merit/ActivityService.groovy +++ b/grails-app/services/au/org/ala/merit/ActivityService.groovy @@ -1,8 +1,6 @@ package au.org.ala.merit import au.org.ala.ecodata.forms.ActivityFormService -import au.org.ala.merit.DateUtils -import grails.converters.JSON import grails.plugin.cache.Cacheable import groovy.util.logging.Slf4j import org.joda.time.DateTime @@ -14,6 +12,7 @@ class ActivityService { def webService, grailsApplication, metadataService, reportService, projectService, emailService, userService ActivityFormService activityFormService + LockService lockService public static final String PROGRESS_PLANNED = 'planned' public static final String PROGRESS_FINISHED = 'finished' @@ -178,27 +177,20 @@ class ActivityService { } Map lock(String activityId) { - String path = "lock/lock/"+activityId - webService.doPost(grailsApplication.config.getProperty('ecodata.baseUrl')+path,[:]) + lockService.lock(activityId) } Map lock(Map activity) { - lock(activity.activityId) + lockService.lock(activity.activityId) } Map unlock(String activityId, Boolean force = false) { - String path = "lock/unlock/"+activityId - webService.doPost(grailsApplication.config.getProperty('ecodata.baseUrl')+path,[force:force]) + lockService.unlock(activityId, force) } void stealLock(String activityId, String activityUrl) { Map activity = get(activityId) - Map result = [error:'No lock'] - if (activity.lock) { - result = unlock(activityId, true) - emailService.sendLockStolenEmail(activity.lock, activityUrl) - } - result + lockService.stealLock(activityId, activity, activityUrl, SettingPageType.ACTIVITY_LOCK_STOLEN_EMAIL_SUBJECT, SettingPageType.ACTIVITY_LOCK_STOLEN_EMAIL) } def isReport(activity) { @@ -290,7 +282,7 @@ class ActivityService { Map resp = activityFormService.searchActivityForms(criteria) List forms = resp?.resp ?: [] - forms = forms.collect{[externalId:it.externalId, name:it.name, formVersion:it.formVersion, category:it.category]} + forms = forms.collect{[externalIds:it.externalIds, externalId:it.externalIds?.find{it.idType?.name == "MONITOR_PROTOCOL_GUID"}?.externalId, name:it.name, formVersion:it.formVersion, category:it.category, tags:it.tags]} forms } diff --git a/grails-app/services/au/org/ala/merit/EmailService.groovy b/grails-app/services/au/org/ala/merit/EmailService.groovy index 52b0132b3..57f05e670 100644 --- a/grails-app/services/au/org/ala/merit/EmailService.groovy +++ b/grails-app/services/au/org/ala/merit/EmailService.groovy @@ -151,12 +151,12 @@ class EmailService { ) } - def sendLockStolenEmail(Map lock, String url) { + def sendLockStolenEmail(Map lock, String url, SettingPageType emailSubjectTemplate, SettingPageType emailBodyTemplate) { def currentUser = userService.lookupUser(userService.currentUserId) def userHoldingLock = userService.lookupUser(lock.userId) createAndSend( - SettingPageType.LOCK_STOLEN_EMAIL_SUBJECT, - SettingPageType.LOCK_STOLEN_EMAIL, + SettingPageType.ACTIVITY_LOCK_STOLEN_EMAIL_SUBJECT, + SettingPageType.ACTIVITY_LOCK_STOLEN_EMAIL, [user:currentUser.displayName, url:url], [userHoldingLock.email], [currentUser.email], diff --git a/grails-app/services/au/org/ala/merit/ImportService.groovy b/grails-app/services/au/org/ala/merit/ImportService.groovy index 244818d2d..c3eb87124 100644 --- a/grails-app/services/au/org/ala/merit/ImportService.groovy +++ b/grails-app/services/au/org/ala/merit/ImportService.groovy @@ -667,10 +667,10 @@ class ImportService { siteService.addPhotoPoint(site.siteId, createPhotoPoint(site)) } } - if (!prj.sites?.find{it.type == 'projectArea'}) { + if (!prj.sites?.find{it.type == SiteService.SITE_TYPE_PROJECT_AREA}) { Map siteCoords = createProjectArea(prj.sites) String projectAreaSiteName = "Project area for "+prj.name - Map projectArea = [extent: [source: 'drawn', geometry: siteCoords], projects: [projectId], name: projectAreaSiteName, description: projectAreaSiteName, externalId:'', type:'projectArea', visibility:'private'] + Map projectArea = [extent: [source: 'drawn', geometry: siteCoords], projects: [projectId], name: projectAreaSiteName, description: projectAreaSiteName, externalId:'', type:SiteService.SITE_TYPE_PROJECT_AREA, visibility:'private'] siteService.create(projectArea) // Re-query the project to pick up the new project area site. @@ -732,7 +732,7 @@ class ImportService { private void createActivities(Map project) { - String projectAreaId = project.sites.find{it.type == 'projectArea'}.siteId + String projectAreaId = project.sites.find{it.type == SiteService.SITE_TYPE_PROJECT_AREA}.siteId List activitiesToCreate = [ [ type:'ESP Species', diff --git a/grails-app/services/au/org/ala/merit/LockService.groovy b/grails-app/services/au/org/ala/merit/LockService.groovy new file mode 100644 index 000000000..e4ea7fe99 --- /dev/null +++ b/grails-app/services/au/org/ala/merit/LockService.groovy @@ -0,0 +1,30 @@ +package au.org.ala.merit + +import grails.core.GrailsApplication + +/** Handles locking and unlocking of activities and projects. */ +class LockService { + + EmailService emailService + WebService webService + GrailsApplication grailsApplication + + Map lock(String entityId) { + String path = "lock/lock/"+entityId + webService.doPost(grailsApplication.config.getProperty('ecodata.baseUrl')+path,[:]) + } + + Map unlock(String entityId, Boolean force = false) { + String path = "lock/unlock/"+entityId + webService.doPost(grailsApplication.config.getProperty('ecodata.baseUrl')+path,[force:force]) + } + + Map stealLock(String entityId, Map entity, String url, SettingPageType emailSubjectTemplate, SettingPageType emailBodyTemplate) { + Map result = [error:'No lock'] + if (entity.lock) { + result = unlock(entityId, true) + emailService.sendLockStolenEmail(entity.lock, url, emailSubjectTemplate, emailBodyTemplate) + } + result + } +} diff --git a/grails-app/services/au/org/ala/merit/ManagementUnitService.groovy b/grails-app/services/au/org/ala/merit/ManagementUnitService.groovy index 6491b9bcc..bb2a0cfca 100644 --- a/grails-app/services/au/org/ala/merit/ManagementUnitService.groovy +++ b/grails-app/services/au/org/ala/merit/ManagementUnitService.groovy @@ -8,7 +8,6 @@ import grails.core.GrailsApplication import grails.plugin.cache.Cacheable import groovy.util.logging.Slf4j import org.grails.web.json.JSONArray -import org.joda.time.DateTimeZone @Slf4j class ManagementUnitService { @@ -263,24 +262,4 @@ class ManagementUnitService { String url = "${grailsApplication.config.getProperty('ecodata.baseUrl')}" + "managementunit/"+id+"/report" webService.getJson(url) } - /** - * Download [all] management unit reports in a given period - * @param startDate - * @param endDate - * @param emails for sending email to user - * @return - */ - def generateReports(String startDate, String endDate, Map extras = null){ - - // The end date is the last day of the period (e.g. 2020-06-30) but reports will end at midnight of the next day (e.g. 2020-07-01T00:00:00) - // so add a day or two to achieve this. - - String isoStartDate = DateUtils.format(DateUtils.parse(startDate).plusDays(1).withZone(DateTimeZone.UTC)) - String isoEndDate = DateUtils.format(DateUtils.parse(endDate).plusDays(1).withZone(DateTimeZone.UTC)) - - String url = "${grailsApplication.config.getProperty('ecodata.baseUrl')}" + "managementunit/generateReportsInPeriod?startDate=${isoStartDate}&endDate=${isoEndDate}" - url += '&' + extras.collect { k,v -> "$k=$v" }.join('&') - def resp = webService.getJson(url) - return resp - } } diff --git a/grails-app/services/au/org/ala/merit/MetadataService.groovy b/grails-app/services/au/org/ala/merit/MetadataService.groovy index ff626fa7a..10603bce4 100644 --- a/grails-app/services/au/org/ala/merit/MetadataService.groovy +++ b/grails-app/services/au/org/ala/merit/MetadataService.groovy @@ -250,7 +250,7 @@ class MetadataService { def getAccessLevels() { return cacheService.get('accessLevels',{ - webService.getJson(grailsApplication.config.getProperty('ecodata.baseUrl') + "permissions/getAllAccessLevels") + webService.getJson(grailsApplication.config.getProperty('ecodata.baseUrl') + "permissions/getAllAccessLevels?baseLevel=${RoleService.PROJECT_SURVEYOR_ROLE}") }) } diff --git a/grails-app/services/au/org/ala/merit/OrganisationService.groovy b/grails-app/services/au/org/ala/merit/OrganisationService.groovy index d9a0eca2e..de1c447f8 100644 --- a/grails-app/services/au/org/ala/merit/OrganisationService.groovy +++ b/grails-app/services/au/org/ala/merit/OrganisationService.groovy @@ -24,22 +24,11 @@ class OrganisationService { [type: 'Performance expectations framework - self assessment worksheet', period: Period.years(1), bulkEditable: true, businessDaysToCompleteReport:5, adhoc:true] ] - /** Overrides the parent to add Green Army reports to the results */ def get(String id, view = '') { String url = "${grailsApplication.config.getProperty('ecodata.baseUrl')}organisation/$id?view=$view" Map organisation = webService.getJson(url) - def projects = [] - def resp = projectService.search(organisationId: id, isMERIT:true, view:'enhanced') - if (resp?.resp?.projects) { - projects += resp.resp.projects - } - resp = projectService.search(orgIdSvcProvider: id, isMERIT:true, view:'enhanced') - if (resp?.resp?.projects) { - projects += resp.resp.projects.findAll{!projects.find{project -> project.projectId == it.projectId} } - } - organisation.projects = projects if (view != 'flat') { organisation.reports = getReportsForOrganisation(organisation, getReportConfig(id)) } diff --git a/grails-app/services/au/org/ala/merit/PdfGenerationService.groovy b/grails-app/services/au/org/ala/merit/PdfGenerationService.groovy deleted file mode 100644 index bf7b309eb..000000000 --- a/grails-app/services/au/org/ala/merit/PdfGenerationService.groovy +++ /dev/null @@ -1,83 +0,0 @@ -package au.org.ala.merit - -import grails.core.GrailsApplication -import groovy.util.logging.Slf4j - -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse - -/** - * Interacts with the ALA pdfgen service to produce a PDF version of an HTML page. - * Handles basic authorization. - */ -@Slf4j -class PdfGenerationService { - - WebService webService - CommonService commonService - def grailsLinkGenerator - GrailsApplication grailsApplication - - /** - * This is simple way of authorizing the generation of a report on behalf of the PDF generation service. - * Because this state is maintained between requests, this mechanism introduces session affinity requirement which - * we can get away with as there is currently only one instance of BioCollect. Possibly a JSONToken - * style authorization would work better. - */ - static Set PDF_AUTHORIZATION_STORAGE = Collections.synchronizedSet(new HashSet()) - static final String TOKEN_PARAM = "token" - static final String PDFGEN_PATH = "api/pdf" - - /** reports can be slow to produce, so we are using a long timeout */ - static final int TIMEOUT = 10 * 60 * 1000 - - /** - * Generates a PDF from the supplied URL information and configures the supplied response to return the PDF. - * @param reportUrlDetails used to generate a URL that will produce a HTML version of the report. Must be in the form of a grails map e.g [controller:'report', action:'myreport'] - * @param pdfParams parameters to be passed to wkthmltopdf, The only currently supported parameter is [orentation:landscape] will produce a landscape report. - * @param response the HttpServletResponse being produced. The response returned from the pdfgen server will be copied to this response. - * @return true if the generation was successful, false otherwise. If true is returned, no further modifications to the response should be made by the client. - */ - boolean generatePDF(Map reportUrlDetails, Map pdfParams, HttpServletResponse response) { - String token = UUID.randomUUID().toString() - PDF_AUTHORIZATION_STORAGE.add(token) - - reportUrlDetails.absolute = true - if (reportUrlDetails.params) { - reportUrlDetails.params.token = token - } - else { - reportUrlDetails.params = [token:token] - } - - String reportUrl = grailsLinkGenerator.link(reportUrlDetails) - Map pdfGenParams = [docUrl: reportUrl, cacheable: false, options:'--viewport-size 1280x1024'] - if (pdfParams?.orientation == 'landscape') { - pdfGenParams.options += ' -O landscape' - } - - String url = grailsApplication.config.getProperty('pdfgen.baseURL') + PDFGEN_PATH + commonService.buildUrlParamsFromMap(pdfGenParams) - Map result - try { - result = webService.proxyGetRequest(response, url, false, false, TIMEOUT) - } - catch (Exception e) { - result = [error: e.message] - log.error("Error generating PDF for URL ${reportUrl}: ", e) - } - finally { - PDF_AUTHORIZATION_STORAGE.remove(token) - } - return result.error ? false : true - } - - /** - * Checks that the supplied request is authorized to generate a report. This method needs to be invoked by the - * callback method that does the work of generating the report. - * @param request the callback from the pdfgen server. - * @return true if the request is authorized. - */ - boolean authorizePDF(HttpServletRequest request) { - return PDF_AUTHORIZATION_STORAGE.contains(request.getParameter(TOKEN_PARAM)) - } -} diff --git a/grails-app/services/au/org/ala/merit/ProjectService.groovy b/grails-app/services/au/org/ala/merit/ProjectService.groovy index 888248b54..ae3298a6a 100644 --- a/grails-app/services/au/org/ala/merit/ProjectService.groovy +++ b/grails-app/services/au/org/ala/merit/ProjectService.groovy @@ -3,6 +3,7 @@ package au.org.ala.merit import au.org.ala.merit.config.EmailTemplate import au.org.ala.merit.config.ProgramConfig import au.org.ala.merit.config.ReportConfig +import au.org.ala.merit.reports.ReportLifecycleListener import au.org.ala.merit.reports.ReportGenerationOptions import au.org.ala.merit.reports.ReportGenerator import au.org.ala.merit.reports.ReportOwner @@ -43,6 +44,7 @@ class ProjectService { def webService, grailsApplication, siteService, activityService, emailService, documentService, userService, metadataService, settingService, reportService, auditService, speciesService, commonService ProjectConfigurationService projectConfigurationService def programService + LockService lockService def get(id, levelOfDetail = "", includeDeleted = false) { @@ -61,6 +63,16 @@ class ProjectService { } + void filterDataSetSummaries(List dataSetSummaries) { + List protocolNamesToHide = grailsApplication.config.getProperty('hidden.dataSet.protocols', List.class, ['Plot Selection', 'Plot Layout and Visit']) + List forms = activityService.monitoringProtocolForms() + + dataSetSummaries.removeAll { Map dataSetSummary -> + Map protocolForm = forms.find{it.externalId == dataSetSummary.protocol} + protocolForm && (protocolForm.name in protocolNamesToHide) + } + } + /** * Returns a filtered project view based on user needs. This will be implemented in ecodata as a part of the * API changes but for now implementing it here is OK @@ -344,7 +356,7 @@ class ProjectService { // the "custom" Map which can contain properties "details" (the MERI plan) and "dataSets" (data set summaries) // The longer term solution for this is to model Projects explicitly/correctly in ecodata if (projectDetails.custom) { - projectDetails.custom.details?.lastUpdated = DateUtils.format(new Date()) + projectDetails.custom.details?.lastUpdated = DateUtils.formatAsISOStringNoMillis(new Date()) Map custom = currentProject.custom ?: [:] custom.putAll(projectDetails.custom) @@ -413,18 +425,48 @@ class ProjectService { userCanEdit } + Map lockMeriPlanForEditing(String projectId) { + Map project = get(projectId) + if (!project.planStatus || project.planStatus == PLAN_NOT_APPROVED) { + Map resp = lockService.lock(projectId) + if (resp.resp && !resp.resp.error) { + return [message:'success'] + } + else { + return [error:resp?.resp?.error] + } + } + return [error:'Invalid plan status'] + } + + Map overrideLock(String projectId, String entityUrl) { + Map project = get(projectId) + lockService.stealLock(projectId, project, entityUrl, SettingPageType.PROJECT_LOCK_STOLEN_EMAIL_SUBJECT, SettingPageType.PROJECT_LOCK_STOLEN_EMAIL) + // This is done in the projectService instead of the lockService as the + // same use case for an Activity has the lock aquired as a part of the redirect + lockService.lock(projectId) + } + + def submitPlan(String projectId) { def project = get(projectId) if (!project.planStatus || project.planStatus == PLAN_NOT_APPROVED) { - def resp = update(projectId, [planStatus:PLAN_SUBMITTED]) - if (resp.resp && !resp.resp.error) { - - sendEmail({ProgramConfig programConfig -> programConfig.getPlanSubmittedTemplate()}, project, RoleService.PROJECT_ADMIN_ROLE) - return [message:'success'] + if (project.lock && project.lock?.userId != userService.getCurrentUserId()) { + return [error:'MERI plan is locked by another user'] } else { - return [error:"Update failed: ${resp?.resp?.error}"] + if (project.lock) { + lockService.unlock(projectId) + } + def resp = update(projectId, [planStatus: PLAN_SUBMITTED]) + if (resp.resp && !resp.resp.error) { + + sendEmail({ ProgramConfig programConfig -> programConfig.getPlanSubmittedTemplate() }, project, RoleService.PROJECT_ADMIN_ROLE) + return [message: 'success'] + } else { + return [error: "Update failed: ${resp?.resp?.error}"] + } } } return [error:'Invalid plan status'] @@ -468,7 +510,7 @@ class ProjectService { def rejectPlan(String projectId) { def project = get(projectId) - if (requiresMERITAdminToModifyPlan(project) && !userService.userIsAlaOrFcAdmin()) { + if (project.planStatus == PLAN_APPROVED && requiresMERITAdminToModifyPlan(project) && !userService.userIsAlaOrFcAdmin()) { return [error: 'Only MERIT admins can return MERI plans for this program'] } if (project.planStatus in [PLAN_SUBMITTED, PLAN_APPROVED]) { @@ -606,7 +648,7 @@ class ProjectService { // Some projects have extra stage reports after the end date due to legacy data so this checks we've got the last stage within the project dates List validReports = project.reports?.findAll{it.fromDate < project.plannedEndDate ? it.fromDate : project.plannedStartDate} - List incompleteReports = (validReports?.findAll{it.publicationStatus != ReportService.REPORT_APPROVED && it.publicationStatus != ReportService.REPORT_CANCELLED})?:[] + List incompleteReports = (validReports?.findAll{PublicationStatus.requiresAction(it.publicationStatus)})?:[] return incompleteReports.size() ==1 && incompleteReports[0].reportId == approvedReportId } @@ -1669,8 +1711,11 @@ class ProjectService { } List outcomesByScores(String projectId, List scoreIds) { - Map project = get(projectId) + outcomesByScores(project, scoreIds) + } + + List outcomesByScores(Map project, List scoreIds) { List outcomes = [] scoreIds.each { String scoreId -> Map target = project.outputTargets?.find{it.scoreId == scoreId} @@ -1835,7 +1880,7 @@ class ProjectService { Map projectSites = siteService.getProjectSites(projectId) if (projectSites && !projectSites.error) { List sites = projectSites.sites - Map projectArea = projectSites?.find { it.properties?.type == 'projectArea' } + Map projectArea = projectSites?.find { it.properties?.type == SiteService.SITE_TYPE_PROJECT_AREA } if (projectArea) { result.projectArea = projectArea } @@ -1845,7 +1890,7 @@ class ProjectService { site.properties.category = 'Reporting Sites' result.features << site } - else if (site.properties?.type != 'projectArea') { + else if (site.properties?.type != SiteService.SITE_TYPE_PROJECT_AREA) { site.properties.category = 'Planning Sites' result.features << site } @@ -1860,6 +1905,10 @@ class ProjectService { result } + boolean hasProjectArea(Map project) { + project?.sites?.find{it.type == SiteService.SITE_TYPE_PROJECT_AREA} + } + /** * Searches the audit trail for updates where the MERI plan has been approved and returns a summary of * those audit messages for display (and possible retreival) to the user. @@ -1951,6 +2000,19 @@ class ProjectService { project?.custom?.details?.assets?.collect{it.description}?.findAll{it} } + List listProjectBaselines(Map project) { + project?.custom?.details?.baseline?.rows + } + + List listProjectProtocols(Map project) { + List forms = activityService.monitoringProtocolForms() + List baselineProtocols = project?.custom?.details?.baseline?.rows?.collect{it.protocols}?.flatten() ?:[] + List monitoringProtocols = project?.custom?.details?.monitoring?.rows?.collect{it.protocols}?.flatten() ?:[] + + List modules = (baselineProtocols + monitoringProtocols).unique().findAll{it} + forms?.findAll{it.category in modules} + } + /** * Returns a map with key=, value= * The map is used to determine whether the priority is associated with @@ -2044,9 +2106,11 @@ class ProjectService { if(!dataSet.dataCollectionOngoing) { dataSet.dataCollectionOngoing = false } + dataSet.lastUpdated = DateUtils.formatAsISOStringNoMillis(new Date()) if (!dataSet.dataSetId) { dataSet.dataSetId = UUID.randomUUID().toString() + dataSet.dateCreated = DateUtils.formatAsISOStringNoMillis(new Date()) project.custom.dataSets << dataSet } else { @@ -2080,4 +2144,69 @@ class ProjectService { return project.reports.size() > 0 } + /** + * Updates all of the data set summaries for the supplied data set ids with the supplied properties. + * @param dataSetIds + * @param properties + * @return + */ + Map bulkUpdateDataSetSummaries(String projectId, String reportId, List dataSetIds, Map properties) { + boolean dirty = false + List errors = [] + Map project = get(projectId) + dataSetIds?.each { String dataSetId -> + + Map dataSet = project.custom?.dataSets?.find{it.dataSetId == dataSetId} + if (dataSet) { + // Associate the data set with the report + if (!dataSet.reportId) { + dataSet.reportId = reportId + dirty = true + } + else if (dataSet.reportId != reportId) { + Map report = project.reports?.find({it.reportId == dataSet.reportId}) + String reportLabel = report?.name ?: dataSet.reportId + errors << "Data set ${dataSet.name} is already associated with report ${reportLabel}. " + + "Datasets can only be selected once into all outputs reports, please ensure that you have" + + " selected the correct dataset before attempting to save the report again. " + + "If you have selected the wrong dataset into another report, you will need to remove it" + + " from that report before you can select it into this report. " + + "If the problem persists, please contact support." + return + } + + properties.each { String key, value -> + if (dataSet[key] != value) { + dataSet[key] = value + dirty = true + } + } + } + else { + errors << "Report ${reportId} references data set ${dataSetId} which does not exist in project ${projectId}" + } + } + // Disassociate any data sets that were removed from the report + project.custom?.dataSets.findAll { Map dataSet -> + dataSet.reportId == reportId && !(dataSet.dataSetId in dataSetIds) + }.each { + it.reportId = null + it.publicationStatus = null + dirty = true + } + + Map result = [:] + if (dirty) { + // Save the changes to the data sets + result = updateUnchecked(project.projectId, [custom: project.custom]) + if (result?.error) { + errors << result.error + } + } + if (errors) { + result.error = errors.join("\n") + } + result + } + } diff --git a/grails-app/services/au/org/ala/merit/ReportService.groovy b/grails-app/services/au/org/ala/merit/ReportService.groovy index 7f8ded67b..dbd0645b1 100644 --- a/grails-app/services/au/org/ala/merit/ReportService.groovy +++ b/grails-app/services/au/org/ala/merit/ReportService.groovy @@ -3,22 +3,19 @@ package au.org.ala.merit import au.org.ala.merit.config.EmailTemplate import au.org.ala.merit.config.ProgramConfig import au.org.ala.merit.config.ReportConfig +import au.org.ala.merit.reports.ReportLifecycleListener import au.org.ala.merit.reports.ReportGenerator import au.org.ala.merit.reports.ReportOwner import grails.plugin.cache.Cacheable import groovy.util.logging.Slf4j import org.apache.commons.io.FilenameUtils import org.joda.time.DateTime +import org.joda.time.DateTimeZone import org.joda.time.Period @Slf4j class ReportService { - public static final String REPORT_APPROVED = 'published' - public static final String REPORT_SUBMITTED = 'pendingApproval' - public static final String REPORT_NOT_APPROVED = 'unpublished' - public static final String REPORT_CANCELLED = 'cancelled' - public static final int HOME_PAGE_IMAGE_SIZE = 500 public static final String REPORT_TYPE_SINGLE_ACTIVITY = 'Single' @@ -168,11 +165,11 @@ class ReportService { } boolean excludesNotApproved(Map report) { - return report.publicationStatus == REPORT_SUBMITTED || report.publicationStatus == REPORT_APPROVED || report.publicationStatus == REPORT_CANCELLED + return PublicationStatus.isReadOnly(report.publicationStatus) } boolean isApproved(Map report) { - return report.publicationStatus == REPORT_APPROVED + return PublicationStatus.isApproved(report.publicationStatus) } List search(Map criteria) { @@ -258,6 +255,8 @@ class ReportService { Map report = get(reportId) if (!resp.error) { + ReportLifecycleListener listener = reportLifeCycleListener(report) + listener.reportSubmitted(report, reportActivityIds, reportOwner) activityService.submitActivitiesForPublication(reportActivityIds) emailService.sendEmail(emailTemplate, [reportOwner:reportOwner, report:report], ownerUsersAndRoles, RoleService.PROJECT_ADMIN_ROLE) } @@ -303,6 +302,8 @@ class ReportService { Map report = get(reportId) if (!resp.error) { + ReportLifecycleListener listener = reportLifeCycleListener(report) + listener.reportApproved(report, reportActivityIds, reportOwner) activityService.approveActivitiesForPublication(reportActivityIds) emailService.sendEmail(emailTemplate, [reportOwner:reportOwner, report:report, reason:reason], ownerUsersAndRoles, RoleService.GRANT_MANAGER_ROLE) } @@ -332,6 +333,8 @@ class ReportService { Map report = get(reportId) if (!resp.error) { + ReportLifecycleListener listener = reportLifeCycleListener(report) + listener.reportRejected(report, reportActivityIds, reportOwner) activityService.rejectActivitiesForPublication(reportActivityIds) emailService.sendEmail(emailTemplate, [reportOwner:reportOwner, report:report, categories: reasonCategories, reason:reason], ownerUsersAndRoles, RoleService.GRANT_MANAGER_ROLE) } @@ -347,6 +350,8 @@ class ReportService { Map report = get(reportId) if (!resp.error) { + ReportLifecycleListener listener = reportLifeCycleListener(report) + listener.reportCancelled(report, reportActivityIds, reportOwner) activityService.cancelActivitiesForPublication(reportActivityIds) } else { @@ -459,7 +464,12 @@ class ReportService { return [success:false, error:"Cannot delete data for an approved or submitted report"] } - webService.doPost(grailsApplication.config.getProperty('ecodata.baseUrl')+"report/reset/"+report.reportId, [:]) + Map resp = webService.doPost(grailsApplication.config.getProperty('ecodata.baseUrl')+"report/reset/"+report.reportId, [:]) + if (!resp.error) { + ReportLifecycleListener listener = reportLifeCycleListener(report) + listener.reportReset(report) + } + resp } def findReportsForUser(String userId) { @@ -887,7 +897,7 @@ class ReportService { Map filter = state?[type:'DISCRETE', property:'data.state']:[:] Map config = [groups:filter, childAggregations: aggregations, label:'Performance assessment by state'] - Map searchCriteria = [type:['Performance Management Framework - Self Assessment', 'Performance Management Framework - Self Assessment v2'], publicationStatus:REPORT_APPROVED, dateProperty:'toDate', 'startDate':(year-1)+'-07-01T10:00:00Z', 'endDate':year+'-07-01T10:00:00Z'] + Map searchCriteria = [type:['Performance Management Framework - Self Assessment', 'Performance Management Framework - Self Assessment v2'], publicationStatus:PublicationStatus.APPROVED, dateProperty:'toDate', 'startDate':(year-1)+'-07-01T10:00:00Z', 'endDate':year+'-07-01T10:00:00Z'] String url = grailsApplication.config.getProperty('ecodata.baseUrl')+"report/runReport" @@ -931,7 +941,7 @@ class ReportService { model.themes = [] model.locked = activity.lock != null } - else if (mode == ReportMode.PRINT) { + if (mode == ReportMode.PRINT) { model.printView = true } // Custom report types don't necessarily have an associated activity but the canEdit only uses that @@ -986,4 +996,53 @@ class ReportService { history } + /** + * Download [all] management unit reports in a given period + * @param startDate + * @param endDate + * @param emails for sending email to user + * @return + */ + def generateReports(String startDate, String endDate, Map extras = null){ + + // The end date is the last day of the period (e.g. 2020-06-30) but reports will end at midnight of the next day (e.g. 2020-07-01T00:00:00) + // so add a day or two to achieve this. + + String isoStartDate = DateUtils.format(DateUtils.parse(startDate).plusDays(1).withZone(DateTimeZone.UTC)) + String isoEndDate = DateUtils.format(DateUtils.parse(endDate).plusDays(1).withZone(DateTimeZone.UTC)) + + String url = "${grailsApplication.config.getProperty('ecodata.baseUrl')}" + "report/generateReportsInPeriod?startDate=${isoStartDate}&endDate=${isoEndDate}" + url += '&' + extras.collect { k,v -> "$k=$v" }.join('&') + def resp = webService.getJson(url) + return resp + } + + ReportLifecycleListener reportLifeCycleListener(Map report) { + ReportLifecycleListener listener + if (report.activityType && report.activityId) { + listener = reportLifeCycleListener(report.activityType) + } + if (!listener) { + listener = new ReportLifecycleListener() + } + listener + } + + ReportLifecycleListener reportLifeCycleListener(String activityType) { + ReportLifecycleListener reportData = null + // Remove all spaces from the activityType + String reportDataBeanName = activityType.replaceAll("\\s", "") + + if (grailsApplication.mainContext.containsBean(reportDataBeanName)) { + reportData = grailsApplication.mainContext.getBean(reportDataBeanName) + } + + if (!reportData) { + reportData = new ReportLifecycleListener() + } + else { + log.debug("Found custom reportData bean "+reportDataBeanName+" for activity type "+activityType) + } + reportData + } } diff --git a/grails-app/services/au/org/ala/merit/RoleService.groovy b/grails-app/services/au/org/ala/merit/RoleService.groovy index 74f149a56..278f73c71 100644 --- a/grails-app/services/au/org/ala/merit/RoleService.groovy +++ b/grails-app/services/au/org/ala/merit/RoleService.groovy @@ -30,7 +30,7 @@ class RoleService { public static final String PROJECT_FC_READ_ONLY_ROLE = 'ROLE_FC_READ_ONLY' public static final String PROJECT_FC_OFFICER_ROLE = 'ROLE_FC_OFFICER' public static final String PROJECT_FC_ADMIN_ROLE = 'ROLE_FC_ADMIN' - + public static final String PROJECT_SURVEYOR_ROLE = 'projectParticipant' /** * A check against this role will pass if the user has any hub or any Project role. This is more of a permission @@ -105,7 +105,7 @@ class RoleService { } Set getAllowedUserRoles() { - return new HashSet([PROJECT_ADMIN_ROLE, PROJECT_EDITOR_ROLE]) + return new HashSet([PROJECT_ADMIN_ROLE, PROJECT_EDITOR_ROLE, PROJECT_SURVEYOR_ROLE]) } public Set getHubRoles() { diff --git a/grails-app/services/au/org/ala/merit/SiteService.groovy b/grails-app/services/au/org/ala/merit/SiteService.groovy index a7f60c513..d1840b6ac 100644 --- a/grails-app/services/au/org/ala/merit/SiteService.groovy +++ b/grails-app/services/au/org/ala/merit/SiteService.groovy @@ -25,6 +25,17 @@ class SiteService { /** A site with the extent derived from the convex hull of a set of geojson features */ public static final String SITE_TYPE_COMPOUND = 'compound' + /** A site representing the area in which project activities are being conducted */ + public static final String SITE_TYPE_PROJECT_AREA = 'projectArea' + /** A site representing an area in which one or more project activities will take place */ + public static final String SITE_TYPE_WORKS_AREA = 'worksArea' +/** A site representing an area in which one or more project surveys will take place */ + public static final String SITE_TYPE_SURVEY_AREA = 'surveyArea' + + + static isReadOnly(Map site) { + site?.type == SITE_TYPE_COMPOUND || PublicationStatus.isReadOnly(site.publicationStatus) + } def projectsForSite(siteId) { get(siteId)?.projects diff --git a/grails-app/services/au/org/ala/merit/WebService.groovy b/grails-app/services/au/org/ala/merit/WebService.groovy index 9a69a1a29..9fb6855f4 100644 --- a/grails-app/services/au/org/ala/merit/WebService.groovy +++ b/grails-app/services/au/org/ala/merit/WebService.groovy @@ -374,7 +374,7 @@ class WebService { conn.setDoOutput(true) conn.setRequestProperty("Content-Type", "application/json;charset=${charEncoding}"); if (useToken) { - conn.setRequestProperty("Authorization", getToken()) + addTokenHeader(conn) } else { conn.setRequestProperty("Authorization", grailsApplication.config.getProperty('api_key')); @@ -419,7 +419,7 @@ class WebService { conn = new URL(url).openConnection() conn.setRequestMethod("DELETE") if (useToken) { - conn.setRequestProperty("Authorization", getToken()) + addTokenHeader(conn) } else { conn.setRequestProperty("Authorization", grailsApplication.config.getProperty('api_key')) @@ -479,7 +479,12 @@ class WebService { } } if (useToken) { - headers.'Authorization' = getToken() + if (grailsApplication.config.getProperty('spatial.supports_jwt', Boolean.class, true)) { + headers.'Authorization' = getToken() + } + else { + headers.'apiKey' = grailsApplication.config.getProperty('api_key') + } } else { headers.'Authorization' = grailsApplication.config.getProperty('api_key') @@ -523,5 +528,14 @@ class WebService { } result } + + private void addTokenHeader(conn) { + if (grailsApplication.config.getProperty('spatial.supports_jwt', Boolean.class, true)) { + conn.setRequestProperty("Authorization", getToken()) + } + else { + conn.setRequestProperty("apiKey", grailsApplication.config.getProperty('api_key')); + } + } } diff --git a/grails-app/taglib/au/org/ala/merit/FCTagLib.groovy b/grails-app/taglib/au/org/ala/merit/FCTagLib.groovy index 7a12e5622..58bef8126 100644 --- a/grails-app/taglib/au/org/ala/merit/FCTagLib.groovy +++ b/grails-app/taglib/au/org/ala/merit/FCTagLib.groovy @@ -1,15 +1,23 @@ package au.org.ala.merit import au.org.ala.cas.util.AuthenticationCookieUtils +import au.org.ala.merit.config.ProgramConfig import au.org.ala.web.AuthService import bootstrap.Attribute +import com.naleid.grails.MarkdownService import grails.converters.JSON import grails.web.servlet.mvc.GrailsParameterMap +import groovy.util.logging.Slf4j import groovy.xml.MarkupBuilder import org.apache.commons.lang.WordUtils import org.grails.web.json.JSONArray import org.grails.web.json.JSONObject +import org.owasp.html.HtmlChangeListener +import org.owasp.html.HtmlPolicyBuilder +import org.owasp.html.PolicyFactory +import org.owasp.html.Sanitizers +@Slf4j class FCTagLib { static namespace = "fc" @@ -17,7 +25,12 @@ class FCTagLib { def commonService def userService def settingService + MarkdownService markdownService AuthService authService + MetadataService metadataService + + /** Allow simple formatting, links and text within p and divs by default */ + def policy = (Sanitizers.FORMATTING & Sanitizers.LINKS & Sanitizers.BLOCKS) & new HtmlPolicyBuilder().allowTextIn("p", "div").toFactory() def textField = { attrs -> def outerClass = attrs.remove 'outerClass' @@ -669,21 +682,21 @@ class FCTagLib { def footerContent = { attrs -> def content = settingService.getSettingText(SettingPageType.FOOTER) as String if (content) { - out << content.markdownToHtml() + out << markdownToHtmlAndSanitise(content) } } def announcementContent = { attrs -> def content = settingService.getSettingText(SettingPageType.ANNOUNCEMENT) as String if (content) { - out << content.markdownToHtml() + out << markdownToHtmlAndSanitise(content) } } def homePageTitle = { attrs -> def content = settingService.getSettingText(SettingPageType.TITLE) as String if (content) { - out << content + out << markdownToHtmlAndSanitise(content) } } @@ -696,7 +709,7 @@ class FCTagLib { SettingPageType settingType = attrs.settingType def content = settingService.getSettingText(settingType) as String if (content) { - out << content.markdownToHtml() + out << markdownToHtmlAndSanitise(content) } } @@ -877,15 +890,189 @@ class FCTagLib { out << '' if (original && original.size() > i) { - out << original[i][property] + (attrs.property) ? out << original[i][property] : out << original[i] + } + out << '' + out << '' + if (changed && changed.size() > i) { + (attrs.property) ? out << changed[i][property] : out << changed[i] + } + out << '' + out << '' + + } + + def renderComparisonOutputTargets = { attrs -> + + List original = attrs.original + List changed = attrs.changed + int i = attrs.i + String property = attrs.property + + out << '' + if (original && original.size() > i) { + (attrs.property) ? out << original[i][property][0].collect{it}.join(',') : out << original[i][0] + } + out << '' + out << '' + if (changed && changed.size() > i) { + (attrs.property) ? out << changed[i][property][0].collect{it}.join(',') : out << changed[i][0] + } + out << '' + out << '' + + } + + def renderComparisonList = { attrs -> + + List original = attrs.original + List changed = attrs.changed + int i = attrs.i + String property = attrs.property + + out << '' + if (original && original.size() > i) { + if (original[i][property] instanceof List) { + out << fakeBulletedList(original[i][property]) + } else { + out << original[i][property] + } + + } + out << '' + out << '' + if (changed && changed.size() > i) { + if (changed[i][property] instanceof List) { + out << fakeBulletedList(changed[i][property]) + } else { + out << changed[i][property] + } + } + out << '' + out << '' + + } + + def renderComparisonMonitoring = { attrs -> + + String code = attrs.code + List original = attrs.original + List changed = attrs.changed + int i = attrs.i + String property = attrs.property + ProgramConfig config = attrs.config + + def origMonitoringList = original + def resultOrigMonitoringList = [] + for (def monitoring : origMonitoringList) { + if (code && code == monitoring.relatedBaseline) { + resultOrigMonitoringList = monitoring + } + } + + def changedMonitoringList = changed + def resultChangedMonitoringList = [] + for (def monitoring : changedMonitoringList) { + if (code && code == monitoring.relatedBaseline) { + resultChangedMonitoringList = monitoring + } + } + + out << '' + if (resultOrigMonitoringList && resultOrigMonitoringList.size() > i) { + if (property == 'relatedTargetMeasures') { + out << getScoreLabels(resultOrigMonitoringList[property], config, true) + } else { + if (resultOrigMonitoringList[property] instanceof List) { + out << resultOrigMonitoringList[property].collect{it}.join(',') + } else { + out << resultOrigMonitoringList[property] + } + } + + } + out << '' + + out << '' + if (resultChangedMonitoringList && resultChangedMonitoringList.size() > i) { + if (property == 'relatedTargetMeasures') { + out << getScoreLabels(resultChangedMonitoringList[property], config, true) + } else { + if (resultChangedMonitoringList[property] instanceof List) { + out << resultChangedMonitoringList[property].collect{it}.join(',') + } else { + out << resultChangedMonitoringList[property] + } + } + + } + out << '' + out << '' + } + + def renderComparisonScoreLabel = { attrs -> + + List original = attrs.original + List changed = attrs.changed + int i = attrs.i + boolean includeService = attrs.includeService + String property = attrs.property + ProgramConfig config = attrs.config + try { + out << '' + if (original && original.size() > i) { + out << getScoreLabels(original[i][property], config, includeService) + } + out << '' + } catch(Exception e) { + log.debug "\n Changed index is greater than the original" + } + + out << '' + if (changed && changed.size() > i) { + out << getScoreLabels(changed[i][property], config, includeService) } out << '' + + out << '' + + } + + def renderComparisonService = { attrs -> + + List original = attrs.original + List changed = attrs.changed + int i = attrs.i + ProgramConfig programConfig = attrs.programConfig + + try { + out << '' + if (original && original.size() > i) { + out << serviceLabel(original[i].scoreId, programConfig) + } + out << '' + + } catch(Exception e) { + log.debug "\n Changed index is greater than the original" + } + out << '' if (changed && changed.size() > i) { - out << changed[i][property] + out << serviceLabel(changed[i].scoreId, programConfig) } out << '' + out << '' + + } + + private static String serviceLabel(String scoreId, ProgramConfig programConfig) { + Map service = programConfig.services.find { Map service -> + service.scores.find{ Map score -> + score.scoreId == scoreId + } + } + service?.name ?: 'Unsupported service' } def status = { attrs -> @@ -979,4 +1166,88 @@ class FCTagLib { out << ids.collect{it.externalId}.join(',') } + + def markdownToHtml = { Map attrs, body -> + String text = attrs.text ?: body() + + out << markdownToHtmlAndSanitise(text) + } + + private String markdownToHtmlAndSanitise(String text) { + String html = markdownService.markdown(text) + internalSanitise(policy, html) + } + + private static String internalSanitise(PolicyFactory policyFactory, String input, String imageId = '', String metadataName = '') { + policyFactory.sanitize(input, new HtmlChangeListener() { + void discardedTag(Object context, String elementName) { + log.warn("Dropping element $elementName in $imageId.$metadataName") + } + void discardedAttributes(Object context, String tagName, String... attributeNames) { + log.warn("Dropping attributes $attributeNames from $tagName in $imageId.$metadataName") + } + }, null) + } + + private static String getScoreLabels(def scoreIds, ProgramConfig config, Boolean includeService) { + List labels = [] + if (scoreIds instanceof List) { + for (String scoreId : scoreIds) { + labels.add(scoreLabel(scoreId, config, includeService)) + } + } else { + labels.add(scoreLabel(scoreIds, config, includeService)) + } + + return fakeBulletedList(labels) + } + + private static String fakeBulletedList(List items, int spaceAfterCharacterCount = 20) { + String result = '' + if (items.size() == 1) { + result = items[0] + } else { + for (int i=0; i + count += word.length() + result += word + if (count < spaceAfterCharacterCount) { + result += ' ' + } + else { + result += ' ' + count = 0 + } + } + + if (i + service.scores.find{ Map score -> + if (score.scoreId == scoreId) { + label = score.label + if (includeService) { + label = (service?.name ?: 'Unsupported service') + ' - ' + (label ?: 'Unsupported target measure') + } + } + label + } + } + label ?: 'Unsupported target measure' + } } diff --git a/grails-app/views/activity/activityReportView.gsp b/grails-app/views/activity/activityReportView.gsp index 7470b2dda..d0a606336 100644 --- a/grails-app/views/activity/activityReportView.gsp +++ b/grails-app/views/activity/activityReportView.gsp @@ -131,6 +131,10 @@ + + + + diff --git a/grails-app/views/admin/_permissionTable.gsp b/grails-app/views/admin/_permissionTable.gsp index 6044622c4..a62db0056 100644 --- a/grails-app/views/admin/_permissionTable.gsp +++ b/grails-app/views/admin/_permissionTable.gsp @@ -70,7 +70,11 @@ $clone.find('.memUserName').text(el.displayName); $clone.find('.memUserRole select').val(el.role); $clone.find('.memUserRole select').attr("id", el.userId); - $clone.find('.memUserRole span').text(decodeCamelCase(el.role).replace('Case','Grant')); // TODO: i18n this + var roleName = decodeCamelCase(el.role).replace('Case','Grant'); + if (_.isFunction(window.$i18n)) { + roleName = $i18n('label.role.'+el.role, roleName); + } + $clone.find('.memUserRole span').text(roleName); $('.membersTbody').append($clone); }); } else { diff --git a/grails-app/views/admin/adminReports.gsp b/grails-app/views/admin/adminReports.gsp index 28ae2b024..2ec2b27c9 100644 --- a/grails-app/views/admin/adminReports.gsp +++ b/grails-app/views/admin/adminReports.gsp @@ -20,9 +20,9 @@ Administrator Reports Administrator Reports -Organisation data download: +Performance Management Framework data download -Download Organisation Report Data +Download Performance Management Framework data Management unit report download: @@ -31,18 +31,39 @@ Start date - + End date - + - Management Unit - Activities - Core Reports - Status + Management Unit - Activities + Core Reports - Status + + +Organisation report download: + + Select reporting period: + + + Start date + + + + + + End date + + + + + + Organisation - Activities + Core Reports - Status @@ -81,7 +102,7 @@ - View Report + View Report @@ -92,7 +113,7 @@ - + diff --git a/grails-app/views/blog/_editBlogEntry.gsp b/grails-app/views/blog/_editBlogEntry.gsp index 2a6926f3d..ac2715b18 100644 --- a/grails-app/views/blog/_editBlogEntry.gsp +++ b/grails-app/views/blog/_editBlogEntry.gsp @@ -1,5 +1,7 @@ + + Type: What type of entry is this? diff --git a/grails-app/views/dataSet/_editDataSet.gsp b/grails-app/views/dataSet/_editDataSet.gsp index ff1e46a1b..ff19b9a41 100644 --- a/grails-app/views/dataSet/_editDataSet.gsp +++ b/grails-app/views/dataSet/_editDataSet.gsp @@ -3,7 +3,7 @@ 1. Dataset title - + @@ -44,12 +44,12 @@ 6. What primary or secondary investment priorities or assets does this dataset relate to? - - - + +%{-- Support for legacy data set summaries / projects without outcome targets --}% + 7. Is this data being collected for reporting against short or medium term outcome statements? @@ -61,8 +61,19 @@ + + + - 8. Is this (a) a baseline dataset associated with a project outcome i.e. against which, change will be measured, (b) a project progress dataset that is tracking change against an established project baseline dataset or (c) a standalone, foundational dataset to inform future management interventions? + 7. Which project service and outcome/s does this data set support? This data set summary will only be able to be invoiced for the service selected here. + + + + + + + + 8a. Is this (a) a baseline dataset associated with a project outcome i.e. against which, change will be measured, (b) a project progress dataset that is tracking change against an established project baseline dataset or (c) a standalone, foundational dataset to inform future management interventions? @@ -71,12 +82,32 @@ Standalone, foundational dataset to inform future management interventions Other + + + + + - 9. What types of measurements or observations does the dataset include? To select more than one answer, hold down the ‘CTRL’ button whilst selecting an option from the drop-down list + 8b. Which project baseline does this data set relate to or describe? - + + + + + + 9a. What EMSA protocol was used when collecting the data? + + + + + + + + 9b. What types of measurements or observations does the dataset include? To select more than one answer, hold down the ‘CTRL’ button whilst selecting an option from the drop-down list + + Abundance Adoption - climate and market demands Adoption - land resource management practices @@ -93,7 +124,6 @@ Habitat condition Interventions Opportune records - Other Participation Publication of materials Recruitment - Fauna, flora @@ -116,69 +146,74 @@ 10. Identify the method(s) used to collect the data. To select more than one answer, hold down the ‘CTRL’ button whilst selecting an option from the drop-down list - - Genetic sampling - Hair, track, dung sampling - Area sampling - Water quality sampling + Active searching Aerial photography + Area sampling Call playback Camera trapping Data extraction Distance sampling + Genetic sampling Grab sampling + Ground cover monitoring Habitat condition assessment + Hair, track, dung sampling Mark-recapture Meta-analysis - Other + Participant surveys Photopoints Plotless sampling Quadrat sampling - Participant surveys Soil sampling and analysis Surber sampling Surveying - Fauna, Flora Transect sampling Trapping Vegetation mapping - Ground cover monitoring + Water quality sampling + 11. Describe the method used to collect the data in detail. - + - 12. Identify any apps used during data collection. + 12. Identify any apps used during data collection. Where the 'Monitor' app has not been used, please provide details 13. Provide a coordinate centroid for the area surveyed. - (For biophysical/ecological surveys where an app was not used, and where there are no sensitivities in providing a location). + (For biophysical/ecological surveys where an app was not used, and where there are no sensitivities in providing a location). For biophysical/ecological surveys where an app was not used, and where there are no sensitivities in providing a location + + + + Spatial data has been supplied for this data set + - 14. First collection date. + 14. First collection date. - + - 15. Last collection date. + 15. Last collection date. - + @@ -202,7 +237,7 @@ - 16a. Has your data been included in the Threatened Species Index? + 16a. Has your data been uploaded to the Threatened Species Index? @@ -213,75 +248,28 @@ - - - Dataset accessibility - - - - 17. Who developed the dataset? - - - - University researcher - Specialist consultant - Service Provider staff - State Government agency staff - Community member/volunteer - Other - - - - 18. Has a quality assurance check been undertaken on the data? - - - - Yes - No - Don't know - - - - - 19. Has the data contributed to a publication? - - - - Yes - No - Don't know - + 16b. Date of upload, if you answered 'Yes' to 16a above. + + + + - - 20. Where is the data held? - - - - Aurion - Cloud - CM9 - External Hard Drive - Oracle Database - Other Database - Protected Enclave - Shared Drive - Sharepoint - SPIRE - Unknown - Stored internally - + + + + Dataset accessibility - 21. For all public datasets, please provide the published location. If stored internally by your organisation, write ‘stored internally’. + 17. Please provide the location/system of where the dataset is held. If possible, provide a URL of the published location. If stored internally by your organisation, write ‘stored internally’. - 22. What format is the dataset? + 18. What format is the dataset? @@ -299,8 +287,27 @@ + + + + 19. What is the size of the dataset (KB)? + If you don't know the size, check the 'Unknown' checkbox + + + + + + + + + + Unknown + + + + - 23. Are there any sensitivities in the dataset? + 20. Are there any sensitivities in the dataset? No @@ -311,30 +318,13 @@ Legally sensitive Other + + + - - - - - 24. Primary source of data (organisation or individual that owns or maintains the dataset) - Please include the contact name, physical address, email address and phone number where possible - - - - - - - - 25. Dataset custodian (name of contact to obtain access to dataset) - Please include the contact name, physical address, email address and phone number where possible - - - - - diff --git a/grails-app/views/dataSet/_viewDataSet.gsp b/grails-app/views/dataSet/_viewDataSet.gsp index c4fe4b8c9..0a2b0bab4 100644 --- a/grails-app/views/dataSet/_viewDataSet.gsp +++ b/grails-app/views/dataSet/_viewDataSet.gsp @@ -51,12 +51,25 @@ + %{-- Support for legacy data set summaries --}% + 7. Is this data being collected for reporting against short or medium term outcome statements? + + + + + 7. Which project service and outcome/s does this data set support? + + + + + + 8. Is this (a) a baseline dataset associated with a project outcome i.e. against which, change will be measured, (b) a project progress dataset that is tracking change against an established project baseline dataset or (c) a standalone, foundational dataset to inform future management interventions? @@ -98,7 +111,12 @@ (For biophysical/ecological surveys where an app was not used, and where there are no sensitivities in providing a location). + + + + Spatial data has been supplied for this data set + @@ -125,78 +143,58 @@ - 16a. Has your data been included in the Threatened Species Index? + 16a. Has your data been uploaded to the Threatened Species Index? - - - - Dataset accessibility - - - - 17. Who developed the dataset? - - - - - - 18. Has a quality assurance check been undertaken on the data? - - - - - 19. Has the data contributed to a publication? - - + 16b. Date of upload, if you answered 'Yes' to 16a above. + + + + - - 20. Where is the data held? - - + + + Dataset accessibility - 21. For all public datasets, please provide the published location. If stored internally by your organisation, write ‘stored internally’. + 17. Please provide the location/system of where the dataset is held. If possible, provide a URL of the published location. If stored internally by your organisation, write ‘stored internally’. - - 22. What format is the dataset? - - - - - 23. Are there any sensitivities in the dataset? + 18. What format is the dataset? - + - 24. Primary source of data (organisation or individual that owns or maintains the dataset) - Please include the contact name, physical address, email address and phone number where possible + 19. What is the size of the dataset (KB)? + If you don't know the size, check the 'Unknown' checkbox - - + + + + + + + Unknown + - - 25. Dataset custodian (name of contact to obtain access to dataset) - Please include the contact name, physical address, email address and phone number where possible - + 20. Are there any sensitivities in the dataset? - + diff --git a/grails-app/views/dataSet/create.gsp b/grails-app/views/dataSet/create.gsp index a636351cb..93a6553cd 100644 --- a/grails-app/views/dataSet/create.gsp +++ b/grails-app/views/dataSet/create.gsp @@ -9,10 +9,12 @@ var fcConfig = { serverUrl: "${grailsApplication.config.getProperty('grails.serverURL')}", dataSetUpdateUrl: "${createLink(action:'save', id:projectId)}", + viewSiteUrl: "${createLink(controller: 'site', action:'index')}", returnToUrl: "${g.createLink(controller:'project', action:'index', id:projectId)}" }; + @@ -42,13 +44,21 @@ + +
Available Evidence
Evidence of Service Delivery
Before completing this section, please ensure you have created a Data Set Summary information for every data set produced by the surveys you intend to report
Where the 'Monitor' app has not been used, please provide details
For biophysical/ecological surveys where an app was not used, and where there are no sensitivities in providing a location
If you don't know the size, check the 'Unknown' checkbox
Please include the contact name, physical address, email address and phone number where possible