Project

General

Profile

1
package eu.dnetlib.goldoa.service.eligibility;
2

    
3
import eu.dnetlib.goldoa.domain.Eligibility;
4
import eu.dnetlib.goldoa.domain.Project;
5
import eu.dnetlib.goldoa.domain.Request;
6
import eu.dnetlib.goldoa.service.EligibilityManager;
7
import eu.dnetlib.goldoa.service.ProjectManager;
8
import eu.dnetlib.goldoa.service.RequestManager;
9
import org.springframework.beans.factory.annotation.Autowired;
10
import org.springframework.stereotype.Component;
11

    
12
import java.util.Date;
13
import java.util.List;
14

    
15
/*
16
 * Created by antleb on 3/9/15.
17
*/
18
@Component(value = "projectEligibilityManager")
19
public class ProjectEligibiliyManager implements EligibilityManager {
20

    
21
	@Autowired
22
	private ProjectManager projectManager;
23
	@Autowired
24
	private RequestManager requestManager;
25

    
26
	private long expirationOk;
27
	private float expirationThreshold;
28
	private String expirationIffy;
29
	private String expirationNono;
30
	private String stillRunningNono;
31

    
32
	private int maxRequests;
33
	private String maxRequestsNono;
34

    
35
	@Override
36
	public Eligibility validate(Request request) {
37
		Eligibility eligibility = new Eligibility();
38

    
39
		if (request.getProject() != null) {
40
			Project project = request.getProject();
41

    
42
			eligibility.merge(validateExpirationDate(project));
43
			eligibility.merge(validateNumberOfRequests(project));
44
		}
45
		return eligibility;
46
	}
47

    
48
	private Eligibility validateNumberOfRequests(Project project) {
49
		List<Request> requests = requestManager.getForProject(project.getId());
50
		int completed = 0;
51

    
52
		for (Request request : requests) {
53
			switch (request.getStatus()) {
54
				case CONDITIONALLY_APPROVED:
55
				case APPROVED:
56
				case ACCOUNTING_PROCESSING:
57
				case ACCOUNTING_ON_HOLD:
58
				case ACCOUNTING_PAID:
59
					completed++;
60
					break;
61
			}
62
		}
63

    
64
		if (completed >= maxRequests)
65
			return new Eligibility(Eligibility.Status.NONO, maxRequestsNono);
66

    
67
		return Eligibility.OK;
68
	}
69

    
70
	private Eligibility validateExpirationDate(Project project) {
71

    
72
		Date enddate = new Date(project.getEnddate().getTime());
73

    
74
		if (!enddate.before(new Date())) {
75
			return new Eligibility(Eligibility.Status.NONO, stillRunningNono);
76
		} else if (enddate.after(new Date(System.currentTimeMillis() - expirationOk))) {
77
			return Eligibility.OK;
78
		} else if (enddate.after(new Date((long) (System.currentTimeMillis() - (1.0f + expirationThreshold) * expirationOk)))) {
79
			return new Eligibility(Eligibility.Status.IFFY, expirationIffy);
80
		} else {
81
			return new Eligibility(Eligibility.Status.NONO, expirationNono);
82
		}
83

    
84
//		try {
85
//			Date date = new SimpleDateFormat("dd/MM/yyyy").parse("01/01/2013");
86
//
87
//			if (project.getEndDate().after(date)) {
88
//				if (project.getEndDate().before(new Date()))
89
//					return new Eligibility(Eligibility.Status.OK);
90
//				else
91
//					return new Eligibility(Eligibility.Status.NONO, stillRunningNono);
92
//			} else
93
//				return new Eligibility(Eligibility.Status.NONO, expirationNono);
94
//		} catch (ParseException e) {
95
//			e.printStackTrace();
96
//
97
//			return Eligibility.OK;
98
//		}
99
	}
100

    
101
	public ProjectManager getProjectManager() {
102
		return projectManager;
103
	}
104

    
105
	public void setProjectManager(ProjectManager projectManager) {
106
		this.projectManager = projectManager;
107
	}
108

    
109
	public RequestManager getRequestManager() {
110
		return requestManager;
111
	}
112

    
113
	public void setRequestManager(RequestManager requestManager) {
114
		this.requestManager = requestManager;
115
	}
116

    
117
	public long getExpirationOk() {
118
		return expirationOk;
119
	}
120

    
121
	public void setExpirationOk(Long expirationOk) {
122
		this.expirationOk = (expirationOk * 1000L * 60 * 60 * 24 * 30);
123
	}
124

    
125
	public float getExpirationThreshold() {
126
		return expirationThreshold;
127
	}
128

    
129
	public void setExpirationThreshold(float expirationThreshold) {
130
		this.expirationThreshold = expirationThreshold;
131
	}
132

    
133
	public String getExpirationIffy() {
134
		return expirationIffy;
135
	}
136

    
137
	public void setExpirationIffy(String expirationIffy) {
138
		this.expirationIffy = expirationIffy;
139
	}
140

    
141
	public String getExpirationNono() {
142
		return expirationNono;
143
	}
144

    
145
	public void setExpirationNono(String expirationNono) {
146
		this.expirationNono = expirationNono;
147
	}
148

    
149
	public int getMaxRequests() {
150
		return maxRequests;
151
	}
152

    
153
	public void setMaxRequests(int maxRequests) {
154
		this.maxRequests = maxRequests;
155
	}
156

    
157
	public String getMaxRequestsNono() {
158
		return maxRequestsNono;
159
	}
160

    
161
	public void setMaxRequestsNono(String maxRequestsNono) {
162
		this.maxRequestsNono = maxRequestsNono;
163
	}
164

    
165
	public String getStillRunningNono() {
166
		return stillRunningNono;
167
	}
168

    
169
	public void setStillRunningNono(String stillRunningNono) {
170
		this.stillRunningNono = stillRunningNono;
171
	}
172
}
(4-4/5)