WIP report. Added stats, sagas for calculation, formatting.

This commit is contained in:
Patrick Fic
2020-10-20 16:37:39 -07:00
parent 045346ce48
commit 329c975019
10 changed files with 335 additions and 20 deletions

View File

@@ -1,8 +1,19 @@
import { all, call, takeLatest, select, put } from "redux-saga/effects";
import { calculateScorecard, setReportingData } from "./reporting.actions";
import {
calculateScorecard,
setReportingData,
setScoreCard,
} from "./reporting.actions";
import ReportingApplicationTypes from "./reporting.types";
import client from "../../graphql/GraphQLClient";
import { REPORTING_GET_JOBS } from "../../graphql/reporting.queries";
import Dinero from "dinero.js";
import {
CalculateJobRpsDollars,
CalculateJobRpsPc,
} from "../../util/CalculateJobRps";
import GetJobTarget from "../../util/GetJobTarget";
const { log } = window;
export function* onQueryReportData() {
@@ -20,7 +31,7 @@ export function* queryReportingData({ payload: { startDate, endDate } }) {
log.error("Error fetching report data.", result.errors);
yield put(setReportingData(null));
} else {
yield put(setReportingData(result.data.jobs));
yield put(calculateScorecard(result.data.jobs));
}
}
@@ -31,7 +42,7 @@ export function* onSetReportData() {
);
}
export function* handleSetReportData({ payload: jobs }) {
yield put(calculateScorecard(jobs));
// yield put(calculateScorecard(jobs));
}
export function* onCalculateScoreCard() {
@@ -42,10 +53,70 @@ export function* onCalculateScoreCard() {
}
export function* handleCalculateScoreCard({ payload: jobs }) {
console.log("jobs", jobs);
// yield put(calculateScorecard(jobs));
const targets = yield select((state) => state.user.bodyshop.targets);
//Get the RPS on a per job basis.
const scoreCard = {
shopRpsTotalDollars: Dinero(),
shopRpsExpectedDollars: Dinero(),
varianceDollars: null,
variancePc: 0,
allJobsSumDbPrice: Dinero(),
allJobsSumActPrice: Dinero(),
currentRpsPc: 0,
targetRpsPc: 0,
};
//Get the RPS on a per job basis.
jobs = jobs.map((job) => {
const { actPriceSum, jobRpsDollars } = CalculateJobRpsDollars(job, true);
const { dbPriceSum, jobRpsPc } = CalculateJobRpsPc(
job,
jobRpsDollars,
true
);
const jobTarget = GetJobTarget(job.group, job.v_age, targets);
scoreCard.shopRpsTotalDollars = scoreCard.shopRpsTotalDollars.add(
jobRpsDollars
);
const expectedRpsDollars = dbPriceSum.percentage(jobTarget * 100);
scoreCard.shopRpsExpectedDollars = scoreCard.shopRpsExpectedDollars.add(
expectedRpsDollars
);
scoreCard.allJobsSumDbPrice = scoreCard.allJobsSumDbPrice.add(dbPriceSum);
scoreCard.allJobsSumActPrice = scoreCard.allJobsSumActPrice.add(
actPriceSum
);
//sum db price * percentage expected.
return {
...job,
actPriceSum,
jobRpsDollars,
dbPriceSum,
jobRpsPc,
jobTarget,
expectedRpsDollars,
};
});
scoreCard.varianceDollars = scoreCard.shopRpsTotalDollars.subtract(
scoreCard.shopRpsExpectedDollars
);
scoreCard.variancePc =
scoreCard.varianceDollars.getAmount() /
scoreCard.shopRpsExpectedDollars.getAmount();
scoreCard.currentRpsPc =
scoreCard.shopRpsTotalDollars.getAmount() /
scoreCard.allJobsSumDbPrice.getAmount();
scoreCard.targetRpsPc =
scoreCard.shopRpsExpectedDollars.getAmount() /
scoreCard.allJobsSumDbPrice.getAmount();
//Set the data.
yield put(setScoreCard(scoreCard));
yield put(setReportingData(jobs));
}
export function* reportingSagas() {