From db1bfa95ff198ae2da796cd1a7b7df2ad81662e0 Mon Sep 17 00:00:00 2001 From: emile Date: Sat, 24 Feb 2024 22:51:10 +0200 Subject: [PATCH] New changes + introducing addressbook and billimg --- .DS_Store | Bin 6148 -> 6148 bytes osinaweb/.DS_Store | Bin 10244 -> 10244 bytes osinaweb/addressbook/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 194 bytes .../__pycache__/admin.cpython-310.pyc | Bin 0 -> 400 bytes .../__pycache__/apps.cpython-310.pyc | Bin 0 -> 483 bytes .../__pycache__/models.cpython-310.pyc | Bin 0 -> 1941 bytes osinaweb/addressbook/admin.py | 10 ++ osinaweb/addressbook/apps.py | 6 + .../addressbook/migrations/0001_initial.py | 21 +++ .../migrations/0002_country_addressbook.py | 33 ++++ .../addressbook/migrations/0003_contact.py | 23 +++ .../migrations/0004_socialmedia.py | 22 +++ .../0005_socialmedia_addressbook.py | 19 +++ osinaweb/addressbook/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-310.pyc | Bin 0 -> 700 bytes .../0002_country_addressbook.cpython-310.pyc | Bin 0 -> 1161 bytes .../__pycache__/0003_contact.cpython-310.pyc | Bin 0 -> 1005 bytes .../0004_socialmedia.cpython-310.pyc | Bin 0 -> 925 bytes ...05_socialmedia_addressbook.cpython-310.pyc | Bin 0 -> 764 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 205 bytes osinaweb/addressbook/models.py | 49 ++++++ osinaweb/addressbook/tests.py | 3 + osinaweb/addressbook/views.py | 3 + osinaweb/billing/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 190 bytes .../billing/__pycache__/admin.cpython-310.pyc | Bin 0 -> 453 bytes .../billing/__pycache__/apps.cpython-310.pyc | Bin 0 -> 471 bytes .../__pycache__/models.cpython-310.pyc | Bin 0 -> 3362 bytes .../billing/__pycache__/urls.cpython-310.pyc | Bin 0 -> 563 bytes .../billing/__pycache__/views.cpython-310.pyc | Bin 0 -> 974 bytes osinaweb/billing/admin.py | 13 ++ osinaweb/billing/apps.py | 6 + osinaweb/billing/migrations/0001_initial.py | 36 ++++ ...ce_active_service_cancelled_at_and_more.py | 33 ++++ .../migrations/0003_payment_servicepayment.py | 31 ++++ .../0004_rename_payment_paymenttype.py | 17 ++ .../0005_service_recurring_cycle.py | 19 +++ ...ed_at_alter_service_created_at_and_more.py | 28 +++ .../0007_alter_service_recurring_cycle.py | 19 +++ .../migrations/0008_alter_service_type.py | 20 +++ ..._remove_servicepayment_service_and_more.py | 36 ++++ .../billing/migrations/0010_charge_amount.py | 18 ++ osinaweb/billing/migrations/0011_invoice.py | 23 +++ ..._servicepayment_charge_receipt_and_more.py | 31 ++++ .../0013_alter_invoice_date_created.py | 18 ++ .../migrations/0014_servicepayment_comment.py | 18 ++ osinaweb/billing/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-310.pyc | Bin 0 -> 1328 bytes ...vice_cancelled_at_and_more.cpython-310.pyc | Bin 0 -> 824 bytes ...003_payment_servicepayment.cpython-310.pyc | Bin 0 -> 1169 bytes ...rename_payment_paymenttype.cpython-310.pyc | Bin 0 -> 592 bytes ...05_service_recurring_cycle.cpython-310.pyc | Bin 0 -> 779 bytes ...ervice_created_at_and_more.cpython-310.pyc | Bin 0 -> 788 bytes ...er_service_recurring_cycle.cpython-310.pyc | Bin 0 -> 830 bytes .../0008_alter_service_type.cpython-310.pyc | Bin 0 -> 829 bytes ...cepayment_service_and_more.cpython-310.pyc | Bin 0 -> 1172 bytes .../0010_charge_amount.cpython-310.pyc | Bin 0 -> 712 bytes .../__pycache__/0011_invoice.cpython-310.pyc | Bin 0 -> 905 bytes ...nt_charge_receipt_and_more.cpython-310.pyc | Bin 0 -> 1040 bytes ...alter_invoice_date_created.cpython-310.pyc | Bin 0 -> 661 bytes ...014_servicepayment_comment.cpython-310.pyc | Bin 0 -> 660 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 201 bytes osinaweb/billing/models.py | 66 +++++++ osinaweb/billing/tasks.py | 25 +++ osinaweb/billing/tests.py | 26 +++ osinaweb/billing/urls.py | 13 ++ osinaweb/billing/views.py | 29 ++++ osinaweb/db.sqlite3 | Bin 663552 -> 901120 bytes .../__pycache__/urls.cpython-310.pyc | Bin 0 -> 8272 bytes .../__pycache__/views.cpython-310.pyc | Bin 34971 -> 34844 bytes osinaweb/osinacore/urls.py | 161 ++++++++++++++++++ .../__pycache__/settings.cpython-310.pyc | Bin 2646 -> 2668 bytes .../osinaweb/__pycache__/urls.cpython-310.pyc | Bin 8269 -> 1207 bytes osinaweb/osinaweb/settings.py | 2 + osinaweb/osinaweb/urls.py | 145 +--------------- osinaweb/templates/index.html | 2 +- 77 files changed, 881 insertions(+), 143 deletions(-) create mode 100644 osinaweb/addressbook/__init__.py create mode 100644 osinaweb/addressbook/__pycache__/__init__.cpython-310.pyc create mode 100644 osinaweb/addressbook/__pycache__/admin.cpython-310.pyc create mode 100644 osinaweb/addressbook/__pycache__/apps.cpython-310.pyc create mode 100644 osinaweb/addressbook/__pycache__/models.cpython-310.pyc create mode 100644 osinaweb/addressbook/admin.py create mode 100644 osinaweb/addressbook/apps.py create mode 100644 osinaweb/addressbook/migrations/0001_initial.py create mode 100644 osinaweb/addressbook/migrations/0002_country_addressbook.py create mode 100644 osinaweb/addressbook/migrations/0003_contact.py create mode 100644 osinaweb/addressbook/migrations/0004_socialmedia.py create mode 100644 osinaweb/addressbook/migrations/0005_socialmedia_addressbook.py create mode 100644 osinaweb/addressbook/migrations/__init__.py create mode 100644 osinaweb/addressbook/migrations/__pycache__/0001_initial.cpython-310.pyc create mode 100644 osinaweb/addressbook/migrations/__pycache__/0002_country_addressbook.cpython-310.pyc create mode 100644 osinaweb/addressbook/migrations/__pycache__/0003_contact.cpython-310.pyc create mode 100644 osinaweb/addressbook/migrations/__pycache__/0004_socialmedia.cpython-310.pyc create mode 100644 osinaweb/addressbook/migrations/__pycache__/0005_socialmedia_addressbook.cpython-310.pyc create mode 100644 osinaweb/addressbook/migrations/__pycache__/__init__.cpython-310.pyc create mode 100644 osinaweb/addressbook/models.py create mode 100644 osinaweb/addressbook/tests.py create mode 100644 osinaweb/addressbook/views.py create mode 100644 osinaweb/billing/__init__.py create mode 100644 osinaweb/billing/__pycache__/__init__.cpython-310.pyc create mode 100644 osinaweb/billing/__pycache__/admin.cpython-310.pyc create mode 100644 osinaweb/billing/__pycache__/apps.cpython-310.pyc create mode 100644 osinaweb/billing/__pycache__/models.cpython-310.pyc create mode 100644 osinaweb/billing/__pycache__/urls.cpython-310.pyc create mode 100644 osinaweb/billing/__pycache__/views.cpython-310.pyc create mode 100644 osinaweb/billing/admin.py create mode 100644 osinaweb/billing/apps.py create mode 100644 osinaweb/billing/migrations/0001_initial.py create mode 100644 osinaweb/billing/migrations/0002_service_active_service_cancelled_at_and_more.py create mode 100644 osinaweb/billing/migrations/0003_payment_servicepayment.py create mode 100644 osinaweb/billing/migrations/0004_rename_payment_paymenttype.py create mode 100644 osinaweb/billing/migrations/0005_service_recurring_cycle.py create mode 100644 osinaweb/billing/migrations/0006_alter_service_cancelled_at_alter_service_created_at_and_more.py create mode 100644 osinaweb/billing/migrations/0007_alter_service_recurring_cycle.py create mode 100644 osinaweb/billing/migrations/0008_alter_service_type.py create mode 100644 osinaweb/billing/migrations/0009_remove_service_due_at_remove_servicepayment_service_and_more.py create mode 100644 osinaweb/billing/migrations/0010_charge_amount.py create mode 100644 osinaweb/billing/migrations/0011_invoice.py create mode 100644 osinaweb/billing/migrations/0012_remove_servicepayment_charge_receipt_and_more.py create mode 100644 osinaweb/billing/migrations/0013_alter_invoice_date_created.py create mode 100644 osinaweb/billing/migrations/0014_servicepayment_comment.py create mode 100644 osinaweb/billing/migrations/__init__.py create mode 100644 osinaweb/billing/migrations/__pycache__/0001_initial.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0002_service_active_service_cancelled_at_and_more.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0003_payment_servicepayment.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0004_rename_payment_paymenttype.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0005_service_recurring_cycle.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0006_alter_service_cancelled_at_alter_service_created_at_and_more.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0007_alter_service_recurring_cycle.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0008_alter_service_type.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0009_remove_service_due_at_remove_servicepayment_service_and_more.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0010_charge_amount.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0011_invoice.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0012_remove_servicepayment_charge_receipt_and_more.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0013_alter_invoice_date_created.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0014_servicepayment_comment.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/__init__.cpython-310.pyc create mode 100644 osinaweb/billing/models.py create mode 100644 osinaweb/billing/tasks.py create mode 100644 osinaweb/billing/tests.py create mode 100644 osinaweb/billing/urls.py create mode 100644 osinaweb/billing/views.py create mode 100644 osinaweb/osinacore/__pycache__/urls.cpython-310.pyc create mode 100644 osinaweb/osinacore/urls.py diff --git a/.DS_Store b/.DS_Store index 2e450c13d6bda82e145639786447ff1bc91389d1..cb86c58aefd33d00b40ba488884ba980ce4f2855 100644 GIT binary patch delta 20 bcmZoMXffE}$;xhKq@!SDV!Anib&C)HJX{5f delta 20 bcmZoMXffE}$;xhEs-s|RV6-`ab&C)HJP!qe diff --git a/osinaweb/.DS_Store b/osinaweb/.DS_Store index c78a0b7c9261602424d9dc71a66b35600b6f86e1..e94e763ca030bac5a8c7c9500d533d2a2dbde262 100644 GIT binary patch delta 24 fcmZn(XbIR5E5vSQq@!SDVmet*#D4Q)p+r#tT&D*R delta 24 fcmZn(XbIR5E5vSKs-s|RU^H1z#D4Q)p+r#tTs8*> diff --git a/osinaweb/addressbook/__init__.py b/osinaweb/addressbook/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/osinaweb/addressbook/__pycache__/__init__.cpython-310.pyc b/osinaweb/addressbook/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69a70c7cf4c2b1b43e4e915ceb884044cab2ec2b GIT binary patch literal 194 zcmd1j<>g`k0+GizQbF`%5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_&erR!OQL%n% zZe~tuYEDjOWvaeQYH@Z+et~{)VoqkRf=^-rh~rHq+})L zrRPHg%Ttr|6H`)(Qj3d|^7FIxz? BG$sH5 literal 0 HcmV?d00001 diff --git a/osinaweb/addressbook/__pycache__/admin.cpython-310.pyc b/osinaweb/addressbook/__pycache__/admin.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..276ee2d755c308e9b5ed421e78b4c9ff73106b24 GIT binary patch literal 400 zcmYk1y-ve05XbE%X+xV-JOXPN>K8zWFNp=pkap?j#HY%w6GwKUDsKZLZ-l%uMdAsV zxHJqo%je(!&bkjB$8&l%Z?6;Uayn+ZYd7D-0M}Y%i74yOfc!Dg%+T! z^R2AGg$DN0)?i%lY;;q(*`sdock34SLKv|2LF;25Eo+|FZjtI-a`g&A@=s!7tax_6 z8QWSgmO&vEfKsvr_5}7=>x!jZ$>QpTSG{<{zPT=#wzA}`gwq*@Nr&JGGRBAI88%18 c%~npOO(yt6qYunX*G>2JOyvS8=+oz z;uScNw39YVcI?mg7u#kq=n^Nx{SSV*ckhE!30*L8YDdlh0jfz#6H3V=fdJSi0fzL0 zB>{wUGVc7kDl(?^`83b(Otw<%rAJPMx?tke4xK@gP#~_GCJcfk1m;-6`eF)DptTEQ zHZ9Hj6}-x9ZDLr&sR7hBzE$gKRhkEd8tR@rcFe||Iuat2DGE_{g>Vg(_I_W8w@T_m z<`QrvD_sidXvC`F34QLH6#goW`IG#`VqrO^N+W8mcF6D1Zc3B$xzs8hJ;~e$&sLR7 zlX7EKCV7V2#%afH!7VQM$(&r~xsCH(!Q5y5(Duxkh=eqv4K^FIx_8*y*A{`F%2yxf VYrUSs>gc*%^v0jqdcr;#vVVZke^T!5Y8;SxCHFYp2-NMI~!y6FIVEMsh8t zxUtv#ko*w-12tDp{tKLVJ@O{5O;RYO&h%@I)bsjvyXbUU2Cl!Be+y+B#y{k&UlyD_ z+~ov@8=Pgvl!c5L4-MYn<|~7nf=wEKnxP5A;x-U_g;+ow?gDXFhz-Q!O(4w`;s9y! zHjwrTak)Pw$UKydo zZM@D=_Cs0BXG@N!FPUmh_VVN49{X9J{S$g*@HdJjZ-UKO+6FwWBH&QUxg=W&@?;U-h-Bn}|xXOzn$}oyl zD~hmrp3&NmqF?86R!1alR?YrdEDuwWap}UBZ8CJ4HAAwHL^83UsqhS+`AlPXSK|{r zeOonjWlUWehg)FOR&KwT=apPY(wKz!j3pVIMEZnu$ZU|Iq~#_VN>^D4B(avN&Rpla zg)r^C%6E%N!fxbCAKIe_M=*Eh%b+2s=)w%0HD$S2d!h;9o0Ar|5p84Tiw>T3E*jwm zcX2*XwfE~<{(xFupK%nJk|3n|jm{AaPyOek-7Fp35zM@Py{YW~&cahxwk1=(5@ zRCZ;bQp4Oz^IM1$ttD|yve<$!y7-e6xk2{T4EYw(*JN`Rn!=jc98Jqj(B^0l69moc zVhxI6Tbk1Lic&}>ui~T%te~OngK3;*@&mjSo^xD`(SdTOcI_u;MK0urwdehE7FT6F zo5_y=EQ#66MqLIsIV;jcl-CssnB2w#gTQ}-dgYIvKRJl{KR$lcKNw!CQd!kvCPMJ3 zlaudZw`Kwo-yin(9~`LmT3_Ev>HFC8F7A?a>=_o@aC~-;Ny2XsdZpf<5dD8bHHDf| zZgUs(YGOqj^!h+ND7eF$&}>V!heeXc*|Feh95|rWJB$-S(@1`SZvkjN%F8M~mGM-5 zStIP3{Hk6#qZD)RT<+Gcca-MmcvCKWHQ+uk=GA;Gim6aij>zc^>v@alY+r;}E0m^A5 zZPdZrfVj7rq{skm-KxjGdx(Ry&%Rot-ytcJ;wQ#7K6(e&BD;*w4^z(cgQSFp^-!E)F^;Aj~Dr{%){hFgCjU_`MH0tmN!AqoM}RunvoU`!3fEL>L;@7HpMLkbD3>ThUNwYU2-Qewnzccfga(nfsO+OG3 zn_{I(#IjTyOi$6STHU0VM6Y`KRyLjU&Z>5f*b5EUt|R{QBqoaPHX

0oWaZ=>6iJ-8C}O(@JD0r>+MTh?wIpsRZJqTg zKzrRE(!Y{(4gs$L0{9QKK!BtjN_MjWN`WK389s9OIMlsf+oSgW(+B)Zc-}_`)*Jb} zC)A4(8SsFmUdF~O<73Vo=BYmxKYQSV_`?H%Y}WYQA2)y>c*Djyal9e7?Mx*mE|ty; z8)Op2~iB&v(7A-b!R=e20v8uu2ZB> ztQ&B1#gBLrxP22o-hf-A!fo5yyF5N=(TM>J7R5yC6WiU|+IlEeu1XcBwz;hrd1;oG zD>&S-{FmoLVY~67)N*PtE)i^JZd4YVr98oXS~{0h0a&8trM8X4=*9f($~vQRQHD2Y zzWI^N{%~MJStTT;ZA(c-w4kJLZzoTK_Zk1jPbcWIZ3`%Q#;^ne03 Td|Y4MPt0W$kQwlhUHAV5vLID( literal 0 HcmV?d00001 diff --git a/osinaweb/addressbook/migrations/__pycache__/0003_contact.cpython-310.pyc b/osinaweb/addressbook/migrations/__pycache__/0003_contact.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..61b72f78180dc2eed05b2f0977bcef40552e6671 GIT binary patch literal 1005 zcmYjQ&2G~`5cX~y$NB3IL{M%>T*xJ^;EGU7+9Fh1kP1S|#oBnLiBsEab{$H3g==1d z8_&WEpuKWHeFcOlvo@t!Ye)0V&d$t!GnUc4+II1Ue%I&WHn>uu%=&8AXH|db0+&^wq(G#?n3I;FHatIMDpUpatzECtJtb zpbKkDMrfT-6I-+P%$s#)UD$w4>osxV){;~7HMmW+_Du8Wx=5 z&~!ea8cU5~CQ>wRvB_fY z441vi+K8qyj!+Zp;$xU#HYuj25mkj=f^}lb`l>pKi@PiD8La4(yeYGgdW8iVUPv;y zWv$+6j0x!D{<`tQvivYKtuUm<&J!fP6Nc~SBC*aE0p^$iW>Jh5@nn~1JFuZmb2t^MQdXcWRCx) z?5m?5+80{!s|el_?K;4en8YNB7Z~iJJ}YD%oKQ2;`!7Xq!7CjXkxT=r<4gn@o|j6M zv@)LKI9TB*xS8vKX5=x=NI4FJe4*@*)1a-lNcaw~xmRwTvmWoUHMYh0Z}*RXReJS3 y)2xyVU|bSZadPj!aZvp;gX=e|2Nbisd-Kdn>(hbppH!`Q%4~j*#0K}-o!VayfF%(C literal 0 HcmV?d00001 diff --git a/osinaweb/addressbook/migrations/__pycache__/0004_socialmedia.cpython-310.pyc b/osinaweb/addressbook/migrations/__pycache__/0004_socialmedia.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4dbba939e8f1c323cc342e7e05611aa353492a1f GIT binary patch literal 925 zcmYjQ&2G~`5Z+xoiJhcv`Xi_~aRPFwE8vJwp;b|(wn(&O zfaYw#D0xK$6W(VcJfLImlQ-~$e?t0=E3_qjX4|<;H7}(qjBVyhKxPuBx_v?fJ9y0q z36KF5WWWSX>A(Yj+;9P)Ic^CbzlLav*1|t$B0yP?5)po-qAfZLhO(}cq1BRDuJ8)t z5OHro&spk=)dfSZZLx+auG{eFe{Ps)hYO*>n4wY=+uh#YeiA3DD0x!a&WTDS&yGMy zZkZIP`<5N-^?lprvr@&023~@&ovD^N*YkJ+a~m4a_(pyN+x-A~s0_pf&%yfTdtWXY7!GDHH;VM1s-Gx$W#$Jvwsp*SKTEc3;Z$ z1$J-Wxwhf%i0hgS&fXl>Tw6`y-|BoL`XRom$gj)j3@b1ZcDFw%S7doGP2-N0T&e`#=J;XExdqXbZhR>&9X+g0Z(I74L)~+-PSq1lN_-F>Xg#N7@p@stHxymGY*RntO!aZ1AjZ=X2@; KxJW&A$NLMyQw9M5 literal 0 HcmV?d00001 diff --git a/osinaweb/addressbook/migrations/__pycache__/0005_socialmedia_addressbook.cpython-310.pyc b/osinaweb/addressbook/migrations/__pycache__/0005_socialmedia_addressbook.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e712caace8b0ce05e7842a4a776adf46e9edb052 GIT binary patch literal 764 zcmYjPJ#X7E5GAP(%W@0^Es!=_S1*!>7U)nEG4j!&Z92GJvSF{nhYqI8t z^r!S66kI!H>s+8nk5bc!z#Z-#kN0?w)Z=l?Xnnu^fxkFoKON{VpTH5BNyq^Mu2{u0 zUWrU_hlTPo{|y5V{A&h2@-n#cvH--KO@doG!zRMUm0UH&M(Wzwu+o6aoG;y8e?

Pv=y+hQF{-P)eeql^W)jcsg3m-|4IFgHBaeu>waISpA0r8 z#Y!qfrQ{CN6Eqhay-w$alGU?!#oB=nMsAk6O0|)7k=A(G1|4aayu?M?6DECl+>``< z(HA)H)g|j)<9^eC%se6&G2!`lejvEu2i*S?-L?CZ&<;Dg1Qx9vod}2jlS%i5lKbhK f$8Jp5`(fZNI;5P9UUkC1rvJ@MNN!(5{J{GQ$o||5 literal 0 HcmV?d00001 diff --git a/osinaweb/addressbook/migrations/__pycache__/__init__.cpython-310.pyc b/osinaweb/addressbook/migrations/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ea0bf12b428ef982a95b3779d97bbb8050f76be GIT binary patch literal 205 zcmYk0F$%&!5JfkVLWFc4z}CjOfQW^qXc4T##vQ`w?oQZ=gdE8miEVCS<*pX`;lG*x ztItI-Q&IErf$5G3|H@+6MoS)HRH>HP;jTiee|WWU5)1<9$Rb)x1HumF+Hnh|w&WIj z-KKC9>dx$dg}erj{pT?k?Hm4J2A~IGq3h literal 0 HcmV?d00001 diff --git a/osinaweb/addressbook/models.py b/osinaweb/addressbook/models.py new file mode 100644 index 00000000..e31a6052 --- /dev/null +++ b/osinaweb/addressbook/models.py @@ -0,0 +1,49 @@ +from django.db import models + +# Create your models here. + + +class Group(models.Model): + name = models.CharField(max_length=100) + def __str__(self): + return self.name + + +class Country(models.Model): + name = models.CharField(max_length=100) + code = models.CharField(max_length=5) + +class AddressBook(models.Model): + first_name = models.CharField(max_length=100) + middle_name = models.CharField(max_length=100, blank=True, null=True) + last_name = models.CharField(max_length=100) + country = models.ForeignKey(Country, null=True, on_delete=models.SET_NULL) + group = models.ManyToManyField(Group, blank=True) + + +class Contact(models.Model): + TYPE_CHOICES = ( + ('Email', 'Email'), + ('Mobile', 'Mobile'), + ('Phone', 'Phone'), + ('Whatsapp', 'Whatsapp'), + ) + type = models.CharField(max_length=20, choices=TYPE_CHOICES) + contact = models.CharField(max_length=100) + addressbook = models.ForeignKey(AddressBook, on_delete=models.CASCADE) + + +class SocialMedia(models.Model): + TYPE_CHOICES = ( + ('Facebook', 'Facebook'), + ('Instagram', 'Instagram'), + ('X', 'X'), + ('Tiktok', 'Tiktok'), + ('Linkedin', 'Linkedin'), + ('Youtube', 'Youtube'), + ) + type = models.CharField(max_length=20, choices=TYPE_CHOICES) + username = models.CharField(max_length=50, blank=True) + link = models.URLField(blank=True) + addressbook = models.ForeignKey(AddressBook, on_delete=models.CASCADE, null=True) + diff --git a/osinaweb/addressbook/tests.py b/osinaweb/addressbook/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/osinaweb/addressbook/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/osinaweb/addressbook/views.py b/osinaweb/addressbook/views.py new file mode 100644 index 00000000..91ea44a2 --- /dev/null +++ b/osinaweb/addressbook/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/osinaweb/billing/__init__.py b/osinaweb/billing/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/osinaweb/billing/__pycache__/__init__.cpython-310.pyc b/osinaweb/billing/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..77224f8f159e9b67b0671dad07057c6a1db3813f GIT binary patch literal 190 zcmd1j<>g`kf|yq~QbF`%5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_werR!OQL%n% zZe~tuYEDjOWvaeQYH@Z+et~{)VoqkRf=^-rh~rHq+})L wrRPHg%Ttr|lQMxu16f_n1SD7(0PXBD!2kdN literal 0 HcmV?d00001 diff --git a/osinaweb/billing/__pycache__/admin.cpython-310.pyc b/osinaweb/billing/__pycache__/admin.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9eff35c33357ee3e3640eccf50868a93ecc2550 GIT binary patch literal 453 zcmYk1&rSj{5XM_zVTA>aPv8{~H1TYV30_Q$8W%4dOv-k$7W-$@E|7g2Ir>Vydg1}R zcybmn*=aiYebZ?>pB)bS1mkBK;EEFRU5jS4QQYG83X>p$Dx&F}QX*QSty(hzblLvw zK(xi$k-H7`lh`7+w>~OkT(aXniG9QU0H@Tf;)|5^z zTni6FS6czfhmMyegxEnYeF-j%ULadJCrv)BG6kWRf?LZB!srOkywYIGFgU`jDzNL` ztZm)Z!|Nc6GIXc!+~x2^+$nyyPrq;M)r0d4v{V2}$qLvV_>a;SEagh-iw9oR;t7Y! ytY+3r!eL4YM}MsuaLDzc8^ zp0_nL^Yg6ER4rq39FYwhzPV^1~LyUDST z8(!;*aiCzEmLv4D4^;YXwBh%j-a1)2Ds!c!1Ub)=UP$*?8B3R3t9)|JtuJnzs@5i_ z#;JnSLT=lnliW48az%FYfnD=)>FS(Qjt0b$*RkY-H2&OST)CRhv>!cUL!nXFE#)_=;SYsuw?-hS5Iwe@j%z(wnEoE3t zX2D|R76XBt#JPd;5OK zeH}~2Khnup4=u4Fe%1E0CqU+D0c#7J2WDpwN9jE}1`b5pkuFOK4|k6=VPV1FZuf4& zMbhPiAmls@gMHpz<3qmF z-3j0#>UXoRUm5O8({+LWi~WgQb_hX(gYsxok?ybt7-UT~}6J7hXmo>9*_s zGV;P~M35J0--=S+=VCqJArobo1kp!*)sz5{G(pTU&=L}sX6d%BY%_tO@l~4m2gD>W zdnF3Wq3)Dl&5^TAQmxKEI~l0f68!Ngmz5e z9u;JRaX%P%p*svcpC_4H7W9KOS%){1@m+5erpraOUY4R!7%DGEx_CWvtTxH@*Ju;c zXDCgyCQ6@BIEd0)_=-(Bc^af47i9i-h$;5xX$_IX&<~n91`}>w7L*~PPNG3V(Wuh9 z=j9xF3r1Pl=8savDOqDY@kKC9gE*4a^;qzrAN|1hWwSR*(s;nd9TD#$ZKT<|zSXE zgoSjq^_JeoUjy1AT0?1q=FKD!QDqe^`5t0Afq0fWI_RnrhZR8I5)!BAAcdY)QTZr= zY-S))bf->90!lYn6_l~cHn>Ko6qiU4m(~T9)EPz*jfqi78)94} z@n3(UJ*6^>QrWngbbPf*hmCk=xgbpxMoJ@T!Qe8$IhT2Fl5gTuTR&)IN1YI_c^dJ= zRm@fxie=J1CDA4E0f~=Ed`99!2*(T(cjyIde$+m}H2QRP4Om(WF{3hvLPsMraUwug zX?h1@I!@z4N6}HYP#N$TvUbPYAMhw8@*Xp+5rpIn&g0A#+W$l4N>?YYn?9IjyI z!I`N&Cg_=`qW3oW|B}SqqW?KY-$BcZzQTfRGg!Rf?9UjT#)7N67>qT*Of%G8F1=Ua4kW6?nbjEvZGV?Z1eHHd?ym(Mr}L;JKa$mVS?+TV^z zs=A}dCa#gYm$~dzD1R~ztB6x1#787nNKl}piT4GOY<^6?!nF6$5-Q-9MwQ6QE0dtH znb;O#Ttz#ft)^o;<~d?%aPzr7iE7UL8q1h(-ijW?r~={(cz6ZYH-c=P8;u4#T+GE@ zxxE742hDt^3F!7|pbN$Q>vWp0Nl<=gkWJmP{b z#`(zfuvP(kgWOSX6Bke=d+DyQ9rbQ-TI%`h<594Zy>(^zHof@OC7soE6&S^HI*vkC nxtn^r(4$z;6IEK*vd8W>R6^A?W#gUNF13wzt6hPtE?NHovo@sy literal 0 HcmV?d00001 diff --git a/osinaweb/billing/__pycache__/urls.cpython-310.pyc b/osinaweb/billing/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0730172e9075d9c494ae65cd1f04f5f1e52641bb GIT binary patch literal 563 zcmZ8fJC74F5Vo_=+iXIpXlW?YWGSveLWqKrM{%ODgd)eDB)+q~(b&1@e#HF{{*qfN zI%*2U>?RT?#`5UNxu4A%M)vDdf;XJ89|L)61(El(!-kw@np@_$;C#RnJ8_xF zTrTpFXSQ&qC`X*z%GIJCabd4qBbpJHcIsNuat4{MpuL^xO4pCsj*Gdzx?#)aC)Hs~ zo(id*@ykid4>ImkWxTRS4Rq4%rPmhl`t>!jGDI1TB2)*6(fC~$Zr>X?g;c0Ls5|1h zmkvHJpQX9Jm44T+RPQ624Nj<9nqI^s+JG4;n3EHWf3e%ucs9I7dhx%!I=6u3(_BjugGWFgzB7DIS4a2z zTlbZMLI=)R080D--3JJFu|IS-(i->jqdW}cOE6LOuIq#Gvh#2n!MXRdc!EuL>8%^a dTOA%!{nqvRXyF}w1{N0NTDIWrWzCEF&tJ>vqBZ~k literal 0 HcmV?d00001 diff --git a/osinaweb/billing/__pycache__/views.cpython-310.pyc b/osinaweb/billing/__pycache__/views.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e82059e1ac8e549d1f73d74dd120cb03daae55b GIT binary patch literal 974 zcmZuw&u`N(6tv z(~?v)q10klvdT%EHFiq3@)8fR%e~S+wdZ~rRACb0Uckd|Bx&*13F)_QP>J-Z@g>w8 zB%)9k6YKVQGWn66}5ugp4<)}ft`mq)g=Z^R`i;z*fm*F z?M&Q>$0E$A6VM0Fc8I+KXI_X+o| z=mWC!bQiUD7M8oa@VI}4&d+XF!N&R`G^3Y4fv@kIeMbugWqryCdB8dN$I@;}vfuoU$OLqvNtWIeXS_L%Q5 z>QYAi-|S1|$$dON?zc^E^Ueb`7E&C97*X_6yo>^#qUfVxF*_K9FVnjonk^cvsd=~`( literal 0 HcmV?d00001 diff --git a/osinaweb/billing/admin.py b/osinaweb/billing/admin.py new file mode 100644 index 00000000..f5b4f91c --- /dev/null +++ b/osinaweb/billing/admin.py @@ -0,0 +1,13 @@ +from django.contrib import admin +from .models import * + + +# Register your models here. + +admin.site.register(RecurringCycle) +admin.site.register(Service) +admin.site.register(ServicePayment) +admin.site.register(PaymentType) +admin.site.register(Invoice) +admin.site.register(Receipt) +admin.site.register(Charge) \ No newline at end of file diff --git a/osinaweb/billing/apps.py b/osinaweb/billing/apps.py new file mode 100644 index 00000000..8cfa4e05 --- /dev/null +++ b/osinaweb/billing/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class BillingConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'billing' diff --git a/osinaweb/billing/migrations/0001_initial.py b/osinaweb/billing/migrations/0001_initial.py new file mode 100644 index 00000000..0897df32 --- /dev/null +++ b/osinaweb/billing/migrations/0001_initial.py @@ -0,0 +1,36 @@ +# Generated by Django 4.2.5 on 2024-02-23 19:17 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('osinacore', '0058_remove_point_total_time_hours_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='RecurringCycle', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('months', models.IntegerField()), + ], + ), + migrations.CreateModel( + name='Service', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=200)), + ('description', models.TextField(blank=True)), + ('amount', models.DecimalField(decimal_places=3, max_digits=5)), + ('recurring', models.BooleanField(default=False)), + ('customer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osinacore.customerprofile')), + ('project', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='osinacore.project')), + ('type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osinacore.projecttype')), + ], + ), + ] diff --git a/osinaweb/billing/migrations/0002_service_active_service_cancelled_at_and_more.py b/osinaweb/billing/migrations/0002_service_active_service_cancelled_at_and_more.py new file mode 100644 index 00000000..8d40e96b --- /dev/null +++ b/osinaweb/billing/migrations/0002_service_active_service_cancelled_at_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 4.2.5 on 2024-02-23 19:22 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='service', + name='active', + field=models.BooleanField(default=True, null=True), + ), + migrations.AddField( + model_name='service', + name='cancelled_at', + field=models.DateField(auto_now=True, null=True), + ), + migrations.AddField( + model_name='service', + name='created_at', + field=models.DateField(auto_now=True, null=True), + ), + migrations.AddField( + model_name='service', + name='due_at', + field=models.DateField(auto_now=True, null=True), + ), + ] diff --git a/osinaweb/billing/migrations/0003_payment_servicepayment.py b/osinaweb/billing/migrations/0003_payment_servicepayment.py new file mode 100644 index 00000000..55ccf341 --- /dev/null +++ b/osinaweb/billing/migrations/0003_payment_servicepayment.py @@ -0,0 +1,31 @@ +# Generated by Django 4.2.5 on 2024-02-23 19:35 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0002_service_active_service_cancelled_at_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='Payment', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ], + ), + migrations.CreateModel( + name='ServicePayment', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('amount', models.DecimalField(decimal_places=3, max_digits=5)), + ('date_paid', models.DateField()), + ('service', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='billing.service')), + ('type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='billing.payment')), + ], + ), + ] diff --git a/osinaweb/billing/migrations/0004_rename_payment_paymenttype.py b/osinaweb/billing/migrations/0004_rename_payment_paymenttype.py new file mode 100644 index 00000000..ef9d8b3e --- /dev/null +++ b/osinaweb/billing/migrations/0004_rename_payment_paymenttype.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.5 on 2024-02-23 19:35 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0003_payment_servicepayment'), + ] + + operations = [ + migrations.RenameModel( + old_name='Payment', + new_name='PaymentType', + ), + ] diff --git a/osinaweb/billing/migrations/0005_service_recurring_cycle.py b/osinaweb/billing/migrations/0005_service_recurring_cycle.py new file mode 100644 index 00000000..54052842 --- /dev/null +++ b/osinaweb/billing/migrations/0005_service_recurring_cycle.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.5 on 2024-02-23 19:39 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0004_rename_payment_paymenttype'), + ] + + operations = [ + migrations.AddField( + model_name='service', + name='recurring_cycle', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='billing.recurringcycle'), + ), + ] diff --git a/osinaweb/billing/migrations/0006_alter_service_cancelled_at_alter_service_created_at_and_more.py b/osinaweb/billing/migrations/0006_alter_service_cancelled_at_alter_service_created_at_and_more.py new file mode 100644 index 00000000..e4678508 --- /dev/null +++ b/osinaweb/billing/migrations/0006_alter_service_cancelled_at_alter_service_created_at_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 4.2.5 on 2024-02-23 19:40 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0005_service_recurring_cycle'), + ] + + operations = [ + migrations.AlterField( + model_name='service', + name='cancelled_at', + field=models.DateField(blank=True, null=True), + ), + migrations.AlterField( + model_name='service', + name='created_at', + field=models.DateField(null=True), + ), + migrations.AlterField( + model_name='service', + name='due_at', + field=models.DateField(blank=True, null=True), + ), + ] diff --git a/osinaweb/billing/migrations/0007_alter_service_recurring_cycle.py b/osinaweb/billing/migrations/0007_alter_service_recurring_cycle.py new file mode 100644 index 00000000..6e1a3b3d --- /dev/null +++ b/osinaweb/billing/migrations/0007_alter_service_recurring_cycle.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.5 on 2024-02-23 19:41 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0006_alter_service_cancelled_at_alter_service_created_at_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='service', + name='recurring_cycle', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='billing.recurringcycle'), + ), + ] diff --git a/osinaweb/billing/migrations/0008_alter_service_type.py b/osinaweb/billing/migrations/0008_alter_service_type.py new file mode 100644 index 00000000..13e89742 --- /dev/null +++ b/osinaweb/billing/migrations/0008_alter_service_type.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2.5 on 2024-02-23 19:43 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('osinacore', '0058_remove_point_total_time_hours_and_more'), + ('billing', '0007_alter_service_recurring_cycle'), + ] + + operations = [ + migrations.AlterField( + model_name='service', + name='type', + field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='osinacore.projecttype'), + ), + ] diff --git a/osinaweb/billing/migrations/0009_remove_service_due_at_remove_servicepayment_service_and_more.py b/osinaweb/billing/migrations/0009_remove_service_due_at_remove_servicepayment_service_and_more.py new file mode 100644 index 00000000..e0cad0f8 --- /dev/null +++ b/osinaweb/billing/migrations/0009_remove_service_due_at_remove_servicepayment_service_and_more.py @@ -0,0 +1,36 @@ +# Generated by Django 4.2.5 on 2024-02-23 19:57 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0008_alter_service_type'), + ] + + operations = [ + migrations.RemoveField( + model_name='service', + name='due_at', + ), + migrations.RemoveField( + model_name='servicepayment', + name='service', + ), + migrations.CreateModel( + name='Charge', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('due_date', models.DateField()), + ('is_paid', models.BooleanField(default=False)), + ('service', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='billing.service')), + ], + ), + migrations.AddField( + model_name='servicepayment', + name='charge', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='billing.charge'), + ), + ] diff --git a/osinaweb/billing/migrations/0010_charge_amount.py b/osinaweb/billing/migrations/0010_charge_amount.py new file mode 100644 index 00000000..265c8294 --- /dev/null +++ b/osinaweb/billing/migrations/0010_charge_amount.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.5 on 2024-02-23 20:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0009_remove_service_due_at_remove_servicepayment_service_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='charge', + name='amount', + field=models.DecimalField(decimal_places=3, max_digits=5, null=True), + ), + ] diff --git a/osinaweb/billing/migrations/0011_invoice.py b/osinaweb/billing/migrations/0011_invoice.py new file mode 100644 index 00000000..1a91cc13 --- /dev/null +++ b/osinaweb/billing/migrations/0011_invoice.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.5 on 2024-02-24 19:22 + +from django.db import migrations, models +import django.db.models.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0010_charge_amount'), + ] + + operations = [ + migrations.CreateModel( + name='Invoice', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('invoice_number', models.CharField(max_length=100)), + ('date_created', models.DateField(verbose_name=django.db.models.fields.DateField)), + ('charge', models.ManyToManyField(to='billing.charge')), + ], + ), + ] diff --git a/osinaweb/billing/migrations/0012_remove_servicepayment_charge_receipt_and_more.py b/osinaweb/billing/migrations/0012_remove_servicepayment_charge_receipt_and_more.py new file mode 100644 index 00000000..798b25a9 --- /dev/null +++ b/osinaweb/billing/migrations/0012_remove_servicepayment_charge_receipt_and_more.py @@ -0,0 +1,31 @@ +# Generated by Django 4.2.5 on 2024-02-24 19:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0011_invoice'), + ] + + operations = [ + migrations.RemoveField( + model_name='servicepayment', + name='charge', + ), + migrations.CreateModel( + name='Receipt', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('receipt_number', models.CharField(max_length=100)), + ('date_generated', models.DateField()), + ('payment', models.ManyToManyField(to='billing.servicepayment')), + ], + ), + migrations.AddField( + model_name='servicepayment', + name='charge', + field=models.ManyToManyField(null=True, to='billing.charge'), + ), + ] diff --git a/osinaweb/billing/migrations/0013_alter_invoice_date_created.py b/osinaweb/billing/migrations/0013_alter_invoice_date_created.py new file mode 100644 index 00000000..efbac552 --- /dev/null +++ b/osinaweb/billing/migrations/0013_alter_invoice_date_created.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.5 on 2024-02-24 19:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0012_remove_servicepayment_charge_receipt_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='invoice', + name='date_created', + field=models.DateField(), + ), + ] diff --git a/osinaweb/billing/migrations/0014_servicepayment_comment.py b/osinaweb/billing/migrations/0014_servicepayment_comment.py new file mode 100644 index 00000000..db3948e5 --- /dev/null +++ b/osinaweb/billing/migrations/0014_servicepayment_comment.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.5 on 2024-02-24 19:38 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0013_alter_invoice_date_created'), + ] + + operations = [ + migrations.AddField( + model_name='servicepayment', + name='comment', + field=models.TextField(blank=True, null=True), + ), + ] diff --git a/osinaweb/billing/migrations/__init__.py b/osinaweb/billing/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/osinaweb/billing/migrations/__pycache__/0001_initial.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0001_initial.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a74fa3692a8c62fd39dad9a8a0d6481f362c5783 GIT binary patch literal 1328 zcmZuxPj4JG6rb_V?#%wlCTWw>6ll4wkaiY{N*oYsx*@277KxP0TrBVS?ZlfId+>PE zZmw|M?*KSivl^q|9`|#v@Dslv3Gp2!c`FIN@OX;{KX^O9R-W+b`GA0kJOZ1?$w zoR>&dS5-o?RB1>)oJ<~nLNyfX9B8S8G}I`=a%w~Y^i(Z%MVaKZKxaGr2GXV0LT1xd znu8^RA6xS5XcX81TN*`E4a@+y{Zfm9=@mVLmF-rb10o`60VDcH6VCWp&ku~s7=3(Q{A9AsurZJ$GxYEim!qp3a1nLM){R;Z;k zmn{sq#71*%G31cqS#nzDEQPAc!bK)bWxINFAIuSQn6qVWY?Ll5qYBU$2XA>AZ*-+r zbCE+$qNLblV2}r+Y>1Wxq~>DxCg@r$)DU-#o+_0ClMU(}V>^gUeu?Gn@CB2ZvV_lUR1<xH;GpdYFuv>}`zG9^V zUsuAUs)%c{VhOM6MYCz6db5Vn(SHVHY23JEGIq-`z>H9`kEK?6r|(4?`vnYoo0$6oT-)zwFP5)D6s ze}vpp(Or#%V4Uo63liA!Xy%*oJU-hV9Au2v$Ez>62^st9jr|poaYUzmKmr(W&1zoq zIw%9qUN8tC{J@u7fcve%u9Ot1AUq>=rY!pIs4^Kx>g zP=m`WX)4qjLCB77CbI9WFm~IdG`P#E24y!mT?{=^(8(-wi5OA|;W8m8b+3{1T!{C* z)IPnp0M}>$O{K7H0-r5;3h>;QZRkyz%b!`RQJMjA=`j@=)y%GO_duUnbC+TV@%>Zr zmWFK$td&M;TAgEYjP1M5u8UKtRek@ZTzlhntGde8g>99Qg~9Ehz)G5>9l*+*hWs2KVDZSFHAqyZYd!Nc`=<3D3er=62XSP(`(qe;L6p7ZF(|Fz_5xP3B< kTspRQ2#bNNfug~AL%^urqbe?WJktJz`@+71+rgdi7XeD-TmS$7 literal 0 HcmV?d00001 diff --git a/osinaweb/billing/migrations/__pycache__/0003_payment_servicepayment.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0003_payment_servicepayment.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..32e8e2bdc2cf6f2dafe68a4abda62ce00aa4636c GIT binary patch literal 1169 zcmZuwJChSf5Z;+xtyVfocVONmjwqC951djI=MzU!J`Sn`iIS<&cHc5$_Tk;tVc~!P zQvCx5cIeDM$2BR@#ZD-wI_TMzI0Dbsc6Il3PtW&tPuA~u9a_Kt_b>k8InD=be80%& zJfOcEkpKsnb`mya37>LiZLZy^_s9Vky!Q@x$mXqg?z9Db;tX4-l;aG!=_V>JWTmpS zG=7o+>hdVEd*81<84u_${~>|Slz}tlz+yIa(VNqW;G#cogGXNrd}yz{V-5lN0_Z?@ z#g2K*VQaOUM%OUL|?QCIh-k={(thB*g8R(psglxwE^wdsmcLoTvzej4E}4-^@s+ z5o(PfWF=$@BFPFg?PqeCU|Jcj;Q4{!kHIXIpoEFoW?&^sG&52NprnTU0){IBCSqc z3Oa4sbZ!QK5tY;;*D}JgISy2;s?v0TE+ulQz_iy$-)yf57_A+2L?=rHwH_-pyvmGM zEpt4N%Nx)`m#)3gy0}4gi<=~lh8ImBYD7Yqt{{?Np^@~S5Wg;@wkWLym}3fNM4ulagnC$6w)Oz&qE?-7#+7P;x{zm!Fz_Qnmq^~RVGHEQ>OdZOa=7h>9nxlH5C zaG05(hC(B4+WUKx{k`!+6HFdH7e_A+4^21AaXs*VJB58ZwfOWld_jDaAtp*AbzUto z9Ao*a%JOhRElhqql({vYma2-fB+N>c$}q*(wbGPtoUd^ft~n0RpI1oZ_7kX@Vi^ed~c+*R%YT?2ZO<;D6&}&rVQNf`x#nXV ea#Z`P^S@3Sw2TdWvfT`62VV_w;g2q`mFNq@Tc#HP literal 0 HcmV?d00001 diff --git a/osinaweb/billing/migrations/__pycache__/0005_service_recurring_cycle.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0005_service_recurring_cycle.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..984b44d84b107eec8e3accc0e773caef066dab50 GIT binary patch literal 779 zcmY*Xv5wR*5Vf6bHXH5)LSiMLfOeZ?3y>%fIwUv>mZjLcCXJPihn0il1Ut(qR7lX? zhww+pEfqZ#2pyAT_wE?U6TcbHJkN`(!^4Q6Wxu||A4MM|2| zlBJAxm?t(OGkpO$ZYfzYsiebsFWL%HL}vy1!W~b*=644u3L!U z2$y|=4oFG`NtvJ86l3HFi%Ag_QE@|zL~!nj@wtbm4n&BY6E}IYCqw4( zS}G;=#yyzN=a0Anot41rtSvz|`)||M;KmlrN121WX&~PkgGD@Va|I`#rn@HbWu{Ne zJm>4JQf^Xdjx#|6jx`mAqkcx-ap959kKRd8VmUi>A@AdyyNGijF_^dQ&+j)-LStfkL}*_40%-PZtXp zRW??b(Uy2 z>o)`I5Ilo*vJ)w}`qv3+{+RD{MeYBSHLhFJJ+3h>dmCLynCD;kBSsmWQvYvw(dTD@ yn+#O3Soc~C3f#R6#>0z>_oJIT-H2W9t6_)TeT=#A>7e>EeD1^s=x(u)PQ8Cch2-)8 literal 0 HcmV?d00001 diff --git a/osinaweb/billing/migrations/__pycache__/0006_alter_service_cancelled_at_alter_service_created_at_and_more.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0006_alter_service_cancelled_at_alter_service_created_at_and_more.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20ba2f546350a650a56d002be7df6a18ce2dbcf9 GIT binary patch literal 788 zcmZ8fy^ho{5cW^9n}j`y>S!pakkVYXfeN8RI&lpg#X%DxS>AY9dCzecCwr%@xpp6e zf;ZqfsE}JKdT5XkjFY{+)s5xR%s2M@e0FnikP(!xzrMpaM#zug>`R2sG4A#;Dn%4E zq^2dUS;;6lC5kD2O%w;Z;GcNORdi1B_$QtvIrCYq=T3IIv8^A~jRMnFA+#?kI>)%% z_o#rBRFRS?I;SOvXc313Fj|aNge%@KHQLcYH!q*j1g&hpeJqQ4@9&xF7fD+6dxg!s6UCZq|T zf+bi5w$ji#d?wg}6hE_Ug~);vEjt7Eo&gIEh|E zaRTi{*DQ;3X>|SQm0SkrO{=@Asf(u7Ru&endP6Owoi_t`1+!wyUvc}$1v2?m$k5r2 z&wbYJhIYINX%!Cd;Apva;meJ1_g^j{j7R^Xm{CS2H2OPO+0F`B^1HutmPbAvnmkgo do~E9fK6p#RU_A(&CC>)JpVLq-)Vt{`sv zL-<1o`O1kqCnU6tlWuplmOS#C8PD^)aXlO+1lNy0Kj8@@MTiDo8 zl(}BkmWhRpx|iToY&3s;%x5RlsZHt?Y)AE-n1^`1Gk?FOC)j+GLM0WTWO4)PD`-yJ zdX>&|C9B8NeC5FVMz%#=rFA29o@zMj4n1q{JcC8LRV%&v7%7hD*^L?OwCq(LuQta0 z#{ur8g;d=TJBGe V&}X9;z4|XHq9#OhhedSX`wvJG_<8^U literal 0 HcmV?d00001 diff --git a/osinaweb/billing/migrations/__pycache__/0008_alter_service_type.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0008_alter_service_type.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7334e90ca7a5dea1eee8658f307942b87b0cdc57 GIT binary patch literal 829 zcmZ8f%Wl*#6t$hlWI`*kfJz7!h}{TjG8;ryRj5@Pj3-BPsg%?U_h>eo zJ>`Y!!15OCsVo6+DVNsbE-zQ50ynzYaACJ<;LXRoSF+Q_nhMI!^OL|ub5-aQEK76r z0XlH3GsvgCFI*QjxUi4WI|)i0P1aq)d!BQba;#1)72tY}^AF2H`CN|#G@u3OQbKF- zDTzyWeaQ#@78~@$0d^)A`X#JfEUH2;jALT%lD-mr9yi+CJ>J{hf9_J#z{Qh&CH6j^ z?!&K7*<0+i&7hVF0R34(wh!$|XPWG|P_lmbs%SiT-O8>sb=LckX*lZ_gXln>!92UL zIJ^EJ8JfNMpV{8JX|uBaGmdb!cQ7P`1&oG&!kAG;H)!}f`P*kqVmBUirefYZF?4_L nikuFAaC+Ic-SGYS+pjwvRu7PK$@bv+Gm5BYY{9ai*4A3oi#t<#8Dnuy@G@g~|WV5N3s{+f`_y@m9ouT0hemye$$HUk&W4UZAG1n+t1T(6&Dx_YC zXSgyEg)5n>Gc@B<)U&F={`Ao11PU;LYD6s+#LNVMCvus$XWN_NrqJozLdEo!Xm&LOTcoju+iM6AN_(wb&5x}2s1k97Rv8X66L$U5jGEwJ|M+14@SzF!0X9KZjhhL6 z@8~3ib~oFyARlgsy#&^&!7bl3RBK=l*!KkH^@E;h*$h+B=*dZq0v4(MyXArU&<^*(t6 z&N%b_^SsOd8+^zn>`TV~A$w%)yUhDH{Hu$PeG~QdPGQzvNKgA$7shG-w5R7p>f4m9 bi@jv5*Y1+Tg!lTZ|DM^(d=fi6WV`NXlRRGX literal 0 HcmV?d00001 diff --git a/osinaweb/billing/migrations/__pycache__/0010_charge_amount.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0010_charge_amount.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..22e9a6517b75379377529593ee7dbe6e2aeaa182 GIT binary patch literal 712 zcmZ8f&2H2%5Vqs&ZZ>Kw!~r;RLfT6cjz|c#QUw<%hr%Tn%bOX37uyMOcH2F}wGYCh z@CL|NPJ7`2Dxoq-3azj-U*=E#X1=)I-%lBxUspfyJ7?@?AKX1L1xIB52>~$RhFM;4 z8x;{}uNXuizA_NVSK^B(1jJ`-G1*ZsTSOtXx@uLYYv;q%)_}&Bed+E=C^#bXIRUbQ z11lon6)yzFt4U9Q)71=On7|ZfmjaSYLDdB2M3sj5o4*`HI9qCCw5y8aJkOuW7Hz#j z>9O7D5+$rrs_wsRqqY`Z_peDgkhX3yOv{g|t>~+4y>{JB(0scI!MlYB2Y{uv%E-p3 z5z>=Qb}~MHc0-Sl%Lni^u2uq z*q{S+rAFUI#2k`ifS3IpZ9h%eI~k`KQX#DyyixlbYadd>09TvrJt^QbwAvt&K3mLA z(0}UcCOcC`+sCg}(+6+8?#kL`wbxE%4$lV%R?1cNm^{a2b|Z0i`){*6f11ltE;*`o z*lgSW=}gJ|eS(BVBEF6%5s&x*kAElEL;Z9Shxy2G2+Lu~VYQ)nyTj-`qI*K}e3a`2 Ny;kOXj(gDq@ds21&0PQh literal 0 HcmV?d00001 diff --git a/osinaweb/billing/migrations/__pycache__/0011_invoice.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0011_invoice.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b6394d837c454f888d30d82b3a9e9d7aa5b01f60 GIT binary patch literal 905 zcmYjPO;6iE5cRGd$4;C;QA>NOs`ivi4EL&{fT)lPJwPwMtenhX*7&Py2O6&Jl^@by zRB5k0@fWJ9bk+`qwRSXbJo|R$?UbX@z@ioGYW&G9>z4tKmqTEOc0DBn7O>39S;TT4 zab_^j?8y0Gfep@g3mjx=@0%U4=mgV{2=BOU%z>m7s|8a#1w8e^^|W za*moyI6ct(aDU?HAYL@3m@AAM1U;;j%wx3_7r4}ZjY`Iuyha^dqMDU8iXzTYk7Y+B zibXy{bqmz-gpo|~SCL_nH0L@1;=8AvFg2nS?RNECk5^SrJ4{D;Q&RO#%kG{@%%DD= ztZ7fQ7Yd;VLXhx_49O3K__ByIlWY)Rg#}MN?Mc2??0L`WRORe5z$LFY~ahWf6x3UbRklZx_76S-4Use3-hBUUOTl zRG(H$WyZQsyM95&v$*ZtIX%vv@-f?FW5)kDf4#dlYvO9ZyI@Lv8F^YoqUZmE({7@t iXRYk&rAaaT4-IzS8;WV~ZTAfC7@^uFv(7!XY5xN!Oa_bq literal 0 HcmV?d00001 diff --git a/osinaweb/billing/migrations/__pycache__/0012_remove_servicepayment_charge_receipt_and_more.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0012_remove_servicepayment_charge_receipt_and_more.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0c265f01ee28d900779e83177be7f8a0ddd7a669 GIT binary patch literal 1040 zcmY*YJ9E=O5Z0Y!Te2M`Krk&8j47go7KTYkCJZwq%p{>vb0d2<$~k(NlkDJB%s}gw z8cKS8&9zi%DH&dSl0%Zy+-e`XZ+E|2$eH!R0uJ^^3v6T~`-2_Y;2c{0#sz(A^|@}RGFDM3^Q_R#GzUzIp$T1ICjBPu z;ynqpLIzgIfyFGe(HS*N0&wP>^d>Z*iLH?fEqYw=pgnhvIdsV9K^K%5kZ=gri-}U+(lB-Hj$? zE`|!D5Ou2^8o4<;VZKaJecYGYAG|nmH7E7 zctbQ40j4rRr2Cy=u!F^EnU8}*Vm`h9DjFN(bs@`Po(6d#vna^$tWsbUWpQ3R&u|bd z*b1&@J)mKEEL7E-xXHMvIi+AV6e7xi_)@qwo+Fk1 z_gS0yjQ=9rGyX1fe!D-abNe(@UR~K53@Uaj4y)i*@3r=j@U{E2zNcr*q%^r#c+dU^ DuO2lt literal 0 HcmV?d00001 diff --git a/osinaweb/billing/migrations/__pycache__/0013_alter_invoice_date_created.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0013_alter_invoice_date_created.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0bb1bd71ca2fe32da9bd9cb83fee38084cd9b22d GIT binary patch literal 661 zcmYjPF>lo{5VqqaFE45(1QIh7B1==sicpcB+6Br`v1GCQ;v@JG+rds>_2x2`nH5I< zl2<1F0un0cyodTuy32icr@Q+uwugr$LAhN7_(lo&6~Vrw2u@M`Q#6uD+7nG1s*@(6 zyCO?f>35Xtq>+uT0mR93MYF;SRK21NY$8s)a#p zG?gmkjm2L-*nsOF*I zQ=Icqa%>~7dO-hx^UqhJkF^m=7{Ev{tpe{7Pyip{p5`pB6#Q3*jim%uZ*Y-Tu+W%3Dena z@EVr&?o{>tzp3$PFSv-C@!c)>{wa=zjf?LfNA+>9f+Q@xOS6O~G^gp`;%>@cRB4!R j#~sP#M0g@OCGQDsy+_z56fd`@dxcMr_&DQ1@|gVt*nPWS literal 0 HcmV?d00001 diff --git a/osinaweb/billing/migrations/__pycache__/0014_servicepayment_comment.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0014_servicepayment_comment.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1d44bdb1b1e58c612759b3190baef39d723ed91 GIT binary patch literal 660 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 mvr&x^1nm_v&8N%Ki;MRwYenZLVbi delta 1435 zcmY*Z4{Q@v9KLt=?yj%x-E-?ku^^N&Hb}?TxdH1IH83G$kTGDBpdoD?2P@m!(snxk zU^W0x z^`2_0#bjbLka2-M$Ezt8wL|S)9#V&~#R%|-p0yT_P`O6<6=!Q;jZ2c2G84=XO?XJ^ z!zuil`jov048}9sh&fLSuz^ISFw+#VV~by9|$S#V8G{(Fsk~npbp$tm(NsK zFrp@BmRQP}ED#uzMZDq0NjnS6v*b(v_KV_%i+$pT)8GY^To@4?1(%_`&BC_Hl6qdT}xKS8UNT z9IN!aCgBK!?`m0}sB+B!{jDEe`*&a@wL4K3?Y=!73BUlk)C()bs>)^a+sz@8mp~Q3LyC{V@#M_}D%;Yti=#cepvN==RWT9} z7-^aTiEcg{p5sQ%Zezrlk5=Jo`4kY)dUhXJjT%(1a}jBY!RdlK-J_)EFdQeki~j@9 z@us%rOhJVS4qZEXrY~l-~*P%jzJGcUhacOX>}Jj7g(el zjKvyof%f%2|7xXGZ*2PY5%@Vr?x2{;*#=NbIPA}6_%BiIm=46jMngUv_=pxXEE*}qDRQr{&u60?pY@^ z&gZfXLt5Ji4pt+nuw^Kr50MTf3==++c$s1FyLg8Dsa!8>U2s=AvjahPk^~ko@=fVu z^IlV{@g-Dh$Q17JSKu*j8`}UDP`iiC1$03dN==#~4l`zOnGqG?s!+u5;6}M()(bAn z*JQg1nJvZ>n$vHX#9`nRtrZpQre^Y15|t7ui45doHAp9Y?9h&>N@pRWAm}IS+4DH#Xb=E9)b8%#2tv+`+*p5|tCrvbMocWl* zX@Z_kAQK={6DVq87_cEN-kh(;MlITv7YRhXP40-VS#dW6T0&vcb=s7j`2^eS^S4Bl qM||!Rd|0Uu_*aK>?AnELs=I>bk{?Y3d{N1327|JpTaS+sr-y diff --git a/osinaweb/osinacore/__pycache__/urls.cpython-310.pyc b/osinaweb/osinacore/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8c0a9a4ff74c06eb1f8b6fcff9504dd57b14a77 GIT binary patch literal 8272 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 CPGM>Q literal 0 HcmV?d00001 diff --git a/osinaweb/osinacore/__pycache__/views.cpython-310.pyc b/osinaweb/osinacore/__pycache__/views.cpython-310.pyc index 9547110ebb4c094ce7e7b6ee93955a11f35be6cd..da66c5d1c7f3a234fbc47aff5d91eae414088fbb 100644 GIT binary patch delta 8362 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 diff --git a/osinaweb/osinacore/urls.py b/osinaweb/osinacore/urls.py new file mode 100644 index 00000000..d113a59c --- /dev/null +++ b/osinaweb/osinacore/urls.py @@ -0,0 +1,161 @@ +"""osinaweb URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/4.1/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" + +from django.urls import path +from osinacore import views +from django.conf.urls.static import static +from django.conf import settings + +urlpatterns = [ + path('login', views.signin, name='signin'), + path('logout/', views.signout, name='signout'), + path('', views.home, name='home'), + path('my-projects/', views.my_projects, name='my-projects'), + path('my-tasks/', views.my_tasks, name='my-tasks'), + path('my-notes/', views.my_notes, name='my-notes'), + path('customers/', views.customers, name='customers'), + path('addcustomer/', views.add_customer, name='addcustomer'), + path('add-business/', views.addbusiness, name='addbusiness'), + path('businesses//', views.businessdetails, name='businessdetails'), + path('businesses/', views.businesses, name='businesses'), + path('addstaff/', views.addstaff, name='adduser'), + path('staffs/', views.staffs, name='users'), + path('staffpositions/', views.staff_positions, name='staffpositions'), + path('createproject/', views.create_project, name='createproject'), + path('createepic//', views.create_epic, name='createepic'), + path('createtask/', views.create_task, name='createtask'), + path('createtask//', views.createtask_project, name='createtaskproject'), + path('createuserstorytask//', views.create_user_story_task, name='createuserstorytask'), + path('createtaskepic/', views.createtask_epic, name='createtaskepic'), + path('projecttypes/', views.project_types, name='projecttypes'), + path('businesstypes/', views.business_types, name='businesstypes'), + path('references/', views.references, name='references'), + path('tags/', views.tags, name='tags'), + path('dailyreports/', views.daily_reports, name='dailyreports'), + path('add-dailyreport/', views.add_daily_report, name='adddailyreport'), + + + + + #Detail pages urls + path('businesses//', views.businessdetails, name='businessdetails'), + path('customers//', views.customerdetails, name='customerdetails'), + path('staffs//', views.staffdetails, name='userdetails'), + path('tasks//', views.detailed_task, name='detailed-task'), + path('projectdetails//', views.detailed_project, name='detailed-project'), + + + + + + #Fetch urls + path('get_tasks//', views.get_tasks, name='get_tasks'), + path('open_tasks_for_project//', views.open_tasks_for_project, name='open_tasks_for_project'), + + + #Modals urls + path('add-status/', views.add_status_modal, name='addstatus'), + path('add-note/', views.add_note_modal, name='addnote'), + path('add-project-note//', views.add_project_note_modal, name='addprojectnote'), + path('add-file/', views.add_file_modal, name='addfile'), + path('add-user-story//', views.add_user_story_modal, name='adduserstory'), + path('add-credentials/', views.add_credentials_modal, name='addcredentials'), + path('update-status//', views.update_status_modal, name='updatestatus'), + path('add-point//', views.add_point_modal, name='addpoint'), + path('show-points//', views.show_points_modal, name='showpoints'), + path('add-time/', views.add_time_modal, name='addtime'), + path('timeline/', views.timeline_modal, name='timeline'), + path('add-projecttype/', views.add_projecttype_modal, name='addprojecttype'), + path('add-businesstype/', views.add_businesstype_modal, name='addbusinesstype'), + path('add-reference/', views.add_reference_modal, name='addreference'), + path('add-tag/', views.add_tag_modal, name='addtag'), + path('add-businesscustomer/', views.add_business_modal, name='addbusinesscustomer'), + path('add-staffposition/', views.staff_position_modal, name='addstaffposition'), + path('statusmobilemodal/', views.status_mobile_modal, name='statusmobilemodal'), + path('userrecentativities/', views.user_recent_activities_modal, name='userrecentativities'), + + + #Delete Modals + path('deletecustomermodal/', views.delete_customer_modal, name='deletecustomermodal'), + path('deletebusinessmodal/', views.delete_business_modal, name='deletebusinessmodal'), + path('deletestaffmodal/', views.delete_staff_modal, name='deletestaffmodal'), + path('deleteprojectmodal/', views.delete_project_modal, name='deleteprojectmodal'), + path('deletetaskmodal/', views.delete_task_modal, name='deletetaskmodal'), + path('deletenotemodal/', views.delete_note_modal, name='deletenotemodal'), + path('deleteprojectnotemodal//', views.delete_project_note_modal, name='deleteprojectnotemodal'), + + path('deletepointmodal///', views.delete_point_modal, name='deletepointmodal'), + path('deletetaskpointmodal///', views.delete_task_point_modal, name='deletetaskpointmodal'), + + + #Save Urls + path('save_note/', views.save_note, name='save_note'), + path('save_project_note/', views.save_project_note, name='save_project_note'), + path('save_project/', views.save_project, name='save_project'), + path('save_epic/', views.save_epic, name='save_epic'), + path('save_task/', views.save_task, name='save_task'), + path('save_business/', views.save_business, name='save_business'), + path('save_business_modal/', views.save_business_modal, name='save_business_modal'), + path('save_customer/', views.save_customer, name='save_customer'), + path('save_staff/', views.save_staff, name='save_staff'), + path('save_status/', views.save_status, name='save_status'), + path('save_projecttype/', views.save_projecttype, name='save_projecttype'), + path('save_businesstype/', views.save_businesstype, name='save_businesstype'), + path('save_reference/', views.save_reference, name='save_reference'), + path('save_tag/', views.save_tag, name='save_tag'), + path('save_point/', views.save_point, name='save_point'), + path('save_staffposition/', views.save_staffposition, name='save_staffposition'), + path('save_dailyreport/', views.save_dailyreport, name='save_dailyreport'), + + + #Edit Pages + path('edit-project//', views.edit_project, name='editproject'), + path('edit-epic/', views.edit_epic, name='editepic'), + path('edit-task/', views.edit_task, name='edittask'), + path('edit-customer//', views.edit_customer, name='editcustomer'), + path('edit-business//', views.edit_business, name='editbusiness'), + path('edit-staff//', views.edit_staff, name='editstaff'), + path('edit-projecttype/', views.edit_project_type, name='editprojecttype'), + path('edit-businesstype/', views.edit_business_type, name='editbusinesstype'), + path('edit-reference/', views.edit_reference, name='editreference'), + path('edit-tag/', views.edit_tag, name='edittag'), + path('edits-taffposition/', views.edit_staff_position, name='editstaffposition'), + path('mark_point_working_on///', views.mark_point_working_on, name='mark_point_working_on'), + path('mark_point_working_on_task_page///', views.mark_point_working_on_task_page, name='mark_point_working_on_task_page'), + path('mark_point_completed///', views.mark_point_completed, name='mark_point_completed'), + path('mark_point_completed_task_page///', views.mark_point_completed_task_page, name='mark_point_completed_task_page'), + path('mark_point_paused///', views.mark_point_paused, name='mark_point_paused'), + + + + #Fetch Urls + path('getupdatedlaststatus/', views.get_updated_last_status, name='getupdatedlaststatus'), + path('getupdatedactivities/', views.get_latest_activities, name='getupdatedactivities'), + + # TO FETCH THE EPICS OF THE SELECTED PROJECT WHEN EDITING A TASK + path('fetch_epics/', views.fetch_epics, name='fetch_epics'), + + + path('get_point_total_time//', views.get_point_total_time, name='get_point_total_time'), + + + + #CUSTOMER DASHBOARD + path('customerdashboard/', views.customer_index, name='customerdashboard'), + path('customerinvoices/', views.customer_invoices, name='customerinvoices'), +] + +urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ No newline at end of file diff --git a/osinaweb/osinaweb/__pycache__/settings.cpython-310.pyc b/osinaweb/osinaweb/__pycache__/settings.cpython-310.pyc index 59bd7568a7bb6a529d5c40413cbcb851c41cbd64..8e5fa6136367101bd1d645a946088c0c924a0cf6 100644 GIT binary patch delta 68 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/', views.businessdetails, name='businessdetails'), - path('businesses/', views.businesses, name='businesses'), - path('addstaff/', views.addstaff, name='adduser'), - path('staffs/', views.staffs, name='users'), - path('staffpositions/', views.staff_positions, name='staffpositions'), - path('createproject/', views.create_project, name='createproject'), - path('createepic//', views.create_epic, name='createepic'), - path('createtask/', views.create_task, name='createtask'), - path('createtask//', views.createtask_project, name='createtaskproject'), - path('createuserstorytask//', views.create_user_story_task, name='createuserstorytask'), - path('createtaskepic/', views.createtask_epic, name='createtaskepic'), - path('projecttypes/', views.project_types, name='projecttypes'), - path('businesstypes/', views.business_types, name='businesstypes'), - path('references/', views.references, name='references'), - path('tags/', views.tags, name='tags'), - path('dailyreports/', views.daily_reports, name='dailyreports'), - path('add-dailyreport/', views.add_daily_report, name='adddailyreport'), - - - - - #Detail pages urls - path('businesses//', views.businessdetails, name='businessdetails'), - path('customers//', views.customerdetails, name='customerdetails'), - path('staffs//', views.staffdetails, name='userdetails'), - path('tasks//', views.detailed_task, name='detailed-task'), - path('projectdetails//', views.detailed_project, name='detailed-project'), - - - - - - #Fetch urls - path('get_tasks//', views.get_tasks, name='get_tasks'), - path('open_tasks_for_project//', views.open_tasks_for_project, name='open_tasks_for_project'), - - - #Modals urls - path('add-status/', views.add_status_modal, name='addstatus'), - path('add-note/', views.add_note_modal, name='addnote'), - path('add-project-note//', views.add_project_note_modal, name='addprojectnote'), - path('add-file/', views.add_file_modal, name='addfile'), - path('add-user-story//', views.add_user_story_modal, name='adduserstory'), - path('add-credentials/', views.add_credentials_modal, name='addcredentials'), - path('update-status//', views.update_status_modal, name='updatestatus'), - path('add-point//', views.add_point_modal, name='addpoint'), - path('show-points//', views.show_points_modal, name='showpoints'), - path('add-time/', views.add_time_modal, name='addtime'), - path('timeline/', views.timeline_modal, name='timeline'), - path('add-projecttype/', views.add_projecttype_modal, name='addprojecttype'), - path('add-businesstype/', views.add_businesstype_modal, name='addbusinesstype'), - path('add-reference/', views.add_reference_modal, name='addreference'), - path('add-tag/', views.add_tag_modal, name='addtag'), - path('add-businesscustomer/', views.add_business_modal, name='addbusinesscustomer'), - path('add-staffposition/', views.staff_position_modal, name='addstaffposition'), - path('statusmobilemodal/', views.status_mobile_modal, name='statusmobilemodal'), - path('userrecentativities/', views.user_recent_activities_modal, name='userrecentativities'), - - - #Delete Modals - path('deletecustomermodal/', views.delete_customer_modal, name='deletecustomermodal'), - path('deletebusinessmodal/', views.delete_business_modal, name='deletebusinessmodal'), - path('deletestaffmodal/', views.delete_staff_modal, name='deletestaffmodal'), - path('deleteprojectmodal/', views.delete_project_modal, name='deleteprojectmodal'), - path('deletetaskmodal/', views.delete_task_modal, name='deletetaskmodal'), - path('deletenotemodal/', views.delete_note_modal, name='deletenotemodal'), - path('deleteprojectnotemodal//', views.delete_project_note_modal, name='deleteprojectnotemodal'), - - path('deletepointmodal///', views.delete_point_modal, name='deletepointmodal'), - path('deletetaskpointmodal///', views.delete_task_point_modal, name='deletetaskpointmodal'), - - - #Save Urls - path('save_note/', views.save_note, name='save_note'), - path('save_project_note/', views.save_project_note, name='save_project_note'), - path('save_project/', views.save_project, name='save_project'), - path('save_epic/', views.save_epic, name='save_epic'), - path('save_task/', views.save_task, name='save_task'), - path('save_business/', views.save_business, name='save_business'), - path('save_business_modal/', views.save_business_modal, name='save_business_modal'), - path('save_customer/', views.save_customer, name='save_customer'), - path('save_staff/', views.save_staff, name='save_staff'), - path('save_status/', views.save_status, name='save_status'), - path('save_projecttype/', views.save_projecttype, name='save_projecttype'), - path('save_businesstype/', views.save_businesstype, name='save_businesstype'), - path('save_reference/', views.save_reference, name='save_reference'), - path('save_tag/', views.save_tag, name='save_tag'), - path('save_point/', views.save_point, name='save_point'), - path('save_staffposition/', views.save_staffposition, name='save_staffposition'), - path('save_dailyreport/', views.save_dailyreport, name='save_dailyreport'), - - - #Edit Pages - path('edit-project//', views.edit_project, name='editproject'), - path('edit-epic/', views.edit_epic, name='editepic'), - path('edit-task/', views.edit_task, name='edittask'), - path('edit-customer//', views.edit_customer, name='editcustomer'), - path('edit-business//', views.edit_business, name='editbusiness'), - path('edit-staff//', views.edit_staff, name='editstaff'), - path('edit-projecttype/', views.edit_project_type, name='editprojecttype'), - path('edit-businesstype/', views.edit_business_type, name='editbusinesstype'), - path('edit-reference/', views.edit_reference, name='editreference'), - path('edit-tag/', views.edit_tag, name='edittag'), - path('edits-taffposition/', views.edit_staff_position, name='editstaffposition'), - path('mark_point_working_on///', views.mark_point_working_on, name='mark_point_working_on'), - path('mark_point_working_on_task_page///', views.mark_point_working_on_task_page, name='mark_point_working_on_task_page'), - path('mark_point_completed///', views.mark_point_completed, name='mark_point_completed'), - path('mark_point_completed_task_page///', views.mark_point_completed_task_page, name='mark_point_completed_task_page'), - path('mark_point_paused///', views.mark_point_paused, name='mark_point_paused'), - - - #Fetch Urls - path('getupdatedlaststatus/', views.get_updated_last_status, name='getupdatedlaststatus'), - path('getupdatedactivities/', views.get_latest_activities, name='getupdatedactivities'), - - # TO FETCH THE EPICS OF THE SELECTED PROJECT WHEN EDITING A TASK - path('fetch_epics/', views.fetch_epics, name='fetch_epics'), - - - path('get_point_total_time//', views.get_point_total_time, name='get_point_total_time'), - - - - - - - - #CUSTOMER DASHBOARD - path('customerdashboard/', views.customer_index, name='customerdashboard'), - path('customerinvoices/', views.customer_invoices, name='customerinvoices'), ] urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ No newline at end of file diff --git a/osinaweb/templates/index.html b/osinaweb/templates/index.html index 3abaa971..c364b383 100644 --- a/osinaweb/templates/index.html +++ b/osinaweb/templates/index.html @@ -308,7 +308,7 @@
{% if task.status == 'Open' %}
+ class="w-full flex justify-center items-center text-white text-center bg-blue-500 rounded-t-md py-5 px-3">

{{task.name}}

{% endif %}