Project

General

Profile

1
package eu.dnetlib.goldoa.service;
2

    
3
import eu.dnetlib.goldoa.domain.*;
4
import eu.dnetlib.goldoa.service.dao.RequestDAO;
5
import eu.dnetlib.goldoa.service.utils.EmailUtils;
6
import org.apache.commons.logging.Log;
7
import org.apache.commons.logging.LogFactory;
8
import org.springframework.beans.factory.annotation.Autowired;
9
import org.springframework.beans.factory.annotation.Value;
10
import org.springframework.dao.EmptyResultDataAccessException;
11
import org.springframework.stereotype.Service;
12
import org.springframework.transaction.annotation.Propagation;
13
import org.springframework.transaction.annotation.Transactional;
14

    
15
import javax.mail.MessagingException;
16
import java.io.IOException;
17
import java.io.InputStream;
18
import java.math.BigInteger;
19
import java.sql.Timestamp;
20
import java.text.ParseException;
21
import java.text.SimpleDateFormat;
22
import java.util.ArrayList;
23
import java.util.Arrays;
24
import java.util.Date;
25
import java.util.List;
26
import java.util.concurrent.ExecutorService;
27

    
28
/*
29
 * Created by antleb on 3/10/15.
30
*/
31

    
32

    
33
@Transactional
34
@Service("requestManager")
35
public class RequestManagerImpl implements RequestManager {
36

    
37
	@Autowired
38
	private RequestDAO requestDAO;
39
	@Autowired
40
	private UserManager userManager;
41
	@Autowired
42
	private OrganizationManager organizationManager;
43
	@Autowired
44
	private ProjectManager projectManager;
45
	@Autowired
46
	private PublicationManager publicationManager;
47
	@Autowired
48
	private InvoiceManager invoiceManager;
49
	@Autowired
50
	private BudgetManager budgetManager;
51
	@Autowired
52
	private EligibilityManager eligibilityManager;
53
	@Autowired
54
	private EmailUtils emailUtils;
55
	@Autowired
56
	private ExecutorService executorService;
57
	@Autowired
58
	private SearchManager searchManager;
59
	@Autowired
60
	private PublisherManager publisherManager;
61

    
62

    
63
	@Value("${goldoa.sendCoordinatorEmails}")
64
	private String sendCoordinatorEmails ;//= false;
65
	@Value("${goldoa.sendEvaEmail}")
66
	private String sendEvaEmail ;//= false;
67
	@Value("${goldoa.evaEmail}")
68
	private String evaEmail;// = null;
69

    
70
	private Log LOGGER = LogFactory.getLog(RequestManagerImpl.class);
71

    
72
	@Override
73
	public Request saveRequest(final Request request) {
74

    
75
		if (request.getId() == null) {
76
			request.setId(new SimpleDateFormat("yyyyMMdd-").format(new Date()) + requestDAO.getRequestId());
77
			Budget budget = null;
78
			/*if(request.getPublisher() != null)
79
				budget = budgetManager.getForRequest(request.getOrganization().getId(),
80
						request.getPublisher().getEmail());
81

    
82
			if (budget != null) {
83
				request.setBudget(budget);
84
				// TODO fix amounts
85
				budget.setRemaining(budget.getRemaining() - request.getFundingRequested());
86
				budgetManager.saveBudget(budget);
87
			}*/
88
		}
89
		request.setEligibility(eligibilityManager.validate(request));
90
		requestDAO.saveRequest(request);
91
		return request;
92
	}
93

    
94
	@Override
95
	public Request getById(String requestId) {
96
		return 	requestDAO.getRequest(requestId);
97
	}
98

    
99
	@Override
100
	public RequestPage getForUser(String email, Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order, RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilter, int from, int to) {
101
		RequestPage requests = requestDAO.getForUser(email, fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilter, from, to);
102
		return requests;
103
	}
104

    
105
	@Override
106
	public RequestPage getForPublisher(String publisherId, Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order, RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilter, int from, int to) {
107
		RequestPage requests = requestDAO.getForPublisher(publisherId, fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilter, from, to);
108
		return requests;
109
	}
110

    
111
	@Override
112
	public RequestPage getForOrganization(List<String> organizationIds, Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order, RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilter, int from, int to) {
113
		RequestPage requests = requestDAO.getForOrganization(organizationIds, fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilter, from, to);
114
		return requests;
115
	}
116

    
117
	@Override
118
	public List<Request> getForProject(String projectId) {
119
		return requestDAO.getForProject(projectId);
120
	}
121

    
122
	@Override
123
	public String getCSV(String mode, RequestSort requestSortBy, RequestSortOrder order, RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilter) {
124
		Integer[] statuses = null;
125

    
126
		if ("moderator".equals(mode)) {
127
			if (statusFilter == null || statusFilter.length == 0) {
128

    
129
			} else {
130
				statuses = new Integer[statusFilter.length];
131

    
132
				for (int i = 0; i < statusFilter.length; i++) {
133
					statuses[i] = statusFilter[i].getCode();
134
				}
135
			}
136
		} else if ("accounting".equals(mode)) {
137
			if (statusFilter == null || statusFilter.length == 0)
138
				statuses = new Integer[] {
139
						Request.RequestStatus.APPROVED.getCode(),
140
						Request.RequestStatus.ACCOUNTING_PROCESSING.getCode(),
141
						Request.RequestStatus.ACCOUNTING_ON_HOLD.getCode(),
142
						Request.RequestStatus.ACCOUNTING_DENIED.getCode(),
143
						Request.RequestStatus.ACCOUNTING_PAID.getCode()};
144

    
145
			else {
146
				statuses = new Integer[statusFilter.length];
147

    
148
				for (int i = 0; i < statusFilter.length; i++) {
149
					Request.RequestStatus s = statusFilter[i];
150

    
151
					statuses[i] = s.getCode();
152
				}
153
			}
154
		}
155

    
156
		try {
157
			return requestDAO.getCSV(requestSortBy, order, requestFilter, term, statuses);
158
		} catch (IOException e) {
159
			e.printStackTrace();
160

    
161
			return e.getMessage();
162
		}
163
	}
164

    
165
	@Override
166
	public RequestPage getRequests(Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order, RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilter, int from, int to) {
167
		RequestPage requestPage = requestDAO.getRequests(fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilter, from, to);
168
		return requestPage;
169
	}
170

    
171
	@Override
172
	public RequestPage getForAccounting(Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order, RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilter, int from, int to) {
173
		Integer[] statuses;
174

    
175
		if (statusFilter == null || statusFilter.length == 0)
176
			statuses = new Integer[] {Request.RequestStatus.APPROVED.getCode(), Request.RequestStatus.ACCOUNTING_PROCESSING.getCode(), Request.RequestStatus.ACCOUNTING_ON_HOLD.getCode()
177
			, Request.RequestStatus.ACCOUNTING_DENIED.getCode(), Request.RequestStatus.ACCOUNTING_PAID.getCode()};
178

    
179
		else {
180
			statuses = new Integer[statusFilter.length];
181

    
182
			for (int i = 0; i < statusFilter.length; i++) {
183
				Request.RequestStatus s = statusFilter[i];
184

    
185
				statuses[i] = s.getCode();
186
			}
187
		}
188

    
189
		RequestPage requests = requestDAO.getRequests(fromDate, toDate, requestSortBy, order, requestFilter, term, statuses, from, to);
190
		return requests;
191
	}
192

    
193
	@Override
194
	public Request submitRequest(final Request request) {
195

    
196
		if (request.getBudget() != null) {
197
            Budget budget = request.getBudget();
198

    
199
			Organization organization = budget.getOrganizations().get(0);
200
			if (organization != null)
201
				request.setStatus(Request.RequestStatus.LIBRARY_FUND_SUBMITTED);
202
			else if (budget.getPublisher() != null)
203
				request.setStatus(Request.RequestStatus.PUBLISHER_FUND_SUBMITTED);
204
		} else {
205
			request.setStatus(Request.RequestStatus.SUBMITTED);
206
		}
207
		request.setSubmissiondate(new Timestamp(new Date().getTime()));
208
		request.setEligibility(eligibilityManager.validate(request));
209
		requestDAO.submitRequest(request);
210

    
211

    
212
		final List<User> moderators = userManager.getModerators();
213
		executorService.submit(new Runnable() {
214
			@Override
215
			public void run() {
216
				try {
217
					switch (request.getEligibility().getStatus()) {
218
						case OK:
219
							emailUtils.sendRequesterOKEmail(request);
220
							for (User user : moderators)
221
								emailUtils.sendModeratorOKEmail(request, user);
222
							break;
223
						case IFFY:
224
							emailUtils.sendRequesterIFFYEmail(request);
225
							for (User user : moderators)
226
								emailUtils.sendModeratorIFFYEmail(request, user);
227
							break;
228
						case NONO:
229
							break;
230
					}
231

    
232
					if (Boolean.parseBoolean(sendCoordinatorEmails)) {
233
						for (User  coordinator : request.getProject().getCoordinators())
234
							emailUtils.sendCoordinatorRequestSubmittedEmail(coordinator, request);
235
					}
236
				} catch (MessagingException e) {
237
					e.printStackTrace();
238
				} catch (Exception e) {
239
					e.printStackTrace();
240
				}
241
			}
242
		});
243

    
244
		return request;
245
	}
246

    
247
	@Override
248
	public Request submitLibraryRequest(final Request request) throws PersonManagerException {
249
		request.setStatus(Request.RequestStatus.LIBRARY_FUND_SUBMITTED);
250
		request.setSubmissiondate(new Timestamp(new Date().getTime()));
251

    
252
//		requestDAO.submitRequest(request.getId());
253

    
254
		saveRequest(request);
255

    
256
//		executorService.submit(new Runnable() {
257
//			@Override
258
//			public void run() {
259
//				RequestInfo requestInfo = null;
260
//				try {
261
//					requestInfo = getRequestInfo(request);
262
//
263
//					switch (requestInfo.getEligibility().getStatus()) {
264
//						case OK:
265
//							emailUtils.sendRequesterOKEmail(requestInfo);
266
//
267
//							for (Person person : personManager.getModerators())
268
//								emailUtils.sendModeratorOKEmail(requestInfo, person);
269
//							break;
270
//						case IFFY:
271
//							emailUtils.sendRequesterIFFYEmail(requestInfo);
272
//
273
//							for (Person person : personManager.getModerators())
274
//								emailUtils.sendModeratorIFFYEmail(requestInfo, person);
275
//							break;
276
//						case NONO:
277
//							break;
278
//					}
279
//
280
//					if (sendCoordinatorEmails) {
281
//						for (Person coordinator : requestInfo.getProject().getCoordinators())
282
//							emailUtils.sendCoordinatorRequestSubmittedEmail(coordinator, requestInfo);
283
//					}
284
//				} catch (MessagingException e) {
285
//					e.printStackTrace();
286
//				} catch (PersonManagerException e) {
287
//					e.printStackTrace();
288
//				} catch (Exception e) {
289
//					e.printStackTrace();
290
//				}
291
//			}
292
//		});
293

    
294
		return request;
295
	}
296

    
297
	@Override
298
	public Request submitPublisherRequest(Request request) throws PersonManagerException {
299
        request.setStatus(Request.RequestStatus.PUBLISHER_FUND_SUBMITTED);
300
        request.setSubmissiondate(new Timestamp(new Date().getTime()));
301

    
302
//		requestDAO.submitRequest(request.getId());
303

    
304
		saveRequest(request);
305

    
306
//		executorService.submit(new Runnable() {
307
//			@Override
308
//			public void run() {
309
//				RequestInfo requestInfo = null;
310
//				try {
311
//					requestInfo = getRequestInfo(request);
312
//
313
//					switch (requestInfo.getEligibility().getStatus()) {
314
//						case OK:
315
//							emailUtils.sendRequesterOKEmail(requestInfo);
316
//
317
//							for (Person person : personManager.getModerators())
318
//								emailUtils.sendModeratorOKEmail(requestInfo, person);
319
//							break;
320
//						case IFFY:
321
//							emailUtils.sendRequesterIFFYEmail(requestInfo);
322
//
323
//							for (Person person : personManager.getModerators())
324
//								emailUtils.sendModeratorIFFYEmail(requestInfo, person);
325
//							break;
326
//						case NONO:
327
//							break;
328
//					}
329
//
330
//					if (sendCoordinatorEmails) {
331
//						for (Person coordinator : requestInfo.getProject().getCoordinators())
332
//							emailUtils.sendCoordinatorRequestSubmittedEmail(coordinator, requestInfo);
333
//					}
334
//				} catch (MessagingException e) {
335
//					e.printStackTrace();
336
//				} catch (PersonManagerException e) {
337
//					e.printStackTrace();
338
//				} catch (Exception e) {
339
//					e.printStackTrace();
340
//				}
341
//			}
342
//		});
343

    
344
		return request;
345
	}
346

    
347
	@Override
348
	public void conditionallyApproveRequest(final String requestId, final String email, final String comment, String template) {
349
		User user = null;
350
		try {
351
			user = userManager.getByEmail(email);
352
		} catch (PersonManagerException e) {
353
			e.printStackTrace();
354
		}
355
		requestDAO.conditionallyApproveRequest(requestId, user, comment, template);
356

    
357
		final Request request = getById(requestId);
358
		executorService.submit(new Runnable() {
359
			@Override
360
			public void run() {
361
				try {
362
					emailUtils.sendRequesterInitiallyApprovedEmail(request);
363
				} catch (MessagingException e) {
364
					e.printStackTrace();
365
				}
366
			}
367
		});
368
	}
369

    
370
	@Override
371
	public void approveRequest(final String requestId, final String email, final String comment, String template) {
372
		User user = null;
373
		try {
374
			user = userManager.getByEmail(email);
375
		} catch (PersonManagerException e) {
376
			e.printStackTrace();
377
		}
378
		requestDAO.approveRequest(requestId, user, comment, template);
379

    
380
		final Request request = getById(requestId);
381
		executorService.submit(new Runnable() {
382
			@Override
383
			public void run() {
384
				try {
385
					emailUtils.sendRequesterApprovedEmail(request);
386
				} catch (MessagingException e) {
387
					e.printStackTrace();
388
				}
389
				if (request.getInvoice() == null) {
390
					try {
391
						emailUtils.sendRequesterInvoiceNotification(request);
392
						emailUtils.sendPublisherInvoiceNotification(request);
393
					} catch (MessagingException e) {
394
						e.printStackTrace();
395
					}
396
				} else {
397
					try {
398
						for (User user : userManager.getAccountingOfficers())
399
							emailUtils.sendAccountingRequestApprovedEmail(user, request);
400
					} catch (MessagingException e) {
401
						e.printStackTrace();
402
					}
403
				}
404
			}
405
		});
406
	}
407

    
408
	@Override
409
	public void rejectRequest(final String requestId, String email, String comment, String template) {
410
		User user = null;
411
		try {
412
			user = userManager.getByEmail(email);
413
		} catch (PersonManagerException e) {
414
			e.printStackTrace();
415
		}
416
		requestDAO.rejectRequest(requestId, user, comment, template);
417
		final Request request = getById(requestId);
418
		executorService.submit(new Runnable() {
419
			@Override
420
			public void run() {
421
				try {
422
					emailUtils.sendRequesterRejectedEmail(request);
423
				} catch (MessagingException e) {
424
					e.printStackTrace();
425
				}
426
			}
427
		});
428
	}
429

    
430
	@Override
431
	public void processingRequest(final String requestId, String email, String comment, String template) {
432
		User user = null;
433
		try {
434
			user = userManager.getByEmail(email);
435
		} catch (PersonManagerException e) {
436
			e.printStackTrace();
437
		}
438
		requestDAO.processingRequest(requestId, user, comment, template);
439
		final Request request = getById(requestId);
440
		executorService.submit(new Runnable() {
441
			@Override
442
			public void run() {
443
				try {
444
					for (User user : userManager.getModerators())
445
						emailUtils.sendModeratorProcessingEmail(user, request);
446

    
447
				} catch (MessagingException e) {
448
					e.printStackTrace();
449
				}
450
			}
451
		});
452
	}
453

    
454
	@Override
455
	public void paidRequest(final String requestId, String email, String comment, String template, float apc_paid,
456
							float transfer_cost, float other_cost, Date datePaid) {
457
		User user = null;
458
		try {
459
			user = userManager.getByEmail(email);
460
		} catch (PersonManagerException e) {
461
			e.printStackTrace();
462
		}
463

    
464
		requestDAO.paidRequest(requestId, user, comment, template, apc_paid, transfer_cost, other_cost, datePaid);
465
		final Request request = getById(requestId);
466
		executorService.submit(new Runnable() {
467
			@Override
468
			public void run() {
469

    
470
				try {
471
					emailUtils.sendRequesterPaidEmail(request);
472
					emailUtils.sendPublisherPaidEmail(request);
473

    
474
					for (User user : userManager.getModerators())
475
						emailUtils.sendModeratorPaidEmail(user, request);
476

    
477
					if (Boolean.parseBoolean(sendEvaEmail))
478
						emailUtils.sendEvaPaidEmail(evaEmail, request);
479

    
480
				} catch (MessagingException e) {
481
					e.printStackTrace();
482
				}
483
			}
484
		});
485
	}
486

    
487
	@Override
488
	public void paidLibraryRequest(String requestId, String email, String comment, String template, float apc_paid, float transfer_cost, float other_cost, Date datePaid) {
489
		User user = null;
490
		try {
491
			user = userManager.getByEmail(email);
492
		} catch (PersonManagerException e) {
493
			e.printStackTrace();
494
		}
495
		requestDAO.paidLibraryRequest(requestId, user, comment, template, apc_paid, transfer_cost, other_cost, datePaid);
496

    
497
//		executorService.submit(new Runnable() {
498
//			@Override
499
//			public void run() {
500
//				RequestInfo requestInfo = getById(requestId);
501
//
502
//				try {
503
//					emailUtils.sendRequesterPaidEmail(requestInfo);
504
//					emailUtils.sendPublisherPaidEmail(requestInfo);
505
//
506
//					for (Person person : personManager.getModerators())
507
//						emailUtils.sendModeratorPaidEmail(person, requestInfo);
508
//
509
//					if (sendEvaEmail)
510
//						emailUtils.sendEvaPaidEmail(evaEmail, requestInfo);
511
//
512
//				} catch (MessagingException e) {
513
//					e.printStackTrace();
514
//				}
515
//			}
516
//		});
517
	}
518

    
519
	@Override
520
	public void paidPublisherRequest(String requestId, String email, String comment,
521
									 String template, float apc_paid, float transfer_cost, float other_cost, Date datePaid) {
522
		User user = null;
523
		try {
524
			user = userManager.getByEmail(email);
525
		} catch (PersonManagerException e) {
526
			e.printStackTrace();
527
		}
528
		requestDAO.paidPublisherRequest(requestId, user, comment, template, apc_paid, transfer_cost, other_cost, datePaid);
529

    
530
		//		executorService.submit(new Runnable() {
531
//			@Override
532
//			public void run() {
533
//				RequestInfo requestInfo = getById(requestId);
534
//
535
//				try {
536
//					emailUtils.sendRequesterPaidEmail(requestInfo);
537
//					emailUtils.sendPublisherPaidEmail(requestInfo);
538
//
539
//					for (Person person : personManager.getModerators())
540
//						emailUtils.sendModeratorPaidEmail(person, requestInfo);
541
//
542
//					if (sendEvaEmail)
543
//						emailUtils.sendEvaPaidEmail(evaEmail, requestInfo);
544
//
545
//				} catch (MessagingException e) {
546
//					e.printStackTrace();
547
//				}
548
//			}
549
//		});
550
	}
551

    
552
	@Override
553
	public void onHoldRequest(final String requestId, String email, String comment, String template) {
554
		User user = null;
555
		try {
556
			user = userManager.getByEmail(email);
557
		} catch (PersonManagerException e) {
558
			e.printStackTrace();
559
		}
560
		requestDAO.onHoldRequest(requestId, user, comment, template);
561

    
562
		final Request request = getById(requestId);
563
		executorService.submit(new Runnable() {
564
			@Override
565
			public void run() {
566
				try {
567
					emailUtils.sendRequesterOnHoldEmail(request);
568
					emailUtils.sendPublisherOnHoldEmail(request);
569

    
570
					for (User user : userManager.getModerators())
571
						emailUtils.sendModeratorOnHoldEmail(user, request);
572
				} catch (MessagingException e) {
573
					e.printStackTrace();
574
				}
575
			}
576
		});
577
	}
578

    
579
	@Override
580
	public void deniedRequest(final String requestId, String email, String comment, String template) {
581
		User user = null;
582
		try {
583
			user = userManager.getByEmail(email);
584
		} catch (PersonManagerException e) {
585
			e.printStackTrace();
586
		}
587
		requestDAO.deniedRequest(requestId, user, comment, template);
588
		final Request request = getById(requestId);
589
		executorService.submit(new Runnable() {
590
			@Override
591
			public void run() {
592
				try {
593
					emailUtils.sendRequesterDeniedEmail(request);
594
					emailUtils.sendPublisherDeniedEmail(request);
595

    
596
					for (User user : userManager.getModerators())
597
						emailUtils.sendModeratorDeniedEmail(user, request);
598
				} catch (MessagingException e) {
599
					e.printStackTrace();
600
				}
601
			}
602
		});
603
	}
604

    
605
	@Override
606
	public Invoice invoiceUploaded(final String requestId, String invoiceId) throws ManagerException {
607

    
608
		final Request request = getById(requestId);
609

    
610
		final List<User> moderators = userManager.getModerators();
611
		executorService.submit(new Runnable() {
612
			@Override
613
			public void run() {
614
				if (request.getStatus() == Request.RequestStatus.CONDITIONALLY_APPROVED) {
615
					try {
616
						for (User user : moderators)
617
							emailUtils.sendModeratorInvoiceUploaded(user, request);
618
					} catch (MessagingException e) {
619
						e.printStackTrace();
620
					}
621
				}
622
			}
623
		});
624
		return invoiceManager.getInvoice(invoiceId);
625
	}
626

    
627
	@Override
628
	public void uploadTransferReceipt(String requestid, String contentType, InputStream inputStream) {
629
		requestDAO.uploadBankTransferReceipt(requestid, contentType, inputStream);
630
	}
631

    
632

    
633
	public BankTransferReceipt downloadBankTransferReceipt(String requestId) throws RequestManagerException {
634
		try {
635
			return requestDAO.downloadBankTransferReceipt(requestId);
636
		} catch (EmptyResultDataAccessException e) {
637
			throw new RequestManagerException(RequestManagerException.ErrorCause.NOT_EXISTS);
638
		}
639
	}
640

    
641

    
642
	public List<CommentTemplate> getCommentTemplates(Request.RequestStatus requestStatus) {
643
		try {
644
			return requestDAO.getCommentTemplates(requestStatus);
645
		} catch (EmptyResultDataAccessException e) {
646
			return new ArrayList<CommentTemplate>();
647
		}
648
	}
649

    
650
	@Override
651
	@Transactional(propagation = Propagation.REQUIRED , rollbackFor = {PersonManagerException.class,
652
			 ManagerException.class,ParseException.class,Exception.class})
653
	public void importCSV(String csv) throws PersonManagerException, ManagerException, ParseException, OrganizationManagerException {
654

    
655
		String linesWithHeader[] = csv.split("\\r?\\n");
656
		String lines[] = Arrays.copyOfRange(linesWithHeader,1,linesWithHeader.length);
657
		for(String str : lines){
658
			String line[] = str.split(",");
659

    
660
			String firstname = !line[0].equals("")?line[0].trim():null;
661
			String lastname = !line[1].equals("")?line[1].trim():null;
662
			String email = !line[2].equals("")?line[2].trim():null;
663
			String organization = !line[3].equals("")?line[3].trim():null;
664

    
665
			String grant = !line[4].equals("")?line[4].trim():null;
666
			String doi = !line[5].equals("")?line[5].trim():null;
667
			String acceptanceDate = !line[6].equals("")?line[6].trim():null;
668
			String identifierType = !line[7].equals("")?line[7].trim():null;
669
			String identifierValue = !line[8].equals("")?line[8].trim():null;
670
			String apc = !line[9].equals("")?line[9].trim():"0";
671
			String apcCurrency = !line[10].equals("")?line[10].trim():null;
672
			String discount = line.length>11?line[11].trim():"0";
673

    
674
			importRequestFromCSV(firstname,lastname,organization,email,
675
					grant,doi,acceptanceDate, identifierType,
676
					identifierValue,apc, apcCurrency,discount);
677
		}
678
	}
679

    
680

    
681
	private void importRequestFromCSV(String firstname, String lastname, String organization, String email, String grant,
682
									  String doi, String acceptanceDate,
683
									  String identifierType, String identifierValue,
684
									  String apc, String apcCurrency, String discount)
685
			throws PersonManagerException, ParseException, ManagerException, OrganizationManagerException {
686

    
687
		Organization org = (Organization) organizationManager.search(organization).get(0);
688
		if(org == null){
689
			LOGGER.debug("Organization " + organization +  "  not exists!");
690
			throw new OrganizationManagerException(OrganizationManagerException.ErrorCause.NOT_EXISTS);
691
		}
692

    
693

    
694
		User user = null;
695
		try {
696
			user  = userManager.getByEmail(email);
697
		} catch (PersonManagerException e) {
698
			LOGGER.debug("User with email : " + email + "not exists!" ,e);
699
			LOGGER.debug("Creating new inactive user with default password!");
700
			user = userManager.createInActiveResearcher(firstname,lastname,email,org);
701
		}
702

    
703
		List<Object> rs = projectManager.search(grant);
704
		Project project = null;
705
		if(rs.size() == 0) {
706
			LOGGER.debug("Project with specified grant("+grant+") not found!");
707
			throw new ManagerException("Project with specified grant("+grant+") not found!");
708
		}else
709
			project = (Project) rs.get(0);
710

    
711
		Publication publication = null;
712
		try {
713
			publication = publicationManager.resolveDOI(doi);
714
		} catch (ManagerException e) {
715
			LOGGER.debug("Requested doi("+doi+") not found!" , e);
716
			throw new ManagerException("Requested doi("+doi+") not found!");
717
		}
718

    
719

    
720
		if(publication.getJournal()!=null && publication.getJournal().getPublisher()!=null)
721
			publisherManager.savePublisher(publication.getJournal().getPublisher());
722
		else if(publication.getPublisher()!=null)
723
			publisherManager.savePublisher(publication.getPublisher());
724

    
725
		if ( publicationManager.getPublication(publication.getId())  == null )
726
			publicationManager.savePublication(publication);
727

    
728

    
729
		Request request = requestDAO.getRequestFromCSV(user,project,publication,org,
730
				acceptanceDate, identifierType,identifierValue,apc, apcCurrency,discount);
731

    
732
		request.setId("L" + new SimpleDateFormat("yyyyMMdd-").format(new Date()) + requestDAO.getRequestId());
733
		request.setEligibility(Eligibility.OK);
734

    
735

    
736
		if(!request.getEligibility().getStatus().equals(Eligibility.Status.OK))
737
			throw new ManagerException("Request for project "+grant+" is not eligible!");
738
		requestDAO.saveRequest(request);
739

    
740
	}
741

    
742

    
743
	@Override
744
	public BigInteger getActiveNumber() {
745
		return requestDAO.getActiveNumber();
746
	}
747

    
748
	@Override
749
	public BigInteger getPaidNumber() {
750
		return requestDAO.getPaidNumber();
751
	}
752

    
753
	@Override
754
	public BigInteger getNumberOfProjects() {
755
		return requestDAO.getNumberOfProjects();
756
	}
757

    
758
	@Override
759
	public Float getTotalAmount() {
760
		return requestDAO.getTotalAmount();
761
	}
762

    
763
	@Override
764
	public Double getAverageAmount() {
765
		return requestDAO.getAverageAmount();
766
	}
767

    
768
	@Override
769
	public Double getAverageAmountPerBookChapter() {
770
		return requestDAO.getAverageAmountPerBookChapter();
771
	}
772

    
773
	@Override
774
	public Double getAverageAmountPerMonograph() {
775
		return requestDAO.getAverageAmountPerMonograph();
776
	}
777

    
778
	@Override
779
	public Double getAverageAmountPbooleanerMonograph() {
780
		return requestDAO.getAverageAmountPerMonograph();
781
	}
782

    
783
	@Override
784
	public Double getAverageAmountPerArticle() {
785
		return requestDAO.getAverageAmountPerArticle();
786
	}
787

    
788
	@Override
789
	public BigInteger getNumberOfPaidPublicationPerArticle() {
790
		return requestDAO.getNumberOfPaidPublicationPerArticle();
791
	}
792

    
793
	@Override
794
	public BigInteger getNumberOfPaidPublicationPerMonograph() {
795
		return requestDAO.getNumberOfPaidPublicationPerMonograph();
796
	}
797

    
798
	@Override
799
	public BigInteger getNumberOfPaidPublicationPerBookChapter() {
800
		return requestDAO.getNumberOfPaidPublicationPerBookChapter();
801
	}
802

    
803

    
804
	@Override
805
	public BigInteger getNumberOfPaidRequestsWithDOI() {
806
		return requestDAO.getNumberOfPaidRequestsWithDOI();
807
	}
808

    
809
	@Override
810
	public BigInteger getNumberOfApprovedRequestsWithDOI() {
811
		return requestDAO.getNumberOfApprovedRequestsWithDOI();
812
	}
813

    
814
	public String isSendCoordinatorEmails() {
815
		return sendCoordinatorEmails;
816
	}
817

    
818
	public void setSendCoordinatorEmails(String sendCoordinatorEmails) {
819
		this.sendCoordinatorEmails = sendCoordinatorEmails;
820
	}
821

    
822
	public String isSendEvaEmail() {
823
		return sendEvaEmail;
824
	}
825

    
826
	public void setSendEvaEmail(String sendEvaEmail) {
827
		this.sendEvaEmail = sendEvaEmail;
828
	}
829

    
830
	public String getEvaEmail() {
831
		return evaEmail;
832
	}
833

    
834
	public void setEvaEmail(String evaEmail) {
835
		this.evaEmail = evaEmail;
836
	}
837
}
(24-24/29)