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
	@Value("${goldoa.sendCoordinatorEmails}")
63
	private String sendCoordinatorEmails ;//= false;
64
	@Value("${goldoa.sendEvaEmail}")
65
	private String sendEvaEmail ;//= false;
66
	@Value("${goldoa.evaEmail}")
67
	private String evaEmail;// = null;
68

    
69
	private Log logger = LogFactory.getLog(RequestManagerImpl.class);
70

    
71
	@Override
72
	public Request saveRequest(final Request request) {
73
		if (request.getId() == null) {
74
			request.setId(new SimpleDateFormat("yyyyMMdd-").format(new Date()) + requestDAO.getRequestId());
75
			Budget budget = null;
76
			if(request.getPublisher() != null)
77
				budget = budgetManager.getForRequest(request.getOrganization().getId(),
78
						request.getPublisher().getEmail());
79

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

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

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

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

    
109
	@Override
110
	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) {
111
		RequestPage requests = requestDAO.getForOrganization(organizationIds, fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilter, from, to);
112
		return requests;
113
	}
114

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

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

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

    
127
			} else {
128
				statuses = new Integer[statusFilter.length];
129

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

    
143
			else {
144
				statuses = new Integer[statusFilter.length];
145

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

    
149
					statuses[i] = s.getCode();
150
				}
151
			}
152
		}
153

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

    
159
			return e.getMessage();
160
		}
161
	}
162

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

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

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

    
177
		else {
178
			statuses = new Integer[statusFilter.length];
179

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

    
183
				statuses[i] = s.getCode();
184
			}
185
		}
186

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

    
191
	@Override
192
	public Request submitRequest(final Request request) {
193

    
194
		if (request.getBudget() != null) {
195
            Budget budget = request.getBudget();
196

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

    
209

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

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

    
242
		return request;
243
	}
244

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

    
250
//		requestDAO.submitRequest(request.getId());
251

    
252
		saveRequest(request);
253

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

    
292
		return request;
293
	}
294

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

    
300
//		requestDAO.submitRequest(request.getId());
301

    
302
		saveRequest(request);
303

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

    
342
		return request;
343
	}
344

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

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

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

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

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

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

    
445
				} catch (MessagingException e) {
446
					e.printStackTrace();
447
				}
448
			}
449
		});
450
	}
451

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

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

    
468
				try {
469
					emailUtils.sendRequesterPaidEmail(request);
470
					emailUtils.sendPublisherPaidEmail(request);
471

    
472
					for (User user : userManager.getModerators())
473
						emailUtils.sendModeratorPaidEmail(user, request);
474

    
475
					if (Boolean.parseBoolean(sendEvaEmail))
476
						emailUtils.sendEvaPaidEmail(evaEmail, request);
477

    
478
				} catch (MessagingException e) {
479
					e.printStackTrace();
480
				}
481
			}
482
		});
483
	}
484

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

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

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

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

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

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

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

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

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

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

    
606
		final Request request = getById(requestId);
607

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

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

    
630

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

    
639

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

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

    
653
		String linesWithHeader[] = csv.split("\\r?\\n");
654
		String lines[] = Arrays.copyOfRange(linesWithHeader,1,linesWithHeader.length);
655
		for(String str : lines){
656
			String line[] = str.split(",");
657
			String userEmail = line.length>=0?line[0].trim():null;
658
			String grant = line.length>=1?line[1].trim():null;
659
			String doi = line.length>=2?line[2].trim():null;
660
			String acceptanceDate = line.length>=3?line[3].trim():null;
661
			String identifierType = line.length>=4?line[4].trim():null;
662
			String identifierValue = line.length>=5?line[5].trim():null;
663
			String publicationLicense = line.length>=6?line[6].trim():null;
664
			String apc = line.length>=7?line[7].trim():null;
665
			String apcCurrency = line.length>=8?line[8].trim():null;
666
			String discount = line.length>=9?line[9].trim():null;
667

    
668
			importRequestFromCSV(userEmail,grant,doi,acceptanceDate,
669
				identifierType,identifierValue,publicationLicense,apc,
670
				apcCurrency,discount);
671
		}
