From 23b7df21536db30662a86c7035b07e32e6a778a1 Mon Sep 17 00:00:00 2001 From: montana Date: Fri, 14 Jun 2019 13:54:18 -0400 Subject: [PATCH] Keep track of children CLINS to update amount - emit CLIN amount and type when amount changes - totals are added correctly based on CLIN type --- js/components/clin_fields.js | 20 ++++++++++++++++---- js/components/forms/to_form.js | 22 ++++++++++++++++++---- js/components/totals_box.js | 4 ++-- templates/task_orders/edit.html | 19 ++++++++++++------- 4 files changed, 48 insertions(+), 17 deletions(-) diff --git a/js/components/clin_fields.js b/js/components/clin_fields.js index 833b7223..a719fa6e 100644 --- a/js/components/clin_fields.js +++ b/js/components/clin_fields.js @@ -3,8 +3,8 @@ import { emitEvent } from '../lib/emitters' import optionsinput from './options_input' import textinput from './text_input' -const JEDI_CLIN_TYPE = "jedi_clin_type" -const OBLIGATED_AMOUNT = "obligated_amount" +const JEDI_CLIN_TYPE = 'jedi_clin_type' +const OBLIGATED_AMOUNT = 'obligated_amount' export default { name: 'clin-fields', @@ -22,6 +22,10 @@ export default { default: 0, }, initialClinType: String, + initialAmount: { + type: Number, + default: 0, + }, }, data: function() { @@ -40,6 +44,14 @@ export default { this.$root.$on('field-change', this.handleFieldChange) }, + created: function() { + emitEvent('clin-change', this, { + id: this._uid, + clinType: this.clinType, + amount: this.initialAmount, + }) + }, + methods: { addLoa: function(event) { ++this.loas @@ -56,12 +68,12 @@ export default { } else if (event.name.includes(OBLIGATED_AMOUNT)) { emitEvent('clin-change', this, { + id: this._uid, clinType: this.clinType, - amount: event.value, + amount: parseFloat(event.value), }) } } - }, }, } diff --git a/js/components/forms/to_form.js b/js/components/forms/to_form.js index 3808387c..f210fff2 100644 --- a/js/components/forms/to_form.js +++ b/js/components/forms/to_form.js @@ -39,6 +39,7 @@ export default { clinIndex, obligated: this.initialObligated || 0, total: this.initialTotal || 0, + clinChildren: {}, } }, @@ -52,11 +53,24 @@ export default { ++this.clinIndex }, - calculateClinAmounts: function (event) { - this.total += parseFloat(event.amount - this.total) - if (event.clinType.includes('1') || event.clinType.includes('3')) { - this.obligated += parseFloat(event.amount - this.obligated) + calculateClinAmounts: function(event) { + this.clinChildren[event.id] = { + amount: event.amount, + type: event.clinType, } + + let newTotal = 0 + let newObligated = 0 + Object.values(this.clinChildren).forEach( + function(clin) { + newTotal += clin.amount + if (clin.type.includes('1', '3')) { + newObligated += clin.amount + } + } + ) + this.total = newTotal + this.obligated = newObligated }, }, diff --git a/js/components/totals_box.js b/js/components/totals_box.js index 32a695ca..6bc64c40 100644 --- a/js/components/totals_box.js +++ b/js/components/totals_box.js @@ -10,10 +10,10 @@ export default { }, computed: { - formattedObligated: function () { + formattedObligated: function() { return formatDollars(this.obligated) }, - formattedContractAmount: function () { + formattedContractAmount: function() { return formatDollars(this.contractAmount) }, }, diff --git a/templates/task_orders/edit.html b/templates/task_orders/edit.html index 8c9327dd..fb133a4e 100644 --- a/templates/task_orders/edit.html +++ b/templates/task_orders/edit.html @@ -60,6 +60,7 @@ v-bind:initial-clin-index='{{ index }}' v-bind:initial-loa-count="{{ fields.loas.data | length }}" v-bind:initial-clin-type="'{{ fields.jedi_clin_type.data }}'" + v-bind:initial-amount='{{ fields.obligated_amount.data }}' inline-template>
@@ -159,7 +160,10 @@

- +
@@ -214,6 +218,7 @@
+
@@ -398,14 +403,14 @@ v-bind:contract-amount='total' >
-
Total obligated funds
-
-
This is the funding allocated to cloud services. It may be 100% or a portion of the total task order budget.
+
Total obligated funds
+
+
This is the funding allocated to cloud services. It may be 100% or a portion of the total task order budget.
-
+
-
Total contract amount
-
+
Total contract amount
+
This is the value of all funds obligated for this contract, including -- but not limited to -- funds obligated for the cloud.