Project

General

Profile

1
package eu.dnetlib.goldoa.service;
2

    
3
import com.sun.org.apache.xpath.internal.operations.Bool;
4
import eu.dnetlib.goldoa.domain.*;
5
import eu.dnetlib.goldoa.service.dao.RequestDAO;
6
import eu.dnetlib.goldoa.service.utils.EmailUtils;
7
import org.apache.commons.logging.Log;
8
import org.apache.commons.logging.LogFactory;
9
import org.jboss.logging.annotations.Pos;
10
import org.springframework.beans.factory.annotation.Autowired;
11
import org.springframework.beans.factory.annotation.Value;
12
import org.springframework.dao.EmptyResultDataAccessException;
13
import org.springframework.stereotype.Service;
14
import org.springframework.transaction.annotation.Propagation;
15
import org.springframework.transaction.annotation.Transactional;
16

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

    
31
/*
32
 * Created by antleb on 3/10/15.
33
*/
34

    
35

    
36
@Transactional
37
@Service("requestManager")
38
public class RequestManagerImpl implements RequestManager {
39

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

    
65

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

    
73
	@Value("${goldoa.pendingemails}")
74
	private String pendingemails;
75

    
76
	private Log LOGGER = LogFactory.getLog(RequestManagerImpl.class);
77
    private boolean sendPendingMails = false;
78

    
79
	@PostConstruct
80
	public void init(){
81
		LOGGER.debug("Pending emails: " + pendingemails);
82
        if(!sendPendingMails){
83
            sendPendingMails = true;
84
            sendEmailForPendingIncompleteRequests();
85
            sendEmailForPendingConditionallyApprovedRequests();
86

    
87
        }
88
	}
89

    
90
	@Override
91
	public Request saveRequest(final Request request) {
92

    
93
		if (request.getId() == null) {
94
			request.setId(new SimpleDateFormat("yyyyMMdd-").format(new Date()) + requestDAO.getRequestId());
95
			Budget budget = null;
96
			/*if(request.getPublisher() != null)
97
				budget = budgetManager.getForRequest(request.getOrganization().getId(),
98
						request.getPublisher().getEmail());
99

    
100
			if (budget != null) {
101
				request.setBudget(budget);
102
				// TODO fix amounts
103
				budget.setRemaining(budget.getRemaining() - request.getFundingRequested());
104
				budgetManager.saveBudget(budget);
105
			}*/
106
		}
107
		request.setEligibility(eligibilityManager.validate(request));
108
		requestDAO.saveRequest(request);
109
		return request;
110
	}
111

    
112
	@Override
113
	public Request getById(String requestId) {
114
		return 	requestDAO.getRequest(requestId);
115
	}
116

    
117
	@Override
118
	public RequestPage getForUser(String email, Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order, RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilter, int from, int to) {
119
		RequestPage requests = requestDAO.getForUser(email, fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilter, from, to);
120
		return requests;
121
	}
122

    
123
	@Override
124
	public RequestPage getForPublisher(String publisherId, Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order, RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilter, int from, int to) {
125
		RequestPage requests = requestDAO.getForPublisher(publisherId, fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilter, from, to);
126
		return requests;
127
	}
128

    
129
	@Override
130
	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) {
131
		RequestPage requests = requestDAO.getForOrganization(organizationIds, fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilter, from, to);
132
		return requests;
133
	}
134

    
135
	@Override
136
	public List<Request> getForProject(String projectId) {
137
		return requestDAO.getForProject(projectId);
138
	}
139

    
140
	@Override
