SILENCED_SYSTEM_CHECKS = ['fields.W342',]
ADMIN_MENU_ORDER = (
- (_('Pages'), ('pages.Page', 'organization-pages.Home', 'organization-pages.JobOffer')),
+ (_('Pages'), ('pages.Page', 'organization-pages.Home', 'organization-job.JobOffer')),
(_('Media'), ('organization-media.Video', 'organization-media.VideoCategory', 'organization-media.Audio', 'organization-media.Playlist', (_('Media Library'), 'fb_browse'),)),
(_('Events'), ('mezzanine_agenda.Event', 'mezzanine_agenda.EventLocation', 'mezzanine_agenda.EventPrice', 'mezzanine_agenda.EventCategory')),
(_('Magazine'), ('organization-magazine.Article', 'organization-magazine.Brief',)),
--- /dev/null
+"""
+Provides abstract models and admin features used throughout the various
+Mezzanine apps.
+"""
+from __future__ import unicode_literals
+
+from mezzanine import __version__ # noqa
+
+
+default_app_config = 'organization.job.apps.OrganizationJobConfig'
--- /dev/null
+from django.contrib import admin
+from mezzanine.utils.static import static_lazy as static
+from copy import deepcopy
+from mezzanine.core.admin import *
+from organization.job.models import JobOffer
+
+
+class JobOfferAdminDisplayable(BaseTranslationModelAdmin):
+
+ model = JobOffer
+
+
+admin.site.register(JobOffer, JobOfferAdminDisplayable)
--- /dev/null
+from __future__ import unicode_literals
+
+from django.apps import AppConfig
+
+class OrganizationJobConfig(AppConfig):
+ name = 'organization.job'
+ label = 'organization-job'
--- /dev/null
+[{"model": "organization-job.joboffer", "pk": 1, "fields": {"keywords_string": "", "site": 1, "title": "Candidature Spontan\u00e9e", "title_fr": "Candidature Spontan\u00e9e", "title_en": "", "slug": "candidature-spontanee", "_meta_title": "", "description": "Nec minus feminae quoque calamitatum participes fuere similium. nam ex hoc quoque sexu peremptae sunt originis altae conplures, adulteriorum flagitiis obnoxiae vel stuprorum. inter quas notiores fuere Claritas et Flaviana, quarum altera cum duceretur ad mortem, indumento, quo vestita erat, abrepto, ne velemen quidem secreto membrorum sufficiens retinere permissa est. ideoque carnifex nefas admisisse convictus inmane, vivus exustus est.", "gen_description": true, "created": "2016-09-09T08:07:31.034Z", "updated": "2016-09-09T08:07:31.034Z", "status": 2, "publish_date": "2016-09-09T08:07:31.022Z", "expiry_date": null, "short_url": "", "in_sitemap": true, "content": "<p>Nec minus feminae quoque calamitatum participes fuere similium. nam ex hoc quoque sexu peremptae sunt originis altae conplures, adulteriorum flagitiis obnoxiae vel stuprorum. inter quas notiores fuere Claritas et Flaviana, quarum altera cum duceretur ad mortem, indumento, quo vestita erat, abrepto, ne velemen quidem secreto membrorum sufficiens retinere permissa est. ideoque carnifex nefas admisisse convictus inmane, vivus exustus est.</p>", "content_fr": "<p>Nec minus feminae quoque calamitatum participes fuere similium. nam ex hoc quoque sexu peremptae sunt originis altae conplures, adulteriorum flagitiis obnoxiae vel stuprorum. inter quas notiores fuere Claritas et Flaviana, quarum altera cum duceretur ad mortem, indumento, quo vestita erat, abrepto, ne velemen quidem secreto membrorum sufficiens retinere permissa est. ideoque carnifex nefas admisisse convictus inmane, vivus exustus est.</p>", "content_en": "", "email": "zawadzki@ircam.fr", "type": ""}}]
\ No newline at end of file
--- /dev/null
+from dal import autocomplete
+
+from django import forms
+from django.forms.widgets import HiddenInput
+from django.forms import ModelForm
+from organization.job.models import JobResponse
+
+
+class JobResponseForm(ModelForm):
+
+ def __init__(self, *args, **kwargs):
+ super(JobResponseForm, self).__init__(*args, **kwargs)
+ self.fields['job_offer'].widget = forms.HiddenInput()
+
+ class Meta:
+ model = JobResponse
+ fields = ['first_name', 'last_name', 'email', 'curriculum_vitae', 'cover_letter', 'job_offer']
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-09 07:50
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import mezzanine.core.fields
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ('sites', '0002_alter_domain_unique'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='JobOffer',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('keywords_string', models.CharField(blank=True, editable=False, max_length=500)),
+ ('title', models.CharField(max_length=500, verbose_name='Title')),
+ ('title_fr', models.CharField(max_length=500, null=True, verbose_name='Title')),
+ ('title_en', models.CharField(max_length=500, null=True, verbose_name='Title')),
+ ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')),
+ ('_meta_title', models.CharField(blank=True, help_text='Optional title to be used in the HTML title tag. If left blank, the main title field will be used.', max_length=500, null=True, verbose_name='Title')),
+ ('description', models.TextField(blank=True, verbose_name='Description')),
+ ('gen_description', models.BooleanField(default=True, help_text='If checked, the description will be automatically generated from content. Uncheck if you want to manually set a custom description.', verbose_name='Generate description')),
+ ('created', models.DateTimeField(editable=False, null=True)),
+ ('updated', models.DateTimeField(editable=False, null=True)),
+ ('status', models.IntegerField(choices=[(1, 'Draft'), (2, 'Published')], default=2, help_text='With Draft chosen, will only be shown for admin users on the site.', verbose_name='Status')),
+ ('publish_date', models.DateTimeField(blank=True, db_index=True, help_text="With Published chosen, won't be shown until this time", null=True, verbose_name='Published from')),
+ ('expiry_date', models.DateTimeField(blank=True, help_text="With Published chosen, won't be shown after this time", null=True, verbose_name='Expires on')),
+ ('short_url', models.URLField(blank=True, null=True)),
+ ('in_sitemap', models.BooleanField(default=True, verbose_name='Show in sitemap')),
+ ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')),
+ ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+ ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')),
+ ('email', models.EmailField(max_length=255, verbose_name='Email to forward response')),
+ ('type', models.CharField(blank=True, choices=[('internship', 'internship'), ('job', 'job')], max_length=32, verbose_name='Job offer type')),
+ ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
+ ],
+ options={
+ 'verbose_name': 'job offer',
+ 'verbose_name_plural': 'job offers',
+ },
+ ),
+ migrations.CreateModel(
+ name='JobResponse',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('first_name', models.CharField(max_length=255, verbose_name='first name')),
+ ('last_name', models.CharField(max_length=255, verbose_name='last name')),
+ ('email', models.EmailField(max_length=255, verbose_name='email')),
+ ('curriculum_vitae', models.FileField(max_length=1024, upload_to='job_responses/%Y/%m/%d/', verbose_name='curriculum vitae')),
+ ('cover_letter', models.FileField(max_length=1024, upload_to='job_responses/%Y/%m/%d/', verbose_name='cover letter')),
+ ('job_offer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='job_response', to='organization-job.JobOffer', verbose_name='job offer')),
+ ],
+ options={
+ 'verbose_name': 'job_reponse',
+ 'verbose_name_plural': 'job_reponses',
+ },
+ ),
+ ]
--- /dev/null
+from django.db import models
+from django.utils.translation import ugettext_lazy as _
+from django.core.urlresolvers import reverse, reverse_lazy
+from mezzanine.core.models import Displayable
+from organization.core.models import *
+from organization.media.models import *
+
+class JobResponse(models.Model):
+
+ first_name = models.CharField(max_length=255, null=False, verbose_name=_('first name'))
+ last_name = models.CharField(max_length=255, null=False, verbose_name=_('last name'))
+ email = models.EmailField(max_length=255, null=False, verbose_name=_('email'))
+ #@TODO validate type format
+ curriculum_vitae = models.FileField(_("curriculum vitae"), max_length=1024, upload_to="job_responses/%Y/%m/%d/")
+ cover_letter = models.FileField(_("cover letter"), max_length=1024, upload_to="job_responses/%Y/%m/%d/")
+ job_offer = models.ForeignKey("JobOffer", verbose_name=_('job offer'), related_name='job_response', blank=True, null=True, on_delete=models.SET_NULL)
+
+ class Meta:
+ verbose_name = _('job_reponse')
+ verbose_name_plural = _("job_reponses")
+
+
+class JobOffer(Displayable, RichText):
+
+ email = models.EmailField(max_length=255, null=False, verbose_name=_('Email to forward response'))
+ type = models.CharField(blank=True, choices=[('internship', 'internship'), ('job', 'job')], max_length=32, verbose_name='Job offer type')
+
+ def get_absolute_url(self):
+ return reverse("organization-job-offer-detail", kwargs={"slug": self.slug})
+
+ class Meta:
+ verbose_name = _('job offer')
+ verbose_name_plural = _("job offers")
+
+
--- /dev/null
+from django.test import TestCase
+
+# Create your tests here.
--- /dev/null
+from modeltranslation.translator import translator, register, TranslationOptions
+from mezzanine.pages.models import Page, RichText
+from mezzanine.pages.translation import TranslatedRichText
+from organization.job.models import *
+
+
+@register(JobOffer)
+class JobOfferTranslationOptions(TranslationOptions):
+
+ fields = ('title', 'content')
--- /dev/null
+from __future__ import unicode_literals
+
+from django.conf.urls import patterns, include, url
+from django.conf.urls.i18n import i18n_patterns
+from django.contrib import admin
+
+from mezzanine.core.views import direct_to_template
+from mezzanine.conf import settings
+from organization.job.views import JobOfferDetailView, JobOfferListView
+
+
+_slash = "/" if settings.APPEND_SLASH else ""
+
+urlpatterns = [
+ url("^job-offer/(?P<slug>.*)%s$" % _slash, JobOfferDetailView.as_view(), name='organization-job-offer-detail'),
+ url("^job-offer/$", JobOfferListView.as_view(), name='organization-job-offer-list'),
+ #url(r'job-response/add/$', JobResponseCreate.as_view(), name='job-response-add'),
+]
--- /dev/null
+import os
+from django.shortcuts import render
+from django.views.generic import DetailView, ListView, TemplateView
+from django.views.generic.edit import CreateView
+from django.contrib import messages
+from django.core.urlresolvers import reverse, reverse_lazy
+from django.utils.translation import ugettext_lazy as _
+from organization.job.models import JobOffer, JobResponse
+from organization.job.forms import JobResponseForm
+
+
+class JobOfferDetailView(CreateView):
+
+ model = JobResponse
+ template_name='job/job_offer_detail.html'
+ context_object_name = 'job_offer'
+ form_class = JobResponseForm
+
+ def get_context_data(self, **kwargs):
+ context = super(JobOfferDetailView, self).get_context_data(**kwargs)
+ job_offer = JobOffer.objects.get(slug=self.kwargs['slug'])
+ if job_offer :
+ context['job_offer'] = job_offer
+ return context
+
+ def get_initial(self):
+ initial = super(JobOfferDetailView, self).get_initial()
+ job_offer = JobOffer.objects.get(slug=self.kwargs['slug'])
+ if job_offer :
+ initial['job_offer'] = job_offer
+ return initial
+
+ def get_success_url(self):
+ return reverse_lazy('organization-job-offer-detail', kwargs={'slug':self.kwargs['slug']})
+
+ def form_valid(self, form):
+ # check extension uploaded files
+ # name_cv, ext_cv = os.path.splitext(self.cleaned_data['curriculum_vitae'].name)
+ # name_cl, ext_cl = os.path.splitext(self.cleaned_data['cover_letter'].name)
+ # if ext_cv not in ['.pdf', '.PDF', '.doc', '.docx']:
+ # raise forms.ValidationError("Only .pdf, .doc, .docx files allowed")
+ messages.info(self.request, _("You have successfully submitted your application."))
+ return super(JobOfferDetailView, self).form_valid(form)
+
+
+class JobOfferListView(ListView):
+
+ model = JobOffer
+ template_name='job/job_offer_list.html'
+ context_object_name = 'job_offer'
+
+ def get_queryset(self, **kwargs):
+ return self.model.objects.published()
+
+ def get_context_data(self, **kwargs):
+ context = super(JobOfferListView, self).get_context_data(**kwargs)
+ return context
-from django.contrib import admin
-
from django.contrib import admin
from mezzanine.utils.static import static_lazy as static
from copy import deepcopy
from organization.pages.models import (
DynamicContentHomeSlider,
DynamicContentHomeBody,
- Home,
- JobOffer
+ Home
)
from organization.pages.forms import DynamicContentHomeSliderForm, DynamicContentHomeBodyForm
inlines = [DynamicContentHomeSliderInline, DynamicContentHomeBodyInline ]
-class JobOfferAdminDisplayable(BaseTranslationModelAdmin):
-
- model = JobOffer
-
admin.site.register(CustomPage, CustomPageAdmin)
admin.site.register(Home, HomeAdminDisplayable)
-admin.site.register(JobOffer, JobOfferAdminDisplayable)
from mezzanine.core.models import Orderable
from organization.magazine.models import Article, Topic, Brief
from organization.pages.models import CustomPage
-from organization.pages.models import DynamicContentHomeSlider, DynamicContentHomeBody, JobResponse
+from organization.pages.models import DynamicContentHomeSlider, DynamicContentHomeBody
class DynamicContentHomeSliderForm(autocomplete.FutureModelForm):
class Meta:
model = DynamicContentHomeBody
fields = ('content_object',)
-
-
-class JobResponseForm(ModelForm):
-
- def __init__(self, *args, **kwargs):
- super(JobResponseForm, self).__init__(*args, **kwargs)
- self.fields['job_offer'].widget = forms.HiddenInput()
-
- class Meta:
- model = JobResponse
- fields = ['first_name', 'last_name', 'email', 'curriculum_vitae', 'cover_letter', 'job_offer']
+++ /dev/null
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-09-07 09:38
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('sites', '0002_alter_domain_unique'),
- ('organization-pages', '0001_initial'),
- ]
-
- operations = [
- migrations.CreateModel(
- name='JobOffer',
- fields=[
- ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('keywords_string', models.CharField(blank=True, editable=False, max_length=500)),
- ('title', models.CharField(max_length=500, verbose_name='Title')),
- ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')),
- ('_meta_title', models.CharField(blank=True, help_text='Optional title to be used in the HTML title tag. If left blank, the main title field will be used.', max_length=500, null=True, verbose_name='Title')),
- ('description', models.TextField(blank=True, verbose_name='Description')),
- ('gen_description', models.BooleanField(default=True, help_text='If checked, the description will be automatically generated from content. Uncheck if you want to manually set a custom description.', verbose_name='Generate description')),
- ('created', models.DateTimeField(editable=False, null=True)),
- ('updated', models.DateTimeField(editable=False, null=True)),
- ('status', models.IntegerField(choices=[(1, 'Draft'), (2, 'Published')], default=2, help_text='With Draft chosen, will only be shown for admin users on the site.', verbose_name='Status')),
- ('publish_date', models.DateTimeField(blank=True, db_index=True, help_text="With Published chosen, won't be shown until this time", null=True, verbose_name='Published from')),
- ('expiry_date', models.DateTimeField(blank=True, help_text="With Published chosen, won't be shown after this time", null=True, verbose_name='Expires on')),
- ('short_url', models.URLField(blank=True, null=True)),
- ('in_sitemap', models.BooleanField(default=True, verbose_name='Show in sitemap')),
- ('email', models.EmailField(max_length=255, verbose_name='Email to forward response')),
- ('type', models.CharField(blank=True, choices=[('internship', 'internship'), ('job', 'job')], max_length=32, verbose_name='Job offer type')),
- ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
- ],
- options={
- 'verbose_name': 'job_offer',
- 'verbose_name_plural': 'job_offer',
- },
- ),
- migrations.CreateModel(
- name='JobResponse',
- fields=[
- ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('first_name', models.CharField(max_length=255, verbose_name='first name')),
- ('last_name', models.CharField(max_length=255, verbose_name='last name')),
- ('email', models.EmailField(max_length=255, verbose_name='email')),
- ('curriculum_vitae', mezzanine.core.fields.FileField(max_length=1024, verbose_name='curriculum_vitae')),
- ('cover_letter', mezzanine.core.fields.FileField(max_length=1024, verbose_name='curriculum_vitae')),
- ('job_offer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-pages.JobOffer', verbose_name='job offer')),
- ],
- options={
- 'verbose_name': 'job_reponse',
- 'verbose_name_plural': 'job_reponses',
- },
- ),
- ]
+++ /dev/null
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-09-07 09:51
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('organization-pages', '0002_joboffer_jobresponse'),
- ]
-
- operations = [
- migrations.AddField(
- model_name='joboffer',
- name='title_en',
- field=models.CharField(max_length=500, null=True, verbose_name='Title'),
- ),
- migrations.AddField(
- model_name='joboffer',
- name='title_fr',
- field=models.CharField(max_length=500, null=True, verbose_name='Title'),
- ),
- ]
+++ /dev/null
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-09-07 09:53
-from __future__ import unicode_literals
-
-from django.db import migrations
-import mezzanine.core.fields
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('organization-pages', '0003_auto_20160907_1151'),
- ]
-
- operations = [
- migrations.AlterModelOptions(
- name='joboffer',
- options={'verbose_name': 'job offer', 'verbose_name_plural': 'job offers'},
- ),
- migrations.AddField(
- model_name='joboffer',
- name='content',
- field=mezzanine.core.fields.RichTextField(default='', verbose_name='Content'),
- preserve_default=False,
- ),
- ]
+++ /dev/null
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-09-07 13:29
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('organization-pages', '0004_auto_20160907_1153'),
- ]
-
- operations = [
- migrations.AlterField(
- model_name='jobresponse',
- name='job_offer',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='job_response', to='organization-pages.JobOffer', verbose_name='job offer'),
- ),
- ]
+++ /dev/null
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-09-08 08:32
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('sites', '0002_alter_domain_unique'),
- ('organization-pages', '0005_auto_20160907_1529'),
- ]
-
- operations = [
- migrations.AddField(
- model_name='jobresponse',
- name='site',
- field=models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'),
- preserve_default=False,
- ),
- migrations.AddField(
- model_name='jobresponse',
- name='slug',
- field=models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL'),
- ),
- migrations.AddField(
- model_name='jobresponse',
- name='title',
- field=models.CharField(default='job', max_length=500, verbose_name='Title'),
- preserve_default=False,
- ),
- ]
+++ /dev/null
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-09-08 13:18
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('organization-pages', '0006_auto_20160908_1032'),
- ]
-
- operations = [
- migrations.AlterField(
- model_name='jobresponse',
- name='cover_letter',
- field=models.FileField(max_length=1024, upload_to='job_responses/%Y/%m/%d/', verbose_name='cover letter'),
- ),
- migrations.AlterField(
- model_name='jobresponse',
- name='curriculum_vitae',
- field=models.FileField(max_length=1024, upload_to='job_responses/%Y/%m/%d/', verbose_name='curriculum vitae'),
- ),
- ]
+++ /dev/null
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.7 on 2016-09-08 14:02
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('organization-pages', '0007_auto_20160908_1518'),
- ]
-
- operations = [
- migrations.RemoveField(
- model_name='jobresponse',
- name='site',
- ),
- migrations.RemoveField(
- model_name='jobresponse',
- name='slug',
- ),
- migrations.RemoveField(
- model_name='jobresponse',
- name='title',
- ),
- ]
def get_absolute_url(self):
return reverse("organization-home")
-
-
-class JobResponse(models.Model):
-
- first_name = models.CharField(max_length=255, null=False, verbose_name=_('first name'))
- last_name = models.CharField(max_length=255, null=False, verbose_name=_('last name'))
- email = models.EmailField(max_length=255, null=False, verbose_name=_('email'))
- #@TODO validate type format
- curriculum_vitae = models.FileField(_("curriculum vitae"), max_length=1024, upload_to="job_responses/%Y/%m/%d/")
- cover_letter = models.FileField(_("cover letter"), max_length=1024, upload_to="job_responses/%Y/%m/%d/")
- job_offer = models.ForeignKey("JobOffer", verbose_name=_('job offer'), related_name='job_response', blank=True, null=True, on_delete=models.SET_NULL)
-
- class Meta:
- verbose_name = _('job_reponse')
- verbose_name_plural = _("job_reponses")
-
-
-class JobOffer(Displayable, RichText):
-
- email = models.EmailField(max_length=255, null=False, verbose_name=_('Email to forward response'))
- type = models.CharField(blank=True, choices=[('internship', 'internship'), ('job', 'job')], max_length=32, verbose_name='Job offer type')
-
- def get_absolute_url(self):
- return reverse("organization-job-offer-detail", kwargs={"slug": self.slug})
-
- class Meta:
- verbose_name = _('job offer')
- verbose_name_plural = _("job offers")
class PageAudioTranslationOptions(TranslationOptions):
pass
-
-@register(JobOffer)
-class PageAudioTranslationOptions(TranslationOptions):
-
- fields = ('title',)
from organization.pages.views import (
DynamicContentHomeSliderView,
DynamicContentHomeBodyView,
- HomeView,
- JobOfferDetailView,
- JobOfferListView,
- # JobResponseCreate
+ HomeView
)
_slash = "/" if settings.APPEND_SLASH else ""
url("^dynamic-content-home-slider/$", DynamicContentHomeSliderView.as_view(), name='dynamic-content-home-slider'),
url("^dynamic-content-home-body/$", DynamicContentHomeBodyView.as_view(), name='dynamic-content-home-body'),
url("^home/$", HomeView.as_view(), name='organization-home'),
- url("^job-offer/(?P<slug>.*)%s$" % _slash, JobOfferDetailView.as_view(), name='organization-job-offer-detail'),
- url("^job-offer/$", JobOfferListView.as_view(), name='organization-job-offer-list'),
- #url(r'job-response/add/$', JobResponseCreate.as_view(), name='job-response-add'),
]
from django.shortcuts import render
from django.views.generic import DetailView, ListView, TemplateView
-from django.views.generic.edit import CreateView
-from django.contrib import messages
from dal import autocomplete
from dal_select2_queryset_sequence.views import Select2QuerySetSequenceView
from django.core.urlresolvers import reverse, reverse_lazy
from organization.pages.models import CustomPage
from organization.core.views import SlugMixin
from organization.magazine.models import Article, Topic, Brief
-from organization.pages.models import Home, JobOffer, JobResponse
-from organization.pages.forms import JobResponseForm
+from organization.pages.models import Home
+
class HomeView(SlugMixin, ListView):
return context
-class JobOfferDetailView(CreateView):
-
- model = JobResponse
- template_name='pages/joboffer/job_offer_detail.html'
- context_object_name = 'job_offer'
- form_class = JobResponseForm
-
- def get_context_data(self, **kwargs):
- context = super(JobOfferDetailView, self).get_context_data(**kwargs)
- job_offer = JobOffer.objects.get(slug=self.kwargs['slug'])
- if job_offer :
- context['job_offer'] = job_offer
- return context
-
- def get_initial(self):
- initial = super(JobOfferDetailView, self).get_initial()
- job_offer = JobOffer.objects.get(slug=self.kwargs['slug'])
- if job_offer :
- initial['job_offer'] = job_offer
- return initial
-
- def get_success_url(self):
- return reverse_lazy('organization-job-offer-detail', kwargs={'slug':self.kwargs['slug']})
-
- def form_valid(self, form):
- messages.info(self.request, _("You have successfully submitted your application."))
- return super(JobOfferDetailView, self).form_valid(form)
-
-
-class JobOfferListView(ListView):
-
- model = JobOffer
- template_name='pages/joboffer/job_offer_list.html'
- context_object_name = 'job_offer'
-
- def get_queryset(self, **kwargs):
- return self.model.objects.published()
-
- def get_context_data(self, **kwargs):
- context = super(JobOfferListView, self).get_context_data(**kwargs)
- return context
-
-
-# class JobResponseCreate(CreateView):
-#
-# template_name = 'pages/joboffer/inc/job_response_form.html'
-# model = JobResponse
-# # form_class = JobResponseForm
-# fields = ['first_name', 'last_name', 'email', 'curriculum_vitae', 'cover_letter']
-# # success_url = '/job-offer-success/'
-#
-# def form_valid(self, form):
-# # This method is called when valid form data has been POSTed.
-# # It should return an HttpResponse.
-# # form.send_email()
-# return super(JobResponseView, self).form_valid(form)
-
-
class DynamicContentHomeSliderView(Select2QuerySetSequenceView):
def get_queryset(self):
return qs
+
class DynamicContentHomeBodyView(Select2QuerySetSequenceView):
def get_queryset(self):
url("^", include('organization.projects.urls')),
url("^", include('organization.network.urls')),
url("^", include('organization.agenda.urls')),
+ url("^", include('organization.job.urls')),
]
python $manage migrate --noinput
# python $manage bower_install -- --allow-root
python $manage create-admin-user
+# @todo searching every fixtures file in each folder
+python $manage loaddata $app/organization/job/fixtures/organization-job.json
# app start
if [ "$1" = "--runserver" ]; then
"organization.projects",
"organization.agenda",
"organization.products",
+ "organization.job",
]
--- /dev/null
+<a href="{{ jo.get_absolute_url }}" title="{{ jo.title }}">
+ <h2>{{ jo.title }}</h2>
+ <p>{{ jo.description|slice:":255" }}</p>
+</a>
--- /dev/null
+<form action="" method="post" enctype="multipart/form-data">{% csrf_token %}
+ {{ form.as_p }}
+ <input type="submit" value="Send message" />
+</form>
--- /dev/null
+{% extends "pages/page.html" %}
+{% load mezzanine_tags keyword_tags i18n organization_tags %}
+
+
+{% block page_title %}
+
+ {% editable project.title %}
+ <h1 class="dotted">{{ job_offer.title }}</h1>
+ {% endeditable %}
+
+{% endblock %}
+
+{% block page_content %}
+
+ {% include "core/inc/messages.html" %}
+
+ <p>{% trans "Category" %} : {{ job_offer.type }}</p>
+ <p>{{ job_offer.content|richtext_filters|safe }}</p>
+ {% with form as job_offer.job_response %}
+ {% include "job/inc/job_response_form.html" %}
+ {% endwith %}
+{% endblock %}
--- /dev/null
+{% extends "pages/page.html" %}
+{% load i18n mezzanine_tags keyword_tags pages_tags organization_tags %}
+
+{% block meta_title %}{{ job_offer.meta_title }}{% endblock %}
+
+{% block meta_description %}{% metablock %}
+{{ job_offer.description }}
+{% endmetablock %}{% endblock %}
+
+{% block page_class %}
+ job_offer
+{% endblock %}
+
+{% block page_title %}
+ <h1 class="dashed">{% trans "Jobs" %}</h1>
+{% endblock %}
+
+{% block page_content %}
+ {% if job_offer %}
+ {% for jo in job_offer %}
+ {% include "job/inc/job_offer_card.html" %}
+ {% endfor %}
+ {% else %}
+ <p>{% trans "Please come back later. There is no job offer at the moment." %}</p>
+ {% endif %}
+
+{% endblock %}
+++ /dev/null
-<a href="{{ jo.get_absolute_url }}" title="{{ jo.title }}">
- <h2>{{ jo.title }}</h2>
- <p>{{ jo.description|slice:":255" }}</p>
-</a>
+++ /dev/null
-<form action="" method="post" enctype="multipart/form-data">{% csrf_token %}
- {{ form.as_p }}
- <input type="submit" value="Send message" />
-</form>
+++ /dev/null
-{% extends "pages/page.html" %}
-{% load mezzanine_tags keyword_tags i18n organization_tags %}
-
-
-{% block page_title %}
-
- {% editable project.title %}
- <h1 class="dotted">{{ job_offer.title }}</h1>
- {% endeditable %}
-
-{% endblock %}
-
-{% block page_content %}
-
- {% include "core/inc/messages.html" %}
-
- <p>{% trans "Category" %} : {{ job_offer.type }}</p>
- <p>{{ job_offer.content|richtext_filters|safe }}</p>
- {% with form as job_offer.job_response %}
- {% include "pages/joboffer/inc/job_response_form.html" %}
- {% endwith %}
-{% endblock %}
+++ /dev/null
-{% extends "pages/page.html" %}
-{% load i18n mezzanine_tags keyword_tags pages_tags organization_tags %}
-
-{% block meta_title %}{{ job_offer.meta_title }}{% endblock %}
-
-{% block meta_description %}{% metablock %}
-{{ job_offer.description }}
-{% endmetablock %}{% endblock %}
-
-{% block page_class %}
- job_offer
-{% endblock %}
-
-{% block page_title %}
- <h1 class="dashed">{% trans "Jobs" %}</h1>
-{% endblock %}
-
-{% block page_content %}
- {% if job_offer %}
- {% for jo in job_offer %}
- {% include "pages/joboffer/inc/job_offer_card.html" %}
- {% endfor %}
- {% else %}
- <p>{% trans "Please come back later. There is no job offer at the moment." %}</p>
- {% endif %}
-
-{% endblock %}