From dc11c1ae44b2d12c40097d7d8e4dd4f77401819e Mon Sep 17 00:00:00 2001 From: paras singhal Date: Thu, 20 Jul 2023 13:42:43 +0530 Subject: [PATCH 1/6] Added Account module and made some other changes --- .DS_Store | Bin 6148 -> 6148 bytes workx/.DS_Store | Bin 6148 -> 6148 bytes workx/{user => accounts}/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 171 bytes .../__pycache__/admin.cpython-311.pyc | Bin 0 -> 226 bytes .../accounts/__pycache__/apps.cpython-311.pyc | Bin 0 -> 546 bytes .../accounts/__pycache__/form.cpython-311.pyc | Bin 0 -> 788 bytes .../__pycache__/models.cpython-311.pyc | Bin 0 -> 3922 bytes .../__pycache__/serializers.cpython-311.pyc | Bin 0 -> 1704 bytes .../__pycache__/views.cpython-311.pyc | Bin 0 -> 1549 bytes workx/{user => accounts}/admin.py | 0 workx/{user => accounts}/apps.py | 4 +- workx/accounts/form.py | 7 ++ workx/accounts/migrations/0001_initial.py | 28 +++++++ ...e_income_project_reimbursement_and_more.py | 72 ++++++++++++++++ .../{user => accounts}/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 1616 bytes ...ect_reimbursement_and_more.cpython-311.pyc | Bin 0 -> 3746 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 182 bytes workx/accounts/models.py | 76 +++++++++++++++++ workx/accounts/serializers.py | 19 +++++ workx/{user => accounts}/tests.py | 0 workx/accounts/views.py | 17 ++++ .../authUser/__pycache__/view.cpython-311.pyc | Bin 648 -> 0 bytes workx/authUser/view.py | 8 -- .../__pycache__/__init__.cpython-311.pyc | Bin 160 -> 169 bytes .../client/__pycache__/admin.cpython-311.pyc | Bin 667 -> 676 bytes workx/client/__pycache__/apps.cpython-311.pyc | Bin 531 -> 540 bytes .../client/__pycache__/models.cpython-311.pyc | Bin 3490 -> 3499 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 160 -> 169 bytes .../common/__pycache__/admin.cpython-311.pyc | Bin 579 -> 588 bytes workx/common/__pycache__/apps.cpython-311.pyc | Bin 531 -> 540 bytes .../common/__pycache__/models.cpython-311.pyc | Bin 2752 -> 2761 bytes .../__pycache__/serializers.cpython-311.pyc | Bin 1261 -> 1270 bytes workx/common/migrations/0001_initial.py | 48 +++++++++++ workx/common/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 2222 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 180 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 161 -> 170 bytes .../company/__pycache__/admin.cpython-311.pyc | Bin 368 -> 377 bytes .../company/__pycache__/apps.cpython-311.pyc | Bin 534 -> 543 bytes .../company/__pycache__/form.cpython-311.pyc | Bin 778 -> 787 bytes .../__pycache__/models.cpython-311.pyc | Bin 2764 -> 2773 bytes .../__pycache__/serializers.cpython-311.pyc | Bin 821 -> 830 bytes .../company/__pycache__/views.cpython-311.pyc | Bin 1986 -> 2093 bytes workx/company/migrations/0001_initial.py | 47 +++++++++++ workx/company/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 3084 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 181 bytes workx/company/views.py | 3 +- .../__pycache__/__init__.cpython-311.pyc | Bin 162 -> 171 bytes .../__pycache__/admin.cpython-311.pyc | Bin 474 -> 384 bytes .../employee/__pycache__/apps.cpython-311.pyc | Bin 537 -> 546 bytes .../__pycache__/forms.cpython-311.pyc | Bin 894 -> 903 bytes .../__pycache__/models.cpython-311.pyc | Bin 2126 -> 2325 bytes .../__pycache__/permissions.cpython-311.pyc | Bin 0 -> 2052 bytes .../__pycache__/serializers.cpython-311.pyc | Bin 1040 -> 2253 bytes .../__pycache__/views.cpython-311.pyc | Bin 1933 -> 2016 bytes workx/employee/admin.py | 4 +- workx/employee/migrations/0001_initial.py | 42 ++++++++++ .../migrations/0002_alter_employee_user.py | 21 +++++ workx/employee/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 2640 bytes .../0002_alter_employee_user.cpython-311.pyc | Bin 0 -> 1159 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 182 bytes workx/employee/models.py | 19 +++-- workx/employee/permissions.py | 45 ++++++++++ workx/employee/serializers.py | 23 ++++- workx/employee/views.py | 34 ++++---- workx/google_auth/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 174 bytes .../__pycache__/admin.cpython-311.pyc | Bin 0 -> 229 bytes .../__pycache__/apps.cpython-311.pyc | Bin 0 -> 554 bytes .../__pycache__/models.cpython-311.pyc | Bin 0 -> 226 bytes .../__pycache__/urls.cpython-311.pyc | Bin 0 -> 501 bytes .../__pycache__/views.cpython-311.pyc | Bin 0 -> 2189 bytes workx/google_auth/admin.py | 3 + workx/google_auth/apps.py | 6 ++ workx/google_auth/migrations/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 185 bytes workx/{user => google_auth}/models.py | 2 +- workx/google_auth/tests.py | 3 + workx/google_auth/urls.py | 9 ++ workx/google_auth/views.py | 34 ++++++++ workx/templates/home.html | 12 +++ workx/user/views.py | 3 - .../__pycache__/__init__.cpython-311.pyc | Bin 159 -> 168 bytes .../__pycache__/settings.cpython-311.pyc | Bin 3103 -> 2548 bytes workx/workx/__pycache__/urls.cpython-311.pyc | Bin 1861 -> 2546 bytes workx/workx/__pycache__/wsgi.cpython-311.pyc | Bin 677 -> 686 bytes workx/workx/settings.py | 79 ++++++++---------- workx/workx/urls.py | 23 +++-- 92 files changed, 593 insertions(+), 98 deletions(-) rename workx/{user => accounts}/__init__.py (100%) create mode 100644 workx/accounts/__pycache__/__init__.cpython-311.pyc create mode 100644 workx/accounts/__pycache__/admin.cpython-311.pyc create mode 100644 workx/accounts/__pycache__/apps.cpython-311.pyc create mode 100644 workx/accounts/__pycache__/form.cpython-311.pyc create mode 100644 workx/accounts/__pycache__/models.cpython-311.pyc create mode 100644 workx/accounts/__pycache__/serializers.cpython-311.pyc create mode 100644 workx/accounts/__pycache__/views.cpython-311.pyc rename workx/{user => accounts}/admin.py (100%) rename workx/{user => accounts}/apps.py (62%) create mode 100644 workx/accounts/form.py create mode 100644 workx/accounts/migrations/0001_initial.py create mode 100644 workx/accounts/migrations/0002_client_expense_income_project_reimbursement_and_more.py rename workx/{user => accounts}/migrations/__init__.py (100%) create mode 100644 workx/accounts/migrations/__pycache__/0001_initial.cpython-311.pyc create mode 100644 workx/accounts/migrations/__pycache__/0002_client_expense_income_project_reimbursement_and_more.cpython-311.pyc create mode 100644 workx/accounts/migrations/__pycache__/__init__.cpython-311.pyc create mode 100644 workx/accounts/models.py create mode 100644 workx/accounts/serializers.py rename workx/{user => accounts}/tests.py (100%) create mode 100644 workx/accounts/views.py delete mode 100644 workx/authUser/__pycache__/view.cpython-311.pyc delete mode 100644 workx/authUser/view.py create mode 100644 workx/common/migrations/0001_initial.py create mode 100644 workx/common/migrations/__init__.py create mode 100644 workx/common/migrations/__pycache__/0001_initial.cpython-311.pyc create mode 100644 workx/common/migrations/__pycache__/__init__.cpython-311.pyc create mode 100644 workx/company/migrations/0001_initial.py create mode 100644 workx/company/migrations/__init__.py create mode 100644 workx/company/migrations/__pycache__/0001_initial.cpython-311.pyc create mode 100644 workx/company/migrations/__pycache__/__init__.cpython-311.pyc create mode 100644 workx/employee/__pycache__/permissions.cpython-311.pyc create mode 100644 workx/employee/migrations/0001_initial.py create mode 100644 workx/employee/migrations/0002_alter_employee_user.py create mode 100644 workx/employee/migrations/__init__.py create mode 100644 workx/employee/migrations/__pycache__/0001_initial.cpython-311.pyc create mode 100644 workx/employee/migrations/__pycache__/0002_alter_employee_user.cpython-311.pyc create mode 100644 workx/employee/migrations/__pycache__/__init__.cpython-311.pyc create mode 100644 workx/employee/permissions.py create mode 100644 workx/google_auth/__init__.py create mode 100644 workx/google_auth/__pycache__/__init__.cpython-311.pyc create mode 100644 workx/google_auth/__pycache__/admin.cpython-311.pyc create mode 100644 workx/google_auth/__pycache__/apps.cpython-311.pyc create mode 100644 workx/google_auth/__pycache__/models.cpython-311.pyc create mode 100644 workx/google_auth/__pycache__/urls.cpython-311.pyc create mode 100644 workx/google_auth/__pycache__/views.cpython-311.pyc create mode 100644 workx/google_auth/admin.py create mode 100644 workx/google_auth/apps.py create mode 100644 workx/google_auth/migrations/__init__.py create mode 100644 workx/google_auth/migrations/__pycache__/__init__.cpython-311.pyc rename workx/{user => google_auth}/models.py (52%) create mode 100644 workx/google_auth/tests.py create mode 100644 workx/google_auth/urls.py create mode 100644 workx/google_auth/views.py create mode 100644 workx/templates/home.html delete mode 100644 workx/user/views.py diff --git a/.DS_Store b/.DS_Store index 1758272024c20e2756cf261c48c0fd2cc759dc91..57d034792c11a2b2dd4fc819255f35e4cbf6d146 100644 GIT binary patch delta 27 icmZoMXffFEhlS6`xK>A@+S15CN5RC*WHT4*FChSWRR|*h delta 27 icmZoMXffFEhlS6?q*h0v+S15CN5RC{Y%>?@FChSWga{=7 diff --git a/workx/.DS_Store b/workx/.DS_Store index 0d45dc9b003a6a6814bc1bb6c838bad67b863fed..bacb587e98bc40e79f88999ceabfb97669a7344d 100644 GIT binary patch delta 48 zcmZoMXfc@JFUrBdz`)4BAi%(o$54_~UR;orlb^I%kYhPBBgbYIR%Ygj4L>%sbNuB8 E02HhY%K!iX delta 99 zcmZoMXfc@JFUrNhz`)4BAi%&7%23RZ%21S4URTC**X650|5JC6`}wD diff --git a/workx/user/__init__.py b/workx/accounts/__init__.py similarity index 100% rename from workx/user/__init__.py rename to workx/accounts/__init__.py diff --git a/workx/accounts/__pycache__/__init__.cpython-311.pyc b/workx/accounts/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..76d71cd61662b97c5021f916f21cf04735a034ad GIT binary patch literal 171 zcmZ3^%ge<81k28BO##u5K?DpiLK&agfQ;!3DGb33nv8xc8H$*I{LdiCUv~PT#i>Qb z`sJxfB}JL(`FZ-``9;}aq9Q&iF*!RmFGar`C{&@Jn4FwnnpaY+A0MBYmst`YuUAm{ li^C>2KczG$)vkyYXdKAGVtyd;ftit!@dE>lC}IYR0RVTYDuMt2 literal 0 HcmV?d00001 diff --git a/workx/accounts/__pycache__/admin.cpython-311.pyc b/workx/accounts/__pycache__/admin.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1312480926d8484ee562e56de3ac463472c14544 GIT binary patch literal 226 zcmZ3^%ge<81k28BO|b{kk3k$5V1hC}3jrC^8B!Qh7;_kM8KW2(8B&;n88n$+f)r>n z-eOHm$<563(`35Emy(s3m!7YeoS#=xl$lh-3{)> zo_=_KQ8t*Uh)+sP&Q8rs(Ju!IRp=)sC+C;ul@#lP4c05D{Ka9Do1apelWJGQ0W^yd Yh>K-`#0O?ZM#dWq3Ky`UA~v8307$Sq{r~^~ literal 0 HcmV?d00001 diff --git a/workx/accounts/__pycache__/apps.cpython-311.pyc b/workx/accounts/__pycache__/apps.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27d88f6b76ad22e233624d2974727a4fa1b609ca GIT binary patch literal 546 zcmZutJxjwt7=ABFrS=OEEOc;i%#y4kB2+~Op^J!^<+$dqAvR57K4^97;16&R`VT7N z?7wj67_vIKRqE8qyCfAv-^)Gsy!Sr$T<(3U*DJtd`u0j6`T8!BRg?;{&^Va@1&SOP zAOj(g;1sBI4^(DoDg(UmnTH`!H( zO9l+%w1P2L$By7NjBjG%6qQZNdL(utOt=T`WhRQKJ;Or$;BrsD2w4#7L)MJ~+wxrf z(hK?-jBuBjedbbq$hSuN>TaF*eyI7kfoNX_3MXNU!}w<;t=*Z@OsZSsV=;pIO50K8 zv|7AU7zLuSxm8WDOxWOTS>Dedbr5XuRP-}E<1m*ILJ925et+{d2{q^N7ap!Y#qQTX HrR=hATGxyA literal 0 HcmV?d00001 diff --git a/workx/accounts/__pycache__/form.cpython-311.pyc b/workx/accounts/__pycache__/form.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b78b20fd48535eb95777d101f49d2c4ef632489 GIT binary patch literal 788 zcmZuvJxe4(5UuW>+3{;(6}=NK7Tm;FI)5^51R zieZBsuZuzB)Agk--3lLJyICv7q)fv^OIb`vnPjRR(|$_I({>o!j3K=W7n3?JJl%=n zw$g^=?c;*MvcH>ally0SuVoGovef^bnd1^VaxaXIb*lU`40Zg_>XG{-)6&U#;ZP@L z9BHUXK96wmF}jVPS8jJ^_R6DS8kjUQ2-{7^Op-H2P_M#eOZL<>#k>kg@q7hgNZsSy zo$J9@c%|6eHwjBjoFrRK9fj#ZX6Q#KYNa%})oFZ-bfQPH4UkU5rUqjxR^(MfuSHLn lON5?ajCEoDd31K+*YoJ?If7y1U*US;#($;w+c(Lwf&cV(t_A=A literal 0 HcmV?d00001 diff --git a/workx/accounts/__pycache__/models.cpython-311.pyc b/workx/accounts/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b63266a06d8b1de35b06485cede619962c20478c GIT binary patch literal 3922 zcmcJS&2QUA7QlxR^<|2pE6LrYi5)j}8YnU1-7J!RY|uEiEXQ!_q_yLs>Y{`!P82#6 z=?*D34)!1{dhh}{_^?3s7!*a;L2~dRTlCQXpce|@LEx!CFU?JXbIPIUd!!WEl;E`3 z-Ld#IA8$r)hVS>@_}`*9K%j(b-ztBP6Y>)_IwjJs?EVaudqg1$r;#dGmMHvJM2S#tHQHI|L70$7@c5+|^R%L%6+1vH?rFtAD{+8U!qXZ6 zE#UyI0Z%IlTH*m(f|6P!Iq4~ynd97O)ljHrLM=X1UDJ#WN}(=HmGoPAYL!&YEVp;$ zeRcM?dmfti2qi^MA;nOL(C{kXQB=6cp$8nC20VT#MwIYZq!?9r`0a=roz_&UTTc}j zeaN{3)zWQQqk6@Szs!n_5T%Il>n#cz{pH%y!``r^XG zb(1o4;!C<>F|}go6Q3CDmM3n@E2Z)+sw)#;Lf7qyQn_r@bjzIZPvOkkh8vS*(_*rG zC*>P?rrj1`?Ok-EI%!IoyBl`=&@S4t@G$1aWf|>|Wp_Z9VX2yi^`tC+Q7dWw2*ZuI ziRqgqR#2&?uoSde8pK1wvRHo&MXV#RvimNG`pdtjaAfnmBOJMJ+QR9EaM}@0*Ym9? z7dhM_y~1AVH$qS zKL~**!{e7?G@uiC91Zw7kiT!0UJalgH1OEG@&M$ccAbzSa15j9Z(gBEXyI{r<#8-v zPb#1-9jHC1K&&agrX+yF0XI6QmyIgTh1}SjzHX>x%HD)ufp$EvuB!@w!j417Q}p|X zA%xjAx%xsULNtV7M;L~g;>hN*BaZxQedqNjBepo%5GNgRvR-JWj&0s> zQpfJccFsTfz)npyQd3T9sy>V1WpQQ*JJQw6f<*IW-zA>b(-@ZTU$ zAs`Oc+LJqiJoRe)H#|iG_8iPpPFK}2WEMV8r2v^duSwqo680v8=SthG&6hk<4^m57B2%r6@zW~un8-wrnO096S(FdQTz!7 zMrC#ugd3;rO9;a#>?T*>9wN81w40nV42_m_A5js|tgh6UNvm*|@KR}zJ-nna6u4#c z2M}HMTA}EnXp3}&&1YMKWN>tI-I0!M|Ji=`vMtRuq&Y{Lt6%O9h6u9s(tA#nJnRc9x%fZcF)wly{^&ESVYGI`3r0?tk`O;rj(UGvCO}JDK_V zm1g$jR>8@hY-DpzHdp`f6-46h`V;vLjJ%pi;Bh}~K96{B@QT7Kn7{Vtz~91KH;eK> zeK2bYULH!e^N{%Q-dC9mBNEq2s={W#255xyHOdNpJ$7}SG6mYR(C+3S_7*gsVwwhh z??S1l71c7`ltRmDwWP^wS_!ijvh%+qW@w+~9d72)v_0I2L2gouOP7|eFZNR7vy#mF zHn(#T!(5cTW|*p_uG2Xku!7^jTcjI@8>SBVbHk0AR>`WFeL2XZJt!{1WBvogUJm#y zaL^I;1;|620b8vm~Vk>g*lFElB4$iPb*5e6E+#!`)LyB z+4pJj5e}~6y<&6u?q8o_|MTwPV6U1tb@Rqutw&elARYG#e_iN*-W?pvpl+}5*M71LXh4dPC=jAZ3L=Db&FbvkAmh7p*s~P_4FyF? zy5tuGMfCgx>J%=lZK={Za;j9!?D>K1#3BlNcc1oV=f0WyW@o?Wa%lqNN%WJqC?UV` zr9bT6qcO{#nW4)kU2r>0#%tv$cpDzJ_#9}z`u}!shn3~xfTeOc+uPu zVI)-UwWtK8hKxiY!g@K*Dn_gK(tQMzeIkfUIdKi03WZdRLj!&Vo_M$>HzB;G=HeJz zgXklym4-nYJuE1u3F*w-tM_p zi5DkGbd6;e5`y}Ui-Zj%=Md%*#^gd}jiKfj$TFpoi)!DX$9>zA4 zCfJpudo|LHD|N{+T{XLbEj-jJZVz259cFYloF~`g^Wd3$0AJ&Y6a50{n3U2sd3Zc} yx5?V^<#)$2DKy(8eEZzWubtw;*>E*G>8HOv$h4Lo|Fd(ob?@o8^B{)aj(-3;bY77F literal 0 HcmV?d00001 diff --git a/workx/accounts/__pycache__/views.cpython-311.pyc b/workx/accounts/__pycache__/views.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..92b404fe88666e95b8847c812fc8b79a0f6dc09a GIT binary patch literal 1549 zcmcIkK~EDw6rR~_yW7%sK?@i)F$js>9$3T4MB_;#9^@cF&0aR!-O&_ww=lC6@Sq$# za^QwXPZ)z|e@7urXy&RHZWugqa^7r9X%TKrr{7NB`)1~S@4fD~LLrC5m}Nix83mzV z@S{7@oyGAFvDijF@^OGdY-5ak#a9C*RBbg(*{LvXr==|wWJ1l>LfzKGtewS3LC=t% z{*3$#!He=HICDouXjgobVGl``CRq9H+BH%L4bZsA(Jx=6g3an%h1uCFu*T^FgLIyi^fsb0qm zT*khmV~F77p|v1f%vvSYnAYCaBkOgYE=gE(s;;+0BHvmSrZvm;ym}*wnI)4xy}VBI z;sgm005b(_oPOHI=;p@*V`AT!*fS9uXma3=ApqYzAP;(F`~Cw@>s0*! literal 0 HcmV?d00001 diff --git a/workx/user/admin.py b/workx/accounts/admin.py similarity index 100% rename from workx/user/admin.py rename to workx/accounts/admin.py diff --git a/workx/user/apps.py b/workx/accounts/apps.py similarity index 62% rename from workx/user/apps.py rename to workx/accounts/apps.py index 36cce4c..3e3c765 100644 --- a/workx/user/apps.py +++ b/workx/accounts/apps.py @@ -1,6 +1,6 @@ from django.apps import AppConfig -class UserConfig(AppConfig): +class AccountsConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' - name = 'user' + name = 'accounts' diff --git a/workx/accounts/form.py b/workx/accounts/form.py new file mode 100644 index 0000000..cc8dc5e --- /dev/null +++ b/workx/accounts/form.py @@ -0,0 +1,7 @@ +from django import forms +from .models import Account + +class AccountForm(forms.ModelForm): + class Meta: + model = Account + exclude = () # \ No newline at end of file diff --git a/workx/accounts/migrations/0001_initial.py b/workx/accounts/migrations/0001_initial.py new file mode 100644 index 0000000..d341f2a --- /dev/null +++ b/workx/accounts/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# Generated by Django 4.1.9 on 2023-07-17 23:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Account', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('address', models.CharField(max_length=200)), + ('phone_number', models.CharField(max_length=20)), + ('email', models.EmailField(max_length=254)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('total_revenue', models.DecimalField(decimal_places=2, default=0, max_digits=10)), + ('total_expenses', models.DecimalField(decimal_places=2, default=0, max_digits=10)), + ('total_investments', models.DecimalField(decimal_places=2, default=0, max_digits=10)), + ], + ), + ] diff --git a/workx/accounts/migrations/0002_client_expense_income_project_reimbursement_and_more.py b/workx/accounts/migrations/0002_client_expense_income_project_reimbursement_and_more.py new file mode 100644 index 0000000..edf0fd0 --- /dev/null +++ b/workx/accounts/migrations/0002_client_expense_income_project_reimbursement_and_more.py @@ -0,0 +1,72 @@ +# Generated by Django 4.1.9 on 2023-07-18 11:13 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('common', '0001_initial'), + ('employee', '0002_alter_employee_user'), + ('accounts', '0001_initial'), + ] + + 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)), + ], + ), + migrations.CreateModel( + name='Expense', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('category', models.CharField(choices=[('Food', 'Food'), ('Fuel', 'Fuel'), ('Traveling', 'Traveling'), ('Gifts', 'Gifts')], max_length=100)), + ('title', models.CharField(max_length=100)), + ('bill_number', models.CharField(max_length=100)), + ('date', models.DateField()), + ('reimbursement', models.BooleanField()), + ('bank_account', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='common.bankdetails')), + ('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='employee.employee')), + ], + ), + migrations.CreateModel( + name='Income', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('type', models.CharField(choices=[('Invoice', 'Invoice'), ('Dividend', 'Dividend')], max_length=10)), + ('title', models.CharField(max_length=100)), + ('invoice_number', models.CharField(max_length=100)), + ('date', models.DateField()), + ('client', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='accounts.client')), + ], + ), + migrations.CreateModel( + name='Project', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ], + ), + migrations.CreateModel( + name='Reimbursement', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=100)), + ('rate', models.DecimalField(decimal_places=2, max_digits=10)), + ('quantity', models.PositiveIntegerField()), + ('status', models.CharField(max_length=10)), + ], + ), + migrations.DeleteModel( + name='Account', + ), + migrations.AddField( + model_name='income', + name='project', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='accounts.project'), + ), + ] diff --git a/workx/user/migrations/__init__.py b/workx/accounts/migrations/__init__.py similarity index 100% rename from workx/user/migrations/__init__.py rename to workx/accounts/migrations/__init__.py diff --git a/workx/accounts/migrations/__pycache__/0001_initial.cpython-311.pyc b/workx/accounts/migrations/__pycache__/0001_initial.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d68dcb3a0785bf501c53696a446931b8e938f72a GIT binary patch literal 1616 zcma)6J#5=X6h2b_vZRoXV@0Z4Rkk5iNnqIxVnDSL*o`ZrMIF?M(*hdGo^)rKHbtr= z<)2O-I&=)W)T1XCg*{{`;L)R};skIIZVJ#zn*wLbQ1p(JR5bRGBk%FOyYJrLy~p3< z@hD*9(O-X}X+Hpeb73$7ede;nnBM>bNYFq-s0a zy@QEggGsm;H?dqdx^WFgaxo))<1DqO@)dtZT}*6SF+<%Ugf)P+hMrP)P(KqISz8(gQMrCQBs={6NrRHovW%XvSI!Io_(H4{S{BRbMF z)dn>8m2JFFBNjGQsHs0;8r#8U)v&Ol!v>~)PP>TN$_uPS;GUvky>4&P5Jbqtmesvr zdo{#JI0p+xB*qI`w!=%eWMDrnHtXz-Pl!_4jQ)&8)}M)cd*{VT^^Xp zNta(z-bWJ%*O;T4($ruLTQr3525f1z=M7Tps%_DPrv&dcv2HPt?8&OWgDty(b=%5| zW`esC+)%NGtS9*d4J&SpibA7`!YaO{VaCT4<;ND(c-%}1sk&;j%+MIZOgF-MO~sbU zyNHfFc2l{^d&T4hO=F*{^(B_%GPgk^k2j&|vC%JhGCV%M%<{jkHn1ngmc97;K%GOiZRS>Cmo4oTpm*t3;lExk%+Aiv zDg7vBn)@d2QI~MWddQmWVEDXBj2^7?{K8o9;Okx(L^8ibo$yB;IsHn$MUr=3>^R9g zXa0+6Qc;L*lBCs6T29g;lHHM$B$YoLcT)M6&q%7+P8FS0kw~Ah!(`&#VcD6ucjhA# zrS?S0nJ5wIVMor8?A+0~lbt(zO0tXX?4pxhB+^nxzD?414|7iX?n{fL7ux9sC%r(V zQb+!fWbPmCIGOwBV&6VKx+UUPg_rRe4s)@yjC&g{ yc?I{#{FI6OPiKA0NY5t-LN5q}JOQ6veS5)iA=m>~$&08XO~2+FZ?4&O?fwfN7rW{J literal 0 HcmV?d00001 diff --git a/workx/accounts/migrations/__pycache__/0002_client_expense_income_project_reimbursement_and_more.cpython-311.pyc b/workx/accounts/migrations/__pycache__/0002_client_expense_income_project_reimbursement_and_more.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..297c24fa7f9be9ef6329fdfc491e951fe0bc5611 GIT binary patch literal 3746 zcmb_f&2!tv6$e2Q{17FRj4T8I3 z3O5B5{;Pl@IJ6eb5w^mD@I8F~Q;8z+u277=;LW1Qk`1kHsg7nEHj^4A!n%FC)*I{n zN%tDBCP3pi0v0MEBviyY`0#D05*7s4RQInT4#nUF_k>mn+gFf!*3XgeaW(Ay$&{=`^~9D$Ye7OY0!0jvMV zt{Hm=d&k)e;~rW;r4Y~sh~4{#@^8W$l?ih6P_}t>Ou5KB(s4|baA`5zlMO$ z$l7~*{gY_QvvQI>HGMF$+n4s&)_SZmh)PghXINq-D67RVR9UHJHX5eEQnRzOzfv?q zb2L>4c^o&Iy4l8sZ%}x|R1O(VN;TxPR7f#cB^st%hyuG_+aN(HtGKzN)6{iqUFRvBe??EU|tIYmI8l zvT=j2H&s=Qhe{8N&8!b;i3<^SR86^ZIW~)b-BJxerOhPUQJofqVA0QjVyG7y z&G$dn^i6H1_nhcSieXU6k8>~9{;a4M(A&k+EUtKBMPW%rfnhBj1D{e9u&nd6;4Oq9 z>;OVdgHZ7c1nVn%3AV!ZTKp(ysZX@}BBb68o+>O+exO=Cb_o{iv#C!^Q^%^|w~{wZ z2y5NA1*s{aHPxt_Ohi={_reDE5Ed&h-YqXKeaccxK1Tk;!8@i6`(_<48<2&#XQyw; zi?-(yi!UP7vtl-J?^^Sn@CrN?e%_qn^!m@}_0M>F33^dqcbe?!1V=2@ilAXoOKtD+hRptW$R*|zv$?Gb)2vMGT1c<*&1 zkwM870`mAXcR)y-|67vA&vi5MzcZ)F@Z^(qIy|`(`RM|wD8#VHu-zH9>99@GPB$}5 ziTzYz+7B0DhFn3El zK))3K#6{=+EWY&Uu17(V`AY0&&XC;X(+QfJd|o5Dg-&jP<`zi$*WJuHGBW#2q9e0A zWioQTGjg4dTqo(pHx|;7r>Hzd($n3{2pRkE*#sT?uroGC$L2`-YBzJ9j9z{=L`N_0 z-2d^9^x6u&cAsAR3#mOKqZ^&k4LZ6(((P^roG)?bOFKh9%5;92&VNDYD@3tK!R{1n zTHx@xnFL2E#ZdyX%ZZyiVF1XLWpb-VE+g`_O=PDdJ5+W^y7fQ67$xIZo_$2euk6@l zyxbWt)A2G%FC7hrO!CuDKce~R=j%VT>D)~^cZbe>Nxm{j-t6Q}nm0+h>GsF?ijsUq zKz2EChhDGfIB`E=N{t*NrG7Cjz~(ehy1(verFyh75qy+~f=k-XX|EYO0V zMS#T=$71TaMe+-s`~uDM4!2L@t55LN1KH)o9eiW;Zdl}fKz2ECB_VN^Z?=4Q_t@HFOwjE3KUTLjTKbrlZqm}{RIJruJsw`JXN=W`#Js_zd(O%{SKP^pCelb;)X+^ o5O^Od65-)ic?A)Yt?1xg3TI{*Lx literal 0 HcmV?d00001 diff --git a/workx/accounts/migrations/__pycache__/__init__.cpython-311.pyc b/workx/accounts/migrations/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..504cef4d1ccb9c94881afa63cfd03939f6e1c5c9 GIT binary patch literal 182 zcmZ3^%ge<81k28BO##u5K?DpiLK&agfQ;!3DGb33nv8xc8H$*I{LdiCU!MA*#i>Qb z`sJxfB}JL(`FZ-``9;}aq9Q&iF*!RmFGar`C{&@Jn4FwnnpaY+pPQLplvt9PpI59O wAD@|*SrQ+wS5Wzj!zMRBr8Fniu80+AGRW>?ejxFInURt40|SgGVg`x<0My1V`2YX_ literal 0 HcmV?d00001 diff --git a/workx/accounts/models.py b/workx/accounts/models.py new file mode 100644 index 0000000..083b2ae --- /dev/null +++ b/workx/accounts/models.py @@ -0,0 +1,76 @@ +from django.db import models + +# Create your models here. +from employee.models import Employee +from common.models import BankDetails + +class Client(models.Model): + name = models.CharField(max_length=100) + # Other fields for client information + + def __str__(self): + return self.name + + +class Project(models.Model): + name = models.CharField(max_length=100) + # Other fields for project information + + def __str__(self): + return self.name + + +class Income(models.Model): + TYPE_CHOICES = [ + ('Invoice', 'Invoice'), + ('Dividend', 'Dividend'), + ] + + type = models.CharField(max_length=10, choices=TYPE_CHOICES) + title = models.CharField(max_length=100) + invoice_number = models.CharField(max_length=100) + date = models.DateField() + client = models.ForeignKey(Client, on_delete=models.CASCADE) + project = models.ForeignKey(Project, on_delete=models.CASCADE) + # Other fields specific to income + + def __str__(self): + return self.title + + +class Expense(models.Model): + CATEGORY_CHOICES = [ + ('Food', 'Food'), + ('Fuel', 'Fuel'), + ('Traveling', 'Traveling'), + ('Gifts', 'Gifts'), + # Other expense categories + ] + + category = models.CharField(max_length=100, choices=CATEGORY_CHOICES) + title = models.CharField(max_length=100) + bill_number = models.CharField(max_length=100) + date = models.DateField() + employee = models.ForeignKey(Employee, on_delete=models.CASCADE) + bank_account = models.ForeignKey(BankDetails, on_delete=models.CASCADE) + reimbursement = models.BooleanField() + # Other fields specific to expenses + + def __str__(self): + return self.title + + +class Reimbursement(models.Model): + STATUS_CHOICES=[ + ('Paid','Paid'), + ('Due', 'Due'), + ('Overdue', 'Overdue'), + ] + title = models.CharField(max_length=100) + rate = models.DecimalField(max_digits=10, decimal_places=2) + quantity = models.PositiveIntegerField() + status = models.CharField(max_length=10, choices=STATUS_CHOICES) # Paid, Due, Overdue + # Other fields specific to reimbursements + + def __str__(self): + return self.title diff --git a/workx/accounts/serializers.py b/workx/accounts/serializers.py new file mode 100644 index 0000000..973f8a8 --- /dev/null +++ b/workx/accounts/serializers.py @@ -0,0 +1,19 @@ +from rest_framework import serializers +from .models import Income, Expense, Reimbursement + +class IncomeSerializer(serializers.ModelSerializer): + class Meta: + model = Income + fields = '__all__' + + +class ExpenseSerializer(serializers.ModelSerializer): + class Meta: + model = Expense + fields = '__all__' + + +class ReimbursementSerializer(serializers.ModelSerializer): + class Meta: + model = Reimbursement + fields = '__all__' diff --git a/workx/user/tests.py b/workx/accounts/tests.py similarity index 100% rename from workx/user/tests.py rename to workx/accounts/tests.py diff --git a/workx/accounts/views.py b/workx/accounts/views.py new file mode 100644 index 0000000..c504766 --- /dev/null +++ b/workx/accounts/views.py @@ -0,0 +1,17 @@ +from rest_framework import viewsets +from .models import Income, Expense, Reimbursement +from .serializers import IncomeSerializer, ExpenseSerializer, ReimbursementSerializer + +class IncomeViewSet(viewsets.ModelViewSet): + queryset = Income.objects.all() + serializer_class = IncomeSerializer + + +class ExpenseViewSet(viewsets.ModelViewSet): + queryset = Expense.objects.all() + serializer_class = ExpenseSerializer + + +class ReimbursementViewSet(viewsets.ModelViewSet): + queryset = Reimbursement.objects.all() + serializer_class = ReimbursementSerializer diff --git a/workx/authUser/__pycache__/view.cpython-311.pyc b/workx/authUser/__pycache__/view.cpython-311.pyc deleted file mode 100644 index 13d1b91dc5c032d41ed3a2aeccddf589b4a0cdc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 648 zcmZuvF>4z!6qbDQ)%21!(6wNd(7{l0?bM~@2W0S)mIM=1Jm)p_Ggr z0v+-X5<>pW1u~R_Or5$Jyk+Xs5u1kgA$@#$`lR3V47WP@)N$LEA-1j_mHtRMZ zYD8C<`gwrxu>@m{D=Tkbh3^cY38yf!m?gRh_cVS8_h7UiPKkXARcTYF36C~j delta 18 ZcmZ3)TEN4%=G*`{qX#vY%oy~pOl!Kotl?2`3&QE0J19* AyZ`_I delta 39 vcmZ3&I-7OFMn-7^{m|mnqGJ8>)TEN4%=G*`{qX#vZ2j=mq=?B^8P5X%8Waxa diff --git a/workx/client/__pycache__/apps.cpython-311.pyc b/workx/client/__pycache__/apps.cpython-311.pyc index 9ae5302c4f85905becea23a87f4d2885dddbce42..7ac63217b193ae06698842e6bfa77da8fc17e821 100644 GIT binary patch delta 30 lcmbQtGKXb@3?rk(WLZXWp8TThiuk0&~j delta 18 ZcmZ3gdQx=5BPJCq{m|mnqGJ8>)TEN4%=G*`{qX#vY%oy~pOl!Kotl@j`7hI9b^zkN B6Q%$F delta 40 vcmX>pdO&o;BPMA>{m|mnqGJ8>)TEN4%=G*`{qX#vZ2j=mq=?OI%!knO diff --git a/workx/common/__pycache__/serializers.cpython-311.pyc b/workx/common/__pycache__/serializers.cpython-311.pyc index ded7e156cdc3f5b13555841501fcda240ec47976..35af4f250d30bfeecdcd8d377196a5d2a46c56fe 100644 GIT binary patch delta 49 zcmaFM`HgeK4n`Gw{m|mnqGJ8>)TEN4%=G*`{qX#vY%oy~pOl!Kotl@j`7)yvGXUnE B66yc| delta 40 vcmeyy`Id9T4n}D+{m|mnqGJ8>)TEN4%=G*`{qX#vZ2j=mq=?OT7^Rp2L@^H) diff --git a/workx/common/migrations/0001_initial.py b/workx/common/migrations/0001_initial.py new file mode 100644 index 0000000..fb012b1 --- /dev/null +++ b/workx/common/migrations/0001_initial.py @@ -0,0 +1,48 @@ +# Generated by Django 4.1.9 on 2023-07-17 22:36 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Address', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('address_line_1', models.CharField(max_length=200)), + ('address_line_2', models.CharField(blank=True, max_length=200)), + ('city', models.CharField(max_length=50)), + ('state', models.CharField(max_length=50)), + ('zip_code', models.CharField(max_length=10)), + ('country', models.CharField(max_length=50)), + ], + options={ + 'db_table': 'address', + }, + ), + migrations.CreateModel( + name='BankDetails', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('beneficiary_name', models.CharField(max_length=50)), + ('bank_name', models.CharField(max_length=50)), + ('account_number', models.CharField(max_length=20)), + ('ifsc_code', models.CharField(max_length=20)), + ('branch_name', models.CharField(max_length=50)), + ('upi_id', models.CharField(blank=True, max_length=50)), + ], + ), + migrations.CreateModel( + name='NatureOfBusiness', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=50)), + ], + ), + ] diff --git a/workx/common/migrations/__init__.py b/workx/common/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/workx/common/migrations/__pycache__/0001_initial.cpython-311.pyc b/workx/common/migrations/__pycache__/0001_initial.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7fe61a98f6071d528c0ec8ba192b5a0413742276 GIT binary patch literal 2222 zcmb7FJy07*6uvwCOCU}JEcAmc=OBr&jrfT@5QMQM0^=lxOn&f;nwyh$B@U#Ma(A-9 z6-A1a?xK>4OvV&6nW6NgqFl{fq1j2{nN)P=fyz~OPYAG35`3q9db{s?`+j!cyWe_y zy$pGt{`m*^)WtA=(@FbroG~XU!u-kr2CyZj%x2j#m*rT7W0o1f{mcLxWH)SWr9HyE zI-g~2!2Ugxa2!){g2UdjTvR1pt|%IImMZ|3w0v8W{`Z|tPX6MkNyubbz+^eVW^F|# zYv&l~*l@NL00(Sj#kJu+Uts|Y?7*?_+_Mum$Y?zU4!A6&r@aE)`<^|PV8}SfcsnpG zLHYKGC$GpjNA+}|db{l8zXqnS1H*UOC(wcEVyox^{oo^+-5+>A^+fY>t_D9KS2zCO zDhOT!Gt_|zb%`*14NRm1(N|$fJ~91bmU5s zvZ?X}i|u(?-#(tAtV7d@W$b<-SH(Oj)nnQzuq$7wDZ09i-5@9GQmzEC>&$4vhV7OY z&Vmd}K*O#|wN>iAG%>IUbxAI1n9o547UaB4qp|Rw91*tz$XfC^>~2V^vDG* zZ~1_IIaN~f>n*UeR+U8=BseufU}}_N`4vg8sc^NBu4yC(nr6vX5ly@GRoLXa*u^_-=j87`}VhkA_o?;gm6)Li{{&5k>FRmyGD0Lk>mf8qql;I*0g_ z+2V-%Zj#O96IJmMc*4qrt=x*?(e&2}PJ{WmDg(6Fh$dVCRLi}lIY~;;_lhPbtkwwJTx;nhUbIm>)=dU}j`w{J;PsikN|703{SH#{d8T literal 0 HcmV?d00001 diff --git a/workx/company/__pycache__/__init__.cpython-311.pyc b/workx/company/__pycache__/__init__.cpython-311.pyc index 69c81a24d4d65bb5e7478035ef871cdb491076f5..c34bd8fa9816609d7ac3296507392b63200c6808 100644 GIT binary patch delta 27 icmZ3;xQcOt1EcLkM{%C~qU?(Jq{QUx)V!35(QW{ItqE=b delta 18 ZcmZ3*xR7yz1Ea}AM{(xVq=<)W<~&=mI_Y* delta 22 dcmbQt*2T6Vhmp}>axSAdb81q=<_V0=i~vgs26_Mh diff --git a/workx/company/__pycache__/models.cpython-311.pyc b/workx/company/__pycache__/models.cpython-311.pyc index 4c7c09fe97f32d3f5ca89ce5bde8551fb1dec139..bce67e705e480bddf727c797b91b5104134f2573 100644 GIT binary patch delta 49 zcmX>jdR2787Zw$3{m|mnqGJ8>)TEN4%=G*`{qX#vY%oy~pOl!Kotl@jnV)qpD*)#g B65s#; delta 40 vcmcaAdPa1^7ZzzF{m|mnqGJ8>)TEN4%=G*`{qX#vZ2j=mq=?NDtb17jL=g`Q diff --git a/workx/company/__pycache__/serializers.cpython-311.pyc b/workx/company/__pycache__/serializers.cpython-311.pyc index aad0d6c4319f11926188f53713e0f28f0d0aad16..d410f516207926b7cb8826a6f172638dd9dbbca1 100644 GIT binary patch delta 49 zcmdnWwvTN?BcqCgerR!OQL%n`YEns2W_o^}et3RSHkhc0PfASAPR&c%Jcn^6BLK%) B5`+K% delta 40 vcmdnTwv}x|BcrsrerR!OQL%n`YEns2W_o^}et3RSwtjeOQpDz^j58SlD)cRS5J8dBR*GOLVi5!_d#T%Wh z9$^mG8zn4&_E9I~3+$o!Zuia9w3a!~BK}HOQ3b06r6mRb>?c=bVF03=sJ!U9>K`{o3qd?Ru|zqi0N|p;dSD zd`w-dd+B@Y^6s#%6(@`fB~iGfrIAWC)a~BG#E0-_51^I2<|R!3r(@tOz*}v> zm*f>7C~Wls;7F&G_Q{3b@io&YS9>R|^uB#_euB;%k^kZC`r+xhUr78ufz7r21=RPh ASpWb4 delta 595 zcmZvYF-sjm5XX1!yxqHZcX=;Qf=_ux5|Y4)jVUbTDM&yIi3mcFYZ8;);K`nbU6WuM zA(+BS9}DIiL_)B#79oBGtNR9a22uozkeL%=ku2uAz3@UEax>P2Es0!Z|>b+H){nL3^bTK?hB0S!wj`$ zVA^yDlj31+5t;-+Ajz}{w+VxYo9U+GCW6N>=!#%VjG(lT#qJ__2;4P!w-@3~)w0SI zE4uig%=1@z#ac5=gSv>X%uti*5a@Mkkgc6}eg4Ru@hqt;NLxUp#s2d7ozWj8{QQqv8~gz))qT(a diff --git a/workx/company/migrations/0001_initial.py b/workx/company/migrations/0001_initial.py new file mode 100644 index 0000000..793e574 --- /dev/null +++ b/workx/company/migrations/0001_initial.py @@ -0,0 +1,47 @@ +# Generated by Django 4.1.9 on 2023-07-19 21:26 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('common', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Company', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('legal_name', models.CharField(max_length=256)), + ('trade_name', models.CharField(max_length=256)), + ('cin', models.CharField(max_length=64)), + ('cin_proof', models.FileField(null=True, upload_to='company_proofs/')), + ('gstin', models.CharField(max_length=16)), + ('gstin_proof', models.FileField(null=True, upload_to='company_proofs/')), + ('date_of_incorporation', models.DateField()), + ('date_of_incorporation_proof', models.FileField(null=True, upload_to='company_proofs/')), + ('pan', models.CharField(max_length=16)), + ('pan_proof', models.FileField(null=True, upload_to='company_proofs/')), + ('iec', models.CharField(max_length=16)), + ('iec_proof', models.FileField(null=True, upload_to='company_proofs/')), + ('msme_code', models.CharField(max_length=64)), + ('msme_proof', models.FileField(null=True, upload_to='company_proofs/')), + ('provident_fund_code_number', models.CharField(max_length=32)), + ('provident_fund_code_number_proof', models.FileField(null=True, upload_to='company_proofs/')), + ('se_registration_number', models.CharField(max_length=32)), + ('se_registration_number_proof', models.FileField(null=True, upload_to='company_proofs/')), + ('phone_number', models.CharField(max_length=13)), + ('support_email', models.EmailField(max_length=254, null=True, unique=True)), + ('address', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='common.address')), + ('nature_of_business', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='common.natureofbusiness')), + ], + options={ + 'db_table': 'company', + }, + ), + ] diff --git a/workx/company/migrations/__init__.py b/workx/company/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/workx/company/migrations/__pycache__/0001_initial.cpython-311.pyc b/workx/company/migrations/__pycache__/0001_initial.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7b280b3d6057606ed6d6e49a54540f4c9c98de0 GIT binary patch literal 3084 zcmbtWO>o;p6qe+~i5(}ELKBBH*iI;I>`=?04gH}dDfxk>t@&x26qi9GdpC|!Su&Cx z`op2aaNx*|9D537$ic@Pd*F}*htH*X zefw75_4bB2XahI4(U&2P`^6PntnZ*hd9LRT#3)|B_Sv9t}N(*T!+BD%b~zm z9O}UQTFZvp3~<~J@HAVl6A9P2Waq9cCIuEQX+=w|Xr^JaV97*Sx3dLb*L%f%;n}Z% z@hykB9FMr1fcRVh2}RzW6?d)$TP7%g+@7wr?!6u!@u(98x4Jevz!P|yZAC!co+hle z*-&UJyvc(OJk16=J#FYj_UZH6HVb9cv3I-Ud>l zEu_(XNMi^1^s1*5X>BJu3faVOz4rH$277$W)9c;S<8j~Gp_a7Pwa1BjoYdmb@vZR} z@RI)nFZCi`F^VS8>l(jx;_oxTsqRNrgC$1+!E#4Hn5{GLwpCXcbM> zS=X#tDyzm_CTM7Z376)Q9W0_&E2dJguv)>0^^`5Gq*`~C+xRXE+1LUz?H*>4b!_EL z8!Lud!Yr)gqN;oRE(awb$wPHg?)X%iwT_QPp)8s+M(AMM}kFokhC>rf$GlkH|kvRWPlx*{q4|$bsFy zO#o(NAs{VT!vz)s;>)3uUBXHMiYhF`Wj#OHFuc|^gpG=_QZ$R(8SZqbXB~{aRe}}$g!0LyW z6?MmhRYUu%idmP6kcDmgUSBf>(!LDJo?ZxifV%@%FcTom{f1hpT3$T!Ra-M$%cyVJ z95Pp01FRe6m5Q3zVHSS}lL6Q{Hzk5A8rG4`y3De7MP-vOv2Mjn5k+BPMS&Zus$<|I zit<@i)m~szLAZ23w&mV}tY_BC%B${OXSuf#i@c*1FG9X9xRbHa?5b+{ z?1H9apPhsJXtLpXH&#BsU|Lu!8kZrlgJ?}PiY60K9@gXr19paWUz@+KWN%!#!op@5 z`&aGv+%uS%`|XN+15Sf2e~$ANODmd&ylh&xJ#t6MtA*R(yZkwH-I4v!$ba6~@?TG3 zx_sAiFJX_kmBs!U?zIPdzbAeD58iDAxzMYPfN(hY;7TLRh2md_X?LtH4L^|vNHq1$ zI*q2bJ9dteoI(tXL~SQ()2L0vN?m$|#N~~38ke_ElK8X}pQiC?BF_BFz#thK-w4v7 z@!C6N=(IC*nhu>N;+eWMLSpHS6&g#|=E&R)5?gX&OEk7b#O1m)M21rv$LMgXmM6n! zo#C@|_$(36)uk9oWF7`-B2z~B2PbBr}Fg98$`}Ja+b13+pOqJ+V ziHJsBN|K4U9=%B?-g<12iA85(kxncU@p4^~$>hb_Af3GUxI&g!$)x5?YIIT~;#ysb zlhMhCgLHIq`y(Z#9*7^4Zc#VG`JoV^vk3x_1q0o?r4)--qang~EOOUPueT~zxQ1~ea>P{wCAAY(d13PUi1CZpdjgTMmTiD7CJH;D2v-r{i0Ey&5QOilIEWSe+jdon+xgo?F(XmM&$v3_}KQb|!} zdVZdMcz#hfn5c+PN=(j9%}bf=#Hh^012l^fh>JZZ=QGNQs$F1EMMfXk7#P_m?_rc; H0XY-^F0(Fb delta 278 zcmZo*zQxSDoR^o20SFSjN>bKMp1_Mm=fPuAz>pFw*B?jRMUKbhUuQ148V35CoB;)Jq;s%-t E0EnwY0{{R3 diff --git a/workx/employee/__pycache__/apps.cpython-311.pyc b/workx/employee/__pycache__/apps.cpython-311.pyc index 0377123a90c7448c09082933349f260d049881eb..5dd947c4cc8e75c5d0b7e5426daaf35527f468fc 100644 GIT binary patch delta 30 lcmbQqvWR7a0wbfi_@% diff --git a/workx/employee/__pycache__/forms.cpython-311.pyc b/workx/employee/__pycache__/forms.cpython-311.pyc index 4ae7ff1cbbee58fa5af2b2f6293abe14e47437d2..350bae6a621bccc8b976d505244d76d23168d293 100644 GIT binary patch delta 49 zcmeyz*3Q1+7^8}{erR!OQL%n`YEns2W_o^}et3RSHkhc0PfASAPR&c%{E%@jBLLTu B6CeNp delta 40 vcmZo?|HroB7^Ae2erR!OQL%n`YEns2W_o^}et3RSwtjeOQpDz0jB^7fK6yCMhzw0$gJGLxlkq`5#n_M6U?h*bZ*Wiacysgz9!S zz~u{?c_U9NT3NSwWR?&{Z5t5MRhzO>+lcq+I`OB7PEesB5}^?Oqg_N0@UiYlYJ__5aStzd5#dJUG1z|!uipxZ4CqTJpz*MW80el`CW%Jh;{bRMuipxT9_DTQKYBO*jbsn{ z2Z^TxVvZBWXiwA}+n#4J+2IbOaOQ%cO07Ig4 z$*k)7&d1ONw!{tXj;d30rLv0bs+#4SRl3s$i#r4b?%2UYgMJT7$}8oH&69+d%7&(^ z>$+B=z&lTOse8Gw1DTHR-Wd=Ng?qvpeEs$a@(9LV^dsS?AUGCK-iX6!Xt~VnihuT) zuC=>QfZI0Jmu=iO{AN0bM7MLdX|ck}E0&r2)?zn2aYrp`r5n^Fx!W*xC)bHl&QG4v z^$i|TRlCAe^=_&Y%F*^r2DID9K-7fRp}`+=PXBp$w)4Lze$R=X-$O5y>@glyy+f)h zkE<#uuj&-~301vW)pQKKsxk}#@B7B2OBRTWWvUZ~dB!7ivsdP3^YdJ)f+IYB(PFf` zVtz$8c=XErlB!%?T;vjitK+e`RgL*ukHS`l$K&yN19IP+<;isjg=NBhP@LpRYk9d` zDtE_;^;OHHs#!IPlrby_Jfis}gU8maqFO0ez)m9X->R=PSgMp55|k&3P-}o&Ua?_F zohJetf)6{10#nBmsMtOQ_fzZsTJq55q$>|?OV7g3lP?R7e7z}OcjfD~{NM5kTsraN zwfe2b_kS!o@RwbSvP*Ne(1%l6Q60uXWaNqZLXC$ zhq}+zFZXwHm{XZSOM>|5dArNCJ&uPlX8K zA5I}mLXb#dmVoU$;~+5Y`{Bz{Aok@arjeJQxUxS#L4~N`e+hD!9fx&4>HO=)`@fsO zn$pP`B&Cg|0&=E5^I*e?9`XEBvJo~6(`*FADHLdtWl>C_KwWGC#alYz**ymap<{mz z;$1o&N6sAIX3x$z@>Elva^aVT!`v%;wWv|a#(9jaY37PGN{a2YELnzOnWKJP z@VM?L$FVlBWSLN0ilbV!vf4p;$s76_|A&3%d*|Kn!<*=|Uk+y2G}y*a+dqTY4T_@J z5>7b#pO!G{yzglVpE&!UU8!FLJ{=UBw;tSkh4Zi9E}oJ^h{r*(Ir(7v70$nY&!QKx Fe*wE`B(MMg literal 2126 zcmb7F%}*Og6yNo?*T&cwC`m{|lon(T7~vGPQbk38L~Y4dDx|4=SuLIcO!kA!u9G;5 zD!1x^Lk?7m#38E0p-LTnj(6X_nR)ZR z=KY?3?&*;P7hUpNUy^oThyfY}j-6*q!&!VA#&3%vd)$2_ShNX7m`Do)}{LLt$?Lj{q?bdylcDuj6IhHBiKr?y(v zEFPaFgi*_?94YrcfvJOOnC=KvD2qfWhe84kZ$tt?BJPD=h~OB!{wPP$^>U0vz;KjH z^K?^XwoVPZGX)YaMK0;;BSoXen!R2*J_cLJqtSybkR9QPumN9xfGSZ2|09N~Q&17H zsJ3e1fsw;f@s35AReVTSY*t+}jpALC-7DUuD_<8M0{5s$^-ayJQ(E++pV+MPxT07# zQMx@dx9C*jCBDb)1@(fMq{rhfj8j|n(Okq&)d%j`y@e-YZv%OT8^bkn{7A}w;DBuiFEF2YL=Uq6#l0cRblr^JzzeYP493V4k8VZ1v+7!yY zrfD4l>m97e4!Qvn9)L)7t!i65LujR{tD3T@sTFD!L^cdUr*MV!=;7);U{2%eIdmbw z*)a;A3qOXz)sTEBj-a8{Dzj{_;(1b2k64C|`rz|R88iAg8w3}?Xb7b)0s$EH4L&P6 zz1QK{o&QPpIVW-5t6aHok@bNX!^E?GB&iSvxzj9dolI z%^Oa(*vb~&Y_aiadth|?D|cYDNt}UFYoO!~lp6B+i}`EY({BD+lR5dRR({IOPc;_X znJZhXZsy8v{MYH}KS~tz&a@PIj`DopiI4U@kX?j*T^?R<7jcO5l}r zd27^_E;svL%{tOdOPX<|nZ{f@KZe%EnyFV0e*ebF%dNcZ=H#e+d0Ez`xhI%jel=`YxPokI?acPkNuWC!#;vDSoPKq zK=#9;D7J-R=k(JSCYW8rR>Pv+0HZ E5Aj>^=>Px# diff --git a/workx/employee/__pycache__/permissions.cpython-311.pyc b/workx/employee/__pycache__/permissions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..032326de3857be78338a5fc9f846d2b6624f3804 GIT binary patch literal 2052 zcma)+%}*Og6u@V^>o06?VQN=(M;Ud{l1eLmSm`Sj)y<}z` zNaaKvIQS4%94f(qN*tmlQFH1kz4cF6MLt*~RYK}1H&^t4a_XBgUfYnS9q&BP*L!c~ zz2D5U-rgPrWjXVT_0u_N| zs~^5@QJ%8wi)=1rRJY# zAg_0*;n9Ob^?^%2R%!!N)rER&`0%O|n{;By=L;_ve~&v;Nhh2<`6D_|i-HCY4z)!+ zHn=;zJKfM=^yK8^DAZS-=3(&h!{8)(7QLqZhOcRFWUdU%g7CKr)h(?Y9>-y54^gy& zi6jsMhZ^xf)HQLj70KD98%r)HU6{y(D@>j$Go6^&E)0-lxBUPyaFUkTxL8P7@-hXg zuqo)dz_U*}dwIB0&GJaE=)|+G?4DZGiFVo#b?$@cEuX{-$MU5z!aGZfxsnQs;St(= zG9$F5TbVh-FMLI6uUUl2&53Y&b}nfyCNm4)Tu(E(Cnh(*B)&o~WsB7CvXC5+ac8|! z$WB*!gS`J~ej~jaSRZ;18u<=ptaM?VG0PG0mby%5WZ2giZ5)Ia`niGfj1t z7l;jmO7n0RWJ?Me2|f;D+x;~>VeiETIxm{~Qfn2eTmBEAqw|(^uRv!z--G`G^-J*Z zZ|@mbXc7J5d#ZXCGes5|*n@7?qn2*yC2 zCqQf?mG4?~O1%K;@;7`a9NV8fNH`$_zUEjD>Wf!x71R_P0Zk@tbR_9x*_GlWsP9Np zTqfzPXzEL?lo1dS2JfeNmjMRyEmW69(E!)SBDBEO)e@1fvz)f`p~z64&ur;!;HxHK zGt2-FGV}ab5b(5NTt}Ze-CslZ90A>tjf4$S3W_MwA&xX$3QmAnik0J;1Sh+8nDuc# z%Ap`#;p#+z6bcFo2tlcl=%GMV&dJhQBT>N>*Ew>kRJ=Fq*pBVcFrNK(=DnGDZ{GX% z`KPh55d!V^KYyV=YJ~ialk;Y@2dyVC*e8@wB_N^VDGH9&Kn*od3w2M2xkmNC2u;rn zEzgpABe27Smk39^5rwE^l~D6Bp%zoNM$Zi#fW;$t;^rmgDjQZM{$te`9l1l?(HFSM zRm5n-crhOoA2J@fs+f8wU)p|`Rr19ky3^5!$(xjN7WIf;D7ar0_N{OyC_i9K=pU2= z29nX9BZSr7ScrX$QEyLLAHiUsFybkcc&bX6b^wy2wwe%62bs|)GvzfExTbob!fJTp z=2=vGOgx+Fa6v<)&pqqj0c@?80J>f<&C{vk8B~Q+v@>V$l-Re(RuL5BlXgiYTrt&(%~v0 zTOHe59Vyj|WLNz`d7?bhD~Yb{OV?_0tx@TG5tp62tM3|A`wo1SJIq}ZDY7P#>p*v( z#(Wo6K4!VA@~dE-&mv3#K#H}U@(xFzgjHVOVuea1%mQcm3gcJ-WO`jo=n)GxMCuFp zqA2L7511E|y=G!jvTaMwy5@v^p5X`y^Ge*fgC<@EcsMhJkFg))ppL!**dvX(#bT@eKd#2%Bf9AMP9rw^Zc9!bSQZ@P9dA05=)}6O%&U@IGZpDLY@~`yF zH@SLxp_YCd`r&f?u3FDCv-Qkt^~_=|^VzS-KQ`fo{gd{fYB$E6>bPXsnw#Jg==LN+ z8bL>pk;T#&hZlJ$ZzcmBb5q_ni3$XaL$nFdL+H#xEwgZ(Sp-k^-fyI?)l%1vQ}gxI z{N8F)SB=>w8H5v*opu$rZA>@GAjCePkLf%5I$A=&{6@!$0UF{7`0rn5V*Pqs>-aJ9Y=@6}q F_rJ*Q{fqzr delta 438 zcmX>rIDvz2IWI340}w2GRG$*YIFV0+F=V2;wjLt`6N5WL3Tq2P3R@~;7CT4@2rOe} zU|0>r5D>+Y!XC_^$uV)48#m)E4%gg*oczkv)XDc)#TWx7J1_>a0A*Pw&t_aLZJ{4p zoLW?@U!Iy&Qk0pVpQj(5UzDvMo|+UfIg3e^l^bXx*W@WoiuJ-kR*@)>@YCcd;stT| zKm93G225gx^c6{y Nk06OJSY*L|0s!OVVX6QC diff --git a/workx/employee/__pycache__/views.cpython-311.pyc b/workx/employee/__pycache__/views.cpython-311.pyc index 5da3ef61fb552310d48d86685e1b29369add53ea..b7f03c79ecfff19d33b761deae369d94df9a0c28 100644 GIT binary patch literal 2016 zcmc&!&2JM&6rb63?DbbRA3$n1)QxCFEhOAaOGQy7K$IXQP814Ads!Us;BMIUh8c$t z+5?C7);k?j-P+~cILgeZ+`F1JS&$A z1jcVa{^9(o6Y>UMk}-Cm?7s!&F>#1PJ>pY~`kJLt;%JWU>3+t_C_Uqi`B^Kg^f52z z8jl{iI~Ums5rdI}l7 zfPXwJQ(2Y3s{9XD6Uu5FtW2<)OuR>8O*s?SNqzDiF4r|_+;`cQU_Bv=8;tv|5N^;F z?-cds zc9PmA6YBXC@Wo)p%Cekg0B5R0a2oVtvfR z+ufGWY+Dv=+Yg*g5A~95-`i|?@e0T2G8e3^vo_GJw>(c8_cj^d2KqUEPELpcwRYQU ziI_xbUK2xX$RbQQzT3S4_Hyd5Zm|;+&&fV!|KYm^T8PFLTkCPR6LcH50)AJ)1ADF2 zzRS8!V+*DpG}u9*8>%19ZftWCA}GMT#d&~7gI{D$|NhHsv-ZlY?V59abMDbXG&3J& zjz!h^e)a2@Kljfy!^(1)IS~v0GzpeoKMR)s)A|)3<_PJ~LFFn*uYFv-=Vd;D+2MiV zQwUjvX@p}4#}ObL;U^HVwfGD|388{eMNoU3MeVZ$FtE4)aFn{4zFB*1o_b}T+BN6< z<~(v&A8;3*TimTKhLxoe@-XKAMBd4Syj5sam)&PKHk>2v&uh5d5envT4guNww-kK4 zv|C*YE6ouKFkG`fEyp<%J^K!a1BcDa@uE~^ky$u;%oD1DvUqr!gsPt$y91Y$;0D^~ z5wNw@(Ti(YhF3ZHQH#V!0Sf>(KpF*VqazG_FfPRR!1w%1@WcyMtOD-ol+uVa!ZeA< zY&a|tITH>`L~7x%MC7Y5O(OD1I4lu49S%!G7Q-~z%jk54?vZqSve2LX=Dk|{>!?Xd pr%mOQhC4?8^YiG`r06s-Dd==rIi=ywLjQ|P=(Mby(oEFB`x}>=-D>~< literal 1933 zcmb_c&2Jk;6rcUD*LIw22o?@%ML}tzt}4}p3l~Zc1ZdPYLW-bhRcW>HPFkCF?9OZw zQaMTvIk;7%B7_u<6I?3wU=&U{@!qU=T^9s7bav+LoA>5@&HQG5 z8XqqZXm9?p<9(m4A*?OA)z^8r|eH;LnwT;L}FSZ*EZv z%Bh53rmW`rwFi`ew3tXgYqCZ)b{kW5Fgf`Gm;*wIt$4&%saDsMWrsc=JPmTzg_%VD3X)!?K{W}8rdT45lNUe^NSoB*AGbQzCfni57KsqH z`3P1Vr>nNrz(|#(t-hkw+S*}S&~P0gqh+x9wsMwoxAnH()|_nO3A~?Sli=vdvK*GW zB=l7{3(F7&qxaV-4}|Wyfh)ATG+C?456CWwO4C2w3`?`mO4ieo_48b>G#{4cJNe(t zb3ZQj%(>8<>*&##`S|Lis}Ha3U+WVsKOL3dJJ|Vtr&qodmM?X#N9Qkg7WQvN#mUEu zj}{-^*uT+{U*CYW(%=MQkr7nkIZITX0`q!N)mDbr;urM@ka?V23%;a?~5E1(0{~9RWXcU?$i;!s{gPD> z6AT^-XO%&9cwZU9Tx6j{>hrjyv0>Ict|NoDm&Z>^@fI!}JjHS5GvH!a&1vqVc*8zs z7AWv}<$FN-nxZHXndy%9h@9_^_J~~Wj`oOL=#KWjKBYkI|0Lht3*Wl@Co2B>7p=_l EZ+G3QFaQ7m diff --git a/workx/employee/admin.py b/workx/employee/admin.py index bc2e6c5..efcb459 100644 --- a/workx/employee/admin.py +++ b/workx/employee/admin.py @@ -1,7 +1,7 @@ from django.contrib import admin # Register your models here. -from employee.models import Department, Employee +from employee.models import Employee + -admin.site.register(Department) admin.site.register(Employee) \ No newline at end of file diff --git a/workx/employee/migrations/0001_initial.py b/workx/employee/migrations/0001_initial.py new file mode 100644 index 0000000..d1b2f1d --- /dev/null +++ b/workx/employee/migrations/0001_initial.py @@ -0,0 +1,42 @@ +# Generated by Django 4.1.9 on 2023-07-17 22:35 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('common', '__first__'), + ] + + operations = [ + migrations.CreateModel( + name='Role', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=50, unique=True)), + ], + ), + migrations.CreateModel( + name='Employee', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('first_name', models.CharField(max_length=30)), + ('last_name', models.CharField(max_length=30)), + ('personal_email', models.EmailField(max_length=254, unique=True)), + ('official_email', models.EmailField(max_length=254, unique=True)), + ('phone_number', models.CharField(max_length=13)), + ('job_title', models.CharField(max_length=100)), + ('ctc', models.DecimalField(decimal_places=2, max_digits=10)), + ('address', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='common.address')), + ('bank_details', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='common.bankdetails')), + ('role', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='employee.role')), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/workx/employee/migrations/0002_alter_employee_user.py b/workx/employee/migrations/0002_alter_employee_user.py new file mode 100644 index 0000000..2ed2946 --- /dev/null +++ b/workx/employee/migrations/0002_alter_employee_user.py @@ -0,0 +1,21 @@ +# Generated by Django 4.1.9 on 2023-07-17 22:46 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('employee', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='employee', + name='user', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='employee', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/workx/employee/migrations/__init__.py b/workx/employee/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/workx/employee/migrations/__pycache__/0001_initial.cpython-311.pyc b/workx/employee/migrations/__pycache__/0001_initial.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..265d188eb3b131b50c3b097ac48698d1117b5d59 GIT binary patch literal 2640 zcmbtWO>7fK6yCL+jqNzb4k3;q*qA^Y2gObhAX=3)#&MuD0rIB`t75hGjLkahU9-E+ zZx1>2&?7f;jfpkmz3H`iG|y-nfG9qR8X2e~W{xU2*4S*L@8u2Ks#2ZaOic^aQS_5hBeBkQ)T zJ#C#6xTwZk>S}9vz=IAT>~wCs=xX}dqu>B+t+(WBX@CdtJKk*vwW3eUs_5A1I;=Yq z(f2PRb{~o8-#M{;XipSX;3I5;mQ8mHCFnU0IXL-IR=r2!ojL|n-w~V8F*f~{jlYd4 z3{LNyIh;AVy8+AUMB9pofl{y~m8=?OQmLn{JK5sE*`3JY3Z(v`mcLdtasTM;RNLFR zo!AHH&i@Z|gU6t|@L$m#tojde7JWx+l6FELxJbM46XKa^wcY}4L?N%0%bH3&qF9i1 z!xTm0n$r|W95R?9j;|);F5;7_rY7cfD47tDu8J;~C4Eg?f@{QMKwXv;c^wkpGSqXL z0Yz0RL*im||1!;{)$P)%s6e%7J|aR@l^<7O+@Z5$B|<@l3NVN}Q?4l58id4a`7Z>KEL zl;cji*{Y%tkEV+BB7-JPo~aREPEwbs!lVd|^`7P;rflkH3WjJ{J(yPL_0)Z)TzadAE~C(hiP%uEws+d`&$?n+w+J;N?#on5oUcT+B=XbDWQ zqavR4BT2VeZ-%Ac=6#cP>Y6iCnhxcn`ZcW)0hA=Qs1XOq5x12fdhHYUd}cwsyEr{f zy6>rQL8HW8+L=zxr&E&|;??Le+wX{!({ zDZfNFnp~l()nqG^$@g!Xt zmy>94wl+A62WL@W?r*1}C^q)2568xK=TK~-7MsAa2^2^jj5CNL`loCC)3|>c1!n5O(`aC1YYGpHJioGc?Zsy}J&)7h;xt61bu_S18`!`D z8z}HyJxHToWl^v02`@Z&;y#{ufF~qWSVysqT5JQyY%`kSVV2?H=dOc>IaFLm;gwo= z1&3EqVAVQ`5oS2DEBxlc*KgzNv-tW0^ss;*9VITcw ztAyfi(q$KVBCn|hyVX2R4aiwtX}43jtxVYed=jmu&_8c^(^HJIoTn-G&i#em_2c?2 zDzd*ghDk}o$@4rdQa*;ba|ge5ZU`OstsgLJ2U?PX)*gPr8WE5{-Nktqw4eNPuW|!URX@kX^{Uc9s#@#Q}CJ(};LI z*O~lpr)Rl;?UrB+69szDGi^0%6uMSvyW@C=l(NG7{CpK#t`%CQ{trU?HJhyF8hpd%Gn2Hk|W2R#aaeEF0y@2uVp6T#d zjD1cX8w>W$PRDG3pU@6<33Z!?KA#*LuGP1mKTqx_VuyL*qeZ zpEg3@YI$zumFMpy;s7_y<_?rs*$3#LlF?WBdwMEBLq)4ki{z0uj@*=Th3 z^W85KQMDFTm!s-N*WBrL4lWVe6<&xjLU)$M^F#s!dYqRv{TzX~iXS7bKRTn-nFn;DGExA{ujr3G%|C}9hWzFldApzgTN}< literal 0 HcmV?d00001 diff --git a/workx/employee/migrations/__pycache__/__init__.cpython-311.pyc b/workx/employee/migrations/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c18de7bf8f2d37eef65a008033db03078a403303 GIT binary patch literal 182 zcmZ3^%ge<81geL&rhw?jAOZ#$p^VRLK*n^26oz01O-8?!3`I;p{%4TnFHil@;?$yI z{qoeLlA_G?{5<{e{Gx0yQ4yb%n4F!Om!e+|6spiq%`M2uuS`wV&&^CPN-W9D&nwoC vkI&4@EQycTE2#X%VUwGmQks)$SHuc58Dw`cKalvq%*e?2fdNJoF$2W_cGxa% literal 0 HcmV?d00001 diff --git a/workx/employee/models.py b/workx/employee/models.py index 2513d99..1d4b1de 100644 --- a/workx/employee/models.py +++ b/workx/employee/models.py @@ -1,15 +1,11 @@ from django.db import models from common.models import BankDetails, Address - - -class Department(models.Model): - name = models.CharField(max_length=50) - - def __str__(self): - return self.name +from django.contrib.auth.models import User class Employee(models.Model): - + user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='employee') + # Rest of the fields... + role = models.ForeignKey('Role', on_delete=models.SET_NULL, null=True) first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) personal_email = models.EmailField(unique=True) @@ -17,9 +13,14 @@ class Employee(models.Model): phone_number = models.CharField(max_length=13) address = models.ForeignKey(Address, on_delete=models.SET_NULL, null=True) job_title = models.CharField(max_length=100) - department = models.ManyToManyField(Department) ctc = models.DecimalField(max_digits=10, decimal_places=2) bank_details = models.OneToOneField(BankDetails, on_delete=models.CASCADE) def __str__(self): return f"{self.first_name} {self.last_name}" + +class Role(models.Model): + name = models.CharField(max_length=50, unique=True) + + def __str__(self): + return self.name diff --git a/workx/employee/permissions.py b/workx/employee/permissions.py new file mode 100644 index 0000000..450e850 --- /dev/null +++ b/workx/employee/permissions.py @@ -0,0 +1,45 @@ +from rest_framework import permissions + +def has_permission(self, request, view): + if request.user.is_authenticated: + try: + employee = request.user.employee + return employee is not None and employee.role is not None + except Employee.DoesNotExist: + return False + return False +from .models import Employee + +class EmployeeAPIPermission(permissions.BasePermission): + def has_permission(self, request, view): + if request.method in permissions.SAFE_METHODS: + return True # Allow GET requests for all users + + user = request.user + if user.is_authenticated and user.role: + role_name = user.role.name + if role_name == 'Admin': + return True # Allow CRUD operations for Admin role + elif role_name == 'Employee' and request.method in ['GET', 'PUT']: + return True # Allow GET and PUT requests for Employee role + + return False + +from rest_framework import permissions + + +class GoogleAuthenticatedPermission(permissions.BasePermission): + def has_permission(self, request, view): + # Check if the user is authenticated + if not request.user.is_authenticated: + return False + + # Check if the user is authenticated with a Google account + if 'email' not in request.session: + return False + + # Perform additional checks if needed + # For example, verify the email in request.session with the email from id_token_data + + return True + diff --git a/workx/employee/serializers.py b/workx/employee/serializers.py index e0a5948..4df4888 100644 --- a/workx/employee/serializers.py +++ b/workx/employee/serializers.py @@ -1,12 +1,29 @@ from rest_framework import serializers from common.serializers import BankDetailsSerializer, AddressSerializer -from .models import Employee +from .models import Employee,Role +from common.models import BankDetails, Address class EmployeeSerializer(serializers.ModelSerializer): - address = AddressSerializer() bank_details = BankDetailsSerializer() + address = AddressSerializer() class Meta: model = Employee - fields = '__all__' \ No newline at end of file + fields = '__all__' + + def create(self, validated_data): + bank_details_data = validated_data.pop('bank_details') + address_data = validated_data.pop('address') + + bank_details = BankDetails.objects.create(**bank_details_data) + address = Address.objects.create(**address_data) + + employee = Employee.objects.create(bank_details=bank_details, address=address, **validated_data) + return employee + + +class RoleSerializer(serializers.ModelSerializer): + class Meta: + model = Role + fields = '__all__' \ No newline at end of file diff --git a/workx/employee/views.py b/workx/employee/views.py index 1506d3f..5a3bc0e 100644 --- a/workx/employee/views.py +++ b/workx/employee/views.py @@ -1,25 +1,27 @@ -from rest_framework import viewsets +from rest_framework import viewsets,permissions from .models import Employee from .serializers import EmployeeSerializer from .forms import EmployeeForm +from rest_framework import generics, permissions +from .models import Role +from .serializers import RoleSerializer +from .permissions import EmployeeAPIPermission,GoogleAuthenticatedPermission -class EmployeeViewSet(viewsets.ModelViewSet): +class RoleListCreateAPIView(generics.ListCreateAPIView): + queryset = Role.objects.all() + serializer_class = RoleSerializer + permission_classes = [permissions.IsAuthenticated, permissions.IsAdminUser] + + +class EmployeeListCreateAPIView(generics.ListCreateAPIView): + queryset = Employee.objects.all() + serializer_class = EmployeeSerializer + permission_classes = [permissions.IsAuthenticated| EmployeeAPIPermission] + +class EmployeeRetrieveUpdateAPIView(generics.RetrieveUpdateAPIView): queryset = Employee.objects.all() serializer_class = EmployeeSerializer + permission_classes = [permissions.IsAuthenticated | EmployeeAPIPermission] - def perform_create(self, serializer): - form_data = self.request.data.get('form') - form = EmployeeForm(form_data) - if form.is_valid(): - employee = serializer.save() - form.instance = employee - form.save() - def perform_update(self, serializer): - form_data = self.request.data.get('form') - form = EmployeeForm(form_data, instance=serializer.instance) - if form.is_valid(): - employee = serializer.save() - form.instance = employee - form.save() diff --git a/workx/google_auth/__init__.py b/workx/google_auth/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/workx/google_auth/__pycache__/__init__.cpython-311.pyc b/workx/google_auth/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e64916c0b7d5048fa32ac14467b6c4ee588a29c GIT binary patch literal 174 zcmZ3^%ge<81jhnrrhw?jAOZ#$p^VRLK*n^26oz01O-8?!3`I;p{%4TnFGu~*;?$yI z{qoeLlA_G?{5<{e{Gx0yQ4yb%n4F!Om!e+|6spiq&(BZKNsUh|Ey>W2kI&4@EQycT nE2#X%VUwGmQks)$SHuc55oBjEKalvq%*e?2fdNJoF$2W_$~Y@L literal 0 HcmV?d00001 diff --git a/workx/google_auth/__pycache__/admin.cpython-311.pyc b/workx/google_auth/__pycache__/admin.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b8e5a5f61c194e8a904738378c1385b8dbd4b9f4 GIT binary patch literal 229 zcmZ3^%ge<81jhnrrq~1N#~=<2FhLogg@BCd3@HpLj5!Rsj8Tk?3@J>(44TX@K?*b( zZ?Pt(u;v#3v;tXQ$?+=$8Y9D)iIy^V4%u;}c6uGW5Y_>lIY~;;_lhPbtkwwJYKP b8pjC4#j-%+12ZEd;|&Id3)oN*8&CxRwU9ix literal 0 HcmV?d00001 diff --git a/workx/google_auth/__pycache__/apps.cpython-311.pyc b/workx/google_auth/__pycache__/apps.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..64c8e73b8a27d380e672d3cc22acf879f7b4103b GIT binary patch literal 554 zcmZutJx{|h5IrX;D*Zr+p`rr=W0z!Q0Hgw<15zb~5KO&q`|y|U<4dY!T`C% zRGDIGOhpYX-mD2>ySy58ua_EkJM6~tY@xG;-Vuzup?>7pm=~uGcUhdb69To6QLkj; zETx{+;grTXN|6w`5*H}FjVw3KY%$)lBDX6^g0>PJP3E3qE?>DgFfKzLghr1yx`AU0 z&$tpnJ8^y5u$pb|F{6h^edEXVhUNRA?hgXl#>8m|!ZNzy_n4OVCR%Bl-yWXG5foRo z^@61o2i75DeO*u&)J$n$}{-u9tI!s K^z)xoa@iN?l8)E_ literal 0 HcmV?d00001 diff --git a/workx/google_auth/__pycache__/models.cpython-311.pyc b/workx/google_auth/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb1ca210f184119f6b1f61873d78d3c2f2e1e9d7 GIT binary patch literal 226 zcmZ3^%ge<81jhnrrdR^$#~=<2FhLogg@BCd3@HpLj5!Rsj8Tk?3@J>(44TX@K?*b( zZ?Wa(r=;c-`)M-W;!Md(%uCPLOGzqX21>4E_zY6>%U(aUIJKx)zdSXmq$o2zKTkhA zzbG3_RKzDGCTFMSrRbLfg(~#Z^YhblQsWa#OEUB!=IRwx{^GC!vP*MP?TR>n<}m_s Xu`H1Iz|6?Vc!NRa0yb2{22=q6%T_yD literal 0 HcmV?d00001 diff --git a/workx/google_auth/__pycache__/urls.cpython-311.pyc b/workx/google_auth/__pycache__/urls.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8da82f8724cada5565fe550d15680dc9ae0d498d GIT binary patch literal 501 zcmZ8cJ8!};5VjKs5+a1EE=cVkV1P_z=xgfS1yx8{P{3ArI8Nk*LYWvlG9Xpmy7Z;? zXY>aIi2-G*)QJs=jj1+mq|&o}_uc8c`_9k#d=3bEtli@e5x-=TTILt5nE-bH0}Ltf zpba6w3RbD&skSOGvXKG^#2Qh%TH1^=@7X66fH(1eY|GIFC!Gth@t@-=b{6Mqpkyv( zQwb(0aH94S{v_IUhYZ5Rbba5Yq~Y|V_9#Prx5KPN+eX>J9FL5QmP2XNY4xl`PvK=r zPfXl(nCn;ioQ7QPmH;l7PIM;-8nTsVMam6XGX+cNM})KR6|6-GY|gB!knqqNkY>a? zuFtHx&wE=pY)C=Eur&~+q4j4?OX^jEn~i?z`M6KXIo}i0*;#gm0fM$#@Zi|zn>B&PqM&%hQ&rx}SbWuH+kSTjPj!|`ns&iCbX=*_koAU62 G(E0`>tcA`1 literal 0 HcmV?d00001 diff --git a/workx/google_auth/__pycache__/views.cpython-311.pyc b/workx/google_auth/__pycache__/views.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eaf310270830197696beefd9b170c771478ad339 GIT binary patch literal 2189 zcmaJ>QE%H+6uwUE#BG|jYm$y+jCNzq7Fgq~XaWWuOrtA9qZMs8q)5neZ7*}?*x~wS zTcbqE15Z36#3mS`PX$zX=Z(MMOh$_=Rhq;TJOy=o*%Rm5aawPP>+9olj?X>!o^#K4 zeoQ7u5sbgD|EApM5c-n}!H5i)z3af-LkdzD9o3jJ!%#k=M{3b>)Z?Q%TjR={$Fq8@ z7B9y=p40g<54JIVq{f#=K^Ol5l@kgNbWGvaP+{aRx=Dd?d8{fLR%JqYO%aKCOEoBO zsf1`o#R7f|tG88bsiH15H<$fIpEp#CSTZv>EB!zmC<^c1mq6~J7TSXEi-S;`!BCiO z@US!V5|-MG5+Q70i%@mA@;jtNTMSV4d#)WJBl|Y3NZ1F&$}K-jS4^{_tD@8(H_ywG zu5U>4t>)5ALh9CeL6BtGY#78U`esGhtO=%IQtNqv()X}x)lCCZKsM{@f@~^kUe-0$ zAfl!$G!Ny2EQ$@REi|X|mTZC@yoRRC&X?4hr0MXjWAlcls|C)T+-PXJB1#*UsW*s9 z*Wnn1foT@qBTFkQOIH`gm5bNbKb#jYUA?lnye?k(0MiTaK7gSHf*g zy<-*Yn=YrD70tjC;Eq0r<_(XjTu0WGbw zYVZeb9kd&2pRY1nSM3PYXMnV!C1pr_UsR&uY6?qjs6oQ-TUY7bc_XBy=k-P_s;~<8 zfNQg4JkUW^4?VOZE%uk#Hk@i_c(OLv;mY#<=A z&!TEFP=`H*&OVH28#2B_v+j*{oE!^ygcLrU7usKzU6!Jx`D%bMA58;{ZA^KX?(rNX!yU0PgsqZM#Ki+LY-nC8tr`k&}qTfDToxQ=OcxNP0Dh|5+j)9`k3 zQ_vu_8=ImZrQb!}@d1(sV71)%st;Qq#ylRQo2RM65ib!Gv3^LCzC2hd(vaLkfzEG5 zZYnJMM#-Rud!j{a3*he!OpDItgZ78>AW}SAzXR!@UUufe(I2M2o&IU6n=LunlFd%_ zCeC%P^!^9rk0(y-W{x?TbGzB&PIjU9(#hV`YyCtl7waP+;Ns~aH1*2YpKZNuzp-d% zE_XARoy_IVaxZuKQEu*GZmydXoSa~@M|RUMJLyu7KYITohd;H;A948UE`QwNkMHsm z4uATeIGc$*K|nemKOIG5X*>OTH*v;EoUz$6_%Os!NV*eBRWd4O(SkNeW&%}g&!EXmBz yE7p&X&& + + + Home + + + +

