From d416431102ef4965aca6d25cfc310ca44fabe339 Mon Sep 17 00:00:00 2001
From: Iza Madeira <imadeira@tic.gov.tl>
Date: Tue, 17 Sep 2024 16:24:45 +0900
Subject: [PATCH] update slide

---
 .../__pycache__/serializers.cpython-312.pyc   | Bin 10114 -> 12267 bytes
 apivisitor/__pycache__/urls.cpython-312.pyc   | Bin 1673 -> 1761 bytes
 apivisitor/__pycache__/views.cpython-312.pyc  | Bin 9988 -> 10372 bytes
 apivisitor/serializers.py                     |  46 +++++-
 apivisitor/urls.py                            |   4 +-
 apivisitor/views.py                           |  14 +-
 .../__pycache__/settings.cpython-312.pyc      | Bin 5748 -> 5748 bytes
 mci/__pycache__/forms.cpython-312.pyc         | Bin 12677 -> 13634 bytes
 mci/__pycache__/urls.cpython-312.pyc          | Bin 3047 -> 3311 bytes
 mci/__pycache__/views.cpython-312.pyc         | Bin 18776 -> 20480 bytes
 mci/forms.py                                  |  39 ++++-
 mci/templates/layout/base.html                |   8 ++
 mci/templates/slide/editslide.html            |  35 +++++
 mci/templates/slide/slide.html                | 136 ++++++++++++++++++
 mci/urls.py                                   |   5 +-
 mci/views.py                                  |  47 +++++-
 16 files changed, 319 insertions(+), 15 deletions(-)
 create mode 100644 mci/templates/slide/editslide.html
 create mode 100644 mci/templates/slide/slide.html