141
	public String getCSV(String mode, RequestSort requestSortBy, RequestSortOrder order, RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilter) {
142
		Integer[] statuses = null;
143

    
144
		if ("moderator".equals(mode)) {
145
			if (statusFilter == null || statusFilter.length == 0) {
146

    
147
			} else {
148
				statuses = new Integer[statusFilter.length];
149

    
150
				for (int i = 0; i < statusFilter.length; i++) {
151
					statuses[i] = statusFilter[i].getCode();
152
				}
153
			}
154
		} else if ("accounting".equals(mode)) {
155
			if (statusFilter == null || statusFilter.length == 0)
156
				statuses = new Integer[] {
157
						Request.RequestStatus.APPROVED.getCode(),
158
						Request.RequestStatus.ACCOUNTING_PROCESSING.getCode(),
159
						Request.RequestStatus.ACCOUNTING_ON_HOLD.getCode(),
160
						Request.RequestStatus.ACCOUNTING_DENIED.getCode(),
161
						Request.RequestStatus.ACCOUNTING_PAID.getCode()};
162

    
163
			else {
164
				statuses = new Integer[statusFilter.length];
165

    
166
				for (int i = 0; i < statusFilter.length; i++) {
167
					Request.RequestStatus s = statusFilter[i];
168

    
169
					statuses[i] = s.getCode();
170
				}
171
			}
172
		}
173

    
174
		try {
175
			return requestDAO.getCSV(requestSortBy, order, requestFilter, term, statuses);
176
		} catch (IOException e) {
177
			e.printStackTrace();
178

    
179
			return e.getMessage();
180
		}
181
	}
182

    
183
	@Override
184
	public RequestPage getRequests(Date fromDate, Date toDate, RequestSort requestSortBy, RequestSortOrder order, RequestFilter requestFilter, String term, Request.RequestStatus[] statusFilter, int from, int to) {
185
		RequestPage requestPage = requestDAO.getRequests(fromDate, toDate, requestSortBy, order, requestFilter, term, statusFilter, from, to);
186
		return requestPage;
187
	}
188

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

    
193
		if (statusFilter == null || statusFilter.length == 0)
194
			statuses = new Integer[] {Request.RequestStatus.APPROVED.getCode(), Request.RequestStatus.ACCOUNTING_PROCESSING.getCode(), Request.RequestStatus.ACCOUNTING_ON_HOLD.getCode()
195
			, Request.RequestStatus.ACCOUNTING_DENIED.getCode(), Request.RequestStatus.ACCOUNTING_PAID.getCode()};
196

    
197
		else {
198
			statuses = new Integer[statusFilter.length];
199

    
200
			for (int i = 0; i < statusFilter.length; i++) {
201
				Request.RequestStatus s = statusFilter[i];
202

    
203
				statuses[i] = s.getCode();
204
			}
205
		}
206

    
207
		RequestPage requests = requestDAO.getRequests(fromDate, toDate, requestSortBy, order, requestFilter, term, statuses, from, to);
208
		return requests;
209
	}
210

    
211
	@Override
212
	public Request submitRequest(final Request request) {
213

    
214
		if (request.getBudget() != null) {
215
            Budget budget = request.getBudget();
216

    
217
			Organization organization = budget.getOrganizations().get(0);
218
			if (organization != null)
219
				request.setStatus(Request.RequestStatus.LIBRARY_FUND_SUBMITTED);
220
			else if (budget.getPublisher() != null)
221
				request.setStatus(Request.RequestStatus.PUBLISHER_FUND_SUBMITTED);
222
		} else {
223
			request.setStatus(Request.RequestStatus.SUBMITTED);
224
		}
225
		request.setSubmissiondate(new Timestamp(new Date().getTime()));
226
		request.setEligibility(eligibilityManager.validate(request));
227
		requestDAO.submitRequest(request);
228

    
229

    
230
		final List<User> moderators = userManager.getModerators();
231
		executorService.submit(new Runnable() {
232
			@Override
233
			public void run() {
234
				try {
235
					switch (request.getEligibility().getStatus()) {
236
						case OK:
237
							emailUtils.sendRequesterOKEmail(request);
238
							for (User user : moderators)
239
								emailUtils.sendModeratorOKEmail(request, user);
240
							break;
241
						case IFFY:
242
							emailUtils.sendRequesterIFFYEmail(request);
243
							for (User user : moderators)
244
								emailUtils.sendModeratorIFFYEmail(request, user);
245
							break;
246
						case NONO:
247
							break;
248
					}
249

    
250
					if (Boolean.parseBoolean(sendCoordinatorEmails)) {
251
						for (User  coordinator : request.getProject().getCoordinators())
252
							emailUtils.sendCoordinatorRequestSubmittedEmail(coordinator, request);
253
					}
254
				} catch (MessagingException e) {
255
					e.printStackTrace();
256
				} catch (Exception e) {
257
					e.printStackTrace();
258
				}
259
			}
260
		});
261

    
262
		return request;
263
	}
