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',
|
'posts.apps.PostsConfig',
|
||||||
'members.apps.MembersConfig',
|
'members.apps.MembersConfig',
|
||||||
'documents.apps.DocumentsConfig',
|
'documents.apps.DocumentsConfig',
|
||||||
|
'blackboard.apps.BlackboardConfig',
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
|||||||
@@ -38,4 +38,5 @@ urlpatterns = [
|
|||||||
path('ckeditor/', include('ckeditor_uploader.urls')),
|
path('ckeditor/', include('ckeditor_uploader.urls')),
|
||||||
path('api/', include(router.urls)),
|
path('api/', include(router.urls)),
|
||||||
path('members/', include('members.urls'), name='members'),
|
path('members/', include('members.urls'), name='members'),
|
||||||
|
path('blackboard/', include('blackboard.urls'), name='blackboard'),
|
||||||
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
] + 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 %}
|
{% endif %}
|
||||||
<li class=""><a href="{%url 'home'%}">Aktuelles</a> </li>
|
<li class=""><a href="{%url 'home'%}">Aktuelles</a> </li>
|
||||||
<li class=""><a href="/fotos">Fotos</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>
|
<li class=""><a href="{%url 'members'%}">Mitarbeiter</a> </li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user