672
	}
673

    
674

    
675
	private void importRequestFromCSV(String userEmail, String grant, String doi, String acceptanceDate,
676
									  String identifierType, String identifierValue, String publicationLicense,
677
									  String apc, String apcCurrency, String discount)
678
			throws PersonManagerException, ParseException, ManagerException {
679

    
680
		User user = null;
681
		try {
682
			user  = userManager.getByEmail(userEmail);
683
		} catch (PersonManagerException e) {
684
			e.printStackTrace();
685
			throw new PersonManagerException("User with email " + userEmail + " not exists!");
686
		}
687

    
688
		List<Object> rs = projectManager.search(grant);
689
		Project project = null;
690
		if(rs.size() == 0) {
691
			System.out.println("Project with specified grant("+grant+") not found!");
692
			throw new ManagerException("Project with specified grant("+grant+") not found!");
693
		}else
694
			project = (Project) rs.get(0);
695

    
696
		Publication publication = null;
697
		try {
698
			publication = publicationManager.resolveDOI(doi);
699
		} catch (ManagerException e) {
700
			e.printStackTrace();
701
			throw new ManagerException("Requested doi("+doi+") not found!");
702
		}
703

    
704
		if ( publicationManager.getPublication(publication.getId())  == null )
705
			publicationManager.savePublication(publication);
706

    
707

    
708
		if(publication.getJournal()!=null && publication.getJournal().getPublisher()!=null)
709
			publisherManager.savePublisher(publication.getJournal().getPublisher());
710
		else if(publication.getPublisher()!=null)
711
			publisherManager.savePublisher(publication.getPublisher());
712

    
713

    
714
		Request request = requestDAO.getRequestFromCSV(user,project,publication,acceptanceDate,
715
				identifierType,identifierValue,publicationLicense,apc,
716
				apcCurrency,discount);
717

    
718
		request.setId("L" + new SimpleDateFormat("yyyyMMdd-").format(new Date()) + requestDAO.getRequestId());
719
		request.setEligibility(eligibilityManager.validate(request));
720

    
721
		if(!request.getEligibility().getStatus().equals(Eligibility.Status.OK))
722
			throw new ManagerException("Request for project "+grant+" is not eligible!");
723
		saveRequest(request);
724

    
725
	}
726

    
727

    
728
	@Override
729
	public BigInteger getActiveNumber() {
730
		return requestDAO.getActiveNumber();
731
	}
732

    
733
	@Override
734
	public BigInteger getPaidNumber() {
735
		return requestDAO.getPaidNumber();
736
	}
737

    
738
	@Override
739
	public BigInteger getNumberOfProjects() {
740
		return requestDAO.getNumberOfProjects();
741
	}
742

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

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

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

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

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

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

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

    
778
	@Override
779
	public BigInteger getNumberOfPaidPublicationPerMonograph() {
780
		return requestDAO.getNumberOfPaidPublicationPerMonograph();
781
	}
782

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

    
788

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

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

    
799
	public String isSendCoordinatorEmails() {
800
		return sendCoordinatorEmails;
801
	}
802

    
803
	public void setSendCoordinatorEmails(String sendCoordinatorEmails) {
804
		this.sendCoordinatorEmails = sendCoordinatorEmails;
805
	}
806

    
807
	public String isSendEvaEmail() {
808
		return sendEvaEmail;
809
	}
810

    
811
	public void setSendEvaEmail(String sendEvaEmail) {
812
		this.sendEvaEmail = sendEvaEmail;
813
	}
814

    
815
	public String getEvaEmail() {
816
		return evaEmail;
817
	}
818

    
819
	public void setEvaEmail(String evaEmail) {
820
		this.evaEmail = evaEmail;
821
	}
822
}
(24-24/29)