264

    
265
	@Override
266
	public Request submitLibraryRequest(final Request request) throws PersonManagerException {
267
		request.setStatus(Request.RequestStatus.LIBRARY_FUND_SUBMITTED);
268
		request.setSubmissiondate(new Timestamp(new Date().getTime()));
269

    
270
//		requestDAO.submitRequest(request.getId());
271

    
272
		saveRequest(request);
273

    
274
//		executorService.submit(new Runnable() {
275
//			@Override
276
//			public void run() {
277
//				RequestInfo requestInfo = null;
278
//				try {
279
//					requestInfo = getRequestInfo(request);
280
//
281
//					switch (requestInfo.getEligibility().getStatus()) {
282
//						case OK:
283
//							emailUtils.sendRequesterOKEmail(requestInfo);
284
//
285
//							for (Person person : personManager.getModerators())
286
//								emailUtils.sendModeratorOKEmail(requestInfo, person);
287
//							break;
288
//						case IFFY:
289
//							emailUtils.sendRequesterIFFYEmail(requestInfo);
290
//
291
//							for (Person person : personManager.getModerators())
292
//								emailUtils.sendModeratorIFFYEmail(requestInfo, person);
293
//							break;
294
//						case NONO:
295
//							break;
296
//					}
297
//
298
//					if (sendCoordinatorEmails) {
299
//						for (Person coordinator : requestInfo.getProject().getCoordinators())
300
//							emailUtils.sendCoordinatorRequestSubmittedEmail(coordinator, requestInfo);
301
//					}
302
//				} catch (MessagingException e) {
303
//					e.printStackTrace();
304
//				} catch (PersonManagerException e) {
305
//					e.printStackTrace();
306
//				} catch (Exception e) {
307
//					e.printStackTrace();
308
//				}
309
//			}
310
//		});
311

    
312
		return request;
313
	}
314

    
315
	@Override
316
	public Request submitPublisherRequest(Request request) throws PersonManagerException {
317
        request.setStatus(Request.RequestStatus.PUBLISHER_FUND_SUBMITTED);
318
        request.setSubmissiondate(new Timestamp(new Date().getTime()));
319

    
320
//		requestDAO.submitRequest(request.getId());
321

    
322
		saveRequest(request);
323

    
324
//		executorService.submit(new Runnable() {
325
//			@Override
326
//			public void run() {
327
//				RequestInfo requestInfo = null;
328
//				try {
329
//					requestInfo = getRequestInfo(request);
330
//
331
//					switch (requestInfo.getEligibility().getStatus()) {
332
//						case OK:
333
//							emailUtils.sendRequesterOKEmail(requestInfo);
334
//
335
//							for (Person person : personManager.getModerators())
336
//								emailUtils.sendModeratorOKEmail(requestInfo, person);
337
//							break;
338
//						case IFFY:
339
//							emailUtils.sendRequesterIFFYEmail(requestInfo);
340
//
341
//							for (Person person : personManager.getModerators())
342
//								emailUtils.sendModeratorIFFYEmail(requestInfo, person);
343
//							break;
344
//						case NONO:
345
//							break;
346
//					}
347
//
348
//					if (sendCoordinatorEmails) {
349
//						for (Person coordinator : requestInfo.getProject().getCoordinators())
350
//							emailUtils.sendCoordinatorRequestSubmittedEmail(coordinator, requestInfo);
351
//					}
352
//				} catch (MessagingException e) {
353
//					e.printStackTrace();
354
//				} catch (PersonManagerException e) {
355
//					e.printStackTrace();
356
//				} catch (Exception e) {
357
//					e.printStackTrace();
358
//				}
359
//			}
360
//		});
361

    
362
		return request;
363
	}
