Skip to content

Commit 2dfae65

Browse files
committed
Jobs inactivated. PyAr#323
1 parent 1006262 commit 2dfae65

File tree

9 files changed

+98
-15
lines changed

9 files changed

+98
-15
lines changed

community/templatetags/devtags.py

+7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.template import Library
22
from lxml import etree
33
from django.core.urlresolvers import reverse
4+
from django.contrib.auth.models import Group
45
from waliki.settings import get_slug
56

67
register = Library()
@@ -42,3 +43,9 @@ def html2text(html):
4243
def wikify(value, prefix=''):
4344
slug = get_slug(prefix + str(value))
4445
return reverse('waliki_detail', args=[slug])
46+
47+
48+
@register.filter
49+
def has_group(user, group_name):
50+
group = Group.objects.get(name=group_name)
51+
return True if group in user.groups.all() else False

fixtures/permission.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"pk": 1, "model": "auth.group", "fields": {"name": "job_moderator", "permissions": [95, 96, 97]}}]

jobs/admin.py

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from django.contrib import admin
2+
from django.db import models
23
from .models import Job, JobInactivated
34

5+
46
admin.site.register(Job)
57
admin.site.register(JobInactivated)

jobs/forms.py

+4
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,17 @@ class Meta:
8383
class JobInactivateForm(forms.ModelForm):
8484
""" Form to inactivate Job """
8585

86+
send_email = forms.BooleanField(label='¿Enviar mail al dueño del aviso?',
87+
required=False)
88+
8689
def __init__(self, *args, **kwargs):
8790
super(JobInactivateForm, self).__init__(*args, **kwargs)
8891

8992
self.helper = FormHelper()
9093
self.helper.layout = Layout(
9194
'reason',
9295
'comment',
96+
'send_email',
9397
)
9498

9599
self.helper.add_input(Submit('job_inactivate_submit', _('Guardar')))
+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from django.db import models, migrations
5+
import model_utils.fields
6+
import django.utils.timezone
7+
8+
9+
class Migration(migrations.Migration):
10+
11+
dependencies = [
12+
('jobs', '0008_auto_20150926_1328'),
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name='JobInactivated',
18+
fields=[
19+
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True, serialize=False)),
20+
('created', model_utils.fields.AutoCreatedField(editable=False, verbose_name='created', default=django.utils.timezone.now)),
21+
('modified', model_utils.fields.AutoLastModifiedField(editable=False, verbose_name='modified', default=django.utils.timezone.now)),
22+
('reason', models.CharField(verbose_name='Motivo/Razón', max_length=100, choices=[('No es un aviso relacionado con Python', 'No es un aviso relacionado con Python'), ('Spam', 'Spam')])),
23+
('comment', models.TextField(verbose_name='Comentario', blank=True, null=True)),
24+
('job', models.ForeignKey(to='jobs.Job')),
25+
],
26+
options={
27+
'abstract': False,
28+
},
29+
bases=(models.Model,),
30+
),
31+
migrations.AlterModelOptions(
32+
name='job',
33+
options={'ordering': ['-created']},
34+
),
35+
]

jobs/models.py

+18-7
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@
1515
)
1616

1717

18-
class JobManager(models.Manager):
19-
def get_query_set(self):
20-
# -- only active jobs
21-
return super(JobManager, self).get_query_set().filter(is_active=True)
18+
class JobQuerySet(models.QuerySet):
19+
20+
def actives(self):
21+
# -- only active records
22+
return self.filter(is_active=True)
2223

2324

2425
class Job(models.Model):
@@ -48,7 +49,7 @@ class Job(models.Model):
4849
slug = AutoSlugField(populate_from='title', unique=True)
4950
is_active = models.BooleanField(default=True)
5051

51-
objects = JobManager()
52+
objects = JobQuerySet.as_manager()
5253

