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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
210

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

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

    
243
		return request;
244
	}
245

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

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

    
253
		saveRequest(request);
254

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

    
293
		return request;
294
	}
295

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

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

    
303
		saveRequest(request);
304

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

    
343
		return request;
344
	}
345

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
607
		final Request request = getById(requestId);
608

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

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

    
631

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

    
640

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

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

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

    
668
			importRequestFromCSV(userEmail,grant,doi,acceptanceDate,
669
				identifierType,identifierValue,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,
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

    
705
		if(publication.getJournal()!=null && publication.getJournal().getPublisher()!=null)
706
			publisherManager.savePublisher(publication.getJournal().getPublisher());
707
		else if(publication.getPublisher()!=null)
708
			publisherManager.savePublisher(publication.getPublisher());
709

    
710
		if ( publicationManager.getPublication(publication.getId())  == null )
711
			publicationManager.savePublication(publication);
712

    
713

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

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

    
721
		if(!request.getEligibility().getStatus().equals(Eligibility.Status.OK))
722
			throw new ManagerException("Request for project "+grant+" is not eligible!");
723
		requestDAO.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)