364

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

    
375
		final Request request = getById(requestId);
376
		executorService.submit(new Runnable() {
377
			@Override
378
			public void run() {
379
				try {
380
					emailUtils.sendRequesterInitiallyApprovedEmail(request);
381
				} catch (MessagingException e) {
382
					e.printStackTrace();
383
				}
384
			}
385
		});
386
	}
387

    
388
	@Override
389
	public void approveRequest(final String requestId, final String email, final String comment, String template) {
390
		User user = null;
391
		try {
392
			user = userManager.getByEmail(email);
393
		} catch (PersonManagerException e) {
394
			e.printStackTrace();
395
		}
396
		requestDAO.approveRequest(requestId, user, comment, template);
397

    
398
		final Request request = getById(requestId);
399
		executorService.submit(new Runnable() {
400
			@Override
401
			public void run() {
402
				try {
403
					emailUtils.sendRequesterApprovedEmail(request);
404
				} catch (MessagingException e) {
405
					e.printStackTrace();
406
				}
407
				if (request.getInvoice() == null) {
408
					try {
409
						emailUtils.sendRequesterInvoiceNotification(request);
410
						emailUtils.sendPublisherInvoiceNotification(request);
411
					} catch (MessagingException e) {
412
						e.printStackTrace();
413
					}
414
				} else {
415
					try {
416
						for (User user : userManager.getAccountingOfficers())
417
							emailUtils.sendAccountingRequestApprovedEmail(user, request);
418
					} catch (MessagingException e) {
419
						e.printStackTrace();
420
					}
421
				}
422
			}
423
		});
424
	}
425

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

    
448
	@Override
449
	public void processingRequest(final String requestId, String email, String comment, String template) {
450
		User user = null;
451
		try {
452
			user = userManager.getByEmail(email);
453
		} catch (PersonManagerException e) {
454
			e.printStackTrace();
455
		}
456
		requestDAO.processingRequest(requestId, user, comment, template);
457
		final Request request = getById(requestId);
458
		executorService.submit(new Runnable() {
459
			@Override
460
			public void run() {
461
				try {
462
					for (User user : userManager.getModerators())
463
						emailUtils.sendModeratorProcessingEmail(user, request);
464

    
465
				} catch (MessagingException e) {
466
					e.printStackTrace();
467
				}
468
			}
469
		});
470
	}
471

    
472
	@Override
473
	public void paidRequest(final String requestId, String email, String comment, String template, float apc_paid,
474
							float transfer_cost, float other_cost, Date datePaid) {
475
		User user = null;
476
		try {
477
			user = userManager.getByEmail(email);
478
		} catch (PersonManagerException e) {
479
			e.printStackTrace();
480
		}
481

    
482
		requestDAO.paidRequest(requestId, user, comment, template, apc_paid, transfer_cost, other_cost, datePaid);
483
		final Request request = getById(requestId);
484
		executorService.submit(new Runnable() {
485
			@Override
486
			public void run() {
487

    
488
				try {
489
					emailUtils.sendRequesterPaidEmail(request);
490
					emailUtils.sendPublisherPaidEmail(request);
491

    
492
					for (User user : userManager.getModerators())
493
						emailUtils.sendModeratorPaidEmail(user, request);
494

    
495
					if (Boolean.parseBoolean(sendEvaEmail))
496
						emailUtils.sendEvaPaidEmail(evaEmail, request);
497

    
498
				} catch (MessagingException e) {
499
					e.printStackTrace();
500
				}
501
			}
502
		});
503
	}
504

    
505
	@Override
