serverCsvUpload.js 7.64 KB
// import { } from '/imports/collections/orgs/methods';
import _                                  from 'lodash';
import { Meteor }                         from 'meteor/meteor';
import Papa                               from 'meteor/harrison:papa-parse'
import csv                                from 'csv2json-convertor'
import { ValidatedMethod }                from 'meteor/mdg:validated-method';
import { SimpleSchema }                   from 'meteor/aldeed:simple-schema';
import { DDPRateLimiter }                 from 'meteor/ddp-rate-limiter';
import { Bert }                           from 'meteor/themeteorchef:bert';
import { Users }                          from '/imports/collections/users/index';
import { Orgs }                           from '/imports/collections/orgs/index';
import { Students }                       from '/imports/collections/students/index'
import { Parents }                        from '/imports/collections/parents/index';
import csv1                               from 'csv2json-convertor'
import json2csv                           from 'json2csv'
import fs                                 from 'fs'
import Validation                         from '/imports/validation/validationMethods';
import Constants                          from '/imports/constants/constants'

export const studenCsvtMethod = new ValidatedMethod({
  name: 'student.csvMethod',

  validate: new SimpleSchema({
    itemId: { type: String },
  }).validator(),

  run({itemId}) {
    return {};
  },

});

export const save_csv_data = new ValidatedMethod({
  name: 'save_csv_data',

  validate: null,

  run({item,filename,csv_fiels}) {
    var csv = json2csv({
      data: item,
      fields: csv_fiels
    });
    fs.writeFile(filename, csv,function(err) {
      if (err) throw err;
    });
  },
});

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["First Name*"],
      lastName:   data['Last Name*'],
      orgId:      orgId,
      role:       'STUDENT'
    });
    newParentUserId = Users.insert({
      //emails:     [{address:data.parentEmail, verified: false}],
      //username:   data['Parent Name*'],    
      firstName:  data['Parent Name*'],
      orgId:      orgId,
      role:       'PARENT'
    });
    if(newParentUserId){
      newParentId = Parents.insert({
        userId: newParentUserId,
        orgId: orgId,
      });
      console.log("newParentUserId");
      console.log(newParentUserId);
    }
    console.log("newUserId");
    console.log(newStudentId);
    if(newStudentId){
      Students.insert({
        userId: newStudentId,
        orgId: orgId,
        admissionId:  data['Student Admission ID*'],
        address:      data['Student Admission ID*'],
        gender:       data['Gender(male/female)*'],
        dob:          data['Birthday(YYYY-MM-DD)*'],
        rollNo:       data['Student Roll*'],
        class:        data['Student Class Name*'],
        section:      data['Student Section Name*'],
        bloodGroup:   data['Blood Group*'],
        community:    data['Community'],
        parent:       [{id: newParentUserId, relatinship: data['Parent Relation*']}]
      });
    }
    return {newStudentId};
  },

});

export const studentUploadCsv = new ValidatedMethod({
  name: 'student.uploadCsv',

  validate: null,

  run({data}) {
   let validation = new Validation();
   let constants = new Constants();
   //console.log("++++++++++++++++++++++++"+constants.csv_students_data());
   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
   //console.log(data);''
 //  Stores  = new Mongo.Collection('stores');
  //  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/Youngdesk/ydapp/CSV_Files/';


            for (let i = 0; i < data.length; i++)
                {

                  //let item= {Errors:""};
                  let item = data[i];
                  delete item['Errors'];
                  var formate_validation = 1;
                  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)))
                                       {
                                         errors.push(key+"is Empty");
                                       }
                                       is_not_null = is_not_null && validation.notNull(value);
                                    }
                      }
                  //console.log(validation.mobileNumber(item["Parent Mobile*"]));




                  var formate_validation = validation.validateEmail(item["Parent Email*"]) && validation.mobileNumber(item["Parent Mobile*"]) ; //&& validation.validateEmail(item["Parent Mobile"]) );

                  if (!(validation.validateEmail(item["Parent Email*"])))
                  {
                      errors.push('Parent Email is invalid');
                  }
                  if (!(validation.mobileNumber(item["Parent Mobile*"])))
                  {
                        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*"]
                          //                          });
                         //   if (!exists)
                          //     {
                         //        Stores.insert(item);
                          //     }
                          //  else
                           //    {
                          //       console.warn('Rejected. This item already exists.');
                           //    }
                        }
                    else
                       {
                       var str = errors.toString();
                       item.Errors = str;
                       CSV_invalid_buffer.push(item);
                       //console.log(str);
                       // console.log(CSV_invalid_buffer);
                       }
                }
            console.log(csv_filepath+filename+"_CSV_invalid_data"+".csv");

            Meteor.call('save_csv_data',{ item : CSV_invalid_buffer, filename: csv_filepath+filename+"_CSV_invalid_data"+".csv",csv_fiels :constants.csv_students_data()});
            Meteor.call('save_csv_data',{ item : CSV_valid_buffer,filename: csv_filepath+filename+"_CSV_valid_data"+".csv",csv_fiels :constants.csv_students_data()});
    return {};
  },

});