add 'number of hours' (Stundenanzahl)

This commit is contained in:
2021-05-15 17:25:23 +00:00
parent 1ae6ecddae
commit 5b86fe9a18
6 changed files with 97 additions and 40 deletions

View File

@@ -8,7 +8,7 @@ class JobPostingAdmin(admin.ModelAdmin):
form = JobPostingForm form = JobPostingForm
model = JobPosting model = JobPosting
list_display = ["companyName", "jobName", "salary", "publishDate"] list_display = ["company_name", "job_name", "salary", "number_of_hours", "publish_date"]
admin.site.register(JobPosting, JobPostingAdmin) admin.site.register(JobPosting, JobPostingAdmin)

View File

@@ -7,17 +7,17 @@ from .models import JobPosting
class JobPostingForm(forms.ModelForm): class JobPostingForm(forms.ModelForm):
class Meta: class Meta:
model = JobPosting model = JobPosting
fields = ["companyName", "jobName", "salary", "pdfLocation", "publishDate"] fields = ["company_name", "job_name", "salary", "number_of_hours", "pdf_location", "publish_date"]
labels = { labels = {
"companyName": _("Firmenname"), "company_name": _("Firmenname"),
"jobName": _("Berufsbezeichnung"), "job_name": _("Berufsbezeichnung"),
"salary": _("Gehalt"), "salary": _("monatliches Gehalt (brutto)/Stundenlohn"),
"pdfLocation": _("Stellenausschreibung"), "pdf_location": _("Stellenausschreibung"),
"publishDate": _("Veröffentlichung"), "publish_date": _("Veröffentlichung"),
} }
help_texts = { help_texts = {
"pdfLocation": _("Verwendbare Formate: PDF"), "pdf_location": _("Verwendbare Formate: PDF"),
"salary": _("in Euro angeben"), "salary": _("in Euro angeben; monatliches Gehalt bei >1h, sonst Stundenlohn."),
} }

View File

@@ -0,0 +1,45 @@
# Generated by Django 3.1.5 on 2021-05-15 17:16
from django.db import migrations, models
import django.db.models.manager
class Migration(migrations.Migration):
dependencies = [
('blackboard', '0001_initial'),
]
operations = [
migrations.AlterModelManagers(
name='jobposting',
managers=[
('all_job_postings', django.db.models.manager.Manager()),
],
),
migrations.RenameField(
model_name='jobposting',
old_name='companyName',
new_name='company_name',
),
migrations.RenameField(
model_name='jobposting',
old_name='jobName',
new_name='job_name',
),
migrations.RenameField(
model_name='jobposting',
old_name='pdfLocation',
new_name='pdf_location',
),
migrations.RenameField(
model_name='jobposting',
old_name='publishDate',
new_name='publish_date',
),
migrations.AddField(
model_name='jobposting',
name='number_of_hours',
field=models.DecimalField(decimal_places=1, default=40, max_digits=3, verbose_name='Stundenanzahl'),
),
]

View File

