Skip to content

Commit

Permalink
feat: adding calculated values for expenses and payments tracker
Browse files Browse the repository at this point in the history
  • Loading branch information
gurjmatharu authored and BCerki committed Jan 18, 2023
1 parent 0d2aad0 commit 89fd505
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 2 deletions.
55 changes: 53 additions & 2 deletions app/components/Form/ProjectFundingAgreementForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ import { useUpdateFormChange } from "mutations/FormChange/updateFormChange";
import FormBorder from "lib/theme/components/FormBorder";
import { useStageFormChange } from "mutations/FormChange/stageFormChange";
import useDiscardAdditionalFundingSourceFormChange from "mutations/FundingParameter/discardAdditionalFundingSourceFormChange";
import {
expensesPaymentsTrackerSchema,
expensesPaymentsTrackerUiSchema,
} from "data/jsonSchemaForm/expensesPaymentsTrackerSchema";
interface Props {
query: ProjectFundingAgreementForm_query$key;
projectRevision: ProjectFundingAgreementForm_projectRevision$key;
Expand Down Expand Up @@ -104,6 +108,10 @@ const ProjectFundingAgreementForm: React.FC<Props> = (props) => {
rowId
newFormData
changeStatus
eligibleExpensesToDate
holdbackAmountToDate
netPaymentsToDate
grossPaymentsToDate
}
}
}
Expand Down Expand Up @@ -144,6 +152,23 @@ const ProjectFundingAgreementForm: React.FC<Props> = (props) => {

const fundingAgreement =
projectRevision.projectFundingAgreementFormChanges.edges[0]?.node;
var fundingAgreementFormData = JSON.parse(
JSON.stringify(fundingAgreement.newFormData)
);
var proponentsSharePercentage = 0;
if (
// safeguard to prevent memory leaks
fundingAgreementFormData.proponentCost &&
projectRevision.totalProjectValue
) {
proponentsSharePercentage =
Number(fundingAgreementFormData.proponentCost) /
Number(projectRevision.totalProjectValue);
}
fundingAgreementFormData.proponentsSharePercentage =
proponentsSharePercentage;
fundingAgreementFormData.grossPaymentsToDate =
fundingAgreement.grossPaymentsToDate;

// We should explicitly filter out archived form changes here (filtering on the fragment doesn't work)
const filteredAdditionalFundingSourceFormChanges =
Expand Down Expand Up @@ -316,7 +341,20 @@ const ProjectFundingAgreementForm: React.FC<Props> = (props) => {
projectRevision.projectFundingAgreementFormChanges,
projectRevision.additionalFundingSourceFormChanges,
]);

const calculatedFormData = {
eligibleExpensesToDate:
projectRevision.projectFundingAgreementFormChanges.edges[0].node
.eligibleExpensesToDate,
holdbackAmountToDate:
projectRevision.projectFundingAgreementFormChanges.edges[0].node
.holdbackAmountToDate,
netPaymentsToDate:
projectRevision.projectFundingAgreementFormChanges.edges[0].node
.netPaymentsToDate,
grossPaymentsToDate:
projectRevision.projectFundingAgreementFormChanges.edges[0].node
.netPaymentsToDate,
};
return (
<>
{projectRevision.projectFundingAgreementFormChanges.edges.length ===
Expand Down Expand Up @@ -383,7 +421,7 @@ const ProjectFundingAgreementForm: React.FC<Props> = (props) => {
validateOnMount={fundingAgreement?.changeStatus === "staged"}
idPrefix="ProjectFundingAgreementForm"
schema={fundingAgreementSchema as JSONSchema7}
formData={fundingAgreement?.newFormData}
formData={fundingAgreementFormData}
formContext={{
form: fundingAgreement?.newFormData,
calculatedTotalProjectValue: projectRevision.totalProjectValue,
Expand Down Expand Up @@ -460,6 +498,19 @@ const ProjectFundingAgreementForm: React.FC<Props> = (props) => {
Add Funding Source
</Button>
</FormBorder>
<FormBorder title="Expenses & Payments Tracker">
<div>
<FormBase
id={`expensesPaymentsTracker`}
className="expensesPaymentsTrackerForm"
idPrefix="expensesPaymentsTracker"
schema={expensesPaymentsTrackerSchema as JSONSchema7}
formData={calculatedFormData}
ObjectFieldTemplate={EmptyObjectFieldTemplate}
uiSchema={expensesPaymentsTrackerUiSchema}
></FormBase>
</div>
</FormBorder>
<Button
type="submit"
onClick={() =>
Expand Down
37 changes: 37 additions & 0 deletions app/data/jsonSchemaForm/expensesPaymentsTrackerSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
export const expensesPaymentsTrackerSchema = {
$schema: "http://json-schema.org/draft-07/schema",
type: "object",
required: [
"eligibleExpensesToDate",
"grossPaymentsToDate",
"holdbackAmountToDate",
"netPaymentsToDate",
],
properties: {
eligibleExpensesToDate: {
title: "Total Eligible Expenses to Date",
type: "number",
},
grossPaymentsToDate: {
title: "Total Gross Payment Amount to Date",
type: "number",
},
holdbackAmountToDate: {
title: "Total Holdback Amount to Date",
type: "number",
},
netPaymentsToDate: {
title: "Total Net Payment Amount to Date",
type: "number",
},
},
};

export const expensesPaymentsTrackerUiSchema = {
"ui:order": [
"eligibleExpensesToDate",
"grossPaymentsToDate",
"holdbackAmountToDate",
"netPaymentsToDate",
],
};
10 changes: 10 additions & 0 deletions app/data/jsonSchemaForm/fundingAgreementSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export const fundingAgreementSchema = {
"proponentCost",
"contractStartDate",
"projectAssetsLifeEndDate",
"proponentsSharePercentage",
],
properties: {
totalProjectValue: {
Expand Down Expand Up @@ -43,6 +44,10 @@ export const fundingAgreementSchema = {
title: "Project Assets Life End Date",
type: "string",
},
proponentsSharePercentage: {
title: "Proponent's Share Percentage",
type: "number",
},
},
};

Expand All @@ -52,6 +57,7 @@ export const fundingAgreementUiSchema = {
"provinceSharePercentage",
"holdbackPercentage",
"proponentCost",
"proponentsSharePercentage",
"contractStartDate",
"projectAssetsLifeEndDate",
"anticipatedFundingAmount",
Expand All @@ -75,6 +81,10 @@ export const fundingAgreementUiSchema = {
"ui:widget": "NumberWidget",
isPercentage: true,
},
proponentsSharePercentage: {
"ui:widget": "NumberWidget",
isPercentage: true,
},
anticipatedFundingAmount: {
"ui:widget": "NumberWidget",
isMoney: true,
Expand Down

0 comments on commit 89fd505

Please sign in to comment.