506
	public void paidLibraryRequest(String requestId, String email, String comment, String template, float apc_paid, float transfer_cost, float other_cost, Date datePaid) {
507
		User user = null;
508
		try {
509
			user = userManager.getByEmail(email);
510
		} catch (PersonManagerException e) {
511
			e.printStackTrace();
512
		}
513
		requestDAO.paidLibraryRequest(requestId, user, comment, template, apc_paid, transfer_cost, other_cost, datePaid);
514

    
515
//		executorService.submit(new Runnable() {
516
//			@Override
517
//			public void run() {
518
//				RequestInfo requestInfo = getById(requestId);
519
//
520
//				try {
521
//					emailUtils.sendRequesterPaidEmail(requestInfo);
522
//					emailUtils.sendPublisherPaidEmail(requestInfo);
523
//
524
//					for (Person person : personManager.getModerators())
525
//						emailUtils.sendModeratorPaidEmail(person, requestInfo);
526
//
527
//					if (sendEvaEmail)
528
//						emailUtils.sendEvaPaidEmail(evaEmail, requestInfo);
529
//
530
//				} catch (MessagingException e) {
531
//					e.printStackTrace();
532
//				}
533
//			}
534
//		});
535
	}
536

    
537
	@Override
538
	public void paidPublisherRequest(String requestId, String email, String comment,
539
									 String template, float apc_paid, float transfer_cost, float other_cost, Date datePaid) {
540
		User user = null;
541
		try {
542
			user = userManager.getByEmail(email);
543
		} catch (PersonManagerException e) {
544
			e.printStackTrace();
545
		}
546
		requestDAO.paidPublisherRequest(requestId, user, comment, template, apc_paid, transfer_cost, other_cost, datePaid);
547

    
548
		//		executorService.submit(new Runnable() {
549
//			@Override
550
//			public void run() {
551
//				RequestInfo requestInfo = getById(requestId);
552
//
553
//				try {
554
//					emailUtils.sendRequesterPaidEmail(requestInfo);
555
//					emailUtils.sendPublisherPaidEmail(requestInfo);
556
//
557
//					for (Person person : personManager.getModerators())
558
//						emailUtils.sendModeratorPaidEmail(person, requestInfo);
559
//
560
//					if (sendEvaEmail)
561
//						emailUtils.sendEvaPaidEmail(evaEmail, requestInfo);
562
//
563
//				} catch (MessagingException e) {
564
//					e.printStackTrace();
565
//				}
566
//			}
567
//		});
568
	}
569

    
570
	@Override
571
	public void onHoldRequest(final String requestId, String email, String comment, String template) {
572
		User user = null;
573
		try {
574
			user = userManager.getByEmail(email);
575
		} catch (PersonManagerException e) {
576
			e.printStackTrace();
577
		}
578
		requestDAO.onHoldRequest(requestId, user, comment, template);
579

    
580
		final Request request = getById(requestId);
581
		executorService.submit(new Runnable() {
582
			@Override
583
			public void run() {
584
				try {
585
					emailUtils.sendRequesterOnHoldEmail(request);
586
					emailUtils.sendPublisherOnHoldEmail(request);
587

    
588
					for (User user : userManager.getModerators())
589
						emailUtils.sendModeratorOnHoldEmail(user, request);
590
				} catch (MessagingException e) {
591
					e.printStackTrace();
592
				}
593
			}
594
		});
595
	}
596

    
597
	@Override
598
	public void deniedRequest(final String requestId, String email, String comment, String template) {
599
		User user = null;
600
		try {
601
			user = userManager.getByEmail(email);
602
		} catch (PersonManagerException e) {
603
			e.printStackTrace();
604
		}
605
		requestDAO.deniedRequest(requestId, user, comment, template);
606
		final Request request = getById(requestId);
607
		executorService.submit(new Runnable() {
608
			@Override
609
			public void run() {
610
				try {
611
					emailUtils.sendRequesterDeniedEmail(request);
612
					emailUtils.sendPublisherDeniedEmail(request);
613

    
614
					for (User user : userManager.getModerators())
615
						emailUtils.sendModeratorDeniedEmail(user, request);
616
				} catch (MessagingException e) {
617
					e.printStackTrace();
618
				}
619
			}
620
		});
621
	}
