1
1
const Chat = require ( "../models/chatModel" ) ;
2
2
const Contract = require ( "../models/contractModel" ) ;
3
- const User = require ( "../models/userModel" ) ;
4
3
const catchAsync = require ( "../utils/catchAsync" ) ;
4
+ const AppError = require ( '../utils/appError' )
5
5
6
6
exports . getAllContracts = catchAsync ( async ( req , res ) => {
7
7
const contracts = await Contract . find ( )
@@ -26,19 +26,19 @@ exports.getUserContracts = catchAsync(async (req, res) => {
26
26
. populate ( "team.member" , "name photo" )
27
27
. sort ( "-createdAt" ) ;
28
28
29
- const date = new Date ( ) ;
29
+ const date = new Date ( ) ;
30
30
31
- // we get an array
31
+ // we get an array
32
32
// iterate through every contract
33
33
// if in-progress -> compare due date and current date and update to `delayed` if required
34
34
35
- contracts . forEach ( async contract => {
35
+ contracts . forEach ( async ( contract ) => {
36
36
const contractDueDate = contract . dueDate ;
37
- if ( contract . status === ' in-progress' ) {
37
+ if ( contract . status === " in-progress" ) {
38
38
if ( date >= contractDueDate ) {
39
39
let updatedContract = await Contract . findByIdAndUpdate ( contract . id , {
40
- status : ' delayed'
41
- } )
40
+ status : " delayed" ,
41
+ } ) ;
42
42
contract = updatedContract ;
43
43
}
44
44
}
@@ -58,41 +58,41 @@ exports.getContract = catchAsync(async (req, res) => {
58
58
. populate ( "lead" , "name photo" )
59
59
. populate ( "team.member" , "name photo" ) ;
60
60
61
- // chek if contract is in-progress
62
- // if in-progress --> compare due date and current date and update to `delayed` if required
61
+ // chek if contract is in-progress
62
+ // if in-progress --> compare due date and current date and update to `delayed` if required
63
63
64
- const contractDueDate = contract . dueDate ;
65
- console . log ( contract . dueDate ) ;
64
+ const contractDueDate = contract . dueDate ;
65
+ console . log ( contract . dueDate ) ;
66
+
67
+ let date = new Date ( ) ;
68
+
69
+ console . log ( date ) ;
70
+ console . log ( date >= contractDueDate ) ;
71
+ console . log ( typeof date ) ;
72
+ console . log ( typeof contractDueDate ) ;
73
+
74
+ if ( contract . status === "in-progress" ) {
75
+ if ( contractDueDate <= date ) {
76
+ const updatedContract = await Contract . findByIdAndUpdate ( contract . id , {
77
+ status : "delayed" ,
78
+ } ) ;
66
79
67
- let date = new Date ( ) ;
68
-
69
- console . log ( date ) ;
70
- console . log ( date >= contractDueDate ) ;
71
- console . log ( typeof ( date ) ) ;
72
- console . log ( typeof ( contractDueDate ) ) ;
73
-
74
- if ( contract . status === 'in-progress' ) {
75
- if ( contractDueDate <= date ) {
76
- const updatedContract = await Contract . findByIdAndUpdate ( contract . id , {
77
- status : 'delayed'
78
- } )
79
-
80
- res . status ( 200 ) . json ( {
81
- status : 'success' ,
82
- updatedContract
83
- } )
84
- }
85
- } else {
86
80
res . status ( 200 ) . json ( {
87
81
status : "success" ,
88
- contract
82
+ updatedContract ,
89
83
} ) ;
90
84
}
85
+ } else {
86
+ res . status ( 200 ) . json ( {
87
+ status : "success" ,
88
+ contract,
89
+ } ) ;
90
+ }
91
91
} ) ;
92
92
93
93
exports . initializeContract = catchAsync ( async ( req , res ) => {
94
-
95
- const { team , startDate , dueDate , contractName , projectDescription , chatId } = req . body ;
94
+ const { team , startDate , dueDate , contractName , projectDescription , chatId } =
95
+ req . body ;
96
96
const userId = req . user . id ;
97
97
98
98
const contract = await Contract . create ( {
@@ -148,7 +148,6 @@ exports.initializeContract = catchAsync(async (req, res) => {
148
148
} ) ;
149
149
150
150
exports . acceptContract = catchAsync ( async ( req , res ) => {
151
-
152
151
const userId = req . user . _id ;
153
152
const { chatId } = req . body ;
154
153
@@ -204,9 +203,8 @@ exports.acceptContract = catchAsync(async (req, res) => {
204
203
} ) ;
205
204
206
205
exports . denyContract = catchAsync ( async ( req , res ) => {
207
-
208
206
const contractId = req . params . contractId ;
209
- const userId = req . user . id
207
+ const userId = req . user . id ;
210
208
211
209
const deniedContract = await Contract . updateOne (
212
210
{
@@ -230,14 +228,34 @@ exports.denyContract = catchAsync(async (req, res) => {
230
228
res . send ( updatedContract ) ;
231
229
} ) ;
232
230
233
- exports . updateContract = catchAsync ( async ( req , res ) => {
234
-
231
+ exports . updateDueContract = catchAsync ( async ( req , res , next ) => {
235
232
const { newDueDate, reason } = req . body ;
236
233
const contractId = req . params . contractId ;
237
-
234
+
238
235
const contract = await Contract . findById ( contractId ) ;
236
+
237
+
238
+ let date = new Date ( ) ;
239
+
240
+ console . log ( Date . parse ( newDueDate ) > Date . parse ( date ) ) ;
241
+
242
+ const parsedNewDueDate = Date . parse ( newDueDate ) ;
243
+ const parsedCurrentDate = Date . parse ( date )
244
+ const parsedStartingDate = Date . parse ( contract . startDate )
245
+ const parsedDueDate = Date . parse ( contract . dueDate )
246
+
247
+ console . log ( parsedDueDate ) ;
248
+ console . log ( parsedNewDueDate ) ;
249
+
250
+ // check if prevDueDate and newDueDate arent similar
251
+ if ( parsedNewDueDate === parsedDueDate ) {
252
+ return next ( new AppError ( "Enter a new Due Date" ) ) ;
253
+ }
254
+
255
+ if ( parsedNewDueDate < parsedCurrentDate || parsedNewDueDate < parsedStartingDate ) {
256
+ return next ( new AppError ( "Enter a logical new Due Date 🙄" ) ) ;
257
+ }
239
258
240
- console . log ( contract . dueDate ) ;
241
259
242
260
const newDueObj = {
243
261
prevDate : contract . dueDate ,
@@ -247,17 +265,63 @@ exports.updateContract = catchAsync(async (req, res) => {
247
265
let newprevDueDatesArr = contract . prevDueDates ;
248
266
newprevDueDatesArr . push ( newDueObj ) ;
249
267
250
- const updatedContract = await Contract . findByIdAndUpdate (
251
- contractId ,
252
- {
253
- dueDate : newDueDate ,
254
- prevDueDates : newprevDueDatesArr ,
255
- } ,
256
- {
257
- new : true ,
258
- runValidators : true ,
259
- }
260
- ) ;
268
+ let updatedContract ;
261
269
262
- res . send ( updatedContract ) ;
263
- } ) ;
270
+ if ( contract . status === "delayed" ) {
271
+ updatedContract = await Contract . findByIdAndUpdate (
272
+ contractId ,
273
+ {
274
+ dueDate : newDueDate ,
275
+ prevDueDates : newprevDueDatesArr ,
276
+ status : "in-progress" ,
277
+ } ,
278
+ {
279
+ new : true ,
280
+ runValidators : true ,
281
+ }
282
+ ) ;
283
+ } else {
284
+ updatedContract = await Contract . findByIdAndUpdate (
285
+ contractId ,
286
+ {
287
+ dueDate : newDueDate ,
288
+ prevDueDates : newprevDueDatesArr ,
289
+ } ,
290
+ {
291
+ new : true ,
292
+ runValidators : true ,
293
+ }
294
+ ) ;
295
+ }
296
+
297
+ res . status ( 200 ) . json ( {
298
+ status : "success" ,
299
+ updatedContract,
300
+ } ) ;
301
+ } ) ;
302
+
303
+ exports . finishContract = catchAsync ( async ( req , res ) => {
304
+ const { githubLink, liveLink, projectImages } = req . body ;
305
+ const contractId = req . params . contractId ;
306
+
307
+ if ( ! githubLink || ! liveLink || ! projectImages ) {
308
+ return next ( new AppError ( 'Provide sufficient details to finish the project' ) )
309
+ }
310
+
311
+ const finishedContract = await Contract . findByIdAndUpdate ( contractId , {
312
+ githubLink,
313
+ liveLink,
314
+ projectImages
315
+ } )
316
+
317
+ res . status ( 200 ) . json ( {
318
+ status : 'success' ,
319
+ finishedContract
320
+ } )
321
+ } )
322
+
323
+ // contractId -->
324
+
325
+ // n members -- (n-1)*n
326
+
327
+ // After Finishing review, contract will ask to revoiew the members
0 commit comments