Commit dbafa68d2adb056b4146c8733aa9a104f9176765

Authored by Deepak
1 parent def5858c91
Exists in master

added teachers modal admin panel

imports/client/views/nonOrg/NotFound.css
... ... @@ -0,0 +1,17 @@
  1 +.NotFound
  2 +{
  3 + margin: 20px auto;
  4 + width: 400px;
  5 + height: auto;
  6 + padding: 20px;
  7 + -webkit-border-radius: 8px/7px;
  8 + -moz-border-radius: 8px/7px;
  9 + border-radius: 8px/7px;
  10 + background-color: white;
  11 + -webkit-box-shadow: 1px 2px 5px rgba(0,0,0,.31);
  12 + -moz-box-shadow: 1px 2px 5px rgba(0,0,0,.31);
  13 + box-shadow: 1px 2px 5px rgba(0,0,0,.31);
  14 + border: solid 1px #cbc9c9;
  15 + font-family: 'Ubuntu', sans-serif;
  16 + color:crimson;
  17 +}
... ...
imports/client/views/nonOrg/NotFound.js
1 1 import React from 'react';
2 2 import { Alert } from 'react-bootstrap';
3   -
  3 +import 'NotFound.css'
4 4 const NotFound = () => (
5 5 <div className="NotFound">
6 6 <Alert bsStyle="danger">
... ...
imports/client/views/org/admin/Sidebar.js
... ... @@ -32,7 +32,7 @@ export class AdminSidebar extends Component {
32 32 <div className="sidebar-category sidebar-category-visible">
33 33 <div className="category-content no-padding">
34 34 <Nav className="navigation navigation-main navigation-accordion">
35   - <NavItem className="navigation-header"><span>#schoolname</span> <i className="icon-menu" title="Main pages"></i></NavItem>
  35 + <NavItem className="navigation-header"><span>{org.name}</span> <i className="icon-menu" title="Main pages"></i></NavItem>
36 36 <NavItem className="active" eventKey={1} href="#"><i className="icon-home4"></i> <span>Dashboard</span></NavItem>
37 37  
38 38 <NavDropdown eventKey={2} title="Settings" name="Settings" id="setting">
... ...
imports/client/views/org/admin/students/AddStudentFormContainer.js
... ... @@ -1,96 +0,0 @@
1   -import React, { Component } from 'react'
2   -import { AddStudentForm } from './addStudentForm'
3   -import StudentForm from './StudentForm'
4   -import Form from '/imports/client/views/core/Form'
5   -import Validator from '/imports/client/views/core/Validator'
6   -import { isRequired, isValidEmail } from '/imports/client/views/core/validations'
7   -import { addStudentManually } from '/imports/collections/students/methods';
8   -
9   -export class AddStudentFormContainer extends Component {
10   -
11   - constructor(props) {
12   - super(props)
13   - this.state = { currentStep: 0 }
14   - this.handleNextClick = this.handleNextClick.bind(this)
15   - this.handleBackClick = this.handleBackClick.bind(this)
16   - this.handleSubmit = this.handleSubmit.bind(this)
17   - }
18   -
19   - handleNextClick() {
20   - this.form.handleSubmit()
21   - if (this.validator.getErrors() && Object.keys(this.validator.getErrors()).length > 0) return
22   - this.setState({ currentStep: this.state.currentStep + 1 })
23   - this.form.resetSubmitted()
24   - }
25   -
26   - handleBackClick() {
27   - this.setState({ currentStep: this.state.currentStep + -1 })
28   - }
29   -
30   - handleSubmit() {
31   - if (this.state.currentStep === 3) {
32   - addStudentManually.call(this.form.state.values)
33   - }
34   - }
35   -
36   - //render callback
37   - render() {
38   - return (
39   - <Form
40   - onSubmit={this.handleSubmit}
41   - ref={form => this.form = form}
42   - initialValues={{
43   - gender: 'male',
44   - parentGender: 'male',
45   - }}
46   - >
47   - {({ values, setValue, getValue, isSubmitted, isDirty }) => (
48   - <Validator
49   - values={values}
50   - ref={validator => this.validator = validator}
51   - validations={{
52   - admissionId: [(value) => isRequired('Admission id', value)],
53   - firstName: [(value) => isRequired('First name', value)],
54   - lastName: [(value) => isRequired('Last name', value)],
55   - email: [(value) => isRequired('Email', value), isValidEmail],
56   - dob: [(value) => isRequired('Date of birth', value)],
57   - gender: [(value) => isRequired('Gender', value)],
58   - rollNo: [(value) => this.state.currentStep === 1 && isRequired('Roll no', value)],
59   - studentClass: [(value) => this.state.currentStep === 1 && isRequired('Class', value)],
60   - section: [(value) => this.state.currentStep === 1 && isRequired('Section', value)],
61   - community: [(value) => this.state.currentStep === 1 && isRequired('Community', value)],
62   - bloodGroup: [(value) => this.state.currentStep === 1 && isRequired('Blood group', value)],
63   - phone: [(value) => this.state.currentStep === 1 && isRequired('Phone', value)],
64   - address: [(value) => this.state.currentStep === 2 && isRequired('Address', value)],
65   - city: [(value) => this.state.currentStep === 2 && isRequired('City', value)],
66   - state: [(value) => this.state.currentStep === 2 && isRequired('State', value)],
67   - parentName: [(value) => this.state.currentStep === 3 && isRequired('Parent name', value)],
68   - parentEmail: [(value) => this.state.currentStep === 3 && isRequired('Parent email', value), (value) => this.state.currentStep === 3 && isValidEmail(value)],
69   - relation: [(value) => this.state.currentStep === 3 && isRequired('Relation', value)],
70   - profession: [(value) => this.state.currentStep === 3 && isRequired('Profession', value)],
71   - parentGender: [(value) => this.state.currentStep === 3 && isRequired('Parent gender', value)],
72   - parentPhone: [(value) => this.state.currentStep === 3 && isRequired('Parent phone', value)],
73   - parentAddress: [(value) => this.state.currentStep === 3 && isRequired('Parent address', value)],
74   - parentCity: [(value) => this.state.currentStep === 3 && isRequired('Parent city', value)],
75   - parentState: [(value) => this.state.currentStep === 3 && isRequired('Parent state', value)],
76   - parentZipcode: [(value) => this.state.currentStep === 3 && isRequired('Parent zip code', value)],
77   - }}
78   - >
79   - {({ errors }) => (
80   - <StudentForm
81   - isDirty={isDirty}
82   - setValue={setValue}
83   - getValue={getValue}
84   - isSubmitted={isSubmitted}
85   - errors={errors}
86   - onNextClick={this.handleNextClick}
87   - onBackClick={this.handleBackClick}
88   - currentStep={this.state.currentStep}
89   - />
90   - )}
91   - </Validator>
92   - )}
93   - </Form>
94   - )
95   - }
96   -}
imports/client/views/org/admin/students/FabMenu.js
... ... @@ -1,35 +0,0 @@
1   -import _ from 'lodash';
2   -import { Meteor } from 'meteor/meteor';
3   -
4   -import React, { Component } from 'react';
5   -import { Link,browserHistory } from 'react-router';
6   -import { FormGroup,Panel,Table,
7   - ButtonToolbar,Modal,
8   - FormControl,Glyphicon,Button } from 'react-bootstrap';
9   -import { AddStudentForm } from './addStudentForm';
10   -
11   -const style = {
12   - margin: 12,
13   -};
14   -export class FabMenuView extends Component {
15   - constructor(props) {
16   - super(props);
17   - this.state = {
18   - show: false
19   - };
20   - this.onUpdate = this.onUpdate.bind(this);
21   - };
22   - onUpdate(key, value) {
23   - this.setState({[key]: value});
24   - };
25   -
26   - render() {
27   - return (
28   - <div>
29   - <Button bsStyle="primary">Add Student</Button>
30   - <Button bsStyle="info">Upload CSV</Button>
31   - </div>
32   - );
33   - };
34   -
35   -};
imports/client/views/org/admin/students/StudentForm.js
... ... @@ -1,485 +0,0 @@
1   -import React, { PropTypes } from 'react'
2   -import {
3   - Row,
4   - Col,
5   - FormGroup,
6   - FormControl,
7   - Button
8   -} from 'react-bootstrap'
9   -import DatePicker from '/imports/client/views/core/DatePicker'
10   -import Label from '/imports/client/views/core/Label'
11   -import Stepper from '/imports/client/views/core/Stepper'
12   -import ErrorLabel from '/imports/client/views/core/ErrorLabel'
13   -
14   -const StudentForm = props => (
15   - <div className="stepy-validation">
16   - <Stepper
17   - steps={[
18   - {
19   - label: 'Personal data',
20   - active: props.currentStep === 0,
21   - },
22   - {
23   - label: 'Academic',
24   - active: props.currentStep === 1,
25   - },
26   - {
27   - label: 'Address',
28   - active: props.currentStep === 2,
29   - },
30   - {
31   - label: 'Parent info',
32   - active: props.currentStep === 3,
33   - }
34   - ]}
35   - />
36   - {props.currentStep === 0 && (
37   - <fieldset title="1">
38   - <legend className="text-semibold">Personal data</legend>
39   - <Row>
40   - <Col xs={12} sm={6}>
41   - <FormGroup controlId="admissionId">
42   - <Label required>Admission Id</Label>
43   - <FormControl
44   - type="text"
45   - value={props.getValue('admissionId')}
46   - placeholder="admission Id"
47   - onChange={e => props.setValue('admissionId', e.target.value)}
48   - />
49   - {props.isSubmitted() && props.errors && props.errors.admissionId && (
50   - <ErrorLabel> {props.errors.admissionId} </ErrorLabel>
51   - )}
52   - </FormGroup>
53   - </Col>
54   - <Col xs={12} sm={6}>
55   - <FormGroup controlId="firstName">
56   - <Label required>First Name</Label>
57   - <FormControl
58   - type="text"
59   - value={props.getValue('firstName')}
60   - placeholder="First Name"
61   - onChange={e => props.setValue('firstName', e.target.value)}
62   - />
63   - {props.isSubmitted() && props.errors && props.errors.firstName && (
64   - <ErrorLabel> {props.errors.firstName} </ErrorLabel>
65   - )}
66   - </FormGroup>
67   - </Col>
68   - </Row>
69   - <Row>
70   - <Col xs={12} sm={6}>
71   - <FormGroup controlId="lastName">
72   - <Label required>Last Name</Label>
73   - <FormControl
74   - type="text"
75   - value={props.getValue('lastName')}
76   - placeholder="Last Name"
77   - onChange={e => props.setValue('lastName', e.target.value)}
78   - />
79   - {props.isSubmitted() && props.errors && props.errors.lastName && (
80   - <ErrorLabel> {props.errors.lastName} </ErrorLabel>
81   - )}
82   - </FormGroup>
83   - </Col>
84   - <Col xs={12} sm={6}>
85   - <FormGroup controlId="formControlsSelect">
86   - <Label>Gender</Label>
87   - <FormControl componentClass="select"
88   - placeholder="select"
89   - value={props.getValue('gender')}
90   - onChange={e => props.setValue('gender', e.target.value)}
91   - >
92   - <option value="male">Male</option>
93   - <option value="female">Female</option>
94   - </FormControl>
95   - {props.isSubmitted() && props.errors && props.errors.gender && (
96   - <ErrorLabel> {props.errors.gender} </ErrorLabel>
97   - )}
98   - </FormGroup>
99   - </Col>
100   - </Row>
101   - <Row>
102   - <Col xs={12} sm={6}>
103   - <FormGroup controlId="email">
104   - <Label required>Email</Label>
105   - <FormControl
106   - type="email"
107   - value={props.getValue('email')}
108   - placeholder="Email"
109   - onChange={e => props.setValue('email', e.target.value)}
110   - />
111   - {props.isSubmitted() && props.errors && props.errors.email && (
112   - <ErrorLabel> {props.errors.email} </ErrorLabel>
113   - )}
114   - </FormGroup>
115   - </Col>
116   - <Col xs={12} sm={6}>
117   - <FormGroup>
118   - <Label required>Date of birth</Label>
119   - <DatePicker
120   - id="dob"
121   - setValue = {props.setValue}
122   - value={props.getValue('dob')}
123   - onChange={(e) => {
124   - props.setValue('dob', e.target.value)
125   - }}
126   - />
127   - {props.isSubmitted() && props.errors && props.errors.dob && (
128   - <ErrorLabel> {props.errors.dob} </ErrorLabel>
129   - )}
130   - </FormGroup>
131   - </Col>
132   - </Row>
133   - <Row>
134   -
135   - </Row>
136   - </fieldset>
137   - )}
138   - {props.currentStep === 1 && (
139   - <fieldset title="Academic">
140   - <legend className="text-semibold">Academic</legend>
141   - <Row>
142   - <Col xs={12} sm={6}>
143   - <FormGroup controlId="rollNo">
144   - <Label required>Roll No</Label>
145   - <FormControl
146   - type="text"
147   - value={props.getValue('rollNo')}
148   - placeholder="Roll No"
149   - onChange={e => props.setValue('rollNo', e.target.value)}
150   - />
151   - {props.isSubmitted() && props.errors && props.errors.rollNo && (
152   - <ErrorLabel> {props.errors.rollNo} </ErrorLabel>
153   - )}
154   - </FormGroup>
155   - </Col>
156   - <Col xs={12} sm={6}>
157   - <FormGroup controlId="class">
158   - <Label required>Class</Label>
159   - <FormControl
160   - type="text"
161   - value={props.getValue('studentClass')}
162   - placeholder="7"
163   - onChange={e => props.setValue('studentClass', e.target.value)}
164   - />
165   - {props.isSubmitted() && props.errors && props.errors.studentClass && (
166   - <ErrorLabel> {props.errors.studentClass} </ErrorLabel>
167   - )}
168   - </FormGroup>
169   - </Col>
170   - </Row>
171   - <Row>
172   - <Col xs={12} sm={6}>
173   - <FormGroup controlId="section">
174   - <Label required>Section</Label>
175   - <FormControl
176   - type="text"
177   - value={props.getValue('section')}
178   - placeholder="B"
179   - onChange={e => props.setValue('section', e.target.value)}
180   - />
181   - {props.isSubmitted() && props.errors && props.errors.section && (
182   - <ErrorLabel> {props.errors.section} </ErrorLabel>
183   - )}
184   - </FormGroup>
185   - </Col>
186   - <Col xs={12} sm={6}>
187   - <FormGroup controlId="community">
188   - <Label required>Community</Label>
189   - <FormControl
190   - type="text"
191   - value={props.getValue('community')}
192   - placeholder="General"
193   - onChange={e => props.setValue('community', e.target.value)}
194   - />
195   - {props.isSubmitted() && props.errors && props.errors.community && (
196   - <ErrorLabel> {props.errors.community} </ErrorLabel>
197   - )}
198   - </FormGroup>
199   - </Col>
200   - </Row>
201   - <Row>
202   - <Col xs={12} sm={6}>
203   - <FormGroup controlId="bloodGroup">
204   - <Label required>bloodGroup</Label>
205   - <FormControl
206   - type="text"
207   - value={props.getValue('bloodGroup')}
208   - placeholder="B+"
209   - onChange={e => props.setValue('bloodGroup', e.target.value)}
210   - />
211   - {props.isSubmitted() && props.errors && props.errors.bloodGroup && (
212   - <ErrorLabel> {props.errors.bloodGroup} </ErrorLabel>
213   - )}
214   - </FormGroup>
215   - </Col>
216   - <Col xs={12} sm={6}>
217   - <FormGroup controlId="phone">
218   - <Label required>Phone</Label>
219   - <FormControl
220   - type="text"
221   - value={props.getValue('phone')}
222   - placeholder="9999999999"
223   - onChange={e => props.setValue('phone', e.target.value)}
224   - />
225   - {props.isSubmitted() && props.errors && props.errors.phone && (
226   - <ErrorLabel> {props.errors.phone} </ErrorLabel>
227   - )}
228   - </FormGroup>
229   - </Col>
230   - </Row>
231   - </fieldset>
232   - )}
233   - {props.currentStep === 2 && (
234   - <fieldset title="Address">
235   - <legend className="text-semibold">Address</legend>
236   - <Row>
237   - <Col xs={12} sm={6}>
238   - <FormGroup controlId="address">
239   - <Label required>Address</Label>
240   - <FormControl
241   - type="text"
242   - value={props.getValue('address')}
243   - placeholder="#876, Street, town"
244   - onChange={e => props.setValue('address', e.target.value)}
245   - />
246   - {props.isSubmitted() && props.errors && props.errors.address && (
247   - <ErrorLabel> {props.errors.address} </ErrorLabel>
248   - )}
249   - </FormGroup>
250   - </Col>
251   - <Col xs={12} sm={6}>
252   - <FormGroup controlId="city">
253   - <Label required>City</Label>
254   - <FormControl
255   - type="text"
256   - value={props.getValue('city')}
257   - placeholder="Chennai"
258   - onChange={e => props.setValue('city', e.target.value)}
259   - />
260   - {props.isSubmitted() && props.errors && props.errors.city && (
261   - <ErrorLabel> {props.errors.city} </ErrorLabel>
262   - )}
263   - </FormGroup>
264   - </Col>
265   - </Row>
266   - <Row>
267   - <Col xs={12} sm={6}>
268   - <FormGroup controlId="state">
269   - <Label required>State</Label>
270   - <FormControl
271   - type="text"
272   - value={props.getValue('state')}
273   - placeholder="Tamilnadu"
274   - onChange={e => props.setValue('state', e.target.value)}
275   - />
276   - {props.isSubmitted() && props.errors && props.errors.state && (
277   - <ErrorLabel> {props.errors.state} </ErrorLabel>
278   - )}
279   - </FormGroup>
280   - </Col>
281   - </Row>
282   - </fieldset>
283   - )}
284   - {props.currentStep === 3 && (
285   - <fieldset title="2">
286   - <legend className="text-semibold">Parent information</legend>
287   - <Row>
288   - <Col xs={12} sm={6}>
289   - <FormGroup controlId="parentName">
290   - <Label required>Parent Name</Label>
291   - <FormControl
292   - type="text"
293   - value={props.getValue('parentName')}
294   - placeholder="John"
295   - onChange={e => props.setValue('parentName', e.target.value)}
296   - />
297   - {props.isSubmitted() && props.errors && props.errors.parentName && (
298   - <ErrorLabel> {props.errors.parentName} </ErrorLabel>
299   - )}
300   - </FormGroup>
301   - </Col>
302   - <Col xs={12} sm={6}>
303   - <FormGroup controlId="parentEmail">
304   - <Label required>Parent Email</Label>
305   - <FormControl
306   - type="text"
307   - value={props.getValue('parentEmail')}
308   - placeholder="john@email.com"
309   - onChange={e => props.setValue('parentEmail', e.target.value)}
310   - />
311   - {props.isSubmitted() && props.errors && props.errors.parentEmail && (
312   - <ErrorLabel> {props.errors.parentEmail} </ErrorLabel>
313   - )}
314   - </FormGroup>
315   - </Col>
316   - </Row>
317   - <Row>
318   - <Col xs={12} sm={6}>
319   - <FormGroup controlId="relation">
320   - <Label required>Relation</Label>
321   - <FormControl
322   - type="text"
323   - value={props.getValue('relation')}
324   - placeholder="Father"
325   - onChange={e => props.setValue('relation', e.target.value)}
326   - />
327   - {props.isSubmitted() && props.errors && props.errors.relation && (
328   - <ErrorLabel> {props.errors.relation} </ErrorLabel>
329   - )}
330   - </FormGroup>
331   - </Col>
332   - <Col xs={12} sm={6}>
333   - <FormGroup controlId="profession">
334   - <Label required>Profession</Label>
335   - <FormControl
336   - type="text"
337   - value={props.getValue('profession')}
338   - placeholder="Farmer"
339   - onChange={e => props.setValue('profession', e.target.value)}
340   - />
341   - {props.isSubmitted() && props.errors && props.errors.profession && (
342   - <ErrorLabel> {props.errors.profession} </ErrorLabel>
343   - )}
344   - </FormGroup>
345   - </Col>
346   - </Row>
347   - <Row>
348   - <Col xs={12} sm={6}>
349   - <FormGroup controlId="parentGender">
350   - <Label>Parent Gender</Label>
351   - <FormControl componentClass="select"
352   - placeholder="select"
353   - value={props.getValue('parentGender')}
354   - onChange={e => props.setValue('parentGender', e.target.value)}
355   - >
356   - <option value="male">Male</option>
357   - <option value="female">Female</option>
358   - </FormControl>
359   - {props.isSubmitted() && props.errors && props.errors.parentGender && (
360   - <ErrorLabel> {props.errors.parentGender} </ErrorLabel>
361   - )}
362   - </FormGroup>
363   - </Col>
364   - <Col xs={12} sm={6}>
365   - <FormGroup controlId="parentPhone">
366   - <Label required>Parent Phone</Label>
367   - <FormControl
368   - type="text"
369   - value={props.getValue('parentPhone')}
370   - placeholder="9876543210"
371   - onChange={e => props.setValue('parentPhone', e.target.value)}
372   - />
373   - {props.isSubmitted() && props.errors && props.errors.parentPhone && (
374   - <ErrorLabel> {props.errors.parentPhone} </ErrorLabel>
375   - )}
376   - </FormGroup>
377   - </Col>
378   - </Row>
379   - <Row>
380   - <Col xs={12} sm={6}>
381   - <FormGroup controlId="parentAddress">
382   - <Label required>Parent Address</Label>
383   - <FormControl
384   - type="text"
385   - value={props.getValue('parentAddress')}
386   - placeholder="#12, street, town"
387   - onChange={e => props.setValue('parentAddress', e.target.value)}
388   - />
389   - {props.isSubmitted() && props.errors && props.errors.parentAddress && (
390   - <ErrorLabel> {props.errors.parentAddress} </ErrorLabel>
391   - )}
392   - </FormGroup>
393   - </Col>
394   - <Col xs={12} sm={6}>
395   - <FormGroup controlId="parentCity">
396   - <Label required>Parent City</Label>
397   - <FormControl
398   - type="text"
399   - value={props.getValue('parentCity')}
400   - placeholder="Chennai"
401   - onChange={e => props.setValue('parentCity', e.target.value)}
402   - />
403   - {props.isSubmitted() && props.errors && props.errors.parentCity && (
404   - <ErrorLabel> {props.errors.parentCity} </ErrorLabel>
405   - )}
406   - </FormGroup>
407   - </Col>
408   - </Row>
409   - <Row>
410   - <Col xs={12} sm={6}>
411   - <FormGroup controlId="parentState">
412   - <Label required>Parent State</Label>
413   - <FormControl
414   - type="text"
415   - value={props.getValue('parentState')}
416   - placeholder="600031"
417   - onChange={e => props.setValue('parentState', e.target.value)}
418   - />
419   - {props.isSubmitted() && props.errors && props.errors.parentState && (
420   - <ErrorLabel> {props.errors.parentState} </ErrorLabel>
421   - )}
422   - </FormGroup>
423   - </Col>
424   - <Col xs={12} sm={6}>
425   - <FormGroup controlId="parentZipcode">
426   - <Label required>Parent Zipcode</Label>
427   - <FormControl
428   - type="text"
429   - value={props.getValue('parentZipcode')}
430   - placeholder="600031"
431   - onChange={e => props.setValue('parentZipcode', e.target.value)}
432   - />
433   - {props.isSubmitted() && props.errors && props.errors.parentZipcode && (
434   - <ErrorLabel> {props.errors.parentZipcode} </ErrorLabel>
435   - )}
436   - </FormGroup>
437   - </Col>
438   - </Row>
439   - </fieldset>
440   - )}
441   - <div style={{ textAlign: 'left' }}>
442   - {props.currentStep > 0 && (
443   - <div style={{ display: 'inline-block', marginRight: 10 }}>
444   - <Button onClick={props.onBackClick}>
445   - <i className="icon-arrow-left13 position-left"></i>
446   - BACK
447   - </Button>
448   -
449   - </div>
450   - )}
451   - {props.currentStep < 3 && (
452   - <div style={{ display: 'inline-block' }}>
453   - <Button
454   - bsStyle="primary"
455   - onClick={props.onNextClick}
456   - >
457   - NEXT
458   - <i className="icon-arrow-right14 position-right" />
459   - </Button>
460   - </div>
461   - )}
462   - {props.currentStep === 3 && (
463   - <div style={{ display: 'inline-block' }}>
464   - <Button
465   - bsStyle="primary"
466   - onClick={props.onNextClick}
467   - >
468   - SAVE
469   - <i className="fa fa-check" />
470   - </Button>
471   - </div>
472   - )}
473   - </div>
474   - </div>
475   -)
476   -
477   -StudentForm.propTypes = {
478   - currentStep: PropTypes.number.isRequired,
479   - onNextClick: PropTypes.func.isRequired,
480   - onBackClick: PropTypes.func.isRequired,
481   - setValue: PropTypes.func.isRequired,
482   - getValue: PropTypes.func.isRequired,
483   -}
484   -
485   -export default StudentForm
imports/client/views/org/admin/students/StudentView.js
... ... @@ -12,11 +12,10 @@ import { StudentTable } from &#39;./view/StudentTable&#39;;
12 12 import { Header } from '../Header';
13 13 import { AdminSidebar } from '../Sidebar'
14 14 import { AdminBreadcrumb } from '../Breadcrumb'
15   -import { FabMenuView } from './FabMenu';
16 15 import { UploadCsv } from './UploadCsv';
17   -import { AddStudent } from './addStudent';
  16 +import { AddStudent } from './add/addStudent';
18 17 import { Students } from '/imports/collections/students/index';
19   -
  18 +import './student.css'
20 19  
21 20 export class StudentView extends Component {
22 21  
... ...
imports/client/views/org/admin/students/add/AddStudentFormContainer.js
... ... @@ -0,0 +1,96 @@
  1 +import React, { Component } from 'react'
  2 +import { AddStudentForm } from './addStudentForm'
  3 +import StudentForm from './StudentForm'
  4 +import Form from '/imports/client/views/core/Form'
  5 +import Validator from '/imports/client/views/core/Validator'
  6 +import { isRequired, isValidEmail } from '/imports/client/views/core/validations'
  7 +import { addStudentManually } from '/imports/collections/students/methods';
  8 +
  9 +export class AddStudentFormContainer extends Component {
  10 +
  11 + constructor(props) {
  12 + super(props)
  13 + this.state = { currentStep: 0 }
  14 + this.handleNextClick = this.handleNextClick.bind(this)
  15 + this.handleBackClick = this.handleBackClick.bind(this)
  16 + this.handleSubmit = this.handleSubmit.bind(this)
  17 + }
  18 +
  19 + handleNextClick() {
  20 + this.form.handleSubmit()
  21 + if (this.validator.getErrors() && Object.keys(this.validator.getErrors()).length > 0) return
  22 + this.setState({ currentStep: this.state.currentStep + 1 })
  23 + this.form.resetSubmitted()
  24 + }
  25 +
  26 + handleBackClick() {
  27 + this.setState({ currentStep: this.state.currentStep + -1 })
  28 + }
  29 +
  30 + handleSubmit() {
  31 + if (this.state.currentStep === 3) {
  32 + addStudentManually.call(this.form.state.values)
  33 + }
  34 + }
  35 +
  36 + //render callback
  37 + render() {
  38 + return (
  39 + <Form
  40 + onSubmit={this.handleSubmit}
  41 + ref={form => this.form = form}
  42 + initialValues={{
  43 + gender: 'male',
  44 + parentGender: 'male',
  45 + }}
  46 + >
  47 + {({ values, setValue, getValue, isSubmitted, isDirty }) => (
  48 + <Validator
  49 + values={values}
  50 + ref={validator => this.validator = validator}
  51 + validations={{
  52 + admissionId: [(value) => isRequired('Admission id', value)],
  53 + firstName: [(value) => isRequired('First name', value)],
  54 + lastName: [(value) => isRequired('Last name', value)],
  55 + email: [(value) => isRequired('Email', value), isValidEmail],
  56 + dob: [(value) => isRequired('Date of birth', value)],
  57 + gender: [(value) => isRequired('Gender', value)],
  58 + rollNo: [(value) => this.state.currentStep === 1 && isRequired('Roll no', value)],
  59 + studentClass: [(value) => this.state.currentStep === 1 && isRequired('Class', value)],
  60 + section: [(value) => this.state.currentStep === 1 && isRequired('Section', value)],
  61 + community: [(value) => this.state.currentStep === 1 && isRequired('Community', value)],
  62 + bloodGroup: [(value) => this.state.currentStep === 1 && isRequired('Blood group', value)],
  63 + phone: [(value) => this.state.currentStep === 1 && isRequired('Phone', value)],
  64 + address: [(value) => this.state.currentStep === 2 && isRequired('Address', value)],
  65 + city: [(value) => this.state.currentStep === 2 && isRequired('City', value)],
  66 + state: [(value) => this.state.currentStep === 2 && isRequired('State', value)],
  67 + parentName: [(value) => this.state.currentStep === 3 && isRequired('Parent name', value)],
  68 + parentEmail: [(value) => this.state.currentStep === 3 && isRequired('Parent email', value), (value) => this.state.currentStep === 3 && isValidEmail(value)],
  69 + relation: [(value) => this.state.currentStep === 3 && isRequired('Relation', value)],
  70 + profession: [(value) => this.state.currentStep === 3 && isRequired('Profession', value)],
  71 + parentGender: [(value) => this.state.currentStep === 3 && isRequired('Parent gender', value)],
  72 + parentPhone: [(value) => this.state.currentStep === 3 && isRequired('Parent phone', value)],
  73 + parentAddress: [(value) => this.state.currentStep === 3 && isRequired('Parent address', value)],
  74 + parentCity: [(value) => this.state.currentStep === 3 && isRequired('Parent city', value)],
  75 + parentState: [(value) => this.state.currentStep === 3 && isRequired('Parent state', value)],
  76 + parentZipcode: [(value) => this.state.currentStep === 3 && isRequired('Parent zip code', value)],
  77 + }}
  78 + >
  79 + {({ errors }) => (
  80 + <StudentForm
  81 + isDirty={isDirty}
  82 + setValue={setValue}
  83 + getValue={getValue}
  84 + isSubmitted={isSubmitted}
  85 + errors={errors}
  86 + onNextClick={this.handleNextClick}
  87 + onBackClick={this.handleBackClick}
  88 + currentStep={this.state.currentStep}
  89 + />
  90 + )}
  91 + </Validator>
  92 + )}
  93 + </Form>
  94 + )
  95 + }
  96 +}
... ...
imports/client/views/org/admin/students/add/StudentForm.js
... ... @@ -0,0 +1,485 @@
  1 +import React, { PropTypes } from 'react'
  2 +import {
  3 + Row,
  4 + Col,
  5 + FormGroup,
  6 + FormControl,
  7 + Button
  8 +} from 'react-bootstrap'
  9 +import DatePicker from '/imports/client/views/core/DatePicker'
  10 +import Label from '/imports/client/views/core/Label'
  11 +import Stepper from '/imports/client/views/core/Stepper'
  12 +import ErrorLabel from '/imports/client/views/core/ErrorLabel'
  13 +
  14 +const StudentForm = props => (
  15 + <div className="stepy-validation">
  16 + <Stepper
  17 + steps={[
  18 + {
  19 + label: 'Personal data',
  20 + active: props.currentStep === 0,
  21 + },
  22 + {
  23 + label: 'Academic',
  24 + active: props.currentStep === 1,
  25 + },
  26 + {
  27 + label: 'Address',
  28 + active: props.currentStep === 2,
  29 + },
  30 + {
  31 + label: 'Parent info',
  32 + active: props.currentStep === 3,
  33 + }
  34 + ]}
  35 + />
  36 + {props.currentStep === 0 && (
  37 + <fieldset title="1">
  38 + <legend className="text-semibold">Personal data</legend>
  39 + <Row>
  40 + <Col xs={12} sm={6}>
  41 + <FormGroup controlId="admissionId">
  42 + <Label required>Admission Id</Label>
  43 + <FormControl
  44 + type="text"
  45 + value={props.getValue('admissionId')}
  46 + placeholder="admission Id"
  47 + onChange={e => props.setValue('admissionId', e.target.value)}
  48 + />
  49 + {props.isSubmitted() && props.errors && props.errors.admissionId && (
  50 + <ErrorLabel> {props.errors.admissionId} </ErrorLabel>
  51 + )}
  52 + </FormGroup>
  53 + </Col>
  54 + <Col xs={12} sm={6}>
  55 + <FormGroup controlId="firstName">
  56 + <Label required>First Name</Label>
  57 + <FormControl
  58 + type="text"
  59 + value={props.getValue('firstName')}
  60 + placeholder="First Name"
  61 + onChange={e => props.setValue('firstName', e.target.value)}
  62 + />
  63 + {props.isSubmitted() && props.errors && props.errors.firstName && (
  64 + <ErrorLabel> {props.errors.firstName} </ErrorLabel>
  65 + )}
  66 + </FormGroup>
  67 + </Col>
  68 + </Row>
  69 + <Row>
  70 + <Col xs={12} sm={6}>
  71 + <FormGroup controlId="lastName">
  72 + <Label required>Last Name</Label>
  73 + <FormControl
  74 + type="text"
  75 + value={props.getValue('lastName')}
  76 + placeholder="Last Name"
  77 + onChange={e => props.setValue('lastName', e.target.value)}
  78 + />
  79 + {props.isSubmitted() && props.errors && props.errors.lastName && (
  80 + <ErrorLabel> {props.errors.lastName} </ErrorLabel>
  81 + )}
  82 + </FormGroup>
  83 + </Col>
  84 + <Col xs={12} sm={6}>
  85 + <FormGroup controlId="formControlsSelect">
  86 + <Label>Gender</Label>
  87 + <FormControl componentClass="select"
  88 + placeholder="select"
  89 + value={props.getValue('gender')}
  90 + onChange={e => props.setValue('gender', e.target.value)}
  91 + >
  92 + <option value="male">Male</option>
  93 + <option value="female">Female</option>
  94 + </FormControl>
  95 + {props.isSubmitted() && props.errors && props.errors.gender && (
  96 + <ErrorLabel> {props.errors.gender} </ErrorLabel>
  97 + )}
  98 + </FormGroup>
  99 + </Col>
  100 + </Row>
  101 + <Row>
  102 + <Col xs={12} sm={6}>
  103 + <FormGroup controlId="email">
  104 + <Label required>Email</Label>
  105 + <FormControl
  106 + type="email"
  107 + value={props.getValue('email')}
  108 + placeholder="Email"
  109 + onChange={e => props.setValue('email', e.target.value)}
  110 + />
  111 + {props.isSubmitted() && props.errors && props.errors.email && (
  112 + <ErrorLabel> {props.errors.email} </ErrorLabel>
  113 + )}
  114 + </FormGroup>
  115 + </Col>
  116 + <Col xs={12} sm={6}>
  117 + <FormGroup>
  118 + <Label required>Date of birth</Label>
  119 + <DatePicker
  120 + id="dob"
  121 + setValue = {props.setValue}
  122 + value={props.getValue('dob')}
  123 + onChange={(e) => {
  124 + props.setValue('dob', e.target.value)
  125 + }}
  126 + />
  127 + {props.isSubmitted() && props.errors && props.errors.dob && (
  128 + <ErrorLabel> {props.errors.dob} </ErrorLabel>
  129 + )}
  130 + </FormGroup>
  131 + </Col>
  132 + </Row>
  133 + <Row>
  134 +
  135 + </Row>
  136 + </fieldset>
  137 + )}
  138 + {props.currentStep === 1 && (
  139 + <fieldset title="Academic">
  140 + <legend className="text-semibold">Academic</legend>
  141 + <Row>
  142 + <Col xs={12} sm={6}>
  143 + <FormGroup controlId="rollNo">
  144 + <Label required>Roll No</Label>
  145 + <FormControl
  146 + type="text"
  147 + value={props.getValue('rollNo')}
  148 + placeholder="Roll No"
  149 + onChange={e => props.setValue('rollNo', e.target.value)}
  150 + />
  151 + {props.isSubmitted() && props.errors && props.errors.rollNo && (
  152 + <ErrorLabel> {props.errors.rollNo} </ErrorLabel>
  153 + )}
  154 + </FormGroup>
  155 + </Col>
  156 + <Col xs={12} sm={6}>
  157 + <FormGroup controlId="class">
  158 + <Label required>Class</Label>
  159 + <FormControl
  160 + type="text"
  161 + value={props.getValue('studentClass')}
  162 + placeholder="7"
  163 + onChange={e => props.setValue('studentClass', e.target.value)}
  164 + />
  165 + {props.isSubmitted() && props.errors && props.errors.studentClass && (
  166 + <ErrorLabel> {props.errors.studentClass} </ErrorLabel>
  167 + )}
  168 + </FormGroup>
  169 + </Col>
  170 + </Row>
  171 + <Row>
  172 + <Col xs={12} sm={6}>
  173 + <FormGroup controlId="section">
  174 + <Label required>Section</Label>
  175 + <FormControl
  176 + type="text"
  177 + value={props.getValue('section')}
  178 + placeholder="B"
  179 + onChange={e => props.setValue('section', e.target.value)}
  180 + />
  181 + {props.isSubmitted() && props.errors && props.errors.section && (
  182 + <ErrorLabel> {props.errors.section} </ErrorLabel>
  183 + )}
  184 + </FormGroup>
  185 + </Col>
  186 + <Col xs={12} sm={6}>
  187 + <FormGroup controlId="community">
  188 + <Label required>Community</Label>
  189 + <FormControl
  190 + type="text"
  191 + value={props.getValue('community')}
  192 + placeholder="General"
  193 + onChange={e => props.setValue('community', e.target.value)}
  194 + />
  195 + {props.isSubmitted() && props.errors && props.errors.community && (
  196 + <ErrorLabel> {props.errors.community} </ErrorLabel>
  197 + )}
  198 + </FormGroup>
  199 + </Col>
  200 + </Row>
  201 + <Row>
  202 + <Col xs={12} sm={6}>
  203 + <FormGroup controlId="bloodGroup">
  204 + <Label required>bloodGroup</Label>
  205 + <FormControl
  206 + type="text"
  207 + value={props.getValue('bloodGroup')}
  208 + placeholder="B+"
  209 + onChange={e => props.setValue('bloodGroup', e.target.value)}
  210 + />
  211 + {props.isSubmitted() && props.errors && props.errors.bloodGroup && (
  212 + <ErrorLabel> {props.errors.bloodGroup} </ErrorLabel>
  213 + )}
  214 + </FormGroup>
  215 + </Col>
  216 + <Col xs={12} sm={6}>
  217 + <FormGroup controlId="phone">
  218 + <Label required>Phone</Label>
  219 + <FormControl
  220 + type="text"
  221 + value={props.getValue('phone')}
  222 + placeholder="9999999999"
  223 + onChange={e => props.setValue('phone', e.target.value)}
  224 + />
  225 + {props.isSubmitted() && props.errors && props.errors.phone && (
  226 + <ErrorLabel> {props.errors.phone} </ErrorLabel>
  227 + )}
  228 + </FormGroup>
  229 + </Col>
  230 + </Row>
  231 + </fieldset>
  232 + )}
  233 + {props.currentStep === 2 && (
  234 + <fieldset title="Address">
  235 + <legend className="text-semibold">Address</legend>
  236 + <Row>
  237 + <Col xs={12} sm={6}>
  238 + <FormGroup controlId="address">
  239 + <Label required>Address</Label>
  240 + <FormControl
  241 + type="text"
  242 + value={props.getValue('address')}
  243 + placeholder="#876, Street, town"
  244 + onChange={e => props.setValue('address', e.target.value)}
  245 + />
  246 + {props.isSubmitted() && props.errors && props.errors.address && (
  247 + <ErrorLabel> {props.errors.address} </ErrorLabel>
  248 + )}
  249 + </FormGroup>
  250 + </Col>
  251 + <Col xs={12} sm={6}>
  252 + <FormGroup controlId="city">
  253 + <Label required>City</Label>
  254 + <FormControl
  255 + type="text"
  256 + value={props.getValue('city')}
  257 + placeholder="Chennai"
  258 + onChange={e => props.setValue('city', e.target.value)}
  259 + />
  260 + {props.isSubmitted() && props.errors && props.errors.city && (
  261 + <ErrorLabel> {props.errors.city} </ErrorLabel>
  262 + )}
  263 + </FormGroup>
  264 + </Col>
  265 + </Row>
  266 + <Row>
  267 + <Col xs={12} sm={6}>
  268 + <FormGroup controlId="state">
  269 + <Label required>State</Label>
  270 + <FormControl
  271 + type="text"
  272 + value={props.getValue('state')}
  273 + placeholder="Tamilnadu"
  274 + onChange={e => props.setValue('state', e.target.value)}
  275 + />
  276 + {props.isSubmitted() && props.errors && props.errors.state && (
  277 + <ErrorLabel> {props.errors.state} </ErrorLabel>
  278 + )}
  279 + </FormGroup>
  280 + </Col>
  281 + </Row>
  282 + </fieldset>
  283 + )}
  284 + {props.currentStep === 3 && (
  285 + <fieldset title="2">
  286 + <legend className="text-semibold">Parent information</legend>
  287 + <Row>
  288 + <Col xs={12} sm={6}>
  289 + <FormGroup controlId="parentName">
  290 + <Label required>Parent Name</Label>
  291 + <FormControl
  292 + type="text"
  293 + value={props.getValue('parentName')}
  294 + placeholder="John"
  295 + onChange={e => props.setValue('parentName', e.target.value)}
  296 + />
  297 + {props.isSubmitted() && props.errors && props.errors.parentName && (
  298 + <ErrorLabel> {props.errors.parentName} </ErrorLabel>
  299 + )}
  300 + </FormGroup>
  301 + </Col>
  302 + <Col xs={12} sm={6}>
  303 + <FormGroup controlId="parentEmail">
  304 + <Label required>Parent Email</Label>
  305 + <FormControl
  306 + type="text"
  307 + value={props.getValue('parentEmail')}
  308 + placeholder="john@email.com"
  309 + onChange={e => props.setValue('parentEmail', e.target.value)}
  310 + />
  311 + {props.isSubmitted() && props.errors && props.errors.parentEmail && (
  312 + <ErrorLabel> {props.errors.parentEmail} </ErrorLabel>
  313 + )}
  314 + </FormGroup>
  315 + </Col>
  316 + </Row>
  317 + <Row>
  318 + <Col xs={12} sm={6}>
  319 + <FormGroup controlId="relation">
  320 + <Label required>Relation</Label>
  321 + <FormControl
  322 + type="text"
  323 + value={props.getValue('relation')}
  324 + placeholder="Father"
  325 + onChange={e => props.setValue('relation', e.target.value)}
  326 + />
  327 + {props.isSubmitted() && props.errors && props.errors.relation && (
  328 + <ErrorLabel> {props.errors.relation} </ErrorLabel>
  329 + )}
  330 + </FormGroup>
  331 + </Col>
  332 + <Col xs={12} sm={6}>
  333 + <FormGroup controlId="profession">
  334 + <Label required>Profession</Label>
  335 + <FormControl
  336 + type="text"
  337 + value={props.getValue('profession')}
  338 + placeholder="Farmer"
  339 + onChange={e => props.setValue('profession', e.target.value)}
  340 + />
  341 + {props.isSubmitted() && props.errors && props.errors.profession && (
  342 + <ErrorLabel> {props.errors.profession} </ErrorLabel>
  343 + )}
  344 + </FormGroup>
  345 + </Col>
  346 + </Row>
  347 + <Row>
  348 + <Col xs={12} sm={6}>
  349 + <FormGroup controlId="parentGender">
  350 + <Label>Parent Gender</Label>
  351 + <FormControl componentClass="select"
  352 + placeholder="select"
  353 + value={props.getValue('parentGender')}
  354 + onChange={e => props.setValue('parentGender', e.target.value)}
  355 + >
  356 + <option value="male">Male</option>
  357 + <option value="female">Female</option>
  358 + </FormControl>
  359 + {props.isSubmitted() && props.errors && props.errors.parentGender && (
  360 + <ErrorLabel> {props.errors.parentGender} </ErrorLabel>
  361 + )}
  362 + </FormGroup>
  363 + </Col>
  364 + <Col xs={12} sm={6}>
  365 + <FormGroup controlId="parentPhone">
  366 + <Label required>Parent Phone</Label>
  367 + <FormControl
  368 + type="text"
  369 + value={props.getValue('parentPhone')}
  370 + placeholder="9876543210"
  371 + onChange={e => props.setValue('parentPhone', e.target.value)}
  372 + />
  373 + {props.isSubmitted() && props.errors && props.errors.parentPhone && (
  374 + <ErrorLabel> {props.errors.parentPhone} </ErrorLabel>
  375 + )}
  376 + </FormGroup>
  377 + </Col>
  378 + </Row>
  379 + <Row>
  380 + <Col xs={12} sm={6}>
  381 + <FormGroup controlId="parentAddress">
  382 + <Label required>Parent Address</Label>
  383 + <FormControl
  384 + type="text"
  385 + value={props.getValue('parentAddress')}
  386 + placeholder="#12, street, town"
  387 + onChange={e => props.setValue('parentAddress', e.target.value)}
  388 + />
  389 + {props.isSubmitted() && props.errors && props.errors.parentAddress && (
  390 + <ErrorLabel> {props.errors.parentAddress} </ErrorLabel>
  391 + )}
  392 + </FormGroup>
  393 + </Col>
  394 + <Col xs={12} sm={6}>
  395 + <FormGroup controlId="parentCity">
  396 + <Label required>Parent City</Label>
  397 + <FormControl
  398 + type="text"
  399 + value={props.getValue('parentCity')}
  400 + placeholder="Chennai"
  401 + onChange={e => props.setValue('parentCity', e.target.value)}
  402 + />
  403 + {props.isSubmitted() && props.errors && props.errors.parentCity && (
  404 + <ErrorLabel> {props.errors.parentCity} </ErrorLabel>
  405 + )}
  406 + </FormGroup>
  407 + </Col>
  408 + </Row>
  409 + <Row>
  410 + <Col xs={12} sm={6}>
  411 + <FormGroup controlId="parentState">
  412 + <Label required>Parent State</Label>
  413 + <FormControl
  414 + type="text"
  415 + value={props.getValue('parentState')}
  416 + placeholder="600031"
  417 + onChange={e => props.setValue('parentState', e.target.value)}
  418 + />
  419 + {props.isSubmitted() && props.errors && props.errors.parentState && (
  420 + <ErrorLabel> {props.errors.parentState} </ErrorLabel>
  421 + )}
  422 + </FormGroup>
  423 + </Col>
  424 + <Col xs={12} sm={6}>
  425 + <FormGroup controlId="parentZipcode">
  426 + <Label required>Parent Zipcode</Label>
  427 + <FormControl
  428 + type="text"
  429 + value={props.getValue('parentZipcode')}
  430 + placeholder="600031"
  431 + onChange={e => props.setValue('parentZipcode', e.target.value)}
  432 + />
  433 + {props.isSubmitted() && props.errors && props.errors.parentZipcode && (
  434 + <ErrorLabel> {props.errors.parentZipcode} </ErrorLabel>
  435 + )}
  436 + </FormGroup>
  437 + </Col>
  438 + </Row>
  439 + </fieldset>
  440 + )}
  441 + <div style={{ textAlign: 'left' }}>
  442 + {props.currentStep > 0 && (
  443 + <div style={{ display: 'inline-block', marginRight: 10 }}>
  444 + <Button onClick={props.onBackClick}>
  445 + <i className="icon-arrow-left13 position-left"></i>
  446 + BACK
  447 + </Button>
  448 +
  449 + </div>
  450 + )}
  451 + {props.currentStep < 3 && (
  452 + <div style={{ display: 'inline-block' }}>
  453 + <Button
  454 + bsStyle="primary"
  455 + onClick={props.onNextClick}
  456 + >
  457 + NEXT
  458 + <i className="icon-arrow-right14 position-right" />
  459 + </Button>
  460 + </div>
  461 + )}
  462 + {props.currentStep === 3 && (
  463 + <div style={{ display: 'inline-block' }}>
  464 + <Button
  465 + bsStyle="primary"
  466 + onClick={props.onNextClick}
  467 + >
  468 + SAVE
  469 + <i className="fa fa-check" />
  470 + </Button>
  471 + </div>
  472 + )}
  473 + </div>
  474 + </div>
  475 +)
  476 +
  477 +StudentForm.propTypes = {
  478 + currentStep: PropTypes.number.isRequired,
  479 + onNextClick: PropTypes.func.isRequired,
  480 + onBackClick: PropTypes.func.isRequired,
  481 + setValue: PropTypes.func.isRequired,
  482 + getValue: PropTypes.func.isRequired,
  483 +}
  484 +
  485 +export default StudentForm
... ...
imports/client/views/org/admin/students/add/addStudent.js
... ... @@ -0,0 +1,63 @@
  1 +import _ from 'lodash';
  2 +import { Meteor } from 'meteor/meteor';
  3 +import React, { Component } from 'react';
  4 +import { Link,browserHistory } from 'react-router';
  5 +import { FormGroup,Panel,Table,
  6 + ButtonToolbar,Modal,
  7 + FormControl,Glyphicon,Button } from 'react-bootstrap';
  8 +import { AddStudentFormContainer } from './AddStudentFormContainer';
  9 +
  10 +const style = {
  11 + margin: 12,
  12 +};
  13 +export class AddStudent extends Component {
  14 + constructor(props) {
  15 + super(props);
  16 + this.state = {
  17 + show: false
  18 + };
  19 + this.showModal = this.showModal.bind(this);
  20 + this.hideModal = this.hideModal.bind(this);
  21 + this.onUpdate = this.onUpdate.bind(this);
  22 + };
  23 +
  24 + showModal() {
  25 + this.setState({show: true});
  26 + }
  27 +
  28 + hideModal() {
  29 + this.setState({show: false});
  30 + }
  31 + onUpdate(key, value) {
  32 + this.setState({[key]: value});
  33 + };
  34 +
  35 + render() {
  36 + return (
  37 + <ButtonToolbar>
  38 + <Button bsStyle="primary" onClick={this.showModal}>
  39 + Add Student
  40 + </Button>
  41 + <Modal
  42 + {...this.props}
  43 + show={this.state.show}
  44 + onHide={this.hideModal}
  45 + dialogClassName="custom-modal"
  46 + >
  47 + <Modal.Header closeButton>
  48 + <Modal.Title id="contained-modal-title-lg">New Student</Modal.Title>
  49 + </Modal.Header>
  50 + <Modal.Body>
  51 + <AddStudentFormContainer />
  52 + </Modal.Body>
  53 + {/*
  54 + <Modal.Footer>
  55 + <Button onClick={this.hideModal}>Close</Button>
  56 + </Modal.Footer>
  57 + */}
  58 + </Modal>
  59 + </ButtonToolbar>
  60 + );
  61 + };
  62 +
  63 +};
... ...
imports/client/views/org/admin/students/add/addStudentForm.js
... ... @@ -0,0 +1,500 @@
  1 +import _ from 'lodash';
  2 +import { Meteor } from 'meteor/meteor';
  3 +
  4 +import React, { Component } from 'react';
  5 +import { Link,browserHistory } from 'react-router';
  6 +import { Form, FormGroup,InputGroup,
  7 + DropdownButton,MenuItem,ControlLabel,
  8 + SplitButton,
  9 + FormControl,Glyphicon,Button } from 'react-bootstrap';
  10 +import DatePicker from 'react-bootstrap-date-picker'
  11 +import {addStudentManually} from '/imports/collections/students/methods';
  12 +
  13 +export class AddStudentForm extends Component {
  14 +
  15 + constructor(props) {
  16 + super(props);
  17 + this.state = {
  18 + admissionId: "123",
  19 + firstName: "first",
  20 + lastName: "last",
  21 + middleName: "middle",
  22 + email: "deepak125.dk+21@gmail.com",
  23 + dob: "",
  24 + formattedDob: "",
  25 + gender: "male",
  26 + rollNo: "1",
  27 + class: "2",
  28 + section: "B",
  29 + community: "SC",
  30 + bloodGroup: "B+",
  31 + phone: "9876543321",
  32 + address: "address",
  33 + city: "chennai",
  34 + state: "tn",
  35 + parentName: "parentName",
  36 + parentEmail: "deepak125.dk+41@gmail.com",
  37 + relation: "father",
  38 + profession: "farmer",
  39 + parentGender: "male",
  40 + parentPhone: "987655412",
  41 + parentAddress: "parentAddress",
  42 + parentCity: "parentCity",
  43 + parentState: "parentState",
  44 + parentZipcode: "parentZipcode",
  45 + };
  46 + this.onUpdate = this.onUpdate.bind(this);
  47 + this.handleDob = this.handleDob.bind(this);
  48 + };
  49 +
  50 + onUpdate(key, value) {
  51 + this.setState({[key]: value});
  52 + };
  53 +
  54 + handleDob(value, formattedValue) {
  55 + this.setState({
  56 + dob: value, // ISO String, ex: "2016-11-19T12:00:00.000Z"
  57 + formattedDob: formattedValue // Formatted String, ex: "11/19/2016"
  58 + });
  59 +}
  60 + addStudent(e){
  61 + e.preventDefault();
  62 + e.persist();
  63 + const firstName = this.state.firstName;
  64 + const middleName = this.state.middleName;
  65 + const lastName = this.state.lastName;
  66 + const admissionId = this.state.admissionId;
  67 + const email = this.state.email;
  68 + const dob = this.state.dob;
  69 + const formattedDob = this.state.formattedDob;
  70 + const gender = this.state.gender;
  71 + const rollNo = this.state.rollNo;
  72 + const studentclass = this.state.class;
  73 + const section = this.state.section;
  74 + const community = this.state.community;
  75 + const bloodGroup = this.state.bloodGroup;
  76 + const phone = this.state.phone;
  77 + const address = this.state.address;
  78 + const city = this.state.city;
  79 + const state = this.state.state;
  80 + const parentName = this.state.parentName;
  81 + const parentEmail = this.state.parentEmail;
  82 + const relation = this.state.relation;
  83 + const profession = this.state.profession;
  84 + const parentGender = this.state.parentGender;
  85 + const parentPhone = this.state.parentPhone;
  86 + const parentAddress = this.state.parentAddress;
  87 + const parentCity = this.state.parentCity;
  88 + const parentState = this.state.parentState;
  89 + const parentZipcode = this.state.parentZipcode;
  90 + if(admissionId==""){
  91 + Bert.alert('Enter Admission Id!', 'danger');
  92 + }else if(firstName==""){
  93 + Bert.alert('Enter Fist Name', 'danger');
  94 + } else if(middleName==""){
  95 + Bert.alert('Enter Middle name!', 'danger');
  96 + }else if(lastName==""){
  97 + Bert.alert('Enter Last name!', 'danger');
  98 + }else if(email==""){
  99 + Bert.alert('Enter email!', 'danger');
  100 + }else if(dob==""){
  101 + Bert.alert('Enter DOB!', 'danger');
  102 + }else if(gender==""){
  103 + Bert.alert('Enter Student Gender!', 'danger');
  104 + }else if(studentclass==""){
  105 + Bert.alert('Enter Class!', 'danger');
  106 + }else if(section==""){
  107 + Bert.alert('Enter Section!', 'danger');
  108 + }else if(community==""){
  109 + Bert.alert('Enter Section!', 'danger');
  110 + }else if(bloodGroup==""){
  111 + Bert.alert('Enter Blood Group!', 'danger');
  112 + }else if(phone==""){
  113 + Bert.alert('Enter phone!', 'danger');
  114 + }else if(address==""){
  115 + Bert.alert('Enter address!', 'danger');
  116 + }else if(city==""){
  117 + Bert.alert('Enter city!', 'danger');
  118 + }else if(state==""){
  119 + Bert.alert('Enter state!', 'danger');
  120 + }else if(parentName==""){
  121 + Bert.alert('Enter Parent name!', 'danger');
  122 + }else if(parentEmail==""){
  123 + Bert.alert('Enter Parent Email!', 'danger');
  124 + }else if(relation==""){
  125 + Bert.alert('Enter relation!', 'danger');
  126 + }else if(profession==""){
  127 + Bert.alert('Enter parent profession!', 'danger');
  128 + }else if(parentGender==""){
  129 + Bert.alert("Enter Parent's Gender!", 'danger');
  130 + }else if(parentPhone==""){
  131 + Bert.alert("Enter Parent's Phone!", 'danger');
  132 + }else if(parentAddress==""){
  133 + Bert.alert("Enter Parent's Address!", 'danger');
  134 + }else if(parentCity==""){
  135 + Bert.alert("Enter Parent's City!", 'danger');
  136 + }else if(parentState==""){
  137 + Bert.alert("Enter Parent's State!", 'danger');
  138 + }else if(parentZipcode==""){
  139 + Bert.alert("Enter Parent's zipcode!", 'danger');
  140 + }else{
  141 + addStudentManually.call({
  142 + admissionId,
  143 + firstName,
  144 + middleName,
  145 + lastName,
  146 + email,
  147 + dob,
  148 + formattedDob,
  149 + gender,
  150 + rollNo,
  151 + studentclass,
  152 + section,
  153 + community,
  154 + bloodGroup,
  155 + phone,
  156 + address,
  157 + city,
  158 + state,
  159 + parentName,
  160 + parentEmail,
  161 + relation,
  162 + profession,
  163 + parentGender,
  164 + parentPhone,
  165 + parentAddress,
  166 + parentCity,
  167 + parentState,
  168 + parentZipcode
  169 + }, function (error, result) {
  170 + console.log(error);
  171 + console.log(result);
  172 + });
  173 + }
  174 + }
  175 + render() {
  176 + return (
  177 + <Form className="steps-validation wizard clearfix" onSubmit={ (e) => this.addStudent(e) } inline>
  178 + <div className="steps clearfix">
  179 + <ul role="tablist">
  180 + <li role="tab" className="first current" aria-disabled="false" aria-selected="true">
  181 + <a id="steps-uid-4-t-0" href="#steps-uid-4-h-0" aria-controls="steps-uid-4-p-0">
  182 + <span className="current-info audible">current step: </span><span className="number">1</span> Personal data
  183 + </a>
  184 + </li>
  185 + <li role="tab" className="disabled" aria-disabled="true">
  186 + <a id="steps-uid-4-t-1" href="#steps-uid-4-h-1" aria-controls="steps-uid-4-p-1">
  187 + <span className="number">2</span> Your education\n\
  188 + </a>
  189 + </li>
  190 + <li role="tab" className="disabled" aria-disabled="true">
  191 + <a id="steps-uid-4-t-2" href="#steps-uid-4-h-2" aria-controls="steps-uid-4-p-2">
  192 + <span className="number">3</span> Your experience
  193 + </a>
  194 + </li>
  195 + <li role="tab" className="disabled last" aria-disabled="true">
  196 + <a id="steps-uid-4-t-3" href="#steps-uid-4-h-3" aria-controls="steps-uid-4-p-3">
  197 + <span className="number">4</span> Additional info
  198 + </a>
  199 + </li>
  200 + </ul>
  201 + </div>
  202 + <div className="content clearfix">
  203 + <h6 id="steps-uid-4-h-0" tabindex="-1" className="title current">Personal data</h6>
  204 + <div id="steps-uid-4-p-0" role="tabpanel" aria-labelledby="steps-uid-4-h-0" className="body current">
  205 + <div className="row">
  206 + <div className="col-md-6">
  207 +
  208 + <FormGroup controlId="admissionId">
  209 + <ControlLabel>Admission Id</ControlLabel>
  210 + <FormControl
  211 + type="text"
  212 + value={this.state.admissionId}
  213 + placeholder="admission Id"
  214 + onChange={e=>this.onUpdate('admissionId',e.target.value)}
  215 + />
  216 + </FormGroup>
  217 +
  218 + </div>
  219 +
  220 + <div className="col-md-6">
  221 +
  222 + <FormGroup controlId="firstName">
  223 + <ControlLabel>First Name</ControlLabel>
  224 + <FormControl
  225 + type="text"
  226 + value={this.state.firstName}
  227 + placeholder="First Name"
  228 + onChange={e=>this.onUpdate('firstName',e.target.value)}
  229 + />
  230 + </FormGroup>
  231 +
  232 + </div>
  233 + </div>
  234 + </div>
  235 + </div>
  236 +
  237 +
  238 + <FormGroup controlId="admissionId">
  239 + <ControlLabel>Admission Id</ControlLabel>
  240 + <FormControl
  241 + type="text"
  242 + value={this.state.admissionId}
  243 + placeholder="admission Id"
  244 + onChange={e=>this.onUpdate('admissionId',e.target.value)}
  245 + />
  246 + </FormGroup>
  247 +
  248 + <FormGroup controlId="firstName">
  249 + <ControlLabel>First Name</ControlLabel>
  250 + <FormControl
  251 + type="text"
  252 + value={this.state.firstName}
  253 + placeholder="First Name"
  254 + onChange={e=>this.onUpdate('firstName',e.target.value)}
  255 + />
  256 + </FormGroup>
  257 + <FormGroup controlId="middleName">
  258 + <ControlLabel>Middle Name</ControlLabel>
  259 + <FormControl
  260 + type="text"
  261 + value={this.state.middleName}
  262 + placeholder="Middle Name"
  263 + onChange={e=>this.onUpdate('middleName',e.target.value)}
  264 + />
  265 + </FormGroup>
  266 +
  267 + <FormGroup controlId="lastName">
  268 + <ControlLabel>Last Name</ControlLabel>
  269 + <FormControl
  270 + type="text"
  271 + value={this.state.lastName}
  272 + placeholder="Last Name"
  273 + onChange={e=>this.onUpdate('lastName',e.target.value)}
  274 + />
  275 +
  276 + </FormGroup>
  277 + <FormGroup controlId="email">
  278 + <ControlLabel>Email</ControlLabel>
  279 + <FormControl
  280 + type="email"
  281 + value={this.state.email}
  282 + placeholder="Email"
  283 + onChange={e=>this.onUpdate('email',e.target.value)}
  284 + />
  285 + </FormGroup>
  286 + <FormGroup>
  287 + <ControlLabel>Date of birth</ControlLabel>
  288 + <DatePicker id="dob"
  289 + value={this.state.dob}
  290 + onChange={this.handleDob}
  291 + />
  292 + </FormGroup>
  293 +
  294 + <FormGroup controlId="formControlsSelect">
  295 + <ControlLabel>Gender</ControlLabel>
  296 + <FormControl componentClass="select"
  297 + placeholder="select"
  298 + value={this.state.gender}
  299 + onChange={e=>this.onUpdate('gender',e.target.value)}
  300 + >
  301 + <option value="male">Male</option>
  302 + <option value="female">Female</option>
  303 + </FormControl>
  304 + </FormGroup>
  305 +
  306 + <FormGroup controlId="rollNo">
  307 + <ControlLabel>Roll No</ControlLabel>
  308 + <FormControl
  309 + type="text"
  310 + value={this.state.rollNo}
  311 + placeholder="Roll No"
  312 + onChange={e=>this.onUpdate('rollNo',e.target.value)}
  313 + />
  314 + </FormGroup>
  315 + <FormGroup controlId="class">
  316 + <ControlLabel>Class</ControlLabel>
  317 + <FormControl
  318 + type="text"
  319 + value={this.state.class}
  320 + placeholder="7"
  321 + onChange={e=>this.onUpdate('class',e.target.value)}
  322 + />
  323 + </FormGroup>
  324 + <FormGroup controlId="section">
  325 + <ControlLabel>Section</ControlLabel>
  326 + <FormControl
  327 + type="text"
  328 + value={this.state.section}
  329 + placeholder="B"
  330 + onChange={e=>this.onUpdate('section',e.target.value)}
  331 + />
  332 + </FormGroup>
  333 +
  334 + <FormGroup controlId="community">
  335 + <ControlLabel>Community</ControlLabel>
  336 + <FormControl
  337 + type="text"
  338 + value={this.state.community}
  339 + placeholder="General"
  340 + onChange={e=>this.onUpdate('community',e.target.value)}
  341 + />
  342 + </FormGroup>
  343 +
  344 + <FormGroup controlId="bloodGroup">
  345 + <ControlLabel>bloodGroup</ControlLabel>
  346 + <FormControl
  347 + type="text"
  348 + value={this.state.bloodGroup}
  349 + placeholder="B+"
  350 + onChange={e=>this.onUpdate('bloodGroup',e.target.value)}
  351 + />
  352 + </FormGroup>
  353 +
  354 + <FormGroup controlId="phone">
  355 + <ControlLabel>Phone</ControlLabel>
  356 + <FormControl
  357 + type="text"
  358 + value={this.state.phone}
  359 + placeholder="9999999999"
  360 + onChange={e=>this.onUpdate('phone',e.target.value)}
  361 + />
  362 + </FormGroup>
  363 +
  364 + <FormGroup controlId="address">
  365 + <ControlLabel>Address</ControlLabel>
  366 + <FormControl
  367 + type="text"
  368 + value={this.state.address}
  369 + placeholder="#876, Street, town"
  370 + onChange={e=>this.onUpdate('address',e.target.value)}
  371 + />
  372 + </FormGroup>
  373 +
  374 + <FormGroup controlId="city">
  375 + <ControlLabel>City</ControlLabel>
  376 + <FormControl
  377 + type="text"
  378 + value={this.state.city}
  379 + placeholder="Chennai"
  380 + onChange={e=>this.onUpdate('city',e.target.value)}
  381 + />
  382 + </FormGroup>
  383 +
  384 + <FormGroup controlId="state">
  385 + <ControlLabel>State</ControlLabel>
  386 + <FormControl
  387 + type="text"
  388 + value={this.state.state}
  389 + placeholder="Tamilnadu"
  390 + onChange={e=>this.onUpdate('state',e.target.value)}
  391 + />
  392 + </FormGroup>
  393 +
  394 + <FormGroup controlId="parentName">
  395 + <ControlLabel>Parent Name</ControlLabel>
  396 + <FormControl
  397 + type="text"
  398 + value={this.state.parentName}
  399 + placeholder="John"
  400 + onChange={e=>this.onUpdate('parentName',e.target.value)}
  401 + />
  402 + </FormGroup>
  403 +
  404 + <FormGroup controlId="parentEmail">
  405 + <ControlLabel>Parent Email</ControlLabel>
  406 + <FormControl
  407 + type="text"
  408 + value={this.state.parentEmail}
  409 + placeholder="john@email.com"
  410 + onChange={e=>this.onUpdate('parentEmail',e.target.value)}
  411 + />
  412 + </FormGroup>
  413 +
  414 + <FormGroup controlId="relation">
  415 + <ControlLabel>Relation</ControlLabel>
  416 + <FormControl
  417 + type="text"
  418 + value={this.state.relation}
  419 + placeholder="Father"
  420 + onChange={e=>this.onUpdate('relation',e.target.value)}
  421 + />
  422 + </FormGroup>
  423 +
  424 + <FormGroup controlId="profession">
  425 + <ControlLabel>Profession</ControlLabel>
  426 + <FormControl
  427 + type="text"
  428 + value={this.state.profession}
  429 + placeholder="Farmer"
  430 + onChange={e=>this.onUpdate('profession',e.target.value)}
  431 + />
  432 + </FormGroup>
  433 +
  434 + <FormGroup controlId="parentGender">
  435 + <ControlLabel>Parent Gender</ControlLabel>
  436 + <FormControl componentClass="select"
  437 + placeholder="select"
  438 + value={this.state.parentGender}
  439 + onChange={e=>this.onUpdate('parentGender',e.target.value)}
  440 + >
  441 + <option value="male">Male</option>
  442 + <option value="female">Female</option>
  443 + </FormControl>
  444 + </FormGroup>
  445 +
  446 + <FormGroup controlId="parentPhone">
  447 + <ControlLabel>Parent Phone</ControlLabel>
  448 + <FormControl
  449 + type="text"
  450 + value={this.state.parentPhone}
  451 + placeholder="9876543210"
  452 + onChange={e=>this.onUpdate('parentPhone',e.target.value)}
  453 + />
  454 + </FormGroup>
  455 +
  456 + <FormGroup controlId="parentAddress">
  457 + <ControlLabel>Parent Address</ControlLabel>
  458 + <FormControl
  459 + type="text"
  460 + value={this.state.parentAddress}
  461 + placeholder="#12, street, town"
  462 + onChange={e=>this.onUpdate('parentAddress',e.target.value)}
  463 + />
  464 + </FormGroup>
  465 +
  466 + <FormGroup controlId="parentCity">
  467 + <ControlLabel>Parent City</ControlLabel>
  468 + <FormControl
  469 + type="text"
  470 + value={this.state.parentCity}
  471 + placeholder="Chennai"
  472 + onChange={e=>this.onUpdate('parentCity',e.target.value)}
  473 + />
  474 + </FormGroup>
  475 +
  476 + <FormGroup controlId="parentState">
  477 + <ControlLabel>Parent State</ControlLabel>
  478 + <FormControl
  479 + type="text"
  480 + value={this.state.parentState}
  481 + placeholder="Tamilnadu"
  482 + onChange={e=>this.onUpdate('parentState',e.target.value)}
  483 + />
  484 + </FormGroup>
  485 +
  486 + <FormGroup controlId="parentZipcode">
  487 + <ControlLabel>Parent Zipcode</ControlLabel>
  488 + <FormControl
  489 + type="text"
  490 + value={this.state.parentZipcode}
  491 + placeholder="600031"
  492 + onChange={e=>this.onUpdate('parentZipcode',e.target.value)}
  493 + />
  494 + </FormGroup>
  495 + <Button type="submit" bsStyle="default">Add Student</Button>
  496 + </Form>
  497 + );
  498 + };
  499 +
  500 +};
... ...
imports/client/views/org/admin/students/addStudent.js
... ... @@ -1,64 +0,0 @@
1   -import _ from 'lodash';
2   -import { Meteor } from 'meteor/meteor';
3   -import './student.css'
4   -import React, { Component } from 'react';
5   -import { Link,browserHistory } from 'react-router';
6   -import { FormGroup,Panel,Table,
7   - ButtonToolbar,Modal,
8   - FormControl,Glyphicon,Button } from 'react-bootstrap';
9   -import { AddStudentFormContainer } from './AddStudentFormContainer';
10   -
11   -const style = {
12   - margin: 12,
13   -};
14   -export class AddStudent extends Component {
15   - constructor(props) {
16   - super(props);
17   - this.state = {
18   - show: false
19   - };
20   - this.showModal = this.showModal.bind(this);
21   - this.hideModal = this.hideModal.bind(this);
22   - this.onUpdate = this.onUpdate.bind(this);
23   - };
24   -
25   - showModal() {
26   - this.setState({show: true});
27   - }
28   -
29   - hideModal() {
30   - this.setState({show: false});
31   - }
32   - onUpdate(key, value) {
33   - this.setState({[key]: value});
34   - };
35   -
36   - render() {
37   - return (
38   - <ButtonToolbar>
39   - <Button bsStyle="primary" onClick={this.showModal}>
40   - Add Student
41   - </Button>
42   - <Modal
43   - {...this.props}
44   - show={this.state.show}
45   - onHide={this.hideModal}
46   - dialogClassName="custom-modal"
47   - >
48   - <Modal.Header closeButton>
49   - <Modal.Title id="contained-modal-title-lg">New Student</Modal.Title>
50   - </Modal.Header>
51   - <Modal.Body>
52   - <AddStudentFormContainer />
53   - </Modal.Body>
54   - {/*
55   - <Modal.Footer>
56   - <Button onClick={this.hideModal}>Close</Button>
57   - </Modal.Footer>
58   - */}
59   - </Modal>
60   - </ButtonToolbar>
61   - );
62   - };
63   -
64   -};
imports/client/views/org/admin/students/addStudentForm.js
... ... @@ -1,500 +0,0 @@
1   -import _ from 'lodash';
2   -import { Meteor } from 'meteor/meteor';
3   -
4   -import React, { Component } from 'react';
5   -import { Link,browserHistory } from 'react-router';
6   -import { Form, FormGroup,InputGroup,
7   - DropdownButton,MenuItem,ControlLabel,
8   - SplitButton,
9   - FormControl,Glyphicon,Button } from 'react-bootstrap';
10   -import DatePicker from 'react-bootstrap-date-picker'
11   -import {addStudentManually} from '/imports/collections/students/methods';
12   -
13   -export class AddStudentForm extends Component {
14   -
15   - constructor(props) {
16   - super(props);
17   - this.state = {
18   - admissionId: "123",
19   - firstName: "first",
20   - lastName: "last",
21   - middleName: "middle",
22   - email: "deepak125.dk+21@gmail.com",
23   - dob: "",
24   - formattedDob: "",
25   - gender: "male",
26   - rollNo: "1",
27   - class: "2",
28   - section: "B",
29   - community: "SC",
30   - bloodGroup: "B+",
31   - phone: "9876543321",
32   - address: "address",
33   - city: "chennai",
34   - state: "tn",
35   - parentName: "parentName",
36   - parentEmail: "deepak125.dk+41@gmail.com",
37   - relation: "father",
38   - profession: "farmer",
39   - parentGender: "male",
40   - parentPhone: "987655412",
41   - parentAddress: "parentAddress",
42   - parentCity: "parentCity",
43   - parentState: "parentState",
44   - parentZipcode: "parentZipcode",
45   - };
46   - this.onUpdate = this.onUpdate.bind(this);
47   - this.handleDob = this.handleDob.bind(this);
48   - };
49   -
50   - onUpdate(key, value) {
51   - this.setState({[key]: value});
52   - };
53   -
54   - handleDob(value, formattedValue) {
55   - this.setState({
56   - dob: value, // ISO String, ex: "2016-11-19T12:00:00.000Z"
57   - formattedDob: formattedValue // Formatted String, ex: "11/19/2016"
58   - });
59   -}
60   - addStudent(e){
61   - e.preventDefault();
62   - e.persist();
63   - const firstName = this.state.firstName;
64   - const middleName = this.state.middleName;
65   - const lastName = this.state.lastName;
66   - const admissionId = this.state.admissionId;
67   - const email = this.state.email;
68   - const dob = this.state.dob;
69   - const formattedDob = this.state.formattedDob;
70   - const gender = this.state.gender;
71   - const rollNo = this.state.rollNo;
72   - const studentclass = this.state.class;
73   - const section = this.state.section;
74   - const community = this.state.community;
75   - const bloodGroup = this.state.bloodGroup;
76   - const phone = this.state.phone;
77   - const address = this.state.address;
78   - const city = this.state.city;
79   - const state = this.state.state;
80   - const parentName = this.state.parentName;
81   - const parentEmail = this.state.parentEmail;
82   - const relation = this.state.relation;
83   - const profession = this.state.profession;
84   - const parentGender = this.state.parentGender;
85   - const parentPhone = this.state.parentPhone;
86   - const parentAddress = this.state.parentAddress;
87   - const parentCity = this.state.parentCity;
88   - const parentState = this.state.parentState;
89   - const parentZipcode = this.state.parentZipcode;
90   - if(admissionId==""){
91   - Bert.alert('Enter Admission Id!', 'danger');
92   - }else if(firstName==""){
93   - Bert.alert('Enter Fist Name', 'danger');
94   - } else if(middleName==""){
95   - Bert.alert('Enter Middle name!', 'danger');
96   - }else if(lastName==""){
97   - Bert.alert('Enter Last name!', 'danger');
98   - }else if(email==""){
99   - Bert.alert('Enter email!', 'danger');
100   - }else if(dob==""){
101   - Bert.alert('Enter DOB!', 'danger');
102   - }else if(gender==""){
103   - Bert.alert('Enter Student Gender!', 'danger');
104   - }else if(studentclass==""){
105   - Bert.alert('Enter Class!', 'danger');
106   - }else if(section==""){
107   - Bert.alert('Enter Section!', 'danger');
108   - }else if(community==""){
109   - Bert.alert('Enter Section!', 'danger');
110   - }else if(bloodGroup==""){
111   - Bert.alert('Enter Blood Group!', 'danger');
112   - }else if(phone==""){
113   - Bert.alert('Enter phone!', 'danger');
114   - }else if(address==""){
115   - Bert.alert('Enter address!', 'danger');
116   - }else if(city==""){
117   - Bert.alert('Enter city!', 'danger');
118   - }else if(state==""){
119   - Bert.alert('Enter state!', 'danger');
120   - }else if(parentName==""){
121   - Bert.alert('Enter Parent name!', 'danger');
122   - }else if(parentEmail==""){
123   - Bert.alert('Enter Parent Email!', 'danger');
124   - }else if(relation==""){
125   - Bert.alert('Enter relation!', 'danger');
126   - }else if(profession==""){
127   - Bert.alert('Enter parent profession!', 'danger');
128   - }else if(parentGender==""){
129   - Bert.alert("Enter Parent's Gender!", 'danger');
130   - }else if(parentPhone==""){
131   - Bert.alert("Enter Parent's Phone!", 'danger');
132   - }else if(parentAddress==""){
133   - Bert.alert("Enter Parent's Address!", 'danger');
134   - }else if(parentCity==""){
135   - Bert.alert("Enter Parent's City!", 'danger');
136   - }else if(parentState==""){
137   - Bert.alert("Enter Parent's State!", 'danger');
138   - }else if(parentZipcode==""){
139   - Bert.alert("Enter Parent's zipcode!", 'danger');
140   - }else{
141   - addStudentManually.call({
142   - admissionId,
143   - firstName,
144   - middleName,
145   - lastName,
146   - email,
147   - dob,
148   - formattedDob,
149   - gender,
150   - rollNo,
151   - studentclass,
152   - section,
153   - community,
154   - bloodGroup,
155   - phone,
156   - address,
157   - city,
158   - state,
159   - parentName,
160   - parentEmail,
161   - relation,
162   - profession,
163   - parentGender,
164   - parentPhone,
165   - parentAddress,
166   - parentCity,
167   - parentState,
168   - parentZipcode
169   - }, function (error, result) {
170   - console.log(error);
171   - console.log(result);
172   - });
173   - }
174   - }
175   - render() {
176   - return (
177   - <Form className="steps-validation wizard clearfix" onSubmit={ (e) => this.addStudent(e) } inline>
178   - <div className="steps clearfix">
179   - <ul role="tablist">
180   - <li role="tab" className="first current" aria-disabled="false" aria-selected="true">
181   - <a id="steps-uid-4-t-0" href="#steps-uid-4-h-0" aria-controls="steps-uid-4-p-0">
182   - <span className="current-info audible">current step: </span><span className="number">1</span> Personal data
183   - </a>
184   - </li>
185   - <li role="tab" className="disabled" aria-disabled="true">
186   - <a id="steps-uid-4-t-1" href="#steps-uid-4-h-1" aria-controls="steps-uid-4-p-1">
187   - <span className="number">2</span> Your education\n\
188   - </a>
189   - </li>
190   - <li role="tab" className="disabled" aria-disabled="true">
191   - <a id="steps-uid-4-t-2" href="#steps-uid-4-h-2" aria-controls="steps-uid-4-p-2">
192   - <span className="number">3</span> Your experience
193   - </a>
194   - </li>
195   - <li role="tab" className="disabled last" aria-disabled="true">
196   - <a id="steps-uid-4-t-3" href="#steps-uid-4-h-3" aria-controls="steps-uid-4-p-3">
197   - <span className="number">4</span> Additional info
198   - </a>
199   - </li>
200   - </ul>
201   - </div>
202   - <div className="content clearfix">
203   - <h6 id="steps-uid-4-h-0" tabindex="-1" className="title current">Personal data</h6>
204   - <div id="steps-uid-4-p-0" role="tabpanel" aria-labelledby="steps-uid-4-h-0" className="body current">
205   - <div className="row">
206   - <div className="col-md-6">
207   -
208   - <FormGroup controlId="admissionId">
209   - <ControlLabel>Admission Id</ControlLabel>
210   - <FormControl
211   - type="text"
212   - value={this.state.admissionId}
213   - placeholder="admission Id"
214   - onChange={e=>this.onUpdate('admissionId',e.target.value)}
215   - />
216   - </FormGroup>
217   -
218   - </div>
219   -
220   - <div className="col-md-6">
221   -
222   - <FormGroup controlId="firstName">
223   - <ControlLabel>First Name</ControlLabel>
224   - <FormControl
225   - type="text"
226   - value={this.state.firstName}
227   - placeholder="First Name"
228   - onChange={e=>this.onUpdate('firstName',e.target.value)}
229   - />
230   - </FormGroup>
231   -
232   - </div>
233   - </div>
234   - </div>
235   - </div>
236   -
237   -
238   - <FormGroup controlId="admissionId">
239   - <ControlLabel>Admission Id</ControlLabel>
240   - <FormControl
241   - type="text"
242   - value={this.state.admissionId}
243   - placeholder="admission Id"
244   - onChange={e=>this.onUpdate('admissionId',e.target.value)}
245   - />
246   - </FormGroup>
247   -
248   - <FormGroup controlId="firstName">
249   - <ControlLabel>First Name</ControlLabel>
250   - <FormControl
251   - type="text"
252   - value={this.state.firstName}
253   - placeholder="First Name"
254   - onChange={e=>this.onUpdate('firstName',e.target.value)}
255   - />
256   - </FormGroup>
257   - <FormGroup controlId="middleName">
258   - <ControlLabel>Middle Name</ControlLabel>
259   - <FormControl
260   - type="text"
261   - value={this.state.middleName}
262   - placeholder="Middle Name"
263   - onChange={e=>this.onUpdate('middleName',e.target.value)}
264   - />
265   - </FormGroup>
266   -
267   - <FormGroup controlId="lastName">
268   - <ControlLabel>Last Name</ControlLabel>
269   - <FormControl
270   - type="text"
271   - value={this.state.lastName}
272   - placeholder="Last Name"
273   - onChange={e=>this.onUpdate('lastName',e.target.value)}
274   - />
275   -
276   - </FormGroup>
277   - <FormGroup controlId="email">
278   - <ControlLabel>Email</ControlLabel>
279   - <FormControl
280   - type="email"
281   - value={this.state.email}
282   - placeholder="Email"
283   - onChange={e=>this.onUpdate('email',e.target.value)}
284   - />
285   - </FormGroup>
286   - <FormGroup>
287   - <ControlLabel>Date of birth</ControlLabel>
288   - <DatePicker id="dob"
289   - value={this.state.dob}
290   - onChange={this.handleDob}
291   - />
292   - </FormGroup>
293   -
294   - <FormGroup controlId="formControlsSelect">
295   - <ControlLabel>Gender</ControlLabel>
296   - <FormControl componentClass="select"
297   - placeholder="select"
298   - value={this.state.gender}
299   - onChange={e=>this.onUpdate('gender',e.target.value)}
300   - >
301   - <option value="male">Male</option>
302   - <option value="female">Female</option>
303   - </FormControl>
304   - </FormGroup>
305   -
306   - <FormGroup controlId="rollNo">
307   - <ControlLabel>Roll No</ControlLabel>
308   - <FormControl
309   - type="text"
310   - value={this.state.rollNo}
311   - placeholder="Roll No"
312   - onChange={e=>this.onUpdate('rollNo',e.target.value)}
313   - />
314   - </FormGroup>
315   - <FormGroup controlId="class">
316   - <ControlLabel>Class</ControlLabel>
317   - <FormControl
318   - type="text"
319   - value={this.state.class}
320   - placeholder="7"
321   - onChange={e=>this.onUpdate('class',e.target.value)}
322   - />
323   - </FormGroup>
324   - <FormGroup controlId="section">
325   - <ControlLabel>Section</ControlLabel>
326   - <FormControl
327   - type="text"
328   - value={this.state.section}
329   - placeholder="B"
330   - onChange={e=>this.onUpdate('section',e.target.value)}
331   - />
332   - </FormGroup>
333   -
334   - <FormGroup controlId="community">
335   - <ControlLabel>Community</ControlLabel>
336   - <FormControl
337   - type="text"
338   - value={this.state.community}
339   - placeholder="General"
340   - onChange={e=>this.onUpdate('community',e.target.value)}
341   - />
342   - </FormGroup>
343   -
344   - <FormGroup controlId="bloodGroup">
345   - <ControlLabel>bloodGroup</ControlLabel>
346   - <FormControl
347   - type="text"
348   - value={this.state.bloodGroup}
349   - placeholder="B+"
350   - onChange={e=>this.onUpdate('bloodGroup',e.target.value)}
351   - />
352   - </FormGroup>
353   -
354   - <FormGroup controlId="phone">
355   - <ControlLabel>Phone</ControlLabel>
356   - <FormControl
357   - type="text"
358   - value={this.state.phone}
359   - placeholder="9999999999"
360   - onChange={e=>this.onUpdate('phone',e.target.value)}
361   - />
362   - </FormGroup>
363   -
364   - <FormGroup controlId="address">
365   - <ControlLabel>Address</ControlLabel>
366   - <FormControl
367   - type="text"
368   - value={this.state.address}
369   - placeholder="#876, Street, town"
370   - onChange={e=>this.onUpdate('address',e.target.value)}
371   - />
372   - </FormGroup>
373   -
374   - <FormGroup controlId="city">
375   - <ControlLabel>City</ControlLabel>
376   - <FormControl
377   - type="text"
378   - value={this.state.city}
379   - placeholder="Chennai"
380   - onChange={e=>this.onUpdate('city',e.target.value)}
381   - />
382   - </FormGroup>
383   -
384   - <FormGroup controlId="state">
385   - <ControlLabel>State</ControlLabel>
386   - <FormControl
387   - type="text"
388   - value={this.state.state}
389   - placeholder="Tamilnadu"
390   - onChange={e=>this.onUpdate('state',e.target.value)}
391   - />
392   - </FormGroup>
393   -
394   - <FormGroup controlId="parentName">
395   - <ControlLabel>Parent Name</ControlLabel>
396   - <FormControl
397   - type="text"
398   - value={this.state.parentName}
399   - placeholder="John"
400   - onChange={e=>this.onUpdate('parentName',e.target.value)}
401   - />
402   - </FormGroup>
403   -
404   - <FormGroup controlId="parentEmail">
405   - <ControlLabel>Parent Email</ControlLabel>
406   - <FormControl
407   - type="text"
408   - value={this.state.parentEmail}
409   - placeholder="john@email.com"
410   - onChange={e=>this.onUpdate('parentEmail',e.target.value)}
411   - />
412   - </FormGroup>
413   -
414   - <FormGroup controlId="relation">
415   - <ControlLabel>Relation</ControlLabel>
416   - <FormControl
417   - type="text"
418   - value={this.state.relation}
419   - placeholder="Father"
420   - onChange={e=>this.onUpdate('relation',e.target.value)}
421   - />
422   - </FormGroup>
423   -
424   - <FormGroup controlId="profession">
425   - <ControlLabel>Profession</ControlLabel>
426   - <FormControl
427   - type="text"
428   - value={this.state.profession}
429   - placeholder="Farmer"
430   - onChange={e=>this.onUpdate('profession',e.target.value)}
431   - />
432   - </FormGroup>
433   -
434   - <FormGroup controlId="parentGender">
435   - <ControlLabel>Parent Gender</ControlLabel>
436   - <FormControl componentClass="select"
437   - placeholder="select"
438   - value={this.state.parentGender}
439   - onChange={e=>this.onUpdate('parentGender',e.target.value)}
440   - >
441   - <option value="male">Male</option>
442   - <option value="female">Female</option>
443   - </FormControl>
444   - </FormGroup>
445   -
446   - <FormGroup controlId="parentPhone">
447   - <ControlLabel>Parent Phone</ControlLabel>
448   - <FormControl
449   - type="text"
450   - value={this.state.parentPhone}
451   - placeholder="9876543210"
452   - onChange={e=>this.onUpdate('parentPhone',e.target.value)}
453   - />
454   - </FormGroup>
455   -
456   - <FormGroup controlId="parentAddress">
457   - <ControlLabel>Parent Address</ControlLabel>
458   - <FormControl
459   - type="text"
460   - value={this.state.parentAddress}
461   - placeholder="#12, street, town"
462   - onChange={e=>this.onUpdate('parentAddress',e.target.value)}
463   - />
464   - </FormGroup>
465   -
466   - <FormGroup controlId="parentCity">
467   - <ControlLabel>Parent City</ControlLabel>
468   - <FormControl
469   - type="text"
470   - value={this.state.parentCity}
471   - placeholder="Chennai"
472   - onChange={e=>this.onUpdate('parentCity',e.target.value)}
473   - />
474   - </FormGroup>
475   -
476   - <FormGroup controlId="parentState">
477   - <ControlLabel>Parent State</ControlLabel>
478   - <FormControl
479   - type="text"
480   - value={this.state.parentState}
481   - placeholder="Tamilnadu"
482   - onChange={e=>this.onUpdate('parentState',e.target.value)}
483   - />
484   - </FormGroup>
485   -
486   - <FormGroup controlId="parentZipcode">
487   - <ControlLabel>Parent Zipcode</ControlLabel>
488   - <FormControl
489   - type="text"
490   - value={this.state.parentZipcode}
491   - placeholder="600031"
492   - onChange={e=>this.onUpdate('parentZipcode',e.target.value)}
493   - />
494   - </FormGroup>
495   - <Button type="submit" bsStyle="default">Add Student</Button>
496   - </Form>
497   - );
498   - };
499   -
500   -};
imports/client/views/org/admin/students/view/StudentTable.js
... ... @@ -6,7 +6,6 @@ import { Link,browserHistory } from &#39;react-router&#39;;
6 6 import { FormGroup,Panel,Table,
7 7 ButtonToolbar,Modal,
8 8 FormControl,Glyphicon,Button } from 'react-bootstrap';
9   - import { AddStudentForm } from '../addStudentForm';
10 9 import {moment} from 'meteor/momentjs:moment'
11 10 import {StudentRow} from './StudentRow'
12 11  
... ...
imports/client/views/org/admin/teachers/TeacherView.js
... ... @@ -8,7 +8,9 @@ import { FormGroup,
8 8 import { Header } from '../Header';
9 9 import { AdminSidebar } from '../Sidebar'
10 10 import { AdminBreadcrumb } from '../Breadcrumb'
11   -import { TeachersTable } from './view/TeachersTable'
  11 +import { TeachersTable } from './view/TeachersTable'
  12 +import { AddTeacher } from './add/addTeacher'
  13 +import { UploadCsvTeacher } from './UploadCsvTeacher'
12 14  
13 15 export class TeachersView extends Component {
14 16 constructor(props) {
... ... @@ -24,14 +26,14 @@ export class TeachersView extends Component {
24 26 };
25 27  
26 28 render() {
27   - const {user, org} = this.props.data;
  29 + const {user, org, teachers, teachersData} = this.props.data;
28 30 return (
29 31 <div className="appLayout-box">
30 32 <div className="page-container">
31 33 <div className="page-content">
32 34 <AdminSidebar
33   - user = {this.props.data.user}
34   - org = {this.props.data.org}
  35 + user = {user}
  36 + org = {org}
35 37 />
36 38 {/*end sidebar*/}
37 39 <div className="content-wrapper">
... ... @@ -41,17 +43,16 @@ export class TeachersView extends Component {
41 43 <div className="content has-detached-left">
42 44 <div className="container-detached">
43 45 <div className="content-detached">
44   - <Header/>
45   - <TeachersTable
  46 + <Header
  47 + user = {user}
  48 + org = {org}
  49 + />
  50 + <TeachersTable
46 51 data = {this.props.data}
47 52 teachers = {teachers}
48 53 />
49   - {
50   - /**
51   - <AddTeacher/>
52   - <UploadCsvTeacher />
53   - */
54   - }
  54 + <AddTeacher/>
  55 + <UploadCsvTeacher />
55 56 </div>
56 57 </div>
57 58 <div className="sidebar-detached affix-top">
... ...
imports/client/views/org/admin/teachers/UploadCsvTeacher.js
... ... @@ -0,0 +1,103 @@
  1 +// import {UploadCsv } from '/imports/collections/students/UploadCsv'
  2 +import _ from 'lodash';
  3 +import { Meteor } from 'meteor/meteor';
  4 +
  5 +import React, { Component } from 'react';
  6 +import { Link,browserHistory } from 'react-router';
  7 +import { FormGroup,Panel,Table,
  8 + ButtonToolbar,Modal,ControlLabel,HelpBlock,
  9 + FormControl,Glyphicon,Button } from 'react-bootstrap';
  10 +// import { AddStudentForm } from './addStudentForm';
  11 +import { FilesCollection } from 'meteor/ostrio:files';
  12 +const Papa = this.Papa;
  13 +// console.log(this);
  14 +const style = {
  15 + margin: 12,
  16 +};
  17 +function FieldGroup({ id, label, help, ...props }) {
  18 + return (
  19 + <FormGroup controlId={id}>
  20 + <ControlLabel>{label}</ControlLabel>
  21 + <FormControl {...props} />
  22 + {help && <HelpBlock>{help}</HelpBlock>}
  23 + </FormGroup>
  24 + );
  25 +}
  26 +export class UploadCsvTeacher extends Component {
  27 + constructor(props) {
  28 + super(props);
  29 + this.state = {
  30 + show: false
  31 + };
  32 + this.showModal = this.showModal.bind(this);
  33 + this.hideModal = this.hideModal.bind(this);
  34 + this.onUpdate = this.onUpdate.bind(this);
  35 + };
  36 +
  37 + showModal() {
  38 + this.setState({show: true});
  39 + }
  40 +
  41 + hideModal() {
  42 + this.setState({show: false});
  43 + }
  44 + onUpdate(key, value) {
  45 + this.setState({[key]: value});
  46 + };
  47 + uploadStudentCsv(e){
  48 + e.preventDefault();
  49 + e.persist();
  50 + var file = $('input[type="file"]').prop("files")[0];
  51 + Papa.parse(file, {
  52 + header: true,
  53 + complete: function(csvData) {
  54 + console.log("csvData");
  55 + console.log(csvData);
  56 + if(csvData){
  57 + Meteor.call('teachers.uploadCsv', csvData, function (error, result) {
  58 + console.log("error");
  59 + console.log(error);
  60 + console.log("result");
  61 + console.log(result);
  62 + })
  63 + }
  64 + }
  65 + });
  66 + }
  67 +
  68 + render() {
  69 + console.log(this.props);
  70 + return (
  71 + <ButtonToolbar>
  72 + <Button bsStyle="primary" onClick={this.showModal}>
  73 + Upload CSV
  74 + </Button>
  75 + <Modal
  76 + {...this.props}
  77 + show={this.state.show}
  78 + onHide={this.hideModal}
  79 + dialogClassName="custom-modal"
  80 + >
  81 + <Modal.Header closeButton>
  82 + <Modal.Title id="contained-modal-title-lg">New Student</Modal.Title>
  83 + </Modal.Header>
  84 + <Modal.Body>
  85 + <form onSubmit={ (e) => this.uploadStudentCsv(e) } >
  86 + <FieldGroup
  87 + id="formControlsFile"
  88 + type="file"
  89 + label="File"
  90 + help="Upload you CSV here."
  91 + />
  92 + <Button type="submit" bsStyle="default">Upload File</Button>
  93 + </form>
  94 + </Modal.Body>
  95 + <Modal.Footer>
  96 + <Button onClick={this.hideModal}>Close</Button>
  97 + </Modal.Footer>
  98 + </Modal>
  99 + </ButtonToolbar>
  100 + );
  101 + };
  102 +
  103 +};
... ...
imports/client/views/org/admin/teachers/add/AddStudentFormContainer.js
... ... @@ -0,0 +1,96 @@
  1 +import React, { Component } from 'react'
  2 +import { AddStudentForm } from './addStudentForm'
  3 +import StudentForm from './StudentForm'
  4 +import Form from '/imports/client/views/core/Form'
  5 +import Validator from '/imports/client/views/core/Validator'
  6 +import { isRequired, isValidEmail } from '/imports/client/views/core/validations'
  7 +import { addStudentManually } from '/imports/collections/students/methods';
  8 +
  9 +export class AddStudentFormContainer extends Component {
  10 +
  11 + constructor(props) {
  12 + super(props)
  13 + this.state = { currentStep: 0 }
  14 + this.handleNextClick = this.handleNextClick.bind(this)
  15 + this.handleBackClick = this.handleBackClick.bind(this)
  16 + this.handleSubmit = this.handleSubmit.bind(this)
  17 + }
  18 +
  19 + handleNextClick() {
  20 + this.form.handleSubmit()
  21 + if (this.validator.getErrors() && Object.keys(this.validator.getErrors()).length > 0) return
  22 + this.setState({ currentStep: this.state.currentStep + 1 })
  23 + this.form.resetSubmitted()
  24 + }
  25 +
  26 + handleBackClick() {
  27 + this.setState({ currentStep: this.state.currentStep + -1 })
  28 + }
  29 +
  30 + handleSubmit() {
  31 + if (this.state.currentStep === 3) {
  32 + addStudentManually.call(this.form.state.values)
  33 + }
  34 + }
  35 +
  36 + //render callback
  37 + render() {
  38 + return (
  39 + <Form
  40 + onSubmit={this.handleSubmit}
  41 + ref={form => this.form = form}
  42 + initialValues={{
  43 + gender: 'male',
  44 + parentGender: 'male',
  45 + }}
  46 + >
  47 + {({ values, setValue, getValue, isSubmitted, isDirty }) => (
  48 + <Validator
  49 + values={values}
  50 + ref={validator => this.validator = validator}
  51 + validations={{
  52 + admissionId: [(value) => isRequired('Admission id', value)],
  53 + firstName: [(value) => isRequired('First name', value)],
  54 + lastName: [(value) => isRequired('Last name', value)],
  55 + email: [(value) => isRequired('Email', value), isValidEmail],
  56 + dob: [(value) => isRequired('Date of birth', value)],
  57 + gender: [(value) => isRequired('Gender', value)],
  58 + rollNo: [(value) => this.state.currentStep === 1 && isRequired('Roll no', value)],
  59 + studentClass: [(value) => this.state.currentStep === 1 && isRequired('Class', value)],
  60 + section: [(value) => this.state.currentStep === 1 && isRequired('Section', value)],
  61 + community: [(value) => this.state.currentStep === 1 && isRequired('Community', value)],
  62 + bloodGroup: [(value) => this.state.currentStep === 1 && isRequired('Blood group', value)],
  63 + phone: [(value) => this.state.currentStep === 1 && isRequired('Phone', value)],
  64 + address: [(value) => this.state.currentStep === 2 && isRequired('Address', value)],
  65 + city: [(value) => this.state.currentStep === 2 && isRequired('City', value)],
  66 + state: [(value) => this.state.currentStep === 2 && isRequired('State', value)],
  67 + parentName: [(value) => this.state.currentStep === 3 && isRequired('Parent name', value)],
  68 + parentEmail: [(value) => this.state.currentStep === 3 && isRequired('Parent email', value), (value) => this.state.currentStep === 3 && isValidEmail(value)],
  69 + relation: [(value) => this.state.currentStep === 3 && isRequired('Relation', value)],
  70 + profession: [(value) => this.state.currentStep === 3 && isRequired('Profession', value)],
  71 + parentGender: [(value) => this.state.currentStep === 3 && isRequired('Parent gender', value)],
  72 + parentPhone: [(value) => this.state.currentStep === 3 && isRequired('Parent phone', value)],
  73 + parentAddress: [(value) => this.state.currentStep === 3 && isRequired('Parent address', value)],
  74 + parentCity: [(value) => this.state.currentStep === 3 && isRequired('Parent city', value)],
  75 + parentState: [(value) => this.state.currentStep === 3 && isRequired('Parent state', value)],
  76 + parentZipcode: [(value) => this.state.currentStep === 3 && isRequired('Parent zip code', value)],
  77 + }}
  78 + >
  79 + {({ errors }) => (
  80 + <StudentForm
  81 + isDirty={isDirty}
  82 + setValue={setValue}
  83 + getValue={getValue}
  84 + isSubmitted={isSubmitted}
  85 + errors={errors}
  86 + onNextClick={this.handleNextClick}
  87 + onBackClick={this.handleBackClick}
  88 + currentStep={this.state.currentStep}
  89 + />
  90 + )}
  91 + </Validator>
  92 + )}
  93 + </Form>
  94 + )
  95 + }
  96 +}
... ...
imports/client/views/org/admin/teachers/add/StudentForm.js
... ... @@ -0,0 +1,485 @@
  1 +import React, { PropTypes } from 'react'
  2 +import {
  3 + Row,
  4 + Col,
  5 + FormGroup,
  6 + FormControl,
  7 + Button
  8 +} from 'react-bootstrap'
  9 +import DatePicker from '/imports/client/views/core/DatePicker'
  10 +import Label from '/imports/client/views/core/Label'
  11 +import Stepper from '/imports/client/views/core/Stepper'
  12 +import ErrorLabel from '/imports/client/views/core/ErrorLabel'
  13 +
  14 +const StudentForm = props => (
  15 + <div className="stepy-validation">
  16 + <Stepper
  17 + steps={[
  18 + {
  19 + label: 'Personal data',
  20 + active: props.currentStep === 0,
  21 + },
  22 + {
  23 + label: 'Academic',
  24 + active: props.currentStep === 1,
  25 + },
  26 + {
  27 + label: 'Address',
  28 + active: props.currentStep === 2,
  29 + },
  30 + {
  31 + label: 'Parent info',
  32 + active: props.currentStep === 3,
  33 + }
  34 + ]}
  35 + />
  36 + {props.currentStep === 0 && (
  37 + <fieldset title="1">
  38 + <legend className="text-semibold">Personal data</legend>
  39 + <Row>
  40 + <Col xs={12} sm={6}>
  41 + <FormGroup controlId="admissionId">
  42 + <Label required>Admission Id</Label>
  43 + <FormControl
  44 + type="text"
  45 + value={props.getValue('admissionId')}
  46 + placeholder="admission Id"
  47 + onChange={e => props.setValue('admissionId', e.target.value)}
  48 + />
  49 + {props.isSubmitted() && props.errors && props.errors.admissionId && (
  50 + <ErrorLabel> {props.errors.admissionId} </ErrorLabel>
  51 + )}
  52 + </FormGroup>
  53 + </Col>
  54 + <Col xs={12} sm={6}>
  55 + <FormGroup controlId="firstName">
  56 + <Label required>First Name</Label>
  57 + <FormControl
  58 + type="text"
  59 + value={props.getValue('firstName')}
  60 + placeholder="First Name"
  61 + onChange={e => props.setValue('firstName', e.target.value)}
  62 + />
  63 + {props.isSubmitted() && props.errors && props.errors.firstName && (
  64 + <ErrorLabel> {props.errors.firstName} </ErrorLabel>
  65 + )}
  66 + </FormGroup>
  67 + </Col>
  68 + </Row>
  69 + <Row>
  70 + <Col xs={12} sm={6}>
  71 + <FormGroup controlId="lastName">
  72 + <Label required>Last Name</Label>
  73 + <FormControl
  74 + type="text"
  75 + value={props.getValue('lastName')}
  76 + placeholder="Last Name"
  77 + onChange={e => props.setValue('lastName', e.target.value)}
  78 + />
  79 + {props.isSubmitted() && props.errors && props.errors.lastName && (
  80 + <ErrorLabel> {props.errors.lastName} </ErrorLabel>
  81 + )}
  82 + </FormGroup>
  83 + </Col>
  84 + <Col xs={12} sm={6}>
  85 + <FormGroup controlId="formControlsSelect">
  86 + <Label>Gender</Label>
  87 + <FormControl componentClass="select"
  88 + placeholder="select"
  89 + value={props.getValue('gender')}
  90 + onChange={e => props.setValue('gender', e.target.value)}
  91 + >
  92 + <option value="male">Male</option>
  93 + <option value="female">Female</option>
  94 + </FormControl>
  95 + {props.isSubmitted() && props.errors && props.errors.gender && (
  96 + <ErrorLabel> {props.errors.gender} </ErrorLabel>
  97 + )}
  98 + </FormGroup>
  99 + </Col>
  100 + </Row>
  101 + <Row>
  102 + <Col xs={12} sm={6}>
  103 + <FormGroup controlId="email">
  104 + <Label required>Email</Label>
  105 + <FormControl
  106 + type="email"
  107 + value={props.getValue('email')}
  108 + placeholder="Email"
  109 + onChange={e => props.setValue('email', e.target.value)}
  110 + />
  111 + {props.isSubmitted() && props.errors && props.errors.email && (
  112 + <ErrorLabel> {props.errors.email} </ErrorLabel>
  113 + )}
  114 + </FormGroup>
  115 + </Col>
  116 + <Col xs={12} sm={6}>
  117 + <FormGroup>
  118 + <Label required>Date of birth</Label>
  119 + <DatePicker
  120 + id="dob"
  121 + setValue = {props.setValue}
  122 + value={props.getValue('dob')}
  123 + onChange={(e) => {
  124 + props.setValue('dob', e.target.value)
  125 + }}
  126 + />
  127 + {props.isSubmitted() && props.errors && props.errors.dob && (
  128 + <ErrorLabel> {props.errors.dob} </ErrorLabel>
  129 + )}
  130 + </FormGroup>
  131 + </Col>
  132 + </Row>
  133 + <Row>
  134 +
  135 + </Row>
  136 + </fieldset>
  137 + )}
  138 + {props.currentStep === 1 && (
  139 + <fieldset title="Academic">
  140 + <legend className="text-semibold">Academic</legend>
  141 + <Row>
  142 + <Col xs={12} sm={6}>
  143 + <FormGroup controlId="rollNo">
  144 + <Label required>Roll No</Label>
  145 + <FormControl
  146 + type="text"
  147 + value={props.getValue('rollNo')}
  148 + placeholder="Roll No"
  149 + onChange={e => props.setValue('rollNo', e.target.value)}
  150 + />
  151 + {props.isSubmitted() && props.errors && props.errors.rollNo && (
  152 + <ErrorLabel> {props.errors.rollNo} </ErrorLabel>
  153 + )}
  154 + </FormGroup>
  155 + </Col>
  156 + <Col xs={12} sm={6}>
  157 + <FormGroup controlId="class">
  158 + <Label required>Class</Label>
  159 + <FormControl
  160 + type="text"
  161 + value={props.getValue('studentClass')}
  162 + placeholder="7"
  163 + onChange={e => props.setValue('studentClass', e.target.value)}
  164 + />
  165 + {props.isSubmitted() && props.errors && props.errors.studentClass && (
  166 + <ErrorLabel> {props.errors.studentClass} </ErrorLabel>
  167 + )}
  168 + </FormGroup>
  169 + </Col>
  170 + </Row>
  171 + <Row>
  172 + <Col xs={12} sm={6}>
  173 + <FormGroup controlId="section">
  174 + <Label required>Section</Label>
  175 + <FormControl
  176 + type="text"
  177 + value={props.getValue('section')}
  178 + placeholder="B"
  179 + onChange={e => props.setValue('section', e.target.value)}
  180 + />
  181 + {props.isSubmitted() && props.errors && props.errors.section && (
  182 + <ErrorLabel> {props.errors.section} </ErrorLabel>
  183 + )}
  184 + </FormGroup>
  185 + </Col>
  186 + <Col xs={12} sm={6}>
  187 + <FormGroup controlId="community">
  188 + <Label required>Community</Label>
  189 + <FormControl
  190 + type="text"
  191 + value={props.getValue('community')}
  192 + placeholder="General"
  193 + onChange={e => props.setValue('community', e.target.value)}
  194 + />
  195 + {props.isSubmitted() && props.errors && props.errors.community && (
  196 + <ErrorLabel> {props.errors.community} </ErrorLabel>
  197 + )}
  198 + </FormGroup>
  199 + </Col>
  200 + </Row>
  201 + <Row>
  202 + <Col xs={12} sm={6}>
  203 + <FormGroup controlId="bloodGroup">
  204 + <Label required>bloodGroup</Label>
  205 + <FormControl
  206 + type="text"
  207 + value={props.getValue('bloodGroup')}
  208 + placeholder="B+"
  209 + onChange={e => props.setValue('bloodGroup', e.target.value)}
  210 + />
  211 + {props.isSubmitted() && props.errors && props.errors.bloodGroup && (
  212 + <ErrorLabel> {props.errors.bloodGroup} </ErrorLabel>
  213 + )}
  214 + </FormGroup>
  215 + </Col>
  216 + <Col xs={12} sm={6}>
  217 + <FormGroup controlId="phone">
  218 + <Label required>Phone</Label>
  219 + <FormControl
  220 + type="text"
  221 + value={props.getValue('phone')}
  222 + placeholder="9999999999"
  223 + onChange={e => props.setValue('phone', e.target.value)}
  224 + />
  225 + {props.isSubmitted() && props.errors && props.errors.phone && (
  226 + <ErrorLabel> {props.errors.phone} </ErrorLabel>
  227 + )}
  228 + </FormGroup>
  229 + </Col>
  230 + </Row>
  231 + </fieldset>
  232 + )}
  233 + {props.currentStep === 2 && (
  234 + <fieldset title="Address">
  235 + <legend className="text-semibold">Address</legend>
  236 + <Row>
  237 + <Col xs={12} sm={6}>
  238 + <FormGroup controlId="address">
  239 + <Label required>Address</Label>
  240 + <FormControl
  241 + type="text"
  242 + value={props.getValue('address')}
  243 + placeholder="#876, Street, town"
  244 + onChange={e => props.setValue('address', e.target.value)}
  245 + />
  246 + {props.isSubmitted() && props.errors && props.errors.address && (
  247 + <ErrorLabel> {props.errors.address} </ErrorLabel>
  248 + )}
  249 + </FormGroup>
  250 + </Col>
  251 + <Col xs={12} sm={6}>
  252 + <FormGroup controlId="city">
  253 + <Label required>City</Label>
  254 + <FormControl
  255 + type="text"
  256 + value={props.getValue('city')}
  257 + placeholder="Chennai"
  258 + onChange={e => props.setValue('city', e.target.value)}
  259 + />
  260 + {props.isSubmitted() && props.errors && props.errors.city && (
  261 + <ErrorLabel> {props.errors.city} </ErrorLabel>
  262 + )}
  263 + </FormGroup>
  264 + </Col>
  265 + </Row>
  266 + <Row>
  267 + <Col xs={12} sm={6}>
  268 + <FormGroup controlId="state">
  269 + <Label required>State</Label>
  270 + <FormControl
  271 + type="text"
  272 + value={props.getValue('state')}
  273 + placeholder="Tamilnadu"
  274 + onChange={e => props.setValue('state', e.target.value)}
  275 + />
  276 + {props.isSubmitted() && props.errors && props.errors.state && (
  277 + <ErrorLabel> {props.errors.state} </ErrorLabel>
  278 + )}
  279 + </FormGroup>
  280 + </Col>
  281 + </Row>
  282 + </fieldset>
  283 + )}
  284 + {props.currentStep === 3 && (
  285 + <fieldset title="2">
  286 + <legend className="text-semibold">Parent information</legend>
  287 + <Row>
  288 + <Col xs={12} sm={6}>
  289 + <FormGroup controlId="parentName">
  290 + <Label required>Parent Name</Label>
  291 + <FormControl
  292 + type="text"
  293 + value={props.getValue('parentName')}
  294 + placeholder="John"
  295 + onChange={e => props.setValue('parentName', e.target.value)}
  296 + />
  297 + {props.isSubmitted() && props.errors && props.errors.parentName && (
  298 + <ErrorLabel> {props.errors.parentName} </ErrorLabel>
  299 + )}
  300 + </FormGroup>
  301 + </Col>
  302 + <Col xs={12} sm={6}>
  303 + <FormGroup controlId="parentEmail">
  304 + <Label required>Parent Email</Label>
  305 + <FormControl
  306 + type="text"
  307 + value={props.getValue('parentEmail')}
  308 + placeholder="john@email.com"
  309 + onChange={e => props.setValue('parentEmail', e.target.value)}
  310 + />
  311 + {props.isSubmitted() && props.errors && props.errors.parentEmail && (
  312 + <ErrorLabel> {props.errors.parentEmail} </ErrorLabel>
  313 + )}
  314 + </FormGroup>
  315 + </Col>
  316 + </Row>
  317 + <Row>
  318 + <Col xs={12} sm={6}>
  319 + <FormGroup controlId="relation">
  320 + <Label required>Relation</Label>
  321 + <FormControl
  322 + type="text"
  323 + value={props.getValue('relation')}
  324 + placeholder="Father"
  325 + onChange={e => props.setValue('relation', e.target.value)}
  326 + />
  327 + {props.isSubmitted() && props.errors && props.errors.relation && (
  328 + <ErrorLabel> {props.errors.relation} </ErrorLabel>
  329 + )}
  330 + </FormGroup>
  331 + </Col>
  332 + <Col xs={12} sm={6}>
  333 + <FormGroup controlId="profession">
  334 + <Label required>Profession</Label>
  335 + <FormControl
  336 + type="text"
  337 + value={props.getValue('profession')}
  338 + placeholder="Farmer"
  339 + onChange={e => props.setValue('profession', e.target.value)}
  340 + />
  341 + {props.isSubmitted() && props.errors && props.errors.profession && (
  342 + <ErrorLabel> {props.errors.profession} </ErrorLabel>
  343 + )}
  344 + </FormGroup>
  345 + </Col>
  346 + </Row>
  347 + <Row>
  348 + <Col xs={12} sm={6}>
  349 + <FormGroup controlId="parentGender">
  350 + <Label>Parent Gender</Label>
  351 + <FormControl componentClass="select"
  352 + placeholder="select"
  353 + value={props.getValue('parentGender')}
  354 + onChange={e => props.setValue('parentGender', e.target.value)}
  355 + >
  356 + <option value="male">Male</option>
  357 + <option value="female">Female</option>
  358 + </FormControl>
  359 + {props.isSubmitted() && props.errors && props.errors.parentGender && (
  360 + <ErrorLabel> {props.errors.parentGender} </ErrorLabel>
  361 + )}
  362 + </FormGroup>
  363 + </Col>
  364 + <Col xs={12} sm={6}>
  365 + <FormGroup controlId="parentPhone">
  366 + <Label required>Parent Phone</Label>
  367 + <FormControl
  368 + type="text"
  369 + value={props.getValue('parentPhone')}
  370 + placeholder="9876543210"
  371 + onChange={e => props.setValue('parentPhone', e.target.value)}
  372 + />
  373 + {props.isSubmitted() && props.errors && props.errors.parentPhone && (
  374 + <ErrorLabel> {props.errors.parentPhone} </ErrorLabel>
  375 + )}
  376 + </FormGroup>
  377 + </Col>
  378 + </Row>
  379 + <Row>
  380 + <Col xs={12} sm={6}>
  381 + <FormGroup controlId="parentAddress">
  382 + <Label required>Parent Address</Label>
  383 + <FormControl
  384 + type="text"
  385 + value={props.getValue('parentAddress')}
  386 + placeholder="#12, street, town"
  387 + onChange={e => props.setValue('parentAddress', e.target.value)}
  388 + />
  389 + {props.isSubmitted() && props.errors && props.errors.parentAddress && (
  390 + <ErrorLabel> {props.errors.parentAddress} </ErrorLabel>
  391 + )}
  392 + </FormGroup>
  393 + </Col>
  394 + <Col xs={12} sm={6}>
  395 + <FormGroup controlId="parentCity">
  396 + <Label required>Parent City</Label>
  397 + <FormControl
  398 + type="text"
  399 + value={props.getValue('parentCity')}
  400 + placeholder="Chennai"
  401 + onChange={e => props.setValue('parentCity', e.target.value)}
  402 + />
  403 + {props.isSubmitted() && props.errors && props.errors.parentCity && (
  404 + <ErrorLabel> {props.errors.parentCity} </ErrorLabel>
  405 + )}
  406 + </FormGroup>
  407 + </Col>
  408 + </Row>
  409 + <Row>
  410 + <Col xs={12} sm={6}>
  411 + <FormGroup controlId="parentState">
  412 + <Label required>Parent State</Label>
  413 + <FormControl
  414 + type="text"
  415 + value={props.getValue('parentState')}
  416 + placeholder="600031"
  417 + onChange={e => props.setValue('parentState', e.target.value)}
  418 + />
  419 + {props.isSubmitted() && props.errors && props.errors.parentState && (
  420 + <ErrorLabel> {props.errors.parentState} </ErrorLabel>
  421 + )}
  422 + </FormGroup>
  423 + </Col>
  424 + <Col xs={12} sm={6}>
  425 + <FormGroup controlId="parentZipcode">
  426 + <Label required>Parent Zipcode</Label>
  427 + <FormControl
  428 + type="text"
  429 + value={props.getValue('parentZipcode')}
  430 + placeholder="600031"
  431 + onChange={e => props.setValue('parentZipcode', e.target.value)}
  432 + />
  433 + {props.isSubmitted() && props.errors && props.errors.parentZipcode && (
  434 + <ErrorLabel> {props.errors.parentZipcode} </ErrorLabel>
  435 + )}
  436 + </FormGroup>
  437 + </Col>
  438 + </Row>
  439 + </fieldset>
  440 + )}
  441 + <div style={{ textAlign: 'left' }}>
  442 + {props.currentStep > 0 && (
  443 + <div style={{ display: 'inline-block', marginRight: 10 }}>
  444 + <Button onClick={props.onBackClick}>
  445 + <i className="icon-arrow-left13 position-left"></i>
  446 + BACK
  447 + </Button>
  448 +
  449 + </div>
  450 + )}
  451 + {props.currentStep < 3 && (
  452 + <div style={{ display: 'inline-block' }}>
  453 + <Button
  454 + bsStyle="primary"
  455 + onClick={props.onNextClick}
  456 + >
  457 + NEXT
  458 + <i className="icon-arrow-right14 position-right" />
  459 + </Button>
  460 + </div>
  461 + )}
  462 + {props.currentStep === 3 && (
  463 + <div style={{ display: 'inline-block' }}>
  464 + <Button
  465 + bsStyle="primary"
  466 + onClick={props.onNextClick}
  467 + >
  468 + SAVE
  469 + <i className="fa fa-check" />
  470 + </Button>
  471 + </div>
  472 + )}
  473 + </div>
  474 + </div>
  475 +)
  476 +
  477 +StudentForm.propTypes = {
  478 + currentStep: PropTypes.number.isRequired,
  479 + onNextClick: PropTypes.func.isRequired,
  480 + onBackClick: PropTypes.func.isRequired,
  481 + setValue: PropTypes.func.isRequired,
  482 + getValue: PropTypes.func.isRequired,
  483 +}
  484 +
  485 +export default StudentForm
... ...
imports/client/views/org/admin/teachers/add/addStudentForm.js
... ... @@ -0,0 +1,500 @@
  1 +import _ from 'lodash';
  2 +import { Meteor } from 'meteor/meteor';
  3 +
  4 +import React, { Component } from 'react';
  5 +import { Link,browserHistory } from 'react-router';
  6 +import { Form, FormGroup,InputGroup,
  7 + DropdownButton,MenuItem,ControlLabel,
  8 + SplitButton,
  9 + FormControl,Glyphicon,Button } from 'react-bootstrap';
  10 +import DatePicker from 'react-bootstrap-date-picker'
  11 +import {addStudentManually} from '/imports/collections/students/methods';
  12 +
  13 +export class AddStudentForm extends Component {
  14 +
  15 + constructor(props) {
  16 + super(props);
  17 + this.state = {
  18 + admissionId: "123",
  19 + firstName: "first",
  20 + lastName: "last",
  21 + middleName: "middle",
  22 + email: "deepak125.dk+21@gmail.com",
  23 + dob: "",
  24 + formattedDob: "",
  25 + gender: "male",
  26 + rollNo: "1",
  27 + class: "2",
  28 + section: "B",
  29 + community: "SC",
  30 + bloodGroup: "B+",
  31 + phone: "9876543321",
  32 + address: "address",
  33 + city: "chennai",
  34 + state: "tn",
  35 + parentName: "parentName",
  36 + parentEmail: "deepak125.dk+41@gmail.com",
  37 + relation: "father",
  38 + profession: "farmer",
  39 + parentGender: "male",
  40 + parentPhone: "987655412",
  41 + parentAddress: "parentAddress",
  42 + parentCity: "parentCity",
  43 + parentState: "parentState",
  44 + parentZipcode: "parentZipcode",
  45 + };
  46 + this.onUpdate = this.onUpdate.bind(this);
  47 + this.handleDob = this.handleDob.bind(this);
  48 + };
  49 +
  50 + onUpdate(key, value) {
  51 + this.setState({[key]: value});
  52 + };
  53 +
  54 + handleDob(value, formattedValue) {
  55 + this.setState({
  56 + dob: value, // ISO String, ex: "2016-11-19T12:00:00.000Z"
  57 + formattedDob: formattedValue // Formatted String, ex: "11/19/2016"
  58 + });
  59 +}
  60 + addStudent(e){
  61 + e.preventDefault();
  62 + e.persist();
  63 + const firstName = this.state.firstName;
  64 + const middleName = this.state.middleName;
  65 + const lastName = this.state.lastName;
  66 + const admissionId = this.state.admissionId;
  67 + const email = this.state.email;
  68 + const dob = this.state.dob;
  69 + const formattedDob = this.state.formattedDob;
  70 + const gender = this.state.gender;
  71 + const rollNo = this.state.rollNo;
  72 + const studentclass = this.state.class;
  73 + const section = this.state.section;
  74 + const community = this.state.community;
  75 + const bloodGroup = this.state.bloodGroup;
  76 + const phone = this.state.phone;
  77 + const address = this.state.address;
  78 + const city = this.state.city;
  79 + const state = this.state.state;
  80 + const parentName = this.state.parentName;
  81 + const parentEmail = this.state.parentEmail;
  82 + const relation = this.state.relation;
  83 + const profession = this.state.profession;
  84 + const parentGender = this.state.parentGender;
  85 + const parentPhone = this.state.parentPhone;
  86 + const parentAddress = this.state.parentAddress;
  87 + const parentCity = this.state.parentCity;
  88 + const parentState = this.state.parentState;
  89 + const parentZipcode = this.state.parentZipcode;
  90 + if(admissionId==""){
  91 + Bert.alert('Enter Admission Id!', 'danger');
  92 + }else if(firstName==""){
  93 + Bert.alert('Enter Fist Name', 'danger');
  94 + } else if(middleName==""){
  95 + Bert.alert('Enter Middle name!', 'danger');
  96 + }else if(lastName==""){
  97 + Bert.alert('Enter Last name!', 'danger');
  98 + }else if(email==""){
  99 + Bert.alert('Enter email!', 'danger');
  100 + }else if(dob==""){
  101 + Bert.alert('Enter DOB!', 'danger');
  102 + }else if(gender==""){
  103 + Bert.alert('Enter Student Gender!', 'danger');
  104 + }else if(studentclass==""){
  105 + Bert.alert('Enter Class!', 'danger');
  106 + }else if(section==""){
  107 + Bert.alert('Enter Section!', 'danger');
  108 + }else if(community==""){
  109 + Bert.alert('Enter Section!', 'danger');
  110 + }else if(bloodGroup==""){
  111 + Bert.alert('Enter Blood Group!', 'danger');
  112 + }else if(phone==""){
  113 + Bert.alert('Enter phone!', 'danger');
  114 + }else if(address==""){
  115 + Bert.alert('Enter address!', 'danger');
  116 + }else if(city==""){
  117 + Bert.alert('Enter city!', 'danger');
  118 + }else if(state==""){
  119 + Bert.alert('Enter state!', 'danger');
  120 + }else if(parentName==""){
  121 + Bert.alert('Enter Parent name!', 'danger');
  122 + }else if(parentEmail==""){
  123 + Bert.alert('Enter Parent Email!', 'danger');
  124 + }else if(relation==""){
  125 + Bert.alert('Enter relation!', 'danger');
  126 + }else if(profession==""){
  127 + Bert.alert('Enter parent profession!', 'danger');
  128 + }else if(parentGender==""){
  129 + Bert.alert("Enter Parent's Gender!", 'danger');
  130 + }else if(parentPhone==""){
  131 + Bert.alert("Enter Parent's Phone!", 'danger');
  132 + }else if(parentAddress==""){
  133 + Bert.alert("Enter Parent's Address!", 'danger');
  134 + }else if(parentCity==""){
  135 + Bert.alert("Enter Parent's City!", 'danger');
  136 + }else if(parentState==""){
  137 + Bert.alert("Enter Parent's State!", 'danger');
  138 + }else if(parentZipcode==""){
  139 + Bert.alert("Enter Parent's zipcode!", 'danger');
  140 + }else{
  141 + addStudentManually.call({
  142 + admissionId,
  143 + firstName,
  144 + middleName,
  145 + lastName,
  146 + email,
  147 + dob,
  148 + formattedDob,
  149 + gender,
  150 + rollNo,
  151 + studentclass,
  152 + section,
  153 + community,
  154 + bloodGroup,
  155 + phone,
  156 + address,
  157 + city,
  158 + state,
  159 + parentName,
  160 + parentEmail,
  161 + relation,
  162 + profession,
  163 + parentGender,
  164 + parentPhone,
  165 + parentAddress,
  166 + parentCity,
  167 + parentState,
  168 + parentZipcode
  169 + }, function (error, result) {
  170 + console.log(error);
  171 + console.log(result);
  172 + });
  173 + }
  174 + }
  175 + render() {
  176 + return (
  177 + <Form className="steps-validation wizard clearfix" onSubmit={ (e) => this.addStudent(e) } inline>
  178 + <div className="steps clearfix">
  179 + <ul role="tablist">
  180 + <li role="tab" className="first current" aria-disabled="false" aria-selected="true">
  181 + <a id="steps-uid-4-t-0" href="#steps-uid-4-h-0" aria-controls="steps-uid-4-p-0">
  182 + <span className="current-info audible">current step: </span><span className="number">1</span> Personal data
  183 + </a>
  184 + </li>
  185 + <li role="tab" className="disabled" aria-disabled="true">
  186 + <a id="steps-uid-4-t-1" href="#steps-uid-4-h-1" aria-controls="steps-uid-4-p-1">
  187 + <span className="number">2</span> Your education\n\
  188 + </a>
  189 + </li>
  190 + <li role="tab" className="disabled" aria-disabled="true">
  191 + <a id="steps-uid-4-t-2" href="#steps-uid-4-h-2" aria-controls="steps-uid-4-p-2">
  192 + <span className="number">3</span> Your experience
  193 + </a>
  194 + </li>
  195 + <li role="tab" className="disabled last" aria-disabled="true">
  196 + <a id="steps-uid-4-t-3" href="#steps-uid-4-h-3" aria-controls="steps-uid-4-p-3">
  197 + <span className="number">4</span> Additional info
  198 + </a>
  199 + </li>
  200 + </ul>
  201 + </div>
  202 + <div className="content clearfix">
  203 + <h6 id="steps-uid-4-h-0" tabindex="-1" className="title current">Personal data</h6>
  204 + <div id="steps-uid-4-p-0" role="tabpanel" aria-labelledby="steps-uid-4-h-0" className="body current">
  205 + <div className="row">
  206 + <div className="col-md-6">
  207 +
  208 + <FormGroup controlId="admissionId">
  209 + <ControlLabel>Admission Id</ControlLabel>
  210 + <FormControl
  211 + type="text"
  212 + value={this.state.admissionId}
  213 + placeholder="admission Id"
  214 + onChange={e=>this.onUpdate('admissionId',e.target.value)}
  215 + />
  216 + </FormGroup>
  217 +
  218 + </div>
  219 +
  220 + <div className="col-md-6">
  221 +
  222 + <FormGroup controlId="firstName">
  223 + <ControlLabel>First Name</ControlLabel>
  224 + <FormControl
  225 + type="text"
  226 + value={this.state.firstName}
  227 + placeholder="First Name"
  228 + onChange={e=>this.onUpdate('firstName',e.target.value)}
  229 + />
  230 + </FormGroup>
  231 +
  232 + </div>
  233 + </div>
  234 + </div>
  235 + </div>
  236 +
  237 +
  238 + <FormGroup controlId="admissionId">
  239 + <ControlLabel>Admission Id</ControlLabel>
  240 + <FormControl
  241 + type="text"
  242 + value={this.state.admissionId}
  243 + placeholder="admission Id"
  244 + onChange={e=>this.onUpdate('admissionId',e.target.value)}
  245 + />
  246 + </FormGroup>
  247 +
  248 + <FormGroup controlId="firstName">
  249 + <ControlLabel>First Name</ControlLabel>
  250 + <FormControl
  251 + type="text"
  252 + value={this.state.firstName}
  253 + placeholder="First Name"
  254 + onChange={e=>this.onUpdate('firstName',e.target.value)}
  255 + />
  256 + </FormGroup>
  257 + <FormGroup controlId="middleName">
  258 + <ControlLabel>Middle Name</ControlLabel>
  259 + <FormControl
  260 + type="text"
  261 + value={this.state.middleName}
  262 + placeholder="Middle Name"
  263 + onChange={e=>this.onUpdate('middleName',e.target.value)}
  264 + />
  265 + </FormGroup>
  266 +
  267 + <FormGroup controlId="lastName">
  268 + <ControlLabel>Last Name</ControlLabel>
  269 + <FormControl
  270 + type="text"
  271 + value={this.state.lastName}
  272 + placeholder="Last Name"
  273 + onChange={e=>this.onUpdate('lastName',e.target.value)}
  274 + />
  275 +
  276 + </FormGroup>
  277 + <FormGroup controlId="email">
  278 + <ControlLabel>Email</ControlLabel>
  279 + <FormControl
  280 + type="email"
  281 + value={this.state.email}
  282 + placeholder="Email"
  283 + onChange={e=>this.onUpdate('email',e.target.value)}
  284 + />
  285 + </FormGroup>
  286 + <FormGroup>
  287 + <ControlLabel>Date of birth</ControlLabel>
  288 + <DatePicker id="dob"
  289 + value={this.state.dob}
  290 + onChange={this.handleDob}
  291 + />
  292 + </FormGroup>
  293 +
  294 + <FormGroup controlId="formControlsSelect">
  295 + <ControlLabel>Gender</ControlLabel>
  296 + <FormControl componentClass="select"
  297 + placeholder="select"
  298 + value={this.state.gender}
  299 + onChange={e=>this.onUpdate('gender',e.target.value)}
  300 + >
  301 + <option value="male">Male</option>
  302 + <option value="female">Female</option>
  303 + </FormControl>
  304 + </FormGroup>
  305 +
  306 + <FormGroup controlId="rollNo">
  307 + <ControlLabel>Roll No</ControlLabel>
  308 + <FormControl
  309 + type="text"
  310 + value={this.state.rollNo}
  311 + placeholder="Roll No"
  312 + onChange={e=>this.onUpdate('rollNo',e.target.value)}
  313 + />
  314 + </FormGroup>
  315 + <FormGroup controlId="class">
  316 + <ControlLabel>Class</ControlLabel>
  317 + <FormControl
  318 + type="text"
  319 + value={this.state.class}
  320 + placeholder="7"
  321 + onChange={e=>this.onUpdate('class',e.target.value)}
  322 + />
  323 + </FormGroup>
  324 + <FormGroup controlId="section">
  325 + <ControlLabel>Section</ControlLabel>
  326 + <FormControl
  327 + type="text"
  328 + value={this.state.section}
  329 + placeholder="B"
  330 + onChange={e=>this.onUpdate('section',e.target.value)}
  331 + />
  332 + </FormGroup>
  333 +
  334 + <FormGroup controlId="community">
  335 + <ControlLabel>Community</ControlLabel>
  336 + <FormControl
  337 + type="text"
  338 + value={this.state.community}
  339 + placeholder="General"
  340 + onChange={e=>this.onUpdate('community',e.target.value)}
  341 + />
  342 + </FormGroup>
  343 +
  344 + <FormGroup controlId="bloodGroup">
  345 + <ControlLabel>bloodGroup</ControlLabel>
  346 + <FormControl
  347 + type="text"
  348 + value={this.state.bloodGroup}
  349 + placeholder="B+"
  350 + onChange={e=>this.onUpdate('bloodGroup',e.target.value)}
  351 + />
  352 + </FormGroup>
  353 +
  354 + <FormGroup controlId="phone">
  355 + <ControlLabel>Phone</ControlLabel>
  356 + <FormControl
  357 + type="text"
  358 + value={this.state.phone}
  359 + placeholder="9999999999"
  360 + onChange={e=>this.onUpdate('phone',e.target.value)}
  361 + />
  362 + </FormGroup>
  363 +
  364 + <FormGroup controlId="address">
  365 + <ControlLabel>Address</ControlLabel>
  366 + <FormControl
  367 + type="text"
  368 + value={this.state.address}
  369 + placeholder="#876, Street, town"
  370 + onChange={e=>this.onUpdate('address',e.target.value)}
  371 + />
  372 + </FormGroup>
  373 +
  374 + <FormGroup controlId="city">
  375 + <ControlLabel>City</ControlLabel>
  376 + <FormControl
  377 + type="text"
  378 + value={this.state.city}
  379 + placeholder="Chennai"
  380 + onChange={e=>this.onUpdate('city',e.target.value)}
  381 + />
  382 + </FormGroup>
  383 +
  384 + <FormGroup controlId="state">
  385 + <ControlLabel>State</ControlLabel>
  386 + <FormControl
  387 + type="text"
  388 + value={this.state.state}
  389 + placeholder="Tamilnadu"
  390 + onChange={e=>this.onUpdate('state',e.target.value)}
  391 + />
  392 + </FormGroup>
  393 +
  394 + <FormGroup controlId="parentName">
  395 + <ControlLabel>Parent Name</ControlLabel>
  396 + <FormControl
  397 + type="text"
  398 + value={this.state.parentName}
  399 + placeholder="John"
  400 + onChange={e=>this.onUpdate('parentName',e.target.value)}
  401 + />
  402 + </FormGroup>
  403 +
  404 + <FormGroup controlId="parentEmail">
  405 + <ControlLabel>Parent Email</ControlLabel>
  406 + <FormControl
  407 + type="text"
  408 + value={this.state.parentEmail}
  409 + placeholder="john@email.com"
  410 + onChange={e=>this.onUpdate('parentEmail',e.target.value)}
  411 + />
  412 + </FormGroup>
  413 +
  414 + <FormGroup controlId="relation">
  415 + <ControlLabel>Relation</ControlLabel>
  416 + <FormControl
  417 + type="text"
  418 + value={this.state.relation}
  419 + placeholder="Father"
  420 + onChange={e=>this.onUpdate('relation',e.target.value)}
  421 + />
  422 + </FormGroup>
  423 +
  424 + <FormGroup controlId="profession">
  425 + <ControlLabel>Profession</ControlLabel>
  426 + <FormControl
  427 + type="text"
  428 + value={this.state.profession}
  429 + placeholder="Farmer"
  430 + onChange={e=>this.onUpdate('profession',e.target.value)}
  431 + />
  432 + </FormGroup>
  433 +
  434 + <FormGroup controlId="parentGender">
  435 + <ControlLabel>Parent Gender</ControlLabel>
  436 + <FormControl componentClass="select"
  437 + placeholder="select"
  438 + value={this.state.parentGender}
  439 + onChange={e=>this.onUpdate('parentGender',e.target.value)}
  440 + >
  441 + <option value="male">Male</option>
  442 + <option value="female">Female</option>
  443 + </FormControl>
  444 + </FormGroup>
  445 +
  446 + <FormGroup controlId="parentPhone">
  447 + <ControlLabel>Parent Phone</ControlLabel>
  448 + <FormControl
  449 + type="text"
  450 + value={this.state.parentPhone}
  451 + placeholder="9876543210"
  452 + onChange={e=>this.onUpdate('parentPhone',e.target.value)}
  453 + />
  454 + </FormGroup>
  455 +
  456 + <FormGroup controlId="parentAddress">
  457 + <ControlLabel>Parent Address</ControlLabel>
  458 + <FormControl
  459 + type="text"
  460 + value={this.state.parentAddress}
  461 + placeholder="#12, street, town"
  462 + onChange={e=>this.onUpdate('parentAddress',e.target.value)}
  463 + />
  464 + </FormGroup>
  465 +
  466 + <FormGroup controlId="parentCity">
  467 + <ControlLabel>Parent City</ControlLabel>
  468 + <FormControl
  469 + type="text"
  470 + value={this.state.parentCity}
  471 + placeholder="Chennai"
  472 + onChange={e=>this.onUpdate('parentCity',e.target.value)}
  473 + />
  474 + </FormGroup>
  475 +
  476 + <FormGroup controlId="parentState">
  477 + <ControlLabel>Parent State</ControlLabel>
  478 + <FormControl
  479 + type="text"
  480 + value={this.state.parentState}
  481 + placeholder="Tamilnadu"
  482 + onChange={e=>this.onUpdate('parentState',e.target.value)}
  483 + />
  484 + </FormGroup>
  485 +
  486 + <FormGroup controlId="parentZipcode">
  487 + <ControlLabel>Parent Zipcode</ControlLabel>
  488 + <FormControl
  489 + type="text"
  490 + value={this.state.parentZipcode}
  491 + placeholder="600031"
  492 + onChange={e=>this.onUpdate('parentZipcode',e.target.value)}
  493 + />
  494 + </FormGroup>
  495 + <Button type="submit" bsStyle="default">Add Student</Button>
  496 + </Form>
  497 + );
  498 + };
  499 +
  500 +};
... ...
imports/client/views/org/admin/teachers/add/addTeacher.js
... ... @@ -0,0 +1,63 @@
  1 +import _ from 'lodash';
  2 +import { Meteor } from 'meteor/meteor';
  3 +import React, { Component } from 'react';
  4 +import { Link,browserHistory } from 'react-router';
  5 +import { FormGroup,Panel,Table,
  6 + ButtonToolbar,Modal,
  7 + FormControl,Glyphicon,Button } from 'react-bootstrap';
  8 +import { AddStudentFormContainer } from './AddStudentFormContainer';
  9 +
  10 +const style = {
  11 + margin: 12,
  12 +};
  13 +export class AddTeacher extends Component {
  14 + constructor(props) {
  15 + super(props);
  16 + this.state = {
  17 + show: false
  18 + };
  19 + this.showModal = this.showModal.bind(this);
  20 + this.hideModal = this.hideModal.bind(this);
  21 + this.onUpdate = this.onUpdate.bind(this);
  22 + };
  23 +
  24 + showModal() {
  25 + this.setState({show: true});
  26 + }
  27 +
  28 + hideModal() {
  29 + this.setState({show: false});
  30 + }
  31 + onUpdate(key, value) {
  32 + this.setState({[key]: value});
  33 + };
  34 +
  35 + render() {
  36 + return (
  37 + <ButtonToolbar>
  38 + <Button bsStyle="primary" onClick={this.showModal}>
  39 + Add Student
  40 + </Button>
  41 + <Modal
  42 + {...this.props}
  43 + show={this.state.show}
  44 + onHide={this.hideModal}
  45 + dialogClassName="custom-modal"
  46 + >
  47 + <Modal.Header closeButton>
  48 + <Modal.Title id="contained-modal-title-lg">New Student</Modal.Title>
  49 + </Modal.Header>
  50 + <Modal.Body>
  51 + <AddStudentFormContainer />
  52 + </Modal.Body>
  53 + {/*
  54 + <Modal.Footer>
  55 + <Button onClick={this.hideModal}>Close</Button>
  56 + </Modal.Footer>
  57 + */}
  58 + </Modal>
  59 + </ButtonToolbar>
  60 + );
  61 + };
  62 +
  63 +};
... ...