622

    
623
	@Override
624
	public Invoice invoiceUploaded(final String requestId, String invoiceId) throws ManagerException {
625

    
626
		final Request request = getById(requestId);
627

    
628
		final List<User> moderators = userManager.getModerators();
629
		executorService.submit(new Runnable() {
630
			@Override
631
			public void run() {
632
				if (request.getStatus() == Request.RequestStatus.CONDITIONALLY_APPROVED) {
633
					try {
634
						for (User user : moderators)
635
							emailUtils.sendModeratorInvoiceUploaded(user, request);
636
					} catch (MessagingException e) {
637
						e.printStackTrace();
638
					}
639
				}
640
			}
641
		});
642
		return invoiceManager.getInvoice(invoiceId);
643
	}
644

    
645
	@Override
646
	public void uploadTransferReceipt(String requestid, String contentType, InputStream inputStream) {
647
		requestDAO.uploadBankTransferReceipt(requestid, contentType, inputStream);
648
	}
649

    
650

    
651
	public BankTransferReceipt downloadBankTransferReceipt(String requestId) throws RequestManagerException {
652
		try {
653
			return requestDAO.downloadBankTransferReceipt(requestId);
654
		} catch (EmptyResultDataAccessException e) {
655
			throw new RequestManagerException(RequestManagerException.ErrorCause.NOT_EXISTS);
656
		}
657
	}
658

    
659

    
660
	public List<CommentTemplate> getCommentTemplates(Request.RequestStatus requestStatus) {
661
		try {
662
			return requestDAO.getCommentTemplates(requestStatus);
663
		} catch (EmptyResultDataAccessException e) {
664
			return new ArrayList<CommentTemplate>();
665
		}
666
	}
667

    
668
	@Override
669
	@Transactional(propagation = Propagation.REQUIRED , rollbackFor = {PersonManagerException.class,
670
			 ManagerException.class,ParseException.class,Exception.class})
671
	public void importCSV(String csv) throws PersonManagerException, ManagerException, ParseException, OrganizationManagerException {
672

    
673
		String linesWithHeader[] = csv.split("\\r?\\n");
674
		String lines[] = Arrays.copyOfRange(linesWithHeader,1,linesWithHeader.length);
675
		for(String str : lines){
676

    
677
			LOGGER.debug("Importing line from csv -> " + str);
678

    
679
			String line[] = str.split(",");
680

    
681
			String firstname = !line[0].equals("")?line[0].trim():null;
682
			String lastname = !line[1].equals("")?line[1].trim():null;
683
			String organization = !line[2].equals("")?line[2].trim():null;
684
			String email = !line[3].equals("")?line[3].trim():null;
685

    
686
			String grant = !line[4].equals("")?line[4].trim():null;
687
			String doi = !line[5].equals("")?line[5].trim():null;
688
			String acceptanceDate = !line[6].equals("")?line[6].trim():null;
689
			String identifierType = !line[7].equals("")?line[7].trim():null;
690
			String identifierValue = !line[8].equals("")?line[8].trim():null;
691
			String apc = !line[9].equals("")?line[9].trim():"0";
692
			String apcCurrency = !line[10].equals("")?line[10].trim():null;
693
			String discount = !line[11].equals("")?line[11].trim():null;
694
			String status = line.length>12?line[12].trim():"0";
695

    
696
			LOGGER.debug(discount + "/" + status);
697

    
698
			importRequestFromCSV(firstname,lastname,organization,email,
699
					grant,doi,acceptanceDate, identifierType,
700
					identifierValue,apc, apcCurrency,discount,status);
701
		}
702
	}
