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