SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 02694e23 authored by Jean-Sébastien Caux's avatar Jean-Sébastien Caux
Browse files

Beginnings of careers app

parent 6cb215d8
No related branches found
No related tags found
No related merge requests found
......@@ -85,6 +85,7 @@ INSTALLED_APPS = (
'django_countries',
'django_extensions',
'haystack',
'careers',
'colleges',
'commentaries',
'comments',
......
......@@ -40,6 +40,7 @@ urlpatterns = [
include('journals.urls.journal', namespace="prefixed_journal")),
url(r'^%s/' % JOURNAL_REGEX, include('journals.urls.journal', namespace="journal")),
url(r'^', include('scipost.urls', namespace="scipost")),
url(r'^careers/', include('careers.urls', namespace="careers")),
url(r'^colleges/', include('colleges.urls', namespace="colleges")),
url(r'^commentaries/', include('commentaries.urls', namespace="commentaries")),
url(r'^commentary/', include('commentaries.urls', namespace="_commentaries")),
......
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from django.contrib import admin
# Register your models here.
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from django.apps import AppConfig
class CareersConfig(AppConfig):
name = 'careers'
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from django import forms
from .models import JobOpening
class JobOpeningForm(forms.Form):
class Meta:
model = JobOpening
fields = [
'slug',
'announced',
'title',
'description',
'application_deadline',
'status'
]
# Generated by Django 2.1.8 on 2019-11-28 21:18
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='JobOpening',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('slug', models.SlugField()),
('announced', models.DateField()),
('title', models.CharField(max_length=128)),
('description', models.TextField()),
('application_deadline', models.DateField()),
('status', models.CharField(choices=[('drafted', 'Drafted (not publicly visible)'), ('visible', 'Publicly visible'), ('closed', 'Closed')], max_length=10)),
],
options={
'ordering': ['-announced'],
},
),
]
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from django.db import models
class JobOpening(models.Model):
"""
Information on a job opening.
"""
DRAFTED = 'drafted'
VISIBLE = 'visible'
CLOSED = 'closed'
JOBOPENING_STATUSES = (
(DRAFTED, 'Drafted (not publicly visible)'),
(VISIBLE, 'Publicly visible'),
(CLOSED, 'Closed')
)
slug = models.SlugField()
announced = models.DateField()
title = models.CharField(max_length=128)
description = models.TextField()
application_deadline = models.DateField()
status = models.CharField(max_length=10, choices=JOBOPENING_STATUSES)
class Meta:
ordering = ['-announced']
def __str__(self):
return '%s (%s)' % (self.title, self.slug)
{% extends 'scipost/base.html' %}
{% block breadcrumb %}
<div class="breadcrumb-container">
<div class="container">
<nav class="breadcrumb hidden-sm-down">
{% block breadcrumb_items %}
<a href="{% url 'careers:jobopenings' %}" class="breadcrumb-item">Job openings</a>
{% endblock %}
</nav>
</div>
</div>
{% endblock %}
{% extends 'careers/base.html' %}
{% block breadcrumb_items %}
{{ block.super }}
<span class="breadcrumb-item"><a href="{% url 'careers:jobopenings' %}">Job Openings</a></span>
<span class="breadcrumb-item">{{ jobopening }}</span>
{% endblock %}
{% block pagetitle %}: Job Opening details{% endblock pagetitle %}
{% block content %}
<div class="row">
<div class="col-12">
{{ jobopening }}
</div>
</div>
{% endblock content %}
{% extends 'careers/base.html' %}
{% load bootstrap %}
{% block breadcrumb_items %}
{{ block.super }}
<span class="breadcrumb-item"><a href="{% url 'careers:jobopenings' %}">Job Openings</a></span>
<span class="breadcrumb-item">{% if form.instance.id %}Update {{ form.instance }}{% else %}Add new Job Opening{% endif %}</span>
{% endblock %}
{% block pagetitle %}: Job Openings{% endblock pagetitle %}
{% block content %}
<div class="row">
<div class="col-12">
<form action="" method="post">
{% csrf_token %}
{{ form|bootstrap }}
<input type="submit" value="Submit" class="btn btn-primary">
</form>
</div>
</div>
{% endblock content %}
{% extends 'careers/base.html' %}
{% load bootstrap %}
{% load automarkup %}
{% block breadcrumb_items %}
{{ block.super }}
<span class="breadcrumb-item">Job Openings</a></span>
{% endblock %}
{% block pagetitle %}: Job Openings{% endblock pagetitle %}
{% block content %}
<div class="row">
<div class="col-12">
<h1 class="highlight">
Job Openings
</h1>
{% if perms.careers.add_jobopening %}
<ul>
<li><a href="{% url 'careers:jobopening_create' %}">Add a Job Opening</a></li>
</ul>
{% endif %}
<div class="card-columns">
{% for job in object_list %}
<div class="card">
<div class="card-header">
{{ job.title }}
</div>
<div class="card-body">
{{ job.description|automarkup }}
</div>
</div>
{% endfor %}
</div>
</div>
</div>
{% endblock content %}
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from django.test import TestCase
# Create your tests here.
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from django.urls import path
from . import views
app_name = 'careers'
urlpatterns = [
path( # /careers/job_openings/add
'job_openings/add',
views.JobOpeningCreateView.as_view(),
name='jobopening_create'
),
path( # /careers/job_openings/update
'job_openings/update',
views.JobOpeningUpdateView.as_view(),
name='jobopening_update'
),
path( # /careers/job_openings
'job_openings',
views.JobOpeningListView.as_view(),
name='jobopenings'
),
path( # /careers/job_openings/<slug>
'job_openings/<slug:slug>',
views.JobOpeningDetailView.as_view(),
name='jobopening_detail'
),
]
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from django.contrib.auth.mixins import UserPassesTestMixin
from django.urls import reverse_lazy
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView
from django.views.generic.list import ListView
from .models import JobOpening
class JobOpeningCreateView(UserPassesTestMixin, CreateView):
model = JobOpening
fields = '__all__'
success_url = reverse_lazy('careers:jobopenings')
def test_func(self):
return self.request.user.has_perm('careers.can_add_jobopening')
class JobOpeningUpdateView(UserPassesTestMixin, UpdateView):
model = JobOpening
fields = '__all__'
success_url = reverse_lazy('careers:jobopenings')
def test_func(self):
return self.request.user.has_perm('careers.can_add_jobopening')
class JobOpeningListView(ListView):
model = JobOpening
class JobOpeningDetailView(DetailView):
model = JobOpening
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment