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.codec.digest.DigestUtils;
7
import org.springframework.beans.factory.annotation.Autowired;
8
import org.springframework.jdbc.core.JdbcTemplate;
9
import org.springframework.jdbc.core.RowMapper;
10
import org.springframework.transaction.annotation.Transactional;
11

    
12
import javax.mail.MessagingException;
13
import javax.sql.DataSource;
14
import java.sql.ResultSet;
15
import java.sql.SQLException;
16
import java.sql.Types;
17
import java.text.SimpleDateFormat;
18
import java.util.ArrayList;
19
import java.util.Date;
20
import java.util.List;
21
import java.util.concurrent.ExecutorService;
22

    
23
/**
24
 * Created by antleb on 3/10/15.
25
 */
26
@Transactional
27
public class RequestManagerImpl implements RequestManager {
28

    
29
    @Autowired
30
    private RequestDAO requestDAO;
31
    @Autowired
32
    private PersonManager personManager;
33
    @Autowired
34
    private OrganizationManager organizationManager;
35
    @Autowired
36
    private ProjectManager projectManager;
37
    @Autowired
38
    private PublicationManager publicationManager;
39
    @Autowired
40
    private InvoiceManager invoiceManager;
41
    @Autowired
42
    private EligibilityManager eligibilityManager;
43
    @Autowired
44
    private EmailUtils emailUtils;
45
    @Autowired
46
    private ExecutorService executorService;
47

    
48
	@Override
49
	public Request saveRequest(final Request request) {
50

    
51
		if (request.getId() == null) {
52
			request.setId(new SimpleDateFormat("yyyyMMdd-").format(new Date()) + requestDAO.getRequestId());
53
		}
54

    
55
        if (request.getInvoice() != null)
56
            request.addStatus(Request.RequestStatus.INVOICE_UPLOADED);
57

    
58
        requestDAO.saveRequest(request);
59

    
60
		return request;
61
	}
62

    
63
	@Override
64
	public RequestInfo getById(String requestId) {
65
        try {
66
            return this.getRequestInfo(requestDAO.getRequest(requestId));
67
        } catch (PersonManagerException e) {
68
            e.printStackTrace();
69
        }
70

    
71
        return null;
72
	}
73

    
74
    @Override
75
    public List<RequestInfo> getForUser(String personId, Date from, Date to, RequestSort requestSortBy, RequestSortOrder order, RequestFilter requestFilter, String term, Request.RequestStatus statusFilter) {
76
        List<Request> requests = requestDAO.getForUser(personId, from, to, requestSortBy, order, requestFilter, term, statusFilter, 0, 0);
77
        List<RequestInfo> res = new ArrayList<RequestInfo>();
78

    
79
        for (Request request:requests) {
80
            try {
81
                RequestInfo req = getShortRequestInfo(request);
82

    
83
                res.add(req);
84
            } catch (Exception e) {
85
                e.printStackTrace();
86
            }
87
        }
88

    
89
        return res;
90
    }
91

    
92
	@Override
93
	public List<Request> getForProject(String projectId) {
94
		return requestDAO.getForProject(projectId);
95
	}
96

    
97
    @Override
98
    public List<RequestInfo> getRequests(Date from, Date to, RequestSort requestSortBy, RequestSortOrder order, RequestFilter requestFilter, String term, Request.RequestStatus statusFilter) {
99
        List<Request> requests = requestDAO.getRequests(from, to, requestSortBy, order, requestFilter, term, statusFilter, 0, 0);
100
        List<RequestInfo> res = new ArrayList<RequestInfo>();
101

    
102
        for (Request request:requests) {
103
            try {
104
                RequestInfo req = getShortRequestInfo(request);
105

    
106
                res.add(req);
107
            } catch (Exception e) {
108
                e.printStackTrace();
109
            }
110
        }
111

    
112
        return res;
113
    }
114

    
115
    @Override
116
    public Request submitRequest(Request request) throws PersonManagerException {
117

    
118
        request.addStatus(Request.RequestStatus.SUBMITTED);
119

    
120
        saveRequest(request);
121

    
122

    
123
        // TODO offline
124
        RequestInfo requestInfo = this.getRequestInfo(request);
125

    
126
        try {
127
            switch (requestInfo.getEligibility().getStatus()) {
128
                case OK:
129
                    emailUtils.sendRequesterOKEmail(requestInfo);
130

    
131
                    for (Person person : personManager.getModerators())
132
                        emailUtils.sendModeratorOKEmail(requestInfo, person);
133
                    break;
134
                case IFFY:
135
                    emailUtils.sendRequesterIFFYEmail(requestInfo);
136

    
137
                    for (Person person : personManager.getModerators())
138
                        emailUtils.sendModeratorIFFYEmail(requestInfo, person);
139
                    break;
140
                case NONO:
141
                    break;
142
            }
143
        } catch (MessagingException e) {
144
            e.printStackTrace();
145
        }
146

    
147
        return request;
148
    }
149

    
150
    @Override
151
    public void approveRequest(String requestId, String comment) {
152
        requestDAO.approveRequest(requestId, comment);
153

    
154
        RequestInfo requestInfo = getById(requestId);
155

    
156
        try {
157
            emailUtils.sendRequesterApprovedEmail(requestInfo);
158
        } catch (MessagingException e) {
159
            e.printStackTrace();
160
        }
161
    }
162

    
163
    @Override
164
    public void rejectRequest(String requestId, String comment) {
165
        requestDAO.rejectRequest(requestId, comment);
166

    
167
        RequestInfo requestInfo = getById(requestId);
168

    
169
        try {
170
            emailUtils.sendRequesterRejectedEmail(requestInfo);
171
        } catch (MessagingException e) {
172
            e.printStackTrace();
173
        }
174
    }
175

    
176
    @Override
177
    public void invoiceUploaded(String requestId) {
178
        requestDAO.invoiceUploaded(requestId);
179
    }
180

    
181
    private Request.RequestStatus getStatus(Request request) {
182
        if (request.getStatus(Request.RequestStatus.SUBMITTED)) {
183
            if (request.getStatus(Request.RequestStatus.APPROVED))
184
                return  Request.RequestStatus.APPROVED;
185
            else if (request.getStatus(Request.RequestStatus.REJECTED))
186
                return Request.RequestStatus.REJECTED;
187
            else
188
                return Request.RequestStatus.SUBMITTED;
189
        }
190
        else
191
            return Request.RequestStatus.INCOMPLETE;
192
    }
193

    
194

    
195

    
196
    private RequestInfo getRequestInfo(Request request) throws PersonManagerException {
197
        RequestInfo req = new RequestInfo();
198

    
199
        // TODO add missing fields
200
        req.setId(request.getId());
201
        req.setUser(personManager.getById(request.getUser()));
202
        req.setDate(request.getDate());
203
        req.setResearcher(personManager.getById(request.getResearcher()));
204
        req.setProject(projectManager.getById(request.getProject()));
205
        req.setPublication(publicationManager.getPublication(request.getPublication()));
206
        req.setProjectParticipation(request.getProjectParticipation());
207
        req.setFundingRequested(request.getFundingRequested());
208
        req.setEligibility(eligibilityManager.validate(request));
209
        req.setStatus(getStatus(request));
210

    
211
        return req;
212
    }
213

    
214
    private RequestInfo getShortRequestInfo(Request request) throws PersonManagerException {
215
        RequestInfo req = new RequestInfo();
216

    
217
        // TODO add missing fields
218
        req.setId(request.getId());
219
        req.setDate(request.getDate());
220
        req.setPublication(publicationManager.getPublication(request.getPublication()));
221
        req.setProjectParticipation(request.getProjectParticipation());
222
        req.setFundingRequested(request.getFundingRequested());
223

    
224
        req.setStatus(getStatus(request));
225

    
226
        return req;
227
    }
228
}
(21-21/24)