From 610ac524542296c798a5e6a56695c16cc27518b9 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Mon, 19 Jan 2026 21:16:21 +0000 Subject: [PATCH] first try --- config/__pycache__/settings.cpython-311.pyc | Bin 5552 -> 5647 bytes config/settings.py | 5 + core/__pycache__/admin.cpython-311.pyc | Bin 212 -> 731 bytes .../context_processors.cpython-311.pyc | Bin 0 -> 763 bytes core/__pycache__/models.cpython-311.pyc | Bin 209 -> 1254 bytes core/__pycache__/urls.cpython-311.pyc | Bin 347 -> 787 bytes core/__pycache__/views.cpython-311.pyc | Bin 1364 -> 1326 bytes core/admin.py | 7 +- core/migrations/0001_initial.py | 25 +++ .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 1454 bytes core/models.py | 15 +- core/templates/base.html | 5 + core/templates/core/index.html | 207 ++++++------------ core/templates/core/login.html | 99 +++++++++ core/urls.py | 9 +- core/views.py | 35 ++- static/css/custom.css | 186 +++++++++++++++- 17 files changed, 424 insertions(+), 169 deletions(-) create mode 100644 core/__pycache__/context_processors.cpython-311.pyc create mode 100644 core/migrations/0001_initial.py create mode 100644 core/migrations/__pycache__/0001_initial.cpython-311.pyc create mode 100644 core/templates/core/login.html diff --git a/config/__pycache__/settings.cpython-311.pyc b/config/__pycache__/settings.cpython-311.pyc index 5be02db206d695487566bb415cb6b1e287631fb4..0d0c817176e5cf41fe9ab0e17531e5cffbe0adf1 100644 GIT binary patch delta 194 zcmdm>-LJ#DoR^o20SHv*PO4o|7Ldyb#Kj*spAx*yEcbzpfmf`7^M2KczG$)vhQF$YliL;(MFLgl;o)UtkadBCt{bwxt(d diff --git a/config/settings.py b/config/settings.py index 291d043..f121c46 100644 --- a/config/settings.py +++ b/config/settings.py @@ -180,3 +180,8 @@ if EMAIL_USE_SSL: # https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +# Login/Logout URLs +LOGIN_URL = '/login/' +LOGIN_REDIRECT_URL = '/' +LOGOUT_REDIRECT_URL = '/login/' diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index cd6f855b12f4883b1ba9de01c54245c53aacd714..db94a99138a69b90f0cd19a6ba708a4b984df9d9 100644 GIT binary patch literal 731 zcmZWmJ5L-j5FYPa$6X?EM1n-1NU64ft3-W`;JikkeNE zW%{1x^etuOQO1>BiX`UBi=&E<3UR7d#*w6qmxW9!-w?V+Vg;2?gooRK?Ds{a#1u@}!?8vZ5@JWf~!Ai;j}C;zA81k3>ACM+r}v{0(!Yh5PMbTx2|` z59_?D1O9`@bybMqq!8a^8O1z^3&Df7AUox$a51MFRd#X}Y%A z?CT+hUHpOXs%Pvt%16acT;!EV4ux)qa_}cSl|pw)d4iAd1NhqBzIL}oTU@%TnOeFv zwC=rkiwe9K8whnf#N6e3a_pn&l~c*d2zON?*1X`*JOQWm}F}PPu2O` V>*1R_eeh4KI}?nJr}6E>{sSXF;NA^zt+=U)G-)34Me7EVYkUGk3djA8&doNG4HRE~XX;GKCnYCdPZZRhi4)tYr{^)pSn;0Q; z{8F72v@4B>c$3)2gVaT%jrCfh_n!%}yAA>%4r)Z`K)uR|!~YH)nMS~{Q}DTS@j z7h#DU5i1mwmEKVHiU+1eN)}}bqJa$Xw+QEy@s*$}m*?%w((EQk#$od+Ko9*%BYdad zJuR+%kBthIaiQ`fU+BL)y}$bP(I~$@&aeN%cRy86>K`{xHb=NT#^p&WaU(fF7m!F! zK?lAPQy-FL6ex=?h-DRD1~|X=(4%(fk~Nlts~U=z0VcYpX=fEybNhK?OOcBBdp0;d9mhWe5rNhpJM5Xn46Buk|uIG56S7NHlgQZlkc zeux^%RHzLp&h=eFnP<)2iO9{B%RgarhA1*5f{YB2NT!=HvKd6>qpLQc*hoH?paiUx zj9e0tztV|9a-;k?H1uN8l%ZbBqS7oWjEdKqEhJINFhn*|8fn*Rm68Z;QL9Xr;L}Hy za~bNvO35gbH=ZJ6iBtjnjX3`WcS&IRjZ7?eT$jZ1HgM1s!foeqtZWJ~C2$yKRP39_ zm{F(e_oiYtQvm~l6FafHw(rGDgj#mrWO%?#i+a;#2;r)T%kmP4IB)e_8$5BI(2f}} zf4d>^DtM-U0DJVLwm0x?*D+cB%Lkv=J1(ye(jM!Owo980InARSG7~zKoq(~p(4%aC zeR}L$i}6D?u@^UfSpjy2zC%YKQv&$XE?|-!vrmQeDC>CQK>cO2)pPr_6&wbRAGGK( zwF2Met#4ia*c$+q|I#1l%5KZ(O&rU*hgrsX{)F2N2OaodSPj8Tw04tYs1Zn zRy*B}wA#fxzwL+G##q~kw2k4`M6aEG6X~^!cf${M!u_v8{a~ygMEb$-?xcGA`CC!- z_5}^A>*MNrR9zo_HmTH}=f2l3-uspOz8voJu;Ps?UR3dh_hz!Byg5U!vJ{3uu-lO1 z0y#3BuG=Js=_Hl=;$NQvYzUMK&@a`G(o6Z6zYPxYFueP~W?4y+CTKPM|8FLjC8+-@ RJMBDU{|NiPuW=^j{sY~?J^KIv literal 209 zcmZ3^%ge<81S>LrWmp2~#~=<2FhLogg@BCd3@HpLj5!Rsj8Tk?3@J>(44TX@K?*b( zZ?Wa(r=;c-`)M-W;!Md(%uCPLOGzqX21>4E_zY6>OHV%|KQ~psG^sSNq*On(A~m_R zB)>?%JijQrxF9h(RX;huC{-U~j9x+IFAf_ZyEG@&u80Guoe_wOWr4&8W=2NF8w@fR Ku%RM0pb7xTsWln^ diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 1f807fae1897c89361c99c5e868a26d00799b73f..f7f96d2b1e51a65273580a09de2b29e93ae97d2c 100644 GIT binary patch literal 787 zcmZuty=&V*6hB!f$+GLX#HOvGiy;IXidE?1&=P8}DU{NsZU-$!@g24jeVEg!aXfi6 zbjj9C9o-h^&*;$c1fm$Now6CSW$K-5Q(FA=?({x>zxQ!p3xyouvj4@iKS==m7S2|( z8{_sDH$DRdkmLYYG9^ja87Je)rtCr!a$iQ!QC!tjUCq=akO5di3RaPNt<7Zs7W}Lw z&1A8LvO6<6&&#LV&H&}E^K(Aef}gdZdpmgr&Vzq>a}Hi?DFE&L&lx~dN5yxbe*Z?G z>QVwn79G|ziT=hP*xm;lpC>tP`XLqejp)y_itQmhPWCK9?Y@J12vf^;5%j3)e@XgOAArP8RPH{NUG0 zmLzEj9U zw$kYA5i1>B9>t{t_N>iHov74_OP!yu80J1MrI?xK#Yf6~kw5XR)Vlxx literal 347 zcmZ3^%ge<81P9W8Wn=;A#~=<2utFK1ZGepF3@HpLj5!Rsj8Tk?3@J=0%sEWC%u&pY z3``8Ej43Rs%qgsE*p@LfFsue*2uNp)Vo6~SX3*q#2@=p`yv0(GSd#IQ5z5KP&rQ9> zPz16EB$t<%o9d^@dW$$>F9%u(l1Ra%_}L@PpwEzE-lF~(l5_1$}TQQOitBL&MyK=1I^PbsQkrYlbfGX znv-f*#0S(2a!j!okodsN$jEquLFNJ~dcYul0Tq2~0$E)(@IWifAfo#3r<8#Sa8Q&{Gk;1*B|u#&qK*8)s*=Eh+7x z2M;RV^rG})ReJI0pOKV6!+;=&2XB$$#glI)CN}mldHd$g@4b2RelPD29vng-!*8qp z3k{)fa?=yoE7`pZpI3+=f&)~+MU17b1zJTf>R{`{2#iXim{9&iU{ncAW-sPg&p;bi-`r!=^}#$CJ)0mpKlBe$*9H+j zUNQKQJ?DrRbz>9Wv({BPABbHA?1c-9|^tju$do@PUQJ z`~t58xgjR26jnH2rXG)k?goLdLk2X>%`Y)q9vXokaV9$mhHMQpYG_IW3Ju$WugOzU!G}X&VML1Q!}m9Ov9Mjg@Vw)~H#l{`pEkQZrXKAw?t1~9Bb2*-plD(;Sq?Kf1(8g2f~7%=;Xy3Rfb+1# zNFeklbx78Ev0o*V(>a?P630o|t(L;PB!>C(c{k<@c|zfS7ifr>EL@EI1w{)XYAb`p7!)m0aMRBAG`H0kYs?y)~HHeA>dYzqw)ba_@DyWW*F>a&F rjltDM6OF;uMw!Oo+K>5)osO2ompTa4PaSC^>&Lr}QB8XHD^=hhUVSrq literal 1364 zcmZ`(&1)M+6ra_{dS%J>I!@|TuH%hUh$T{~CE!96oTjQ1oHkCdQ%ZHHPf-Q6#oP5Eq{V!1Q7#*Ku^61OfEk4%~~s}guETzy!YnKoA>c! z|CpMZL_mL+PRlpL2>m0JfI>sz+l$SscSs^=|k4VB6wxYJ2mwh>6 zP1s6a0Xh0B%Et_88>QrbMYzqB#N#E*3Oks3CUHQODRvA@K~k7$;|6iCE(zZu#bJlk z(8(RJK1WUTVt6pV9fEo^GQIeJgpqaJXHRNMhV;}glZK3tBN^en5Q~o7QAND#(>piA zMx+^HvEUS;@pC3}9#TaPq;a2SxGAxj;0&RP639l>kPjiNqhJ8&1AY_l`WecBvKL`< zK_mp-GGfihA=Gg+ss)BI*;w21yRNY^)~upqm`+Labc(T~)l62_EK-D_XmFxoXUC+( zv9ZH61GA!Od6`C{=(;tt(Wqy1VsquT>;5P-9=l@|nMF#b-iU4DnzqgA7Upvgw;tSE z&pj%9yS|;<+IaYA=m{Nfc9(G8LP76tKq2MQk+Efgahls~zxB^Y15iq2p ze1hU%s@P+67IZo#*hj*3LMINxyUY_2H9@DJWy{3I+3Mq}!>U=li}flaG+QI|spl4T zob~hDF>%eyxOE;8-gFVJ3n+TO18bo->ila}J65%hy4+QlU#ly}>PkmVchz)jqo<`_ z{(P+6Xlpn2)BEXH3$5?^ljojY`z`Y<)5;BG^zo;?`Q?6crISo|lj(kPxtsi=lf2$d zUhiF8=v}zfU%GryZ>QE?g*r>Q?ozJ5xODJS`|4MJebZUI)m^+bn2pWI0|cyf_w9L< zIJbYby>RVisS{uA##h^s)e}e(07x&wM(2TX`E06G0Q9V<>X{|ul?i3g0?%(HPYlgf z1`zb;;Me{qqL;+gPk@~&H*I26ExbmrfGYk1-VksxxLq|KlfAZXr+qD_(V zkxFf&Et@$`X>%I>Pd=2*-%D1#6>r4BE4E zs~N+}BUFo@ipiSH(;dsCx^KCT$JLIDiR~HVh2bYRHqLHJA|ydg38SWrrDn`TO+`i| zzNJnUU>V0?B(aq|ACa(x6&&xY#|mr%demAnPK3zRWCSPssbh%o4Ei}H9b!U4#2B8! znSS1nVy7mnvC_YMA?lS7lR3voxQM0x)%Sgw zYQOaEUQDT(#bu!P8c#JQyne?M-%=O%44=yuUgPrJ)tbUHde3(?gA&~*m``=7)zRsm zwoUeU$|Ka$ZEK(K%o9R4U5{vv-XUBO@)X0qY7!()-_>m5n0}kbVYxw01t+H>8Iac; zCI+~)wXUrj#EanAGA-ZZNdtnKF5Ls1(sEtQl{JuH#WA&pd_H4T*Q&Doig` zs}Xx+YuR;eqC1h5grh`S+U=6@-T4QdfkX86%X-`Gka};k=lH!k*(Cf|Bxi?( z^2@?yR=oA}Nl?6XqP)1lni_K`D|&;X7Zg2~_lJcdE7gv!1f|;ZN366oC@lr0C6@nu zSh&i{b4MQq<++mwFBVz3F(@~Ja)aeJhJ|aaGI#VisLZj?*4f=3*rz|TR)_8X%qj_4wa!_4n`ITYe!z1^o^{4xMm8}wHciHUDV0I^% z-C=n;$|h!Vqj)-%evLr95n>d}Osj|Y#6uS+ENsA4N#QNsG2MB*8RjueUBuIZfQ8tP zL3^9L6II0*^b;_}f5dwXVic1kX`~{l#?Z}+??}BQsUvhzJWU7r8?VL0oBx>&_W literal 0 HcmV?d00001 diff --git a/core/models.py b/core/models.py index 71a8362..a6cdb60 100644 --- a/core/models.py +++ b/core/models.py @@ -1,3 +1,16 @@ from django.db import models -# Create your models here. +class Product(models.Model): + CATEGORY_CHOICES = [ + ('food', 'Food'), + ('drink', 'Drink'), + ] + + name = models.CharField(max_length=100) + price = models.DecimalField(max_digits=6, decimal_places=2) + category = models.CharField(max_length=20, choices=CATEGORY_CHOICES, default='drink') + has_deposit = models.BooleanField(default=False) + image_url = models.URLField(max_length=200, blank=True, null=True, help_text="Optional URL for product image.") + + def __str__(self): + return self.name \ No newline at end of file diff --git a/core/templates/base.html b/core/templates/base.html index 1e7e5fb..3910e4c 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -15,6 +15,11 @@ {% endif %} {% load static %} + + + + + {% block head %}{% endblock %} diff --git a/core/templates/core/index.html b/core/templates/core/index.html index faec813..b218fee 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,145 +1,70 @@ {% extends "base.html" %} +{% load static %} -{% block title %}{{ project_name }}{% endblock %} - -{% block head %} - - - - -{% endblock %} +{% block title %}EventKasse POS{% endblock %} {% block content %} -
-
-

