diff --git a/employeemanagement/src/components/dashboard/Dashboard.js b/employeemanagement/src/components/dashboard/Dashboard.js index a7451c7706223c9d74049d286e48cc47bacd21ab..e8032bdcdc2f584fe0fe6c5335224bab57494fe0 100644 --- a/employeemanagement/src/components/dashboard/Dashboard.js +++ b/employeemanagement/src/components/dashboard/Dashboard.js @@ -6,6 +6,7 @@ import { connect } from 'react-redux'; import { Redirect } from 'react-router-dom'; import { firestoreConnect } from 'react-redux-firebase'; import { compose } from 'redux'; +import moment from 'moment'; class Dashboard extends Component { render() { @@ -16,11 +17,17 @@ class Dashboard extends Component { }) ) : null + const todayList = list && list.length ? ( + list.filter(l => { + return l.Date === moment().format('MM/DD/YYYY') + }) + ) : null + if( !auth.uid ) return <Redirect to='/signin' /> return ( <div id="content"> <Navbar profile = { profile } /> - <ManageShift /> + <ManageShift uid={ auth.uid } todayList={ todayList } /> <ShiftReport workList={ list } schedule={ schedule } /> </div> ) diff --git a/employeemanagement/src/components/layout/ManageShift.js b/employeemanagement/src/components/layout/ManageShift.js index 9f244c9038ac65c06e1edd6b812e4a8439c5d9ca..0e13d8c65766d5283a6eaffdf1e9bbaa31554063 100644 --- a/employeemanagement/src/components/layout/ManageShift.js +++ b/employeemanagement/src/components/layout/ManageShift.js @@ -1,18 +1,104 @@ -import React, { Component } from 'react' +import React, { Component } from 'react'; +import moment from 'moment'; +import { connect } from 'react-redux'; +import { createWork, updateWork } from '../../store/actions/shiftAction'; class ManageShift extends Component { + + state = { + date: null, + empId: this.props.uid, + startShift: '', + startBreak: '', + endBreak: '', + endShift: '', + stateSet: false + } + componentDidMount() { + //console.log(this.props.todayList) + } + UNSAFE_componentWillReceiveProps() { + if (this.props.todayList && !this.state.stateSet) { + this.setState(this.props.todayList[0], () => { + this.setState({stateSet:true}) + //console.log(this.state) + }) + } + } + + handleCreatEvent = (e) => { + const r = window.confirm("Do you really want to " + e.target.id + "?"); if (r == true) { + this.setState({ + [e.target.id]: moment().format('MM/DD/YYYY HH:mm:ss') + }, () => { + this.props.createWork(this.state); + }) + } + } + + handleUpdateEvent = (e) => { + const r = window.confirm("Do you really want to " + e.target.id + "?"); if (r == true) { + this.setState({ + [e.target.id]: moment().format('MM/DD/YYYY HH:mm:ss'), + }, () => { + this.props.updateWork(this.state); + }) + } + } render() { return ( - <div className="container"> - <div className="row"> - <div className="col-3 text-center"><button onClick={this.handleCreatEvent} id="startWorkTime" type="button" className="btn btn-success btn-sm btn-special">Start Work</button></div> - <div className="col-3 text-center"><button disabled type="button" className="btn btn-success btn-sm btn-special">Start Lunch Break</button></div> - <div className="col-3 text-center"><button disabled type="button" className="btn btn-success btn-sm btn-special">Lunch Break Finish</button></div> - <div className="col-3 text-center"><button disabled type="button" className="btn btn-success btn-sm btn-special">Close Work</button></div> + <div className="row"> + <div className="col-3 text-center"> + <button + onClick={this.handleCreatEvent} + disabled={this.state.startShift + "" != ""} + id="startShift" + type="button" + className="btn btn-success btn-sm btn-special"> + Start Work + </button> + </div> + <div className="col-3 text-center"> + <button + type="button" + className="btn btn-success btn-sm btn-special" + disabled={this.state.startShift + "" == "" || this.state.startBreak + "" != ""} + onClick={this.handleUpdateEvent} + id="startBreak"> + Start Lunch Break + </button> + </div> + <div className="col-3 text-center"> + <button + disabled={this.state.startShift + "" == "" || this.state.startBreak + "" == "" || this.state.endBreak + "" != ""} + type="button" + className="btn btn-success btn-sm btn-special" + onClick={this.handleUpdateEvent} + id="endBreak"> + Lunch Break Finish + {this.state.endBreak == ""} + </button> + </div> + <div className="col-3 text-center"> + <button + disabled={this.state.startShift + "" == "" || this.state.startBreak + "" == "" || this.state.endBreak + "" == "" || this.state.endShift + "" != ""} + type="button" + onClick={this.handleUpdateEvent} + className="btn btn-success btn-sm btn-special" + id="endShift"> + Close Work + {this.state.endShift == ""} + </button> </div> </div> - ) + ); + } +} +const mapStateToProps = (dispatc) => { + return { + createWork: (work) => dispatc(createWork(work)), + updateWork: (work) => dispatc(updateWork(work)) } } -export default ManageShift +export default connect(null, mapStateToProps)(ManageShift); diff --git a/employeemanagement/src/store/actions/shiftAction.js b/employeemanagement/src/store/actions/shiftAction.js index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e251d648896b36001d076e8833fef847a9a4fe69 100644 --- a/employeemanagement/src/store/actions/shiftAction.js +++ b/employeemanagement/src/store/actions/shiftAction.js @@ -0,0 +1,41 @@ +import moment from 'moment'; + +export const createWork = (shift) => { + return (dispatch, getState, { getFirebase, getFirestore }) => { + const firestore = getFirestore(); + const authuId = getState().firebase.auth.uid; + + firestore.collection('Shifts').add({ + ...shift, + empId: authuId, + date: moment().format('MM/DD/YYYY') + }).then(() => { + dispatch({ type: 'ADD_SHIFT', shift }) + }).catch((err) => { + dispatch({ type: 'ADD_SHIFT_ERROR', err }); + }) + } +} +export const updateWork = (shift) => { + return (dispatch, getState, { getFirebase, getFirestore }) => { + const firestore = getFirestore(); + + firestore.collection("Shifts") + .where("empId", "==", shift.empId) + .get() + .then(function (querySnapshot) { + querySnapshot.forEach(function (doc) { + let data = doc.data(); + if (new Date(data.date).toLocaleDateString() == new Date().toLocaleDateString()) { + shift.date = data.date; + firestore.collection('Shifts').doc(doc.id).update(shift) + .then(() => { + dispatch({ type: 'UPDATE_SHIFT', shift }) + }).catch((err) => { + dispatch({ type: 'UPDATE_SHIFT_ERROR', err }); + }) + } + }) + }) + } +} \ No newline at end of file diff --git a/employeemanagement/src/store/reducers/shiftReducer.js b/employeemanagement/src/store/reducers/shiftReducer.js index 788290d308e520238a6e1f0a357250f1452c177d..99a1f46ac41b2dc271ade780e26c4cea97e7854d 100644 --- a/employeemanagement/src/store/reducers/shiftReducer.js +++ b/employeemanagement/src/store/reducers/shiftReducer.js @@ -1,6 +1,21 @@ const initState = {} const shiftReducer = (state = initState, action) => { - return state + switch (action.type) { + case 'ADD_SHIFT': + console.log('New shift added', action.shift); + return state; + case 'ADD_SHIFT_ERROR': + console.log('New shift error', action.shift); + return state; + case 'UPDATE_SHIFT': + console.log('update shift', action.shift); + return state; + case 'UPDATE_SHIFT_ERROR': + console.log('update shift error', action.shift); + return state; + default: + return state; + } } export default shiftReducer \ No newline at end of file