From: Emilie Date: Wed, 7 Sep 2016 10:00:43 +0000 (+0200) Subject: JobOffer : creating models X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=4f17dc81d22b0091ca67772e65096fa80d02f633;p=mezzo.git JobOffer : creating models --- diff --git a/app/local_settings.py b/app/local_settings.py index f76f7949..b6ce6e5d 100644 --- a/app/local_settings.py +++ b/app/local_settings.py @@ -69,7 +69,7 @@ SITE_TAGLINE = 'Institut de Recherche et de Coordination Acoustique et Musique' SILENCED_SYSTEM_CHECKS = ['fields.W342',] ADMIN_MENU_ORDER = ( - (_('Pages'), ('pages.Page', 'organization-pages.Home')), + (_('Pages'), ('pages.Page', 'organization-pages.Home', 'organization-pages.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',)), (_('Magazine'), ('organization-magazine.Article', 'organization-magazine.Brief',)), diff --git a/app/organization/pages/admin.py b/app/organization/pages/admin.py index 6b70c05a..10d3bab2 100644 --- a/app/organization/pages/admin.py +++ b/app/organization/pages/admin.py @@ -6,7 +6,12 @@ from copy import deepcopy from mezzanine.core.admin import * from mezzanine.pages.admin import PageAdmin from organization.pages.models import * -from organization.pages.models import DynamicContentHomeSlider, DynamicContentHomeBody, Home +from organization.pages.models import ( + DynamicContentHomeSlider, + DynamicContentHomeBody, + Home, + JobOffer +) from organization.pages.forms import DynamicContentHomeSliderForm, DynamicContentHomeBodyForm @@ -59,7 +64,11 @@ class HomeAdminDisplayable(BaseTranslationModelAdmin): inlines = [DynamicContentHomeSliderInline, DynamicContentHomeBodyInline ] +class JobOfferAdminDisplayable(BaseTranslationModelAdmin): + + model = JobOffer admin.site.register(CustomPage, CustomPageAdmin) admin.site.register(Home, HomeAdminDisplayable) +admin.site.register(JobOffer, JobOfferAdminDisplayable) diff --git a/app/organization/pages/migrations/0002_joboffer_jobresponse.py b/app/organization/pages/migrations/0002_joboffer_jobresponse.py new file mode 100644 index 00000000..a82cecf1 --- /dev/null +++ b/app/organization/pages/migrations/0002_joboffer_jobresponse.py @@ -0,0 +1,60 @@ +# -*- 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', + }, + ), + ] diff --git a/app/organization/pages/migrations/0003_auto_20160907_1151.py b/app/organization/pages/migrations/0003_auto_20160907_1151.py new file mode 100644 index 00000000..6f76a882 --- /dev/null +++ b/app/organization/pages/migrations/0003_auto_20160907_1151.py @@ -0,0 +1,25 @@ +# -*- 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'), + ), + ] diff --git a/app/organization/pages/migrations/0004_auto_20160907_1153.py b/app/organization/pages/migrations/0004_auto_20160907_1153.py new file mode 100644 index 00000000..3cfc79ad --- /dev/null +++ b/app/organization/pages/migrations/0004_auto_20160907_1153.py @@ -0,0 +1,26 @@ +# -*- 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, + ), + ] diff --git a/app/organization/pages/models.py b/app/organization/pages/models.py index dafca374..d67e40b2 100644 --- a/app/organization/pages/models.py +++ b/app/organization/pages/models.py @@ -76,3 +76,31 @@ class Home(Displayable): 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 = FileField(_("curriculum_vitae"), max_length=1024, upload_to="job_responses/%Y/%m/%d/") + cover_letter = FileField(_("curriculum_vitae"), max_length=1024, upload_to="job_responses/%Y/%m/%d/") + job_offer = models.ForeignKey("JobOffer", verbose_name=_('job offer'), 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') + + class Meta: + verbose_name = _('job offer') + verbose_name_plural = _("job offers") + + def get_absolute_url(self): + return reverse("organization-job-offer-detail") diff --git a/app/organization/pages/translation.py b/app/organization/pages/translation.py index 1baf9892..fe3378dd 100644 --- a/app/organization/pages/translation.py +++ b/app/organization/pages/translation.py @@ -45,7 +45,13 @@ class PageVideoTranslationOptions(TranslationOptions): pass + @register(PageAudio) class PageAudioTranslationOptions(TranslationOptions): pass + +@register(JobOffer) +class PageAudioTranslationOptions(TranslationOptions): + + fields = ('title',) diff --git a/app/organization/pages/urls.py b/app/organization/pages/urls.py index 79a5ca73..3be6940b 100644 --- a/app/organization/pages/urls.py +++ b/app/organization/pages/urls.py @@ -6,7 +6,12 @@ from django.contrib import admin from mezzanine.core.views import direct_to_template from mezzanine.conf import settings -from organization.pages.views import DynamicContentHomeSliderView, DynamicContentHomeBodyView, HomeView +from organization.pages.views import ( + DynamicContentHomeSliderView, + DynamicContentHomeBodyView, + HomeView, + JobOfferDetailView +) _slash = "/" if settings.APPEND_SLASH else "" @@ -15,5 +20,5 @@ urlpatterns = [ 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.*)%s$", JobOfferDetailView.as_view(), name='organization-job-offer-detail'), ] -'dynamic-content-home-body' diff --git a/app/organization/pages/views.py b/app/organization/pages/views.py index c4018bca..847f770e 100644 --- a/app/organization/pages/views.py +++ b/app/organization/pages/views.py @@ -6,7 +6,7 @@ from dal_select2_queryset_sequence.views import Select2QuerySetSequenceView 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 +from organization.pages.models import Home, JobOffer class HomeView(SlugMixin, ListView): @@ -28,6 +28,16 @@ class HomeView(SlugMixin, ListView): return context +class JobOfferDetailView(SlugMixin, DetailView): + + model = JobOffer + template_name='pages/job_offer_detail.html' + context_object_name = 'job_offer' + + def get_context_data(self, **kwargs): + context = super(JobOfferDetailView, self).get_context_data(**kwargs) + return context + class DynamicContentHomeSliderView(Select2QuerySetSequenceView): def get_queryset(self): diff --git a/app/organization/projects/migrations/0005_auto_20160907_1138.py b/app/organization/projects/migrations/0005_auto_20160907_1138.py new file mode 100644 index 00000000..c505b402 --- /dev/null +++ b/app/organization/projects/migrations/0005_auto_20160907_1138.py @@ -0,0 +1,20 @@ +# -*- 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 + + +class Migration(migrations.Migration): + + dependencies = [ + ('organization-projects', '0004_auto_20160905_1853'), + ] + + operations = [ + migrations.AlterField( + model_name='project', + name='type', + field=models.CharField(choices=[('internal project', 'internal project'), ('external project', 'external project')], max_length=128, verbose_name='type'), + ), + ]