@dhyasama/totem-models 5.4.0 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/LimitedPartner.js +83 -28
- package/lib/Organization.js +3 -0
- package/lib/Person.js +39 -1
- package/package.json +1 -1
- package/.npmignore +0 -14
- package/package-lock.json +0 -1854
package/lib/LimitedPartner.js
CHANGED
|
@@ -165,6 +165,33 @@ module.exports = function(mongoose, config) {
|
|
|
165
165
|
|
|
166
166
|
});
|
|
167
167
|
|
|
168
|
+
var getSources = function getSources(people) {
|
|
169
|
+
|
|
170
|
+
var result = _.compact(_.pluck(people, 'sources'));
|
|
171
|
+
if (result.length == 0) return [];
|
|
172
|
+
|
|
173
|
+
result = _.flatten(result);
|
|
174
|
+
result = _.compact(result);
|
|
175
|
+
|
|
176
|
+
if (result.length == 0) return [];
|
|
177
|
+
if (mongoose.Types.ObjectId.isValid(result[0].person)) return []; // not populated
|
|
178
|
+
|
|
179
|
+
result = _.uniq(result, function(item) {
|
|
180
|
+
if (!item || !item.person) return '';
|
|
181
|
+
else return item.person._id ? item.person._id.toString() : '';
|
|
182
|
+
});
|
|
183
|
+
result = _.compact(result);
|
|
184
|
+
result = _.reject(result, function(item) { return !item.person; });
|
|
185
|
+
result = _.sortBy(result, 'interactions.count');
|
|
186
|
+
result.reverse();
|
|
187
|
+
result = _.sortBy(result, 'name.full');
|
|
188
|
+
|
|
189
|
+
console.log(result);
|
|
190
|
+
|
|
191
|
+
return result;
|
|
192
|
+
|
|
193
|
+
};
|
|
194
|
+
|
|
168
195
|
/////////////////////
|
|
169
196
|
|
|
170
197
|
LimitedPartner.virtual('totalCommitted').get(function () {
|
|
@@ -208,34 +235,6 @@ module.exports = function(mongoose, config) {
|
|
|
208
235
|
|
|
209
236
|
});
|
|
210
237
|
|
|
211
|
-
LimitedPartner.virtual('sources').get(function () {
|
|
212
|
-
|
|
213
|
-
// Aggregate sources from all people
|
|
214
|
-
// Sort by interactions descending, full name ascending
|
|
215
|
-
|
|
216
|
-
var self = this;
|
|
217
|
-
var result = self.people || [];
|
|
218
|
-
|
|
219
|
-
if (result.length == 0) return [];
|
|
220
|
-
if (mongoose.Types.ObjectId.isValid(result[0])) return []; // not populated
|
|
221
|
-
|
|
222
|
-
result = _.pluck(result, 'sources');
|
|
223
|
-
result = _.flatten(result);
|
|
224
|
-
result = _.compact(result);
|
|
225
|
-
result = _.uniq(result, function(item) {
|
|
226
|
-
if (!item.person) return null;
|
|
227
|
-
var personId = utils.isValidObjectId(item.person) ? item.person : item.person._id;
|
|
228
|
-
return personId.toString();
|
|
229
|
-
});
|
|
230
|
-
result = _.compact(result);
|
|
231
|
-
result = _.sortBy(result, 'interactions.count');
|
|
232
|
-
result.reverse();
|
|
233
|
-
result = _.sortBy(result, 'name.full');
|
|
234
|
-
|
|
235
|
-
return result;
|
|
236
|
-
|
|
237
|
-
});
|
|
238
|
-
|
|
239
238
|
/////////////////////
|
|
240
239
|
|
|
241
240
|
/************* BASIC FIELDS **********************/
|
|
@@ -477,6 +476,62 @@ module.exports = function(mongoose, config) {
|
|
|
477
476
|
|
|
478
477
|
};
|
|
479
478
|
|
|
479
|
+
LimitedPartner.statics.getSources = function(lpid, cb) {
|
|
480
|
+
|
|
481
|
+
var self = this;
|
|
482
|
+
|
|
483
|
+
self
|
|
484
|
+
.findById(lpid)
|
|
485
|
+
.populate('people', 'name avatarUrl title doNotDisplay sources')
|
|
486
|
+
.deepPopulate([
|
|
487
|
+
'people.sources.person'
|
|
488
|
+
], {
|
|
489
|
+
populate: {
|
|
490
|
+
'people.sources.person': { select: 'name avatarUrl title doNotDisplay' }
|
|
491
|
+
}
|
|
492
|
+
})
|
|
493
|
+
.exec(function(err, lp) {
|
|
494
|
+
|
|
495
|
+
if (err) return cb(err, null);
|
|
496
|
+
if (!lp) return cb(null, null);
|
|
497
|
+
|
|
498
|
+
Organization.findById(config.CUSTOMER_ID, function(err, customer) {
|
|
499
|
+
|
|
500
|
+
if (err) return cb(err, null);
|
|
501
|
+
if (!customer) return cb(null, null);
|
|
502
|
+
|
|
503
|
+
var current = [];
|
|
504
|
+
var past = [];
|
|
505
|
+
var all = [];
|
|
506
|
+
var lpSources = getSources(lp.people);
|
|
507
|
+
|
|
508
|
+
_.each(customer.people, function(p) {
|
|
509
|
+
|
|
510
|
+
var source = _.find(lpSources, function(ls) {
|
|
511
|
+
if (!ls || !ls.person || !ls.person._id) return false;
|
|
512
|
+
return ls.person._id.toString() == p.person.toString();
|
|
513
|
+
});
|
|
514
|
+
|
|
515
|
+
if (!source) return;
|
|
516
|
+
|
|
517
|
+
if (p.current) current.push(source);
|
|
518
|
+
if (!p.current) past.push(source);
|
|
519
|
+
all.push(source);
|
|
520
|
+
|
|
521
|
+
});
|
|
522
|
+
|
|
523
|
+
return cb(null, {
|
|
524
|
+
all: all,
|
|
525
|
+
current: current,
|
|
526
|
+
past: past
|
|
527
|
+
});
|
|
528
|
+
|
|
529
|
+
});
|
|
530
|
+
|
|
531
|
+
});
|
|
532
|
+
|
|
533
|
+
};
|
|
534
|
+
|
|
480
535
|
LimitedPartner.statics.list = function (role, cb) {
|
|
481
536
|
|
|
482
537
|
// sorted by name ascending
|
package/lib/Organization.js
CHANGED
|
@@ -1541,6 +1541,9 @@ module.exports = function(mongoose, config) {
|
|
|
1541
1541
|
org.entered.by = username;
|
|
1542
1542
|
org.entered.on = new Date();
|
|
1543
1543
|
|
|
1544
|
+
// Clean up missing references
|
|
1545
|
+
org.people = _.reject(org.people, function(item) { return !item.person; });
|
|
1546
|
+
|
|
1544
1547
|
org.save(cb);
|
|
1545
1548
|
|
|
1546
1549
|
};
|
package/lib/Person.js
CHANGED
|
@@ -7,6 +7,7 @@ module.exports = function(mongoose, config) {
|
|
|
7
7
|
var
|
|
8
8
|
|
|
9
9
|
Schema = mongoose.Schema,
|
|
10
|
+
Organization = mongoose.model('Organization'),
|
|
10
11
|
LimitedPartner = mongoose.model('LimitedPartner'),
|
|
11
12
|
Flag = mongoose.model('Flag'),
|
|
12
13
|
Note = mongoose.model('Note'),
|
|
@@ -857,7 +858,44 @@ module.exports = function(mongoose, config) {
|
|
|
857
858
|
this
|
|
858
859
|
.findById(id)
|
|
859
860
|
.populate('sources.person')
|
|
860
|
-
.exec(
|
|
861
|
+
.exec(function(err, person) {
|
|
862
|
+
|
|
863
|
+
if (err) return cb(err, null);
|
|
864
|
+
if (!person) return cb(err, null);
|
|
865
|
+
|
|
866
|
+
Organization.findById(config.CUSTOMER_ID, function(err, customer) {
|
|
867
|
+
|
|
868
|
+
if (err) return cb(err, null);
|
|
869
|
+
if (!customer) return cb(null, null);
|
|
870
|
+
|
|
871
|
+
var current = [];
|
|
872
|
+
var past = [];
|
|
873
|
+
var all = [];
|
|
874
|
+
|
|
875
|
+
_.each(customer.people, function(p) {
|
|
876
|
+
|
|
877
|
+
var source = _.find(person.sources, function(ps) {
|
|
878
|
+
if (!ps || !ps.person || !ps.person._id) return false;
|
|
879
|
+
return ps.person._id.toString() == p.person.toString();
|
|
880
|
+
});
|
|
881
|
+
|
|
882
|
+
if (!source) return;
|
|
883
|
+
|
|
884
|
+
if (p.current) current.push(source);
|
|
885
|
+
if (!p.current) past.push(source);
|
|
886
|
+
all.push(source);
|
|
887
|
+
|
|
888
|
+
});
|
|
889
|
+
|
|
890
|
+
return cb(null, {
|
|
891
|
+
all: all,
|
|
892
|
+
current: current,
|
|
893
|
+
past: past
|
|
894
|
+
});
|
|
895
|
+
|
|
896
|
+
});
|
|
897
|
+
|
|
898
|
+
});
|
|
861
899
|
};
|
|
862
900
|
|
|
863
901
|
Person.statics.listAllPeople = function (cb) {
|
package/package.json
CHANGED