'use strict'; /** * Module dependencies. */ var mongoose = require('mongoose'), Schema = mongoose.Schema, pdfFiller = require('pdffiller'), freegeoip = require('node-freegeoip'), _ = require('lodash'), config = require('../../config/config'), path = require('path'), fs = require('fs-extra'), mUtilities = require('mongoose-utilities'), soap = require('soap'), async = require('async'), FieldSchema = require('./form_field.server.model.js'), OscarSecurity = require('../../scripts/oscarhost/OscarSecurity'); var newDemoTemplate = { address: '880-9650 Velit. St.', city: '', dateOfBirth: '10', displayName: 'LITTLE, URIAH', email: '', firstName: 'Uriah F.', hin: '', lastName: 'Little', lastUpdateDate: Date.now(), monthOfBirth: '05', officialLanguage: 'English', phone: '250-', phone2: '', postal: 'S4M 7T8', province: 'BC', sex: 'F', sexDesc: 'Female', sin: '', spokenLanguage: 'English', title: 'MS.', yearOfBirth: '2015' }; /** * Form Submission Schema */ var FormSubmissionSchema = new Schema({ title: { type: String }, admin: { type: Schema.Types.ObjectId, ref: 'User', required: true }, form_fields: { type: [Schema.Types.Mixed] }, form: { type: Schema.Types.ObjectId, ref: 'Form', required: true }, ipAddr: { type: String }, geoLocation: { Country: { type: String }, Region: { type: String }, City: { type: String } }, device: { type: { type: String }, name: { type: String } }, pdfFilePath: { type: Schema.Types.Mixed }, pdf: { type: Schema.Types.Mixed }, fdfData: { type: Schema.Types.Mixed }, timeElapsed: { type: Number, }, percentageComplete: { type: Number }, //TODO: DAVID: Need to not have this hardcoded oscarDemoNum: { type: Number }, hasPlugins: { oscarhost: { type: Boolean, default: false } } }); FormSubmissionSchema.plugin(mUtilities.timestamp, { createdPath: 'created', modifiedPath: 'lastModified', useVirtual: false }); //Oscarhost API hook FormSubmissionSchema.pre('save', function (next) { var self = this; if(this.hasPlugins.oscarhost){ mongoose.model('Form').findById(self.form, function(err, _form){ var form_ids = _.map(_.pluck(_form.form_fields, '_id'), function(id){ return ''+id;}), submission_ids = _.pluck(self.form_fields, '_id'); // console.log('Form form_field ids\n--------'); // console.log(form_ids); // console.log('FormSubmission [form_field ids]\n--------'); // console.log(submission_ids); if(err) return next(err); // console.log(_form); // console.log('should push to api'); // console.log( (!this.oscarDemoNum && !!_form.plugins.oscarhost.baseUrl && !!_form.plugins.oscarhost.settings.fieldMap) ); if(!this.oscarDemoNum && _form.plugins.oscarhost.baseUrl && _form.plugins.oscarhost.settings.fieldMap){ console.log('OSCARHOST API HOOK'); var url_login = _form.plugins.oscarhost.baseUrl+'/LoginService?wsdl', url_demo = _form.plugins.oscarhost.baseUrl+'/DemographicService?wsdl'; var args_login = {arg0: config.oscarhost.auth.user, arg1: config.oscarhost.auth.pass}; var options = { ignoredNamespaces: { namespaces: ['targetNamespace', 'typedNamespace'], override: true } }; // console.log(self.form_fields); //Generate demographics from hashmap var generateDemo = function(formFields, conversionMap, demographicsTemplate){ console.log('generating Demo fields'); console.log(conversionMap); var _generatedDemo = {}, currField, propertyName; for(var y=0; y