diff --git a/source/components/ResultsGrid.js b/source/components/ResultsGrid.js index 9f6181146..73e447dbc 100644 --- a/source/components/ResultsGrid.js +++ b/source/components/ResultsGrid.js @@ -17,217 +17,295 @@ let filteredBy = R.pathEq(["cotisation", "dû par"]) export let byName = R.groupBy(R.prop("dottedName")) export let cell = (branch, payer, analysis) => { - let row = byBranch(analysis)[branch], - items = R.filter( - item => paidBy(payer)(item) || filteredBy(payer)(item), - row - ), - values = R.map(R.prop("nodeValue"), items) + let row = byBranch(analysis)[branch], + items = R.filter( + item => paidBy(payer)(item) || filteredBy(payer)(item), + row + ), + values = R.map(R.prop("nodeValue"), items) - return R.sum(values) + return R.sum(values) } export let subCell = (row, name, payer) => { - let cells = row[name], - items = R.filter( - item => paidBy(payer)(item) || filteredBy(payer)(item), - cells - ), - values = R.map(R.prop("nodeValue"), items) + let cells = row[name], + items = R.filter( + item => paidBy(payer)(item) || filteredBy(payer)(item), + cells + ), + values = R.map(R.prop("nodeValue"), items) - return R.sum(values) + return R.sum(values) } export let byBranch = analysis => { - let sal = analysis.dict["contrat salarié . cotisations salariales"] - let pat = analysis.dict["contrat salarié . cotisations patronales"] + let sal = analysis.dict["contrat salarié . cotisations salariales"] + let pat = analysis.dict["contrat salarié . cotisations patronales"] - let l1 = sal ? sal.explanation.formule.explanation.explanation : [], - l2 = pat ? pat.explanation.formule.explanation.explanation : [], - explanations = R.concat(l1, l2), - byBranch = R.groupBy( - R.pathOr("autre", ["explanation", "cotisation", "branche"]), - explanations - ) + let l1 = sal ? sal.explanation.formule.explanation.explanation : [], + l2 = pat ? pat.explanation.formule.explanation.explanation : [], + explanations = R.concat(l1, l2), + byBranch = R.groupBy( + R.pathOr("autre", ["explanation", "cotisation", "branche"]), + explanations + ) - return byBranch + return byBranch } @withRouter @connect(state => ({ - analysis: state.analysis, - targetNames: state.targetNames, - situationGate: state.situationGate, - inversions: formValueSelector("conversation")(state, "inversions"), - done: state.done + analysis: state.analysis, + targetNames: state.targetNames, + situationGate: state.situationGate, + inversions: formValueSelector("conversation")(state, "inversions"), + done: state.done })) export default class ResultsGrid extends Component { - render() { - let { analysis, situationGate, targetNames, inversions, done } = this.props + render() { + let { analysis, situationGate, targetNames, inversions, done } = this.props - if (!done) return null + if (!done) return null - if (!analysis) return null + if (!analysis) return null - let extract = x => (x && x.nodeValue) || 0, - fromSituation = name => situationGate(name), - fromEval = name => R.find(R.propEq("dottedName", name), analysis.targets), - fromDict = name => analysis.dict[name], - get = name => - extract(fromSituation(name) || fromEval(name) || fromDict(name)) - let results = byBranch(analysis), - brut = get("contrat salarié . salaire brut"), - net = get("contrat salarié . salaire net"), - total = get("contrat salarié . salaire total") + let extract = x => (x && x.nodeValue) || 0, + fromSituation = name => situationGate(name), + fromEval = name => R.find(R.propEq("dottedName", name), analysis.targets), + fromDict = name => analysis.dict[name], + get = name => + extract(fromSituation(name) || fromEval(name) || fromDict(name)) + let results = byBranch(analysis), + brut = get("contrat salarié . salaire brut"), + net = get("contrat salarié . salaire net"), + total = get("contrat salarié . salaire total") - let inversion = R.path( - ["contrat salarié ", " salaire de base"], - inversions - ), - relevantSalaries = new Set( - targetNames - .concat(inversion ? [nameLeaf(inversion)] : []) - .concat(["salaire de base"]) - ) + let inversion = R.path( + ["contrat salarié ", " salaire de base"], + inversions + ), + relevantSalaries = new Set( + targetNames + .concat(inversion ? [nameLeaf(inversion)] : []) + .concat(["salaire de base"]) + ) - return ( -
- - - - - - - - {R.keys(results).map(branch => { - let props = { branch, values: results[branch], analysis } - return ( - - ) - })} - - - - - )} - {relevantSalaries.has("salaire total") && [ - , - - ]} - - -
- - {humanFigure(2)(brut)}{" "} - Salaire brut -
- {relevantSalaries.has("salaire net") && ( - <> - - = - - {humanFigure(2)(net)}{" "} - Salaire net - - = - - {humanFigure(2)(total)}{" "} - Salaire total -
-
- ) - } + return ( +
+ + + + + + + + {R.keys(results).map(branch => { + let props = { key: branch, branch, values: results[branch], analysis, relevantSalaries } + return + })} + + + + + + )} + {relevantSalaries.has("salaire total") && [ + , + + ]} + + +
+ + {humanFigure(2)(brut)}{" "} + Salaire brut +
+ {relevantSalaries.has("salaire net") && ( + <> + + = + + {humanFigure(2)(net)}{" "} + Salaire net + + = + + {humanFigure(2)(total)}{" "} + Salaire total +
+
+ ) + } } class Row extends Component { - state = { - folded: true - } - render() { - let { branch, values, analysis, relevantSalaries } = this.props, - detail = byName(values) + state = { + folded: true + } + render() { + let { branch, values, analysis, relevantSalaries } = this.props, + detail = byName(values) - let title = name => { - let node = R.head(detail[name]) - return node.title || capitalise0(node.name) - } + let title = name => { + let node = R.head(detail[name]) + return node.title || capitalise0(node.name) + } - let aggregateRow = ( - this.setState({ folded: !this.state.folded })} - > - - {capitalise0(branch)}  - {this.state.folded ? "déplier >" : "replier"} - - - {this.state.folded ? ( - <> - {relevantSalaries.has("salaire net") && ( - <> - - - - - - {humanFigure(2)(cell(branch, "salarié", analysis))} - - - )} - {relevantSalaries.has("salaire total") && ( - <> - - + - - - {humanFigure(2)(cell(branch, "employeur", analysis))} - - - )} - - ) : ( - - )} - - ) + let aggregateRow = ( + this.setState({ folded: !this.state.folded })} + > + + {capitalise0(branch)}  + {this.state.folded ? "déplier >" : "replier"} + + + {this.state.folded ? ( + <> + {relevantSalaries.has("salaire net") && ( + <> + + - + + + {humanFigure(2)(cell(branch, "salarié", analysis))} + + + )} + {relevantSalaries.has("salaire total") && ( + <> + + + + + + {humanFigure(2)(cell(branch, "employeur", analysis))} + + + )} + + ) : ( + + )} + + ) - let detailRows = this.state.folded - ? [] - : R.keys(detail).map(subCellName => ( - -  {title(subCellName)} - {relevantSalaries.has("salaire net") && ( - <> - - - - - - {humanFigure(2)(subCell(detail, subCellName, "salarié"))} - - - )} - {relevantSalaries.has("salaire total") && ( - <> - - + - - - {humanFigure(2)(subCell(detail, subCellName, "employeur"))} - - - )} - - )) + let detailRows = this.state.folded + ? [] + : R.keys(detail).map(subCellName => ( + +  {title(subCellName)} + {relevantSalaries.has("salaire net") && ( + <> + + - + + + {humanFigure(2)(subCell(detail, subCellName, "salarié"))} + + + )} + {relevantSalaries.has("salaire total") && ( + <> + + + + + + {humanFigure(2)(subCell(detail, subCellName, "employeur"))} + + + )} + + )) - // returns an array of - return R.concat([aggregateRow], detailRows) - } + // returns an array of + return R.concat([aggregateRow], detailRows) + } +} + + + +// TODO Ce code est beaucoup trop spécifique +// C'est essentiellement une copie de Row +class ReductionRow extends Component { + state = { + folded: true + } + render() { + let {relevantSalaries, node} = this.props + if (!relevantSalaries.has('salaire total')) return null + let value = node.nodeValue + let aggregateRow = ( + this.setState({ folded: !this.state.folded })} + > + + Réductions   + {this.state.folded ? "déplier >" : "replier"} + + + {this.state.folded ? ( + <> + {relevantSalaries.has("salaire net") && ( + <> + + - + + + {humanFigure(2)(0)} + + + )} + {relevantSalaries.has("salaire total") && ( + <> + + + + + + {humanFigure(2)(value)} + + + )} + + ) : ( + + )} + + ) + + let detailRow = this.state.folded + ? null + : + +  Réduction générale + {relevantSalaries.has("salaire net") && ( + <> + + - + + + {humanFigure(2)(0)} + + + )} + {relevantSalaries.has("salaire total") && ( + <> + + + + + + {humanFigure(2)(value)} + + + )} + + + // returns an array of + return [aggregateRow, detailRow] + } } diff --git a/source/components/conversation/Conversation.js b/source/components/conversation/Conversation.js index 66fb10a4a..4fc87c033 100644 --- a/source/components/conversation/Conversation.js +++ b/source/components/conversation/Conversation.js @@ -14,7 +14,6 @@ export default class Conversation extends Component { if (nextProps.foldedSteps.length == this.props.foldedSteps.length) return null - console.log('will scroll') setTimeout( () => scroller.scrollTo("myScrollToElement", {