From 5d80acfcea68f8883989c4ad7693406ec6ad06f4 Mon Sep 17 00:00:00 2001 From: Anekdotin Date: Thu, 4 Apr 2024 16:39:29 -0400 Subject: [PATCH] changes --- Dockerfile | 2 + app/__pycache__/__init__.cpython-312.pyc | Bin 117 -> 117 bytes app/__pycache__/database.cpython-312.pyc | Bin 776 -> 776 bytes app/__pycache__/main.cpython-312.pyc | Bin 622 -> 746 bytes app/bin/__init__.py | 0 app/bin/print_file.py | 1 + app/dependencies.py | 13 --- app/main.py | 7 +- .../__pycache__/delivery.cpython-312.pyc | Bin 2415 -> 2406 bytes .../__pycache__/printer.cpython-312.pyc | Bin 0 -> 1010 bytes app/models/delivery.py | 4 +- app/models/printer.py | 29 +++++ .../__pycache__/command.cpython-312.pyc | Bin 820 -> 4366 bytes .../cron_make_files.cpython-312.pyc | Bin 0 -> 484 bytes .../__pycache__/cron_print.cpython-312.pyc | Bin 0 -> 3196 bytes .../__pycache__/cronprint.cpython-312.pyc | Bin 0 -> 1108 bytes .../__pycache__/printstatus.cpython-312.pyc | Bin 581 -> 2603 bytes app/routers/command.py | 110 +++++++++++++++++- app/routers/cron_print.py | 78 +++++++++++++ app/routers/printstatus.py | 36 +++++- app/schema/__init__.py | 0 app/schema/delivery.py | 39 +++++++ requirements.txt | 7 +- tickets/1.pdf | Bin 0 -> 1339 bytes 24 files changed, 298 insertions(+), 28 deletions(-) create mode 100644 app/bin/__init__.py create mode 100644 app/bin/print_file.py create mode 100644 app/models/__pycache__/printer.cpython-312.pyc create mode 100644 app/models/printer.py create mode 100644 app/routers/__pycache__/cron_make_files.cpython-312.pyc create mode 100644 app/routers/__pycache__/cron_print.cpython-312.pyc create mode 100644 app/routers/__pycache__/cronprint.cpython-312.pyc create mode 100644 app/routers/cron_print.py create mode 100644 app/schema/__init__.py create mode 100644 app/schema/delivery.py create mode 100644 tickets/1.pdf diff --git a/Dockerfile b/Dockerfile index c6164f9..785582a 100755 --- a/Dockerfile +++ b/Dockerfile @@ -12,6 +12,8 @@ WORKDIR /app RUN pip3 install -r requirements.txt +RUN apt-get update && apt-get install -y wkhtmltopdf + EXPOSE 8000 COPY . /app diff --git a/app/__pycache__/__init__.cpython-312.pyc b/app/__pycache__/__init__.cpython-312.pyc index 8fe2c5d6bd66ee779af294db5219a9e41163dca7..37fe7f1167a2298e62a0603454f02689d8280f0f 100644 GIT binary patch delta 17 XcmXRdzN=a%TYmBgX^A delta 17 XcmXRdtN$P&CAQh00iAE%p1A?G64WAT?AwR delta 20 acmeBR>tN$P&CAQh00fdhnKp9&WdZ;$_ypzv diff --git a/app/__pycache__/main.cpython-312.pyc b/app/__pycache__/main.cpython-312.pyc index 9a23e4e5a86ba55f472a9eb9557131e6a99dcf61..9f67a5e38432bd4b2027525a4271c193bd0863a3 100644 GIT binary patch delta 314 zcmaFI@`{!3G%qg~0}wpm;7`k9oX97^#KbsJLrx->HHwvyfr%lNaWzO92%^|h*|PX2 zP7q}jm{=ey31maWk;zonEIg9TU`b}SEa8dAG#R-jeh}qlzQvVXl%E%0P?VWhGMSCh zQHd?MB(bElxJohrB$QgD5S&_6mYJNYkXfwYpO=%FmpVCwQBPh3Xl*eckZ53dz$0=& z%GcqzhWsv?3^q%xb1`r`MS%FE{ z^aca-bq1k}3_=sEt_!PN6jr&yp!$J>fr+(UyivSExLM{S6CFp*D!=>)?>4LL1F1}277#?>GxAc$g3WzFJ+u#w4B z<}AL64`d~=OR|6^nOU<0CoyV@b5^oyvb_Z9)?~cJ?v_|w;uzqm$u!xA(UF(cBQ+-{ z{}yX_eo;=!&6vZ^rEJ&Q=7MpW^ gPHAr5Eq2emlGOCnq9PWc(v7p$aWHMqxmL`xgojeW;0GDaB{UPCYOc_|8Alw#FP!C{v$RmV@cxAJ~IFC z4k;i{FECeV#_ZL~vd`1iORPARQ+Z0vP>0p*m!!rsP8d|&a)}X2$^qBIvbz>a-3&}t zoX`vAa#?QLcG;oCwz*~7w1PuV;XdGCl* zt+u<^6!H9#_^iX#8q3Hk(wL(At}yGM)pfgG_?FCW7_I)n*1(-sZ~uv*S_Ad5BMV%; z{;}u7Nd3uSXU~?ltv9j_b1%D--5?jR7x;CcY+wZ1W|3&S&T$)?{n&)_>7lhXSs>0;I#NHzkA1$`%a OC%n0F?-Yoko#{6>TK4t; literal 0 HcmV?d00001 diff --git a/app/models/delivery.py b/app/models/delivery.py index 6696629..8319183 100644 --- a/app/models/delivery.py +++ b/app/models/delivery.py @@ -1,5 +1,5 @@ from sqlalchemy import Column, Integer,\ - Integer, DECIMAL, Text,\ + DECIMAL, Text,\ VARCHAR, TIMESTAMP, Date from datetime import datetime from app.database import Base @@ -48,5 +48,3 @@ class Delivery(Base): pre_charge_amount = Column(DECIMAL(50, 2)) total_price = Column(DECIMAL(50, 2)) final_price = Column(DECIMAL(50, 2)) - - diff --git a/app/models/printer.py b/app/models/printer.py new file mode 100644 index 0000000..22d300e --- /dev/null +++ b/app/models/printer.py @@ -0,0 +1,29 @@ +from sqlalchemy import Column, Integer,\ + DECIMAL, Text,\ + VARCHAR, TIMESTAMP, Date +from datetime import datetime +from app.database import Base + + +class Printer_jobs(Base): + __tablename__ = "printer_jobs" + + id = Column(Integer, + primary_key=True, + autoincrement=True, + unique=False) + + delivery_id = Column(Integer) + date_added = Column(Date(), default=datetime.utcnow()) + date_completed = Column(Date(), default=datetime.utcnow()) + employee_id = Column(Integer) + #0 = waiting + #1 = file made..read to print + #2 = printing + #3 = printed + #4 = error + status = Column(Integer) + + + + diff --git a/app/routers/__pycache__/command.cpython-312.pyc b/app/routers/__pycache__/command.cpython-312.pyc index 3f75949f242a115578e7210dc892594e60af687a..0e9d95e4df272fa548e7f1913679230ed1539c14 100644 GIT binary patch literal 4366 zcmcgv-D?zA6u)<7_Iusk>}EILx~%e3+3 z?N;_Lzz%4Uw|s#XOcABFY+xO*tb=vdfeoxfmUUB|b#Mdguw@;ovkpx)C!$a2z7p8* z96J8NhxrLzAqmlt=?;AyXjxj}vtq zh7V`*r?hEzawMP2rN?E%RTI>!;0?nkE7}NA3pz|N?HS7J@zMOmxD0DL3q%=J&lr-P zKCKxZqG*NuI4m{Yo-ELrb#-J+(UYIShS-wBsys7Nb1?HQz4*`JSs8-fV+h0L>y|zv zFq<_MzmgfOJGdg_R<6FW)ZQnCu-3gj)8!i<^zA{F2mNBlkTfPebfGA5U{s`R`C-F_k5TOpd z>7W;A`QPx;uozCuvLYJ+Cc|YHvWgDxJ_V%wl%l{z8BR@4>l2zG0mBg*1!SSu(a>Zm$Wn}zIv z!Svp=b5Q+>{+>mvPUMSRO3o+C-j3NLkHT%&dav|;=Prj6OOduK`>uC?-Sbt?jgC@# ze>t*uDbjjn@0a_l4&(@~x>2yB5__c*ZLPF*Rbuh`u|1{Oo=Q`A)#nU4XOFH1ki&oe z*x6&3UH7Ec2a@mn(AlATQuFWr(B&O-19zpCe>CdEbBDJd-ifCJCPaoO)2gnHpB@2? zRj5lDEIx)Cd>&ZXfx<$q2Bm43ZU*T*%c6`04r@g#*8#9Bpfm!79^hkmcxJ57=Ng1; ztA;QT*8pqt@r|H?#`f0%^SQ_Ww-mExjTZZCT;i~s5sJbfI{6OxSkx^}DT6L4`2ac zjwy}h3PN2;=vhxBng~Un;n4G-CNycW6hK<3L_>+tvoiD(dQu~3Wtm#yh$&|Pj*wS| zEe+!+F`dn_>_9r`3|+LMrzG2;N;rT`AT^LUychwR5o)7VMKkayc@_FKx*eJn;$%BD ztD(OJr5gA(vKw?esrf^wIQspeO9$o;To|~XxY2a4y{F{snH_xK4cjRp*0tmb%ttSt zSrKtd+hb2~K6cf8Kh#|cb>BEt3iXyfeM`JESqde;?=OY+mpyN<>HMkxmjibW{5Vhw zy;t_UzvS`HM=nIGKIDj011Qk>7jiqg=J12?)=I49ntVm(S*7KEY*#6^%gibf@0<&= ziYIi*H}AWA^fz~BwF$INl@txT2aDn2q}qyiS$u@l2!~uoLEf=MN9%^0b>E^ zEigU=kM=E896FV7 zgOz89_$3f*5wF3B75jWobr`89FN@@Wyc!^ZVWc6gZAe}XqJ9(dYCv_|pKHmByap#p zgz7LtgV}@vgf5f9P%;{6g|>{hZ0SOYcvg9UQme$hcUg)98H~J_~CQB4+uSdDy=EzA3=n6 zZDpmK@v~xpc f+_5Y~O=V}5O4Z%g(5+>>ZCQw!+BlQQ0POf*mB<+L literal 820 zcmY*X&ubGw6n-z^4ZBeOK zu%4_?=+%Q4iT)*CT6!=H6c2jPTT49Ho}AfaQ3vMD_vX#K`Mz)Wv*Xwx$NM8(_YuH1 zm1M&lg8nlJwt)aaEeMf^LhRvC^E9OPa4Q$;o}OZ@WrU_@BEUcq$q~JQh(SzZ1t>rt z^IdJw(X*)4EM?F9U5VY59Mm9%m(U$R@a&Zl*ZHY3R}=ZU#ap+dPC}V5=V?sagbU~9 z($eCMHr^r<0{-^30s+ctzNZ`s7}a(2%pTJnpD_=VkZ-zt`ZqRea;TcD5eu zSrcEZsaQ6~PBB$sx(s4O zl9(ob;@|f<9gr`ntuP|A#iwORKixozF<>gR22E00AD}Or08@X`v2|5m>a^%Jc1EU3 zB(KVFpdp05!t5^0?!)9hoI5nYF7*m0dvFU=*&z596`H9Ip#96VUpRM&CD(&!N$%q zg0ZY|5-KZQmStsnA>~yHzbsnb0>vvoQVzZjiz4#s~)& zxzz3G!02+~El+Z(1a6<*#?SFmqr?mI5O?qqu+Omkri74xA&@86@c0V)KVkhEHvhzs juFgAydHUevqj`UD@$T}~Y;AkCvhz0z($qkI&} zqxX)orBZ;>x+sMRu#E(W0tARq1cd@AX!_Lt2?hEhLN-inR5(Rlpnjt*Kcs%@?2<=1 zLIU)$3vzdMc4l^WcIG$tw?Lo|LHny5%5TUB{gX}H=Iao96o`+Jj&xi^C7i(}AtPWm z7m8v@%1E3Ri=L7<fVO>E*V zWm9bLmQf6)@FVvKy-^Qr;`U4r-b9<7g-q}Vq(fclup#6HJ#tg(>V)(GBMiLgO(_#u zkP@*+%vwUA{>gXW{JB+i3_?TawcOk+v8rW#TC?Zu1g1XQux-;S1F5`A%rb~&3)YN1 zwRk9X)hZb&tyDH_Q%lX7&Wv><<(RoS!?9C~hp#$Lt^qC)b z1X7EhRE}6>DzV=D2yRLHb;HgPv*N&Zi~cFgQSDAdRIRM5C2h{I)ry{1^JdYoxs59o5CQJI zR;=BOtJk?kbH!~;C) zxmGpE0%2iGy|5`uMX&8>PSvKORxDD{b_f+roklC26s(eB);7qznKK|e^!%LZP&rSm zQWjQdxM<}xmPXmmCBfX)s$&+ZRI=s`Fskd+o3lzK(@FSfY}RmG$*f~#`6eX7j)U`5 zVQwgEB_j(UL4DVa8NP=?I8)EEWh$4A>-VojeGj^Sqi>hd(;zxD`q?|5yt6g2GjirZAiDC4kKVo?8*jwMH`0yR z#7^MkgFtxY@&{L19^@Hnc~Ky^{8}?`^a%=khU)m?;P6`dvzI=3>BEKf(~ZGIU3oY# zwk2*%{_)}$7dQQlfpp!sD+h0dRzhpO^^vcfd-A!5gX0?$jlt6(3oHFA{kPvz-ybR>!OIt{mb*ldC~S23LajO(d8avDa08(0f|$FC(3a4H4@l(a`lHM}~-$f=d7d&)@551K6n1tPac>p$6+;+;G>fBgIlZ9jb{ z6<8Hvm)iS1bWqu$Z?_s^^+w0M>R^Y-@K)&79hU=ALJiLfyxw&x76h$OVEMVP75w`c zFm=NS!X3gKDssOoQxi8kX$v(eB%uYA@Jtbw3sfjpSUCvhw2D(D98D`#C*dXRyN~wS z)tL&ha`3f9MN%!Z0-!U%g|8h=htM)?>fx`KkocQZ*#&uuD^%hV?4t12?Z+k)Fyr0p zK-h0Ww~Tf}N7j!uLZj>RjnK*EHy-xIZY5WeYoqJ(_E6$4qj&p$wmkVwIP$T4N4_6E z)(9Wl36DNO*b}WwyFR5p{o7wX7Gbsr#!zB_`tlmosftN>AhYeM0+63{3u?Q*4KP;8 z(v6~>2Uk*`qze&0l2+(zN%!PDC)`Vap=vwxu3 z7p}*fp@G})tzX)Xo!SnjpZcUeVc82YDagMYet)?B)(#$gEF8hXJrN1<7Nc4hac6Z~ i8QH;yT0#g9ZKR$c7?{*y&S)L;;^^(mPZ13K$o~b$pTR8v literal 0 HcmV?d00001 diff --git a/app/routers/__pycache__/cronprint.cpython-312.pyc b/app/routers/__pycache__/cronprint.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e72c64bc329c465b46dd102c744cf59a70caff64 GIT binary patch literal 1108 zcmZWn&1(}u6o0e3+0A#8w%VwzR8cfm+j{b%LcxoQRa87gO4w#6Wz$VI&TQ0{3Vwk- zcu*8X5%j23Fa8@|A_WZtp$8H4mRb+$$v4wYD>^W5esA8qH}C!4d!I_h0oTX=MERWt z@L4L|Wrbkv8GE)<=pjaXpWwso_m$D zIq7J~CEfeoYusx{omlk#Hz4F}EI|>wIj|4~ENrqvqswVb&QfyVr#g z*fU(jSol4kPmk4Q%&}{>8@RQZQkcIw43u|puf0QY8VGV7gtY=xuq*$rKzgXv<)qT> zRo8&$=BrBduj>#xWOhHmhJWJ!7hR5TzyjQ|7T^R-VJ-ro@pe4djx^kA+!wJ!DguJg|cX7rO0vc}?`s(4ZK&rCA#AV&E4QL4uUI z3^qLcduYtA*VSgKr(E?xy&A30iIhUckWe;&PFdXiGK#P8^CtW-VQ9~bGf&UFIk-G{ zWF3I@q-KwX%D^1Bqo9CtAr& zM@Q6&LMr=U&*HJBk^9AEdABFFObn38e2=ioHda-4nH*n{4YkpY#xvO}k?G!tqsLi9 zUMI1@QO6GKX`9n^-umQK701)#qbSrwGTB_w`l6ws+&6_v#elt7! zdvAa9M>d;A@VxR_w%kl2^rsxekJ)p&s~Djl5kUm|sESJ%OJDP~s$SBSultE=vXoSQ z!Z)gB$y9#Qx2ma9O8JJLuG%FVBMnhZOk!8wo-;>Dlf!G81y8& z3#X6|8TlIRMlLFi{0G|Uqeq88kM+^xL!c-6=*c0_=lbZW)9B`Oe&$$yMIMXP!u9u7 zgGNXh3^I#1R+d*OuLm_wVLV#lLCszF=^CwV1Vmv>PC5628icKPsPBD3SyL{(&b%7z zvQ`P!dCM&F&O{{(Af0h`2JgP?(LQp%Z(b_tz5bj=tMFZ5r1ov{T+)L5EjXg8^Ae}M-)cc^MQ4ik^|lKeI~z@NrHADK`@~b!X-Po#}|rj zy{;NlDd)wy%v$u0LcJ-{jJjma3u%?JSy(a#t@|#RztKP2=r3pLyRC1xe)_QOTsm~- z4xG8)UO$|_axi~oZ|q=xvF$7!Ix7dxO56Eh`|3S=`fl#>uQTo3n|u0Q``Uiu+M}*K z|Cb9dFXV8`D9U#=&wO5wCG|{J0UMQOLYiqXQBK%-IhI^2GbJ4bKCoAHKlCxh<`t#6~li&eOMiHbUU}v8sC4$5LbFV%{(sJGrX4wTztb0t7 zEyjAILjPJ)A}dDY`QGKomF$WPXl#MFp}X#K8Y%XKoT`F^`@8@~-I+{YKw|tE|Td-Thr*E?&%t?jeZ7?S~#<+uC>Yz&<^u~RZ>!6Dr z^x6Xhr6-Q;$)oi6?b#z|{QH|fFYQlW-XEEJXeQFywsA6oH0zt$FJ^Bqw(;}>O~dcw ou8y>s6Xl**arkN*pBsdyo((Ux@ysB6{@L*JZ60mJ3h-S|0FC*lumAu6 delta 435 zcmYjNJxc>Y5S`h*%Uu$qCW?v>wY^5GbRvi!Bq$+hK)6oajhx(hVef)kMU9}PlEU90 z(Vt;uqwQI!o$35&)XLq9g$wWPyq%f1v)dWI)%x!;nH0$N(IvHaxac2i)}*=w1`J*B z&_<8g#G^JvAi$9kMz@h^OlJuP9lSO=RP_Vc8rOExz4$*fvx7a&k|)slOWBEol$Gu( zWzi@(Un#BmjgX6I)L7(ozRQ9rQ><1iOZ!{A9yg4KRC1XXAo~ha!cYfCus#x z4K7D?a2;;w9$K^<=|%3kexz^s!ev(=22{BOv<01Rsy>(Pv`Ho z{CA+q(_`JhvSma@Z8Hcr>yA+G6)GciNl`-d2B+IR6v{8YLJX=%x&D~5p3fRCpA#ce vs=o-9CB0F^6h1-W0SYh4T-#6Pr&2)7)A6J6vxU~=J3*ZIq(HK96dV2mN84Uq diff --git a/app/routers/command.py b/app/routers/command.py index 630dfc9..f24c3c7 100644 --- a/app/routers/command.py +++ b/app/routers/command.py @@ -1,7 +1,9 @@ -from fastapi import APIRouter, Depends, HTTPException +from fastapi import APIRouter + +from datetime import date, timedelta, datetime from app.database import session from app.models.delivery import Delivery - +from app.models.printer import Printer_jobs router = APIRouter( prefix="/command", @@ -10,7 +12,103 @@ router = APIRouter( ) -@router.get("/") -async def read_items(): - x = session.query(Delivery).first() - return {"x": x.id} \ No newline at end of file +@router.get("/printticket/{delivery_id}") +async def print_specific_ticket(delivery_id): + + now = datetime.utcnow() + + get_ticket = (session.query(Delivery) + .filter(Delivery.id == delivery_id) + .first()) + + new_job = Printer_jobs( + delivery_id = delivery_id, + date_added = now, + date_completed = None, + employee_id = get_ticket.driver_employee_id, + status = 0, + ) + session.add(new_job) + session.commit() + + return {"ok": True} + + +@router.get("/print_waiting") +async def print_waiting_tickets(): + + tomm = date.today() + timedelta(days=1) + now = datetime.utcnow() + + get_deliveries = (session + .query(Delivery) + .filter(Delivery.delivery_status == 0) + .filter(Delivery.expected_delivery_date != tomm) + .filter(Delivery.expected_delivery_date != date.today()) + .all()) + + for f in get_deliveries: + new_job = Printer_jobs( + delivery_id = f.id, + date_added = now, + date_completed = None, + employee_id = f.driver_employee_id, + status = 0, + ) + session.add(new_job) + + session.commit() + + return {"ok": True} + + +@router.get("/print_today") +async def print_today_tickets(): + + now = datetime.utcnow() + + get_deliveries = (session + .query(Delivery) + .filter(Delivery.expected_delivery_date == date.today()) + .all()) + + for f in get_deliveries: + new_job = Printer_jobs( + delivery_id = f.id, + date_added = now, + date_completed = None, + employee_id = f.driver_employee_id, + status = 0, + ) + session.add(new_job) + + session.commit() + + return {"ok": True} + + +@router.get("/print_tommorrow") +async def print_tommorrow_tickets(): + + now = datetime.utcnow() + tomm = date.today() + timedelta(days=1) + + get_deliveries = (session + .query(Delivery) + .filter(Delivery.expected_delivery_date == tomm) + .all()) + + for f in get_deliveries: + new_job = Printer_jobs( + delivery_id = f.id, + date_added = now, + date_completed = None, + employee_id = f.driver_employee_id, + status = 0, + ) + session.add(new_job) + + session.commit() + + return {"ok": True} + diff --git a/app/routers/cron_print.py b/app/routers/cron_print.py new file mode 100644 index 0000000..10a7378 --- /dev/null +++ b/app/routers/cron_print.py @@ -0,0 +1,78 @@ +from fastapi import APIRouter, BackgroundTasks + +from app.database import session +from app.models.printer import Printer_jobs +import subprocess +import shutil +import pdfkit + +location_tickets = '/home/amnesia/gitbox/tickets/' +printer_url_service = 'http://172.18.0.1:5173/ticket/' + +router = APIRouter( + prefix="/cron", + tags=["cron"], + responses={404: {"description": "Not found"}}, +) + +@router.get("/waiting") +async def make_waiting(): + + """ + Cron job - Gets waiting tickets in database and makes pdf files + Updates values in database for next step + """ + get_tickets_to_print = (session.query(Printer_jobs) + .filter(Printer_jobs.status == 0) + .all()) + count = 0 + for f in get_tickets_to_print: + # get the pdf name + filename_out = str(f.id) + '.pdf' + # read website for the html in + web_url = printer_url_service + str(f.id) + pdfkit.from_url(web_url, filename_out, verbose=True) + #set location and name to move the ticket too + renamed_file = location_tickets + filename_out + # perform command to move command + shutil.move(filename_out, renamed_file) + + # update count + newcount = count + 1 + count = newcount + f.status = 1 + session.add(f) + session.commit() + + + return {'ok': True, + 'count': count, + } + + +@router.get("/print/waiting") +async def print_waiting(background_tasks: BackgroundTasks): + """ + Checks if pdfs are made by query + Prints tickets using linux command on background tasks + """ + get_tickets_to_print = (session.query(Printer_jobs) + .filter(Printer_jobs.status == 1) + .all()) + if get_tickets_to_print is not None: + for f in get_tickets_to_print: + background_tasks.add_task(print_ticket, id=f.id) + f.status = 3 + session.add(f) + session.commit() + + return {'ok': True } + +def print_ticket(id: int): + location = location_tickets + id + '.pdf' + + p = (subprocess.run(["lp", location], capture_output=True)) + + for line in p.stdout.readlines(): + print(line) + \ No newline at end of file diff --git a/app/routers/printstatus.py b/app/routers/printstatus.py index dab9e77..5ac6997 100644 --- a/app/routers/printstatus.py +++ b/app/routers/printstatus.py @@ -1,10 +1,40 @@ -from fastapi import APIRouter, Depends, HTTPException +from fastapi import APIRouter +from fastapi.responses import JSONResponse +from fastapi.encoders import jsonable_encoder + +from app.database import session +from app.models.delivery import Delivery +from app.models.printer import Printer_jobs + router = APIRouter( prefix="/status", tags=["status"], responses={404: {"description": "Not found"}}, ) -@router.get("/") + + +@router.get("/waiting") async def read_items(): - return {"Hello": "World"} \ No newline at end of file + all_jobs = session.query(Printer_jobs).filter(Printer_jobs.status == 0).all() + return JSONResponse(content=jsonable_encoder(all_jobs), status_code=200) + +@router.get("/ready") +async def read_items(): + all_jobs = session.query(Printer_jobs).filter(Printer_jobs.status == 1).all() + return JSONResponse(content=jsonable_encoder(all_jobs), status_code=200) + +@router.get("/printing") +async def read_items(): + all_jobs = session.query(Printer_jobs).filter(Printer_jobs.status == 2).all() + return JSONResponse(content=jsonable_encoder(all_jobs), status_code=200) + +@router.get("/printed") +async def read_items(): + all_jobs = session.query(Printer_jobs).filter(Printer_jobs.status == 3).all() + return JSONResponse(content=jsonable_encoder(all_jobs), status_code=200) + +@router.get("/error") +async def read_items(): + all_jobs = session.query(Printer_jobs).filter(Printer_jobs.status == 4).all() + return JSONResponse(content=jsonable_encoder(all_jobs), status_code=200) \ No newline at end of file diff --git a/app/schema/__init__.py b/app/schema/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/schema/delivery.py b/app/schema/delivery.py new file mode 100644 index 0000000..834cf70 --- /dev/null +++ b/app/schema/delivery.py @@ -0,0 +1,39 @@ +from pydantic import BaseModel, Field +from datetime import datetime, timezone +from uuid import UUID, uuid4 + +def datetime_now() -> datetime: + return datetime.now(timezone.utc) + +class Delivery(BaseModel): + customer_id: int + customer_name: str + customer_address: str + customer_town: str + customer_state: int + customer_zip: int + gallons_ordered: float + customer_asked_for_fill: int + gallons_delivered: float + customer_filled: int + delivery_status: int + when_ordered: datetime = Field(default_factory=datetime_now) + when_delivered: datetime = Field(default_factory=datetime_now) + expected_delivery_date: datetime = Field(default_factory=datetime_now) + automatic: int + oil_id: int + supplier_price: float + customer_price: float + customer_temperature: float + dispatcher_notes: str + prime: int + same_day: int + payment_type: int + payment_card_id: int + cash_recieved: float + driver_employee_id: int + driver_first_name: str + driver_last_name: str + pre_charge_amount: float + total_price: float + final_price: float diff --git a/requirements.txt b/requirements.txt index 4e961b3..e7cbf49 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,9 @@ fastapi uvicorn[standard] psycopg2-binary -sqlalchemy \ No newline at end of file +sqlalchemy +python-multipart +pdfkit +requests +beautifulsoup4 +lxml \ No newline at end of file diff --git a/tickets/1.pdf b/tickets/1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6b001c3277ee62bb7e45f7395a75356e06da706f GIT binary patch literal 1339 zcmZWpU1$_n6rMgv%I$;ET8c{Ic`y(kvNLz~Cs}Kwo89boiK*L}kW`l-{?jrfBiK1fiX6u}1xh%fpg#&c(Xvh2>o{W){a zx!?KDcW+lFk?f&?5b0Vuzw#%cpaDNNMfU9@>PSI247&FaHSRG>a1XlQtt)fNv@)p( zWkzvuXW`C7V@3zCuS(!oGtX^;*gTcN3PtGZK4sO%G`y zjrw!nkv*ippD;HkvFMGM=4TnGaZ6YZpTJ|R308z4Iv5QBp_YKbvPhW%k0PoW1L2kA zVi>f5rW4h+fCeD3G1ukzn`)KqFv}IJ0bYizG=!t! zfaZVD7t*WC@dhGfl3F+8+~J-%YuOBBb2D*s7Gxy`7LLn}68!x{&5-h}d6`kIQ|O1M zObaBL^n?FNZ{MG{*U>YPauYH$xScS1};Uj<>Z;2_bU zCLQcyg4sOBWcH#!Va|~9nai0wqWUt3(GbJrK{l}~<1J3cyo%Q9}~Qkl^Q=N7*s>ut{4 zZGYb|`^~YB^Qe%hDwqG#aUiN(#M3(1?E%{0l(Tp+c?*Buk{~3^I-_{wlY*cTxg?d}_MS=}}!m|nv^ZZxNESz9i mFAz2D<~hg*5U+&6xd4o)2)rmPPx#bOEf@vT)iro1N!|n7oquBh literal 0 HcmV?d00001