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.model.User;
30 import com.liferay.portlet.tasks.DuplicateReviewUserIdException;
31 import com.liferay.portlet.tasks.model.TasksProposal;
32 import com.liferay.portlet.tasks.model.TasksReview;
33 import com.liferay.portlet.tasks.service.base.TasksReviewLocalServiceBaseImpl;
34 import com.liferay.portlet.tasks.social.TasksActivityKeys;
35 import com.liferay.util.SetUtil;
36
37 import java.util.Date;
38 import java.util.HashSet;
39 import java.util.List;
40 import java.util.Set;
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 = JSONFactoryUtil.createJSONObject();
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(), proposalId,
95 TasksActivityKeys.ASSIGN_PROPOSAL, extraData.toString(), userId);
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) throws SystemException {
117 tasksReviewPersistence.remove(review);
118 }
119
120 public void deleteReviews(long proposalId) throws SystemException {
121 List<TasksReview> reviews = tasksReviewPersistence.findByProposalId(
122 proposalId);
123
124 for (TasksReview review : reviews) {
125 deleteReview(review);
126 }
127 }
128
129 public TasksReview getReview(long reviewId)
130 throws PortalException, SystemException {
131
132 return tasksReviewPersistence.findByPrimaryKey(reviewId);
133 }
134
135 public TasksReview getReview(long userId, long proposalId)
136 throws PortalException, SystemException {
137
138 return tasksReviewPersistence.findByU_P(userId, proposalId);
139 }
140
141 public List<TasksReview> getReviews(long proposalId)
142 throws SystemException {
143
144 return tasksReviewPersistence.findByProposalId(proposalId);
145 }
146
147 public List<TasksReview> getReviews(long proposalId, int stage)
148 throws SystemException {
149
150 return tasksReviewPersistence.findByP_S(proposalId, stage);
151 }
152
153 public List<TasksReview> getReviews(
154 long proposalId, int stage, boolean completed)
155 throws SystemException {
156
157 return tasksReviewPersistence.findByP_S_C(proposalId, stage, completed);
158 }
159
160 public List<TasksReview> getReviews(
161 long proposalId, int stage, boolean completed, boolean rejected)
162 throws SystemException {
163
164 return tasksReviewPersistence.findByP_S_C_R(
165 proposalId, stage, completed, rejected);
166 }
167
168 public TasksReview rejectReview(
169 long userId, long proposalId, int stage)
170 throws PortalException, SystemException {
171
172 return updateReview(userId, proposalId, stage, true);
173 }
174
175 public void updateReviews(
176 long proposalId, long assignedByUserId, long[][] userIdsPerStage)
177 throws PortalException, SystemException {
178
179 Set<Long> assignedUserIds = new HashSet<Long>();
180
181 for (int i = 0; i < userIdsPerStage.length; i++) {
182 long[] userIds = userIdsPerStage[i];
183
184 for (long userId : userIds) {
185 if (assignedUserIds.contains(userId)) {
186 throw new DuplicateReviewUserIdException();
187 }
188 else {
189 assignedUserIds.add(userId);
190 }
191 }
192 }
193
194 for (int i = 0; i < userIdsPerStage.length; i++) {
195 Set<Long> userIds = SetUtil.fromArray(userIdsPerStage[i]);
196
197 updateReviews(proposalId, assignedByUserId, i + 2, userIds);
198 }
199 }
200
201 protected TasksReview updateReview(
202 long userId, long proposalId, int stage, boolean rejected)
203 throws PortalException, SystemException {
204
205 TasksReview review = tasksReviewPersistence.findByU_P(
206 userId, proposalId);
207
208 review.setModifiedDate(new Date());
209 review.setCompleted(true);
210 review.setRejected(rejected);
211
212 tasksReviewPersistence.update(review, false);
213
214
216 JSONObject extraData = JSONFactoryUtil.createJSONObject();
217
218 extraData.put("stage", review.getStage());
219 extraData.put("completed", review.getCompleted());
220 extraData.put("rejected", review.getRejected());
221
222 socialActivityLocalService.addActivity(
223 userId, review.getGroupId(), TasksProposal.class.getName(),
224 proposalId, TasksActivityKeys.REVIEW_PROPOSAL, extraData.toString(),
225 review.getAssignedByUserId());
226
227 return review;
228 }
229
230 protected void updateReviews(
231 long proposalId, long assignedByUserId, int stage,
232 Set<Long> userIds)
233 throws PortalException, SystemException {
234
235 Set<Long> reviewUserIds = new HashSet<Long>();
236
237 List<TasksReview> reviews = tasksReviewPersistence.findByP_S(
238 proposalId, stage);
239
240 for (TasksReview review : reviews) {
241 if (!userIds.contains(review.getUserId())) {
242 deleteReview(review);
243 }
244 else {
245 reviewUserIds.add(review.getUserId());
246 }
247 }
248
249 for (long userId : userIds) {
250 if (!reviewUserIds.contains(userId)) {
251 addReview(userId, proposalId, assignedByUserId, stage);
252 }
253 }
254 }
255
256 }