703

    
704

    
705

    
706

    
707
	private void importRequestFromCSV(String firstname, String lastname, String organization, String email, String grant,
708
									  String doi, String acceptanceDate,
709
									  String identifierType, String identifierValue,
710
									  String apc, String apcCurrency, String discount, String status)
711
			throws PersonManagerException, ParseException, ManagerException, OrganizationManagerException {
712

    
713
		List<Object> orgs =  organizationManager.search(organization);
714
		if(orgs == null){
715
			LOGGER.debug("Organization " + organization +  "  not exists!");
716
			//org = organizationManager.createOrganization(organization);
717
		}
718
		Organization org = (Organization) organizationManager.search(organization).get(0);
719

    
720
		User user = null;
721
		try {
722
			user  = userManager.getByEmail(email);
723
		} catch (PersonManagerException e) {
724
			LOGGER.debug("User with email : " + email + " not exists!");
725
			LOGGER.debug("Creating new inactive user with default password!");
726
			user = userManager.createInActiveResearcher(firstname,lastname,email,org);
727
		}
728

    
729
		List<Object> rs = projectManager.search(grant);
730
		Project project = null;
731
		if(rs.size() == 0) {
732
			LOGGER.debug("Project with specified grant("+grant+") not found!");
733
			throw new ManagerException("Project with specified grant("+grant+") not found!");
734
		}else
735
			project = (Project) rs.get(0);
736

    
737
		Publication publication = null;
738
		try {
739
			LOGGER.debug("Resolving doi...");
740
			publication = publicationManager.resolveDOI(doi);
741
		} catch (ManagerException e) {
742
			LOGGER.debug("Requested doi("+doi+") not found!" , e);
743
			throw new ManagerException("Requested doi("+doi+") not found!");
744
		}
745

    
746

    
747
		if(publication.getJournal()!=null && publication.getJournal().getPublisher()!=null) {
748
			LOGGER.debug("publisher not null!");
749
			publisherManager.savePublisher(publication.getJournal().getPublisher());
750
		}else if(publication.getPublisher()!=null)
751
			publisherManager.savePublisher(publication.getPublisher());
752

    
753
		LOGGER.debug(publication.getJournal().getPublisher().getName());
754
		if ( publicationManager.getPublication(publication.getId())  == null )
755
			publicationManager.savePublication(publication);
756

    
757

    
758
		Request request = requestDAO.getRequestFromCSV(user,project,publication,org,
759
				acceptanceDate, identifierType,identifierValue,apc, apcCurrency,discount,status);
760

    
761
		request.setId("L" + new SimpleDateFormat("yyyyMMdd-").format(new Date()) + requestDAO.getRequestId());
762
		request.setEligibility(Eligibility.OK);
763

    
764

    
765
		if(!request.getEligibility().getStatus().equals(Eligibility.Status.OK))
766
			throw new ManagerException("Request for project "+grant+" is not eligible!");
767
		requestDAO.saveRequest(request);
768
		LOGGER.debug(request.getPublication().getType());
769
	}
770

    
771

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

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

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

    
787
	@Override
788
	public Float getTotalAmount() {
789
		return requestDAO.getTotalAmount();
790
	}
791

    
792
	@Override
793
	public Double getAverageAmount() {
794
		return requestDAO.getAverageAmount();
795
	}
796

    
797
	@Override
798
	public Double getAverageAmountPerBookChapter() {
799
		return requestDAO.getAverageAmountPerBookChapter();
800
	}
801

    
802
	@Override
803
	public Double getAverageAmountPerMonograph() {
804
		return requestDAO.getAverageAmountPerMonograph();
805
	}
806

    
807
	@Override
808
	public Double getAverageAmountPbooleanerMonograph() {
809
		return requestDAO.getAverageAmountPerMonograph();
810
	}
811

    
812
	@Override
813
	public Double getAverageAmountPerArticle() {
814
		return requestDAO.getAverageAmountPerArticle();
815
	}
816

    
817
	@Override
