From 5d043355e349d2d4ef04781104b1cf9f8c7b42cb Mon Sep 17 00:00:00 2001 From: Deepak Date: Mon, 27 Mar 2017 01:38:51 +0530 Subject: [PATCH] fixed bug and added csv file functionality --- imports/client/views/core/DatePicker.js | 2 +- .../views/org/admin/students/StudentTable.js | 83 ---------------------- .../client/views/org/admin/students/StudentView.js | 8 ++- .../client/views/org/admin/students/UploadCsv.js | 13 +++- .../views/org/admin/students/view/StudentRow.js | 56 +++++++++++++++ .../views/org/admin/students/view/StudentTable.js | 66 +++++++++++++++++ imports/collections/orgs/methods.js | 16 ----- imports/collections/students/serverCsvUpload.js | 62 ++++++++-------- imports/server/collections.js | 1 + package.json | 2 + 10 files changed, 171 insertions(+), 138 deletions(-) delete mode 100644 imports/client/views/org/admin/students/StudentTable.js create mode 100644 imports/client/views/org/admin/students/view/StudentRow.js create mode 100644 imports/client/views/org/admin/students/view/StudentTable.js diff --git a/imports/client/views/core/DatePicker.js b/imports/client/views/core/DatePicker.js index f9afcab..85d4e04 100644 --- a/imports/client/views/core/DatePicker.js +++ b/imports/client/views/core/DatePicker.js @@ -8,7 +8,7 @@ class DatePicker extends Component { changeMonth: true, changeYear: true, showButtonPanel: true, - yearRange: '-116:+34', + yearRange: '-116:-1', dateFormat: 'dd/mm/yy' }); } diff --git a/imports/client/views/org/admin/students/StudentTable.js b/imports/client/views/org/admin/students/StudentTable.js deleted file mode 100644 index 7fe9c4d..0000000 --- a/imports/client/views/org/admin/students/StudentTable.js +++ /dev/null @@ -1,83 +0,0 @@ -import _ from 'lodash'; -import { Meteor } from 'meteor/meteor'; - -import React, { Component } from 'react'; -import { Link,browserHistory } from 'react-router'; -import { FormGroup,Panel,Table, - ButtonToolbar,Modal, - FormControl,Glyphicon,Button } from 'react-bootstrap'; - import { AddStudentForm } from './addStudentForm'; -import {moment} from 'meteor/momentjs:moment' - -export class StudentTable extends Component { - - constructor(props) { - super(props); - this.state = { - show: false - }; - this.onUpdate = this.onUpdate.bind(this); - }; - onUpdate(key, value) { - this.setState({[key]: value}); - }; - - render() { - return ( -
-
-
Student Details
-
-
    -
  • -
  • -
-
-
- - - - - - - - - - - - - { - this.props.students.map(function(student, i) - { - return( - - - - - - - - - ) - }) - } - -
First NameLast NameClassDOBStatusActions
{student.firstName}{student.lastName}{student.class}{student.dob? moment(student.dob).format("LL") : }Active - -
-
- ); - }; - -}; diff --git a/imports/client/views/org/admin/students/StudentView.js b/imports/client/views/org/admin/students/StudentView.js index ba4421d..528a89d 100644 --- a/imports/client/views/org/admin/students/StudentView.js +++ b/imports/client/views/org/admin/students/StudentView.js @@ -9,7 +9,7 @@ import { Navbar,Modal, Nav, NavItem, NavLink, DropdownItem, DropdownToggle, DropdownMenu, NavDropdown, MenuItem, Breadcrumb, Button } from 'react-bootstrap'; import { AddStudent } from './addStudent'; -import { StudentTable } from './StudentTable'; +import { StudentTable } from './view/StudentTable'; import { Header } from './Header'; import { FabMenuView } from './FabMenu'; import { UploadCsv } from './UploadCsv'; @@ -46,7 +46,9 @@ export class StudentView extends Component { firstNameSearch = this.state.firstNameSearch; lastNameSearch = this.state.lastNameSearch; var students =_.filter(this.props.data.students,function(item){ - return _.includes(item.firstName.toLowerCase(),firstNameSearch.toLowerCase()); + if(item.firstName){ + return _.includes(item.firstName.toLowerCase(),firstNameSearch.toLowerCase()); + } }); return (
@@ -132,7 +134,7 @@ export class StudentView extends Component {
{/*content*/} - +
diff --git a/imports/client/views/org/admin/students/UploadCsv.js b/imports/client/views/org/admin/students/UploadCsv.js index bab4462..dc50c45 100644 --- a/imports/client/views/org/admin/students/UploadCsv.js +++ b/imports/client/views/org/admin/students/UploadCsv.js @@ -1,3 +1,4 @@ +// import {UploadCsv } from '/imports/collections/students/UploadCsv' import _ from 'lodash'; import { Meteor } from 'meteor/meteor'; @@ -48,10 +49,16 @@ export class UploadCsv extends Component { e.persist(); var file = $('input[type="file"]').prop("files")[0]; Papa.parse(file, { - complete: function(results) { - if(results){ + header: true, + complete: function(csvData) { + console.log("csvData"); + console.log(csvData); + if(csvData){ Meteor.call('student.uploadCsv', csvData, function (error, result) { - + console.log("error"); + console.log(error); + console.log("result"); + console.log(result); }) } } diff --git a/imports/client/views/org/admin/students/view/StudentRow.js b/imports/client/views/org/admin/students/view/StudentRow.js new file mode 100644 index 0000000..2efa286 --- /dev/null +++ b/imports/client/views/org/admin/students/view/StudentRow.js @@ -0,0 +1,56 @@ +import _ from 'lodash'; +import { Meteor } from 'meteor/meteor'; + +import React, { Component } from 'react'; +import { Link,browserHistory } from 'react-router'; +import { FormGroup, + FormControl,Glyphicon,Button } from 'react-bootstrap'; + + +export class StudentRow extends Component { + + constructor(props) { + super(props); + this.state = { + + }; + this.onUpdate = this.onUpdate.bind(this); + }; + + onUpdate(key, value) { + this.setState({[key]: value}); + }; + + render() { + const {student} = this.props; + if(student.firstName){ + return ( + + {student.firstName} + {student.lastName} + {student.class} + {student.dob? moment(student.dob).format("LL") : } + Active + + + + + ); + }else { + return null; + } + + }; + +}; diff --git a/imports/client/views/org/admin/students/view/StudentTable.js b/imports/client/views/org/admin/students/view/StudentTable.js new file mode 100644 index 0000000..f7c864d --- /dev/null +++ b/imports/client/views/org/admin/students/view/StudentTable.js @@ -0,0 +1,66 @@ +import _ from 'lodash'; +import { Meteor } from 'meteor/meteor'; + +import React, { Component } from 'react'; +import { Link,browserHistory } from 'react-router'; +import { FormGroup,Panel,Table, + ButtonToolbar,Modal, + FormControl,Glyphicon,Button } from 'react-bootstrap'; + import { AddStudentForm } from '../addStudentForm'; +import {moment} from 'meteor/momentjs:moment' +import {StudentRow} from './StudentRow' + +export class StudentTable extends Component { + + constructor(props) { + super(props); + this.state = { + show: false + }; + this.onUpdate = this.onUpdate.bind(this); + }; + onUpdate(key, value) { + this.setState({[key]: value}); + }; + + render() { + return ( +
+
+
Student Details
+
+
    +
  • +
  • +
+
+
+ + + + + + + + + + + + + { + this.props.students.map(function(student, i) + { + return( + + ) + }) + } + +
First NameLast NameClassDOBStatusActions
+
+ ); + }; + +}; diff --git a/imports/collections/orgs/methods.js b/imports/collections/orgs/methods.js index 92e5d3b..bfe958e 100644 --- a/imports/collections/orgs/methods.js +++ b/imports/collections/orgs/methods.js @@ -51,19 +51,3 @@ export const checkEmailInOrg = new ValidatedMethod({ } }, }); - -export const save_csv_data = new ValidatedMethod({ - name: 'save_csv_data', - - validate: null, - - run(item,filename) { - var csv = json2csv({ - data: item, - fields: csv_students_fields - }); - fs.writeFile(filename, csv,function(err) { - if (err) throw err; - }); - }, -}); diff --git a/imports/collections/students/serverCsvUpload.js b/imports/collections/students/serverCsvUpload.js index 9659db4..d030fab 100644 --- a/imports/collections/students/serverCsvUpload.js +++ b/imports/collections/students/serverCsvUpload.js @@ -13,7 +13,7 @@ import { Students } from '/imports/collections/students/in import { Parents } from '/imports/collections/parents/index'; import csv1 from 'csv2json-convertor' import json2csv from 'json2csv' -import fs from 'fs' +import fs from 'fs' import Validation from '/imports/validation/validationMethods'; import Constants from '/imports/constants/constants' @@ -50,19 +50,19 @@ export const addStudentCSV= new ValidatedMethod({ name: 'student.addCSV', validate: null, - + run(item){ data = item ; console.log("data"); console.log(data); + return true; const user = Users.findOne({_id: this.userId}); orgId = user.orgId; newStudentId = Users.insert({ // emails: [{address:data.email, verified: false}], - username: data["first Name*"], - firstName: data.firstName, - middleName: data.middleName, - lastName: data.lastName, + username: data["First Name*"], + firstName: data["First Name*"], + lastName: data['Last Name*'], orgId: orgId, role: 'STUDENT' }); @@ -95,10 +95,10 @@ export const addStudentCSV= new ValidatedMethod({ Students.insert({ userId: newStudentId, orgId: orgId, - admissionId: data.admissionId, - address: data.address, - gender: data.gender, - dob: data.dob, + admissionId: data['Student Admission ID*'], + address: data['Student Admission ID*'], + gender: data['Gender(male/female)*'], + dob: data['Birthday(YYYY-MM-DD)*'], rollNo: data.rollNo, class: data.studentclass, section: data.section, @@ -115,9 +115,7 @@ export const addStudentCSV= new ValidatedMethod({ export const studentUploadCsv = new ValidatedMethod({ name: 'student.uploadCsv', - validate: new SimpleSchema({ - data: { type: [Object] }, - }).validator(), + validate: null, run({data}) { let validation = new Validation(); @@ -126,19 +124,19 @@ export const studentUploadCsv = new ValidatedMethod({ temp = constants.csv_students_data(); // console.log(temp); - var data_1=csv1.csvtojson(("/Users/satheeshnagaraj/Downloads/11.csv")); //csvtojson is function that accepts csv filenames and returns JSON object + // var data_1=csv1.csvtojson(("/Users/satheeshnagaraj/Downloads/11.csv")); //csvtojson is function that accepts csv filenames and returns JSON object //console.log(data);'' Stores = new Mongo.Collection('stores'); - data = data_1; + // data = data_1; var CSV_valid_buffer = []; var CSV_invalid_buffer = []; var filename = new Date().getTime().toString(); var csv_filepath = '/Users/satheeshnagaraj/Documents/Workspace/Meteor/ydapp/CSV_Files/'; - - - for (let i = 0; i < data.length; i++) - { + + + for (let i = 0; i < data.length; i++) + { //let item= {Errors:""}; let item = data[i]; @@ -147,15 +145,15 @@ export const studentUploadCsv = new ValidatedMethod({ var is_not_null = 1; var errors = []; for (var key in item) - { + { var value = item[key]; var n = key.indexOf("*"); if(n!=-1) { - if(!(validation.notNull(value))) + if(!(validation.notNull(value))) { errors.push(key+"is Empty"); } - is_not_null = is_not_null && validation.notNull(value); + is_not_null = is_not_null && validation.notNull(value); } } //console.log(validation.mobileNumber(item["Parent Mobile*"])); @@ -167,36 +165,36 @@ export const studentUploadCsv = new ValidatedMethod({ if (!(validation.validateEmail(item["Parent Email*"]))) { - errors.push('Parent Email is invalid'); + errors.push('Parent Email is invalid'); } if (!(validation.mobileNumber(item["Parent Mobile*"]))) { - errors.push('Parent Mobile is invalid'); + errors.push('Parent Mobile is invalid'); } var is_valid = formate_validation && is_not_null ; - + // console.log(formate_validation); if (is_valid) - { + { CSV_valid_buffer.push(item); console.log("----------------------------------------1"); Meteor.call('student.addCSV',item); console.log("----------------------------------------2"); - + // exists = Stores.findOne({ - // "Student 'Admission' ID*": item["Student Admission ID*"] + // "Student 'Admission' ID*": item["Student Admission ID*"] // }); - // if (!exists) + // if (!exists) // { // Stores.insert(item); // } - // else + // else // { // console.warn('Rejected. This item already exists.'); // } - } - else + } + else { var str = errors.toString(); item.Errors = str; diff --git a/imports/server/collections.js b/imports/server/collections.js index e654669..5b3d9a6 100644 --- a/imports/server/collections.js +++ b/imports/server/collections.js @@ -5,3 +5,4 @@ import '/imports/collections/users/publications'; import '/imports/collections/students/methods'; import '/imports/collections/students/publications'; +import '/imports/collections/students/serverCsvUpload'; diff --git a/package.json b/package.json index fb409d8..41b79a8 100644 --- a/package.json +++ b/package.json @@ -66,11 +66,13 @@ "babyparse": "^0.4.6", "bcrypt": "^0.8.7", "bootstrap": "^4.0.0-alpha.6", + "csv2json-convertor": "^1.2.0", "csvtojson": "^1.1.4", "fs": "0.0.1-security", "jquery": "^2.2.4", "jquery-ui": "^1.12.1", "jquery-validation": "^1.15.1", + "json2csv": "^3.7.3", "lodash": "^4.17.4", "material-fabmenu": "0.0.1", "material-ui": "^0.17.1", -- 2.0.0