diff --git a/apivisitor/__pycache__/serializers.cpython-312.pyc b/apivisitor/__pycache__/serializers.cpython-312.pyc
index 9dbc8320b6619b1a6cfac3bc280abe3aceb873ae..f4a5666b5670dd84047ce5a539f9c0e5483cb3f9 100644
GIT binary patch
delta 4616
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
F{4Z`Zz0Cjs

delta 2790
zcma)8ZD?Cn7``{jO`7jE{Yu)Vz3tMbck9}H6xoNHVOv+{wsuZ8rPyV+$z7NArfJVj
z+*Su2T5(fR%K;fG4E!O82!$XB$`F6ZKz}$8w_Ok?3jPqLY}27Q@I2>kNg6uvLLT1t
zIbZL2zfOKjzBn5A+VA%W?7LKd{a8z6F%TA87UQ{uD5QmSjoy%L9BbsVTW`uXk2N#d
zleX#MtbNSRd9QBEM#dtdU=xOgv~NL3`!(srAYBq$gRPtkFfLf)+BjFsxVjP-<y?qy
z^(C&Ia}A7ZEO8y2Yhqk;iIX`OW?ZDib#ktSajo~cPInvAqD<Qj%cR)pcBO;9Z#yBn
zsNcS~IB6dj=bM=uYT55LU_rQ68#yOk3pHJEz14BvNn}QnE(RkXI!FtYRzTYWnsh*t
z0iA%x2M}b!Z6AXL;jYalb>0#fSQ9ZP#eV#wpU3>g1Ck<c2{WBU0KE)M-;|oyCUYdC
zCNt>~#aVs27c--PcKSm!EDq3boRP2$g4?V3Dp$~Z&Ov1z2DybeflsTpKaPPo9divk
zWlLO&CFrlNRJ>%~3bx>$6}If&#PoJ>s{k^9+eBgzt6cU7H~_y)H#C`3bSW002c$)M
z+TG?-81*#iqhfRu{mvb(@YYr~V*0X$>5P$?$rM)hmLEG-cxxMd%oCZH!LHyf&=O!h
zfZuKdq>X^>0B$r+UeSwNFaW^bWDp<&K$Rjd2=r2H19f{-z3{E+IF`}16`YGqsx*BE
z{n#7rmcc&UsR;}x=<nW$6~{y|;Oi2_)pWhTNgSq+``a19mlyrfXeqR2?X*hN>7<sO
zA=;cuG6k}gUiWWnsmlBScCYZ}Ub-jHW*yW;rvewnQR)rK4EutQIeA?iqO-v>qFlTg
zEQ&i0VmZ(B5hf`%v!-BZWLnK?1cd2;N)BKaaz*i&_L<y_X`j^c1XW5l(4XtN*JFZd
zH?+J`L!N;gcwW^rX;wDrBtw-fKZlId&7nTaoTGFq^phyl0Xb4UR{xi6o*%|d+J^&p
zWcNdYL1Yy0Bmi3~L2?9g67WCPjAPz&02MF+;O8L~6bZI>3glVPX@Ca6A_F-n<0GBL
zf174Sp0G-&vam6?oT@xm%Bjjd<k^!|C$-%fO;7WSnC_j&RbuJfLp(_jVWXpf;|xrH
zGMUm<!$@hmo=hqt8Dp$bCo)V}oo)zohv>cVoE7*Xl&kHsNIQFCbksLk>~B3HHnG>C
zhV@|gM>aN{ePhk1J&Kop(bmwzdl1Un^cjVTQn%y2H>H`JkuO*Ue{i1Hhm_Cc^#U6q
zno%&li118dLeEU8ghvYTF`XG)Hfws)nlVK(hFX~B?UYQjQ7f!DNb4{;Sa~k%8@#m5
z8h&(T8)+=}d^Z-CGk<=T>2vI71Q_7;Xg(+1vN=MYWp9TPet5|64wG`oU>M=O{Ujvb
zdw9p;9qbgiatDtmp!2Jh8xoof;g{rrt?IT}i~_LA_>z9R>a)7L4yWX~B`~nsRF;ME
zT`%tnJZ(ql;qLb89#D&o%APoShUqV3PnZl(G@O&nx}D4Xuwws*`v_nGt1Um`$=oI4
z&D<qgHqG(Zprhy0nqf9gv5{f=W6$^XyzU*y1p^s|N}-qI>%>L+cYL!$W)!{I(?s|6
zzUekyM4K&WMxNg2?H@8-soZp4JC)~^W(HEnwbWE{hNb+;97$Uxh3hDGtG7t3w-hw1
zEbaUx95t#uA-+xDQTDK2@{97x@Od^uUcxeoyat)qJ}-M-+7lSMzoT>Nq)H}@sx7f-
zg5Fr&<$RBc#x{CUX`x+f;^Q(?N0vY8m@5HJ0A2;u0bl@uH_0o2Hvl-f`sF<f4)8kt
zV9jBl{6HO1y6L{PU(vSys8~z4^sk-g+qPr8o`D(MpG#}{QyTkoqG#q<ujVNk$2iYJ
zo`MOeLjaz0h_LCYSaTLb%d_*Jnn$y_bV1j)6Wku%#<;?O{?Q+CC9ev}D?*ai4!jTw
giJlAItKp4T!W-`hOu5rXmj*gKe+ms^1J9TL0Jms63IG5A

diff --git a/apivisitor/__pycache__/urls.cpython-312.pyc b/apivisitor/__pycache__/urls.cpython-312.pyc
index 17363d1c405ba69cebc573c0f75b31723634d211..0893e60440945b96e8a19d68a82aeb23bb296561 100644
GIT binary patch
delta 379
zcmeC=eaOpunwOW00SHp`UZ&+w<dtNcGf_QQB3Cd<kdc9jA(dq{ND>I5gi?jF)F<|-
zGJ~jX5b7S7n#{%sq4l727?iGq(#sfCtU$UUCLxn4e5rydd~4WNGeblf8B+M8M1b}(
zrU(E@CZH~@$#)pl*#&_-zAT-|c}&vcLTiL!>cJ{O>e--jqG)nrKskPhoUk}TE}bPx
zyi!6_a`GG|T}GbCr<nHe@&xB(rlf{trj`e%mP~GCPGDm#28m35!d%WMF*$~%h^a_u
z@@bYDeO;hi8G*Ri2}pimW@Kc%&!Bpj!QeX+17k4rcc3JU{0w4GE@PcP`82B#(+94}
L;%s>=+CZ%UZJSWl

delta 307
zcmaFJ+sVs&nwOW00SNZIew?O0kynzjV4`}k2qOa%Ln_N^kOUA!38o5WsZN}v$_%1*
zL8wPyYBCoigf@cGQBb-GO0Qy65lZ2U5(b*bn8FVvnSf?#Oy*!xXBPnS__DMn&tj4m
z7hEH>ni*mnSS3h38&pmNO->Xj#}APc7DLFTvqXtiifc+tKEb5R$UXTR)1Ju(nBym_
zv6L~2PoB$CG+BhTQePWr2O|&{8vw}<%#4hT_Zd|0G8lYkVqkP*{tlFcksm?q$$MDm
QGkxHgoX?iWq6yRn06x+}`Tzg`

diff --git a/apivisitor/__pycache__/views.cpython-312.pyc b/apivisitor/__pycache__/views.cpython-312.pyc
index 4bcd2a15fdfacc7f6c7d4d227f423b0ec624ee51..d2fdc9f943cf88101f434f04b60be6ca947510fe 100644
GIT binary patch
delta 2962
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
VJw#gEd^y&0G1l{&zz3L;e*o^?c<lfH

delta 2766
zcmZuzOH3PA6rHin*x1-6*nr1?G57<+H-?0Sknkyq@*y$#kcf_&431|44l_1=Gc*OY
z0aZzVs-mDLRc)heDrG@asUOr$r7oI9rL>DGi?-@?kuEAl*&+24sf)Jnz9Dwv#u8`l
zJ@>wQ@4N558LphTlJ<S)^|~4Idz=6H!dLv7FT~ziYun{v8QCs7RF76AuH~9mh|0(n
zYEY{cYpKksj8-SsQ8%YruZ6@A<z0m5MP3VwVX9ZE4O*kvNM*O$q(#ICl|5>+78RpZ
zu2NgHR<V`JUNt7hNG_im*Ailaa(*?F)Y`;0qS)nXHLSIZ?V2D8RNtm{Xq{pwb*xdl
zv~IDR$^o@U>lJ&c98|Y!DKSOmTD4E>7yDVp#vEkix+{!audo;A@Tjf9zmswy!tq6J
zfO28NH59pBlxrkhQ<2+Exd`E!i`*dPqJ(QHa(gJ(O1Ri#ZfJ;dal$2($Zb0u2g8Va
zDVrp0o02H9`zYH^SmE*dhGEKe5U%ry^&?AOp$kXtjjR*zvrjl5vLveD!tdH|Z=7`e
z!m>Wx!_~1Z_y9M_3B-m3`~jEZ`YrJu_sL2Jh@Ajk08W5z0;W$_R3&RjNKrF}BBLI#
z^aA(+wga>PqyRz$%<6^AY%ZTMa)rE<RWrJd`oKoB?Eq=uF*FlF-$?-f>m0Dk8Nm0r
z6L{3=!Vla@e6-qy@3@+0%F1&=04R@^W4a1RR*-al$ttWG49_SG4T7PpmLcGV@L1(@
zR{kOUb&SWaSDeIuR0fZh<@JDbF|U;^P|Vf}5^Y0Sju9}7;3;>Xm1BhLk;k{(@3DI~
zhCQFL9kieO!Rr74vr@A9CP{h)(WB(IifHGKVBY)T3UqS48kH62hV`Z5_JK+R*MLO(
z0mox?p;YS;!kON!j9EohC25^SCkU&<7>!zq$6zG@*&5#CJ7jHSjBI2Ddp$1f_Xo02
zds^_7*HsBiX<fTPDh<#!P|NBnjZ#?;r@?s|U-ge#si&cb8^8HE8wYvOe!RIYG!CM`
zq8F?OH5>xD0v!h@+78PdRJzFuB0bgNiJH4?KW+~`kMn`{BlX0*Zb!A?53(6JG&OZx
z>f63UN>57Tlj*4g>8W*x6@LO892qpLo80^*c<K&9L3p$S{~9<*1B?7Qh?W7!5_r<*
zMo?Ip1p}P1P*dJZDE66W>;(huW$9!~rwwO}E&${JrT|V8c=CirAOY}r?QyHeBHV?I
z&uhQ64b~BZ$;pb5$*F0<iyFYYG;A8Ed4K}I0)W*r{6%P-qs^bd|AhJ@bc~M?`?B|F
zPB%{L3etOK6=R7|`Yk-kH~BYxOmqA%uaoy}Rx$Mr_*Fj1*@^b%Vf-=w7XS3vn@&lR
z3t34*JWhvGsW6FSdJgMjvX;w3bn8Y!#`3E_58OQdG`z>!?)=7P_%+rAhq!J-GkCeN
zrSoN?kb$BPyIElr=9RqZTqJR&oJ@Btc&xt9;BOiuD^Z9EeKEacQ&Is*S)`B`C+&u5
zpI4Sl+rqrH&{Y~5B*Qud*11XSTt>|;lhPqAx(ck*3M1?A>VtWLAHABUW1*lM%fazQ
z-6-H})6Eo&PFir3&(1XnR(7jafm_9?NYHA*>eid-Dt;L8)3;NCjiPbzf_sD}3H<+^
zG#riZJ_%;Xj7|ZRPuF!I0d9bB27o$W$D3h(V<S4ldZ6#<HGmg!q_wXLMow^}ATTok
zZxApYdgdhs#X&FLNrdn#t?^!K%D__WCVB@{Xrs;%pk1@thOXi7Tk(+9E3Uj(30Rf_
zcvjai7%;vWi+JcJKo>^wkMYAbrl)j#I`R?&P9<XaTq4|3EZ20GK9KZ_iFgPY#_uPh
zYy<u>5oR0l4~bZyiO{A;zL?3+7JB9kV*y35C)v$5<H2O2KMITJ`x36a>Aa9r$(-pZ
z23lZiRkn~fQ0{zBX3>~KalDp{hG1`I^_E?qD<C7gXy_=3?<Sj9+Q3+KtRO4unVfRz
zlwu(I4+H&V({CmHn8B9-O#{%^2E9qEpwe@u{ds!Q{&wxv3i6_=45N>TA4~r9YJ!_~
smSyiV-S?TZKQU+T1(~ytYz%wZ_K5ggw*5{KueLq#{K>f4NtO=He|70ZiU0rr

diff --git a/apivisitor/serializers.py b/apivisitor/serializers.py
index 785cc19..307dcc5 100644
--- a/apivisitor/serializers.py
+++ b/apivisitor/serializers.py
@@ -4,7 +4,7 @@ from rest_framework import serializers
 from django.forms.widgets import ClearableFileInput
 from django.contrib.auth import authenticate
 from django.contrib.auth.hashers import make_password
-from mci.models import Produtu, Kategoria, Subkategoria, Munisipiu, Postu, Utilizador,Dokumentu
+from mci.models import Produtu, Kategoria, Subkategoria, Munisipiu, Postu, Utilizador,Dokumentu,Slide, Imagem
 from django.contrib.auth.models import User
 from django.contrib.auth.password_validation import validate_password
 from .fields import MultipleFileField
@@ -107,6 +107,12 @@ class UtilizadorSerializer(serializers.ModelSerializer):
         instance.dokumentu.set(dokumentu_ids)
         return instance
     
+class ImagemSerializer(serializers.ModelSerializer):
+  
+    class Meta:
+        model = Imagem
+        fields = ['id', 'image']
+
 class ProdutuSerializer(serializers.ModelSerializer):
 
     kategoria_id = serializers.PrimaryKeyRelatedField(queryset=Kategoria.objects.all(), source='kategoria')
@@ -118,6 +124,7 @@ class ProdutuSerializer(serializers.ModelSerializer):
     subkategoria = SubkategoriaSerializer(read_only=True)
     munisipiu = MunisipiuSerializer(read_only=True)
     postu = PostuSerializer(read_only=True)
+    imagem = ImagemSerializer(many=True)
     
     class Meta:
         model = Produtu
@@ -127,6 +134,33 @@ class ProdutuSerializer(serializers.ModelSerializer):
             'kategoria_id', 'subkategoria_id', 'munisipiu_id', 'postu_id'
         ]
 
+    def create(self, validated_data):
+        # Extract imagem data
+        imagem_data = validated_data.pop('imagem')
+        produtu = Produtu.objects.create(**validated_data)
+        
+        # Create and associate image instances
+        for img in imagem_data:
+            imagem_instance = Imagem.objects.create(**img)
+            produtu.imagem.add(imagem_instance)
+        return produtu
+
+    def update(self, instance, validated_data):
+        imagem_data = self.context['request'].FILES.getlist('imagem')
+
+        # Update Produtu instance
+        instance.titlu = validated_data.get('titlu', instance.titlu)
+        instance.save()
+
+        # Update images
+        if imagem_data:
+            instance.imagem.clear()  # Clear existing images
+            for img in imagem_data:
+                image_instance = Imagem.objects.create(image=img)
+                instance.imagem.add(image_instance)  # Add new images
+
+        return instance
+
 
 
 class UserSerializer(serializers.ModelSerializer):
@@ -157,4 +191,12 @@ class PasswordChangeSerializer(serializers.Serializer):
         user = self.context['request'].user
         user.set_password(self.validated_data['new_password1'])
         user.save()
-        return user
\ No newline at end of file
+        return user
+
+class SlideSerializer(serializers.ModelSerializer):
+    
+    class Meta:
+        model = Slide
+        fields = [
+            'id', 'titlu', 'imajen'
+        ]
\ No newline at end of file
diff --git a/apivisitor/urls.py b/apivisitor/urls.py
index 94bd7b7..6c50d4e 100644
--- a/apivisitor/urls.py
+++ b/apivisitor/urls.py
@@ -1,6 +1,6 @@
 from django.urls import path, include
 from rest_framework.routers import DefaultRouter
-from .views import CustomAuthToken, ProdutuViewSet,KategoriaViewSet, SubkategoriaViewSet,MunisipiuViewSet,PostuViewset,UtilizadorViewSet,DokumentuViewSet, ListUsers,PasswordChangeView,PerfilAPIView
+from .views import CustomAuthToken, ProdutuViewSet,KategoriaViewSet, SubkategoriaViewSet,MunisipiuViewSet,PostuViewset,UtilizadorViewSet,DokumentuViewSet, ListUsers,PasswordChangeView,PerfilAPIView,SlideViewSet
 
 # Initialize the router and register viewsets
 
@@ -13,6 +13,8 @@ router.register(r'postu', PostuViewset, basename='postu')
 router.register(r'utilizador', UtilizadorViewSet, basename='utilizador')
 router.register(r'perfil', PerfilAPIView, basename='perfil')
 router.register(r'dokumentu', DokumentuViewSet, basename='dokumentu')
+router.register(r'slide', SlideViewSet, basename='slide')
+
 
 
 
diff --git a/apivisitor/views.py b/apivisitor/views.py
index 8ec5d19..97429cb 100644
--- a/apivisitor/views.py
+++ b/apivisitor/views.py
@@ -1,6 +1,6 @@
 from rest_framework import viewsets, generics
-from mci.models import Produtu, Kategoria, Subkategoria, Munisipiu,Postu,Utilizador,Dokumentu
-from .serializers import ProdutuSerializer,KategoriaSerializer, SubkategoriaSerializer, MunisipiuSerializer,PostuSerializer,UtilizadorSerializer,DokumentuSerializer,PasswordChangeSerializer
+from mci.models import Produtu, Kategoria, Subkategoria, Munisipiu,Postu,Utilizador,Dokumentu,Slide
+from .serializers import ProdutuSerializer,KategoriaSerializer, SubkategoriaSerializer, MunisipiuSerializer,PostuSerializer,UtilizadorSerializer,DokumentuSerializer,PasswordChangeSerializer,SlideSerializer
 from rest_framework.response import Response
 from rest_framework import status
 from .pagination import CustomPagination 
@@ -184,4 +184,12 @@ class PasswordChangeView(APIView):
             user = serializer.save()
             update_session_auth_hash(request, user)
             return Response({'detail': 'Your password has been updated successfully.'}, status=status.HTTP_200_OK)
-        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
\ No newline at end of file
+        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+    
+
+class SlideViewSet(viewsets.ModelViewSet):
+    queryset = Slide.objects.all()
+    pagination_class = CustomPagination
+   
+    serializer_class = SlideSerializer
+    permission_classes = [ReadOnly]
\ No newline at end of file
diff --git a/e_comerce/__pycache__/settings.cpython-312.pyc b/e_comerce/__pycache__/settings.cpython-312.pyc
index 6ec65c047ec5e58446a2367a435beb4d98f94028..0abdd23e96be221cc20d7d2464b21d06cedd8d40 100644
GIT binary patch
delta 20
acmeyO^F@dIG%qg~0}!m%d%2N2Qw#t{0|qz%

delta 20
acmeyO^F@dIG%qg~0}#}nc(IW?Qw#t}SO%j2

diff --git a/mci/__pycache__/forms.cpython-312.pyc b/mci/__pycache__/forms.cpython-312.pyc
index aeb09ba9ba926f117265a4d9a469e62c8abaa4d9..d7ae30b21ca246ad7ce13433f438fa331e11d4c0 100644
GIT binary patch
delta 1016
zcmZvbOH30{6o%&xOzFe6JnV}W+EOYVS_<lhhe5yuf`M*ig^8uH1&ch)6qLpoqM-o-
zNb#13C?O#sn#hKXE;Md*;l>RMjf9xEaiI$m301U-#&f2in@-X%=id9zf6knH8oT_u
zSMye_Rx<E>F8SKMRz9aOlEh}&RaVI|Ellvl7!xd`UBt?rin@4STwr^2Bqjbaa9QN0
zm~E~jBue*;t#r~dZN336LJc5701bi@*HH<ys)z?=Lyn2YZ8dbGXkL9A4xZs*1Rxfh
z?Szbi)p`2DI_u47HHvD)Qw(k)N~Nts-w$M5ykduvVp2)FC5g->#qgyVedypp2_=c2
z92W^U1G~S(v(7G7br%Kg2p?_q6j<+JND&D{6Jj254iFfpyQ&#6?9vl51&L46O}>Tw
z&4?);J}E(`H4fzziV;6(tGga#M~&EV2WW%m_%SI1n)`$Wx~eyFs}L87BOVvA{5#|2
zLOB|(Al!&M^kqc{vC}+nw>4wSBq_o|7rZ=KIZ7;3T<8l2L-dQ=(-b5@wukNHqFH=)
zN+azz4+{O>_Rvs3z*g+Y!u^5X(14GZ306#NL)h_zOWT;8R?8z;^KkKzJP5{^?Ofdi
zw_Q-URK1l~O1JbTl>+v)@Y|OY+F)L$D+(2jE7a^0mc|WcBBL9I+HyX}C$xb`N_=<+
zxO|Mb4&YVkCamKfoAUpc>-UET!b5(41=cW3*DTdkV^igS%+<$7w%pC{a$ELuWNJ+^
zpW1BtOFCV#aw2<HHK}?pFHDb7#s;oqUW5y64G{bsV-8rBbM7&K1G$M)eq#V>4^;a2
z)8ZTNDCvBF@0KCz5FLnX2<bl|O|vwL(sW2SC1rD<L>g=-L@D{1{=wjIU#MPq4oj$l
ziR{zms#mp5q=a;kxO1^`t}@ABoNOZs(nyxLRqcIklEFA>EGEi0x2T=derF(*jQ;|I
C0Qh16

delta 511
zcmX?<)tbzAnwOW00SFvUyhw{vpU5Y{n6*(on~9}TO;dgI0j6|O#;VO460FQXN>AFF
zk+EX(IVI1@n`L?!%O(p*iLg}w^%hl3j*`^`N-b0fntV-mDr3Xu964P^#yYUt$MO>(
zY9;GHYC*&n5Tgb}sDOol8b2_$ZJwkEw4ep3=`Pgp7LaVq<YUU3K;eZ7lAAeIq8V9x
zfTDjlXR0PJ8TWz|_<{&O5YY!B`a#455HS%%Oac*;L4*^Cn6mkg`dUWDE}$)jlW%Lf
zGchu5R?$*qWSl&iQA(Ms3#0}_{F+>>Z3k2a@)C<qq5{|^Z03WE_A8n?*+*4^bsmtd
zw0V(^2BQqvZjhWNN0AngDw+c#v_VAU<Y&4ejB1mu_0k~z<O0iq2*t?<^fcK)EI&=7
z&3Q)kjEu7;zcZE)1qU-Y{J>!XcIKSP3MR5#8-a=$fw=hbWOtK;T3(Dwj3JB@RHy4t
d)c?W&Vt?^t<YaVYoWVMue<uG|1`rz@>;NGsgn0k}

diff --git a/mci/__pycache__/urls.cpython-312.pyc b/mci/__pycache__/urls.cpython-312.pyc
index 308dc3ebd8b9d854e0d85ff9bd67788be37f2657..52d63ea373af80ee90ec47aa87df10d2db5b093f 100644
GIT binary patch
delta 467
zcmaDZ{$5h!G%qg~0}$}4yi7CWWMFs<;=q6+l<`@Eb)!ZAOFa`qDszfiDr1%#Oa+2Y
zF<ZmFni;|et1}0x^FYYMSSc20>MVikykN2jI>id1E?qWCEtNHk(Qk4Ci>SLA(0Fzr
zHvpj+#sZ24!Pp3TjrD3K2(OBlfgwt*(x%cz({}S6mU`y+Tdc)7nJKAN!l@~lC19q$
zO=ez+Rc4Bv{w+?pV3lY}YEEiND!K}8Bw<a)Tf8ax$)&lec_r~h`S~S&np%_dIWF@Q
zsQ_&+QUwuelkGV(xQu~JMj$Ru*}ReSFQdapHU?JC4)F=9)3qmRFL1xYqH~jl;{vDL
z0@mgH3;8!>Utw_q3n(m5y{=?@QOS6R?iCh~53!6!{7enpA2KHI;MQg_1R4kcXjx|1

delta 205
zcmaDa`CMG%G%qg~0}vc`xs_JO!NBks#DM`hDC6@6mW>(#EGp?zQOc>TSspNX1YM+*
zs?5ZY%AU$P`2vfG4p5N~LK4PWW44+J!mi?FV2Dz#G_N$*wAdWNTF)$^$#{!5B|o_|
zH#M&$z9>Jx#7|RwvJvOy$s$~-Tn0d0j6hthx4D_?FC*87U`9iJrUvd0X_F7|XtU@6
Fr2y(dDBb`7

diff --git a/mci/__pycache__/views.cpython-312.pyc b/mci/__pycache__/views.cpython-312.pyc
index d48ed3a9840a2403c9190f59027d9fadfac7f5dd..0dfb00288d4512d87aaad241cecfebb4db27ce34 100644
GIT binary patch
delta 5304
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
G{r(Hym2rds

delta 4720
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

diff --git a/mci/forms.py b/mci/forms.py
index e7306bb..37d2e87 100644
--- a/mci/forms.py
+++ b/mci/forms.py
@@ -241,10 +241,6 @@ class SubKategoriaForm(forms.ModelForm):
         )
 
 
-
-
-
-
        
 # Form Produtu
 class ProdutuForm(forms.ModelForm):
@@ -285,7 +281,6 @@ class ProdutuForm(forms.ModelForm):
 
 
 
-
 class UpdateProdutuForm(forms.ModelForm):
     class Meta:
         model = Produtu
@@ -296,4 +291,36 @@ class UpdateProdutuForm(forms.ModelForm):
         # Customize queryset for ForeignKey fields if needed
         self.fields['kategoria'].queryset = Kategoria.objects.all()  # Replace YourKategoryModel with your actual model
         self.fields['imagem'].queryset = Kategoria.objects.all()  # Replace YourImagemModel with your actual model
-    
\ No newline at end of file
+    
+
+class SlideForm(forms.ModelForm):
+    class Meta:
+        model = Slide
+        fields = [ 'titlu','imajen']
+
+    def __init__(self, *args, **kwargs):
+        super(SlideForm, self).__init__(*args, **kwargs)
+        self.helper = FormHelper(self)
+        self.helper.form_method = 'post'
+        self.helper.layout = Layout(
+            Row(
+                
+                Column('titlu', css_class='form-group col-md-12 mb-0'),  
+                Column('imajen', css_class='form-group col-md-12 mb-0'),  
+               
+                
+            ),
+    
+  
+       Row(
+    HTML(""" 
+       
+        <div class="form-group col-md-12" style="text-align: right;">
+           <hr>
+           
+            <button type='submit' class="btn btn-secondary"> <i class="fas fa-save"></i> Save</button>
+  
+        </div>
+    """),
+),
+        )
\ No newline at end of file
diff --git a/mci/templates/layout/base.html b/mci/templates/layout/base.html
index 4498977..0b61414 100644
--- a/mci/templates/layout/base.html
+++ b/mci/templates/layout/base.html
@@ -144,6 +144,14 @@
       </p>
    </a>
 </li>
+<li class="nav-item">
+   <a href="{% url 'slide' %}" class="nav-link">
+      <i class="nav-icon fa fa-tachometer-alt"></i>
+      <p>
+         <font color="white">Slide</font>
+      </p>
+   </a>
+</li>
  
       {% endif  %}
       {% if request.user.groups.all.0.name == 'adminkompanha' %}
diff --git a/mci/templates/slide/editslide.html b/mci/templates/slide/editslide.html
new file mode 100644
index 0000000..3f134ec
--- /dev/null
+++ b/mci/templates/slide/editslide.html
@@ -0,0 +1,35 @@
+{% extends 'layout/base.html' %}
+{% block content %}
+  {% load crispy_forms_tags %}
+
+
+  <div class="content-wrapper">
+    <!-- Content Header (Page header) -->
+    <div class="content-header">
+      <div class="container-fluid">
+        <div class="row mb-2">
+          <div class="col-sm-6">
+            <h1 class="m-0" style="color: rgb(31,108,163);"><span class="fa fa-book"></span> Update Slide</h1>
+          </div>
+          <div class="col-sm-6">
+            <ol class="breadcrumb float-sm-right">
+              <li class="breadcrumb-item"><a href="#">Home</a></li>
+              <li class="breadcrumb-item active">Slide</li>
+            </ol>
+          </div>
+        </div>
+      </div>
+    </div>
+    <section class="content">
+      <div class="container-fluid">
+            {% crispy formslide %}
+            <!-- General Form Elements -->
+         
+          </div>
+        </div>
+      </div>
+    </section>
+  </div>
+  </section>
+
+  {% endblock %}
\ No newline at end of file
diff --git a/mci/templates/slide/slide.html b/mci/templates/slide/slide.html
new file mode 100644
index 0000000..503f446
--- /dev/null
+++ b/mci/templates/slide/slide.html
@@ -0,0 +1,136 @@
+{% extends 'layout/base.html' %}
+{% block content %}
+{% load crispy_forms_tags %}
+
+<div class="content-wrapper">
+  <!-- Content Header (Page header) -->
+  <div class="content-header">
+    <div class="container-fluid">
+      <div class="row mb-2">
+        <div class="col-sm-6">
+          <h1 class="m-0" style="color: rgb(31,108,163);"><span class="fa fa-book"></span> Slide</h1>
+        </div>
+        <div class="col-sm-6">
+          <ol class="breadcrumb float-sm-right">
+            <li class="breadcrumb-item"><a href="#">Home</a></li>
+            <li class="breadcrumb-item active">Slide</li>
+          </ol>
+        </div>
+      </div>
+    </div>
+  </div>
+
+  <!-- Main content -->
+  <section class="content">
+    <div class="container-fluid">
+      <div class="card card-info">
+        <div class="card-body">
+          <div class="row">
+            <!-- Form to add Munisipiu -->
+            <div class="col-md-3">
+              <div class="card-header">
+                <span class="fa fa-book"> Rejistu Slide</span>
+              </div>
+              <form method="post" enctype="multipart/form-data">
+                {% csrf_token %}
+                <div class="form-group">
+                  {% crispy formslide %}
+                 
+                </div>
+              </form>
+            </div>
+
+            <!-- Table to list Munisipiu -->
+            <div class="col-md-9 table-responsive" style="border-left: 1px solid #ddd;">
+              <table id="example1" class="table table-bordered table-hover">
+                <thead>
+                  <tr>
+                    <th>Id</th>
+                    <th>
+                      <b>Titlu</b>
+                    </th>
+                    <th>
+                        <b>Imajen</b>
+                      </th>
+                  
+                  
+                    <th class="text-right">Asaun</th>
+                   
+                  </tr>
+                </thead>
+                <tbody>
+                    {% for slide in slide %}
+                    <tr>
+                        <td>{{ forloop.counter}}</td>
+                      <td>{{ slide.titlu }}</td>
+                      <td>
+                   
+                        {% if slide.imajen %}
+                        <img src="{{ slide.imajen.url }}" width="40px">
+                      {% else %}
+                        No image available
+                      {% endif %}
+                    </td>
+                    
+                     
+              
+            <td class="text-right">
+              <a class="btn btn-info" href="{% url 'editslide' slide.id %}"><i class="fa fa-edit"></i> edit</a>
+              <a class="btn btn-warning delete-btn" href="#" data-toggle="modal" data-target="#deleteModal" data-id="{{ kategoria.id }}"><i class="fa fa-trash-alt"></i> delete</a>
+            
+            </td>
+                    </tr>
+                  {% endfor %}
+                
+                  
+                  
+                 
+                </tbody>
+              </table>
+           </div>
+        </div>
+  </div>
+
+</div>
+<!-- /.card-body -->
+</div>
+</div>
+<!-- /.container-fluid -->
+</section>
+<!-- /.content -->
+</div>
+<!-- /.content-wrapper -->
+</div>
+
+<div id="deleteModal" class="modal animated rubberBand delete-modal" role="dialog">
+  <div class="modal-dialog modal-dialog-centered">
+    <div class="modal-content">
+      <div class="modal-body text-center">
+        <h6>Ita boot hakarak atu hamos dadus ida  ne'e?</h6>
+        <div class="m-t-20"> 
+          <a href="#" class="btn btn-white" data-dismiss="modal">Lae</a>
+          <form id="deleteForm" method="post" style="display:inline;">
+            {% csrf_token %}
+            <button type="submit" class="btn bg1">Sim</button>
+          </form>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+</div>
+
+
+<script>
+  document.addEventListener("DOMContentLoaded", function() {
+    const deleteModal = document.getElementById('deleteModal');
+    deleteModal.addEventListener('show.bs.modal', function(event) {
+      const button = event.relatedTarget; 
+      const id = button.getAttribute('data-id'); 
+      const form = document.getElementById('deleteForm');
+      form.action = `{% url 'deleteslide' id=0 %}`.replace('0', id);
+    });
+  });
+</script>
+
+  {% endblock %}
\ No newline at end of file
diff --git a/mci/urls.py b/mci/urls.py
index 2feb612..9515466 100644
--- a/mci/urls.py
+++ b/mci/urls.py
@@ -48,9 +48,10 @@ path('painel', views.painel, name='painel'),
     path('deleteprodutu/<int:id>/', views.deleteprodutu, name='deleteprodutu'),
 
   
+    path('slide', views.slide, name='slide'),
+    path('editslide/<int:id>/', views.editslide, name='editslide'),
+    path('deleteslide/<int:id>/', views.deleteslide, name='deleteslide'),
 
-
-  
     
 
 ]
diff --git a/mci/views.py b/mci/views.py
index e17849f..b21315c 100644
--- a/mci/views.py
+++ b/mci/views.py
@@ -11,7 +11,7 @@ from django.contrib.auth import authenticate, login
 from django.contrib.auth.models import User, auth
 from django.contrib.auth.models import User, Group
 from django.contrib.auth.hashers import make_password  # Import make_password
-from .forms import MunisipiuForm,PostuForm,KategoriaForm,SubKategoriaForm,ProdutuForm,UpdateProdutuForm,UtilizadorForm,CustomPasswordChangeForm
+from .forms import *
 from django.shortcuts import render, redirect, get_object_or_404
 from django.contrib.auth.decorators import login_required
 
@@ -471,3 +471,48 @@ def deleteprodutu(request, id):
 
 
 
+
+@login_required
+def slide(request):
+     if request.method == "POST":
+        form = SlideForm(request.POST, request.FILES)
+        if form.is_valid():
+            instance = form.save(commit=False)
+            instance.save()
+        return redirect('slide')
+    # prenxe dados 
+     else:
+        form = SlideForm()
+     slide = Slide.objects.all()
+
+   
+   
+     context = {
+        "slide" : slide,
+         'formslide': form
+        }
+   
+     return render(request, "slide/slide.html", context)
+
+
+@login_required
+def editslide(request, id): 
+    slide = Slide.objects.get(id=id)
+    if request.method == "POST":   
+        print(" edit data")
+  
+        form = SlideForm(request.POST, request.FILES ,instance =slide)  
+        if form.is_valid():  
+            form.save()  
+            return redirect('slide')  
+    else : 
+        form = SlideForm(instance =slide)    
+
+    return render(request, 'slide/editslide.html', {'editslide': editslide,'formslide':form}) 
+
+@login_required
+def deleteslide(request, id):
+    slide = Slide.objects.get(id=id)
+    slide.delete()
+    messages.success(request,"Dadus Apaga  Susessu..!")
+    return redirect('slide')
\ No newline at end of file
-- 
GitLab