818
	public BigInteger getNumberOfPaidPublicationPerArticle() {
819
		return requestDAO.getNumberOfPaidPublicationPerArticle();
820
	}
821

    
822
	@Override
823
	public BigInteger getNumberOfPaidPublicationPerMonograph() {
824
		return requestDAO.getNumberOfPaidPublicationPerMonograph();
825
	}
826

    
827
	@Override
828
	public BigInteger getNumberOfPaidPublicationPerBookChapter() {
829
		return requestDAO.getNumberOfPaidPublicationPerBookChapter();
830
	}
831

    
832

    
833
	@Override
834
	public BigInteger getNumberOfPaidRequestsWithDOI() {
835
		return requestDAO.getNumberOfPaidRequestsWithDOI();
836
	}
837

    
838
	@Override
839
	public BigInteger getNumberOfApprovedRequestsWithDOI() {
840
		return requestDAO.getNumberOfApprovedRequestsWithDOI();
841
	}
842

    
843
	public String isSendCoordinatorEmails() {
844
		return sendCoordinatorEmails;
845
	}
846

    
847
	public void setSendCoordinatorEmails(String sendCoordinatorEmails) {
848
		this.sendCoordinatorEmails = sendCoordinatorEmails;
849
	}
850

    
851
	public String isSendEvaEmail() {
852
		return sendEvaEmail;
853
	}
854

    
855
	public void setSendEvaEmail(String sendEvaEmail) {
856
		this.sendEvaEmail = sendEvaEmail;
857
	}
858

    
859
	public String getEvaEmail() {
860
		return evaEmail;
861
	}
862

    
863
	public void setEvaEmail(String evaEmail) {
864
		this.evaEmail = evaEmail;
865
	}
866

    
867
	@Override
868
	public List<Request> getPendingRequestsByStatus(int status) {
869
		return requestDAO.getPendingRequestsByStatus(status);
870
	}
871

    
872
	@Override
873
	public void sendEmailForPendingIncompleteRequests(){
874

    
875
		if(Boolean.parseBoolean(pendingemails)) {
876
			List<Request> pendingRequests = getPendingRequestsByStatus(Request.RequestStatus.INCOMPLETE.getCode());
877
			int counter = 1;
878
			for (Request r : pendingRequests) {
879
                if(counter > 54) {
880
                    try {
881
                        LOGGER.debug("Send email " + counter + " of " + pendingRequests.size());
882
                        emailUtils.sendEmailForPendingIncompleteRequests(r);
883
                    } catch (MessagingException e) {
884
                        LOGGER.debug(e);
885
                    }
886
                }
887
                counter++;
888
			}
889
		}
890
		else{
891
			List<Request> pendingRequests = getPendingRequestsByStatus(Request.RequestStatus.INCOMPLETE.getCode());
892
			Request r = pendingRequests.get(0);
893
			LOGGER.debug("Sending email for debug.");
894
		}
895

    
896
	}
897

    
898
	@Override
899
	public void sendEmailForPendingConditionallyApprovedRequests() {
900
		if(Boolean.parseBoolean(pendingemails)) {
901
			List<Request> pendingRequests = getPendingRequestsByStatus(Request.RequestStatus.CONDITIONALLY_APPROVED.getCode());
902
			int counter = 1;
903
			for (Request r : pendingRequests) {
904
				LOGGER.debug("Send email " + counter + " of " + pendingRequests.size());
905
                try {
906
                    emailUtils.sendEmailForPendingConditionallyApprovedRequests(r);
907
                } catch (MessagingException e) {
908
                    LOGGER.debug(e);
909
                }
910

    
911
				counter++;
912
			}
913
		}
914
		else{
915
			List<Request> pendingRequests= getPendingRequestsByStatus(Request.RequestStatus.CONDITIONALLY_APPROVED.getCode());
916
			Request r = pendingRequests.get(0);
917
			LOGGER.debug("Sending email for debug.");
918
		}
919
	}
920

    
921

    
922
}
(30-30/35)