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