diff --git a/He-Anlage 2024_1.Halbjahr.ods b/He-Anlage 2024_1.Halbjahr.ods
new file mode 100644
index 0000000..9263bc9
Binary files /dev/null and b/He-Anlage 2024_1.Halbjahr.ods differ
diff --git a/db.sqlite3 b/db.sqlite3
new file mode 100644
index 0000000..a57b2b8
Binary files /dev/null and b/db.sqlite3 differ
diff --git a/excel_mimic/urls.py b/excel_mimic/urls.py
index 6a61b93..83998a3 100644
--- a/excel_mimic/urls.py
+++ b/excel_mimic/urls.py
@@ -19,5 +19,5 @@ from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls), # Admin site
- path('', include('sheets.urls')), # Sheets app URLs
+ path('', include('Sheets.urls')), # Sheets app URLs
]
\ No newline at end of file
diff --git a/sheets/migrations/0006_client.py b/sheets/migrations/0006_client.py
new file mode 100644
index 0000000..abca40c
--- /dev/null
+++ b/sheets/migrations/0006_client.py
@@ -0,0 +1,21 @@
+# Generated by Django 5.1.5 on 2025-04-08 11:23
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('sheets', '0005_secondtableentry'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Client',
+ fields=[
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(max_length=100)),
+ ('address', models.TextField()),
+ ],
+ ),
+ ]
diff --git a/sheets/models.py b/sheets/models.py
index 182688b..5617d6a 100644
--- a/sheets/models.py
+++ b/sheets/models.py
@@ -1,5 +1,12 @@
from django.db import models
+class Client(models.Model):
+ name = models.CharField(max_length=100)
+ address = models.TextField()
+
+ def __str__(self):
+ return self.name
+
class ExcelEntry(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
diff --git a/sheets/templates/base.html b/sheets/templates/base.html
new file mode 100644
index 0000000..151779f
--- /dev/null
+++ b/sheets/templates/base.html
@@ -0,0 +1,22 @@
+
+
+
+
+ {% block title %}My App{% endblock %}
+
+
+
+
+
+
+ {% block content %}
+ {% endblock %}
+
+
diff --git a/sheets/templates/clients_table.html b/sheets/templates/clients_table.html
new file mode 100644
index 0000000..85cbb1c
--- /dev/null
+++ b/sheets/templates/clients_table.html
@@ -0,0 +1,282 @@
+
+
+
+
+ Clients Table
+
+
+
+
+
+
+
+ ← Back to Main
+
+
+
Clients Table
+
+
+
+
+ # |
+ ID |
+ Name |
+ Address |
+ Actions |
+
+
+
+ {% for client in clients %}
+
+ {{ forloop.counter }} |
+ {{ client.id }} |
+ {{ client.name }} |
+ {{ client.address }} |
+
+
+
+ |
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sheets/templates/excel_table.html b/sheets/templates/table_one.html
similarity index 83%
rename from sheets/templates/excel_table.html
rename to sheets/templates/table_one.html
index 433a372..fb11bdc 100644
--- a/sheets/templates/excel_table.html
+++ b/sheets/templates/table_one.html
@@ -115,8 +115,16 @@
+
+
Excel-like Table
+
@@ -124,6 +132,7 @@
+ # |
ID |
Name |
Age |
@@ -135,38 +144,7 @@
{% for entry in entries_table1 %}
- {{ entry.id }} |
- {{ entry.name }} |
- {{ entry.age }} |
- {{ entry.email }} |
- {{ entry.date_joined }} |
-
-
-
- |
-
- {% endfor %}
-
-
-
-
-
-
-
-
-
-
- ID |
- Name |
- Age |
- Email |
- Date Joined |
- Actions |
-
-
-
- {% for entry in entries_table2 %}
-
+ {{ forloop.counter }} |
{{ entry.id }} |
{{ entry.name }} |
{{ entry.age }} |
@@ -215,14 +193,6 @@
currentModelName = 'ExcelEntry'; // Model name for Table 1
$('#add-popup').fadeIn();
});
-
- // Open Add Popup for Table 2
- $('#add-row-2').on('click', function () {
- currentTableId = 'table-2';
- currentModelName = 'SecondTableEntry'; // Model name for Table 2
- $('#add-popup').fadeIn();
- });
-
// Close Popups
$('.close-btn').on('click', function () {
$('.popup').fadeOut();
@@ -244,8 +214,10 @@
'csrfmiddlewaretoken': '{{ csrf_token }}'
},
success: function (response) {
+ let rowCount = $(`#${currentTableId} tbody tr`).length + 1;
let newRow = `
+ ${rowCount} |
${response.id} |
${response.name} |
${response.age} |
@@ -269,9 +241,9 @@
currentTableId = row.closest('table').attr('id'); // Set current table ID
currentModelName = currentTableId === 'table-1' ? 'ExcelEntry' : 'SecondTableEntry'; // Set model name
$('#edit-id').val(row.data('id'));
- $('#edit-name').val(row.find('td:eq(1)').text());
- $('#edit-age').val(row.find('td:eq(2)').text());
- $('#edit-email').val(row.find('td:eq(3)').text());
+ $('#edit-name').val(row.find('td:eq(2)').text()); // Name is now in column 2
+ $('#edit-age').val(row.find('td:eq(3)').text()); // Age is now in column 3
+ $('#edit-email').val(row.find('td:eq(4)').text()); // Email is now in column 4
$('#edit-popup').fadeIn();
});
@@ -294,10 +266,10 @@
},
success: function (response) {
if (response.status === 'success') {
- let row = $(`tr[data-id="${id}"]`);
- row.find('td:eq(1)').text(name);
- row.find('td:eq(2)').text(age);
- row.find('td:eq(3)').text(email);
+ let row = $(`tr[data-id="${response.id}"]`);
+ row.find('td:eq(2)').text(response.name);
+ row.find('td:eq(3)').text(response.age);
+ row.find('td:eq(4)').text(response.email);
$('#edit-popup').fadeOut();
} else {
alert('Failed to update entry: ' + response.message);
diff --git a/sheets/templates/table_two.html b/sheets/templates/table_two.html
new file mode 100644
index 0000000..3cb0190
--- /dev/null
+++ b/sheets/templates/table_two.html
@@ -0,0 +1,318 @@
+
+
+
+
+
+ Excel-like Table
+
+
+
+
+
+
+
+
+
+ Excel-like Table
+
+
+
+
+
+
+
+
+
+
+ # |
+ ID |
+ Name |
+ Age |
+ Email |
+ Date Joined |
+ Actions |
+
+
+
+ {% for entry in entries_table2 %}
+
+ {{ forloop.counter }} |
+ {{ entry.id }} |
+ {{ entry.name }} |
+ {{ entry.age }} |
+ {{ entry.email }} |
+ {{ entry.date_joined }} |
+
+
+
+ |
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sheets/urls.py b/sheets/urls.py
index c583839..17546bc 100644
--- a/sheets/urls.py
+++ b/sheets/urls.py
@@ -2,8 +2,10 @@ from django.urls import path
from . import views
urlpatterns = [
- path('', views.excel_table_view, name='excel_table'),
+ path('', views.clients_list, name='clients_list'), # Main page
+ path('table-one/', views.table_one_view, name='table_one'), # Table One
+ path('table-two/', views.table_two_view, name='table_two'), # Table Two
path('add-entry//', views.add_entry, name='add_entry'),
path('update-entry//', views.update_entry, name='update_entry'),
path('delete-entry//', views.delete_entry, name='delete_entry'),
-]
\ No newline at end of file
+]
diff --git a/sheets/views.py b/sheets/views.py
index b838c93..a4725db 100644
--- a/sheets/views.py
+++ b/sheets/views.py
@@ -2,30 +2,42 @@ from django.shortcuts import render
from django.http import JsonResponse
from django.apps import apps
from datetime import date
+from .models import Client
-# View to render the table page
-def excel_table_view(request):
- # Fetch existing entries from both tables
+# Clients Page (Now the homepage)
+def clients_list(request):
+ clients = Client.objects.all().order_by('id')
+ return render(request, 'clients_table.html', {'clients': clients})
+
+# Table One View (ExcelEntry)
+def table_one_view(request):
entries_table1 = apps.get_model('sheets', 'ExcelEntry').objects.all()
- entries_table2 = apps.get_model('sheets', 'SecondTableEntry').objects.all()
- return render(request, 'excel_table.html', {
- 'entries_table1': entries_table1,
- 'entries_table2': entries_table2,
- })
+ return render(request, 'table_one.html', {'entries_table1': entries_table1})
-# Generic view to add a new row to any table
+# Table Two View (SecondTableEntry)
+def table_two_view(request):
+ entries_table2 = apps.get_model('sheets', 'SecondTableEntry').objects.all()
+ return render(request, 'table_two.html', {'entries_table2': entries_table2})
+
+# Add Entry (Generic for all models)
def add_entry(request, model_name):
if request.method == 'POST':
try:
- # Dynamically get the model
model = apps.get_model('sheets', model_name)
-
- # Get data from the request
name = request.POST.get('name', 'New Name')
+
+ if model_name.lower() == 'client':
+ address = request.POST.get('address', '')
+ entry = model.objects.create(name=name, address=address)
+ return JsonResponse({
+ 'id': entry.id,
+ 'name': entry.name,
+ 'address': entry.address,
+ })
+
age = int(request.POST.get('age', 0))
email = request.POST.get('email', 'example@email.com')
- # Create a new entry
entry = model.objects.create(
name=name,
age=age,
@@ -33,7 +45,6 @@ def add_entry(request, model_name):
date_joined=date.today()
)
- # Return the new entry as JSON response
return JsonResponse({
'id': entry.id,
'name': entry.name,
@@ -47,29 +58,35 @@ def add_entry(request, model_name):
return JsonResponse({'status': 'error', 'message': 'Invalid request'}, status=400)
-# Generic view to update an entry in any table
+# Update Entry (Generic for all models)
def update_entry(request, model_name):
if request.method == 'POST':
try:
- # Dynamically get the model
model = apps.get_model('sheets', model_name)
-
- # Get data from the request
entry_id = int(request.POST.get('id'))
+ entry = model.objects.get(id=entry_id)
name = request.POST.get('name')
+
+ if model_name.lower() == 'client':
+ address = request.POST.get('address', '')
+ entry.name = name
+ entry.address = address
+ entry.save()
+ return JsonResponse({
+ 'status': 'success',
+ 'id': entry.id,
+ 'name': entry.name,
+ 'address': entry.address,
+ })
+
age = int(request.POST.get('age'))
email = request.POST.get('email')
- # Fetch the entry to be updated
- entry = model.objects.get(id=entry_id)
-
- # Update the entry with new data
entry.name = name
entry.age = age
entry.email = email
entry.save()
- # Return the updated entry as a JSON response
return JsonResponse({
'status': 'success',
'id': entry.id,
@@ -86,21 +103,14 @@ def update_entry(request, model_name):
return JsonResponse({'status': 'error', 'message': 'Invalid request'}, status=400)
-# Generic view to delete an entry from any table
+# Delete Entry (Generic for all models)
def delete_entry(request, model_name):
if request.method == 'POST':
try:
- # Dynamically get the model
model = apps.get_model('sheets', model_name)
-
- # Get the entry ID from the request
entry_id = request.POST.get('id')
-
- # Find the entry by its ID and delete it
entry = model.objects.get(id=entry_id)
entry.delete()
-
- # Return success response
return JsonResponse({'status': 'success', 'message': 'Entry deleted'})
except model.DoesNotExist:
@@ -108,4 +118,4 @@ def delete_entry(request, model_name):
except Exception as e:
return JsonResponse({'status': 'error', 'message': str(e)}, status=400)
- return JsonResponse({'status': 'error', 'message': 'Invalid request'}, status=400)
\ No newline at end of file
+ return JsonResponse({'status': 'error', 'message': 'Invalid request'}, status=400)
diff --git a/temperature_data.db b/temperature_data.db
new file mode 100644
index 0000000..5892f95
Binary files /dev/null and b/temperature_data.db differ