Compare commits

..

7 Commits

3
.gitignore vendored

@ -3,4 +3,5 @@ venv/
*__pycache__/ *__pycache__/
db.sqlite3 db.sqlite3
customData.yml customData.yml
settings.py settings.py
mo-key.json

@ -67,7 +67,7 @@
#week { page-break-after: always; } #week { page-break-after: always; }
div#outgoing:not(:first-child) { display: none; } div#outgoing:not(:first-child) { display: none; }
</style> </style>
<!--@JS-DATA@--><script>const myDATA ={'08.04.24': ['4', '5', '0', ' - 14:30 Uhr', '1', ' - Gün. Kropf', '1', ' - 09:30 Uhr', '1', ' - Pet. Dörsam', '4', ' - 14:00 Uhr', '2', ' - Ste. Gert', '5', '', '3', '', '', '', '', '', '', '', '', '', 'Ren. Meister', 'Fri. Schlöffel', 'Lot. Hoffmann', 'Oli. Sippel', 'Ben. Zielke', 'Mar. Carbone', 'Ale. Steiger', 'Phi. Zielke', 'Sam. Zielke'], '15.04.24': ['5', 'Russisch', '0', ' - 14:30 Uhr', '1', ' - Sam. Zielke', '1', ' - 09:30 Uhr', '1', ' - Pet. Dörsam', '4', ' - 14:00 Uhr', '2', ' - Fre. Schlöffel', '5', ' - 09:30 Uhr', '2', ' - Fri. Schlöffel', '', '', '', '', '', '', '', '', 'Fre. Schlöffel', 'Jür. Zielke', 'Gar. George', 'Axe. Hahn', 'Sam. Zielke', 'Dan. Zielke', 'Tal. Hahn', 'Erw. Gert', 'Jür. Zielke']}</script> <!--@JS-DATA@--><script>const myDATA ={'15.04.24': ['', '5', 'Russisch', '0', ' - 14:30 Uhr', '1', ' - Samuel Zielke', '1', ' - 09:30 Uhr', '1', ' - Peter Dörsam', '4', ' - 14:00 Uhr', '2', ' - Fred Schlöffel', '5', ' - 09:30 Uhr', '2', ' - Friedhelm Schlöffel', '', '', '', '', '', '', '', '', 'Fred Schlöffel', 'Jürgen Zielke', 'Gary George', 'Axel Hahn', 'Samuel Zielke', 'Daniel Zielke', 'Talita Hahn', 'Erwin Gert', 'Jürgen Zielke']}</script>
</head> </head>
@ -88,7 +88,7 @@
<tr> <tr>
<td style="width: 2.750rem; background-color: rgba(210, 214, 214, 0.373);"> <td style="width: 2.750rem; background-color: rgba(210, 214, 214, 0.373);">
<td style="background-color: rgba(210, 214, 214, 0.373); padding-left: 0.250rem;"> <td style="background-color: rgba(210, 214, 214, 0.373); padding-left: 0.250rem;">
<h3 style="text-align: left; color: gray;">Infos und Predigtdienst</h3> <h3 style="text-align: left; color: gray;">Infos und Predigtdienst <span class="info CustomElem"></span></h3>
</td> </td>
</tr> </tr>
</table> </table>
@ -642,18 +642,18 @@
let weeklistpos = 0; let weeklistpos = 0;
let myIndex = 0; let myIndex = 0;
ordner_elements.forEach((element) => { ordner_elements.forEach((element) => {
if (myIndex == 35){ if (myIndex == 36){
myIndex = 0; myIndex = 0;
weeklistpos = weeklistpos + 1; weeklistpos = weeklistpos + 1;
} }
if( window.weekdate[weeklistpos] in myDATA ){ if( window.weekdate[weeklistpos] in myDATA ){
if ([3, 7, 11, 15, 19, 23].includes(myIndex+1) && myDATA[window.weekdate[weeklistpos]][myIndex] != "") { if ([4, 8, 12, 16, 20, 24].includes(myIndex+1) && myDATA[window.weekdate[weeklistpos]][myIndex] != "") {
element.innerHTML = weekdays[myDATA[window.weekdate[weeklistpos]][myIndex]]; element.innerHTML = weekdays[myDATA[window.weekdate[weeklistpos]][myIndex]];
} }
else if ([5, 9, 13, 17, 21, 25].includes(myIndex+1) && myDATA[window.weekdate[weeklistpos]][myIndex] != "") { else if ([6, 10, 14, 18, 22, 26].includes(myIndex+1) && myDATA[window.weekdate[weeklistpos]][myIndex] != "") {
element.innerHTML = service_type[myDATA[window.weekdate[weeklistpos]][myIndex]-1]; element.innerHTML = service_type[myDATA[window.weekdate[weeklistpos]][myIndex]-1];
@ -673,4 +673,6 @@
</script> </script>
</body> </body>
</html></html> </html>y>
</html>

@ -0,0 +1,102 @@
import os
from google.oauth2 import service_account
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseDownload, MediaFileUpload
import io
# Define the Google Drive API scopes and service account file path
SCOPES = ['https://www.googleapis.com/auth/drive']
SERVICE_ACCOUNT_FILE = "mo-key.json"
# Create credentials using the service account file
credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
# Build the Google Drive service
drive_service = build('drive', 'v3', credentials=credentials)
def create_folder(folder_name, parent_folder_id=None):
"""Create a folder in Google Drive and return its ID."""
folder_metadata = {
'name': folder_name,
"mimeType": "application/vnd.google-apps.folder",
'parents': [parent_folder_id] if parent_folder_id else []
}
created_folder = drive_service.files().create(
body=folder_metadata,
fields='id'
).execute()
print(f'Created Folder ID: {created_folder["id"]}')
return created_folder["id"]
def list_folder(parent_folder_id=None, delete=False):
"""List folders and files in Google Drive."""
results = drive_service.files().list(
q=f"'{parent_folder_id}' in parents and trashed=false" if parent_folder_id else None,
pageSize=1000,
fields="nextPageToken, files(id, name, mimeType)"
).execute()
items = results.get('files', [])
if not items:
print("No folders or files found in Google Drive.")
else:
print("Folders and files in Google Drive:")
for item in items:
print(f"Name: {item['name']}, ID: {item['id']}, Type: {item['mimeType']}")
if delete:
delete_files(item['id'])
def delete_files(file_or_folder_id):
"""Delete a file or folder in Google Drive by ID."""
try:
drive_service.files().delete(fileId=file_or_folder_id).execute()
print(f"Successfully deleted file/folder with ID: {file_or_folder_id}")
except Exception as e:
print(f"Error deleting file/folder with ID: {file_or_folder_id}")
print(f"Error details: {str(e)}")
def download_file(file_id, destination_path):
"""Download a file from Google Drive by its ID."""
request = drive_service.files().get_media(fileId=file_id)
fh = io.FileIO(destination_path, mode='wb')
downloader = MediaIoBaseDownload(fh, request)
done = False
while not done:
status, done = downloader.next_chunk()
print(f"Download {int(status.progress() * 100)}%.")
def upload_basic():
file_metadata = {
"name": "COMBO_MO_MOBIL.htm",
'addParents': ['1M48IP3EIZ6fsrf_vFLLeDa_LOLqTpByH']
}
media = MediaFileUpload("COMBO_MO_MOBIL.htm", mimetype="text/html")
file = (
drive_service.files()
.update(body=file_metadata, media_body=media, fileId="18CUUVcUcMvkIMkfB-Hi5SxztsJrwtiBc")
.execute()
)
return
if __name__ == '__main__':
# Example usage:
# Create a new folder
# create_folder("MyNewFolder")
# List folders and files
upload_basic()
# list_folder(parent_folder_id='1M48IP3EIZ6fsrf_vFLLeDa_LOLqTpByH')
# Delete a file or folder by ID
# delete_files("1hw-p4uHKdYvlk7l3VnEWwO_dwSNoGWV4")
# Download a file by its ID
# download_file("your_file_id", "destination_path/file_name.extension")

@ -1,4 +1,5 @@
import dropbox, yaml import dropbox, yaml
import main.googleapi as gapi
def writeToHtml(data): def writeToHtml(data):
@ -16,5 +17,10 @@ def writeToHtml(data):
f.seek(0) # rewrite into the file f.seek(0) # rewrite into the file
for line in lines: for line in lines:
f.write(line) f.write(line)
with open('COMBO_MO_MOBIL.htm', 'rb') as f:
dbx.files_upload(f.read(), "/COMBO_MO_MOBIL.htm", mode=dropbox.files.WriteMode("overwrite")) # Dropbox Link
# with open('COMBO_MO_MOBIL.htm', 'rb') as f:
# dbx.files_upload(f.read(), "/COMBO_MO_MOBIL.htm", mode=dropbox.files.WriteMode("overwrite"))
# Google Drive Link
gapi.upload_basic()

@ -0,0 +1,19 @@
# Generated by Django 5.0.4 on 2024-04-15 15:28
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('main', '0022_alter_service_type_1_alter_service_type_2_and_more'),
]
operations = [
migrations.AddField(
model_name='week',
name='info_field',
field=models.CharField(default=django.db.models.deletion.SET_NULL, max_length=100, null=True),
),
]

@ -0,0 +1,18 @@
# Generated by Django 5.0.4 on 2024-04-15 15:29
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('main', '0023_week_info_field'),
]
operations = [
migrations.AlterField(
model_name='week',
name='info_field',
field=models.CharField(default=None, max_length=100, null=True),
),
]

@ -0,0 +1,18 @@
# Generated by Django 5.0.4 on 2024-04-15 15:29
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('main', '0024_alter_week_info_field'),
]
operations = [
migrations.AlterField(
model_name='week',
name='info_field',
field=models.CharField(max_length=100, null=True),
),
]

@ -0,0 +1,17 @@
# Generated by Django 5.0.4 on 2024-04-15 15:30
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('main', '0025_alter_week_info_field'),
]
operations = [
migrations.RemoveField(
model_name='week',
name='info_field',
),
]

@ -0,0 +1,18 @@
# Generated by Django 5.0.4 on 2024-04-15 15:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('main', '0026_remove_week_info_field'),
]
operations = [
migrations.AddField(
model_name='week',
name='info_field',
field=models.CharField(max_length=100, null=True),
),
]

@ -31,6 +31,7 @@ class group(models.Model):
class week(models.Model): class week(models.Model):
date_of_monday = models.CharField(max_length=50) date_of_monday = models.CharField(max_length=50)
place = models.ForeignKey(place, on_delete=models.CASCADE,default=1) place = models.ForeignKey(place, on_delete=models.CASCADE,default=1)
info_field = models.CharField(max_length=100, null=True)
def __str__(self): def __str__(self):
return self.date_of_monday return self.date_of_monday

@ -82,7 +82,11 @@
</select> </select>
</p> </p>
</td> </td>
<td><p class="theme" style="text-align: left"></p></td> <td><p class="theme" style="text-align: left">
<b>Wocheninfo: </b>
<input type="text" name="week_info" id="week_info" value="{{ week_info }}">
</p>
</td>
</tr> </tr>
</table> </table>
</div> </div>

@ -78,7 +78,7 @@ def createApi():
type = str(db_service_weekly.__getattribute__("type_"+str(i))) if db_service_weekly.__getattribute__("type_"+str(i)) != None else "" type = str(db_service_weekly.__getattribute__("type_"+str(i))) if db_service_weekly.__getattribute__("type_"+str(i)) != None else ""
DatesOfServiceWeek.append(str(type)) DatesOfServiceWeek.append(str(type))
if db_service_weekly.__getattribute__("speaker_"+str(i)) != None: if db_service_weekly.__getattribute__("speaker_"+str(i)) != None:
name = " - " + str(db_service_weekly.__getattribute__("speaker_"+str(i)).first_name[:3]) + ". " + str(db_service_weekly.__getattribute__("speaker_"+str(i)).name) name = " - " + str(db_service_weekly.__getattribute__("speaker_"+str(i))) + " " + str(db_service_weekly.__getattribute__("speaker_"+str(i)).name)
else: else:
name = "" name = ""
DatesOfServiceWeek.append(name) DatesOfServiceWeek.append(name)
@ -90,6 +90,7 @@ def createApi():
week_array = [ week_array = [
# INFO # INFO
str("- " + week.info_field) if week.info_field != "" else "",
str(db_info.get(week=week).gast.Name) if db_info.get(week=week).gast != None else "", str(db_info.get(week=week).gast.Name) if db_info.get(week=week).gast != None else "",
str(db_info.get(week=week).cleaning.Name) if db_info.get(week=week).cleaning != None else "", str(db_info.get(week=week).cleaning.Name) if db_info.get(week=week).cleaning != None else "",
@ -108,17 +109,17 @@ def createApi():
DatesOfService[6][2], DatesOfService[6][3], DatesOfService[6][2], DatesOfService[6][3],
# ORDNER # ORDNER
str(db_steward_weekly.hall_1.first_name[:3]) + ". " + str(db_steward_weekly.hall_1.name) if db_steward_weekly.hall_1 != None else "", str(db_steward_weekly.hall_1.first_name) + " " + str(db_steward_weekly.hall_1.name) if db_steward_weekly.hall_1 != None else "",
str(db_steward_weekly.hall_2.first_name[:3]) + ". " + str(db_steward_weekly.hall_2.name) if db_steward_weekly.hall_2 != None else "", str(db_steward_weekly.hall_2.first_name) + " " + str(db_steward_weekly.hall_2.name) if db_steward_weekly.hall_2 != None else "",
str(db_steward_weekly.foyer_1.first_name[:3]) + ". " + str(db_steward_weekly.foyer_1.name) if db_steward_weekly.foyer_1 != None else "", str(db_steward_weekly.foyer_1.first_name) + " " + str(db_steward_weekly.foyer_1.name) if db_steward_weekly.foyer_1 != None else "",
str(db_steward_weekly.foyer_2.first_name[:3]) + ". " + str(db_steward_weekly.foyer_2.name) if db_steward_weekly.foyer_2 != None else "", str(db_steward_weekly.foyer_2.first_name) + " " + str(db_steward_weekly.foyer_2.name) if db_steward_weekly.foyer_2 != None else "",
# ANLAGE # ANLAGE
str(db_regie_weekly.regie_1.first_name[:3]) + ". " + str(db_regie_weekly.regie_1.name) if db_regie_weekly.regie_1 != None else "", str(db_regie_weekly.regie_1.first_name) + " " + str(db_regie_weekly.regie_1.name) if db_regie_weekly.regie_1 != None else "",
str(db_regie_weekly.regie_2.first_name[:3]) + ". " + str(db_regie_weekly.regie_2.name) if db_regie_weekly.regie_2 != None else "", str(db_regie_weekly.regie_2.first_name) + " " + str(db_regie_weekly.regie_2.name) if db_regie_weekly.regie_2 != None else "",
str(db_regie_weekly.zoom_1.first_name[:3]) + ". " + str(db_regie_weekly.zoom_1.name) if db_regie_weekly.zoom_1 != None else "", str(db_regie_weekly.zoom_1.first_name) + " " + str(db_regie_weekly.zoom_1.name) if db_regie_weekly.zoom_1 != None else "",
str(db_regie_weekly.zoom_2.first_name[:3]) + ". " + str(db_regie_weekly.zoom_2.name) if db_regie_weekly.zoom_2 != None else "", str(db_regie_weekly.zoom_2.first_name) + " " + str(db_regie_weekly.zoom_2.name) if db_regie_weekly.zoom_2 != None else "",
str(db_regie_weekly.stage.first_name[:3]) + ". " + str(db_regie_weekly.stage.name) if db_regie_weekly.stage != None else "", str(db_regie_weekly.stage.first_name) + " " + str(db_regie_weekly.stage.name) if db_regie_weekly.stage != None else "",
] ]
@ -168,6 +169,7 @@ def index(request):
service_data = MainModel.service.objects.get(week__date_of_monday=strDate) if MainModel.service.objects.filter(week__date_of_monday=strDate).count() > 0 else None service_data = MainModel.service.objects.get(week__date_of_monday=strDate) if MainModel.service.objects.filter(week__date_of_monday=strDate).count() > 0 else None
# Abfragen der POST-Daten # Abfragen der POST-Daten
post_week_info = request.POST.get("week_info")
post_info = request.POST.getlist("info") post_info = request.POST.getlist("info")
post_service_date = request.POST.getlist("smd") post_service_date = request.POST.getlist("smd")
post_service_time = request.POST.getlist("smt") post_service_time = request.POST.getlist("smt")
@ -176,6 +178,11 @@ def index(request):
post_steward = request.POST.getlist("ods") post_steward = request.POST.getlist("ods")
post_regie = request.POST.getlist("regie") post_regie = request.POST.getlist("regie")
# WOCHENINFORMATION
NewWeekInfo = MainModel.week.objects.get(date_of_monday=strDate)
NewWeekInfo.info_field = post_week_info
NewWeekInfo.save()
# INFOS # INFOS
if info_data == None: if info_data == None:
info_data = MainModel.info.objects.create( info_data = MainModel.info.objects.create(
@ -233,6 +240,7 @@ def index(request):
return render(request, 'main/index.html', {'actual' : actual, return render(request, 'main/index.html', {'actual' : actual,
'error' : error, 'error' : error,
'date': strDate, 'date': strDate,
'week_info': MainModel.week.objects.get(date_of_monday=strDate).info_field if MainModel.week.objects.filter(date_of_monday=strDate).count() > 0 else "",
'next_date': FutureyDate(url_date, 1).strftime("%d%m%y"), 'next_date': FutureyDate(url_date, 1).strftime("%d%m%y"),
'past_date': PastDate(url_date, 1).strftime("%d%m%y"), 'past_date': PastDate(url_date, 1).strftime("%d%m%y"),
'saal_ordner' : persons.filter(saalordner=True), 'saal_ordner' : persons.filter(saalordner=True),

@ -44,11 +44,18 @@ Entwickler und Kontakt
## Versions Historie ## Versions Historie
<!-- * 0.2 * 1.0 - First Public Version
* Various bug fixes and optimizations * Bug Fixes
* See [commit change]() or See [release history]() --> * Linked with Google Drive (Service Account)
* 0.1 * Print Full Name in Template and API
* New Free-Char-Field by Info Title
* 0.1 - Ready to use Version
* Initial Release * Initial Release
* Linked with Dropbox API
* Online Frontend ready
* Update Mobile Template
* Have API Function
## Lizenzen ## Lizenzen

@ -86,7 +86,7 @@
<tr> <tr>
<td style="width: 2.750rem; background-color: rgba(210, 214, 214, 0.373);"> <td style="width: 2.750rem; background-color: rgba(210, 214, 214, 0.373);">
<td style="background-color: rgba(210, 214, 214, 0.373); padding-left: 0.250rem;"> <td style="background-color: rgba(210, 214, 214, 0.373); padding-left: 0.250rem;">
<h3 style="text-align: left; color: gray;">Infos und Predigtdienst</h3> <h3 style="text-align: left; color: gray;">Infos und Predigtdienst <span class="info CustomElem"></span></h3>
</td> </td>
</tr> </tr>
</table> </table>
@ -640,15 +640,15 @@
let weeklistpos = 0; let weeklistpos = 0;
let myIndex = 0; let myIndex = 0;
ordner_elements.forEach((element) => { ordner_elements.forEach((element) => {
if (myIndex == 35){ if (myIndex == 36){
myIndex = 0; myIndex = 0;
weeklistpos = weeklistpos + 1; weeklistpos = weeklistpos + 1;
} else if ([3, 7, 11, 15, 19, 23].includes(myIndex+1) && myDATA[window.weekdate[weeklistpos]][myIndex] != "") { } else if ([4, 8, 12, 16, 20, 24].includes(myIndex+1) && myDATA[window.weekdate[weeklistpos]][myIndex] != "") {
element.innerHTML = weekdays[myDATA[window.weekdate[weeklistpos]][myIndex]]; element.innerHTML = weekdays[myDATA[window.weekdate[weeklistpos]][myIndex]];
} }
else if ([5, 9, 13, 17, 21, 25].includes(myIndex+1) && myDATA[window.weekdate[weeklistpos]][myIndex] != "") { else if ([6, 10, 14, 18, 22, 26].includes(myIndex+1) && myDATA[window.weekdate[weeklistpos]][myIndex] != "") {
element.innerHTML = service_type[myDATA[window.weekdate[weeklistpos]][myIndex]-1]; element.innerHTML = service_type[myDATA[window.weekdate[weeklistpos]][myIndex]-1];
@ -663,7 +663,8 @@
} }
const req = new XMLHttpRequest(); const req = new XMLHttpRequest();
req.open("GET", "http://mo.samuelzielke.de/api/", false); // req.open("GET", "http://mo.samuelzielke.de/api/", false);
req.open("GET", "http://localhost:8000/api/", false);
req.send() req.send()
myDATA = JSON.parse(req.response); myDATA = JSON.parse(req.response);

Loading…
Cancel
Save

Powered by TurnKey Linux.