Skip to content

Commit d313e35

Browse files
committed
Added date in front of installments
1 parent 76ab589 commit d313e35

File tree

5 files changed

+87
-58
lines changed

5 files changed

+87
-58
lines changed

app/Routes/attendance.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ router.post('/api/attendance', (req, res, next)=>{
3232
if(!req.body){
3333
return res.status(400).send('req body missing');
3434
}
35+
3536
const day = new AttendanceModel(req.body);
3637
day.save()
3738
.then(doc => {

app/models/student.model.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const StudentSchema = new mongoose.Schema({
2121
type: Number,
2222
require: [true, 'std required mann!!']
2323
},
24+
school: String,
2425
Board: String,
2526
joinedOn: Date,
2627
lastYearmarks: {

client/src/components/add-student/AddStudent.js

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export default class AddStudent extends Component {
2121
this.firstNameEl = React.createRef(); this.middleNameEl = React.createRef(); this.lastNameEl = React.createRef();
2222
this.addressEl = React.createRef(); this.standardEl = React.createRef();
2323
this.boardEl = React.createRef(); this.physicsEl = React.createRef();
24+
this.schoolEl = React.createRef();
2425
this.englishEl = React.createRef(); this.mathsEl = React.createRef();
2526
this.sexEl = React.createRef(); this.feesEl = React.createRef();
2627
this.state = {
@@ -88,14 +89,15 @@ export default class AddStudent extends Component {
8889
const fName = this.firstNameEl.current.value; const mName = this.firstNameEl.current.value;
8990
const lName = this.lastNameEl.current.value; const std = this.standardEl.current.value;
9091
const addr = this.addressEl.current.value; const brd = this.boardEl.current.value;
92+
const schl = this.schoolEl.current.value;
9193
const phy = this.physicsEl.current.value; const eng = this.englishEl.current.value;
9294
const maths = this.mathsEl.current.value; const sex = this.sexEl.current.value; const fees = this.feesEl.current.value;
9395

9496
const addStudentRequest = {
9597
"firstName": fName, "middleName": mName, "lastName": lName,
9698
"dateOfBirth": this.state.dateOfBirth,
9799
"joinedOn": this.state.dateOfJoining,
98-
"Address": addr, "standard": std, "Board": brd,
100+
"Address": addr, "standard": std, "Board": brd,"school": schl,
99101
"lastYearmarks": { "physics": phy, "english": eng, "maths": maths },
100102
"sex": sex, "fees": { "total": fees }
101103
}
@@ -147,19 +149,26 @@ export default class AddStudent extends Component {
147149
<input type="text" ref={this.lastNameEl} className="form-control form-control-sm" placeholder="Last name" required />
148150
</div>
149151
</div>
150-
<div className="form-group">
151-
<input type="text" ref={this.addressEl} className="form-control form-control-sm" id="InputAddress" placeholder="Address" required />
152-
<div className="input-group w-25">
153-
<label htmlFor="dateOfBirth">Date Of Birth </label>
154-
<div className="w-100"></div>
155-
<input type="text" className='form-control form-control-sm' value={this.state.dateOfBirth.toLocaleString('en-IN').split(',')[0]} name="dateOfBirth" readOnly />
156-
<div className="input-group-append">
157-
<span className="input-group-text" title='Date Of Joining' id="basic-addon1" onClick={this.openDOBModal}>
158-
<i className="far fa-calendar-alt" id="date" />
159-
</span>
152+
<div className="row">
153+
<div className="form-group col">
154+
<label htmlFor="InputAddress">Address</label>
155+
<input type="text" ref={this.addressEl} className="form-control form-control-sm" id="InputAddress" placeholder="Address" required />
156+
</div>
157+
<div className="form-group col">
158+
<div className="input-group">
159+
<label htmlFor="dateOfBirth">Date Of Birth </label>
160+
<div className="w-100"></div>
161+
<input type="text" className='form-control form-control-sm' value={this.state.dateOfBirth.toLocaleString('en-IN').split(',')[0]} name="dateOfBirth" readOnly />
162+
<div className="input-group-append">
163+
<span className="input-group-text" title='Date Of Joining' id="basic-addon1" onClick={this.openDOBModal}>
164+
<i className="far fa-calendar-alt" id="date" />
165+
</span>
166+
</div>
160167
</div>
161168
</div>
169+
162170
</div>
171+
163172
<hr />
164173
<div className="row">
165174
<div className="form-group col">
@@ -182,18 +191,21 @@ export default class AddStudent extends Component {
182191
<option>CBSE</option>
183192
</select>
184193
</div>
185-
</div>
186-
<div className="input-group w-25">
187-
<label htmlFor="dateOfJoining">Date Of Joining </label>
188-
<div className="w-100"></div>
189-
<input type="text" className='form-control form-control-sm' value={this.state.dateOfJoining.toLocaleString('en-IN').split(',')[0]} name="dateOfJoining" readOnly />
190-
<div className="input-group-append">
191-
<span className="input-group-text" title='Date Of Joining' id="basic-addon1" onClick={this.openJoiningModal}>
192-
<i className="far fa-calendar-alt" id="date" />
193-
</span>
194+
<div className="form-group col">
195+
<label htmlFor="dateOfJoining">Date Of Joining </label>
196+
<div className="input-group">
197+
<input type="text" className='form-control form-control-sm' value={this.state.dateOfJoining.toLocaleString('en-IN').split(',')[0]} name="dateOfJoining" readOnly />
198+
<div className="input-group-append">
199+
<span className="input-group-text" title='Date Of Joining' id="basic-addon1" onClick={this.openJoiningModal}>
200+
<i className="far fa-calendar-alt" id="date" />
201+
</span>
202+
</div>
203+
</div>
194204
</div>
195205
</div>
196-
<hr />
206+
<label htmlFor="InputSchool">School</label>
207+
<input type="text" ref={this.schoolEl} className="form-control form-control-sm" id="InputSchool" placeholder="School" required />
208+
<hr/>
197209
<div>
198210
<h5>Last Year Marks / Grades</h5>
199211
</div>

client/src/components/attendance/Attendance.js

Lines changed: 46 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export default class AddAttendance extends Component {
6262
present: [], presentStuds: [],
6363
errors: [], modalIsOpen: false,
6464
alertModalIsOpen: false, successModalIsOpen: false,
65-
loading: false
65+
loading: false, saving: false
6666
}
6767
}
6868

@@ -89,9 +89,7 @@ export default class AddAttendance extends Component {
8989
}
9090
return res.json()
9191
}).then(resdata => {
92-
this.setState({ students: resdata, present:resdata, errors: [], loading: false },()=>{
93-
console.log(this.state.present)
94-
})
92+
this.setState({ students: resdata, present:resdata, errors: [], loading: false })
9593
}).catch(err => {
9694
console.log(err)
9795
this.setState({ loading: false })
@@ -111,6 +109,8 @@ export default class AddAttendance extends Component {
111109

112110
handleFormSubmit = e => {
113111
e.preventDefault();
112+
this.setState({saving: true})
113+
this.openSuccessModal()
114114
const attendanceRequest = {
115115
"date": this.state.date.toLocaleDateString(),
116116
"present": this.state.present
@@ -131,10 +131,9 @@ export default class AddAttendance extends Component {
131131
this.setState({ loading: false })
132132
throw new Error(res.status)
133133
}
134-
this.setState({ loading: false })
134+
this.setState({ loading: false, saving: false })
135135
return res.json()
136136
})
137-
.then(data => this.openSuccessModal())
138137
.catch(err => {
139138
this.setState({ loading: false })
140139
console.log(err)
@@ -155,7 +154,7 @@ export default class AddAttendance extends Component {
155154
};
156155

157156
closeModal = () => {
158-
this.setState({ modalIsOpen: false, alertModalIsOpen: false, successModalIsOpen: false });
157+
this.setState({ modalIsOpen: false, alertModalIsOpen: false, successModalIsOpen: false, errors:[] });
159158
};
160159

161160
openAlertModal = () => {
@@ -178,38 +177,54 @@ export default class AddAttendance extends Component {
178177
}
179178
}).then(res => {
180179
if (res.status !== 200 && res.status !== 201) {
181-
if (res.status === 401) {
182-
this.setState({ loading: false })
183-
this.props.history.push('/login')
184-
}
185-
if (res.status === 404) {
186-
throw new Error(res.status)
187-
180+
switch (res.status) {
181+
case 400 :
182+
console.log(400)
183+
this.setState({ loading: false, errors: [...this.state.errors, 'Request Body Missing'] })
184+
this.openAlertModal()
185+
186+
break;
187+
case 401:
188+
// Not authenticated Error
189+
console.log(401)
190+
this.setState({ loading: false})
191+
this.props.history.push('/login')
192+
193+
break;
194+
case 404:
195+
this.setState({ loading: false, errors: [...this.state.errors, 'Not Found'] })
196+
console.log(404)
197+
this.openAlertModal()
198+
199+
break;
200+
default:
201+
this.setState({ loading: false })
202+
throw new Error(res.status)
203+
188204
}
189-
this.setState({ loading: true })
190-
throw new Error(res.status)
205+
191206
}
192207
return res.json()
193208
}).then(data => {
194-
this.setState({
195-
presentStuds: data.present,
196-
errors: [],
197-
loading: false
198-
})
209+
if(this.state.errors.length===0)
210+
this.setState({
211+
presentStuds: data.present,
212+
errors: [],
213+
loading: false
214+
})
215+
}).catch(err=>{
216+
console.log(err)
217+
this.setState({loading: false})
199218
})
200-
.catch(err => {
201-
this.setState({ loading: false, errors: [...this.state.errors, err] })
202-
console.log(err)
203-
this.openAlertModal()
204-
})
205219
}
206220

207221
render() {
208222
const listItem = this.state.students.map(stud => (
209223
<Checkbox key={stud._id} stud={stud} checked={true} handleChange={this.handleCheckboxChange} clearList={this.clearListItem} />
210224
))
211225
return (this.state.loading) ? <MyLoader loading={this.state.loading} /> :
212-
<div className="container bg-light mt-5">
226+
<div className="container bg-light pt-5 h-100">
227+
<h3>Attendance Ppge</h3>
213228
<div className="row">
214229
<div className="col-md p-5">
215230
<form onSubmit={this.handleFormSubmit}>
@@ -269,8 +284,8 @@ export default class AddAttendance extends Component {
269284
Error
270285
<span className="float-right" style={{ cursor: 'pointer' }} onClick={this.closeModal}>X</span>
271286
</div><hr />
272-
<div className="panel-body"><p>Something Went Wrong!!</p></div><hr />
273-
<div className="panel-footer"><span className='float-right mr-2 text-danger'>{this.state.errors.length} Errors</span></div>
287+
<div className="panel-body"><p>Something Went Wrong!!<br/> {this.state.errors.map((err, i)=><span key={i}>{err.toString()}</span>)} </p></div><hr />
288+
<div className="panel-footer"><span className='float-right mr-2 text-danger'>{this.state.errors.length} Errors</span></div>
274289
</div>
275290
}
276291
</Modal>
@@ -284,10 +299,10 @@ export default class AddAttendance extends Component {
284299
>
285300
<div className="panel panel-success">
286301
<div className='panel-heading'>
287-
Success
302+
Saving Attendance
288303
<span className="float-right" style={{ cursor: 'pointer' }} onClick={this.closeModal}>X</span>
289304
</div><hr />
290-
<div className="panel-body"><p>SuccessFully Marked Attendance!!</p></div><hr />
305+
{this.state.saving ? <div className="panel-body"><i className="fas fa-spinner"/> Saving...</div> : <div className="panel-body"><p>SuccessFully Marked Attendance!!</p></div>}<hr />
291306
<div className="panel-footer"><button className="btn btn-success" onClick={this.closeModal}>Ok</button></div>
292307
</div>
293308
</Modal>

client/src/components/fees/Fee.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ const Fee = (props) => {
197197
{
198198
students.sort((a, b) => { return a.standard - b.standard }).map((stud, i) => (
199199
<tr key={i} onClick={e => selectStudent(stud, e)}>
200-
<th scope='row'>{i}</th>
201-
<td>{stud.firstName} {stud.lastName}</td>
200+
<th scope='row'>{i+1}</th>
201+
<td>{stud.firstName.toLowerCase()} {stud.lastName.toLowerCase()}</td>
202202
</tr>
203203
))
204204
}
@@ -223,7 +223,7 @@ const Fee = (props) => {
223223
<h5>Installments Paid</h5>
224224
<hr className='border' />
225225
{!isEmpty(selectedStudent) && <h6>{fees.installments
226-
.map((inst, i) => <div key={i}>{inst.amount}</div>)}</h6>}
226+
.map((inst, i) => <div key={i}>{inst.amount} &nbsp;&nbsp; - &nbsp;&nbsp; {new Date(inst.date).toLocaleString('en-IN').split(',')[0]}</div>)}</h6>}
227227
</div>
228228

229229
<div className="col new">
@@ -235,10 +235,10 @@ const Fee = (props) => {
235235
<div className="row">
236236

237237
</div>
238-
<div class="input-group mb-3 w-75">
238+
<div className="input-group mb-3 w-75">
239239
<input type="tel" onChange={installmentInputHandler} className='form-control form-control-sm' name="installment" required />
240-
<div class="input-group-append">
241-
<span class="input-group-text" title='Date Of Installment' id="basic-addon1">
240+
<div className="input-group-append">
241+
<span className="input-group-text" title='Date Of Installment' id="basic-addon1">
242242
<i className="far fa-calendar-alt" id="date" onClick={openModal}></i>
243243
</span>
244244
</div>

0 commit comments

Comments
 (0)