diff --git a/backend/web/server/plugins/sosynpl/functions.js b/backend/web/server/plugins/sosynpl/functions.js index e122fb24da..36f8cc63bc 100644 --- a/backend/web/server/plugins/sosynpl/functions.js +++ b/backend/web/server/plugins/sosynpl/functions.js @@ -484,6 +484,34 @@ CUSTOMERFREELANCEMODELS.forEach(model => { instance: 'String', }, }) + declareVirtualField({ + model, field: 'customer_current_missions_count', instance: 'Array', multiple: true, + caster: { + instance: 'ObjectID', + options: {ref:'mission'} + }, + }) + declareVirtualField({ + model, field: 'freelance_current_missions_count', instance: 'Array', multiple: true, + caster: { + instance: 'ObjectID', + options: {ref:'mission'} + }, + }) + declareVirtualField({ + model, field: 'customer_coming_missions_count', instance: 'Array', multiple: true, + caster: { + instance: 'ObjectID', + options: {ref:'mission'} + }, + }) + declareVirtualField({ + model, field: 'freelance_coming_missions_count', instance: 'Array', multiple: true, + caster: { + instance: 'ObjectID', + options: {ref:'mission'} + }, + }) }) //Evaluation diff --git a/backend/web/server/plugins/sosynpl/schemas/CustomerFreelanceSchema.js b/backend/web/server/plugins/sosynpl/schemas/CustomerFreelanceSchema.js index 8859601699..dd637ca788 100644 --- a/backend/web/server/plugins/sosynpl/schemas/CustomerFreelanceSchema.js +++ b/backend/web/server/plugins/sosynpl/schemas/CustomerFreelanceSchema.js @@ -541,7 +541,47 @@ CustomerFreelanceSchema.virtual('freelance_reports', DUMMY_REF).get(function() { : [] }) +CustomerFreelanceSchema.virtual('freelance_current_missions_count', { + ref: 'mission', + localField: '_id', + foreignField: 'freelance', + match: { + start_date: {$lt: new Date()}, + end_date: {$gt: new Date()}, + }, + count: true, +}) + +CustomerFreelanceSchema.virtual('customer_current_missions_count', { + ref: 'mission', + localField: '_id', + foreignField: 'customer', + match: { + start_date: {$lt: new Date()}, + end_date: {$gt: new Date()}, + }, + count: true, +}) +CustomerFreelanceSchema.virtual('freelance_coming_missions_count', { + ref: 'mission', + localField: '_id', + foreignField: 'freelance', + match: { + start_date: {$gt: new Date()}, + }, + count: true, +}) + +CustomerFreelanceSchema.virtual('customer_coming_missions_count', { + ref: 'mission', + localField: '_id', + foreignField: 'customer', + match: { + start_date: {$gt: new Date()}, + }, + count: true, +}) /* eslint-enable prefer-arrow-callback */ diff --git a/backend/web/tests/sosynpl/customerFreelance.test.js b/backend/web/tests/sosynpl/customerFreelance.test.js new file mode 100644 index 0000000000..f2368e5c4d --- /dev/null +++ b/backend/web/tests/sosynpl/customerFreelance.test.js @@ -0,0 +1,40 @@ +const mongoose = require('mongoose') +const { MONGOOSE_OPTIONS, loadFromDb } = require('../../server/utils/database') +require('../../../web/server/plugins/sosynpl/functions') +const User = require('../../server/models/User') +const { ROLE_CUSTOMER, ROLE_FREELANCE } = require('../../server/plugins/sosynpl/consts') +const moment = require('moment') +require('../../server/plugins/sosynpl/functions') +require('../../server/models/Sector') +require('../../server/models/Job') +require('../../server/models/Training') +require('../../server/models/Application') +require('../../server/models/JobFile') +require('../../server/models/Report') +require('../../server/models/Mission') +require('../../server/models/Quotation') + +describe('Customer', () => { + + beforeAll(async () => { + await mongoose.connect(`mongodb://localhost/sosynpl`, MONGOOSE_OPTIONS) + }) + + afterAll(async () => { + await mongoose.connection.close() + }) + + it('must return customer_applications', async () => { + const users = await loadFromDb({model:'customerFreelance', fields:['customer_current_missions_count', + 'freelance_current_missions_count', + 'customer_coming_missions_count', + 'freelance_coming_missions_count', + 'fullname']}) + users.map(u=>console.table({user:u.fullname, + customer_current_missions: u.customer_current_missions_count, + freelance_current_missions: u.freelance_current_missions_count, + customer_coming_missions: u.customer_coming_missions_count, + freelance_coming_missions: u.freelance_coming_missions_count, + })) + }) +}) \ No newline at end of file