]> git.parisson.com Git - mezzo.git/commitdiff
JobOffer : creating models
authorEmilie <zawadzki@ircam.fr>
Wed, 7 Sep 2016 10:00:43 +0000 (12:00 +0200)
committerEmilie <zawadzki@ircam.fr>
Wed, 7 Sep 2016 10:00:43 +0000 (12:00 +0200)
app/local_settings.py
app/organization/pages/admin.py
app/organization/pages/migrations/0002_joboffer_jobresponse.py [new file with mode: 0644]
app/organization/pages/migrations/0003_auto_20160907_1151.py [new file with mode: 0644]
app/organization/pages/migrations/0004_auto_20160907_1153.py [new file with mode: 0644]
app/organization/pages/models.py
app/organization/pages/translation.py
app/organization/pages/urls.py
app/organization/pages/views.py
app/organization/projects/migrations/0005_auto_20160907_1138.py [new file with mode: 0644]

index f76f7949c1ad37dcdf2037e98b26424f948468ec..b6ce6e5d47884d1cf0540fae7050f0f1ed1ae3a6 100644 (file)
@@ -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',)),
index 6b70c05a5ffcb8e594a38816e85884d20b4298e9..10d3bab27c0165a8b44e60feef374e4e16a7394a 100644 (file)
@@ -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 (file)
index 0000000..a82cecf
--- /dev/null
@@ -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 (file)
index 0000000..6f76a88
--- /dev/null
@@ -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 (file)
index 0000000..3cfc79a
--- /dev/null
@@ -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,
+        ),
+    ]
index dafca37408b2d4edc4edcb852494560d96638ed2..d67e40b2276bc4942ddeb4d86691d0345235c71a 100644 (file)
@@ -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")
index 1baf9892d1624effdef8da976f83b6ba7f90fa33..fe3378ddaab47e37ea6096781d5bdf6fca4e7023 100644 (file)
@@ -45,7 +45,13 @@ class PageVideoTranslationOptions(TranslationOptions):
 
     pass
 
+
 @register(PageAudio)
 class PageAudioTranslationOptions(TranslationOptions):
 
     pass
+
+@register(JobOffer)
+class PageAudioTranslationOptions(TranslationOptions):
+
+    fields = ('title',)
index 79a5ca73687691521836d3a877e86b22a7e763f4..3be6940b25aa4cd721c5f53a28070c6364d29c86 100644 (file)
@@ -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<slug>.*)%s$", JobOfferDetailView.as_view(), name='organization-job-offer-detail'),
 ]
-'dynamic-content-home-body'
index c4018bcac87e35d9ca0de1be4d19af21bcfacd24..847f770e6d81c7f039b2e4d8130a5926e79f20ec 100644 (file)
@@ -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 (file)
index 0000000..c505b40
--- /dev/null
@@ -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'),
+        ),
+    ]