Analyzing your requirements and generating your app…

-
- Loading… -
-

AppWizzy AI is collecting your requirements and applying the first changes.

-

This page will refresh automatically as the plan is implemented.

-

- Runtime: Django {{ django_version }} · Python {{ python_version }} - — UTC {{ current_time|date:"Y-m-d H:i:s" }} -

-
-
-
- Page updated: {{ current_time|date:"Y-m-d H:i:s" }} (UTC) -
-{% endblock %} \ No newline at end of file +
+
+
+
+

EventKasse

+
+ Hallo, {{ request.user.username }} + Abmelden + Admin +
+
+
+ +
+ {% for category, products in grouped_products.items %} +

{{ category }}

+
+ {% for product in products %} +
+
+
{{ product.name }}
+

€{{ product.price|stringformat:".2f" }}

+
+
+ {% endfor %} +
+ {% empty %} +
+
+
+
No Products Found
+

Please add some products in the Django Admin to get started.

+
+
+
+ {% endfor %} +
+
+ + +
+{% endblock %} diff --git a/core/templates/core/login.html b/core/templates/core/login.html new file mode 100644 index 0000000..0349aa0 --- /dev/null +++ b/core/templates/core/login.html @@ -0,0 +1,99 @@ +{% extends "base.html" %} +{% load static %} + +{% block title %}Login - EventKasse{% endblock %} + +{% block content %} + + + +{% endblock %} diff --git a/core/urls.py b/core/urls.py index 6299e3d..f6d3085 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1,7 +1,10 @@ from django.urls import path - -from .views import home +from django.contrib.auth.views import LoginView, LogoutView +from .views import index, article_detail urlpatterns = [ - path("", home, name="home"), + path("", index, name="index"), + path("article_detail", article_detail, name="article_detail"), + path("login/", LoginView.as_view(template_name='core/login.html'), name="login"), + path("logout/", LogoutView.as_view(), name="logout"), ] diff --git a/core/views.py b/core/views.py index c9aed12..ad11146 100644 --- a/core/views.py +++ b/core/views.py @@ -1,25 +1,20 @@ -import os -import platform - -from django import get_version as django_version +from django.contrib.auth.decorators import login_required from django.shortcuts import render -from django.utils import timezone +from .models import Product +from collections import defaultdict - -def home(request): - """Render the landing screen with loader and environment details.""" - host_name = request.get_host().lower() - agent_brand = "AppWizzy" if host_name == "appwizzy.com" else "Flatlogic" - now = timezone.now() +@login_required +def index(request): + products = Product.objects.all().order_by('category', 'name') + grouped_products = defaultdict(list) + for product in products: + grouped_products[product.category].append(product) context = { - "project_name": "New Style", - "agent_brand": agent_brand, - "django_version": django_version(), - "python_version": platform.python_version(), - "current_time": now, - "host_name": host_name, - "project_description": os.getenv("PROJECT_DESCRIPTION", ""), - "project_image_url": os.getenv("PROJECT_IMAGE_URL", ""), + 'grouped_products': dict(grouped_products) } - return render(request, "core/index.html", context) + return render(request, 'core/index.html', context) + +def article_detail(request): + # This is a placeholder view to prevent errors + return render(request, 'core/article_detail.html') \ No newline at end of file diff --git a/static/css/custom.css b/static/css/custom.css index 925f6ed..1bf8663 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,4 +1,184 @@ -/* Custom styles for the application */ -body { - font-family: system-ui, -apple-system, sans-serif; +:root { + --bg-color: #1a1a1a; + --sidebar-bg: #262626; + --card-bg: #262626; + --text-color: #e2e8f0; + --text-muted: #94a3b8; + --primary-color: #4ade80; + --primary-hover: #6ee7b7; + --font-heading: 'Poppins', sans-serif; + --font-body: 'Inter', sans-serif; } + +body { + background-color: var(--bg-color); + color: var(--text-color); + font-family: var(--font-body); + margin: 0; + font-size: 16px; +} + +h1, h2, h3, h4, h5, h6 { + font-family: var(--font-heading); + font-weight: 600; +} + +.pos-container { + display: flex; + height: 100vh; + width: 100%; +} + +.pos-main { + flex-grow: 1; + padding: 2rem; + display: flex; + flex-direction: column; +} + +.pos-header { + margin-bottom: 2rem; +} + +.product-area { + overflow-y: auto; + flex-grow: 1; + padding-right: 1rem; /* for scrollbar */ +} + +.category-title { + color: var(--primary-color); + font-size: 1.8rem; + font-weight: 700; + margin-bottom: 1.5rem; + margin-top: 2rem; + border-bottom: 2px solid var(--primary-color); + padding-bottom: 0.5rem; + display: inline-block; +} + +.product-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); + gap: 1.75rem; +} + +.product-card { + background-color: var(--card-bg); + border-radius: 12px; + border: 1px solid #374151; + color: var(--text-color); + cursor: pointer; + transition: transform 0.3s ease, box-shadow 0.3s ease; + padding: 1.5rem 1rem; + display: flex; + flex-direction: column; + justify-content: space-between; + text-align: center; + box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.06); +} + +.product-card:hover { + transform: translateY(-8px); + border-color: var(--primary-color); + box-shadow: 0 10px 15px -3px rgba(88, 204, 128, 0.4), 0 4px 6px -2px rgba(88, 204, 128, 0.1); +} + +.product-card-title { + font-size: 1.1rem; + font-weight: 600; + margin-bottom: 0.5rem; +} + +.product-card-price { + font-size: 1.25rem; + font-weight: 700; + color: var(--primary-color); + margin: 0; +} + + +.pos-sidebar { + width: 380px; + min-width: 380px; + background-color: var(--sidebar-bg); + padding: 2rem; + display: flex; + flex-direction: column; +} + +.cart { + display: flex; + flex-direction: column; + height: 100%; +} + +.cart-title { + color: var(--text-color); + border-bottom: 1px solid #475569; + padding-bottom: 1rem; + margin-bottom: 1rem; +} + +.cart-items { + flex-grow: 1; + overflow-y: auto; +} + +.cart-summary { + border-top: 1px solid #475569; + padding-top: 1rem; + margin-top: 1rem; +} + +.summary-row { + display: flex; + justify-content: space-between; + font-size: 1rem; + margin-bottom: 0.75rem; +} + +.summary-row.total { + font-size: 1.25rem; + font-weight: 700; + color: var(--primary-color); +} + +.btn-primary { + background-color: var(--primary-color); + border-color: var(--primary-color); + color: var(--bg-color); + font-weight: 700; + padding: 0.75rem 1rem; + transition: background-color 0.2s ease; +} + +.btn-primary:hover { + background-color: var(--primary-hover); + border-color: var(--primary-hover); + color: var(--bg-color); +} + +.btn-secondary { + background-color: var(--card-bg); + border-color: var(--text-muted); + color: var(--text-color); +} + +/* Scrollbar */ +::-webkit-scrollbar { + width: 8px; +} + +::-webkit-scrollbar-track { + background: var(--bg-color); +} + +::-webkit-scrollbar-thumb { + background: #475569; + border-radius: 4px; +} + +::-webkit-scrollbar-thumb:hover { + background: var(--text-muted); +} \ No newline at end of file