5
5
const Joi = require ( 'joi' )
6
6
. extend ( require ( '@joi/date' ) )
7
7
const _ = require ( 'lodash' )
8
- const dateFNS = require ( 'date-fns ' )
8
+ const moment = require ( 'moment ' )
9
9
const Report = require ( './report' )
10
10
const config = require ( './config' )
11
11
const helper = require ( './helper' )
@@ -18,12 +18,12 @@ const jobSchema = Joi.object({
18
18
title : Joi . string ( ) . required ( ) ,
19
19
startDate : Joi . date ( ) . format ( 'MM/DD/YYYY' ) . required ( ) ,
20
20
endDate : Joi . date ( ) . format ( 'MM/DD/YYYY' ) . required ( ) ,
21
- numPositions : Joi . number ( ) . integer ( ) . min ( 1 ) ,
21
+ numPositions : Joi . number ( ) . integer ( ) . min ( 1 ) . required ( ) ,
22
22
userHandle : Joi . string ( ) ,
23
23
customerRate : Joi . number ( ) ,
24
24
memberRate : Joi . number ( ) ,
25
25
skills : Joi . array ( ) . default ( [ ] ) ,
26
- rateType : Joi . string ( ) . default ( 'weekly' )
26
+ rateType : Joi . string ( ) . default ( 'weekly' ) . valid ( 'hourly' , 'daily' , 'weekly' , 'monthly' , 'annual' )
27
27
} ) . unknown ( true )
28
28
29
29
/**
@@ -67,33 +67,51 @@ async function processJob (job, info = []) {
67
67
data . jobId = result . id
68
68
} catch ( err ) {
69
69
if ( ! ( err . message && err . message . includes ( 'job not found' ) ) ) {
70
+ err . info = info
70
71
throw err
71
72
}
72
- const result = await helper . createJob ( _ . pick ( data , [ 'projectId' , 'externalId' , 'title' , 'numPositions' , 'skills' ] ) )
73
+ const jobData = _ . pick ( data , [ 'projectId' , 'externalId' , 'title' , 'numPositions' , 'skills' ] )
74
+ if ( data . numPositions === 1 ) {
75
+ jobData . status = 'assigned'
76
+ }
77
+ const result = await helper . createJob ( jobData )
73
78
info . push ( { text : `id: ${ result . id } job created` , tag : 'job_created' } )
74
79
data . jobId = result . id
75
80
}
76
- data . userId = ( await helper . getUserByHandle ( data . userHandle ) ) . id
77
- logger . debug ( `userHandle: ${ data . userHandle } userId: ${ data . userId } ` )
81
+ try {
82
+ data . userId = ( await helper . getUserByHandle ( data . userHandle ) ) . id
83
+ logger . debug ( `userHandle: ${ data . userHandle } userId: ${ data . userId } ` )
84
+ } catch ( err ) {
85
+ if ( ! ( err . message && err . message . includes ( 'user not found' ) ) ) {
86
+ err . info = info
87
+ throw err
88
+ }
89
+ info . push ( { text : err . message , tag : 'user_not_found' } )
90
+ return { status : constants . ProcessingStatus . Failed , info }
91
+ }
78
92
// create a resource booking if it does not already exist
79
93
try {
80
94
const result = await helper . getResourceBookingByJobIdAndUserId ( data . jobId , data . userId )
81
95
info . push ( { text : `id: ${ result . id } resource booking already exists` , tag : 'resource_booking_already_exists' } )
82
96
return { status : constants . ProcessingStatus . Successful , info }
83
97
} catch ( err ) {
84
98
if ( ! ( err . message && err . message . includes ( 'resource booking not found' ) ) ) {
99
+ err . info = info
100
+ throw err
101
+ }
102
+ try {
103
+ const resourceBookingData = _ . pick ( data , [ 'projectId' , 'jobId' , 'userId' , 'memberRate' , 'customerRate' , 'rateType' ] )
104
+ resourceBookingData . startDate = moment ( data . startDate ) . format ( 'YYYY-MM-DD' )
105
+ resourceBookingData . endDate = moment ( data . endDate ) . format ( 'YYYY-MM-DD' )
106
+ resourceBookingData . status = moment ( data . endDate ) . isBefore ( moment ( ) ) ? 'closed' : 'placed'
107
+ const result = await helper . createResourceBooking ( resourceBookingData )
108
+ info . push ( { text : `id: ${ result . id } resource booking created` , tag : 'resource_booking_created' } )
109
+ return { status : constants . ProcessingStatus . Successful , info }
110
+ } catch ( err ) {
111
+ err . info = info
85
112
throw err
86
113
}
87
- const result = await helper . createResourceBooking ( _ . pick ( data , [ 'projectId' , 'jobId' , 'userId' , 'startDate' , 'endDate' , 'memberRate' , 'customerRate' , 'rateType' ] ) )
88
- info . push ( { text : `id: ${ result . id } resource booking created` , tag : 'resource_booking_created' } )
89
- data . resourceBookingId = result . id
90
114
}
91
- // update the resourceBooking based on startDate and endDate
92
- const resourceBookingStatus = dateFNS . isBefore ( data . endDate , dateFNS . startOfToday ( ) ) ? 'closed' : 'placed'
93
- logger . debug ( `resourceBookingId: ${ data . resourceBookingId } status: ${ resourceBookingStatus } ` )
94
- await helper . updateResourceBookingStatus ( data . resourceBookingId , resourceBookingStatus )
95
- info . push ( { text : `id: ${ data . resourceBookingId } status: ${ resourceBookingStatus } resource booking updated` , tag : 'resource_booking_status_updated' } )
96
- return { status : constants . ProcessingStatus . Successful , info }
97
115
}
98
116
99
117
/**
@@ -111,10 +129,11 @@ async function main () {
111
129
const result = await processJob ( job )
112
130
report . add ( { lnum : job . _lnum , ...result } )
113
131
} catch ( err ) {
132
+ const info = err . info || [ ]
114
133
if ( err . response ) {
115
- report . add ( { lnum : job . _lnum , status : constants . ProcessingStatus . Failed , info : [ { text : err . response . error . toString ( ) . split ( '\n' ) [ 0 ] , tag : 'request_error' } ] } )
134
+ report . add ( { lnum : job . _lnum , status : constants . ProcessingStatus . Failed , info : [ { text : err . response . error . toString ( ) . split ( '\n' ) [ 0 ] , tag : 'request_error' } , ... info ] } )
116
135
} else {
117
- report . add ( { lnum : job . _lnum , status : constants . ProcessingStatus . Failed , info : [ { text : err . message , tag : 'internal_error' } ] } )
136
+ report . add ( { lnum : job . _lnum , status : constants . ProcessingStatus . Failed , info : [ { text : err . message , tag : 'internal_error' } , ... info ] } )
118
137
}
119
138
}
120
139
report . print ( )
0 commit comments