Commit 4fcd45330521855b3caec85e05c7708115244c39
1 parent
d9c91f9e
Exists in
master
and in
3 other branches
Adding pendencies log
Showing
4 changed files
with
202 additions
and
5 deletions
Show diff stats
amadeus/static/js/pendencies.js
@@ -65,6 +65,40 @@ $('.pendencies-content').on('hidden.bs.collapse', function(e) { | @@ -65,6 +65,40 @@ $('.pendencies-content').on('hidden.bs.collapse', function(e) { | ||
65 | if (h_items > 10) { | 65 | if (h_items > 10) { |
66 | h_holder.jPages("destroy"); | 66 | h_holder.jPages("destroy"); |
67 | } | 67 | } |
68 | + | ||
69 | + var url = pendencies.find('.view_log_url').val(); | ||
70 | + var log_id = pendencies.find('.view_log_id').val(); | ||
71 | + | ||
72 | + if (typeof(url) != 'undefined') { | ||
73 | + $.ajax({ | ||
74 | + url: url, | ||
75 | + data: {'action': 'close', 'log_id': log_id}, | ||
76 | + dataType: 'json', | ||
77 | + success: function (data) { | ||
78 | + console.log(data.message); | ||
79 | + }, | ||
80 | + error: function (data) { | ||
81 | + console.log(data); | ||
82 | + } | ||
83 | + }); | ||
84 | + } | ||
85 | + | ||
86 | + var hist_url = history.find('.hist_log_url').val(); | ||
87 | + var hist_log_id = history.find('.hist_log_id').val(); | ||
88 | + | ||
89 | + if (typeof(hist_url) != 'undefined' && hist_log_id != "") { | ||
90 | + $.ajax({ | ||
91 | + url: hist_url, | ||
92 | + data: {'action': 'close', 'log_id': hist_log_id}, | ||
93 | + dataType: 'json', | ||
94 | + success: function (data) { | ||
95 | + console.log(data.message); | ||
96 | + }, | ||
97 | + error: function (data) { | ||
98 | + console.log(data); | ||
99 | + } | ||
100 | + }); | ||
101 | + } | ||
68 | } | 102 | } |
69 | }); | 103 | }); |
70 | 104 | ||
@@ -111,6 +145,40 @@ function getPendencies(panel_id) { | @@ -111,6 +145,40 @@ function getPendencies(panel_id) { | ||
111 | metaFunctions(); | 145 | metaFunctions(); |
112 | } | 146 | } |
113 | 147 | ||
148 | + var url = list.parent().find('.view_log_url').val(); | ||
149 | + var log_input = list.parent().find('.view_log_id'); | ||
150 | + | ||
151 | + if (typeof(url) != 'undefined') { | ||
152 | + $.ajax({ | ||
153 | + url: url, | ||
154 | + data: {'action': 'open'}, | ||
155 | + dataType: 'json', | ||
156 | + success: function (data) { | ||
157 | + log_input.val(data.log_id); | ||
158 | + }, | ||
159 | + error: function (data) { | ||
160 | + console.log(data); | ||
161 | + } | ||
162 | + }); | ||
163 | + } | ||
164 | + | ||
165 | + var hist_url = list.parent().parent().find('.hist_log_url').val(); | ||
166 | + var hist_log_id = list.parent().parent().find('.hist_log_id').val(); | ||
167 | + | ||
168 | + if (typeof(hist_url) != 'undefined' && hist_log_id != "") { | ||
169 | + $.ajax({ | ||
170 | + url: hist_url, | ||
171 | + data: {'action': 'close', 'log_id': hist_log_id}, | ||
172 | + dataType: 'json', | ||
173 | + success: function (data) { | ||
174 | + console.log(data.message); | ||
175 | + }, | ||
176 | + error: function (data) { | ||
177 | + console.log(data); | ||
178 | + } | ||
179 | + }); | ||
180 | + } | ||
181 | + | ||
114 | list.parent().parent().find('.history').attr('style', 'display: none'); | 182 | list.parent().parent().find('.history').attr('style', 'display: none'); |
115 | list.parent().attr('style', 'display: block'); | 183 | list.parent().attr('style', 'display: block'); |
116 | 184 | ||
@@ -166,6 +234,40 @@ function getHistory(panel_id) { | @@ -166,6 +234,40 @@ function getHistory(panel_id) { | ||
166 | } | 234 | } |
167 | } | 235 | } |
168 | 236 | ||
237 | + var url = container.find('.view_log_url').val(); | ||
238 | + var log_id = container.find('.view_log_id').val(); | ||
239 | + | ||
240 | + if (typeof(url) != 'undefined') { | ||
241 | + $.ajax({ | ||
242 | + url: url, | ||
243 | + data: {'action': 'close', 'log_id': log_id}, | ||
244 | + dataType: 'json', | ||
245 | + success: function (data) { | ||
246 | + console.log(data.message); | ||
247 | + }, | ||
248 | + error: function (data) { | ||
249 | + console.log(data); | ||
250 | + } | ||
251 | + }); | ||
252 | + } | ||
253 | + | ||
254 | + var hist_url = container.find('.hist_log_url').val(); | ||
255 | + var hist_log_input = container.find('.hist_log_id'); | ||
256 | + | ||
257 | + if (typeof(hist_url) != 'undefined') { | ||
258 | + $.ajax({ | ||
259 | + url: hist_url, | ||
260 | + data: {'action': 'open'}, | ||
261 | + dataType: 'json', | ||
262 | + success: function (data) { | ||
263 | + hist_log_input.val(data.log_id); | ||
264 | + }, | ||
265 | + error: function (data) { | ||
266 | + console.log(data); | ||
267 | + } | ||
268 | + }); | ||
269 | + } | ||
270 | + | ||
169 | container.find('.pendencies_link').removeClass('active'); | 271 | container.find('.pendencies_link').removeClass('active'); |
170 | container.find('.history_link').addClass('active'); | 272 | container.find('.history_link').addClass('active'); |
171 | 273 |
notifications/templates/notifications/index.html
@@ -41,11 +41,17 @@ | @@ -41,11 +41,17 @@ | ||
41 | </div> | 41 | </div> |
42 | 42 | ||
43 | <div class="pendencies" data-url="{% url 'notifications:ajax_view' notification.task__resource__topic__subject %}"> | 43 | <div class="pendencies" data-url="{% url 'notifications:ajax_view' notification.task__resource__topic__subject %}"> |
44 | + <input type="hidden" class="view_log_url" value="{% url 'notifications:view_log' notification.task__resource__topic__subject %}" /> | ||
45 | + <input type="hidden" class="view_log_id" value="" /> | ||
46 | + | ||
44 | <div id="pendencies_list_{{ notification.task__resource__topic__subject }}" class="pendencies-cards"></div> | 47 | <div id="pendencies_list_{{ notification.task__resource__topic__subject }}" class="pendencies-cards"></div> |
45 | <div class="holder"></div> | 48 | <div class="holder"></div> |
46 | </div> | 49 | </div> |
47 | 50 | ||
48 | <div class="history" data-url="{% url 'notifications:ajax_history' notification.task__resource__topic__subject %}"> | 51 | <div class="history" data-url="{% url 'notifications:ajax_history' notification.task__resource__topic__subject %}"> |
52 | + <input type="hidden" class="hist_log_url" value="{% url 'notifications:hist_log' notification.task__resource__topic__subject %}" /> | ||
53 | + <input type="hidden" class="hist_log_id" value="" /> | ||
54 | + | ||
49 | <div class="history_data"></div> | 55 | <div class="history_data"></div> |
50 | <div class="text-center"> | 56 | <div class="text-center"> |
51 | <div class="holder"></div> | 57 | <div class="holder"></div> |
notifications/urls.py
@@ -7,6 +7,8 @@ urlpatterns = [ | @@ -7,6 +7,8 @@ urlpatterns = [ | ||
7 | url(r'^set_goal/$', views.set_goal, name='set_goal'), | 7 | url(r'^set_goal/$', views.set_goal, name='set_goal'), |
8 | url(r'^ajax/(?P<id>[\w_-]+)/$', views.AjaxNotifications.as_view(), name='ajax_view'), | 8 | url(r'^ajax/(?P<id>[\w_-]+)/$', views.AjaxNotifications.as_view(), name='ajax_view'), |
9 | url(r'^ajax_history/(?P<id>[\w_-]+)/$', views.AjaxHistory.as_view(), name='ajax_history'), | 9 | url(r'^ajax_history/(?P<id>[\w_-]+)/$', views.AjaxHistory.as_view(), name='ajax_history'), |
10 | + url(r'^view_log/(?P<subject>[\w_-]+)/$', views.pendencies_view_log, name = 'view_log'), | ||
11 | + url(r'^hist_log/(?P<subject>[\w_-]+)/$', views.pendencies_hist_log, name = 'hist_log'), | ||
10 | url(r'^(?P<slug>[\w_-]+)/$', views.SubjectNotifications.as_view(), name='view'), | 12 | url(r'^(?P<slug>[\w_-]+)/$', views.SubjectNotifications.as_view(), name='view'), |
11 | url(r'^(?P<slug>[\w_-]+)/history/$', views.SubjectHistory.as_view(), name='history'), | 13 | url(r'^(?P<slug>[\w_-]+)/history/$', views.SubjectHistory.as_view(), name='history'), |
12 | ] | 14 | ] |
13 | \ No newline at end of file | 15 | \ No newline at end of file |
notifications/views.py
@@ -17,10 +17,20 @@ from amadeus.permissions import has_subject_view_permissions, has_category_permi | @@ -17,10 +17,20 @@ from amadeus.permissions import has_subject_view_permissions, has_category_permi | ||
17 | from subjects.models import Subject | 17 | from subjects.models import Subject |
18 | from categories.models import Category | 18 | from categories.models import Category |
19 | 19 | ||
20 | +from log.models import Log | ||
21 | +from log.mixins import LogMixin | ||
22 | +from log.decorators import log_decorator, log_decorator_ajax | ||
23 | +import time | ||
24 | + | ||
20 | from .models import Notification | 25 | from .models import Notification |
21 | from .utils import get_order_by, is_date | 26 | from .utils import get_order_by, is_date |
22 | 27 | ||
23 | -class SubjectNotifications(LoginRequiredMixin, generic.ListView): | 28 | +class SubjectNotifications(LoginRequiredMixin, LogMixin, generic.ListView): |
29 | + log_component = 'pendencies' | ||
30 | + log_action = 'view' | ||
31 | + log_resource = 'pendencies' | ||
32 | + log_context = {} | ||
33 | + | ||
24 | login_url = reverse_lazy("users:login") | 34 | login_url = reverse_lazy("users:login") |
25 | redirect_field_name = 'next' | 35 | redirect_field_name = 'next' |
26 | 36 | ||
@@ -60,9 +70,24 @@ class SubjectNotifications(LoginRequiredMixin, generic.ListView): | @@ -60,9 +70,24 @@ class SubjectNotifications(LoginRequiredMixin, generic.ListView): | ||
60 | context['subject'] = subject | 70 | context['subject'] = subject |
61 | context['total'] = self.total | 71 | context['total'] = self.total |
62 | 72 | ||
73 | + self.log_context['subject_id'] = subject.id | ||
74 | + self.log_context['subject_name'] = subject.name | ||
75 | + self.log_context['subject_slug'] = subject.slug | ||
76 | + self.log_context['view_page'] = self.request.GET.get("page", 1) | ||
77 | + self.log_context['timestamp_start'] = str(int(time.time())) | ||
78 | + | ||
79 | + super(SubjectNotifications, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
80 | + | ||
81 | + self.request.session['log_id'] = Log.objects.latest('id').id | ||
82 | + | ||
63 | return context | 83 | return context |
64 | 84 | ||
65 | -class SubjectHistory(LoginRequiredMixin, generic.ListView): | 85 | +class SubjectHistory(LoginRequiredMixin, LogMixin, generic.ListView): |
86 | + log_component = 'pendencies' | ||
87 | + log_action = 'view_history' | ||
88 | + log_resource = 'pendencies' | ||
89 | + log_context = {} | ||
90 | + | ||
66 | login_url = reverse_lazy("users:login") | 91 | login_url = reverse_lazy("users:login") |
67 | redirect_field_name = 'next' | 92 | redirect_field_name = 'next' |
68 | 93 | ||
@@ -127,6 +152,17 @@ class SubjectHistory(LoginRequiredMixin, generic.ListView): | @@ -127,6 +152,17 @@ class SubjectHistory(LoginRequiredMixin, generic.ListView): | ||
127 | context['rows'] = self.num_rows | 152 | context['rows'] = self.num_rows |
128 | context['searched'] = self.request.GET.get("search", "") | 153 | context['searched'] = self.request.GET.get("search", "") |
129 | 154 | ||
155 | + self.log_context['subject_id'] = subject.id | ||
156 | + self.log_context['subject_name'] = subject.name | ||
157 | + self.log_context['subject_slug'] = subject.slug | ||
158 | + self.log_context['history_page'] = self.request.GET.get("page", 1) | ||
159 | + self.log_context['searched'] = self.request.GET.get("search", "") | ||
160 | + self.log_context['timestamp_start'] = str(int(time.time())) | ||
161 | + | ||
162 | + super(SubjectHistory, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | ||
163 | + | ||
164 | + self.request.session['log_id'] = Log.objects.latest('id').id | ||
165 | + | ||
130 | return context | 166 | return context |
131 | 167 | ||
132 | class IndexView(LoginRequiredMixin, generic.ListView): | 168 | class IndexView(LoginRequiredMixin, generic.ListView): |
@@ -237,6 +273,7 @@ class AjaxHistory(LoginRequiredMixin, generic.ListView): | @@ -237,6 +273,7 @@ class AjaxHistory(LoginRequiredMixin, generic.ListView): | ||
237 | return context | 273 | return context |
238 | 274 | ||
239 | @login_required | 275 | @login_required |
276 | +@log_decorator('pendencies', 'set_goal', 'pendencies') | ||
240 | def set_goal(request): | 277 | def set_goal(request): |
241 | if request.method == "POST" and request.is_ajax(): | 278 | if request.method == "POST" and request.is_ajax(): |
242 | meta = request.POST.get('meta', None) | 279 | meta = request.POST.get('meta', None) |
@@ -264,9 +301,59 @@ def set_goal(request): | @@ -264,9 +301,59 @@ def set_goal(request): | ||
264 | notification.meta = meta | 301 | notification.meta = meta |
265 | notification.save() | 302 | notification.save() |
266 | 303 | ||
304 | + log_context = {} | ||
305 | + log_context['notification_id'] = notification.id | ||
306 | + log_context['notification'] = str(notification) | ||
307 | + | ||
308 | + request.log_context = log_context | ||
309 | + | ||
267 | if notification.level == 2: | 310 | if notification.level == 2: |
268 | - message = _('Your new goal to realize the task %s is %s')%(str(notification.task), formats.date_format(meta, "SHORT_DATETIME_FORMAT")) | 311 | + message = _('Your new goal to realize the task %s is %s')%(str(notification), formats.date_format(meta, "SHORT_DATETIME_FORMAT")) |
269 | else: | 312 | else: |
270 | - message = _('Your goal to realize the task %s is %s')%(str(notification.task), formats.date_format(meta, "SHORT_DATETIME_FORMAT")) | 313 | + message = _('Your goal to realize the task %s is %s')%(str(notification), formats.date_format(meta, "SHORT_DATETIME_FORMAT")) |
314 | + | ||
315 | + return JsonResponse({'error': False, 'message': message}) | ||
316 | + | ||
317 | +@log_decorator_ajax('pendencies', 'view', 'pendencies') | ||
318 | +def pendencies_view_log(request, subject): | ||
319 | + action = request.GET.get('action') | ||
320 | + | ||
321 | + if action == 'open': | ||
322 | + subject = get_object_or_404(Subject, id = subject) | ||
323 | + | ||
324 | + log_context = {} | ||
325 | + log_context['subject_id'] = subject.id | ||
326 | + log_context['subject_name'] = subject.name | ||
327 | + log_context['subject_slug'] = subject.slug | ||
328 | + log_context['timestamp_start'] = str(int(time.time())) | ||
329 | + log_context['timestamp_end'] = '-1' | ||
330 | + | ||
331 | + request.log_context = log_context | ||
332 | + | ||
333 | + log_id = Log.objects.latest('id').id | ||
334 | + | ||
335 | + return JsonResponse({'message': 'ok', 'log_id': log_id}) | ||
336 | + | ||
337 | + return JsonResponse({'message': 'ok'}) | ||
338 | + | ||
339 | +@log_decorator_ajax('pendencies', 'view_history', 'pendencies') | ||
340 | +def pendencies_hist_log(request, subject): | ||
341 | + action = request.GET.get('action') | ||
342 | + | ||
343 | + if action == 'open': | ||
344 | + subject = get_object_or_404(Subject, id = subject) | ||
345 | + | ||
346 | + log_context = {} | ||
347 | + log_context['subject_id'] = subject.id | ||
348 | + log_context['subject_name'] = subject.name | ||
349 | + log_context['subject_slug'] = subject.slug | ||
350 | + log_context['timestamp_start'] = str(int(time.time())) | ||
351 | + log_context['timestamp_end'] = '-1' | ||
352 | + | ||
353 | + request.log_context = log_context | ||
354 | + | ||
355 | + log_id = Log.objects.latest('id').id | ||
356 | + | ||
357 | + return JsonResponse({'message': 'ok', 'log_id': log_id}) | ||
271 | 358 | ||
272 | - return JsonResponse({'error': False, 'message': message}) | ||
273 | \ No newline at end of file | 359 | \ No newline at end of file |
360 | + return JsonResponse({'message': 'ok'}) | ||
274 | \ No newline at end of file | 361 | \ No newline at end of file |