Redirecting...

+ + \ No newline at end of file diff --git a/workx/user/views.py b/workx/user/views.py deleted file mode 100644 index 91ea44a..0000000 --- a/workx/user/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/workx/workx/__pycache__/__init__.cpython-311.pyc b/workx/workx/__pycache__/__init__.cpython-311.pyc index 8821219d73da94bb89e375783c9cd7b4ac749d6f..c8b271a789db3e60899d725b44c7dae2146c6799 100644 GIT binary patch delta 27 icmbQwxPozl1EcjsM{%C~qU?(Jq{QUx)V!35(Jlad8wq9r delta 18 ZcmZ3%IG=HX1EbMIM{(xVq=<`Z=U4*&b{Z{-#s7qzEA#|Uiv^$BoavR;xqh- zAjsFz=0=F?#ZM1;w`3gyE|M@VPG|@aXQ+5Pu;IW`K#CCY0ILyE-Bu;T16{jF6#^8=P4VV}YbOz?cSxAWqnCFr7U3nQr5VG`IHZ*g= zRvkw-&Uev6^mwpcplQ08TPtSQ^2L=_E7xcq(d#;0RE`YoKxY^xuQ^ApoN-`f^N^7( z%g$(~skPOvt#%aCa8$#|DCWUnvCM7pdoNaKT>z%EQYq}~&xNOK<=M-=q&FR=*X?!E z)F2L5RRk2n>9`kTg1ZsQ5VE3}UBj_mEwt!92qh_h;$Id??mEr$-=R-q$Ad@LRA^)x zveHrwurrovJ6cDz58IMuzfnv}%ldfF?6mrQpSTJ7IGts3`GOyAn~L0S1{@#D=a_67 z_i?sbu2fkct8VTFSm)WAPwZ{-{61GJ`Peqc3qH2T)dY7y6wsvmk&yC{g8x+{rNSehc#tH&*Mx=*ON29(4+mI|&ch-R~32SRuIlFL3eGYybcN delta 1166 zcmZ`$OOM-B6!t52-p|P-O@=-gI+`GjM*;~Dh==Q#jv*5VJDFCND$A35NpI`ek?j;s z7G#9@1IQq;7zt4p{DA%kmT1^TUR7cRD@*N$9oLhDf|y?Eo_oLVp6{H`$ImN2)OUZ* z<3NU`1yIDVr863ldI6MmjPw$y;EXcZ09CL#qCgGQvF^$lg>x#Pp>KdD*uqQ` zymAq*Uc_r?n;bEE6T<~`&?FXT+iGN=CiSz&eI&Ee3Q+WxG%COl_|OlwW= zTuSp3*Lj2hbUl9LI3o+TxY^#S;TQp6!6$#xKT-3L1rHqTB23(I+=q8tbjV8G+j3V5 znXYgsg?Xv_v7(BSp@|35q3{QV|G@0cb<33pJ~nI|o5P3D1|Bb91Z^J;O&>Y-ttB0@ zOCKSJoqdih7$)G@Y$Geo;40Ab4F6;TL)Nh^WWyE}CNxp$Nnu79^bd@lpbCfDEWd9~ z&^{bbEawEmeRm^va}bp1%G>+|7Z{IB3xSK){J?{*;K$RQ`cOk-WSK7VPmY!u zjywAx*6v-ZJw!GdPsbf-kNo>D6d%S4{!)eLjK_}MTlsh)`RL_My3;Xq(eQtoAj`c) zZUrJ|1Pe}`bDG?j47nXPG)0t!jv$K4pxZY(3jS4w(lu^N{je5KO6vAyQRvHre^v^$F0Hjadj+-8Knq6WLk0r^Jo zWwJ)YE;Z-gm*T$$OP3T`E%%u@0yCXean2rOnGkBEKj%7RB14aW&$Y zA{!BLpxGRCnu_v7CVR>~ZC*Pk8WBq*-i>Ig$(|FnC`}}CPqWoUwh|@iavI}YlSWET z8EHAqWpO=YWaX?eEDswwImcxQJ#Q4`0-q=K5o1&y<@1z2W)$V3F)oh_D2B-B-nj_O z5lmi33nWjFiC3lma$usSN#O|azJ{mQ1azuxh9u8ynEV?MGPGYzI@T?GT$e*x0e~6OBBzEBKB@v0+hyHFMXZ1`mN-I#Fzb zZ9=LU46W%nExRg7s#Uiu>YidYtQNKQNZqN_Ekh!vv{JbwIaW)n+Y&RDV0&B2tnDiX z#ImcIJ8iSh(Dk`Gx3~~XRib1Z;v-x~Ev#Kk$y|e?w)Pbm{p|G4Lp$tfcCn|#TCB)+B&xnTE zR}{O(f-IEZL$q$z^|q>+4M+mtk5Q|`VMh5`=ZV1p1&)W=l7%wf4O3a|rK@)w6_)S_ zWN3SVC*{m&cXX>EK?0+l=9z%UoiCR&f3tU@ECg{yH8isv3q+RjAQ@Vhhl1R?3B^Dj z0MmQK3G!?EEn?dJ_4pRijGZ>Mi9t*!v;w!OH7F75fRGI+(p5?nhur#Ro#}&*BGndg zs79WU`z>`qeQwLr|LX-9^Q)H8Qp|&B6Cp_Q;-@y?jsq*r3{rJP*LRfq;~)vBnRTb2 z)azE;bZiMo0h7)|UqA=3cSibh(&N}k@T^Dy>SRbr$Cf(d(R_)$fJ=2w4)BSrE<43Y zYfD!()2X%|Uza+Qk#LEIoR`|1bSFW9Ed(85|APTL!wt)7fJ|vSP0;sNHMZiXw^=?P zBx^NzcWbpEAC?PL8KiWFvdb>W4%848K|n7dG7JGEU3^x5r2b4)lo2>1!Rm1v$tDex$_$*$7Yoh^2G(EyUb|5KDS zAf+G?ZOtKp$jU!RhA&!>9k?5QLvJ7udi%L_-zLy+q-DVJ*gijQ0C*qlAoUT(%4VqXNfLK{8ad{@I3Q!(?g3s zT6EE3D04?dHAl6@4A~!SJXUF^F^%}WYR5Obc+jq@uF8;_KVBz v7hk#Jh9_?L;zrM6`eo^5$({Mkn_BUwRy^^tFJ3;*B@2mXS@xrIaJ>Hjz2Vn} delta 867 zcmZ8fJ#5oJ6h6Dx*l}X#kF-Eh`Ds%%l*D4_!qSSuS_xGpCw8O2r)1fAs8yLv$5NfhsskWHpGBnW8%(SgXA*B1us0ayybk`I>7A-{j`@M3@Y_|EZ40OvwDcNRla{ptSnVCwBmP^g53N&pu^ zxG/', EmployeeRetrieveUpdateAPIView.as_view(), name='employee-retrieve-update'), + path('roles/', RoleListCreateAPIView.as_view(), name='role-list-create'), + path('google-auth/', include('google_auth.urls')), + ] -- 2.25.1 From 1aaf6a33b4349a17bd15cffd2f01e111650d1127 Mon Sep 17 00:00:00 2001 From: paras singhal Date: Thu, 20 Jul 2023 17:34:27 +0530 Subject: [PATCH 2/6] added gitignore --- .gitignore | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..62528b3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +# Ignore virtual environment +venv/ + +# Ignore compiled Python bytecode +__pycache__/ + +# Ignore macOS .DS_Store files +.DS_Store -- 2.25.1 From f96926207a8322fb7bd12add26770a3e3194d63c Mon Sep 17 00:00:00 2001 From: paras singhal Date: Fri, 21 Jul 2023 01:14:51 +0530 Subject: [PATCH 3/6] Remove __pycache__ directories and update .gitignore --- .../__pycache__/__init__.cpython-311.pyc | Bin 171 -> 0 bytes workx/accounts/__pycache__/admin.cpython-311.pyc | Bin 226 -> 0 bytes workx/accounts/__pycache__/apps.cpython-311.pyc | Bin 546 -> 0 bytes workx/accounts/__pycache__/form.cpython-311.pyc | Bin 788 -> 0 bytes .../accounts/__pycache__/models.cpython-311.pyc | Bin 3922 -> 0 bytes .../__pycache__/serializers.cpython-311.pyc | Bin 1704 -> 0 bytes workx/accounts/__pycache__/views.cpython-311.pyc | Bin 1549 -> 0 bytes .../__pycache__/0001_initial.cpython-311.pyc | Bin 1616 -> 0 bytes ...roject_reimbursement_and_more.cpython-311.pyc | Bin 3746 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 182 -> 0 bytes .../client/__pycache__/__init__.cpython-311.pyc | Bin 169 -> 0 bytes workx/client/__pycache__/admin.cpython-311.pyc | Bin 676 -> 0 bytes workx/client/__pycache__/apps.cpython-311.pyc | Bin 540 -> 0 bytes workx/client/__pycache__/models.cpython-311.pyc | Bin 3499 -> 0 bytes .../common/__pycache__/__init__.cpython-311.pyc | Bin 169 -> 0 bytes workx/common/__pycache__/admin.cpython-311.pyc | Bin 588 -> 0 bytes workx/common/__pycache__/apps.cpython-311.pyc | Bin 540 -> 0 bytes workx/common/__pycache__/models.cpython-311.pyc | Bin 2761 -> 0 bytes .../__pycache__/serializers.cpython-311.pyc | Bin 1270 -> 0 bytes .../__pycache__/0001_initial.cpython-311.pyc | Bin 2222 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 180 -> 0 bytes .../company/__pycache__/__init__.cpython-311.pyc | Bin 170 -> 0 bytes workx/company/__pycache__/admin.cpython-311.pyc | Bin 377 -> 0 bytes workx/company/__pycache__/apps.cpython-311.pyc | Bin 543 -> 0 bytes workx/company/__pycache__/form.cpython-311.pyc | Bin 787 -> 0 bytes workx/company/__pycache__/models.cpython-311.pyc | Bin 2773 -> 0 bytes .../__pycache__/serializers.cpython-311.pyc | Bin 830 -> 0 bytes workx/company/__pycache__/views.cpython-311.pyc | Bin 2093 -> 0 bytes .../__pycache__/0001_initial.cpython-311.pyc | Bin 3084 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 181 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 171 -> 0 bytes workx/employee/__pycache__/admin.cpython-311.pyc | Bin 384 -> 0 bytes workx/employee/__pycache__/apps.cpython-311.pyc | Bin 546 -> 0 bytes workx/employee/__pycache__/forms.cpython-311.pyc | Bin 903 -> 0 bytes .../employee/__pycache__/models.cpython-311.pyc | Bin 2325 -> 0 bytes .../__pycache__/permissions.cpython-311.pyc | Bin 2052 -> 0 bytes .../__pycache__/serializers.cpython-311.pyc | Bin 2253 -> 0 bytes workx/employee/__pycache__/views.cpython-311.pyc | Bin 2016 -> 0 bytes .../__pycache__/0001_initial.cpython-311.pyc | Bin 2640 -> 0 bytes .../0002_alter_employee_user.cpython-311.pyc | Bin 1159 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 182 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 174 -> 0 bytes .../__pycache__/admin.cpython-311.pyc | Bin 229 -> 0 bytes .../google_auth/__pycache__/apps.cpython-311.pyc | Bin 554 -> 0 bytes .../__pycache__/models.cpython-311.pyc | Bin 226 -> 0 bytes .../google_auth/__pycache__/urls.cpython-311.pyc | Bin 501 -> 0 bytes .../__pycache__/views.cpython-311.pyc | Bin 2189 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 185 -> 0 bytes workx/workx/__pycache__/__init__.cpython-311.pyc | Bin 168 -> 0 bytes workx/workx/__pycache__/settings.cpython-311.pyc | Bin 2548 -> 0 bytes workx/workx/__pycache__/urls.cpython-311.pyc | Bin 2546 -> 0 bytes workx/workx/__pycache__/wsgi.cpython-311.pyc | Bin 686 -> 0 bytes 52 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 workx/accounts/__pycache__/__init__.cpython-311.pyc delete mode 100644 workx/accounts/__pycache__/admin.cpython-311.pyc delete mode 100644 workx/accounts/__pycache__/apps.cpython-311.pyc delete mode 100644 workx/accounts/__pycache__/form.cpython-311.pyc delete mode 100644 workx/accounts/__pycache__/models.cpython-311.pyc delete mode 100644 workx/accounts/__pycache__/serializers.cpython-311.pyc delete mode 100644 workx/accounts/__pycache__/views.cpython-311.pyc delete mode 100644 workx/accounts/migrations/__pycache__/0001_initial.cpython-311.pyc delete mode 100644 workx/accounts/migrations/__pycache__/0002_client_expense_income_project_reimbursement_and_more.cpython-311.pyc delete mode 100644 workx/accounts/migrations/__pycache__/__init__.cpython-311.pyc delete mode 100644 workx/client/__pycache__/__init__.cpython-311.pyc delete mode 100644 workx/client/__pycache__/admin.cpython-311.pyc delete mode 100644 workx/client/__pycache__/apps.cpython-311.pyc delete mode 100644 workx/client/__pycache__/models.cpython-311.pyc delete mode 100644 workx/common/__pycache__/__init__.cpython-311.pyc delete mode 100644 workx/common/__pycache__/admin.cpython-311.pyc delete mode 100644 workx/common/__pycache__/apps.cpython-311.pyc delete mode 100644 workx/common/__pycache__/models.cpython-311.pyc delete mode 100644 workx/common/__pycache__/serializers.cpython-311.pyc delete mode 100644 workx/common/migrations/__pycache__/0001_initial.cpython-311.pyc delete mode 100644 workx/common/migrations/__pycache__/__init__.cpython-311.pyc delete mode 100644 workx/company/__pycache__/__init__.cpython-311.pyc delete mode 100644 workx/company/__pycache__/admin.cpython-311.pyc delete mode 100644 workx/company/__pycache__/apps.cpython-311.pyc delete mode 100644 workx/company/__pycache__/form.cpython-311.pyc delete mode 100644 workx/company/__pycache__/models.cpython-311.pyc delete mode 100644 workx/company/__pycache__/serializers.cpython-311.pyc delete mode 100644 workx/company/__pycache__/views.cpython-311.pyc delete mode 100644 workx/company/migrations/__pycache__/0001_initial.cpython-311.pyc delete mode 100644 workx/company/migrations/__pycache__/__init__.cpython-311.pyc delete mode 100644 workx/employee/__pycache__/__init__.cpython-311.pyc delete mode 100644 workx/employee/__pycache__/admin.cpython-311.pyc delete mode 100644 workx/employee/__pycache__/apps.cpython-311.pyc delete mode 100644 workx/employee/__pycache__/forms.cpython-311.pyc delete mode 100644 workx/employee/__pycache__/models.cpython-311.pyc delete mode 100644 workx/employee/__pycache__/permissions.cpython-311.pyc delete mode 100644 workx/employee/__pycache__/serializers.cpython-311.pyc delete mode 100644 workx/employee/__pycache__/views.cpython-311.pyc delete mode 100644 workx/employee/migrations/__pycache__/0001_initial.cpython-311.pyc delete mode 100644 workx/employee/migrations/__pycache__/0002_alter_employee_user.cpython-311.pyc delete mode 100644 workx/employee/migrations/__pycache__/__init__.cpython-311.pyc delete mode 100644 workx/google_auth/__pycache__/__init__.cpython-311.pyc delete mode 100644 workx/google_auth/__pycache__/admin.cpython-311.pyc delete mode 100644 workx/google_auth/__pycache__/apps.cpython-311.pyc delete mode 100644 workx/google_auth/__pycache__/models.cpython-311.pyc delete mode 100644 workx/google_auth/__pycache__/urls.cpython-311.pyc delete mode 100644 workx/google_auth/__pycache__/views.cpython-311.pyc delete mode 100644 workx/google_auth/migrations/__pycache__/__init__.cpython-311.pyc delete mode 100644 workx/workx/__pycache__/__init__.cpython-311.pyc delete mode 100644 workx/workx/__pycache__/settings.cpython-311.pyc delete mode 100644 workx/workx/__pycache__/urls.cpython-311.pyc delete mode 100644 workx/workx/__pycache__/wsgi.cpython-311.pyc diff --git a/workx/accounts/__pycache__/__init__.cpython-311.pyc b/workx/accounts/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 76d71cd61662b97c5021f916f21cf04735a034ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmZ3^%ge<81k28BO##u5K?DpiLK&agfQ;!3DGb33nv8xc8H$*I{LdiCUv~PT#i>Qb z`sJxfB}JL(`FZ-``9;}aq9Q&iF*!RmFGar`C{&@Jn4FwnnpaY+A0MBYmst`YuUAm{ li^C>2KczG$)vkyYXdKAGVtyd;ftit!@dE>lC}IYR0RVTYDuMt2 diff --git a/workx/accounts/__pycache__/admin.cpython-311.pyc b/workx/accounts/__pycache__/admin.cpython-311.pyc deleted file mode 100644 index 1312480926d8484ee562e56de3ac463472c14544..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmZ3^%ge<81k28BO|b{kk3k$5V1hC}3jrC^8B!Qh7;_kM8KW2(8B&;n88n$+f)r>n z-eOHm$<563(`35Emy(s3m!7YeoS#=xl$lh-3{)> zo_=_KQ8t*Uh)+sP&Q8rs(Ju!IRp=)sC+C;ul@#lP4c05D{Ka9Do1apelWJGQ0W^yd Yh>K-`#0O?ZM#dWq3Ky`UA~v8307$Sq{r~^~ diff --git a/workx/accounts/__pycache__/apps.cpython-311.pyc b/workx/accounts/__pycache__/apps.cpython-311.pyc deleted file mode 100644 index 27d88f6b76ad22e233624d2974727a4fa1b609ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 546 zcmZutJxjwt7=ABFrS=OEEOc;i%#y4kB2+~Op^J!^<+$dqAvR57K4^97;16&R`VT7N z?7wj67_vIKRqE8qyCfAv-^)Gsy!Sr$T<(3U*DJtd`u0j6`T8!BRg?;{&^Va@1&SOP zAOj(g;1sBI4^(DoDg(UmnTH`!H( zO9l+%w1P2L$By7NjBjG%6qQZNdL(utOt=T`WhRQKJ;Or$;BrsD2w4#7L)MJ~+wxrf z(hK?-jBuBjedbbq$hSuN>TaF*eyI7kfoNX_3MXNU!}w<;t=*Z@OsZSsV=;pIO50K8 zv|7AU7zLuSxm8WDOxWOTS>Dedbr5XuRP-}E<1m*ILJ925et+{d2{q^N7ap!Y#qQTX HrR=hATGxyA diff --git a/workx/accounts/__pycache__/form.cpython-311.pyc b/workx/accounts/__pycache__/form.cpython-311.pyc deleted file mode 100644 index 9b78b20fd48535eb95777d101f49d2c4ef632489..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 788 zcmZuvJxe4(5UuW>+3{;(6}=NK7Tm;FI)5^51R zieZBsuZuzB)Agk--3lLJyICv7q)fv^OIb`vnPjRR(|$_I({>o!j3K=W7n3?JJl%=n zw$g^=?c;*MvcH>ally0SuVoGovef^bnd1^VaxaXIb*lU`40Zg_>XG{-)6&U#;ZP@L z9BHUXK96wmF}jVPS8jJ^_R6DS8kjUQ2-{7^Op-H2P_M#eOZL<>#k>kg@q7hgNZsSy zo$J9@c%|6eHwjBjoFrRK9fj#ZX6Q#KYNa%})oFZ-bfQPH4UkU5rUqjxR^(MfuSHLn lON5?ajCEoDd31K+*YoJ?If7y1U*US;#($;w+c(Lwf&cV(t_A=A diff --git a/workx/accounts/__pycache__/models.cpython-311.pyc b/workx/accounts/__pycache__/models.cpython-311.pyc deleted file mode 100644 index b63266a06d8b1de35b06485cede619962c20478c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3922 zcmcJS&2QUA7QlxR^<|2pE6LrYi5)j}8YnU1-7J!RY|uEiEXQ!_q_yLs>Y{`!P82#6 z=?*D34)!1{dhh}{_^?3s7!*a;L2~dRTlCQXpce|@LEx!CFU?JXbIPIUd!!WEl;E`3 z-Ld#IA8$r)hVS>@_}`*9K%j(b-ztBP6Y>)_IwjJs?EVaudqg1$r;#dGmMHvJM2S#tHQHI|L70$7@c5+|^R%L%6+1vH?rFtAD{+8U!qXZ6 zE#UyI0Z%IlTH*m(f|6P!Iq4~ynd97O)ljHrLM=X1UDJ#WN}(=HmGoPAYL!&YEVp;$ zeRcM?dmfti2qi^MA;nOL(C{kXQB=6cp$8nC20VT#MwIYZq!?9r`0a=roz_&UTTc}j zeaN{3)zWQQqk6@Szs!n_5T%Il>n#cz{pH%y!``r^XG zb(1o4;!C<>F|}go6Q3CDmM3n@E2Z)+sw)#;Lf7qyQn_r@bjzIZPvOkkh8vS*(_*rG zC*>P?rrj1`?Ok-EI%!IoyBl`=&@S4t@G$1aWf|>|Wp_Z9VX2yi^`tC+Q7dWw2*ZuI ziRqgqR#2&?uoSde8pK1wvRHo&MXV#RvimNG`pdtjaAfnmBOJMJ+QR9EaM}@0*Ym9? z7dhM_y~1AVH$qS zKL~**!{e7?G@uiC91Zw7kiT!0UJalgH1OEG@&M$ccAbzSa15j9Z(gBEXyI{r<#8-v zPb#1-9jHC1K&&agrX+yF0XI6QmyIgTh1}SjzHX>x%HD)ufp$EvuB!@w!j417Q}p|X zA%xjAx%xsULNtV7M;L~g;>hN*BaZxQedqNjBepo%5GNgRvR-JWj&0s> zQpfJccFsTfz)npyQd3T9sy>V1WpQQ*JJQw6f<*IW-zA>b(-@ZTU$ zAs`Oc+LJqiJoRe)H#|iG_8iPpPFK}2WEMV8r2v^duSwqo680v8=SthG&6hk<4^m57B2%r6@zW~un8-wrnO096S(FdQTz!7 zMrC#ugd3;rO9;a#>?T*>9wN81w40nV42_m_A5js|tgh6UNvm*|@KR}zJ-nna6u4#c z2M}HMTA}EnXp3}&&1YMKWN>tI-I0!M|Ji=`vMtRuq&Y{Lt6%O9h6u9s(tA#nJnRc9x%fZcF)wly{^&ESVYGI`3r0?tk`O;rj(UGvCO}JDK_V zm1g$jR>8@hY-DpzHdp`f6-46h`V;vLjJ%pi;Bh}~K96{B@QT7Kn7{Vtz~91KH;eK> zeK2bYULH!e^N{%Q-dC9mBNEq2s={W#255xyHOdNpJ$7}SG6mYR(C+3S_7*gsVwwhh z??S1l71c7`ltRmDwWP^wS_!ijvh%+qW@w+~9d72)v_0I2L2gouOP7|eFZNR7vy#mF zHn(#T!(5cTW|*p_uG2Xku!7^jTcjI@8>SBVbHk0AR>`WFeL2XZJt!{1WBvogUJm#y zaL^I;1;|620b8vm~Vk>g*lFElB4$iPb*5e6E+#!`)LyB z+4pJj5e}~6y<&6u?q8o_|MTwPV6U1tb@Rqutw&elARYG#e_iN*-W?pvpl+}5*M71LXh4dPC=jAZ3L=Db&FbvkAmh7p*s~P_4FyF? zy5tuGMfCgx>J%=lZK={Za;j9!?D>K1#3BlNcc1oV=f0WyW@o?Wa%lqNN%WJqC?UV` zr9bT6qcO{#nW4)kU2r>0#%tv$cpDzJ_#9}z`u}!shn3~xfTeOc+uPu zVI)-UwWtK8hKxiY!g@K*Dn_gK(tQMzeIkfUIdKi03WZdRLj!&Vo_M$>HzB;G=HeJz zgXklym4-nYJuE1u3F*w-tM_p zi5DkGbd6;e5`y}Ui-Zj%=Md%*#^gd}jiKfj$TFpoi)!DX$9>zA4 zCfJpudo|LHD|N{+T{XLbEj-jJZVz259cFYloF~`g^Wd3$0AJ&Y6a50{n3U2sd3Zc} yx5?V^<#)$2DKy(8eEZzWubtw;*>E*G>8HOv$h4Lo|Fd(ob?@o8^B{)aj(-3;bY77F diff --git a/workx/accounts/__pycache__/views.cpython-311.pyc b/workx/accounts/__pycache__/views.cpython-311.pyc deleted file mode 100644 index 92b404fe88666e95b8847c812fc8b79a0f6dc09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1549 zcmcIkK~EDw6rR~_yW7%sK?@i)F$js>9$3T4MB_;#9^@cF&0aR!-O&_ww=lC6@Sq$# za^QwXPZ)z|e@7urXy&RHZWugqa^7r9X%TKrr{7NB`)1~S@4fD~LLrC5m}Nix83mzV z@S{7@oyGAFvDijF@^OGdY-5ak#a9C*RBbg(*{LvXr==|wWJ1l>LfzKGtewS3LC=t% z{*3$#!He=HICDouXjgobVGl``CRq9H+BH%L4bZsA(Jx=6g3an%h1uCFu*T^FgLIyi^fsb0qm zT*khmV~F77p|v1f%vvSYnAYCaBkOgYE=gE(s;;+0BHvmSrZvm;ym}*wnI)4xy}VBI z;sgm005b(_oPOHI=;p@*V`AT!*fS9uXma3=ApqYzAP;(F`~Cw@>s0*! diff --git a/workx/accounts/migrations/__pycache__/0001_initial.cpython-311.pyc b/workx/accounts/migrations/__pycache__/0001_initial.cpython-311.pyc deleted file mode 100644 index d68dcb3a0785bf501c53696a446931b8e938f72a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1616 zcma)6J#5=X6h2b_vZRoXV@0Z4Rkk5iNnqIxVnDSL*o`ZrMIF?M(*hdGo^)rKHbtr= z<)2O-I&=)W)T1XCg*{{`;L)R};skIIZVJ#zn*wLbQ1p(JR5bRGBk%FOyYJrLy~p3< z@hD*9(O-X}X+Hpeb73$7ede;nnBM>bNYFq-s0a zy@QEggGsm;H?dqdx^WFgaxo))<1DqO@)dtZT}*6SF+<%Ugf)P+hMrP)P(KqISz8(gQMrCQBs={6NrRHovW%XvSI!Io_(H4{S{BRbMF z)dn>8m2JFFBNjGQsHs0;8r#8U)v&Ol!v>~)PP>TN$_uPS;GUvky>4&P5Jbqtmesvr zdo{#JI0p+xB*qI`w!=%eWMDrnHtXz-Pl!_4jQ)&8)}M)cd*{VT^^Xp zNta(z-bWJ%*O;T4($ruLTQr3525f1z=M7Tps%_DPrv&dcv2HPt?8&OWgDty(b=%5| zW`esC+)%NGtS9*d4J&SpibA7`!YaO{VaCT4<;ND(c-%}1sk&;j%+MIZOgF-MO~sbU zyNHfFc2l{^d&T4hO=F*{^(B_%GPgk^k2j&|vC%JhGCV%M%<{jkHn1ngmc97;K%GOiZRS>Cmo4oTpm*t3;lExk%+Aiv zDg7vBn)@d2QI~MWddQmWVEDXBj2^7?{K8o9;Okx(L^8ibo$yB;IsHn$MUr=3>^R9g zXa0+6Qc;L*lBCs6T29g;lHHM$B$YoLcT)M6&q%7+P8FS0kw~Ah!(`&#VcD6ucjhA# zrS?S0nJ5wIVMor8?A+0~lbt(zO0tXX?4pxhB+^nxzD?414|7iX?n{fL7ux9sC%r(V zQb+!fWbPmCIGOwBV&6VKx+UUPg_rRe4s)@yjC&g{ yc?I{#{FI6OPiKA0NY5t-LN5q}JOQ6veS5)iA=m>~$&08XO~2+FZ?4&O?fwfN7rW{J diff --git a/workx/accounts/migrations/__pycache__/0002_client_expense_income_project_reimbursement_and_more.cpython-311.pyc b/workx/accounts/migrations/__pycache__/0002_client_expense_income_project_reimbursement_and_more.cpython-311.pyc deleted file mode 100644 index 297c24fa7f9be9ef6329fdfc491e951fe0bc5611..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3746 zcmb_f&2!tv6$e2Q{17FRj4T8I3 z3O5B5{;Pl@IJ6eb5w^mD@I8F~Q;8z+u277=;LW1Qk`1kHsg7nEHj^4A!n%FC)*I{n zN%tDBCP3pi0v0MEBviyY`0#D05*7s4RQInT4#nUF_k>mn+gFf!*3XgeaW(Ay$&{=`^~9D$Ye7OY0!0jvMV zt{Hm=d&k)e;~rW;r4Y~sh~4{#@^8W$l?ih6P_}t>Ou5KB(s4|baA`5zlMO$ z$l7~*{gY_QvvQI>HGMF$+n4s&)_SZmh)PghXINq-D67RVR9UHJHX5eEQnRzOzfv?q zb2L>4c^o&Iy4l8sZ%}x|R1O(VN;TxPR7f#cB^st%hyuG_+aN(HtGKzN)6{iqUFRvBe??EU|tIYmI8l zvT=j2H&s=Qhe{8N&8!b;i3<^SR86^ZIW~)b-BJxerOhPUQJofqVA0QjVyG7y z&G$dn^i6H1_nhcSieXU6k8>~9{;a4M(A&k+EUtKBMPW%rfnhBj1D{e9u&nd6;4Oq9 z>;OVdgHZ7c1nVn%3AV!ZTKp(ysZX@}BBb68o+>O+exO=Cb_o{iv#C!^Q^%^|w~{wZ z2y5NA1*s{aHPxt_Ohi={_reDE5Ed&h-YqXKeaccxK1Tk;!8@i6`(_<48<2&#XQyw; zi?-(yi!UP7vtl-J?^^Sn@CrN?e%_qn^!m@}_0M>F33^dqcbe?!1V=2@ilAXoOKtD+hRptW$R*|zv$?Gb)2vMGT1c<*&1 zkwM870`mAXcR)y-|67vA&vi5MzcZ)F@Z^(qIy|`(`RM|wD8#VHu-zH9>99@GPB$}5 ziTzYz+7B0DhFn3El zK))3K#6{=+EWY&Uu17(V`AY0&&XC;X(+QfJd|o5Dg-&jP<`zi$*WJuHGBW#2q9e0A zWioQTGjg4dTqo(pHx|;7r>Hzd($n3{2pRkE*#sT?uroGC$L2`-YBzJ9j9z{=L`N_0 z-2d^9^x6u&cAsAR3#mOKqZ^&k4LZ6(((P^roG)?bOFKh9%5;92&VNDYD@3tK!R{1n zTHx@xnFL2E#ZdyX%ZZyiVF1XLWpb-VE+g`_O=PDdJ5+W^y7fQ67$xIZo_$2euk6@l zyxbWt)A2G%FC7hrO!CuDKce~R=j%VT>D)~^cZbe>Nxm{j-t6Q}nm0+h>GsF?ijsUq zKz2EChhDGfIB`E=N{t*NrG7Cjz~(ehy1(verFyh75qy+~f=k-XX|EYO0V zMS#T=$71TaMe+-s`~uDM4!2L@t55LN1KH)o9eiW;Zdl}fKz2ECB_VN^Z?=4Q_t@HFOwjE3KUTLjTKbrlZqm}{RIJruJsw`JXN=W`#Js_zd(O%{SKP^pCelb;)X+^ o5O^Od65-)ic?A)Yt?1xg3TI{*Lx diff --git a/workx/accounts/migrations/__pycache__/__init__.cpython-311.pyc b/workx/accounts/migrations/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 504cef4d1ccb9c94881afa63cfd03939f6e1c5c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmZ3^%ge<81k28BO##u5K?DpiLK&agfQ;!3DGb33nv8xc8H$*I{LdiCU!MA*#i>Qb z`sJxfB}JL(`FZ-``9;}aq9Q&iF*!RmFGar`C{&@Jn4FwnnpaY+pPQLplvt9PpI59O wAD@|*SrQ+wS5Wzj!zMRBr8Fniu80+AGRW>?ejxFInURt40|SgGVg`x<0My1V`2YX_ diff --git a/workx/client/__pycache__/__init__.cpython-311.pyc b/workx/client/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 8c9419f50d33967f3b45841ddffb78f41db5637c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmZ3^%ge<81PNXxDIoeWh=2h`DC095kTIPhg&~+hlhJP_LlF~@{~09t%SJ!6IJKx) zzdSXmq$o2zKTkhAzbG3_RKzDGCTFMSrRbLfg(~!ub23x&O7!F7GxIV_;^XxSDt~d< iuVPSy#*tBt9@RGBSQ(fDuK^KrsMi3n-QV diff --git a/workx/client/__pycache__/admin.cpython-311.pyc b/workx/client/__pycache__/admin.cpython-311.pyc deleted file mode 100644 index 666abca2a05e2ecd09ac4aca938cebbfea515b8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 676 zcmbVJze~eF6n@wIXskqsj%}f9mSz@2l!A(ah$2E3O>;*{n;&{fY2Ez;+*}--6!D)) zBw)!TIJp(NNGI=71JOaGk9XgD_i^8Qk9Uu%S^;L~dm;X0@tt3C6TXw_j3u{#0V4-o zWFW-zl2dX8LvTeybR|P_WkW_lP_LZJ@0C0&Mj|{QfM<5*_AiaNfJRzCBmdT5;TSaW zgO94AR5Gz^dzzTaZO0~Fm?~}G3#n;^>GBb|9N3h&oGu?yzelX_KwC;zaL@F*e#_!7 z?GEKjO;sz?w_G0+C!iwZsKi0$z&DtRfgO@mp`>dEA)!w&Wh~6r^pk+lKp&D0E7$cs z{nV%Z3`S=i)9Mos>qAD3^mz|Go4IvyHB;7EyMaSC=qjtkKOnecFcA~0K=1R4=EitK(2%_QqsWOrhyCs2=arz#up E3!3khpa1{> diff --git a/workx/client/__pycache__/apps.cpython-311.pyc b/workx/client/__pycache__/apps.cpython-311.pyc deleted file mode 100644 index 7ac63217b193ae06698842e6bfa77da8fc17e821..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 540 zcmZutze~eF6n>YaQu{+hrO?5_F-x*m5TRBS6uO8ASO= zf2L!}>f~0bQz!3|R1kfa`|f-9zWXlsUaHj+@VLE*aKhJjk*uSTlcmPV6cCU&FdzmY zAi+7H^aLm~@+hRk;X|YJ2sd#H^aPu%PHA_&GG@ue*`ONvjV^h9>L;l76+`* z5v-8JPcrH7CQcyDTE3zx5m`&SEdM1*qD0fI*o3H;D7iJADQN`-T7VW9FV4y85+V7W zncKJBl}WL$MradR=m_dm0%21{>Z(Helso zlwjQk;h+|(*TAB$VWs&-i;^2y{svaKffZ=VirB1ZeKZm~X6zOz_?XGYB@R|TWcfzr z0#WqMzv2Doti=_@ML{OYjDBwlH>9K#=1XJ~t;4PaRYiaeB08}=N=cT}Zi-)Nd2_O; z+^5LeJOPm3U0tZ)Giq!*2JnP=#LU9oDU&ed1dQrY#3I4FM&xM?U-;ndX9IUMLbZVh zB&XBDjH(QLtf1fDQzyoMn9LU?BFyM%%e{RY03xcLoL3kK(zOH|#juYHQ z-zqb;XkvNE2%Or+nM|Y;RzMJN7J^`Lf&ivUGCuQyFkcd7r-$NaSi#YIBE4K7vP4f} zof|KT1=((}yab;ue(s*C5J4#wbA(#qTMC&{0i2gmi&kKAd`g(ObK{2P7k8BIoze7y zV!87G++~%L!i;jAEK$_86<2IG5Y%ZQx8n%36*`_X^bFkSDTF{BP|Vuz0Oj3ZEp(k zjasCuGHph>RzKO8eyRR8W<+jRBe%`S?edix--brop1C%9UV))ZmCu-b1`KhhD=CvZ zy_(zby!zPSMylM1$&HjpYpuOclV)qL(f9e!3%`7Cd@CBQxoT_9Y|R;-xpH172sWdPrTq2yFR|ouDKuvz~z*zVXA2E+b_P zt`{~JAse!L`FcY`Zx|zQHX?b!<9wF?ORCP2y#Ab}5qN=O)Szhi{k?`J@E!Ctngnn> z#?b(Z;$d`Wh`R1=b(}^zie(}lrEOR_i_ngM!lvgCa1AW~=%vZgOJn1f&v7lO{6A~p*WwAw;o!KNbE-D&y}d_EmSKutC7-w?JT;FfAv0ru@*(^%86O~-5tnm({CyKe4-{P3=A z`G4K~$RKbiO-r72Z$lVrX-MVqCY*!>2ej-7$qzybSbFfeBI87I+ZU+u406E@yiry5J zr70EB$)czai>G^Tq)`m-R*>wR4Yj7S{S-J9p$jhUCxCsjjdWm+>sa+~486Q)L^9P# z#*Abj!@ZB5Yb~8CNwcN1+R|;dbeFHyq8*h5Guly&cAC-7^3_@*jcGOgtPhf8B2!Id z%tQtfYb>?mGh?aM#SPtv4Oe5sW^B0p#WCK2Uoes8t)Mh3Dl=-olylA|;k;Tbs!G3e z6r$)e&iNr)UzU28y;$Cxc;0r-4fY<{UTv?@!EpUHFzg(OF4A$Zi6=DePk=2q%d$15 z%{ch4F&B(x{~FU{9Q<$jI2MxqVW`|){^m8dzuD_NJ*CRR@}tH%?9Rr{W&Z$C^6A|G diff --git a/workx/common/__pycache__/__init__.cpython-311.pyc b/workx/common/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index a15a50d74fd08432a9107b8864bdf69a7e9aeae2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmZ3^%ge<81PNXxDIoeWh=2h`DC095kTIPhg&~+hlhJP_LlF~@{~09t%SJ!6IJKx) zzdSXmq$o2zKTkhAzbG3_RKzDGCTFMSrRbLfg(~!u^K)~7^6~MRd6^~g@p=W7zc_4i h^HWN5QtgUZfrf#sE9M6hAD9^#89y++F!o^8+DQ>t595p|8e$R%ZYqvjy68nnQ}_{)8BSWhhzNgxiDF^8;T#FVh0`Mq<;W0qvCAVRGuD0C4KvYct}8e)@N%m;0qI`{*+^&cqW zpXpe#I=NNq)XBRf6-3|5J@>r#KKESieW}&Tz~k;RB2&J;i)0gpoUAlXWt zQpT8TV@L2R#t*US}K8c{ZRAAfoNO`3MXNM!{lcy8qK*J(n+wxQ_;!rio;Sy2rb}n{`*@NCA7bUzc4-e6uV#ll+w$- E0naIjC;$Ke diff --git a/workx/common/__pycache__/models.cpython-311.pyc b/workx/common/__pycache__/models.cpython-311.pyc deleted file mode 100644 index a7d063cb5b9e2ecc03f6d9106c3cad81275098b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2761 zcmb7GJ#5=X6h2CnL|MO;Bin84#C4mbN@5E(9K$Gr0#4H;Z4q^dn*z$fQaUP@L&@$@ za%?w)h71}qcnFXoDA1uz6(mE(j2${;C<+R=LEzX<-fYNI(4p^fW(mi4=Qe0{3~{?kKpdHDO* z2)aD_pE5)P_enNnl}v(?1zmB5=@67DWCoTfWvZ_4zJes53g%Er*_1W4e7mx;{M5rF zu$sP{rj+mO&Ov_{Ns#ZB1O_3va3|Xo;1Rh;R^e{9$52EVcfFl)w^+`&%L8ZJ-2!La zVHbH!eh5L(p3JuA{A9{+Mio1DSu2)RdDbC=Yb4nAiq{E zSJ)P0E9$CN&@sTt*B__9)>Wpb@2a^9E8bo!r@vWacP!YHb4vb>TBhl{VA@RQ*GeUr zx2ZL=zGVhvS+6iz-i|rtoN){hSX#dZP$R9x2v3|cV%zX-9OJ2rcK28Dx1im7wfuY5 z?isgaerv_)YwKLwbo$bE8%ukH&7JbL6EJhgW-4U8)C1-6z7BVSx~^6fGvHJ$lM+oy zmdi>>m1T2CmLZ+0hW)TCe^*sBXGWqqxuWDW^(kRv@CY^nV2ZdFdk?yCxb$IwTKCf$ z9K^&PEY%B{qrB zjf5dREWnQb2S86C$x}NwdGgeYVIz5=nY_T07iyVS*ZA_Xkz8sfmw0js%%S7;1s*#7 zBQrv0o1wEjbhdW66&|l&;ov;+8OPpNCt*`aRqd)*pvk!UQTl_qjxBh=ST@Lo@(1mdwy4P@&5}yP~Eu zlpPiT*gXcY%z}VNbP10IGOUecI;u-IKpTa;Bj!R|W^%i_@% diff --git a/workx/common/__pycache__/serializers.cpython-311.pyc b/workx/common/__pycache__/serializers.cpython-311.pyc deleted file mode 100644 index 35af4f250d30bfeecdcd8d377196a5d2a46c56fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1270 zcmbtTJ8u&~5T3o4O>8GIkPtbD62(niP|!pm5E2Eln+PFYv$}XU$mGt3IY$XJP*9|& zNIJTph(D7eg|#JA=^QzgD`xKeh##VWz1vT7JG0-;eKY%`P*?yO-+z5pRRQpuKZe5{ z7`-ML$Dlxo5F+6V0m@Q#XhpVfM~?3Zu;3*q=PM{zi+96)aB2hmq?r!iOQJlA%KRlN zqq5sjzIDl)%EIJgjg25|e9{k=o(Ijn7rGrZ!nmHElA<&C=xva3 z3>ti)z_*eF1SMddT9g{ibojQi=}^ZM2h7`}LnmnYd>*}3f-$YOeMbr3RTh!h{nZ(g z%_`++GExR%C}pkenXHt}AktEr1u3JJ+7H>zOZj0x2vZNTj>aXY4vn|l(4mUYpvUL; zpH^OzE^*~R@3gV;w$-e>Y2jW1hjJ&V@9Czh9MIBXrQV7n^52kg^ZiHTa7M_r_h`mz z1Ybr^XZhZd+bNcgJbv&tIq@z*?aaYEe-s!Nhs#)GD~Y zld1Q!TWJeF!3VUFZ%O=(plb^uI`Hs(^6kLJ`MkI5*@Ajw7EW>(YmctjaXt3tXXBE+ QC$BE@~ diff --git a/workx/common/migrations/__pycache__/0001_initial.cpython-311.pyc b/workx/common/migrations/__pycache__/0001_initial.cpython-311.pyc deleted file mode 100644 index 7fe61a98f6071d528c0ec8ba192b5a0413742276..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2222 zcmb7FJy07*6uvwCOCU}JEcAmc=OBr&jrfT@5QMQM0^=lxOn&f;nwyh$B@U#Ma(A-9 z6-A1a?xK>4OvV&6nW6NgqFl{fq1j2{nN)P=fyz~OPYAG35`3q9db{s?`+j!cyWe_y zy$pGt{`m*^)WtA=(@FbroG~XU!u-kr2CyZj%x2j#m*rT7W0o1f{mcLxWH)SWr9HyE zI-g~2!2Ugxa2!){g2UdjTvR1pt|%IImMZ|3w0v8W{`Z|tPX6MkNyubbz+^eVW^F|# zYv&l~*l@NL00(Sj#kJu+Uts|Y?7*?_+_Mum$Y?zU4!A6&r@aE)`<^|PV8}SfcsnpG zLHYKGC$GpjNA+}|db{l8zXqnS1H*UOC(wcEVyox^{oo^+-5+>A^+fY>t_D9KS2zCO zDhOT!Gt_|zb%`*14NRm1(N|$fJ~91bmU5s zvZ?X}i|u(?-#(tAtV7d@W$b<-SH(Oj)nnQzuq$7wDZ09i-5@9GQmzEC>&$4vhV7OY z&Vmd}K*O#|wN>iAG%>IUbxAI1n9o547UaB4qp|Rw91*tz$XfC^>~2V^vDG* zZ~1_IIaN~f>n*UeR+U8=BseufU}}_N`4vg8sc^NBu4yC(nr6vX5ly@GRoLXa*u^_-=j87`}VhkA_o?;gm6)Li{{&5k>FRmyGD0Lk>mf8qql;I*0g_ z+2V-%Zj#O96IJmMc*4qrt=x*?(e&2}PJ{WmDg(6Fh$dVCRLi}lIY~;;_lhPbtkwwJTx;nhUbIm>)=dU}j`w{J;PsikN|703{SH#{d8T diff --git a/workx/company/__pycache__/__init__.cpython-311.pyc b/workx/company/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index c34bd8fa9816609d7ac3296507392b63200c6808..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmZ3^%ge<81PNXxDIoeWh=2h`DC095kTIPhg&~+hlhJP_LlF~@{~09t%T_!oFFL= diff --git a/workx/company/__pycache__/admin.cpython-311.pyc b/workx/company/__pycache__/admin.cpython-311.pyc deleted file mode 100644 index d6ed81246fff4f26237d183400fd530b8ba16b77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmZ3^%ge<81PNXxDM>*3F^B^L%uvSXARuEpLkdF*V-7m}#sl@w(r6@grHi!T|XKrc5xB{iqG2xRdsmg3Bk)LR@ysp*-;C8 zh@a_LWo2S3DpM!yBt=4S9Uq_Tdwd+?Jz*m-4>vM!132or9ByQzmFYOgRCzqi=euR<1tdY`qUz%o5ozxIM& z3Ip6GogQDx)Y*ENdZFq z0TANPP)6HQ(IpC1DrVN~0}k7uoC{E{W=BqW`Az^l;<6UFs7tkQpTxjN3>s%@=rUAY{rmYxr<31<(}@e zqPEh8j=*WYxb*vNRpJAxux2zsMskDC5%^hmQ z%pwcb$kq`4{u}+;YR~Q0mwFxzQ^TaGBkVLBGf&O}LA4AQ9obWh6!S_T!Ltp73H5+; zcXkLD}PAw*H4l~18*b2tz7^B diff --git a/workx/company/__pycache__/models.cpython-311.pyc b/workx/company/__pycache__/models.cpython-311.pyc deleted file mode 100644 index bce67e705e480bddf727c797b91b5104134f2573..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2773 zcma)8J#5=X6h2DSuVq_*aVkf)^^?RNaLVqHrvtfTJn?%jLey?cD` zoqq1`4+GMEfBvKRlOKS;>BMcm_F#XJ3|<2fh>Qdp4975Z?2$YTFXwHr9LoR?xCun> zOCYk4S#|ZmmKT7xq&toCi@rOc;NPXw0%Q3biU=jG;IRTCJLhUkA6*zyp&NOv07-+>bBLK)}*Wzd$1x~N-Z@YbCGF4hA= z{8&2@J)k6yMLE#}%1{SNw`WiGfbvNPN~p`TsUA>~E=H}uywX?`? zOHf|XAKWFG8B%1PBq`LP#mY@d+MOf2J|C<)O8lCtC^fBE@Th%+Z-ts`k|Kz_uI$oy z+|5wZPlzkvZ_4#YO?W7)-8|io6TyS578%YfdWenQkCC>Glgm&StU!D7a)GsiJTD6k z$n#d1=SewfN^~6I`A1DbYOe&v3a<+l3H}21$qwM-<>EaJs#@_0tmtZeMUji&DC$F- zJmo7w^&ynS;uFGpT5NAsbSl;4+B1u#HmC`LlO|oGgVw)~nMkh(>7x!4zDgyk?(xW& zx){)MxKF+F8vFoO$=hkiB~UBaMU)UTsWt?+`P z!upDQ3qDh6UA2ODZrtU|_io>|0z$h|d#iQX3N6$nXoFZGGIzqk@~vn(S?sf4ZC>cQ zptmJYh-AnsHNGxa6?IKf1--7w)~O@eZFMgRQ7c4 zU|PfE^|&rVS?6m_S+oUsx!I^d)yn+;T3dTagS-k?>cru;iLPe)XuhMR(o4#U%l17+ zPg!Z-WL9MDfg%$RJKKkEG=#e3_^w}Tt`R@zJfu83Y}5>aQB#!Ip+rBvN^6Ks=tt4! z$wl&?(2Hd^hHxyqeFw#+jMx;8O|_QHBbftZ>oq(uwi)>B_VMHcy zWTJJ$jORAa;&^U5i9Rc#_>vJ{!ttfnEi--o%>quJH`0?hJ&D+qnVa4`i*wUENwoMa z%5g@H!#NJIW5?Mra}z}ujp!ndE)pA#G5D}>`ykubP_$@7i#S>&2(F7*db(K2h?Q`x zL|m7h+8n~!shzJ-cFxGo;p`k@N6qm|n~(AMr5zD1e~-p_W1Pq1JYr9qBNyI$jYlr* z#L>vCF*1usW)VAV<}Yr};QYm%)2PIu{Cy*TALs8QHe;sFy&1x(b7b~SJ!+_y~s zyg4CxI7~kVXPrv?xq6kL(&D8-LiW52!ys*SSy4C5>vZW2GS!!_v8FM`}6&1wH5)b{Psot#rGcyYKw22@hf!B zK!IWg3YIYjiYsAwAu_>$!)s8{S5UELAEJ8kxd8ZuGgua@WCuEpOA0&8H=VY<-1I(a z>n>TyHC_&igS>yz4NC&neB-AWpMi#qDad%$lVMMO&an^9V3|+?`$WEdL$-67rAK;qXnXGm{q*g??pJUuck}MP?yK|&Q^#pH z$dmpj-NwO*k7!Hw9+FWTw}$Zfc9hGjr*YYSe45a(Z7kYH2-}^=HYr#lXw_-EOkVZX zL-HCm&^5SCgemoi^LTv(^KeDE>pKd8m^ewe`&PT5+_NYiozK$0;*&}w7ZiK2MT$*t zFl=Xbi<5=TAo_E=iUf48?j6ENFvd!FaxwdquzoT7j3UAC81wMG`Friz6&0@Us8(nB E2k-&H6aWAK diff --git a/workx/company/__pycache__/views.cpython-311.pyc b/workx/company/__pycache__/views.cpython-311.pyc deleted file mode 100644 index 367ce0ea7b2bd017d964da9d56bab2967adce7be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2093 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 diff --git a/workx/employee/__pycache__/admin.cpython-311.pyc b/workx/employee/__pycache__/admin.cpython-311.pyc deleted file mode 100644 index 2c0c4dccade29fc986906e62a3e46667e5dfb048..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384 zcmZ3^%ge<81h@BZO=$trk3k$5V1_b22LTz=8B!Qh7;_kM8KW2(L2RZRrd;MIW=4io z#w-??mIbUZ7BZd6yo`~7VKop#08l@3FoPz`OAuF+@fK@hN^WKzkip@aTac4qnVRaS z$##n`B`Yy6Jzp<5Kd+=HGpPvVoLl^)Fhw@>G^s3;rT_`V4@;EDKR-aH7`ZK94J(w4>MLD>=eC% z%3mBdKpRSPQtgU(fM$W*UhD}ZJ}@&fGTvZNxPXd2urV;IU0_f}Mj$b^7Ov|I!j~9? TCwN?BkiEhndjW=uKmiW`XYgT` diff --git a/workx/employee/__pycache__/apps.cpython-311.pyc b/workx/employee/__pycache__/apps.cpython-311.pyc deleted file mode 100644 index 5dd947c4cc8e75c5d0b7e5426daaf35527f468fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 546 zcmZut%SyvQ6upzAQu{thNynN6}45y3YobR!~WGp4=M5Su1358Arw!VhpE^bZvA zXSyuex^h>ktFD|$QbF`i=FGWs&z#BJmuj^HJZ{b+eB$f7NS0B^$z0=P3+&EHT1bkNx@M12 znv^Kz>evyyLg`&>I(cOsS;vf>h??Akc2W~X)LvmOesHm)Uxq9Q^*(Dwfo*xNe&q$- z6b7_qw!6$lz0bD>`tokw^!-rthkXA##7PH@SMX;CWK63Yx4V>tw^LkgTL^2{V8_8{wbxG FeFHFAitPXZ diff --git a/workx/employee/__pycache__/forms.cpython-311.pyc b/workx/employee/__pycache__/forms.cpython-311.pyc deleted file mode 100644 index 350bae6a621bccc8b976d505244d76d23168d293..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 903 zcmZuvJ#P~+7`E>-i4sIrsG<`q5?OjIRFSA);A={j3L)KMU1B#R@#RwAMM)>v~NG((ckd>rJTIk zSH|i&7$=A#iaCmKfH9&5HMtR)fr*iUULk6IK-6ZqXXS@yCPJq$bqj3j9H5$euG|`y z_F*id&1Thp~iUK1`hasIYGav;_-2#)EkiwGXob4s# z*kH`%tm+$#%nU4wK_YN7r|0I3GcZnb2X%2!&>7ZS|7X~3ur!n|AtC34$P#74P^1wX zq|I7U76=)H5mNy|qL_}jvde@VjY6&?Le*K?5M*3Bhh4^LB9v6Q^Xx5a_gnGgfN|DN z8zY`}hnz`w+@&3sCSTD?$y-16Unfi?{+P8=(e1rK`eRs{`0T3E zes%%7!((YF{h|mw4$R~s!27>_al1OT7hB%c`BARUy}i%(&%C|wUj59gFHK{+G<8)M zci@oN0ch4NQC3bx!L58*Y%43govf;fE^)D;N~~Um7O*L5UD((6^F(++rJiO&0G1}kc!8?(&9OlD=9^>b WI2eRqhmVgwJ-txtmp246@qYkAgwY!S diff --git a/workx/employee/__pycache__/models.cpython-311.pyc b/workx/employee/__pycache__/models.cpython-311.pyc deleted file mode 100644 index 8d302aaeb2615254fed2a7956a45ae8465fb388d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2325 zcmah~O>7fK6yCMhzw0$gJGLxlkq`5#n_M6U?h*bZ*Wiacysgz9!S zz~u{?c_U9NT3NSwWR?&{Z5t5MRhzO>+lcq+I`OB7PEesB5}^?Oqg_N0@UiYlYJ__5aStzd5#dJUG1z|!uipxZ4CqTJpz*MW80el`CW%Jh;{bRMuipxT9_DTQKYBO*jbsn{ z2Z^TxVvZBWXiwA}+n#4J+2IbOaOQ%cO07Ig4 z$*k)7&d1ONw!{tXj;d30rLv0bs+#4SRl3s$i#r4b?%2UYgMJT7$}8oH&69+d%7&(^ z>$+B=z&lTOse8Gw1DTHR-Wd=Ng?qvpeEs$a@(9LV^dsS?AUGCK-iX6!Xt~VnihuT) zuC=>QfZI0Jmu=iO{AN0bM7MLdX|ck}E0&r2)?zn2aYrp`r5n^Fx!W*xC)bHl&QG4v z^$i|TRlCAe^=_&Y%F*^r2DID9K-7fRp}`+=PXBp$w)4Lze$R=X-$O5y>@glyy+f)h zkE<#uuj&-~301vW)pQKKsxk}#@B7B2OBRTWWvUZ~dB!7ivsdP3^YdJ)f+IYB(PFf` zVtz$8c=XErlB!%?T;vjitK+e`RgL*ukHS`l$K&yN19IP+<;isjg=NBhP@LpRYk9d` zDtE_;^;OHHs#!IPlrby_Jfis}gU8maqFO0ez)m9X->R=PSgMp55|k&3P-}o&Ua?_F zohJetf)6{10#nBmsMtOQ_fzZsTJq55q$>|?OV7g3lP?R7e7z}OcjfD~{NM5kTsraN zwfe2b_kS!o@RwbSvP*Ne(1%l6Q60uXWaNqZLXC$ zhq}+zFZXwHm{XZSOM>|5dArNCJ&uPlX8K zA5I}mLXb#dmVoU$;~+5Y`{Bz{Aok@arjeJQxUxS#L4~N`e+hD!9fx&4>HO=)`@fsO zn$pP`B&Cg|0&=E5^I*e?9`XEBvJo~6(`*FADHLdtWl>C_KwWGC#alYz**ymap<{mz z;$1o&N6sAIX3x$z@>Elva^aVT!`v%;wWv|a#(9jaY37PGN{a2YELnzOnWKJP z@VM?L$FVlBWSLN0ilbV!vf4p;$s76_|A&3%d*|Kn!<*=|Uk+y2G}y*a+dqTY4T_@J z5>7b#pO!G{yzglVpE&!UU8!FLJ{=UBw;tSkh4Zi9E}oJ^h{r*(Ir(7v70$nY&!QKx Fe*wE`B(MMg diff --git a/workx/employee/__pycache__/permissions.cpython-311.pyc b/workx/employee/__pycache__/permissions.cpython-311.pyc deleted file mode 100644 index 032326de3857be78338a5fc9f846d2b6624f3804..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2052 zcma)+%}*Og6u@V^>o06?VQN=(M;Ud{l1eLmSm`Sj)y<}z` zNaaKvIQS4%94f(qN*tmlQFH1kz4cF6MLt*~RYK}1H&^t4a_XBgUfYnS9q&BP*L!c~ zz2D5U-rgPrWjXVT_0u_N| zs~^5@QJ%8wi)=1rRJY# zAg_0*;n9Ob^?^%2R%!!N)rER&`0%O|n{;By=L;_ve~&v;Nhh2<`6D_|i-HCY4z)!+ zHn=;zJKfM=^yK8^DAZS-=3(&h!{8)(7QLqZhOcRFWUdU%g7CKr)h(?Y9>-y54^gy& zi6jsMhZ^xf)HQLj70KD98%r)HU6{y(D@>j$Go6^&E)0-lxBUPyaFUkTxL8P7@-hXg zuqo)dz_U*}dwIB0&GJaE=)|+G?4DZGiFVo#b?$@cEuX{-$MU5z!aGZfxsnQs;St(= zG9$F5TbVh-FMLI6uUUl2&53Y&b}nfyCNm4)Tu(E(Cnh(*B)&o~WsB7CvXC5+ac8|! z$WB*!gS`J~ej~jaSRZ;18u<=ptaM?VG0PG0mby%5WZ2giZ5)Ia`niGfj1t z7l;jmO7n0RWJ?Me2|f;D+x;~>VeiETIxm{~Qfn2eTmBEAqw|(^uRv!z--G`G^-J*Z zZ|@mbXc7J5d#ZXCGes5|*n@7?qn2*yC2 zCqQf?mG4?~O1%K;@;7`a9NV8fNH`$_zUEjD>Wf!x71R_P0Zk@tbR_9x*_GlWsP9Np zTqfzPXzEL?lo1dS2JfeNmjMRyEmW69(E!)SBDBEO)e@1fvz)f`p~z64&ur;!;HxHK zGt2-FGV}ab5b(5NTt}Ze-CslZ90A>tjf4$S3W_MwA&xX$3QmAnik0J;1Sh+8nDuc# z%Ap`#;p#+z6bcFo2tlcl=%GMV&dJhQBT>N>*Ew>kRJ=Fq*pBVcFrNK(=DnGDZ{GX% z`KPh55d!V^KYyV=YJ~ialk;Y@2dyVC*e8@wB_N^VDGH9&Kn*od3w2M2xkmNC2u;rn zEzgpABe27Smk39^5rwE^l~D6Bp%zoNM$Zi#fW;$t;^rmgDjQZM{$te`9l1l?(HFSM zRm5n-crhOoA2J@fs+f8wU)p|`Rr19ky3^5!$(xjN7WIf;D7ar0_N{OyC_i9K=pU2= z29nX9BZSr7ScrX$QEyLLAHiUsFybkcc&bX6b^wy2wwe%62bs|)GvzfExTbob!fJTp z=2=vGOgx+Fa6v<)&pqqj0c@?80J>f<&C{vk8B~Q+v@>V$l-Re(RuL5BlXgiYTrt&(%~v0 zTOHe59Vyj|WLNz`d7?bhD~Yb{OV?_0tx@TG5tp62tM3|A`wo1SJIq}ZDY7P#>p*v( z#(Wo6K4!VA@~dE-&mv3#K#H}U@(xFzgjHVOVuea1%mQcm3gcJ-WO`jo=n)GxMCuFp zqA2L7511E|y=G!jvTaMwy5@v^p5X`y^Ge*fgC<@EcsMhJkFg))ppL!**dvX(#bT@eKd#2%Bf9AMP9rw^Zc9!bSQZ@P9dA05=)}6O%&U@IGZpDLY@~`yF zH@SLxp_YCd`r&f?u3FDCv-Qkt^~_=|^VzS-KQ`fo{gd{fYB$E6>bPXsnw#Jg==LN+ z8bL>pk;T#&hZlJ$ZzcmBb5q_ni3$XaL$nFdL+H#xEwgZ(Sp-k^-fyI?)l%1vQ}gxI z{N8F)SB=>w8H5v*opu$rZA>@GAjCePkLf%5I$A=&{6@!$0UF{7`0rn5V*Pqs>-aJ9Y=@6}q F_rJ*Q{fqzr diff --git a/workx/employee/__pycache__/views.cpython-311.pyc b/workx/employee/__pycache__/views.cpython-311.pyc deleted file mode 100644 index b7f03c79ecfff19d33b761deae369d94df9a0c28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2016 zcmc&!&2JM&6rb63?DbbRA3$n1)QxCFEhOAaOGQy7K$IXQP814Ads!Us;BMIUh8c$t z+5?C7);k?j-P+~cILgeZ+`F1JS&$A z1jcVa{^9(o6Y>UMk}-Cm?7s!&F>#1PJ>pY~`kJLt;%JWU>3+t_C_Uqi`B^Kg^f52z z8jl{iI~Ums5rdI}l7 zfPXwJQ(2Y3s{9XD6Uu5FtW2<)OuR>8O*s?SNqzDiF4r|_+;`cQU_Bv=8;tv|5N^;F z?-cds zc9PmA6YBXC@Wo)p%Cekg0B5R0a2oVtvfR z+ufGWY+Dv=+Yg*g5A~95-`i|?@e0T2G8e3^vo_GJw>(c8_cj^d2KqUEPELpcwRYQU ziI_xbUK2xX$RbQQzT3S4_Hyd5Zm|;+&&fV!|KYm^T8PFLTkCPR6LcH50)AJ)1ADF2 zzRS8!V+*DpG}u9*8>%19ZftWCA}GMT#d&~7gI{D$|NhHsv-ZlY?V59abMDbXG&3J& zjz!h^e)a2@Kljfy!^(1)IS~v0GzpeoKMR)s)A|)3<_PJ~LFFn*uYFv-=Vd;D+2MiV zQwUjvX@p}4#}ObL;U^HVwfGD|388{eMNoU3MeVZ$FtE4)aFn{4zFB*1o_b}T+BN6< z<~(v&A8;3*TimTKhLxoe@-XKAMBd4Syj5sam)&PKHk>2v&uh5d5envT4guNww-kK4 zv|C*YE6ouKFkG`fEyp<%J^K!a1BcDa@uE~^ky$u;%oD1DvUqr!gsPt$y91Y$;0D^~ z5wNw@(Ti(YhF3ZHQH#V!0Sf>(KpF*VqazG_FfPRR!1w%1@WcyMtOD-ol+uVa!ZeA< zY&a|tITH>`L~7x%MC7Y5O(OD1I4lu49S%!G7Q-~z%jk54?vZqSve2LX=Dk|{>!?Xd pr%mOQhC4?8^YiG`r06s-Dd==rIi=ywLjQ|P=(Mby(oEFB`x}>=-D>~< diff --git a/workx/employee/migrations/__pycache__/0001_initial.cpython-311.pyc b/workx/employee/migrations/__pycache__/0001_initial.cpython-311.pyc deleted file mode 100644 index 265d188eb3b131b50c3b097ac48698d1117b5d59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2640 zcmbtWO>7fK6yCL+jqNzb4k3;q*qA^Y2gObhAX=3)#&MuD0rIB`t75hGjLkahU9-E+ zZx1>2&?7f;jfpkmz3H`iG|y-nfG9qR8X2e~W{xU2*4S*L@8u2Ks#2ZaOic^aQS_5hBeBkQ)T zJ#C#6xTwZk>S}9vz=IAT>~wCs=xX}dqu>B+t+(WBX@CdtJKk*vwW3eUs_5A1I;=Yq z(f2PRb{~o8-#M{;XipSX;3I5;mQ8mHCFnU0IXL-IR=r2!ojL|n-w~V8F*f~{jlYd4 z3{LNyIh;AVy8+AUMB9pofl{y~m8=?OQmLn{JK5sE*`3JY3Z(v`mcLdtasTM;RNLFR zo!AHH&i@Z|gU6t|@L$m#tojde7JWx+l6FELxJbM46XKa^wcY}4L?N%0%bH3&qF9i1 z!xTm0n$r|W95R?9j;|);F5;7_rY7cfD47tDu8J;~C4Eg?f@{QMKwXv;c^wkpGSqXL z0Yz0RL*im||1!;{)$P)%s6e%7J|aR@l^<7O+@Z5$B|<@l3NVN}Q?4l58id4a`7Z>KEL zl;cji*{Y%tkEV+BB7-JPo~aREPEwbs!lVd|^`7P;rflkH3WjJ{J(yPL_0)Z)TzadAE~C(hiP%uEws+d`&$?n+w+J;N?#on5oUcT+B=XbDWQ zqavR4BT2VeZ-%Ac=6#cP>Y6iCnhxcn`ZcW)0hA=Qs1XOq5x12fdhHYUd}cwsyEr{f zy6>rQL8HW8+L=zxr&E&|;??Le+wX{!({ zDZfNFnp~l()nqG^$@g!Xt zmy>94wl+A62WL@W?r*1}C^q)2568xK=TK~-7MsAa2^2^jj5CNL`loCC)3|>c1!n5O(`aC1YYGpHJioGc?Zsy}J&)7h;xt61bu_S18`!`D z8z}HyJxHToWl^v02`@Z&;y#{ufF~qWSVysqT5JQyY%`kSVV2?H=dOc>IaFLm;gwo= z1&3EqVAVQ`5oS2DEBxlc*KgzNv-tW0^ss;*9VITcw ztAyfi(q$KVBCn|hyVX2R4aiwtX}43jtxVYed=jmu&_8c^(^HJIoTn-G&i#em_2c?2 zDzd*ghDk}o$@4rdQa*;ba|ge5ZU`OstsgLJ2U?PX)*gPr8WE5{-Nktqw4eNPuW|!URX@kX^{Uc9s#@#Q}CJ(};LI z*O~lpr)Rl;?UrB+69szDGi^0%6uMSvyW@C=l(NG7{CpK#t`%CQ{trU?HJhyF8hpd%Gn2Hk|W2R#aaeEF0y@2uVp6T#d zjD1cX8w>W$PRDG3pU@6<33Z!?KA#*LuGP1mKTqx_VuyL*qeZ zpEg3@YI$zumFMpy;s7_y<_?rs*$3#LlF?WBdwMEBLq)4ki{z0uj@*=Th3 z^W85KQMDFTm!s-N*WBrL4lWVe6<&xjLU)$M^F#s!dYqRv{TzX~iXS7bKRTn-nFn;DGExA{ujr3G%|C}9hWzFldApzgTN}< diff --git a/workx/employee/migrations/__pycache__/__init__.cpython-311.pyc b/workx/employee/migrations/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index c18de7bf8f2d37eef65a008033db03078a403303..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmZ3^%ge<81geL&rhw?jAOZ#$p^VRLK*n^26oz01O-8?!3`I;p{%4TnFHil@;?$yI z{qoeLlA_G?{5<{e{Gx0yQ4yb%n4F!Om!e+|6spiq%`M2uuS`wV&&^CPN-W9D&nwoC vkI&4@EQycTE2#X%VUwGmQks)$SHuc58Dw`cKalvq%*e?2fdNJoF$2W_cGxa% diff --git a/workx/google_auth/__pycache__/__init__.cpython-311.pyc b/workx/google_auth/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 7e64916c0b7d5048fa32ac14467b6c4ee588a29c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174 zcmZ3^%ge<81jhnrrhw?jAOZ#$p^VRLK*n^26oz01O-8?!3`I;p{%4TnFGu~*;?$yI z{qoeLlA_G?{5<{e{Gx0yQ4yb%n4F!Om!e+|6spiq&(BZKNsUh|Ey>W2kI&4@EQycT nE2#X%VUwGmQks)$SHuc55oBjEKalvq%*e?2fdNJoF$2W_$~Y@L diff --git a/workx/google_auth/__pycache__/admin.cpython-311.pyc b/workx/google_auth/__pycache__/admin.cpython-311.pyc deleted file mode 100644 index b8e5a5f61c194e8a904738378c1385b8dbd4b9f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229 zcmZ3^%ge<81jhnrrq~1N#~=<2FhLogg@BCd3@HpLj5!Rsj8Tk?3@J>(44TX@K?*b( zZ?Pt(u;v#3v;tXQ$?+=$8Y9D)iIy^V4%u;}c6uGW5Y_>lIY~;;_lhPbtkwwJYKP b8pjC4#j-%+12ZEd;|&Id3)oN*8&CxRwU9ix diff --git a/workx/google_auth/__pycache__/apps.cpython-311.pyc b/workx/google_auth/__pycache__/apps.cpython-311.pyc deleted file mode 100644 index 64c8e73b8a27d380e672d3cc22acf879f7b4103b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmZutJx{|h5IrX;D*Zr+p`rr=W0z!Q0Hgw<15zb~5KO&q`|y|U<4dY!T`C% zRGDIGOhpYX-mD2>ySy58ua_EkJM6~tY@xG;-Vuzup?>7pm=~uGcUhdb69To6QLkj; zETx{+;grTXN|6w`5*H}FjVw3KY%$)lBDX6^g0>PJP3E3qE?>DgFfKzLghr1yx`AU0 z&$tpnJ8^y5u$pb|F{6h^edEXVhUNRA?hgXl#>8m|!ZNzy_n4OVCR%Bl-yWXG5foRo z^@61o2i75DeO*u&)J$n$}{-u9tI!s K^z)xoa@iN?l8)E_ diff --git a/workx/google_auth/__pycache__/models.cpython-311.pyc b/workx/google_auth/__pycache__/models.cpython-311.pyc deleted file mode 100644 index fb1ca210f184119f6b1f61873d78d3c2f2e1e9d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmZ3^%ge<81jhnrrdR^$#~=<2FhLogg@BCd3@HpLj5!Rsj8Tk?3@J>(44TX@K?*b( zZ?Wa(r=;c-`)M-W;!Md(%uCPLOGzqX21>4E_zY6>%U(aUIJKx)zdSXmq$o2zKTkhA zzbG3_RKzDGCTFMSrRbLfg(~#Z^YhblQsWa#OEUB!=IRwx{^GC!vP*MP?TR>n<}m_s Xu`H1Iz|6?Vc!NRa0yb2{22=q6%T_yD diff --git a/workx/google_auth/__pycache__/urls.cpython-311.pyc b/workx/google_auth/__pycache__/urls.cpython-311.pyc deleted file mode 100644 index 8da82f8724cada5565fe550d15680dc9ae0d498d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 501 zcmZ8cJ8!};5VjKs5+a1EE=cVkV1P_z=xgfS1yx8{P{3ArI8Nk*LYWvlG9Xpmy7Z;? zXY>aIi2-G*)QJs=jj1+mq|&o}_uc8c`_9k#d=3bEtli@e5x-=TTILt5nE-bH0}Ltf zpba6w3RbD&skSOGvXKG^#2Qh%TH1^=@7X66fH(1eY|GIFC!Gth@t@-=b{6Mqpkyv( zQwb(0aH94S{v_IUhYZ5Rbba5Yq~Y|V_9#Prx5KPN+eX>J9FL5QmP2XNY4xl`PvK=r zPfXl(nCn;ioQ7QPmH;l7PIM;-8nTsVMam6XGX+cNM})KR6|6-GY|gB!knqqNkY>a? zuFtHx&wE=pY)C=Eur&~+q4j4?OX^jEn~i?z`M6KXIo}i0*;#gm0fM$#@Zi|zn>B&PqM&%hQ&rx}SbWuH+kSTjPj!|`ns&iCbX=*_koAU62 G(E0`>tcA`1 diff --git a/workx/google_auth/__pycache__/views.cpython-311.pyc b/workx/google_auth/__pycache__/views.cpython-311.pyc deleted file mode 100644 index eaf310270830197696beefd9b170c771478ad339..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2189 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 diff --git a/workx/workx/__pycache__/urls.cpython-311.pyc b/workx/workx/__pycache__/urls.cpython-311.pyc deleted file mode 100644 index 5b54d6e8a63c0cda28c3f1b618ec983aef2343cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2546 zcma)7O-~y~7@jrjZ)^i57}}H$&lSWET z8EHAqWpO=YWaX?eEDswwImcxQJ#Q4`0-q=K5o1&y<@1z2W)$V3F)oh_D2B-B-nj_O z5lmi33nWjFiC3lma$usSN#O|azJ{mQ1azuxh9u8ynEV?MGPGYzI@T?GT$e*x0e~6OBBzEBKB@v0+hyHFMXZ1`mN-I#Fzb zZ9=LU46W%nExRg7s#Uiu>YidYtQNKQNZqN_Ekh!vv{JbwIaW)n+Y&RDV0&B2tnDiX z#ImcIJ8iSh(Dk`Gx3~~XRib1Z;v-x~Ev#Kk$y|e?w)Pbm{p|G4Lp$tfcCn|#TCB)+B&xnTE zR}{O(f-IEZL$q$z^|q>+4M+mtk5Q|`VMh5`=ZV1p1&)W=l7%wf4O3a|rK@)w6_)S_ zWN3SVC*{m&cXX>EK?0+l=9z%UoiCR&f3tU@ECg{yH8isv3q+RjAQ@Vhhl1R?3B^Dj z0MmQK3G!?EEn?dJ_4pRijGZ>Mi9t*!v;w!OH7F75fRGI+(p5?nhur#Ro#}&*BGndg zs79WU`z>`qeQwLr|LX-9^Q)H8Qp|&B6Cp_Q;-@y?jsq*r3{rJP*LRfq;~)vBnRTb2 z)azE;bZiMo0h7)|UqA=3cSibh(&N}k@T^Dy>SRbr$Cf(d(R_)$fJ=2w4)BSrE<43Y zYfD!()2X%|Uza+Qk#LEIoR`|1bSFW9Ed(85|APTL!wt)7fJ|vSP0;sNHMZiXw^=?P zBx^NzcWbpEAC?PL8KiWFvdb>W4%848K|n7dG7JGEU3^x5r2b4)lo2>1!Rm1v$tDex$_$*$7Yoh^2G(EyUb|5KDS zAf+G?ZOtKp$jU!RhA&!>9k?5QLvJ7udi%L_-zLy+q-DVJ*gijQ0C*qlAoUT(%4VqXNfLK{8ad{@I3Q!(?g3s zT6EE3D04?dHAl6@4A~!SJXUF^F^%}WYR5Obc+jq@uF8;_KVBz v7hk#Jh9_?L;zrM6`eo^5$({Mkn_BUwRy^^tFJ3;*B@2mXS@xrIaJ>Hjz2Vn} diff --git a/workx/workx/__pycache__/wsgi.cpython-311.pyc b/workx/workx/__pycache__/wsgi.cpython-311.pyc deleted file mode 100644 index 3d78b8fde24f0e52ab129882d15f4036a064c3ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 686 zcmY*XL2KJE6n?VPW^>mt#@e$ey#zLUg+XDAu|T_!vZaT#bmZbV){EoRmW-t)X-|di zKkT|w$LOC)N5{aYz)rgbdh2O&GDG$xJ?ZH^ecvacZ|mz8XzLs(_K5)e&V#~A{}y+B zz4!tQ+Q0}iBGM*$HX|c8+a>`dgQ60?t`vutXI5e>R|def9t$I20Gd}ixGuJ!y~>Oh zR97#4S|_b~gZhH^!hrTfN=G6+9n&Ng1N4<`Sq(*ToCt}Msy@<1xfexVH$v)3>d{!R zvk0F@IK+q!y)>MsxECX%osO3zQRsUr6ui^Xc<(evEK;N)*L3kbK?T>~p`^Vq!e>+> zT79Jw`O0ya@TJWL9uGvJ$rrJM+<9s5IDIiv!eN+1;ygyKoRJJd$NH0Bv{@zD(*Tv5 z@3~7dvdz7NTC;xWw)T&X8qIpk{cyN<{C@wUGQYbmQK^szvRcl{uB!#OZe|FXJzmJL zeXZWkK~q!HWM$;TFcmzr^g)I_?<`W;+7jP)xXbn2?>fg4Q|XMbtI{wK+&R&2J$GZb z>-ne1nKPGAc+Fua=l2g@FP`{KTG2TA>wx^I-OMC}%#1QA%^-JAfLNCg^EQQ@$^U%{ r#%JpnZ2W+Y$)-Jd@%9F4w@{lvZCcryRJLv^+qaeN%eB0vk2LsSR3yof -- 2.25.1 From 19e3705acbe271826c15878bd8a1f5e80767df9b Mon Sep 17 00:00:00 2001 From: paras singhal Date: Fri, 21 Jul 2023 01:21:44 +0530 Subject: [PATCH 4/6] Remove .DS_Store file and update .gitignore --- workx/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 workx/.DS_Store diff --git a/workx/.DS_Store b/workx/.DS_Store deleted file mode 100644 index bacb587e98bc40e79f88999ceabfb97669a7344d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKL2uJA6n^fqHDw_60Md?;xK2>EY7*iSN;&K{5d;T7C0WCW>cv%?HlV6f&g{o< z;jmxAf8hk*vpuP4;W)&QpY;4a+wa+VpJh8HBGH=-9}%^Q$cHj|w@~~>xSw@H8n%Ty zg&rfPA}OciM5<)N+ch`_90UIv1H5;4=#(U7lu~{FUM6FiO^Z(FyJ&2A+dECa>F@gQ zqK~SKiny3fd-3EA*Ip_mlPfz;US(-HXy1LN@*>XibfN>YVG5VGud{rp%AT6#!>Nvq zOo!j{TZ8uAVsUWP*$)o8-Q|9;czgi6dw8^5w)}hdA3k|87|HWoeK8~ooH<(VSiFJ@ z7`2?{(Il5DKSMjmwCJ2-g{RYjGaU^%~6UehvQa{>s;EQ;G2=G@?%{r|nH%t(A<{)(WXR zxh4ke{_%IOX?!=VW56+Ra~a_CA%HT57Au4L=s=;L06-7TT43`9$}xe(&|+l}JrH3+ zfhJVgCx$TLXb-GkXt6SA!b#Z2hp;mX`$7?Vc8nircM_pNS2_k919b+rOtsDT|MNe; z|LZ}n<`{4c{8tPJuOIb$NXg!<8_Drq8$jPfS=g^Ks6$ZL>sT9n74Jc{pf6wp7+S0h Sq6Ol91T+n Date: Fri, 21 Jul 2023 01:24:28 +0530 Subject: [PATCH 5/6] Updated .gitignore for .DS_Store --- .gitignore | 5 +++-- Pipfile | 11 +++++++++++ Pipfile.lock | 20 ++++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 Pipfile create mode 100644 Pipfile.lock diff --git a/.gitignore b/.gitignore index 62528b3..3c895b2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,8 @@ venv/ # Ignore compiled Python bytecode -__pycache__/ - +workx/**/__pycache__/ # Ignore macOS .DS_Store files +workx/.DS_Store + .DS_Store diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..0757494 --- /dev/null +++ b/Pipfile @@ -0,0 +1,11 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] + +[dev-packages] + +[requires] +python_version = "3.11" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..54a7078 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,20 @@ +{ + "_meta": { + "hash": { + "sha256": "ed6d5d614626ae28e274e453164affb26694755170ccab3aa5866f093d51d3e4" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.11" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": {}, + "develop": {} +} -- 2.25.1 From 16124a9cdc93b6e634689de086a345791d56eb2a Mon Sep 17 00:00:00 2001 From: paras singhal Date: Fri, 21 Jul 2023 01:26:23 +0530 Subject: [PATCH 6/6] Removed every .DS_Store file --- .DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 57d034792c11a2b2dd4fc819255f35e4cbf6d146..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKPfrs;6n_Inwjg$;MTiI8q%rY8umX}84%C7njRy!N2m!3S-Jx#S&NRDQ3KEi@ zgn@*Ce~kgLcheByzO}){o%?hD@|xpw z2WQ36@CMt&cPXd=^g$aqM(x6W*+1p^;CxS~9X9ov@0_OZg;AmKk@WPY`Y!bw{l=iN zU3tdamB@}-VaX0Q#b}jt--&hGS@USSYUbuSi)@e4Kn8d&MVGC|9&>rS#9Pb_Wo$)F z7-=J2HOCGQCua)d*3{(G(YSSZe-icSndzgWv@w#uGrLmV^&5=8kl6vj(@e^c#u$!K z>B`-!?dgoj%Q&OYaYpHZ!OKHeGUnCHa3-70ja(ZY8?BmI$FA+x1Mw^8xzB@=-=drK zz;i22yXLX_dPMi5iuasW&Ea2MSE&2s#I$MyYpk0Rb!_iCJ}UzL%I;BYyh zVuAeJSH(`g_$XFxE5(GoQm}sHVof7iWp;z6^TlOlNMnh)1+%aS%lIFR;22)PYj_Lq z;RAevFYt{JGC;CqgxnxENrBuWGh|MM_QY@N`srtoB96P>)?OuGK4*2b#u29jF4{=5 zU<_Wg#FKmz1`-DT$bdK>ENlXc8aoQ*(Se=30wAW)ECqG(!60HRjYW+eg*bykR4Aef zCHjg%R5;o#?N`*;QK-U!=*tJuPbT_?LgdqNeM`E7ECNbR`hYB1-WXHYqq~2?epJ Vv7-