1
22
23 package com.liferay.portlet.tasks.service.impl;
24
25 import com.liferay.portal.PortalException;
26 import com.liferay.portal.SystemException;
27 import com.liferay.portal.model.User;
28 import com.liferay.portlet.tasks.DuplicateReviewUserIdException;
29 import com.liferay.portlet.tasks.model.TasksProposal;
30 import com.liferay.portlet.tasks.model.TasksReview;
31 import com.liferay.portlet.tasks.service.base.TasksReviewLocalServiceBaseImpl;
32 import com.liferay.portlet.tasks.social.TasksActivityKeys;
33 import com.liferay.util.SetUtil;
34
35 import java.util.Date;
36 import java.util.HashSet;
37 import java.util.List;
38 import java.util.Set;
39
40 import org.json.JSONObject;
41
42
49 public class TasksReviewLocalServiceImpl
50 extends TasksReviewLocalServiceBaseImpl {
51
52 public TasksReview addReview(
53 long userId, long proposalId, long assignedByUserId, int stage)
54 throws PortalException, SystemException {
55
56
58 User user = userPersistence.findByPrimaryKey(userId);
59 TasksProposal proposal = tasksProposalPersistence.findByPrimaryKey(
60 proposalId);
61 User assignedByUser = userPersistence.findByPrimaryKey(
62 assignedByUserId);
63 Date now = new Date();
64
65 long reviewId = counterLocalService.increment();
66
67 TasksReview review = tasksReviewPersistence.create(reviewId);
68
69 review.setGroupId(proposal.getGroupId());
70 review.setCompanyId(user.getCompanyId());
71 review.setUserId(user.getUserId());
72 review.setUserName(user.getFullName());
73 review.setCreateDate(now);
74 review.setModifiedDate(now);
75 review.setProposalId(proposalId);
76 review.setAssignedByUserId(assignedByUserId);
77 review.setAssignedByUserName(assignedByUser.getFullName());
78 review.setStage(stage);
79 review.setCompleted(false);
80 review.setRejected(false);
81
82 tasksReviewPersistence.update(review, false);
83
84
86 JSONObject extraData = new JSONObject();
87
88 extraData.put("stage", review.getStage());
89 extraData.put("completed", review.getCompleted());
90 extraData.put("rejected", review.getRejected());
91
92 socialActivityLocalService.addActivity(
93 assignedByUserId, proposal.getGroupId(),
94 TasksProposal.class.getName(), review.getProposalId(),
95 TasksActivityKeys.ASSIGN, extraData.toString(), user.getUserId());
96
97 return review;
98 }
99
100 public TasksReview approveReview(
101 long userId, long proposalId, int stage)
102 throws PortalException, SystemException {
103
104 return updateReview(userId, proposalId, stage, false);
105 }
106
107 public void deleteReview(long reviewId)
108 throws PortalException, SystemException {
109
110 TasksReview review = tasksReviewPersistence.findByPrimaryKey(
111 reviewId);
112
113 deleteReview(review);
114 }
115
116 public void deleteReview(TasksReview review)
117 throws PortalException, SystemException {
118
119 tasksReviewPersistence.remove(review);
120 }
121
122 public void deleteReviews(long proposalId)
123 throws PortalException, SystemException {
124
125 List<TasksReview> reviews = tasksReviewPersistence.findByProposalId(
126 proposalId);
127
128 for (TasksReview review : reviews) {
129 deleteReview(review);
130 }
131 }
132
133 public TasksReview getReview(long reviewId)
134 throws PortalException, SystemException {
135
136 return tasksReviewPersistence.findByPrimaryKey(reviewId);
137 }
138
139 public TasksReview getReview(long userId, long proposalId)
140 throws PortalException, SystemException {
141
142 return tasksReviewPersistence.findByU_P(userId, proposalId);
143 }
144
145 public List<TasksReview> getReviews(long proposalId)
146 throws SystemException {
147
148 return tasksReviewPersistence.findByProposalId(proposalId);
149 }
150
151 public List<TasksReview> getReviews(long proposalId, int stage)
152 throws SystemException {
153
154 return tasksReviewPersistence.findByP_S(proposalId, stage);
155 }
156
157 public List<TasksReview> getReviews(
158 long proposalId, int stage, boolean completed)
159 throws SystemException {
160
161 return tasksReviewPersistence.findByP_S_C(proposalId, stage, completed);
162 }
163
164 public List<TasksReview> getReviews(
165 long proposalId, int stage, boolean completed, boolean rejected)
166 throws PortalException, SystemException {
167
168 return tasksReviewPersistence.findByP_S_C_R(
169 proposalId, stage, completed, rejected);
170 }
171
172 public TasksReview rejectReview(
173 long userId, long proposalId, int stage)
174 throws PortalException, SystemException {
175
176 return updateReview(userId, proposalId, stage, true);
177 }
178
179 public void updateReviews(
180 long proposalId, long assignedByUserId, long[][] userIdsPerStage)
181 throws PortalException, SystemException {
182
183 Set<Long> assignedUserIds = new HashSet<Long>();
184
185 for (int i = 0; i < userIdsPerStage.length; i++) {
186 long[] userIds = userIdsPerStage[i];
187
188 for (long userId : userIds) {
189 if (assignedUserIds.contains(userId)) {
190 throw new DuplicateReviewUserIdException();
191 }
192 else {
193 assignedUserIds.add(userId);
194 }
195 }
196 }
197
198 for (int i = 0; i < userIdsPerStage.length; i++) {
199 Set<Long> userIds = SetUtil.fromArray(userIdsPerStage[i]);
200
201 updateReviews(proposalId, assignedByUserId, i + 2, userIds);
202 }
203 }
204
205 protected TasksReview updateReview(
206 long userId, long proposalId, int stage, boolean rejected)
207 throws PortalException, SystemException {
208
209 TasksReview review = tasksReviewPersistence.findByU_P(
210 userId, proposalId);
211
212 review.setModifiedDate(new Date());
213 review.setCompleted(true);
214 review.setRejected(rejected);
215
216 tasksReviewPersistence.update(review, false);
217
218
220 JSONObject extraData = new JSONObject();
221
222 extraData.put("stage", review.getStage());
223 extraData.put("completed", review.getCompleted());
224 extraData.put("rejected", review.getRejected());
225
226 socialActivityLocalService.addActivity(
227 review.getUserId(), review.getGroupId(),
228 TasksProposal.class.getName(), review.getProposalId(),
229 TasksActivityKeys.REVIEW, extraData.toString(),
230 review.getAssignedByUserId());
231
232 return review;
233 }
234
235 protected void updateReviews(
236 long proposalId, long assignedByUserId, int stage,
237 Set<Long> userIds)
238 throws PortalException, SystemException {
239
240 Set<Long> reviewUserIds = new HashSet<Long>();
241
242 List<TasksReview> reviews = tasksReviewPersistence.findByP_S(
243 proposalId, stage);
244
245 for (TasksReview review : reviews) {
246 if (!userIds.contains(review.getUserId())) {
247 deleteReview(review);
248 }
249 else {
250 reviewUserIds.add(review.getUserId());
251 }
252 }
253
254 for (long userId : userIds) {
255 if (!reviewUserIds.contains(userId)) {
256 addReview(userId, proposalId, assignedByUserId, stage);
257 }
258 }
259 }
260
261 }