diff --git a/app/models/form.server.model.js b/app/models/form.server.model.js
index 888f8714..20396425 100644
--- a/app/models/form.server.model.js
+++ b/app/models/form.server.model.js
@@ -67,9 +67,10 @@ var FormSchema = new Schema({
type: String,
default: '',
},
- form_fields: {
- type: [FieldSchema],
- },
+ form_fields: [Field],
+ //form_fields: {
+ // type: [FieldSchema],
+ //},
submissions: [{
type: Schema.Types.ObjectId,
diff --git a/app/models/form_field.server.model.js b/app/models/form_field.server.model.js
index b5f2ae34..ce4dc125 100644
--- a/app/models/form_field.server.model.js
+++ b/app/models/form_field.server.model.js
@@ -24,6 +24,7 @@ var FieldOptionSchema = new Schema({
},
});
+
/**
* FormField Schema
*/
@@ -133,7 +134,6 @@ function validateFormFieldType(value) {
return false;
};
-// var cloneFieldSchema = _.cloneDeep(FormFieldSchema);
mongoose.model('Field', FormFieldSchema);
module.exports = FormFieldSchema;
diff --git a/app/models/form_submission.server.model.js b/app/models/form_submission.server.model.js
index 23e3597f..e7071301 100644
--- a/app/models/form_submission.server.model.js
+++ b/app/models/form_submission.server.model.js
@@ -18,31 +18,31 @@ var mongoose = require('mongoose'),
OscarSecurity = require('../../scripts/oscarhost/OscarSecurity');
var newDemoTemplate = {
- 'activeCount': 0,
- 'address': '',
- 'alias': '',
- 'anonymous': '',
- 'chartNo': '',
- 'children':'',
- 'citizenship':'',
- 'city': '',
- 'dateJoined': null,
- 'dateOfBirth': '',
- 'email': '',
- 'firstName': '',
- 'hin': 9146509343,
- 'lastName': '',
- 'lastUpdateDate': null,
- 'monthOfBirth': '',
- 'officialLanguage': '',
- 'phone': '',
- 'phone2': '',
- 'providerNo': 0,
- 'province': '',
- 'sex': '',
- 'spokenLanguage': '',
- 'postal': '',
- 'yearOfBirth': ''
+ "activeCount": 0,
+ "address": "",
+ "alias": "",
+ "anonymous": "",
+ "chartNo": "",
+ "children":"",
+ "citizenship":"",
+ "city": "",
+ "dateJoined": null,
+ "dateOfBirth": "",
+ "email": "",
+ "firstName": "",
+ "hin": 9146509343,
+ "lastName": "",
+ "lastUpdateDate": null,
+ "monthOfBirth": "",
+ "officialLanguage": "",
+ "phone": "",
+ "phone2": "",
+ "providerNo": 0,
+ "province": "",
+ "sex": "",
+ "spokenLanguage": "",
+ "postal": "",
+ "yearOfBirth": ""
};
/**
@@ -58,9 +58,12 @@ var FormSubmissionSchema = new Schema({
ref: 'User',
required: true
},
+
form_fields: {
type: [Schema.Types.Mixed],
},
+ // form_fields: [Field],
+
form: {
type: Schema.Types.ObjectId,
ref: 'Form',
@@ -193,9 +196,7 @@ FormSubmissionSchema.pre('save', function (next) {
}else{
next();
}
-
});
-
});
//Check for IP Address of submitting person
diff --git a/app/tests/form.server.model.test.js b/app/tests/form.server.model.test.js
index df3e10ad..0ca2a6e6 100644
--- a/app/tests/form.server.model.test.js
+++ b/app/tests/form.server.model.test.js
@@ -12,6 +12,45 @@ var should = require('should'),
config = require('../../config/config'),
FormSubmission = mongoose.model('FormSubmission');
+
+
+var exampleDemo = {
+ activeCount: 1,
+ unparsedDOB: '',
+ address: '880-9650 Velit. St.',
+ chartNo: '',
+ city: '',
+ dateJoined: Date.now(),
+ dateOfBirth: '10',
+ displayName: 'LITTLE, URIAH',
+ email: '',
+ familyDoctor: '',
+ firstName: 'Uriah F.',
+ hcType: 'BC',
+ hin: '',
+ hsAlertCount: 0,
+ lastName: 'Little',
+ lastUpdateDate: Date.now(),
+ lastUpdateUser: '',
+ links: '',
+ monthOfBirth: '05',
+ officialLanguage: 'English',
+ patientStatus: 'AC',
+ patientStatusDate: Date.now(),
+ phone: '250-',
+ phone2: '',
+ postal: "S4M 7T8",
+ providerNo: '4',
+ province: 'BC',
+ rosterStatus: '',
+ sex: 'M',
+ sexDesc: 'Female',
+ sin: '',
+ spokenLanguage: 'English',
+ title: 'MS.',
+ yearOfBirth: '2015'
+}
+
/**
* Globals
*/
@@ -23,7 +62,6 @@ var user, myForm, mySubmission;
describe('Form Model Unit Tests:', function() {
beforeEach(function(done) {
-
user = new User({
firstName: 'Full',
lastName: 'Name',
@@ -34,13 +72,7 @@ describe('Form Model Unit Tests:', function() {
provider: 'local'
});
- user.save(function(err) {
-
- if(err){
- console.log(err.errors);
- done(err);
- }
-
+ user.save(function() {
myForm = new Form({
title: 'Form Title',
admin: user,
@@ -59,26 +91,18 @@ describe('Form Model Unit Tests:', function() {
describe('Method Save', function() {
it('should be able to save without problems', function(done) {
- myForm.save(function(err) {
+ return myForm.save(function(err) {
should.not.exist(err);
done();
});
});
it('should be able to show an error when try to save without title', function(done) {
- var _form = new Form({
- title: 'Form Title',
- admin: user,
- language: 'english',
- form_fields: [
- {'fieldType':'textfield', title:'First Name', 'fieldValue': ''},
- {'fieldType':'checkbox', title:'nascar', 'fieldValue': ''},
- {'fieldType':'checkbox', title:'hockey', 'fieldValue': ''}
- ]
- });
+
+ var _form = myForm;
_form.title = '';
- _form.save(function(err) {
+ return _form.save(function(err) {
should.exist(err);
should.equal(err.errors.title.message, 'Form Title cannot be blank');
done();
@@ -101,7 +125,141 @@ describe('Form Model Unit Tests:', function() {
});
});
});
-
+
+
+ describe('Test FormField and Submission Logic', function() {
+ var new_form_fields_add1, new_form_fields_del, submission_fields, old_fields, form;
+
+ before(function(){
+ new_form_fields_add1 = _.clone(myForm.toObject().form_fields);
+ new_form_fields_add1.push(
+ {'fieldType':'textfield', 'title':'Last Name', 'fieldValue': ''}
+ );
+
+ new_form_fields_del = _.clone(myForm.toObject().form_fields);
+ new_form_fields_del.splice(0, 1);
+
+ submission_fields = _.clone(myForm.toObject().form_fields);
+ submission_fields[0].fieldValue = 'David';
+ submission_fields[1].fieldValue = true;
+ submission_fields[2].fieldValue = true;
+
+ mySubmission = new FormSubmission({
+ form_fields: submission_fields,
+ admin: user,
+ form: myForm,
+ timeElapsed: 17.55
+ });
+
+ });
+
+ beforeEach(function(done){
+ myForm.save(function(){
+ mySubmission.save(function(){
+ done();
+ });
+ });
+ });
+
+ afterEach(function(done){
+ mySubmission.remove(function(){
+ done();
+ });
+ });
+
+ // it('should preserve deleted form_fields that have submissions without any problems', function(done) {
+
+ // old_fields = myForm.toObject().form_fields;
+ // // console.log(old_fields);
+
+ // // var expected_fields = old_fields.slice(1,3).concat(old_fields.slice(0,1));
+
+ // myForm.form_fields = new_form_fields_del;
+
+ // myForm.save(function(err, _form) {
+
+ // should.not.exist(err);
+ // should.exist(_form);
+
+ // // var actual_fields = _.map(_form.toObject().form_fields, function(o){ _.omit(o, '_id')});
+ // // old_fields = _.map(old_fields, function(o){ _.omit(o, '_id')});
+
+ // // console.log(old_fields);
+ // should.deepEqual(JSON.stringify(_form.toObject().form_fields), JSON.stringify(old_fields), 'old form_fields not equal to newly saved form_fields');
+ // done();
+ // });
+ // });
+
+ // it('should delete \'preserved\' form_fields whose submissions have been removed without any problems', function(done) {
+
+ // myForm.form_fields = new_form_fields_del;
+ // myForm.save(function(err, form
+ // should.not.exist(err);
+ // (form.form_fields).should.be.eql(old_fields, 'old form_fields not equal to newly saved form_fields');
+
+ // //Remove submission
+ // mySubmission.remove(function(err){
+ // myForm.submissions.should.have.length(0);
+ // myForm.form_fields.should.not.containDeep(old_fields[0]);
+ // });
+ // });
+ // });
+ });
+
+ describe('Submission of Form should add Patient to OscarHost', function() {
+ var mySubmission;
+ before(function(done){
+ myForm.form_fields = [
+ new Field({'fieldType':'textfield', 'title':'What\'s your first name', 'fieldValue': ''}),
+ new Field({'fieldType':'textfield', 'title':'And your last name', 'fieldValue': ''}),
+ new Field({'fieldType':'radio', 'title':'And your sex', 'fieldOptions': [{ 'option_id': 0, 'option_title': 'Male', 'option_value': 'M' }, { 'option_id': 1, 'option_title': 'Female', 'option_value': 'F' }], 'fieldValue': ''}),
+ new Field({'fieldType':'date', 'title':'When were you born?', 'fieldValue': ''}),
+ new Field({'fieldType':'number', 'title':'What\'s your phone #?', 'fieldValue': ''}),
+ ];
+ var myFieldMap = {};
+ myFieldMap[myForm.form_fields[0]._id] = 'firstName';
+ myFieldMap[myForm.form_fields[1]._id] = 'lastName';
+ myFieldMap[myForm.form_fields[2]._id] = 'sex';
+ myFieldMap[myForm.form_fields[3]._id] = 'unparsedDOB';
+ myFieldMap[myForm.form_fields[4]._id] = 'phone';
+
+ myForm.plugins.oscarhost = {
+ baseUrl: config.oscarhost.baseUrl,
+ settings: {
+ lookupField: '',
+ updateType: 'force_add',
+ fieldMap: myFieldMap,
+ },
+ auth: config.oscarhost.auth,
+ };
+
+ myForm.save(function(err, form){
+ if(err) done(err);
+
+ var submission_fields = _.clone(myForm.toObject().form_fields);
+ submission_fields[0].fieldValue = 'David';
+ submission_fields[1].fieldValue = 'Baldwynn'+Date.now();
+ submission_fields[2].fieldValue = 'M';
+ submission_fields[3].fieldValue = Date.now();
+ submission_fields[4].fieldValue = 6043158008;
+
+ mySubmission = new FormSubmission({
+ form_fields: submission_fields,
+ admin: form.admin,
+ form: form,
+ timeElapsed: 17.55
+ });
+ done();
+ });
+ });
+ it('should be able to submit a valid form without problems', function(done) {
+ mySubmission.save(function(err, submission) {
+ should.not.exist(err);
+ should.exist(submission.oscarDemoNum);
+ done();
+ });
+ });
+ });
afterEach(function(done) {
Form.remove().exec(function() {
User.remove().exec(done);
diff --git a/app/tests/user.server.routes.test.js b/app/tests/user.server.routes.test.js
index f04d8d82..37574095 100644
--- a/app/tests/user.server.routes.test.js
+++ b/app/tests/user.server.routes.test.js
@@ -102,6 +102,7 @@
// // // });
+<<<<<<< HEAD
// // mailbox.getEmails(function(err, _emails) {
// // if(err) done(err);
diff --git a/docs/OscarHost/Add_Demographic_WSDL.xml b/docs/OscarHost/Add_Demographic_WSDL.xml
new file mode 100644
index 00000000..b9d485e3
--- /dev/null
+++ b/docs/OscarHost/Add_Demographic_WSDL.xml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+ 2286 Ottawa
+
+
+
+
+
+
+
+
+
+
+
+ West Vancouver
+
+
+
+ 06
+
+
+
+ TestUserAddDemographic
+
+
+
+ polydaic@gmail.com
+
+
+
+
+
+ TestUser
+
+
+
+
+
+
+
+
+
+
+ AddDemographic
+
+ 2015-10-01T18:39:46.817Z
+
+
+
+
+
+ 06
+
+
+
+
+
+
+
+
+
+
+
+ 6048786969
+
+
+
+ V8V5S8
+
+
+
+
+
+ BC
+
+
+
+
+
+
+
+
+
+ M
+
+
+
+
+
+
+
+
+
+ Mr.
+
+
+
+ 1994
+
+
+
+
diff --git a/scripts/oscarhost/test_addDemographic.js b/scripts/oscarhost/test_addDemographic.js
new file mode 100644
index 00000000..cada1963
--- /dev/null
+++ b/scripts/oscarhost/test_addDemographic.js
@@ -0,0 +1,114 @@
+var soap = require('soap'),
+ async = require('async'),
+ demo = require('./test_headless'),
+ OscarSecurity = require('./OscarSecurity');
+
+var url_demo = 'https://secure2.oscarhost.ca/kensington/ws/DemographicService?wsdl',
+ url_login = 'https://secure2.oscarhost.ca/kensington/ws/LoginService?wsdl',
+ args_demo = {arg0: 0},
+ args_login = {arg0: 'username', arg1: 'password'},
+ my_hin = 1234123123;
+
+var fakeDemo = {
+ "activeCount": 1,
+ "address": "880-9650 Velit. St.",
+ "alias": "",
+ "anonymous": "",
+ "chartNo": "",
+ "children":"",
+ "citizenship":"Canadian",
+ "city": "Lloydminster",
+ "dateJoined": new Date(),
+ "dateOfBirth": "10",
+ "demographicNo": 90348,
+ "email": "Sed.nunc@dis.co.uk",
+ "firstName": "Uriah F.",
+ "hin": 9146509343,
+ "lastName": "Little",
+ "lastUpdateDate": new Date(),
+ "monthOfBirth": "05",
+ "officialLanguage": "English",
+ "phone": "(306) 872-3210",
+ "phone2": "(306) 556-8264",
+ "providerNo": 4,
+ "province": "SK",
+ "sex": "F",
+ "spokenLanguage": "English",
+ "postal": "S4M 7T8",
+ "yearOfBirth": "2015"
+ };
+
+var exampleDemo = {
+ activeCount: 1,
+ address: '880-9650 Velit. St.',
+ chartNo: '',
+ city: '',
+ dateJoined: Date.now(),
+ dateOfBirth: '10',
+ displayName: 'LITTLE, URIAH',
+ email: '',
+ familyDoctor: '',
+ firstName: 'Uriah F.',
+ hcType: 'BC',
+ hin: '',
+ hsAlertCount: 0,
+ lastName: 'Little',
+ lastUpdateDate: Date.now(),
+ lastUpdateUser: '',
+ links: '',
+ monthOfBirth: '05',
+ officialLanguage: 'English',
+ patientStatus: 'AC',
+ patientStatusDate: Date.now(),
+ phone: '250-',
+ phone2: '',
+ postal: "S4M 7T8",
+ providerNo: '4',
+ province: 'BC',
+ rosterStatus: '',
+ sex: 'M',
+ sexDesc: 'Female',
+ sin: '',
+ spokenLanguage: 'English',
+ title: 'MS.',
+ yearOfBirth: '2015' }
+
+var options = {
+ ignoredNamespaces: {
+ namespaces: ['targetNamespace', 'typedNamespace'],
+ override: true
+ }
+}
+
+async.waterfall([
+ function (callback) {
+ //Authenticate with API
+ soap.createClient(url_login, options, function(err, client) {
+ client.login(args_login, function (err, result) {
+ if(err) callback(err);
+ callback(null, result.return);
+ });
+ });
+ },
+
+ function (security_obj, callback) {
+ //Add demographic
+ soap.createClient(url_demo, options, function(err, client) {
+ client.setSecurity(new OscarSecurity(security_obj.securityId, security_obj.securityTokenKey) );
+
+ client.addDemographic({ arg0: exampleDemo }, function (err, result) {
+ if(err) callback(err);
+ console.log(client.describe());
+ callback(null, result);
+ });
+ });
+ },
+
+], function(err, result) {
+ if(err) throw err;
+ console.log(result);
+});
+
+
+
+