From 571e57a301daf1fed8a6b04288074ca688e40ec5 Mon Sep 17 00:00:00 2001 From: ferdzo Date: Tue, 19 Mar 2024 20:44:23 +0100 Subject: [PATCH] Uraden veliki servis --- .vscode/launch.json | 19 +++++ .vscode/settings.json | 3 + index.html | 79 +++++++++++++++++-- serviceCRM/filter.py | 14 ++++ serviceCRM/forms.py | 16 +++- serviceCRM/static/fer-logo.png | Bin 0 -> 15832 bytes serviceCRM/tables.py | 23 ++++-- serviceCRM/templates/list.html | 4 +- serviceCRM/templates/serviceCRM/delete.html | 0 serviceCRM/templates/serviceCRM/done.html | 6 ++ serviceCRM/templates/serviceCRM/edit.html | 14 +++- serviceCRM/templates/serviceCRM/list.html | 5 +- serviceCRM/templates/serviceCRM/nalog.html | 83 ++++++++++++++++++++ serviceCRM/urls.py | 9 ++- serviceCRM/views.py | 72 +++++++++-------- 15 files changed, 287 insertions(+), 60 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 serviceCRM/filter.py create mode 100644 serviceCRM/static/fer-logo.png create mode 100644 serviceCRM/templates/serviceCRM/delete.html create mode 100644 serviceCRM/templates/serviceCRM/done.html create mode 100644 serviceCRM/templates/serviceCRM/nalog.html diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..99cf7ae --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,19 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python Debugger: Django", + "type": "debugpy", + "request": "launch", + "program": "${workspaceFolder}\\manage.py", + "args": [ + "runserver" + ], + "django": true, + "autoStartBrowser": false + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..cad7657 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "cmake.configureOnOpen": false +} \ No newline at end of file diff --git a/index.html b/index.html index a5b4ad9..0651ce5 100644 --- a/index.html +++ b/index.html @@ -1,6 +1,73 @@ - - - - - - \ No newline at end of file + + + + + + Servicing Ticket + + + +
+
+ Company Logo +
+
+
+ {{ ticket.name }} +
+
+ {{ticket.phone}} +
+
+ {{ticket.date}} +
+
+ {% if ticket.description %} {{ ticket.description }} {% else %} Нема опис {% endif %} +
+
+
+
+
+ {{ ticket.name }} +
+
+ {{ ticket.phone }} +
+
+ {{ ticket.date }} +
+
+ {% if ticket.description %} {{ ticket.description }} {% else %} Нема опис {% endif %} +
+
+
+ + \ No newline at end of file diff --git a/serviceCRM/filter.py b/serviceCRM/filter.py new file mode 100644 index 0000000..2bd3373 --- /dev/null +++ b/serviceCRM/filter.py @@ -0,0 +1,14 @@ +from .models import Insert +import django_filters as filters +from django_filters import FilterSet + +class DoneTable(FilterSet): + class Meta: + model = Insert + fields = ["done"] + + def filter_done(self, queryset, name, value): + if value: + return queryset.filter(done=True) + else: + return queryset.filter(done=False) \ No newline at end of file diff --git a/serviceCRM/forms.py b/serviceCRM/forms.py index 2fca7f4..399fc51 100644 --- a/serviceCRM/forms.py +++ b/serviceCRM/forms.py @@ -20,7 +20,15 @@ class InputForm(forms.ModelForm): field_order = ["name", "phone", "date", "description", "done"] - # name = forms.CharField(label="Name", max_length=30) - # phone = forms.CharField(label="Phone", max_length=30) - # date = forms.DateField() - # description = forms.CharField(label="Write description of the problem...", max_length=300) +# class EditForm(forms.ModelForm): +# class Meta: +# model = Insert +# fields = {"name", "phone", "description", "done"} +# labels = {'name': "Name", 'phone': "Phone", 'description': "Description", 'done': "Done"} +# widgets = { +# 'name': forms.TextInput(attrs={'class': 'form-control'}), +# 'phone': forms.TextInput(attrs={'class': 'form-control'}), +# 'description': forms.Textarea(attrs={'class': 'form-control'}) +# } + +# field_order = ["name", "phone", "description", "done"] \ No newline at end of file diff --git a/serviceCRM/static/fer-logo.png b/serviceCRM/static/fer-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..851a9b919a4538cae967607b9099cc2a415472d6 GIT binary patch literal 15832 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 literal 0 HcmV?d00001 diff --git a/serviceCRM/tables.py b/serviceCRM/tables.py index 02aaa37..7a0decd 100644 --- a/serviceCRM/tables.py +++ b/serviceCRM/tables.py @@ -1,13 +1,22 @@ import django_tables2 as tables +from django_tables2 import TemplateColumn +from django_filters import FilterSet +from django.db.models.query import QuerySet # Add missing import from .models import Insert -from django_tables2.utils import A - class InsertTable(tables.Table): + + actions = TemplateColumn(template_code='Edit') class Meta: model = Insert - template_name = "list.html" - sequence = ("name", "phone", "description","date","done" ) - delete = tables.LinkColumn('main:delete_item', args=[A('pk')], attrs={ - 'a': {'class': 'btn'} - }) + fields = ("id","name","phone","description","date","done") + + +class DoneInsertTable(InsertTable): + class Meta: + model = Insert + fields = ("id","name","phone","description","date","done") + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + print(self.data) diff --git a/serviceCRM/templates/list.html b/serviceCRM/templates/list.html index 52a7f9f..7e0b6db 100644 --- a/serviceCRM/templates/list.html +++ b/serviceCRM/templates/list.html @@ -3,6 +3,6 @@ {% load render_table from django_tables2 %} - {% render_table table %} - + {% render_table object_list %} + {% endblock%} \ No newline at end of file diff --git a/serviceCRM/templates/serviceCRM/delete.html b/serviceCRM/templates/serviceCRM/delete.html new file mode 100644 index 0000000..e69de29 diff --git a/serviceCRM/templates/serviceCRM/done.html b/serviceCRM/templates/serviceCRM/done.html new file mode 100644 index 0000000..2414505 --- /dev/null +++ b/serviceCRM/templates/serviceCRM/done.html @@ -0,0 +1,6 @@ +{% extends 'base.html' %} +{% load render_table from django_tables2 %} + +{% block content %} + {% render_table table %} +{%endblock%} \ No newline at end of file diff --git a/serviceCRM/templates/serviceCRM/edit.html b/serviceCRM/templates/serviceCRM/edit.html index 0f5d396..f7b2e22 100644 --- a/serviceCRM/templates/serviceCRM/edit.html +++ b/serviceCRM/templates/serviceCRM/edit.html @@ -1 +1,13 @@ -Edit +{% extends 'base.html' %} +{% block title %}Edit{% endblock %} +{% block content %} +{% csrf_token %} +
+
+ {% csrf_token %} + {{form.as_p}} + + +
+
+{% endblock%} \ No newline at end of file diff --git a/serviceCRM/templates/serviceCRM/list.html b/serviceCRM/templates/serviceCRM/list.html index 52a7f9f..bfdcac4 100644 --- a/serviceCRM/templates/serviceCRM/list.html +++ b/serviceCRM/templates/serviceCRM/list.html @@ -1,8 +1,5 @@ {% extends 'base.html' %} +{% load render_table from django_tables2 %} {% block content %} - {% load render_table from django_tables2 %} - - {% render_table table %} - {% endblock%} \ No newline at end of file diff --git a/serviceCRM/templates/serviceCRM/nalog.html b/serviceCRM/templates/serviceCRM/nalog.html new file mode 100644 index 0000000..2a88587 --- /dev/null +++ b/serviceCRM/templates/serviceCRM/nalog.html @@ -0,0 +1,83 @@ +{% block content %} +{% load static %} + + + + + Servicing Ticket + + + +
+
+ Company Logo +
+
+
+ {{ name }} +
+
+ {{phone}} +
+
+ {{date}} +
+
+ {{ desc }} +
+
+
+
+
+ {{ name }} +
+
+ {{ phone }} +
+
+ {{ date }} +
+
+ {{ desc }} +
+
+
+ + +{% endblock %} diff --git a/serviceCRM/urls.py b/serviceCRM/urls.py index 15924fe..3b3ca10 100644 --- a/serviceCRM/urls.py +++ b/serviceCRM/urls.py @@ -19,8 +19,11 @@ from django.urls import path import serviceCRM.views as view urlpatterns = [ - path("", view.TableView.as_view(), name="index"), + path("", view.InsertListView.as_view(), name="index"), path('admin/', admin.site.urls), - path("/", view.ReportById.ReportById, name="detail"), path("insert/", view.InsertNew.insert, name="insert"), - path("done//", view.done, name="done"),] + path("edit//", view.Update.as_view(), name="update"), + path("nalog//", view.Nalog, name="nalog"), + path("delete//", view.Delete.Delete, name="delete"), + path("done/", view.Done.as_view(), name="done"), + ] diff --git a/serviceCRM/views.py b/serviceCRM/views.py index da3b605..0661910 100644 --- a/serviceCRM/views.py +++ b/serviceCRM/views.py @@ -1,36 +1,23 @@ from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import get_object_or_404, render from django.views import generic +from django.views.generic import UpdateView from .forms import InputForm -from .tables import InsertTable from .models import Insert +from .tables import DoneInsertTable, InsertTable from django_tables2 import SingleTableView - - -# from django.template import loader - -def index(request): - if request.user.is_authenticated: - return HttpResponse("You are logged in") - proba = Insert.objects.order_by("date") - return HttpResponse(proba) - else: - return HttpResponse("You are not logged in") - - -# def detail(request,question_id): -# req = get_object_or_404(Insert,id=question_id) -# context = {"name":req.name, "phone":req.phone,"desc":req.description,"date":req.date} -# return HttpResponse(render(request,"serviceCRM/id.html", context)) -# -class ReportById(generic.DetailView): +class InsertListView(SingleTableView): model = Insert - template_name = "serviceCRM/id.html" + table_class = InsertTable + template_name = 'serviceCRM/list.html' - def ReportById(request, question_id): - req = get_object_or_404(Insert, id=question_id) - context = {"name": req.name, "phone": req.phone, "desc": req.description, "date": req.date} - return HttpResponse(f"Report ID: {question_id} \nName: {req.name} \nPhone: {req.phone} \nDescription: {req.description} \nDate: {req.date} \nDone: {req.done}") +# class ReportById(generic.DetailView): +# model = Insert +# template_name = "serviceCRM/id.html" +# def ReportById(request, question_id): +# req = get_object_or_404(Insert, id=question_id) +# context = {"name": req.name, "phone": req.phone, "desc": req.description, "date": req.date} +# return HttpResponse(f"Report ID: {question_id} \nName: {req.name} \nPhone: {req.phone} \nDescription: {req.description} \nDate: {req.date} \nDone: {req.done}") class InsertNew(generic.View): model = Insert @@ -40,23 +27,42 @@ class InsertNew(generic.View): if request.method == 'POST': form = InputForm(request.POST) if form.is_valid(): - form.save() + ticket=form.save() print("Raboti") - return HttpResponseRedirect("/admin/") + return HttpResponseRedirect(f"/nalog/{ticket.id}/") else: form = InputForm() return render(request, InsertNew.template_name, {'form': form}) - -class TableView(SingleTableView): - table_class = Insert - queryset = Insert.objects.all() - template_name = "serviceCRM/list.html" - +class Update(UpdateView): + model = Insert + template_name = "serviceCRM/edit.html" + fields = ["name", "phone", "description", "done"] + success_url = '/' def done(request, id): req = get_object_or_404(Insert, id=id) if req.isDone(): return HttpResponse("Done") return HttpResponse("Not Done") + +def Nalog(request, id): + data = Insert.objects.get(id=id) + template = "serviceCRM/nalog.html" + context = {"name": data.name, "phone": data.phone, "desc": data.description, "date": data.date} + return render(request, template, context) + +class Delete(): + model = Insert + def Delete(request, id): + req = get_object_or_404(Insert, id=id) + req.delete() + return HttpResponseRedirect("/") + +class Done(SingleTableView): + model = Insert + table_data = Insert.objects.filter(done=True) + table_class = DoneInsertTable + template_name = 'serviceCRM/done.html' +