5354
def __str__(self):
5455
return u'{0}'.format(self.title)
@@ -76,5 +77,15 @@ class JobInactivated(TimeStampedModel):
7677
max_length=100,
7778
blank=False,
7879
choices=REASONS,
79-
verbose_name=_('Motivo/Razón'))
80-
comment = models.TextField(blank=True, null=True, verbose_name=_('Comentario'))
80+
verbose_name=_('Motivo'))
81+
comment = models.TextField(blank=True,
82+
null=True,
83+
verbose_name=_('Comentario'))
84+
85+
def __str__(self):
86+
return u'%s' % self.job.title
87+
88+
def get_absolute_url(self):
89+
return reverse('jobs_list_all')
90+
91+

jobs/views.py

+27-7
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
from django.core.urlresolvers import reverse_lazy
22
from django.views.generic.edit import UpdateView, CreateView, DeleteView
3-
from django.views.generic import ListView, View
3+
from django.views.generic import ListView
44
from django.contrib.syndication.views import Feed
5-
from django.http import HttpResponseRedirect
6-
from django.shortcuts import render
75
from community.views import OwnedObject, FilterableList
86
from .models import Job, JobInactivated
97
from .forms import JobForm, JobInactivateForm
108

119

10+
class JobActiveMixin(object):
11+
def get_queryset(self):
12+
""" Job must be active """
13+
qs = super(JobActiveMixin, self).get_queryset()
14+
return qs.actives()
15+
16+
1217
class JobsFeed(Feed):
1318
title = "Feed de ofertas laborales de Pyar"
1419
link = reverse_lazy("jobs_list_all")
@@ -56,19 +61,19 @@ def form_valid(self, form):
5661
return super(JobCreate, self).form_valid(form)
5762

5863

59-
class JobList(ListView, FilterableList):
64+
class JobList(ListView, JobActiveMixin, FilterableList):
6065
model = Job
6166
paginate_by = 20
6267

6368

64-
class JobUpdate(UpdateView, OwnedObject):
69+
class JobUpdate(UpdateView, JobActiveMixin, OwnedObject):
6570

6671
"""Edit jobs that use Python."""
6772
model = Job
6873
form_class = JobForm
6974

7075

71-
class JobDelete(DeleteView, OwnedObject):
76+
class JobDelete(DeleteView, JobActiveMixin, OwnedObject):
7277

7378
"""Delete a Job."""
7479
model = Job
@@ -77,6 +82,21 @@ class JobDelete(DeleteView, OwnedObject):
7782

7883
class JobInactivate(CreateView):
7984
""" Inactivate Job by moderator """
80-
template_name = 'jobs/inactivate.html'
85+
8186
model = JobInactivated
87+
template_name = 'jobs/job_inactivate_form.html'
8288
form_class = JobInactivateForm
89+
90+
def form_valid(self, form):
91+
job = Job.objects.get(pk=self.kwargs['pk'])
92+
form.instance.job = job
93+
94+
# -- inactivate job
95+
job.is_active = False
96+
job.save()
97+
98+
# -- ¿send mail to job owner?
99+
if form.cleaned_data['send_email']:
100+
print(job.company.owner.email)
101+
102+
return super(JobInactivate, self).form_valid(form)

templates/jobs/job_detail.html

+4-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ <h2>{{ object.title }}
2020
<a href="{% url 'jobs_update' object.id %}" class="btn btn-info">{% trans 'Editar' %}</a>
2121
<a href="{% url 'jobs_delete' object.id %}" class="btn btn-danger">{% trans 'Borrar' %}</a>
2222
{% endif %}
23-
<a href="{% url 'jobs_inactivate' object.id %}" class="btn btn-danger">{% trans 'Inactivar' %}</a>
23+
24+
{% if request.user|has_group:"job_moderator" == True %}
25+
<a href="{% url 'jobs_inactivate' object.id %}" class="btn btn-danger">{% trans 'Inactivar' %}</a>
26+
{% endif %}
2427
</span>
2528
</h2>
2629
</div>
File renamed without changes.

0 commit comments

Comments
 (0)