From 657a6641a14315fb8789673196b261db61129cff Mon Sep 17 00:00:00 2001 From: emile Date: Wed, 24 Apr 2024 22:33:45 +0300 Subject: [PATCH] new --- .../__pycache__/models.cpython-310.pyc | Bin 6049 -> 6039 bytes .../billing/__pycache__/urls.cpython-310.pyc | Bin 722 -> 722 bytes .../add/__pycache__/views.cpython-310.pyc | Bin 4178 -> 4132 bytes osinaweb/billing/add/views.py | 13 ++-- .../migrations/0043_alter_invoice_pdf.py | 18 ++++++ .../migrations/0044_alter_orderitem_active.py | 18 ++++++ .../0043_alter_invoice_pdf.cpython-310.pyc | Bin 0 -> 667 bytes ...044_alter_orderitem_active.cpython-310.pyc | Bin 0 -> 650 bytes osinaweb/billing/models.py | 4 +- .../details_templates/invoice-details.html | 2 +- .../templates/listing_pages/invoices.html | 16 +++-- .../templates/listing_pages/orders.html | 10 +-- .../__pycache__/models.cpython-310.pyc | Bin 233 -> 1744 bytes .../__pycache__/views.cpython-310.pyc | Bin 9580 -> 9831 bytes .../customercore/migrations/0001_initial.py | 59 ++++++++++++++++++ .../__pycache__/0001_initial.cpython-310.pyc | Bin 0 -> 1969 bytes osinaweb/customercore/models.py | 38 ++++++++++- .../add_templates/customer-add-ticket.html | 14 +++-- .../listing_pages/customer-invoices.html | 19 +++--- .../listing_pages/customer-orders.html | 14 +++-- .../listing_pages/customer-tickets.html | 2 +- osinaweb/customercore/views.py | 29 ++++++++- osinaweb/db.sqlite3 | Bin 1085440 -> 1155072 bytes .../__pycache__/admin.cpython-310.pyc | Bin 1851 -> 1877 bytes .../__pycache__/models.cpython-310.pyc | Bin 12781 -> 13133 bytes osinaweb/osinacore/admin.py | 1 + ...er_staffprofile_staff_position_and_more.py | 31 +++++++++ .../0071_projecttype_department_ticket.py | 33 ++++++++++ ...tupdate_ticketreaction_ticketattachment.py | 42 +++++++++++++ .../migrations/0073_alter_ticket_regarding.py | 18 ++++++ ...name_dare_added_ticketupdate_date_added.py | 18 ++++++ ...remove_ticketattachment_ticket_and_more.py | 45 +++++++++++++ ...le_staff_position_and_more.cpython-310.pyc | Bin 0 -> 1184 bytes ...jecttype_department_ticket.cpython-310.pyc | Bin 0 -> 1403 bytes ...treaction_ticketattachment.cpython-310.pyc | Bin 0 -> 1429 bytes ...073_alter_ticket_regarding.cpython-310.pyc | Bin 0 -> 759 bytes ...ed_ticketupdate_date_added.cpython-310.pyc | Bin 0 -> 643 bytes ...attachment_ticket_and_more.cpython-310.pyc | Bin 0 -> 905 bytes osinaweb/osinacore/models.py | 19 ++++-- .../templates/add_templates/add-project.html | 2 +- .../osinacore/templates/customer_index.html | 2 +- .../edit_templates/edit-project.html | 6 +- .../generated_invoices/invoice_$24-1425.pdf | Bin 0 -> 31965 bytes .../generated_invoices/invoice_24-1425.pdf | Bin 0 -> 31748 bytes 44 files changed, 419 insertions(+), 54 deletions(-) create mode 100644 osinaweb/billing/migrations/0043_alter_invoice_pdf.py create mode 100644 osinaweb/billing/migrations/0044_alter_orderitem_active.py create mode 100644 osinaweb/billing/migrations/__pycache__/0043_alter_invoice_pdf.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0044_alter_orderitem_active.cpython-310.pyc create mode 100644 osinaweb/customercore/migrations/0001_initial.py create mode 100644 osinaweb/customercore/migrations/__pycache__/0001_initial.cpython-310.pyc create mode 100644 osinaweb/osinacore/migrations/0070_department_alter_staffprofile_staff_position_and_more.py create mode 100644 osinaweb/osinacore/migrations/0071_projecttype_department_ticket.py create mode 100644 osinaweb/osinacore/migrations/0072_ticketupdate_ticketreaction_ticketattachment.py create mode 100644 osinaweb/osinacore/migrations/0073_alter_ticket_regarding.py create mode 100644 osinaweb/osinacore/migrations/0074_rename_dare_added_ticketupdate_date_added.py create mode 100644 osinaweb/osinacore/migrations/0075_remove_ticketattachment_ticket_and_more.py create mode 100644 osinaweb/osinacore/migrations/__pycache__/0070_department_alter_staffprofile_staff_position_and_more.cpython-310.pyc create mode 100644 osinaweb/osinacore/migrations/__pycache__/0071_projecttype_department_ticket.cpython-310.pyc create mode 100644 osinaweb/osinacore/migrations/__pycache__/0072_ticketupdate_ticketreaction_ticketattachment.cpython-310.pyc create mode 100644 osinaweb/osinacore/migrations/__pycache__/0073_alter_ticket_regarding.cpython-310.pyc create mode 100644 osinaweb/osinacore/migrations/__pycache__/0074_rename_dare_added_ticketupdate_date_added.cpython-310.pyc create mode 100644 osinaweb/osinacore/migrations/__pycache__/0075_remove_ticketattachment_ticket_and_more.cpython-310.pyc create mode 100644 osinaweb/static/images/generated_invoices/invoice_$24-1425.pdf create mode 100644 osinaweb/static/images/generated_invoices/invoice_24-1425.pdf diff --git a/osinaweb/billing/__pycache__/models.cpython-310.pyc b/osinaweb/billing/__pycache__/models.cpython-310.pyc index a6926e1e9113681972c654e96eeea5b6e044efad..095a8b64ae5002ece140b46e4c6fa269f6de4a7a 100644 GIT binary patch delta 299 zcmZ3eKV6?IpO=@50SGE$HgZ*R)ib3q_cBFsr!r^pq%Z*?h{p@(u>g5|C_H{3k0n(A zND6}0v-Yw?38f0Bu%)oKFf=npiL^7MF{W^&aJFzniMBJaFhq$3GiY+%;`A>{NiFg$ zNzE;?0NNf>WDO)WnKtutPh=5_5=u|aOD#$)Nll5*%qz>!Oy0bnzmt(Mf3u|^6Ns`A zieqGJ0O}}`n4BmsE>=_zWS0SPF&mKJVBlfoVJxbjd{9Va^Fv{v#`?+GqNa?ElNX9g v1IdFzvXgI#Uf}Km8PEnI8YgcRvu5m^{83CCNOFq%a)S&kY6KCTKpPwY%z8^B delta 341 zcmbQPzfhkmpO=@50SKh6HgZ*R)ibBC^fE^E0D(v=dl5Kd?-AAAde+g z07wdg)wB1qLEGyao)KUh-#cV)=gMo*Uhq0((@_%O8%@2ed7#SNTCyJWNHUZ^o zK#KUliuf4$7&#b)fFw|H)8y?!vXd`}Uf}KqN*1+)h^EP_#jGW}fXr4PE(SRZWHc90 c7f?snB+Gcl?MC*lH8V+@ z%25vOg#(9ZxV61il{n{uIC0_+KpfC;YY+V&dg8rt0|~I!e)}}@=DqiQ{^r&EpYuWL z`vnIcekbbuQ#lM~$dkiMKhzvXyW_o5qeL7w$_l?ajWR1T555)VvjDymEM#Nwt+L#v z6OA7}+Y2LNiW_O7c%r_EyZop|d@>P2aWRH4j!;3E(3_bK3H0;K&9!MzsOeG!Rd0ey(3lH<3f~h$9NPOr-E^D7g8h^*KcWU?gj*H)cp8CXO6(T0k5p;OQUZ$2Hr1Z-)H4Pe%t%a zVU<7J{Q%A*b_wnQ)Sz&Epm6!zH8de&=uH~&9Py4yA_SyI|A7a){Ws0FE2OMxP)t}0pEomt|rYp=$W zgj9}lCz0)H}oDJHagZWM^^ZEM>)yjpi_OSqbJ5<}n}UQ5LW=%ww!@$Ea6! zzT4ctNqjOMfB{iPs343YjH%e{5MTXdUU_*61y7Z7FOs|$%FR9xBX;x%sO3&Oi6#F? zerbqv>ZT=$r@plsWI_FI{krXeMzgY(auJ4|NTf21TRkrPWMQkqIp__6kJ3bm(UneBBe_pX$C3p^0wqG#O_E%1JxYeDWLKq z9{)drMI@LA#>EX#Nzs)0gEp$K!J>^RK724)6vkB;=?(Q}@#pQ;iQP##wK~m4GiP)_x(b=~`jBI$4({FF@l-=y~0cL;7~) zRuoHd4NnZE{ca=&?e~iM#y|ajZYF7N_giu$w^x%W7Dd!^Z@qEt`s?Alw{O2EMzpJ> z&*OY(LqI8VtIs;QownAwaA31u(e0a4T>va)L($;=hghg)X+`$BAp{@AA2i)IlzOlh zcX8JTOK^p|Jj4i^^zbvMf~Wl?hMs+S7KS&j%H>aE@eVq4H+U=E>_aqC;2%$v5Ec+FAYjAjQ%C&j2=qOomwO3Y>+)p+ YYAIgQF@q9HD&W`CGqvd)J>@O@4ZpNESpWb4 diff --git a/osinaweb/billing/add/views.py b/osinaweb/billing/add/views.py index ce70902e..ca27fd2b 100644 --- a/osinaweb/billing/add/views.py +++ b/osinaweb/billing/add/views.py @@ -6,6 +6,7 @@ from django.template.loader import get_template from django.conf import settings import os from weasyprint import HTML, CSS +from django.core.files.base import ContentFile @@ -110,7 +111,6 @@ def add_order (request, *args, **kwargs): - def add_invoice_pdf(request, order_id): order = get_object_or_404(Order, id=order_id) @@ -160,15 +160,10 @@ def add_invoice_pdf(request, order_id): ) - # Save PDF to a file - pdf_file_path = os.path.join(settings.MEDIA_ROOT, f'invoice_{invoice.id}.pdf') - with open(pdf_file_path, 'wb') as pdf_file: - pdf_file.write(pdf) - # Associate PDF file path with the Invoice object - invoice.pdf = pdf_file_path - invoice.save() - + pdf_content = ContentFile(pdf) + filename = f'invoice_{invoice.invoice_number}.pdf' + invoice.pdf.save(filename, pdf_content, save=True) # Return PDF response = HttpResponse(pdf, content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename="my_pdf.pdf"' diff --git a/osinaweb/billing/migrations/0043_alter_invoice_pdf.py b/osinaweb/billing/migrations/0043_alter_invoice_pdf.py new file mode 100644 index 00000000..1b0e646f --- /dev/null +++ b/osinaweb/billing/migrations/0043_alter_invoice_pdf.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.5 on 2024-04-24 18:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0042_order_due_date'), + ] + + operations = [ + migrations.AlterField( + model_name='invoice', + name='pdf', + field=models.FileField(blank=True, null=True, upload_to='generated_invoices'), + ), + ] diff --git a/osinaweb/billing/migrations/0044_alter_orderitem_active.py b/osinaweb/billing/migrations/0044_alter_orderitem_active.py new file mode 100644 index 00000000..ab6a4264 --- /dev/null +++ b/osinaweb/billing/migrations/0044_alter_orderitem_active.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.5 on 2024-04-24 18:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0043_alter_invoice_pdf'), + ] + + operations = [ + migrations.AlterField( + model_name='orderitem', + name='active', + field=models.BooleanField(blank=True, null=True), + ), + ] diff --git a/osinaweb/billing/migrations/__pycache__/0043_alter_invoice_pdf.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0043_alter_invoice_pdf.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f001cdffb8e714bb69bf8a7d6b3ddc45cbea583c GIT binary patch literal 667 zcmYjP!EV$r5VhlEH;E`hMFNhTkaB5Oz!9M$p&}$Ghr%Tn%eynX^476KoU|%exb`o& z@JqgO;unxm8E0Fyj%GA(-pDiaVz;+fGCJXXwf@N&`yIjElM*;2^Uufu18!K$8{Q^O z!r40p35XvI1oEx;E*b&p39GU{RLiO)l&#+MYS7O5Fl!y4@vBJPJvo6xGQS{)tl_|# z1o(zG0@H048{lj^hm^hyW|soymx9Lc}@6AgluV)Jq@WHjS0or8K*!Fj+k=VKw8xz(a~pX zjRuZsid;^4DMKkG)r|%zz9;3^QJGj95nzWF(5^K4KB09(`Nj;`AH`dG5fjCcHaOu> zx-L!^#rwtj$HY$V@3;Dk$KKc2QYq597g)bVe>%9XK2b)uPd}(Gf=^x#E7#V}YpZID z=TiV%WjAh@JjZ2ytyq2gt7_8jg;a5}8(|~~cFk$Ie_J~=d{~I-tMuBp3prZf3;KWH9bJ)V~+>PBk>=GB)jYY literal 0 HcmV?d00001 diff --git a/osinaweb/billing/migrations/__pycache__/0044_alter_orderitem_active.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0044_alter_orderitem_active.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b319ee0f3778cddea8b5b4ce37f8515a104650c7 GIT binary patch literal 650 zcmYjP&2H2%5cW^9n~k;-LeMiOq+B+Y=nsWd$Qw&Z}{Q?b;iYihu zMK`qKkZjWk0F&)hCHSScOigY%)-p9kpe)Qj{zE{x=}H@;?Is)^9UZ?C()7>?Z7-d! zL9}XJ&0MFT(>*j{BI{mX!e{&~T^VUFLSlEu6dZ?+g9}0R6cTUw6{P-WVxp!78w|2H!E?0%@97fG0nPz$vh e_8oQ{iVw?--g7)BWUoi&-r##9K4Ls!hx{)zHMCj) literal 0 HcmV?d00001 diff --git a/osinaweb/billing/models.py b/osinaweb/billing/models.py index 6522c06d..1ebc4883 100644 --- a/osinaweb/billing/models.py +++ b/osinaweb/billing/models.py @@ -58,7 +58,7 @@ class Order(models.Model): class OrderItem(models.Model): order = models.ForeignKey(Order, on_delete=models.CASCADE) item = models.ForeignKey(Item, on_delete=models.CASCADE) - active = models.BooleanField(default=False, null=True) + active = models.BooleanField(null=True, blank=True) purchased_at = models.DateField(null=True, blank=True) end_at = models.DateField(blank=True, null=True) terminated_at = models.DateField(blank=True, null=True) @@ -98,7 +98,7 @@ class Invoice(models.Model): invoice_number = models.CharField(max_length=100, null=True, blank=True) order = models.OneToOneField(Order, on_delete=models.SET_NULL, null=True) date_created = models.DateField() - pdf = models.FileField(upload_to='uploaded_images', null=True, blank=True) + pdf = models.FileField(upload_to='generated_invoices', null=True, blank=True) def __str__(self): return self.invoice_number def save(self, *args, **kwargs): diff --git a/osinaweb/billing/templates/details_templates/invoice-details.html b/osinaweb/billing/templates/details_templates/invoice-details.html index eddea3bb..b1ab4500 100644 --- a/osinaweb/billing/templates/details_templates/invoice-details.html +++ b/osinaweb/billing/templates/details_templates/invoice-details.html @@ -135,7 +135,7 @@
- +
diff --git a/osinaweb/billing/templates/listing_pages/invoices.html b/osinaweb/billing/templates/listing_pages/invoices.html index 01a14386..4b999768 100644 --- a/osinaweb/billing/templates/listing_pages/invoices.html +++ b/osinaweb/billing/templates/listing_pages/invoices.html @@ -77,14 +77,18 @@

{{invoice.date_created}}

+ -
- - - - -
+ +
+ + + + +
+
+ {% endfor %} diff --git a/osinaweb/billing/templates/listing_pages/orders.html b/osinaweb/billing/templates/listing_pages/orders.html index 1f27d697..0a993721 100644 --- a/osinaweb/billing/templates/listing_pages/orders.html +++ b/osinaweb/billing/templates/listing_pages/orders.html @@ -95,10 +95,12 @@ {% endif %} {% if order.invoice %} - - - - + + + + + + {% endif %} diff --git a/osinaweb/customercore/__pycache__/models.cpython-310.pyc b/osinaweb/customercore/__pycache__/models.cpython-310.pyc index 850794c87e35e4e1fdafe49f35754121f11a5fe3..e2a38eaef0e46f8002c9dc92a3d97c5a53ccc39e 100644 GIT binary patch literal 1744 zcmaJ>%WmXE6!rVn&or4t2nhlM0`rI^#1f$i-AN`Q^q_QSV+k3z>!#z5A5GbqRrZ6>Aay3*{inUCeDu)Wwnen^A3{V&PZ+d7TV=@aFYt5L**vvu3Su++gF7uG_ z){Mo$5j+x6;@s{$SRD~&lBSAU%1a^Pk&$lN~kg=)R-FTU@T0gG5tynEsSku z;B8)Mp(8UE;7*x+rH3w#J!m1eaFG5utcc1E;f< z^o_6BqaSl-=yeLAgR~g0aDEf63XY0(y$^PNq$>?Z&7!4mkIU4RyxJK)_ z!}FLQq>wRT)@hxAaHsIBZkQH>D&gs}PRk;6Im~0uuwdaGlpNA|@dI26dtJ3~Ci~N9 ze0qE=>}4ZFXdKm$%OU9@yb&y8UguC?%hG&X-gsV#!{3EriLoR~3r5c~ri zh8`^zN$yVjCi;-(e1t&KRAf*`>8ssF72;o0Dd`@D*3C1(^s73 zzL{M%lkW_>v!(~`HlK?yf239~y(UGL(#Y9wT1q(IHtp&=Y?4aVMrbRJI?xBbfxTt@ E3u^|B)c^nh delta 138 zcmcb>`;sv`pO=@50SLr?sH9l}>Bk@rGGGF79Dul307#@Tq%h_%|7K{&65=BH2QG}Qq6F>05U^KxPznCb_f3}oDaFhMrGiT17 znRDixbAMa-%VKZR<8fK|@7U_lrrp!u@gB2wD}0FmGXB@=I1Eb*X^~W-N~)zOw50gY`R*&%mYJ7rbrm3G(+rPHF?J8e%`!hU%$k&dKVqY1r@ zMV*CY&cJRx&hnwVU2}Tfop@6msb;{);~G2EXoV}!{p6t0+ySElt_eepuDJ@_2M3Mj z4H)IS?=o8NE^xmvXjIE~xwnu8_Pe{P?qRMqy(_g?n$mcpxwa$Ls@?xCOuHzBxJnUr zIv;oh5Y9X8sb~jx-Z;s+vI@x}HnJqZ##=nyL~n5%9+g$=U0$D>`Z>mm=>-y6{_j!R>QQ1SJl?mhr^;$LWGL-9>b#R zSb4z$_X>y}U?tmDP)&;1$$|jsV&@9R`b_Wb{v(2;v%d-|x;tR|IIxvtySsi{OiLN@ zWMW2Xs50YdDQ0&8jle!YBvcn9aRnj?5rj-so`Uo=hnba1)7a*yuBnlzLHBZ1lcJ_I z43H!y>nU6@@lBYY0B|GpE#M(wKZmJgnyqQqw#8c0yeHPPU@$o285r0A1}m#>&`==L zZVp4c2RH=y0THNIA@#CEu#_BO2ZAd_e=t27rAZoT({w%BtkIW6vN(tPNj57U-bOC4 zy~F?MK89Cc2aW@Mz#D)#?c0#5fs+8*m`G7NolA|p4T|kWS-gk2Pl0~mHQ*FS1AQ0b zX^y^P`T^t*fscSQ-QdT-CxB?z;+pRlJCUBHu-grYd$B?iIX!qe^elAsfXHQWC~=eG ziV=Kz0PtEY<1Ky8OmIJk<{a<^ARIda={z7@?Bx**zs5EQU6XxTctP#lm38-qk6whyH#h`SN__5i!iV2N zcbPYxdQ!)lODac&pb%e@%ty*}#S`sGUft+4-(fQI8986#^Pk`=h|gWt?a$qn{$ESh zlF6%JhpMHkfi=MQ09qB@07QX}Knze>`^cFQ4dN!C8HfX@^BCV~@Q1_6{IByr-2$`% z2_OXo29XDea$JY6I`frH@)^*jfp%ak>ntni7N3+Ie9UV_BvBdWx&V=4J0a}?M8b$5 zi7Q4qnO@!)Be5toB1Y1Pwq{zvojegGDLTWmSRo160LBr@<@wXd2hTxs2oQDpJfu4f zQ$$aMe{fsc0~7Ie>V@O^8PWg aq9Q-wB93gy!P(%L|S*fSU7iAQ9qDa zjg}^QG7`t>#m3qivj)@B#&onYEyquNxJ`Yksm5xWY5G)-o&Q-_t8wDPZ=ZY4|D5xj z=jHH2%g+yFM4e818vpyT!ME|NdGBSMFdb4HtVedUVRNM?L8!zh6K0yle++YwZqf~T z%QpP7e9J85cQYS1n;d3Z!Zui1CUs;+X;`D3ouRlMi}q-gowU@kE9S}~v60UrHliNB ziWUJ=fMVvBy*X34soOZRC9}zVhwoXz`fWufcUl_TB~P)^0%!}_N3yEaz*K=sc1vEB zXQVepd-}Sym=;b*hAnmaGHZQ}m&*)G8~mbWSW*t)UOxH1?o?w6j&PsOS<76F+|&^u zo0LV&X5rOzctzYS%QjUWcd5}q7219A!<;nl-(&o-MC;_nLZ)7qWG2lDM9_XAm5P^v^f0ANJ_Af4LP=u z0Q=Q3i_|dHnY-ei;Wn(1nAX!73DW?UE(Q>1S`6f-;Nq5H?F(-2(RyRY*`U)+n%NQO zZ$gU!XRpNctm@F>!}n)C$7}Q*BeUms6HAA zX>=O)7KJsRt&NNzicuv@w9E>T`xkiuEo4g^@ct5kjj<`CQIY9M{= zysL_wXWzLZ)S0;UsaVY<6!G8`}*db~>y(MVq`67A(JKEN)z{T5O7>`%9MP=`Ja^mFV` zng>Ff(AKKH>f}vD6m~+=3hV*)0ixhUpm*VOHz30D6s)H?3`bv_hBgOvE!-K5(P#Kj zha8S;_y}O0yY%d9hu%Pxi2rR(! zP?_`?_2nj8{2)e$fMFm95WzYIYlOuLRdSdeE?naZ@Bzcg--;;h?9p^RxJjd$AQ;@6M*paEm*UFw*e$a6d|3>tq1vYDvl0d_+8*b;2q!< z;1tJFdXm$~n0U%WiRy_WItInyY4CmE3~(0s0B`^zGDp1ks~}tr ztO33R@bJ(MU_F3mpFRpa#`;U^T%9l<2ZBHd2(wG2Mbk8x8-dNh6TrWpL)y*9uEOyi zrj*UD?S&)?^a1?<1w;$SV2M873Tqn&ZwFBzUbeCbK<9yl4LO6iYVc;Ne2&e|S01+faxccs~^aaek2#f$P z0Y?CFu~9a^d>T2%HkLn3Zn6vI>&PCK?^UywK`{WF2F|eiy|wF0U{(N?z;s{+FcVk+ z)B<%tJ+KgH23momz-8cb;5u*vxXHfpt|SWcS9tRjJF#U-HqNECdYfPJ*@ z#7}4+`62v?c|zi;e*mNc5odN?CqyZ`+TC-VbLKne%tkXaWrMC?zpo#DQZiOs7 zZ`4gyOi)TM>?d_gl>@IYxb&hhQTZSO^pibT+g-jEh+ub5MgOZMp_UdiB23U4jp(d+w>y?#ou`P~()M#0$9_2~_u5tp` z`A)i$vOL&U*4LYLM^*VyM$8q+C4#EN!V9<VgD9O6@V)-G4D7fEj zyKXcLWph2tUo6o~kbdr45e?9lP5Q#nm13FX&p*~mTNT`+$a66fdWb}gUaAtsv>-5` zZKyI}%!SlYjcZd(8yC{Loq3g_kkNP|`B*X{{If-RBUOmAxZ~;s*oMZj?uf;gA;p@e z?&#p!SSLGPxCk~85eQC-S^m&N9}-o~N^lTQGNpVO2O#W=>4#D9d{*%BqB~4v6rj*8 z(a3~#>r&v^Y_Z3v>l=k?CbMC~boKG-HU61O&1atNX-_HV(DPC0f|iD{A8}wZ+N&?C zB1?Oybd|9mhTPX%Bd*|uo}^Y0wuYmYobov4Ju)Q7F$4_Vk+8ICu6@w? ziXH54J!ZR)Hn(ZqAD9{AMWZiQ|L2VRoA_Kn>ut`qo+z6M_f$E4nC0?IkQP1 zcDw*Hw!BSfdHwJkYT-N#c-W7W1wBrdz0nbn$klCGI6ru7#|%34D7Infip6|MW*IWPW}#;6x*dQ-F-ZWJD7^(svy z&`V33)ns)lY-E2onkz^;_;4l)ssVZezG?(mu0T4z; A-~a#s literal 0 HcmV?d00001 diff --git a/osinaweb/customercore/models.py b/osinaweb/customercore/models.py index 71a83623..c4a7c957 100644 --- a/osinaweb/customercore/models.py +++ b/osinaweb/customercore/models.py @@ -1,3 +1,39 @@ from django.db import models - +from billing.models import * # Create your models here. + +class Ticket(models.Model): + REGARDING_CHOICES = ( + ('General/Account/Billing', 'General/Account/Billing'), + ('Project/Product', 'Project/Product'), + ) + title = models.CharField(max_length=400) + description = models.TextField(null=True, blank=True) + regarding = models.CharField(max_length=50, choices=REGARDING_CHOICES, null=True) + project = models.ForeignKey(Project, on_delete=models.SET_NULL, blank=True, null=True) + product = models.ForeignKey(Item, on_delete=models.SET_NULL, blank=True, null=True) + department = models.ForeignKey(Department, on_delete=models.SET_NULL,null=True) + opened_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True) + opened_date = models.DateTimeField() + + +class TicketUpdate(models.Model): + ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE) + description = models.TextField(null=True, blank=True) + added_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True) + date_added = models.DateTimeField() + + +class TicketAttachment(models.Model): + ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE) + ticket_update = models.ForeignKey(TicketUpdate, on_delete=models.CASCADE) + file = models.FileField() + + +class TicketReaction(models.Model): + REGARDING_CHOICES = ( + ('Happy', 'Happy'), + ('Indifferent', 'Indifferent'), + ('Sad', 'Sad'), + ) + ticket_update = models.ForeignKey(TicketUpdate, on_delete=models.CASCADE) \ No newline at end of file diff --git a/osinaweb/customercore/templates/add_templates/customer-add-ticket.html b/osinaweb/customercore/templates/add_templates/customer-add-ticket.html index 04029264..9fcea554 100644 --- a/osinaweb/customercore/templates/add_templates/customer-add-ticket.html +++ b/osinaweb/customercore/templates/add_templates/customer-add-ticket.html @@ -6,14 +6,14 @@

- Open Ticket + Create Ticket

{% csrf_token %}
- +
@@ -21,12 +21,18 @@
- + diff --git a/osinaweb/customercore/templates/listing_pages/customer-invoices.html b/osinaweb/customercore/templates/listing_pages/customer-invoices.html index 99b091b6..8db65278 100644 --- a/osinaweb/customercore/templates/listing_pages/customer-invoices.html +++ b/osinaweb/customercore/templates/listing_pages/customer-invoices.html @@ -69,14 +69,17 @@
- + + + + {% if not invoice.order.status == 'Completed' %} diff --git a/osinaweb/customercore/templates/listing_pages/customer-orders.html b/osinaweb/customercore/templates/listing_pages/customer-orders.html index 42e44180..fdbfcebe 100644 --- a/osinaweb/customercore/templates/listing_pages/customer-orders.html +++ b/osinaweb/customercore/templates/listing_pages/customer-orders.html @@ -59,12 +59,14 @@ -
- - - - -
+ +
+ + + + +
+
{% endfor %} diff --git a/osinaweb/customercore/templates/listing_pages/customer-tickets.html b/osinaweb/customercore/templates/listing_pages/customer-tickets.html index 0de1c871..d840de15 100644 --- a/osinaweb/customercore/templates/listing_pages/customer-tickets.html +++ b/osinaweb/customercore/templates/listing_pages/customer-tickets.html @@ -18,7 +18,7 @@
diff --git a/osinaweb/customercore/views.py b/osinaweb/customercore/views.py index 8bc58a60..f40e6451 100644 --- a/osinaweb/customercore/views.py +++ b/osinaweb/customercore/views.py @@ -31,8 +31,12 @@ def redirect_osicard(request): # ADD @customer_login_required def customer_add_ticket(request, *args, **kwargs): + customer_products = OrderItem.objects.filter(order__status='Completed', active__in=[True, None], item__type = 'Product', order__customer = request.user.customerprofile) + customer_projects = Project.objects.filter(customer=request.user.customerprofile) context = { + 'customer_products': customer_products, + 'customer_projects': customer_projects, } @@ -160,6 +164,15 @@ def dedicated_servers_plans(request, *args, **kwargs): + + + + + + + + +#Products Payment views @customer_login_required def payment(request, item_id): item = get_object_or_404(Item, id=item_id) @@ -305,7 +318,7 @@ def check_order_status(request, merchant_id, order_id): item.save() order_item.save() add_invoice_pdf(request, order_id=order.id) - return redirect('orders') + return redirect('customerorders') error_message = 'Failed to retrieve order details: ' + response.text return JsonResponse({'error': error_message}, status=500) except Exception as e: @@ -399,6 +412,20 @@ def buy_free_osicard(request): return redirect('customerorders') + + + + + + + + + + + + + + #Invoice Payment views @customer_login_required def invoice_payment(request, invoice_id): invoice = get_object_or_404(Invoice, id = invoice_id) diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index 4008f8341b6b67f7c382e7f6b2bba96089c4066e..afc6de8db42cb93cba86c0086dcd9333b2612d1a 100644 GIT binary patch delta 12624 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 Ao&W#< delta 3279 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 AfB*mh diff --git a/osinaweb/osinacore/__pycache__/admin.cpython-310.pyc b/osinaweb/osinacore/__pycache__/admin.cpython-310.pyc index dc7c9d64712b448540c138f325f090a859cb0b37..5ff6495983ed5fad51f620a210587f12f4b28e0c 100644 GIT binary patch delta 130 zcmdnZca@JfpO=@50SM#+G}Ce?^2#zsP1N2hu#l0FA(b(UYXNtvP%6hlrimZiki{fZ zITtcbc4IW+fGU#PT*4U0!YDua7;6VNmrH6vVo^zMYF^1?U$z}$CP3qP7&sV(Sb>lQ P2w8d9co-*3vMT`qIHMi5 delta 100 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 diff --git a/osinaweb/osinacore/admin.py b/osinaweb/osinacore/admin.py index 70367cb4..7fb00bd5 100644 --- a/osinaweb/osinacore/admin.py +++ b/osinaweb/osinacore/admin.py @@ -31,6 +31,7 @@ class PointAdmin(admin.ModelAdmin): admin.site.register(Reference) admin.site.register(Business) admin.site.register(CustomerProfile) +admin.site.register(Department) admin.site.register(StaffProfile) admin.site.register(ProjectType) admin.site.register(Project, ProjectAdmin) diff --git a/osinaweb/osinacore/migrations/0070_department_alter_staffprofile_staff_position_and_more.py b/osinaweb/osinacore/migrations/0070_department_alter_staffprofile_staff_position_and_more.py new file mode 100644 index 00000000..d9551d63 --- /dev/null +++ b/osinaweb/osinacore/migrations/0070_department_alter_staffprofile_staff_position_and_more.py @@ -0,0 +1,31 @@ +# Generated by Django 4.2.5 on 2024-04-24 18:31 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('osinacore', '0069_alter_business_logo_alter_projectfile_file_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='Department', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ], + ), + migrations.AlterField( + model_name='staffprofile', + name='staff_position', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='osinacore.staffposition'), + ), + migrations.AddField( + model_name='staffposition', + name='department', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='osinacore.department'), + ), + ] diff --git a/osinaweb/osinacore/migrations/0071_projecttype_department_ticket.py b/osinaweb/osinacore/migrations/0071_projecttype_department_ticket.py new file mode 100644 index 00000000..328d8cd0 --- /dev/null +++ b/osinaweb/osinacore/migrations/0071_projecttype_department_ticket.py @@ -0,0 +1,33 @@ +# Generated by Django 4.2.5 on 2024-04-24 18:36 + +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), + ('osinacore', '0070_department_alter_staffprofile_staff_position_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='projecttype', + name='department', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='osinacore.department'), + ), + migrations.CreateModel( + name='Ticket', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=400)), + ('description', models.TextField(blank=True, null=True)), + ('regarding', models.CharField(choices=[('General/Account/Billing', 'General/Account/Billing'), ('Service/Product', 'Service/Product')], max_length=50, null=True)), + ('opened_date', models.DateTimeField()), + ('department', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='osinacore.department')), + ('opened_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/osinaweb/osinacore/migrations/0072_ticketupdate_ticketreaction_ticketattachment.py b/osinaweb/osinacore/migrations/0072_ticketupdate_ticketreaction_ticketattachment.py new file mode 100644 index 00000000..168903a8 --- /dev/null +++ b/osinaweb/osinacore/migrations/0072_ticketupdate_ticketreaction_ticketattachment.py @@ -0,0 +1,42 @@ +# Generated by Django 4.2.5 on 2024-04-24 18:41 + +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), + ('osinacore', '0071_projecttype_department_ticket'), + ] + + operations = [ + migrations.CreateModel( + name='TicketUpdate', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('description', models.TextField(blank=True, null=True)), + ('dare_added', models.DateTimeField()), + ('added_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ('ticket', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osinacore.ticket')), + ], + ), + migrations.CreateModel( + name='TicketReaction', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('ticket_update', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osinacore.ticketupdate')), + ], + ), + migrations.CreateModel( + name='TicketAttachment', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('file', models.FileField(upload_to='')), + ('ticket', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osinacore.ticket')), + ('ticket_update', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osinacore.ticketupdate')), + ], + ), + ] diff --git a/osinaweb/osinacore/migrations/0073_alter_ticket_regarding.py b/osinaweb/osinacore/migrations/0073_alter_ticket_regarding.py new file mode 100644 index 00000000..7faf1e72 --- /dev/null +++ b/osinaweb/osinacore/migrations/0073_alter_ticket_regarding.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.5 on 2024-04-24 19:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('osinacore', '0072_ticketupdate_ticketreaction_ticketattachment'), + ] + + operations = [ + migrations.AlterField( + model_name='ticket', + name='regarding', + field=models.CharField(choices=[('General/Account/Billing', 'General/Account/Billing'), ('Project/Product', 'Project/Product')], max_length=50, null=True), + ), + ] diff --git a/osinaweb/osinacore/migrations/0074_rename_dare_added_ticketupdate_date_added.py b/osinaweb/osinacore/migrations/0074_rename_dare_added_ticketupdate_date_added.py new file mode 100644 index 00000000..2cd20d39 --- /dev/null +++ b/osinaweb/osinacore/migrations/0074_rename_dare_added_ticketupdate_date_added.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.5 on 2024-04-24 19:14 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('osinacore', '0073_alter_ticket_regarding'), + ] + + operations = [ + migrations.RenameField( + model_name='ticketupdate', + old_name='dare_added', + new_name='date_added', + ), + ] diff --git a/osinaweb/osinacore/migrations/0075_remove_ticketattachment_ticket_and_more.py b/osinaweb/osinacore/migrations/0075_remove_ticketattachment_ticket_and_more.py new file mode 100644 index 00000000..8ca0fa18 --- /dev/null +++ b/osinaweb/osinacore/migrations/0075_remove_ticketattachment_ticket_and_more.py @@ -0,0 +1,45 @@ +# Generated by Django 4.2.5 on 2024-04-24 19:29 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('osinacore', '0074_rename_dare_added_ticketupdate_date_added'), + ] + + operations = [ + migrations.RemoveField( + model_name='ticketattachment', + name='ticket', + ), + migrations.RemoveField( + model_name='ticketattachment', + name='ticket_update', + ), + migrations.RemoveField( + model_name='ticketreaction', + name='ticket_update', + ), + migrations.RemoveField( + model_name='ticketupdate', + name='added_by', + ), + migrations.RemoveField( + model_name='ticketupdate', + name='ticket', + ), + migrations.DeleteModel( + name='Ticket', + ), + migrations.DeleteModel( + name='TicketAttachment', + ), + migrations.DeleteModel( + name='TicketReaction', + ), + migrations.DeleteModel( + name='TicketUpdate', + ), + ] diff --git a/osinaweb/osinacore/migrations/__pycache__/0070_department_alter_staffprofile_staff_position_and_more.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0070_department_alter_staffprofile_staff_position_and_more.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d5291fc521ffff3f4eb2f4b2065493c909d6be14 GIT binary patch literal 1184 zcmY*YOK;Oa5caN})OogrKH$a$2@8~j3l9mQmX;z!Taa2VxvVysiEG!7uy!cv6;4R` z4_x_6d*#$KHzW$PcKTY&quJTnoo~KxH*K}*77hD@H+t+?)-N-;J}72w(4Te4fCVhF zV%BFd?{jA6JhJ=F8w+f3zFFWP3oBpkeg*h}M`!0K~gKI_})gmfai0 zVp@I?5hi|qf;o zOrnU|PXy_QIclD#o=p{vo&}V$UZtp~TQ`o;b-3*KbmgknRn)W9D#2B2#;lXs_m;IQ zii3sFbwSL*gqRe%Da5CVj7;BVMrU9Gm<$8V6gMq5wh9LK3^HY#Nb^zhWtxxYi&1b*_4=&nL26F=1)2HGteCYH2&@cK~ff85>G?k2!|S31V|<^E}@ zhX%eee|~g7l4MyIW8xd5D41e*8?)m)9d{2%$oSr_9Gl5|l3MSmz_t&!*cE_QiUT`K{0U{G*g(tP(a*eRcR=Yl$QpK26)uP7?LN3@{b S7p1x{nZZ*fv&3DtX8#8aylOfC literal 0 HcmV?d00001 diff --git a/osinaweb/osinacore/migrations/__pycache__/0071_projecttype_department_ticket.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0071_projecttype_department_ticket.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5d98edde80a3feb7268355dd6c109594a2c51769 GIT binary patch literal 1403 zcmZ`(OK%%D5MFXu((X#KoJ6tnI`pa@yl&B=KoAshVmmErJ8dmrbRnpn(R$^5g-gXz zuI-^00sRTdv45xs0zLJVpHKr0I=k!I?x6%o%!{1iHy@ez`@Tiv-VdYMA1%xJvr=vj zhm@x@%g3~U1uU^rHesxidBRhBVyDi;sdYPPP1-LkaG>?G1ueAaouBMU2kc{O)c!#G ztr0VBiCV{5RF1gu(>PL6$9YzocA5hwcIUK zr^<)$fY5npyu*K?AY8n>j58VL3MY@Zx4+sJfQ3{##Y_vCXjG!qayBbeK8q7<6j9Ko z3Q8d}5Gn07T?&|EsP(cy<6oaKemlHMuyt)7*~ZBhNkZu}%9x-=!*xz(zwV95WQr70 zt*u#%37Gac4$n{<9>c!j-|mha(~}FGi%_A|2vrGjD%Db);nH{|s#qrRTQt4bsHS;| z&6zD7>jdLpSqM*L#)1!kyZ z66}OwzQ}a&EKU+~sfQFw{=qS-*Kvr!_bP`)sMRB~fB3v|+NKkp=Hx5YCh5)L-MpX! zK>*!?@Mx6ja>P}iVobZfet9&yYg|#^K?vguf*lsr5Mg>kyjsYl!b%8bS9^x#xhx7f zB|l+~8DJJJ6|Y=_os;o5;^cVmM{)RackjUTt|DSAjk^P|U*WB)*J%8GYHl25-w~v3 zn9D564Tq_5>z)x%#y#E}i=&f+1Jiw8H{!5*Tc-Ccj&`U!^;yPyek#?aIL0@+5&OGz z<8ho~qxy99%NP2arM{r_^>Xn`a6-*215Am4NKh{^*v0Zp=S6T#ElxiU|@Z2v!5Q73SHjX@+-cfoa{h2J`z@#;xX` nqIW|Nguqr+-ukp_cpB+Tav1kX!-=nn+g4c>+T-iYWgGTCmo2DB literal 0 HcmV?d00001 diff --git a/osinaweb/osinacore/migrations/__pycache__/0072_ticketupdate_ticketreaction_ticketattachment.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0072_ticketupdate_ticketreaction_ticketattachment.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..079bf66d2d3ed86186b0ddf666f741eb056646c8 GIT binary patch literal 1429 zcmZ`(OK;mo5avq~Nl~^ED{cbxP!zrJB00Gv2#O+#Ww$|X2e70IQDCv+j1h* zX%|?QQMxF6L%K<{5WI}Cw2;jt1B{D{P@Vg5d89m}U3{Z!8ft+KT4130#=^$3`Bn#g zVFWG8WrG1GI!l-G69Q;LYh%p~u*uf0Y|h3Y-9_h(_f{jRO`Z-|xVPM2I?L|zj=B-N zjY+HUIYmKDfSo}g?4 z7NLl8)nvlbn8iH3l2*EkW9b4H$T$GqW>+sZTl=QyQnv|pO5kEt7|KjGYjii=T`~RI z;v3?C&Wj#BD1lXFZO$W%p^$rZEtkkc1weM{7`Cd4yE**$vf3`Yb=a^hdH70kBdvK9 zqg32xzb9>0mC2ZN8KVha#YnQp*v~5-D=3T!Qo$H&9biF8h>(rtW} zw8G!Ig| zu7ny%ZM?==EvWGvy#E~xXiy(*C$etJRv|8`R&G_kYf(R6iv~foX%|l_!8Hxty0w~y z-ZQ$otADBA*NuP4;wlTtwfjN5OqFwHwjdr9*W?^2`QJR6eKRFY5~y;6r_TLa0Q~yFGRK`i6wdC={-Btr4Jl9;n+ZL$Hgxe~t!7 z9SKs$B5I;Kfpj$s1z^5fh*Zp)Sj@#jWao*<&lAkZM1ke*`2799I#@I}z0`~w3;yZW z){AZGBtHQ+bb>j!1{N3(&$@=pImVYQXy@lsw$Cjz%nGTSGQNDU4;m~})gI?&(5`wV zl|stq_-5qqeY9o;+*Nprfjb*Cz1T+csZ9KWFOB5Tqa5rTRiGQU^r;?{Lb4cTp_;XT zv0!J%5|lV7bDz;MPN^>_#k@fQ`gbY)IxrP-0}{}I7NEI=-r@v_FZPrJ`!?KSlMu*X zFWH2BVLEJNoX9U?A0j)N%kS0a9&BGhD-{4XcLvoP=ue#Kszat^`}iH}0{GBN$4y&} zB3BwtM@OufZp;)sg`>#{BdBhEK!wA2Mp<~kvK`O(penE u(R!5r$*xBJpiF%}726a?W4mLEBYD%#b3v5JRPuREtEZ3o}R(0wV$IU)7W$slVuFuKk=-U!S$ zMJxQagq)@R|%a`|57F>Wmri`$F~LvuciFDRVH4H z9^i-r;LvLHE~Dkb!%rBK?=%`}YDe60@|(Fwluzd0ulln`=WFb>K{Q5RWBnHW}^ z!C%@ED*gfmFuNO)qhh5Uzj-^Jc{^j*(`n3TeR-3-#elKz#<{tOV~4c6`(%ItFIdS1 z=j=HH5ByIIeB?{-qc1!N&R8<|L2)eMIxh1?tNOgIy39~F*O;6`+T8~-$OH#Quk!^L zJ_gHyNescYx50xg4q=Cf5N-M4Ha>(A#MhkO3}L)QlP#JWv>1sY?2*`8dUX6(W#Z{k z-Q|_a>K66v;NZ~%*522*sg7Lb`C5dpZS{n=L+YE@cka_&%{|AQZW4)! z^Utl^lO)oSv@)dBv6LihRUqMsl$R@2*t?Pk*kA=%WjS`ON0s#W6wCTOKFhHHJwCz$ zdptIm(sAA3X3Ae#dz*r-`T03L@38GsEb{`fDDpL?N7!BTb(5Z{A}{Z~RE=?7b$OrF zWolcWR(NFrELF9r9eIUw2h3p7-B*>;h#u02jIzyKcJ1E~QdL0rY;o4CTc6a0w7VB% zBIfzQ?_l6@j|abk;QvpG_9^xs8-24`PZD2`oaPzKZO<&fYluU4sIZP6yT(7^MvM8s ICf;5D4>Yy_i2wiq literal 0 HcmV?d00001 diff --git a/osinaweb/osinacore/models.py b/osinaweb/osinacore/models.py index d9b96476..f369d091 100644 --- a/osinaweb/osinacore/models.py +++ b/osinaweb/osinacore/models.py @@ -8,6 +8,8 @@ from django.db.models import Sum, F from datetime import timedelta + + # Create your models here. class Reference(models.Model): @@ -93,9 +95,15 @@ class Business(models.Model): +class Department(models.Model): + name = models.CharField(max_length=100) + def __str__(self): + return self.name + class StaffPosition(models.Model): name = models.CharField(max_length=100) + department = models.ForeignKey(Department, on_delete=models.SET_NULL, null=True) def __str__(self): return self.name @@ -106,7 +114,7 @@ class StaffProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) image = models.ImageField(upload_to='uploaded_images', null=True, blank=True) mobile_number = models.CharField(max_length=50) - staff_position = models.ForeignKey(StaffPosition, on_delete=models.CASCADE, null=True, blank=True) + staff_position = models.ForeignKey(StaffPosition, on_delete=models.SET_NULL, null=True, blank=True) intern = models.BooleanField(default=False) active = models.BooleanField(default=True) staff_id = models.CharField(max_length=20, null=True, blank=True) # Allow null and blank for initial creation @@ -126,6 +134,7 @@ class StaffProfile(models.Model): class ProjectType(models.Model): name = models.CharField(max_length=50) + department = models.ForeignKey(Department, on_delete=models.SET_NULL, null=True) def __str__(self): return self.name @@ -310,10 +319,6 @@ class PointActivity(models.Model): return 0, 0, 0 - - - - class Status(models.Model): text = models.TextField(blank=True) date = models.CharField(max_length=40) @@ -346,4 +351,6 @@ class Connection(models.Model): ) status = models.CharField(max_length=200, choices=STATUS_CHOICES, null=True) date = models.DateTimeField(null=True) - user = models.ForeignKey(User, on_delete=models.CASCADE) \ No newline at end of file + user = models.ForeignKey(User, on_delete=models.CASCADE) + + diff --git a/osinaweb/osinacore/templates/add_templates/add-project.html b/osinaweb/osinacore/templates/add_templates/add-project.html index 9ed573c7..894c8ca3 100644 --- a/osinaweb/osinacore/templates/add_templates/add-project.html +++ b/osinaweb/osinacore/templates/add_templates/add-project.html @@ -22,8 +22,8 @@
@@ -101,7 +101,7 @@
diff --git a/osinaweb/static/images/generated_invoices/invoice_$24-1425.pdf b/osinaweb/static/images/generated_invoices/invoice_$24-1425.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c0e33d96a331bd0954b47e98089b811b916f7a7b GIT binary patch literal 31965 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