aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Haddad2017-04-24 16:00:25 +0200
committerThomas Haddad2017-04-24 16:00:54 +0200
commit6d3a6bd8153d0fabefca6db4d50f64c0f79b9bae (patch)
treefdbd6687fddb5e58cf753ddca48358c03538c36b
parentc9f6d0e6923f01b99788847880054f4c32ed585d (diff)
downloadchouette-core-6d3a6bd8153d0fabefca6db4d50f64c0f79b9bae.tar.bz2
Refs #3151: Add error handlers when updating time_table_periods
Signed-off-by: Thomas Shawarma Haddad <thomas.haddad@af83.com>
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/actions/index.js18
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js6
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js7
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/index.js2
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js26
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js12
6 files changed, 56 insertions, 15 deletions
diff --git a/app/assets/javascripts/es6_browserified/time_tables/actions/index.js b/app/assets/javascripts/es6_browserified/time_tables/actions/index.js
index d83612211..8af08f97a 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/actions/index.js
@@ -85,9 +85,11 @@ const actions = {
group,
selectType
}),
- validatePeriodForm: (modalProps) => ({
+ validatePeriodForm: (modalProps, timeTablePeriods, metas) => ({
type: 'VALIDATE_PERIOD_FORM',
- modalProps
+ modalProps,
+ timeTablePeriods,
+ metas
}),
includeDateInPeriod: (index, day, dayTypes) => ({
type: 'INCLUDE_DATE_IN_PERIOD',
@@ -169,6 +171,18 @@ const actions = {
formatDate: (props) => {
return props.year + '-' + props.month + '-' + props.day
},
+ checkErrorsInPeriods: (start, end, index, periods) => {
+ let error = ''
+ start = new Date(start)
+ end = new Date(end)
+ _.each(periods, (period, i) => {
+ if(index != i){
+ if((new Date(period.period_start) <= start && new Date(period.period_end) >= start) || (new Date(period.period_start) <= end && new Date(period.period_end) >= end))
+ error = 'Les périodes ne peuvent pas se chevaucher'
+ }
+ })
+ return error
+ },
fetchTimeTables: (dispatch, nextPage) => {
let urlJSON = window.location.pathname.split('/', 5).join('/')
// console.log(nextPage)
diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js b/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js
index c46fb2c18..0fc8b7cf4 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js
@@ -31,7 +31,7 @@ const makeYearsOptions = (yearSelected) => {
return arr
}
-const PeriodForm = ({modal, timetable, onOpenAddPeriodForm, onClosePeriodForm, onUpdatePeriodForm, onValidatePeriodForm}) => (
+const PeriodForm = ({modal, timetable, metas, onOpenAddPeriodForm, onClosePeriodForm, onUpdatePeriodForm, onValidatePeriodForm}) => (
<div>
{modal.modalProps.active &&
<div className="form-group date filter_menu-item">
@@ -66,10 +66,11 @@ const PeriodForm = ({modal, timetable, onOpenAddPeriodForm, onClosePeriodForm, o
Annuler
</button>
<button
- onClick={() => onValidatePeriodForm(modal.modalProps)}
+ onClick={() => onValidatePeriodForm(modal.modalProps, timetable.time_table_periods, metas)}
>
Valider
</button>
+ <span>{modal.modalProps.error}</span>
</div>
</div>
}
@@ -85,6 +86,7 @@ const PeriodForm = ({modal, timetable, onOpenAddPeriodForm, onClosePeriodForm, o
PeriodForm.propTypes = {
modal: PropTypes.object.isRequired,
+ metas: PropTypes.object.isRequired,
onOpenAddPeriodForm: PropTypes.func.isRequired,
onClosePeriodForm: PropTypes.func.isRequired,
onUpdatePeriodForm: PropTypes.func.isRequired,
diff --git a/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js b/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js
index 68ee5beef..b6004c7f1 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js
@@ -5,7 +5,8 @@ var actions = require('../actions')
const mapStateToProps = (state) => {
return {
modal: state.modal,
- timetable: state.timetable
+ timetable: state.timetable,
+ metas: state.metas
}
}
@@ -20,8 +21,8 @@ const mapDispatchToProps = (dispatch) => {
onUpdatePeriodForm: (val, group, selectType) => {
dispatch(actions.updatePeriodForm(val, group, selectType))
},
- onValidatePeriodForm: (props) => {
- dispatch(actions.validatePeriodForm(props))
+ onValidatePeriodForm: (modalProps, timeTablePeriods, metas) => {
+ dispatch(actions.validatePeriodForm(modalProps, timeTablePeriods, metas))
}
}
}
diff --git a/app/assets/javascripts/es6_browserified/time_tables/index.js b/app/assets/javascripts/es6_browserified/time_tables/index.js
index c78df5f1e..132b1dd95 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/index.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/index.js
@@ -50,7 +50,7 @@ var initialState = {
year: String(new Date().getFullYear())
},
index: false,
- errors: []
+ error: ''
},
confirmModal: {}
}
diff --git a/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js b/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js
index 58466fa70..474c70ea5 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js
@@ -1,10 +1,13 @@
var _ = require('lodash')
+var actions = require('../actions')
+
let newModalProps = {}
let emptyDate = {
- begin: '01',
+ day: '01',
month: '01',
year: String(new Date().getFullYear())
}
+let period_start = '', period_end = ''
const modal = (state = {}, action) => {
switch (action.type) {
@@ -12,8 +15,8 @@ const modal = (state = {}, action) => {
newModalProps = _.assign({}, state.modalProps, {active: false})
return _.assign({}, state, {modalProps: newModalProps})
case 'OPEN_EDIT_PERIOD_FORM':
- let period_start = action.period.period_start.split('-')
- let period_end = action.period.period_end.split('-')
+ period_start = action.period.period_start.split('-')
+ period_end = action.period.period_end.split('-')
newModalProps = JSON.parse(JSON.stringify(state.modalProps))
newModalProps.begin.year = period_start[0]
@@ -26,16 +29,29 @@ const modal = (state = {}, action) => {
newModalProps.active = true
newModalProps.index = action.index
+ newModalProps.error = ''
return _.assign({}, state, {modalProps: newModalProps})
case 'OPEN_ADD_PERIOD_FORM':
- newModalProps = _.assign({}, state.modalProps, {active: true, begin: emptyDate, end: emptyDate, index: false, errors: []})
+ newModalProps = _.assign({}, state.modalProps, {active: true, begin: emptyDate, end: emptyDate, index: false, error: ''})
return _.assign({}, state, {modalProps: newModalProps})
case 'UPDATE_PERIOD_FORM':
newModalProps = JSON.parse(JSON.stringify(state.modalProps))
newModalProps[action.group][action.selectType] = action.val
return _.assign({}, state, {modalProps: newModalProps})
case 'VALIDATE_PERIOD_FORM':
- newModalProps = _.assign({}, state.modalProps, {active: false})
+ period_start = actions.formatDate(action.modalProps.begin)
+ period_end = actions.formatDate(action.modalProps.end)
+ newModalProps = _.assign({}, state.modalProps)
+
+ if(new Date(period_end) <= new Date(period_start)){
+ newModalProps.error = 'La date de départ doit être antérieure à la date de fin'
+ return _.assign({}, state, {modalProps: newModalProps})
+ }
+
+ let newPeriods = JSON.parse(JSON.stringify(action.timeTablePeriods))
+ let error = actions.checkErrorsInPeriods(period_start, period_end, action.modalProps.index, newPeriods)
+ newModalProps.error = error
+ newModalProps.active = (error == '') ? false : true
return _.assign({}, state, {modalProps: newModalProps})
default:
return state
diff --git a/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js b/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js
index dc13684fb..f84223b23 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js
@@ -58,7 +58,14 @@ const timetable = (state = {}, action) => {
case 'VALIDATE_PERIOD_FORM':
let period_start = actions.formatDate(action.modalProps.begin)
let period_end = actions.formatDate(action.modalProps.end)
- let newPeriods = JSON.parse(JSON.stringify(state.time_table_periods))
+ if(new Date(period_end) <= new Date(period_start)){
+ return state
+ }
+ let newPeriods = JSON.parse(JSON.stringify(action.timeTablePeriods))
+ let error = actions.checkErrorsInPeriods(period_start, period_end, action.modalProps.index, newPeriods)
+ if(error != ''){
+ return state
+ }
if (action.modalProps.index !== false){
newPeriods[action.modalProps.index].period_start = period_start
newPeriods[action.modalProps.index].period_end = period_end
@@ -69,7 +76,8 @@ const timetable = (state = {}, action) => {
}
newPeriods.push(newPeriod)
}
- return _.assign({}, state, {time_table_periods: newPeriods})
+ newState =_.assign({}, state, {time_table_periods: newPeriods})
+ return _.assign({}, newState, {current_month: actions.updateSynthesis(newState, action.metas.day_types)})
default:
return state