From e5089ee366a9076c2e80a151620d3671d307332c Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Tue, 27 Jan 2026 21:42:27 +0000 Subject: [PATCH] ver.10 --- core/__pycache__/models.cpython-311.pyc | Bin 16651 -> 17783 bytes core/__pycache__/urls.cpython-311.pyc | Bin 4272 -> 4655 bytes core/__pycache__/views.cpython-311.pyc | Bin 26938 -> 33759 bytes core/migrations/0007_maintenancepart.py | 28 ++ .../0007_maintenancepart.cpython-311.pyc | Bin 0 -> 1770 bytes core/models.py | 15 +- core/templates/base.html | 55 ++-- core/templates/core/breakdown_list.html | 61 ++-- core/templates/core/fleet_detail.html | 265 ++++++++--------- core/templates/core/fleet_form.html | 110 +++---- core/templates/core/fleet_list.html | 142 ++++----- core/templates/core/index.html | 159 +++++----- core/templates/core/maintenance_detail.html | 274 +++++++++++------- core/templates/core/maintenance_list.html | 61 ++-- core/templates/core/part_request_list.html | 67 +++-- core/templates/core/supply_list.html | 178 ++++++------ core/urls.py | 2 + core/views.py | 133 ++++++++- static/css/custom.css | 219 +++++++++----- staticfiles/css/custom.css | 219 +++++++++----- .../pasted-20260127-202812-8ab5fa36.png | Bin 0 -> 371768 bytes 21 files changed, 1167 insertions(+), 821 deletions(-) create mode 100644 core/migrations/0007_maintenancepart.py create mode 100644 core/migrations/__pycache__/0007_maintenancepart.cpython-311.pyc create mode 100644 staticfiles/pasted-20260127-202812-8ab5fa36.png diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index aa20da2fcc89e9b51f28fee0770fc252be2a15a2..4d334bb33966ac807a5045e17e45c7d1dccc6798 100644 GIT binary patch delta 1941 zcmah}eQZ-z6o2=v>)N$lOSg5DeH9to3Zr~%Ejqp=3?(5DN4I45pJ(ZNKxf;H`&xBN zHp*OdB9o3gL*fUbGl*Y=nXSVd6cnfh~;0`}%(U zy>rez_ndprxvzJjd&f}DM;1#qL&v_dws6eTm$MYTGF-u-Y?gVN;T_!!UqDJwVOBnm z{EU04bR2D1f<7i!?6asz8qO71)Iy`vl*l3sHB#g-hR{&1Lr8>yB=D<6yt z+<~wV;YGI@2S~Tmo3EKP-M7O!UwHv(@UZxmLe z5c#Iii^AmZ!e7e+AQk{L$IXqWU%wBg`^j777dG|)%>;N2U?T-JYsYr~j_q|j@nsN|0el9~2k<#SFF9JV z-V_3w1#pafRk6B=P^xCP260^E5~9H46QD~0^pg|5V*LQn0jZ+$HbMjBy3r|Bukx|z zJZY}#LRZPHs#Ug6!DJUe6+kPgSo0(Lf!tfuZ@5GS?hJgH5KrfkN5qZ4fEilM5UHwz z(@2LegGLL_#0z2whg;*}me_*$AQjbwh1OsgbK1OqkeKU)P&gWlJOxLp>Ow7I92aW7 zQfu?{&V)ypxwdhO9aBeOc^EUlYmfHHqs2|n19}B_f`IZ-B>3n|!VGccr za3~^hu|#ygfN?Jf4TlrKSUenW!;tcV9e~}zkTgCG@E!mmKBs;X*rasP*Mrccc4!Tc ze~(a#xN7U1LsY36`Ib;3D#YSqgIkBUfc+rpsBJ{wkzkFF7&kSdTZG%xi!PB{o8F9$ zfPq$WP+F>i&gSB6t-^c-E;z{nFfm1g;aFUV1!ExrYgzveJ|HsH4E4rg;c!Brhw~1I zbO*u_A)Uqy)SdMvSOa`ZU$KU)t1Ojjx0E1slT7QJ>!3PLF#;1nJQHA9M#yM}F4cyR zNx$^>zj(y6LmA{?=JF$%L;ABU!wk|lJpx8;rs4iKpT!&KV;sspOT7&~@ED*M4)r;2 zXX4F^e3`UM$wDusoQGC1^VV)AV5#A4^p;wpTKCLv%`8t~6RwUS*8 z>=!uGop}!}>)9j3gNb}?=~`6ZREnc8~bRw#rSsEVjw^cE#R4VQ)|Fp0c@8 z`U#us+zxqbhivOqY@HLfPO^8SODOGmVZvH^ZiBpepKSFjR{w<6pWHR0V>5j-%wm`Y z*`0ZX0cCn;n8l#wtVQc~;12TK)>OWhq}FFz^K0#M_vE%>6N?yz{uoiuN|oDwLbV>Og;F7UXvxq10CV4;m;cQUCw| delta 1121 zcmaKrT}%{L6vsKpE(;5!N(GiJ*a`xRz?SMN@|EC%>5GXJ8sup@yK{kQXJ^+tGchEl z8v0PF1klqa8UqiQhJdj_hJI<(;)4%rbV&nkCZs&jCT-I+Y15`npL)-1n)=Xmll|p? zzV1C|&)q-Xg9~F&G+$VlpCvx|Rio;|{TGYM;EkKL5_lEp%LN6ImgQ>sM=lS3Gnul?!%Sf0f^!E!3d0Cc{GM6xp+qL`m zToTgBPs!XgB+Fn5pQP9n0R?a=T<)DCYtBAi_bb30$}ItVu>MdsEZ}s*7~IF=#`@HLJ_w^zru_- zS5u~%)SqdQrg8k7rDT;$ZXM#4aI<%n3RmrPm; zPF{>N`7I@RTF*@M4LOU%udT*4Ch1lp#yFoKr|*;{>!xasa(6|O!k1YC&F}7l&ybpR z&70wXcb(L_{q>>q0PD8g@-4s=9&7CmTo(Z+Pf5nD1k+8UKa|5eD0dOBwZ0Ay@YcQt zJdx|im)rV1KZwAFJKRj01PFc(_`Bie|45=E+jPn!a1qpizWde9F?DuYywQaX_90MQe z&~APPXO2#{(0!RJ-1*%+s^S3x{X75iwI`B_rLj)_r!YZ$jZLuMjD86i?D2ct%)bHn CK|4DD diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 6803940f2bd674b1a6390a779b71cc69bf909703..2928d32c3032af3f05dc33c5f667c0b6da44f8e7 100644 GIT binary patch delta 400 zcmdm>xL!qLIWI340}#wpsm#;^vL1stFdzqId@f?&sBwpli-{qXF~u~MIZJk;pRTmo z8n$K33=FG*7y`i3=0IsVkhBH5bh=cOe2Qf-gQnGHK6YiM$>%x5q6-p>O7s&`QuJ?$ zy^oq9ob#4Dk+Wr@{1FvWYUWmxMz>RAxGJGB7*_abQ3O%J}?MqRHsjM}+Pqevh*7|mQJJ5qfg1#iY=Dvg DlJgh- diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 84a3babaa3e4c7d76774e374c28bba8960a3059f..3c50107a9de3e54ffe3d8f4bd48ce9aab6ef31af 100644 GIT binary patch delta 12307 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 delta 7077 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't852#etJo;e*<$YXz* zh)$-LI`D~w52ew=%1L6}N1#5jOrtp>D1}|_fHKX~1h}Ct53+mjnn8xj(@7@Qu2*|2 zR<;mp1_5s}G1pW%Y8>03TI2%iNze>+o(5$TEr34Ho@Ui?yO8Wq9k*4wib)s2Qm}X< z0aL65Os_X21gJvEbn@V3#nS~ZHqViTsD}wSGx*rShV!z}5f>ffV)QPy!zmL#SkMud z_5P7M-;3a*&Rmotw_O@wuw=axUf5YAtbsr6d_)xt#osf>)Yk&XcTR`j`jfX_Lmo~{ zwl!IOCy7o{KXz0H!qhQPN_q*}V4rWB5(A}?81Ubc8N2e2`71Yepu8^w$H9u4Zr(pU znr<0Ow}gzAsUjh2UA#!(TqW2H^ZIKP8!Bk^R>IN#a(xMMAW&k4FZ=h^(ZXXg^7`!~ zPfG~)6WmR34}z*7?1QIwl?f8Ox68hcvnb|58a0n|=MuMZ{7()Hd4w$jI2Yu@ExQ*e z(QAW03~YpgfwJ~W9h^^M8Nf!thfNxIQoV#r1xnQYTd4RviNeR((m-ucNFa_{qrG d`Nab5y7BQq_Lt20dNSWG1obzb67;kT{{?T{9Gn0E diff --git a/core/migrations/0007_maintenancepart.py b/core/migrations/0007_maintenancepart.py new file mode 100644 index 0000000..c156d2f --- /dev/null +++ b/core/migrations/0007_maintenancepart.py @@ -0,0 +1,28 @@ +# Generated by Django 5.2.7 on 2026-01-27 20:47 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0006_fleetunit_contract_number_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='MaintenancePart', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('part_name', models.CharField(max_length=255, verbose_name='Наименование (фильтр, масло и т.д.)')), + ('article_number', models.CharField(blank=True, max_length=100, null=True, verbose_name='Артикул')), + ('quantity', models.CharField(max_length=50, verbose_name='Количество')), + ('maintenance', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='used_parts', to='core.maintenance', verbose_name='ТО')), + ], + options={ + 'verbose_name': 'Запчасть ТО', + 'verbose_name_plural': 'Запчасти ТО', + }, + ), + ] diff --git a/core/migrations/__pycache__/0007_maintenancepart.cpython-311.pyc b/core/migrations/__pycache__/0007_maintenancepart.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca40dbba7f2dab2330cc3fc6e06451591bb8aab9 GIT binary patch literal 1770 zcmZuxO-vg{6rNq%i+}jB`Kg;GfGJ3cQDZ}i(jI6e3MEPkC{mh8wN!1_p1~}vcisI- zF^7uKNbMm9Zi%Y4ih7``!Xb)+WR-+obDWj-V9lvgPuz^)luP?&je!zoci+4>^X7f~ zzIijhx3xtPw7WwUbt{O_Kip`x(4n$F1Wk8m)_SD1H8tFgd+Iz}4_lTJ{EF$YliLgi+qWJ3WzmT2t2?+WNeMYPFCEcR0=nj1j)+?~L zQkUEZ&~LjB-8FahgA{l?bMMn_x|5>Sl)ILpFEVMrh?HenBYM$ZFgqX~YX=OqpaG?gWOnjZLEX``Mu6})j-uPDUD^GRFYV?_e}Z4z zrd9U`y5-)7AkXOzib zIX|m+oL;*$0-uxtW}nQ1C6iZ7A9q)W1<&SVwwCnv)H7+@3Z{Onmjqy z`l(u+fQp#r7%VcmpqLFcIt^r~Mg4Oq3<)nPdeLAa&a<#j0-Sx;GC6U3a$@Q;7B$M` z@ILqh?L$=b=6ZI)D3Pp_cXZpyl4Vi=3^V(!VJ=x^r9iTr>g@47l7-s-NIpS5-;qqY zV)7H_3w}XZ{cxeI9zAslMaJs^v0GZ5sYg+y|Hr5o?yDu<|2xq`lf&!xyyS2-_B2G{thj>}Z?Hn+E49RV+I#u&U9b0YwUgfbn)WJguj2J8G@h>|`eVb|Jg+mdRweV Qz4*``pEx*U*8hk90BK(wNB{r; literal 0 HcmV?d00001 diff --git a/core/models.py b/core/models.py index 832c3f0..a0f4ed5 100644 --- a/core/models.py +++ b/core/models.py @@ -216,4 +216,17 @@ class Document(models.Model): verbose_name_plural = "Документы" def __str__(self): - return f"{self.get_doc_type_display()} - {self.uploaded_at}" \ No newline at end of file + return f"{self.get_doc_type_display()} - {self.uploaded_at}" +class MaintenancePart(models.Model): + maintenance = models.ForeignKey(Maintenance, on_delete=models.CASCADE, related_name='used_parts', verbose_name='ТО') + part_name = models.CharField(max_length=255, verbose_name='Наименование (фильтр, масло и т.д.)') + article_number = models.CharField(max_length=100, blank=True, null=True, verbose_name='Артикул') + quantity = models.CharField(max_length=50, verbose_name='Количество') + + class Meta: + verbose_name = 'Запчасть ТО' + verbose_name_plural = 'Запчасти ТО' + + def __str__(self): + return f'{self.part_name} ({self.quantity})' + diff --git a/core/templates/base.html b/core/templates/base.html index 8f4dbf0..28bec5c 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -6,11 +6,6 @@ {% block title %}Fleet Manager{% endblock %} - - - - - @@ -21,48 +16,45 @@ {% block extra_css %}{% endblock %} - + -