@@ -1,3 +1,8 @@
import ghostscript
import locale
import logging
import os
from django.conf import settings from django.conf import settings
from django.core.validators import ValidationError from django.core.validators import ValidationError
from django.db import models from django.db import models
@@ -5,40 +10,43 @@ from django.urls import reverse
from django.utils import timezone from django.utils import timezone
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
import locale
import os
from os.path import splitext, basename from os.path import splitext, basename
import ghostscript
import logging
logger = logging.getLogger("blackboard") logger = logging.getLogger("blackboard")
class JobPosting(models.Model): class JobPosting(models.Model):
companyName = models.CharField(verbose_name="Firmenname", max_length=128) company_name = models.CharField(verbose_name="Firmenname", max_length=128)
jobName = models.CharField(verbose_name="Berufsbezeichnung", max_length=128) job_name = models.CharField(verbose_name="Berufsbezeichnung", max_length=128)
salary = models.PositiveSmallIntegerField( salary = models.PositiveSmallIntegerField(
verbose_name="Gehalt", verbose_name="Gehalt",
) )
pdfLocation = models.FileField( number_of_hours = models.DecimalField(
default=40,
verbose_name="Stundenanzahl",
max_digits=3,
decimal_places=1,
)
pdf_location = models.FileField(
verbose_name="Stellenausschreibung", upload_to="uploads/blackboard/pdf/" verbose_name="Stellenausschreibung", upload_to="uploads/blackboard/pdf/"
) )
pdf_thumb_location = models.CharField(max_length=128) pdf_thumb_location = models.CharField(max_length=128)
publishDate = models.DateField(
publish_date = models.DateField(
verbose_name="Veröffentlichung", default=timezone.now verbose_name="Veröffentlichung", default=timezone.now
) )
# Managers # Managers
all_jobPosting = models.Manager() all_job_postings = models.Manager()
class Meta: class Meta:
verbose_name = "Stellenausschreibung" verbose_name = "Stellenausschreibung"
verbose_name_plural = "Stellenausschreibungen" verbose_name_plural = "Stellenausschreibungen"
def __str__(self): def __str__(self):
return str(self.publishDate) + "_" + self.companyName + "_" + self.jobName return str(self.publish_date) + "_" + self.company_name + "_" + self.job_name
def get_absolute_url(self): def get_absolute_url(self):
return reverse("blackboard") return reverse("blackboard")
@@ -61,6 +69,14 @@ class JobPosting(models.Model):
with ghostscript.Ghostscript(*args) as g: with ghostscript.Ghostscript(*args) as g:
ghostscript.cleanup() ghostscript.cleanup()
def clean(self):
count = 0
for i in self.pdf_location.name:
if i == ".":
count = count + 1
if count > 1: # if more than one dot in filename
raise ValidationError(_("Keine Dateien mit >1 Punkten im Namen erlaubt."))
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
super().save(*args, **kwargs) super().save(*args, **kwargs)
@@ -70,24 +86,16 @@ class JobPosting(models.Model):
pdf_thumb_location_full = ( pdf_thumb_location_full = (
settings.MEDIA_ROOT settings.MEDIA_ROOT
+ "uploads/blackboard/thumb/" + "uploads/blackboard/thumb/"
+ splitext(basename(self.pdfLocation.name))[0] + splitext(basename(self.pdf_location.name))[0]
+ ".jpg" + ".jpg"
) )
self.pdf_thumb_location = ( self.pdf_thumb_location = (
"/files/uploads/blackboard/thumb/" "/files/uploads/blackboard/thumb/"
+ splitext(basename(self.pdfLocation.name))[0] + splitext(basename(self.pdf_location.name))[0]
+ ".jpg" + ".jpg"
) )
self.pdf2jpeg(self.pdfLocation.path, pdf_thumb_location_full) self.pdf2jpeg(self.pdf_location.path, pdf_thumb_location_full)
logger.info("SavenThumbAs: " + self.pdf_thumb_location) logger.info("SavenThumbAs: " + self.pdf_thumb_location)
super().save(*args, **kwargs) super().save(*args, **kwargs)
def clean(self):
count = 0
for i in self.pdfLocation.name:
if i == ".":
count = count + 1
if count > 1: # if more than one dot in filename
raise ValidationError(_("Keine Dateien mit >1 Punkten im Namen erlaubt."))

View File

@@ -8,7 +8,7 @@ from .models import JobPosting
def index(request): def index(request):
job_postings_cutoff = timezone.now().date() - timedelta(30) # 30days from now job_postings_cutoff = timezone.now().date() - timedelta(30) # 30days from now
job_postings = JobPosting.all_jobPosting.filter(publishDate__gt=job_postings_cutoff) job_postings = JobPosting.all_job_postings.filter(publish_date__gt=job_postings_cutoff)
bb_info = CustomFlatPage.objects.filter(title__iexact="blackboard").first() bb_info = CustomFlatPage.objects.filter(title__iexact="blackboard").first()
bb_empty = CustomFlatPage.objects.filter(title__iexact="blackboard empty").first() bb_empty = CustomFlatPage.objects.filter(title__iexact="blackboard empty").first()

View File

@@ -1,15 +1,19 @@
<div class="cell medium-4 large-3 small-12"> <div class="cell medium-4 large-3 small-12">
<h2>{{job.companyName}}</h2> <h2>{{job.company_name}}</h2>
<p>{{job.jobName}}<br> <p>{{job.job_name}}<br>
Mindestgehalt: {{job.salary}}€</p> {% if job.number_of_hours == 1 %}
Mindestgehalt: {{job.salary}}€ Stundenlohn<br></p>
{% else %}
monatliches Mindestgehalt:<br>
{{job.salary}}€ für {{job.number_of_hours}}h</p>
{% endif %}
{# only thumb and name of member #} {# only thumb and name of member #}
<a class="thumbnail member-thumb" href="{{job.pdfLocation.url}}" style="width:200px;height:280px" target="_blank"> <a class="thumbnail member-thumb" href="{{job.pdf_location.url}}" style="width:200px;height:280px" target="_blank">
<img style="width:200px;height:280px" src="{{job.pdf_thumb_location}}" alt="" /> <img style="width:200px;height:280px" src="{{job.pdf_thumb_location}}" alt="" />
<div class="thumb-layer"> <div class="thumb-layer">
<div> <div>
<h1>{{job.companyName}}</h1> <h1>{{job.company_name}}</h1>
<p>{{job.jobName}} <br> <p>{{job.job_name}}</p>
Mindestgehalt: {{job.salary}}€</p>
</div> </div>
</div> </div>
</a> </a>