diff options
| author | Thomas Haddad | 2017-04-24 16:00:25 +0200 | 
|---|---|---|
| committer | Thomas Haddad | 2017-04-24 16:00:54 +0200 | 
| commit | 6d3a6bd8153d0fabefca6db4d50f64c0f79b9bae (patch) | |
| tree | fdbd6687fddb5e58cf753ddca48358c03538c36b | |
| parent | c9f6d0e6923f01b99788847880054f4c32ed585d (diff) | |
| download | chouette-core-6d3a6bd8153d0fabefca6db4d50f64c0f79b9bae.tar.bz2 | |
Refs #3151: Add error handlers when updating time_table_periods
Signed-off-by: Thomas Shawarma Haddad <thomas.haddad@af83.com>
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  | 
