serverCsvUpload.js 5.79 KB
// import { } from '/imports/collections/staff/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 { Staffs }                         from '/imports/collections/staff/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 staffCsvtMethod = new ValidatedMethod({
  name: 'staff.csvMethod',

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

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

});

export const staffSaveCsvData = new ValidatedMethod({
  name: 'staff.saveCsvData',

  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 addStaffCSV= new ValidatedMethod({
  name: 'staff.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;
    newStaffId = Users.insert({
     // emails:     [{address:data.email, verified: false}],
      //username:   data["First Name*"],
      firstName:  data["First Name*"],
      lastName:   data['Last Name*'],
      orgId:      orgId,
      role:       'STAFF'
    });
    console.log("newStaffId");
    console.log(newStaffId);
    if(newStaffId){
      Staffs.insert({
        userId: newStaffId,
        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 staffUploadCsv = new ValidatedMethod({
  name: 'staff.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 CSV_valid_buffer   = [];
     var CSV_invalid_buffer = [];
     var filename           = new Date().getTime().toString();
     var csv_filepath = './CSV_Files/';
     for (let i = 0; i < data.length; i++)
        {
            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);
                }
            }
            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 ;
                    if (is_valid)
                       {
                          CSV_valid_buffer.push(item);
                          console.log("----------------------------------------1");
                          Meteor.call('student.addCSV',item);
                          console.log("----------------------------------------2");

                        }
                    else
                       {
                         var str = errors.toString();
                         item.Errors = str;
                         CSV_invalid_buffer.push(item);
                       }
                }
    console.log(csv_filepath+filename+"_CSV_invalid_data"+".csv");
    Meteor.call('staff.saveCsvData',{ item : CSV_invalid_buffer, filename: csv_filepath+filename+"_CSV_invalid_data"+".csv",csv_fiels :constants.csv_students_data()});
    Meteor.call('staff.saveCsvData',{ item : CSV_valid_buffer,filename: csv_filepath+filename+"_CSV_valid_data"+".csv",csv_fiels :constants.csv_students_data()});
    return {};
  },

});