|
23 | 23 | from django.utils.translation import ugettext as _ |
24 | 24 |
|
25 | 25 | from msgs.models import Msg |
| 26 | +from papers.models import Paper, Person |
26 | 27 | from spams.views import check_spam |
27 | 28 | from teams.forms import TeamReplyEditForm |
28 | 29 | from teams.models import Team, TeamReply |
@@ -1207,3 +1208,151 @@ def reload_comment(request): |
1207 | 1208 | ) |
1208 | 1209 | else: |
1209 | 1210 | return error_to_response(request) |
| 1211 | + |
| 1212 | + |
| 1213 | +def user_by_name(request): |
| 1214 | + """API user_by_name""" |
| 1215 | + if not request.user.is_authenticated: |
| 1216 | + return JsonResponse({'status': 'false'}, status=401) |
| 1217 | + |
| 1218 | + if request.method == 'POST': |
| 1219 | + approval_type = request.POST['type'] |
| 1220 | + name = request.POST['name'] |
| 1221 | + blacklist = request.POST.getlist('blacklist[]') |
| 1222 | + |
| 1223 | + q = Q(username__icontains=name) | Q( |
| 1224 | + first_name__icontains=name) | Q(last_name__icontains=name) |
| 1225 | + |
| 1226 | + names = User.objects.filter(is_active=True).filter(q).exclude( |
| 1227 | + username__in=blacklist) |
| 1228 | + total = names.count() |
| 1229 | + |
| 1230 | + if total == 1: |
| 1231 | + data = { |
| 1232 | + 'type': approval_type, |
| 1233 | + 'id': names[0].id, |
| 1234 | + 'username': names[0].username, |
| 1235 | + 'name': names[0].last_name, |
| 1236 | + 'email': names[0].email, |
| 1237 | + 'status': 'only', |
| 1238 | + } |
| 1239 | + return JsonResponse(data) |
| 1240 | + |
| 1241 | + return render_to_response( |
| 1242 | + 'papers/user_list.html', |
| 1243 | + { |
| 1244 | + 'user': request.user, |
| 1245 | + 'type': approval_type, |
| 1246 | + 'names': names, |
| 1247 | + 'total': total, |
| 1248 | + } |
| 1249 | + ) |
| 1250 | + else: |
| 1251 | + return error_to_response(request) |
| 1252 | + |
| 1253 | + |
| 1254 | +def approve_paper(request): |
| 1255 | + """API approve_paper""" |
| 1256 | + if not request.user.is_authenticated: |
| 1257 | + return JsonResponse({'status': 'false'}, status=401) |
| 1258 | + |
| 1259 | + if request.method == 'POST': |
| 1260 | + id = request.POST['id'] |
| 1261 | + comment = request.POST['comment'] |
| 1262 | + paper = get_object_or_404(Paper, pk=id) |
| 1263 | + |
| 1264 | + if paper.completed or request.user != paper.cc.last().user: |
| 1265 | + return JsonResponse({'status': 'false'}, status=403) |
| 1266 | + if paper.approved and request.user == paper.approver: |
| 1267 | + return JsonResponse({'status': 'false'}, status=403) |
| 1268 | + |
| 1269 | + paper.updated_at = timezone.now() |
| 1270 | + |
| 1271 | + if request.user == paper.approver: |
| 1272 | + paper.comment = comment |
| 1273 | + paper.approved = True |
| 1274 | + paper.approved_at = paper.updated_at |
| 1275 | + |
| 1276 | + if paper.supporters.all(): |
| 1277 | + paper.status = '2progress' |
| 1278 | + first = paper.supporters.first() |
| 1279 | + person = Person.objects.create( |
| 1280 | + order=first.order, user=first.user) |
| 1281 | + paper.cc.add(person) |
| 1282 | + else: |
| 1283 | + paper.status = '5completed' |
| 1284 | + paper.completed = True |
| 1285 | + for notifier in paper.notifiers.all(): |
| 1286 | + paper.cc.add(notifier) |
| 1287 | + else: |
| 1288 | + index = paper.cc.last().order - 3 |
| 1289 | + supporter = paper.supporters.all()[index] |
| 1290 | + |
| 1291 | + if index < 0 or supporter.user != request.user: |
| 1292 | + return JsonResponse({'status': 'false'}, status=403) |
| 1293 | + else: |
| 1294 | + supporter.comment = comment |
| 1295 | + supporter.approved = True |
| 1296 | + supporter.approved_at = paper.updated_at |
| 1297 | + supporter.save() |
| 1298 | + |
| 1299 | + if paper.supporters.last().user == request.user: |
| 1300 | + paper.status = '5completed' |
| 1301 | + paper.completed = True |
| 1302 | + for notifier in paper.notifiers.all(): |
| 1303 | + paper.cc.add(notifier) |
| 1304 | + else: |
| 1305 | + next_supporter = paper.supporters.all()[index + 1] |
| 1306 | + person = Person.objects.create( |
| 1307 | + order=next_supporter.order, user=next_supporter.user) |
| 1308 | + paper.cc.add(person) |
| 1309 | + |
| 1310 | + paper.save() |
| 1311 | + return JsonResponse({'status': 'true'}, status=201) |
| 1312 | + |
| 1313 | + |
| 1314 | +def reject_paper(request): |
| 1315 | + """API reject_paper""" |
| 1316 | + if not request.user.is_authenticated: |
| 1317 | + return JsonResponse({'status': 'false'}, status=401) |
| 1318 | + |
| 1319 | + if request.method == 'POST': |
| 1320 | + id = request.POST['id'] |
| 1321 | + comment = request.POST['comment'] |
| 1322 | + paper = get_object_or_404(Paper, pk=id) |
| 1323 | + |
| 1324 | + if not paper.completed and request.user == paper.user: |
| 1325 | + paper.updated_at = timezone.now() |
| 1326 | + paper.cancelmsg = comment |
| 1327 | + paper.status = '4canceled' |
| 1328 | + paper.completed = True |
| 1329 | + paper.save() |
| 1330 | + return JsonResponse({'status': 'true'}, status=201) |
| 1331 | + |
| 1332 | + if paper.completed or request.user != paper.cc.last().user: |
| 1333 | + return JsonResponse({'status': 'false'}, status=403) |
| 1334 | + if paper.approved and request.user == paper.approver: |
| 1335 | + return JsonResponse({'status': 'false'}, status=403) |
| 1336 | + |
| 1337 | + paper.updated_at = timezone.now() |
| 1338 | + |
| 1339 | + if request.user == paper.approver: |
| 1340 | + paper.comment = comment |
| 1341 | + paper.rejected = True |
| 1342 | + paper.approved_at = paper.updated_at |
| 1343 | + else: |
| 1344 | + index = paper.cc.last().order - 3 |
| 1345 | + supporter = paper.supporters.all()[index] |
| 1346 | + |
| 1347 | + if index < 0 or supporter.user != request.user: |
| 1348 | + return JsonResponse({'status': 'false'}, status=403) |
| 1349 | + else: |
| 1350 | + supporter.comment = comment |
| 1351 | + supporter.rejected = True |
| 1352 | + supporter.approved_at = paper.updated_at |
| 1353 | + supporter.save() |
| 1354 | + |
| 1355 | + paper.status = '3rejected' |
| 1356 | + paper.completed = True |
| 1357 | + paper.save() |
| 1358 | + return JsonResponse({'status': 'true'}, status=201) |
0 commit comments