added a blackboard
This commit is contained in:
0
fet2020/blackboard/__init__.py
Normal file
0
fet2020/blackboard/__init__.py
Normal file
21
fet2020/blackboard/admin.py
Normal file
21
fet2020/blackboard/admin.py
Normal file
@@ -0,0 +1,21 @@
|
||||
from django.contrib import admin
|
||||
from .models import JobPosting
|
||||
|
||||
# Register your models here.
|
||||
|
||||
class JobPostingAdmin(admin.ModelAdmin):
|
||||
model = JobPosting
|
||||
|
||||
fieldsets = (
|
||||
(None, {
|
||||
'fields': (
|
||||
'companyName',
|
||||
'jobName',
|
||||
'salary',
|
||||
'pdfLocation',
|
||||
'publishDate',
|
||||
)
|
||||
}),
|
||||
)
|
||||
|
||||
admin.site.register(JobPosting, JobPostingAdmin)
|
||||
5
fet2020/blackboard/apps.py
Normal file
5
fet2020/blackboard/apps.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class BlackboardConfig(AppConfig):
|
||||
name = 'blackboard'
|
||||
89
fet2020/blackboard/models.py
Normal file
89
fet2020/blackboard/models.py
Normal file
@@ -0,0 +1,89 @@
|
||||
from django.db import models
|
||||
from easy_thumbnails.fields import ThumbnailerImageField
|
||||
from django.core.validators import ValidationError
|
||||
from django.utils import timezone
|
||||
import ghostscript
|
||||
import locale
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.conf import settings
|
||||
from os.path import splitext, basename
|
||||
import os
|
||||
|
||||
|
||||
import logging
|
||||
logger = logging.getLogger('posts')
|
||||
request_logger = logging.getLogger('django.request')
|
||||
|
||||
# Create your models here
|
||||
|
||||
|
||||
## Datenbank:
|
||||
#Firmenname ÖBB
|
||||
#Job name Junior Chef
|
||||
#pdf location ./blackboard/pdf/20201002_oebb_jun.pdf
|
||||
#pdf thumbnail location ./blackboard/thumb/20201002_oebb_jun_thumb.jpg
|
||||
#publish date 20201002
|
||||
|
||||
|
||||
class JobPosting(models.Model):
|
||||
companyName = models.CharField(max_length=128)
|
||||
jobName = models.CharField(max_length=128)
|
||||
salary = models.PositiveSmallIntegerField()
|
||||
pdfLocation = models.FileField(upload_to='uploads/blackboard/pdf/')
|
||||
pdf_thumb_location = models.CharField(max_length=128)
|
||||
publishDate = models.DateField('date published', default=timezone.now)
|
||||
|
||||
|
||||
# Managers
|
||||
all_jobPosting = models.Manager()
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Stellenausschreibung"
|
||||
verbose_name_plural = "Stellenausschreibungen"
|
||||
|
||||
def __str__(self):
|
||||
return str(self.publishDate) + "_" + self.companyName + "_" + self.jobName
|
||||
|
||||
|
||||
def pdf2jpeg(self, pdf_input_path, jpeg_output_path):
|
||||
args = ["pef2jpeg", # actual value doesn't matter
|
||||
"-dNOPAUSE",
|
||||
"-sDEVICE=jpeg",
|
||||
"-dDEVICEWIDTHPOINTS=600",
|
||||
"-dDEVICEHEIGHTPOINTS=800",
|
||||
#"-r144",
|
||||
"-sOutputFile=" + jpeg_output_path,
|
||||
pdf_input_path]
|
||||
|
||||
encoding = locale.getpreferredencoding()
|
||||
args = [a.encode(encoding) for a in args]
|
||||
|
||||
ghostscript.Ghostscript(*args)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
if not os.path.exists(settings.MEDIA_ROOT + "uploads/blackboard/thumb/"):
|
||||
os.makedirs(settings.MEDIA_ROOT + "uploads/blackboard/thumb/")
|
||||
|
||||
pdf_thumb_location_full = settings.MEDIA_ROOT + "uploads/blackboard/thumb/" + splitext(basename(self.pdfLocation.name))[0] + ".jpg"
|
||||
self.pdf_thumb_location = "/files/uploads/blackboard/thumb/" + splitext(basename(self.pdfLocation.name))[0] + ".jpg"
|
||||
self.pdf2jpeg(self.pdfLocation.path, pdf_thumb_location_full)
|
||||
request_logger.info("SavenThumbAs: " + self.pdf_thumb_location)
|
||||
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.')
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
3
fet2020/blackboard/tests.py
Normal file
3
fet2020/blackboard/tests.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
12
fet2020/blackboard/urls.py
Normal file
12
fet2020/blackboard/urls.py
Normal file
@@ -0,0 +1,12 @@
|
||||
from django.urls import path
|
||||
|
||||
from . import views
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
path('', views.index, name='blackboard'),
|
||||
|
||||
#path('<str:filter>', views.members_view),
|
||||
#path('jobs/<str:slug>', views.jobs_view),
|
||||
#path('member/<str:member_name>', views.profile_view, name="member"),
|
||||
]
|
||||
14
fet2020/blackboard/views.py
Normal file
14
fet2020/blackboard/views.py
Normal file
@@ -0,0 +1,14 @@
|
||||
from django.shortcuts import render
|
||||
from .models import JobPosting
|
||||
from django.utils import timezone
|
||||
import datetime
|
||||
|
||||
|
||||
# Create your views here.
|
||||
|
||||
def index(request):
|
||||
jobPost_cutoff = datetime.date.today() - datetime.timedelta(30)#30days from now
|
||||
context = {
|
||||
"jobPostings": JobPosting.all_jobPosting.filter(publishDate__gt=jobPost_cutoff),
|
||||
}
|
||||
return render(request, 'blackboard/index.html', context)
|
||||
@@ -81,6 +81,7 @@ INSTALLED_APPS = [
|
||||
'posts.apps.PostsConfig',
|
||||
'members.apps.MembersConfig',
|
||||
'documents.apps.DocumentsConfig',
|
||||
'blackboard.apps.BlackboardConfig',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
||||
@@ -38,4 +38,5 @@ urlpatterns = [
|
||||
path('ckeditor/', include('ckeditor_uploader.urls')),
|
||||
path('api/', include(router.urls)),
|
||||
path('members/', include('members.urls'), name='members'),
|
||||
path('blackboard/', include('blackboard.urls'), name='blackboard'),
|
||||
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||
|
||||
16
fet2020/templates/blackboard/index.html
Normal file
16
fet2020/templates/blackboard/index.html
Normal file
@@ -0,0 +1,16 @@
|
||||
{% extends 'layout.html' %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="grid-container">
|
||||
<h1>Blackboard</h1>
|
||||
|
||||
<!-- Tab panes -->
|
||||
<div class="tabs-content">
|
||||
{% for job in jobPostings %}
|
||||
{% include 'blackboard/partials/_jobPosting.html' %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
18
fet2020/templates/blackboard/partials/_jobPosting.html
Normal file
18
fet2020/templates/blackboard/partials/_jobPosting.html
Normal file
@@ -0,0 +1,18 @@
|
||||
<div class="grid-x">
|
||||
<div class="medium-3 large-2 small-6 cell">
|
||||
<h2>{{job.companyName}}</h2>
|
||||
<p>{{job.jobName}}<br>
|
||||
Mindestgehalt: {{job.salary}}€</p>
|
||||
{# only thumb and name of member #}
|
||||
<a class="thumbnail member-thumb" href="{{job.pdfLocation.url}}" style="width:200px;height:300px">
|
||||
<img src="{{job.pdf_thumb_location}}" alt="" />
|
||||
<div class="thumb-layer">
|
||||
<div>
|
||||
<h1>{{job.companyName}}</h1>
|
||||
<p>{{job.jobName}} <br>
|
||||
Mindestgehalt: {{job.salary}}€</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -29,6 +29,7 @@
|
||||
{% endif %}
|
||||
<li class=""><a href="{%url 'home'%}">Aktuelles</a> </li>
|
||||
<li class=""><a href="/fotos">Fotos</a> </li>
|
||||
<li class=""><a href="/blackboard">Blackboard</a> </li>
|
||||
<li class=""><a href="{%url 'members'%}">Mitarbeiter</a> </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user