Project

General

Profile

1
/*
2
package eu.dnetlib.goldoa.service;
3

    
4
import eu.dnetlib.goldoa.domain.Budget;
5
import eu.dnetlib.goldoa.domain.Comment;
6
import eu.dnetlib.goldoa.domain.ManagerException;
7
import eu.dnetlib.goldoa.domain.OrganizationManagerException;
8
import eu.dnetlib.goldoa.domain.User;
9
import eu.dnetlib.goldoa.domain.PersonManagerException;
10
import eu.dnetlib.goldoa.service.dao.BudgetDAO;
11
import eu.dnetlib.goldoa.service.utils.EmailUtils;
12
import org.springframework.beans.factory.annotation.Autowired;
13
import org.springframework.transaction.annotation.Transactional;
14

    
15
import java.io.InputStream;
16
import java.text.SimpleDateFormat;
17
import java.util.ArrayList;
18
import java.util.Arrays;
19
import java.util.Date;
20
import java.util.List;
21
import java.util.UUID;
22
import java.util.concurrent.ExecutorService;
23

    
24
*/
25
/**
26
 * Created by antleb on 4/2/15.
27
 *//*
28

    
29
@Transactional
30
public class BudgetManagerImpl implements BudgetManager {
31

    
32
	@Autowired private BudgetDAO budgetDAO;
33
	@Autowired private UserManager userManager;
34
	@Autowired private OrganizationManager organizationManager;
35
	@Autowired private PublisherManager publisherManager;
36
	@Autowired private InvoiceManager invoiceManager;
37
	@Autowired private ExecutorService executorService;
38
	@Autowired private EmailUtils emailUtils;
39

    
40
	@Override
41
	public Budget saveBudget(final Budget budget) {
42
		
43
		if(budget.getId() == null){
44
			//getRequestId
45
			budget.setId("B-" + new SimpleDateFormat("yyyyMMdd-").format(new Date()) + budgetDAO.getRequestId());
46
			budget.setDate(new Date());
47
			budget.setRemaining(budget.getAmountGranted());
48
		}
49
		budgetDAO.saveBudget(budget);
50
		return budget;
51
	}
52

    
53
	@Override
54
	public Budget submitBudgetRequest(final Budget budget) {
55
		budget.setStatusCode(Budget.Status.SUBMITTED.getCode());
56

    
57
		saveBudget(budget);
58

    
59
		executorService.submit(new Runnable() {
60
			@Override
61
			public void run() {
62
				try {
63
					
64
					List<User> moderators = userManager.getModerators();
65
					emailUtils.sendUserNewBudgetEmail(budget);
66

    
67
					for (User moderator : moderators)
68
						emailUtils.sendModeratorNewBudgetEmail(moderator, budget);
69

    
70
				} catch (Exception e) {
71
					e.printStackTrace();
72
				}
73
			}
74
		});
75

    
76
		return budget;
77
	}
78

    
79
	@Override
80
	public Budget getBudget(String budgetId) {
81
		return budgetDAO.getBudget(budgetId);
82
	}
83

    
84
	@Override
85
	public List<Budget> getBudgets() {
86
		return budgetDAO.getBudgets();		
87
	}
88

    
89
	@Override
90
	public List<Budget> getBudgetsForUser(String user_email) {
91
		return budgetDAO.getBudgetsForUser(user_email);
92
	}
93

    
94
	@Override
95
	public List<Budget> getBudgetsForPublisher(String publisherId) {
96
		return budgetDAO.getBudgetsForPublisher(publisherId);
97
	}
98

    
99
	@Override
100
	public List<Budget> getBudgetsForAccounting() {
101
		return budgetDAO.getBudgetsForAccounting();
102
	}
103

    
104
	@Override
105
	public List<Budget> getBudgetsForOrganization(List<String> organizationIds) {
106
		return budgetDAO.getBudgetsForOrganization(organizationIds);
107
	}
108

    
109
	@Override
110
	public void initiallyApproveBudgetRequest(final String budgetId, String comment, String personId) {
111
		budgetDAO.initiallyApproveBudget(budgetId);
112
		budgetDAO.saveComment(budgetId, personId, comment, null);
113

    
114
		executorService.submit(new Runnable() {
115
			@Override
116
			public void run() {
117
				try {
118
					List<User> moderators = userManager.getModerators();
119
					Budget budget = budgetDAO.getBudget(budgetId);
120
					emailUtils.sendUserAcceptedBudgetEmail(budget);
121

    
122
					for (User moderator : moderators)
123
						emailUtils.sendModeratorAcceptedBudgetEmail(moderator, budget);
124

    
125
				} catch (Exception e) {
126
					e.printStackTrace();
127
				}
128
			}
129
		});
130
	}
131

    
132
	@Override
133
	public void approveBudgetRequest(final String budgetId, String comment, float amountGranted, String personId) {
134
		budgetDAO.approveBudget(budgetId, amountGranted);
135
		budgetDAO.saveComment(budgetId, personId, comment, null);
136

    
137
		executorService.submit(new Runnable() {
138
			@Override
139
			public void run() {
140
				try {
141
					Budget budget = budgetDAO.getBudget(budgetId);
142
					List<User> moderators = userManager.getModerators();
143
					emailUtils.sendUserAcceptedBudgetEmail(budget);
144

    
145
					for (User moderator : moderators)
146
						emailUtils.sendModeratorAcceptedBudgetEmail(moderator, budget);
147

    
148
				} catch (Exception e) {
149
					e.printStackTrace();
150
				}
151
			}
152
		});
153
	}
154

    
155
	@Override
156
	public void rejectBudgetRequest(final String budgetId, String comment, String personId) {
157
		budgetDAO.rejectBudget(budgetId);
158
//		budgetDAO.updateBudgetComment(budgetId, comment);
159
		budgetDAO.saveComment(budgetId, personId, comment, null);
160

    
161
		executorService.submit(new Runnable() {
162
			@Override
163
			public void run() {
164
				try {
165
					List<User> moderators = userManager.getModerators();
166
					Budget budget = budgetDAO.getBudget(budgetId);
167
					emailUtils.sendUserRejectedBudgetEmail(budget);
168

    
169
					for (User moderator : moderators)
170
						emailUtils.sendModeratorRejectedBudgetEmail(moderator, budget);
171

    
172
				} catch (Exception e) {
173
					e.printStackTrace();
174
				}
175
			}
176
		});
177
	}
178

    
179
	@Override
180
	public void processingPayment(final String budgetId, String comment, String personId) {
181
		budgetDAO.processingBudget(budgetId);
182
		budgetDAO.saveComment(budgetId, personId, comment, null);
183

    
184
		executorService.submit(new Runnable() {
185
			@Override
186
			public void run() {
187
				try {
188
					List<User> moderators = userManager.getModerators();
189
					Budget budget = budgetDAO.getBudget(budgetId);
190
					emailUtils.sendUserRejectedBudgetEmail(budget);
191

    
192
					for (User moderator : moderators)
193
						emailUtils.sendModeratorRejectedBudgetEmail(moderator, budget);
194

    
195
				} catch (Exception e) {
196
					e.printStackTrace();
197
				}
198
			}
199
		});
200
	}
201

    
202
	@Override
203
	public void denyPayment(final String budgetId, String comment, String personId) {
204
		budgetDAO.accountingDeniedBudget(budgetId);
205
		budgetDAO.saveComment(budgetId, personId, comment, null);
206

    
207
		executorService.submit(new Runnable() {
208
			@Override
209
			public void run() {
210
				try {
211
					List<User> moderators = userManager.getModerators();
212
					Budget budget = budgetDAO.getBudget(budgetId);
213
					emailUtils.sendUserRejectedBudgetEmail(budget);
214

    
215
					for (User moderator : moderators)
216
						emailUtils.sendModeratorRejectedBudgetEmail(moderator, budget);
217

    
218
				} catch (Exception e) {
219
					e.printStackTrace();
220
				}
221
			}
222
		});
223
	}
224

    
225
	@Override
226
	public void onHoldPayment(final String budgetId, String comment, String personId) {
227
		budgetDAO.accountingOnHoldBudget(budgetId);
228
		budgetDAO.saveComment(budgetId, personId, comment, null);
229

    
230
		executorService.submit(new Runnable() {
231
			@Override
232
			public void run() {
233
				try {
234
					List<User> moderators = userManager.getModerators();
235
					Budget budget = budgetDAO.getBudget(budgetId);
236
					emailUtils.sendUserRejectedBudgetEmail(budget);
237

    
238
					for (User moderator : moderators)
239
						emailUtils.sendModeratorRejectedBudgetEmail(moderator, budget);
240

    
241
				} catch (Exception e) {
242
					e.printStackTrace();
243
				}
244
			}
245
		});
246
	}
247

    
248
	@Override
249
	public void budgetPaid(final String budgetId, String comment, String personId) {
250
		budgetDAO.accountingPaidBudget(budgetId);
251
		budgetDAO.saveComment(budgetId, personId, comment, null);
252

    
253
		executorService.submit(new Runnable() {
254
			@Override
255
			public void run() {
256
				try {
257
					Budget budget = budgetDAO.getBudget(budgetId);
258
					List<User> moderators = userManager.getModerators();
259
					emailUtils.sendUserRejectedBudgetEmail(budget);
260

    
261
					for (User moderator : moderators)
262
						emailUtils.sendModeratorRejectedBudgetEmail(moderator, budget);
263

    
264
				} catch (Exception e) {
265
					e.printStackTrace();
266
				}
267
			}
268
		});
269
	}
270

    
271
	@Override
272
	public void uploadInitialContract(String budgetId, String contentType, InputStream inputStream) {
273
		budgetDAO.uploadInitialContract(budgetId, contentType, inputStream);
274
	}
275

    
276
	@Override
277
	public void uploadBeneficiaryContract(String budgetId, String contentType, InputStream inputStream) {
278
		budgetDAO.uploadBeneficiaryContract(budgetId, contentType, inputStream);
279
	}
280

    
281
	@Override
282
	public void uploadSignedContract(String budgetId, String contentType, InputStream inputStream) {
283
		budgetDAO.uploadSignedContract(budgetId, contentType, inputStream);
284
	}
285

    
286
	@Override
287
	public void uploadBankReceipt(String budgetId, String contentType, InputStream inputStream) {
288
		budgetDAO.uploadBankReceipt(budgetId, contentType, inputStream);
289
	}
290

    
291
	@Override
292
	public Budget getForRequest(String organizationId, String publisherId) {
293
		List<Budget> budgets;
294
		Budget res = null;
295

    
296
		if (organizationId != null) {
297
			budgets = getBudgetsForOrganization(Arrays.asList(organizationId));
298

    
299
			for (Budget budget : budgets) {
300
				if (isValid(budget)) {
301
					res = budget;
302

    
303
					break;
304
				}
305
			}
306
		} else if (publisherId != null) {
307
			budgets = getBudgetsForPublisher(publisherId);
308

    
309
			for (Budget budget : budgets) {
310
				if (isValid(budget)) {
311
					res = budget;
312

    
313
					break;
314
				}
315
			}
316
		}
317

    
318
		return res;
319
	}
320

    
321
	private boolean isValid(Budget budget) {
322
		//TODO fix me!
323
		return budget.getStatus().equals(Budget.Status.ACCOUNTING_PAID);
324
	}
325

    
326

    
327
//	private Budget getBudget(Budget budget) {
328
//		BudgetInfo budgetInfo = new BudgetInfo();
329
//
330
//		budgetInfo.setId(budget.getId());
331
//		budgetInfo.setDate(budget.getDate());
332
//		budgetInfo.setStartDate(budget.getStartDate());
333
//		budgetInfo.setEndDate(budget.getEndDate());
334
//		budgetInfo.setAmountGranted(budget.getAmountGranted());
335
//		budgetInfo.setAmountRequested(budget.getAmountRequested());
336
//		budgetInfo.setRemaining(budget.getRemaining());
337
//		budgetInfo.setCurrency(budget.getCurrency());
338
//		budgetInfo.setStatusCode(budget.getStatusCode());
339
//		budgetInfo.setStatus(getStatus(budget.getStatusCode()));
340
//		budgetInfo.setComments(budgetDAO.getBudgetComments(budget.getId()));
341
//		budgetInfo.setBankAccount(budget.getBankAccount());
342
//
343
//		if (budget.getUser() != null) {
344
//			try {
345
//				budgetInfo.setUser(personManager.getById(budget.getUser()));
346
//			} catch (PersonManagerException e) {
347
//				e.printStackTrace();
348
//			}
349
//		}
350
//
351
//		if (budget.getOrganisation() != null) {
352
//			try {
353
//				budgetInfo.setOrganisation(organizationManager.getById(budget.getOrganisation()));
354
//			} catch (OrganizationManagerException e) {
355
//				e.printStackTrace();
356
//			}
357
//		}
358
//
359
//		if (budget.getPublisher() != null) {
360
//			budgetInfo.setPublisher(publisherManager.getPublisher(budget.getPublisher()));
361
//		}
362
//
363
//		if (budget.getInvoice() != null)
364
//			try {
365
//				budgetInfo.setInvoice(invoiceManager.getInvoice(budget.getInvoice()));
366
//			} catch (ManagerException e) {
367
//				e.printStackTrace();
368
//			}
369
//
370
//		for (Comment c: budgetInfo.getComments()) {
371
//			try {
372
//				c.setPerson(personManager.getById(c.getPerson().getId()));
373
//			} catch (PersonManagerException e) {
374
//				e.printStackTrace();
375
//			}
376
//		}
377
//
378
//		return budgetInfo;
379
//	}
380

    
381
	private Budget.Status getStatus(int statusCode) {
382
		return Budget.Status.forStatus(statusCode);
383
	}
384
}
385
*/
(2-2/29)