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>