From 6624cf541b6d31218754046813f5137ddf35121f Mon Sep 17 00:00:00 2001 From: Edwin Eames Date: Mon, 15 Jul 2024 18:00:33 -0400 Subject: [PATCH] first commit --- Dockerfile | 17 +++ Dockerfile.prod | 17 +++ __pycache__/database.cpython-312.pyc | Bin 0 -> 772 bytes __pycache__/main.cpython-312.pyc | Bin 0 -> 869 bytes app/__init__.py | 0 app/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 117 bytes app/models/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 124 bytes .../__pycache__/delivery.cpython-312.pyc | Bin 0 -> 2415 bytes app/models/__pycache__/money.cpython-312.pyc | Bin 0 -> 1569 bytes .../__pycache__/pricing.cpython-312.pyc | Bin 0 -> 1520 bytes app/models/delivery.py | 50 +++++++++ app/models/money.py | 28 +++++ app/models/pricing.py | 34 ++++++ app/routers/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 125 bytes .../__pycache__/delivery.cpython-312.pyc | Bin 0 -> 4912 bytes app/routers/delivery.py | 106 ++++++++++++++++++ .../__pycache__/delivery.cpython-312.pyc | Bin 0 -> 2038 bytes app/schema/delivery.py | 46 ++++++++ app/schema/money.py | 21 ++++ database.py | 21 ++++ main.py | 27 +++++ requirements.txt | 4 + 24 files changed, 371 insertions(+) create mode 100644 Dockerfile create mode 100644 Dockerfile.prod create mode 100644 __pycache__/database.cpython-312.pyc create mode 100644 __pycache__/main.cpython-312.pyc create mode 100644 app/__init__.py create mode 100644 app/__pycache__/__init__.cpython-312.pyc create mode 100644 app/models/__init__.py create mode 100644 app/models/__pycache__/__init__.cpython-312.pyc create mode 100644 app/models/__pycache__/delivery.cpython-312.pyc create mode 100644 app/models/__pycache__/money.cpython-312.pyc create mode 100644 app/models/__pycache__/pricing.cpython-312.pyc create mode 100644 app/models/delivery.py create mode 100644 app/models/money.py create mode 100644 app/models/pricing.py create mode 100644 app/routers/__init__.py create mode 100644 app/routers/__pycache__/__init__.cpython-312.pyc create mode 100644 app/routers/__pycache__/delivery.cpython-312.pyc create mode 100644 app/routers/delivery.py create mode 100644 app/schema/__pycache__/delivery.cpython-312.pyc create mode 100644 app/schema/delivery.py create mode 100644 app/schema/money.py create mode 100644 database.py create mode 100644 main.py create mode 100644 requirements.txt diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..864bc9f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM python:3.12-bullseye + +ENV PYTHONFAULTHANDLER=1 + +ENV PYTHONUNBUFFERED=1 + +RUN mkdir -p /app + +COPY requirements.txt /app + +WORKDIR /app + +RUN pip3 install -r requirements.txt + +EXPOSE 8000 + +COPY . /app \ No newline at end of file diff --git a/Dockerfile.prod b/Dockerfile.prod new file mode 100644 index 0000000..3b0bcf9 --- /dev/null +++ b/Dockerfile.prod @@ -0,0 +1,17 @@ +FROM python:3.12-bullseye + +ENV PYTHONFAULTHANDLER=1 + +ENV PYTHONUNBUFFERED=1 + +RUN mkdir -p /app + +COPY requirements.txt /app + +WORKDIR /app + +RUN pip3 install -r requirements.txt + +EXPOSE 8001 + +COPY . /app \ No newline at end of file diff --git a/__pycache__/database.cpython-312.pyc b/__pycache__/database.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e24c2800ae292173b918784fab433e2e280edc26 GIT binary patch literal 772 zcmYjOzi$&U6t;7}-CU9)XaW@~l|U#$N=XH%NQi-<6Jh|d+)}w`x4Ce>3-+ZbOxLLc z3rsMwR_VaV|GvA^_Y>lgy?Dxq`nzMsgA-KW>W`kuS%egloqpz&_uE4ad!RLg(S^v`er literal 0 HcmV?d00001 diff --git a/__pycache__/main.cpython-312.pyc b/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..45ad770c8a4278a40f98fbb09d06e9fb5bfdc91a GIT binary patch literal 869 zcmZ8f&1(}u6o0d`yJ?ya+r%c+_7D&c@sOm7s6{Ly2p(F+c*-R#nQ1a*b~ns!T9Q+w zf*$KZd-o>sKk*VpFf0Trp1eilDJN(0tpo4P@4feXGjHCTPqEl4$hH0M?co3c{7}Yh zg{ENmMS^o6KoAETl@L-`Fg%j}JbZ&_1=hKWJUDpK+>)G;Pe1d^X#W==3!nVn3+FJWF=w7Hs%{8W@I z3PO)8&wudrv4ksxa&}BbQ{wo;C(nxej1W#wEJ3rlwNdl^`ffhY-HOF)uIKOGEffl^ zlyZCj_;2mpzS&y)pZ+{R*Ry&Mvp9E8%C2Bl=6J#S#HdozYj{hCYWW{p~e z3U7q+mF0(O(!f%NYLs$Lh-eHIA&UII<&e2|R=p+nh2 ztImX~B#6k9a>8x+vRt7nPkI{9+4F|xDz1#G`2|?=gE(_4yg{hER3!%HbPvrM6}Jc} zFY*IirIX^uj~JIC)YlrV+_PQM;Pk%OlBW7uo{(yQ5kh^~>O-avH@=&(Q`W{8fWJZF zGbGOLobSEa`wCZon?^)yhX!##`XtoT6TQS{FLkAtOr2dDt3d=%@(-9u8?1q5yh^`F UzfPWR|I!fJ8Dh}lV>GVmFVWZ81poj5 literal 0 HcmV?d00001 diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/__pycache__/__init__.cpython-312.pyc b/app/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..74dda1a626a08c6e4741fc8a785e0d6e94331862 GIT binary patch literal 117 zcmX@j%ge<81WNJ~(?IlN5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!646gAC;;R5_{_Y_ mlK6PNg34bUHo5sJr8%i~MXW$Yj6hrrVtiy~WMnL22C@L3wia9f literal 0 HcmV?d00001 diff --git a/app/models/__init__.py b/app/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/models/__pycache__/__init__.cpython-312.pyc b/app/models/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab473b9251af4eb4b19ca9546e9e239969d65013 GIT binary patch literal 124 zcmX@j%ge<81hxtj(?IlN5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!lGaZwC;;Q!{FKz3 sV*U8|%)HE!_;|g7%3mBdK*7?SRJ$Tppjt*CE(S3^GBYwV7BK@^0EHA8G5`Po literal 0 HcmV?d00001 diff --git a/app/models/__pycache__/delivery.cpython-312.pyc b/app/models/__pycache__/delivery.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..779dd436186f2e664e330baa62de2ba70293146f GIT binary patch literal 2415 zcmaJ@%Wo4$7~i$mUO(eJ>^KjSG(4I(0W2sgstS~lKuAeKOQRy~Wwq>#lZ9QcGrK0Z zt*BdZs6-Euq6(tD7;#Az4qW-C;lo#I#l7%`Ke&W@&2SE6mMECS1(1m^&vKPC z?42Oq?lF)NSilGYzzV?t134H10rCbPaoe0DD1@E)ZPvv+#pH{CkT>V`LbMGR^SQ7m z@AX2w4VR!C^nD4*7TnQ-Q?9K}z=Ozkz=_)T)YT&0-GX~u?ew;z$iU3?33u4kT|d$U z+@YuODC&6?vaQxYtcmS&*?v#+9d@84vcVR-&(;3$I)~b_!)@6Sm;K0#%g^2@Wt#S4 ze+xd)f)BRfLll$m!!du{B0c6xN5K0PGv0>Fx!i}nOtfVu+p>o%v0NNSW}vFvgs6hM zfIAYs!P13X5XVbM(Iiw6Z@>ypN@Y`5iZX&4ESfl6E-I^KsQg3D--};K>AW~j8(OF2 z!14eVq_S!*=8oWqC>A9RiXx7QqNangO2-LNTrEqg%Opk7l&-1Jfr#E9h#p)VPymk0 zWy91ph(rY-p3Wxy8LEIgeJBBdpkXu#nEF}~clZK^Nv;%}@bPy_38$7NRn?1zs3QOo z1UT!{l5qn9v7jTdpr|UMw_IZdQUxW5gx%0RF#aI- z{~cyGJyuV)4A$G zBRjOYTmzO?&mP|4(hm8Fb*i2oCuC-DbG9~Z&DS%z>SBXf7~A-wI{&#ACBiXY)dsnPpZ~{BG z#afH?%p_5;18u^CqYuWm_HRiKkJbl|?Qnf`nZPP++@@j(Jv~8^+CNg`t&ttB*IB7y{ZQ{C3ClS7lP$HLog}uOzn6#ZzRhf{ zyY{s;T<;zy*?$NBbP1jE_A!^hF=JJgR8p;4XV6&!>7RlzPMUv%EX%$Q1lZBn3~64{W-rXJoqsX? Rufh{-?icevhIF>2{{hxzf_MM` literal 0 HcmV?d00001 diff --git a/app/models/__pycache__/money.cpython-312.pyc b/app/models/__pycache__/money.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b381de4213bfe402e2f64afa124eb2114eec4ec4 GIT binary patch literal 1569 zcmaJ>&2Jk;6rWwMch{e-8@rB6AxZ(YOI1hY!UY96NhyIkLM5uuUPcqoBrNRgI{QJp z9FPyaaH~`yuzYdViz`>+KS12M1errTQV)nzZd3`1)Kh2Hc4?@zZ?$jU@BL=p%$s>L zzZVKwz~zSrKkodN0^n}}W|E#7M#p%mk=`_sfKnaOhaSpnrnyDVcLchkX_<2 zZTVfRo~AnS4|#tfrY11|_2I<9 z6C;_g%Tw@5GvlA6hw{X2=B8uwSjF1R`!aGNku4^&XA;@7iEJs6J(tMNC9>s2wvx!6 zPh_i+Ze&=Y$V{4LUCU-sY%swX^veuD;pb?Qahjd(NnOZC@#m zYYPvxfjnqDDvoMP`^x$8#Y+!A7%UI=9<7WnF7GR~@oPioYTe8IOMTR6)Ud3oWB_tp?r9R4b|p6ee@N_NGob10rK{|ZI01@~lBO-Il8~x<^2Ku3lXSsjZ^pLT zfLOpQGjVj@iQ{VG?Ln=bVSo7w+@6Eh<^XBvX zRxFwX+K-z*t^A@8@+TUDmdlhq50uBmBc9|FCfO2`ZJ8;y!c<$85SRTN%h@@m*;;BV zzRnEWkcdof5Knzbyc{*U5FeYJPf-m}{RnC{4J*Hk6D(C|S3^HxfzT^KOjjuv`oguV zmBqO)MZQ{Dymq@fx43M{!tmUf#&t%8f%4lhpq3=mc{idpj5KIkrtBSn@|aL!OCGUh zPqG!6P?hF989wEO+Ex2AZ4Ghgx|j2`uG~kvQsy;I^uqa0SZki>Eu82*m3fQZej-p` zI`s8KW*iv?{ulZnce{l36{nYZy;cuaov-RXc5%9q0U-d;tJj|^q5vRsdDHoZHbv1* z;;MwS?||4BPEuVW8r=M_1g$kC&`rVK`3UGU_Gpd2{;%s>>%A+V{9gFiA&LvctFeilq&L^0f& zGvG_U9~1~I3Yi+;rJP^DrDE4^7g$vxY^$YH-HleGg|Xqzjl|h=8?>i+W!!c8(^kyn0p6aES^Vi%CR)f z3uqpueqhY@f2Pm*G&t}jiYyR+DUu|;BC|a*`-)uogN*NML(*p(-adh0|B@+L8w-CE I7}8L00EO9Za{vGU literal 0 HcmV?d00001 diff --git a/app/models/delivery.py b/app/models/delivery.py new file mode 100644 index 0000000..c1ff949 --- /dev/null +++ b/app/models/delivery.py @@ -0,0 +1,50 @@ +from sqlalchemy import Column, Integer,\ + DECIMAL, Text,\ + VARCHAR, TIMESTAMP, Date +import datetime +from database import Base + + +class Delivery(Base): + __tablename__ = "delivery_delivery" + + id = Column(Integer, + primary_key=True, + autoincrement=True, + unique=False) + + customer_id = Column(Integer) + customer_name = Column(VARCHAR(1000)) + customer_address = Column(VARCHAR(1000)) + customer_town = Column(VARCHAR(140)) + customer_state = Column(VARCHAR(140)) + customer_zip = Column(Integer) + + gallons_ordered = Column(Integer) + customer_asked_for_fill = Column(Integer) + gallons_delivered = Column(DECIMAL(50, 2)) + customer_filled = Column(Integer) + + delivery_status = Column(Integer) + when_ordered = Column(TIMESTAMP(), default=datetime.datetime.utcnow()) + when_delivered = Column(TIMESTAMP(), default=None) + expected_delivery_date = Column(Date(), default=None) + automatic = Column(Integer) + oil_id = Column(Integer) + supplier_price = Column(DECIMAL(50, 2)) + customer_price = Column(DECIMAL(50, 2)) + customer_temperature = Column(DECIMAL(50, 2)) + dispatcher_notes = Column(Text()) + prime = Column(Integer) + same_day = Column(Integer) + payment_type = Column(Integer) + payment_card_id = Column(Integer) + cash_recieved = Column(DECIMAL(50, 2)) + + driver_employee_id = Column(Integer) + driver_first_name = Column(VARCHAR(140)) + driver_last_name = Column(VARCHAR(140)) + + pre_charge_amount = Column(DECIMAL(50, 2)) + total_price = Column(DECIMAL(50, 2)) + final_price = Column(DECIMAL(50, 2)) \ No newline at end of file diff --git a/app/models/money.py b/app/models/money.py new file mode 100644 index 0000000..e77d0fb --- /dev/null +++ b/app/models/money.py @@ -0,0 +1,28 @@ +from sqlalchemy import Column, Integer,\ + DECIMAL, Text,\ + VARCHAR, TIMESTAMP, Date +from datetime import datetime, timezone +from database import Base + + +class MoneyDelivery(Base): + __tablename__ = 'money_delivery' + + id = Column(Integer, + primary_key=True, + autoincrement=True, + unique=False) + + delivery_id = Column(Integer) + time_added = Column(TIMESTAMP(), default=datetime.utcnow()) + gallons_delivered = Column(DECIMAL(50, 2)) + supplier_price = Column(DECIMAL(50, 2)) + customer_price = Column(DECIMAL(50, 2)) + total_amount_oil = Column(DECIMAL(50, 2)) + total_amount_prime = Column(DECIMAL(50, 2)) + total_amount_same_day = Column(DECIMAL(50, 2)) + total_amount_fee = Column(DECIMAL(50, 2)) + total_amount = Column(DECIMAL(50, 2)) + taxes_paid = Column(DECIMAL(50, 2)) + total_profit = Column(DECIMAL(50, 2)) + total_profit_oil = Column(DECIMAL(50, 2)) \ No newline at end of file diff --git a/app/models/pricing.py b/app/models/pricing.py new file mode 100644 index 0000000..4a55718 --- /dev/null +++ b/app/models/pricing.py @@ -0,0 +1,34 @@ +from sqlalchemy import (Column, Integer, DECIMAL, TIMESTAMP) +from datetime import datetime, timezone +from database import Base + + +class Pricing_Oil_Oil(Base): + __tablename__ = 'pricing_oil_oil' + + + id = Column(Integer, + primary_key=True, + autoincrement=True, + unique=False) + + price_from_supplier = Column(DECIMAL(50, 2)) + price_for_customer = Column(DECIMAL(50, 2)) + price_for_employee = Column(DECIMAL(50, 2)) + price_same_day = Column(DECIMAL(50, 2)) + price_prime = Column(DECIMAL(50, 2)) + date = Column(TIMESTAMP(), default=datetime.utcnow()) + + + +class Pricing_Taxes(Base): + __tablename__ = 'taxes_pricing' + + + id = Column(Integer, + primary_key=True, + autoincrement=True, + unique=False) + state_id = Column(Integer) + taxes_oil = Column(DECIMAL(50, 2)) + taxes_other = Column(DECIMAL(50, 2)) \ No newline at end of file diff --git a/app/routers/__init__.py b/app/routers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/routers/__pycache__/__init__.cpython-312.pyc b/app/routers/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c2b3189da966bc05e637a32aa3e8831661d656c9 GIT binary patch literal 125 zcmX@j%ge<81m_hdrh(|kAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxdC8M8MPyoh7`K2YP vMaBB@@tJv@H+WX)fH#ZJ-Rp*nyeaB)b3ONW6$w8AzE0~ z%Gm$;{{Q^`&pH43{hj>9>va)u3AcYeMfeHg@2G(@W`x1n~uYduN@KoY+3a zO&2K$(^lf?sr>tjMa*6n6enLFlrY=g$MG<= z1`Rw1FVin8NWX;N%QB#21PPfZ>iR-`{d8*(L`s@oNC=3>PftAfJ-*TpjN(@uiW z`@3JYz^gt-z9t$E?yGy-C>q_W;KTNfXPMk6#y5`8BnGjsvI$2)5@It(#SoSndWu{y z;oWh9_`Ufm*=3%5@eB+hpY1uWDAGldkD#`jNAsgte>P3?GrSkcwy8XWa@Lfm6zf!; z7epS73uTa+sxy!PinYY&!G{eLJem{8qo6^rC5Ym=Op6%|D@~}SCXaa{LaL!iHDtX%Z}wx{MM=8 z{_y_Ty|K!UAt^B=hlZC!v0Eo^pI)&N*5Im*h;P2%bFXK?E64UOC%4=?^>CuvF)Vcq zKTZ6p?GJ5I$5AmmA=S`h3ER!W*I~|Puzqu|P~X>IYrNVa!tLuVpi+6u zmO}Td_?)9?qD*rR=+*nGR_(R(Rea8=_Hr6V;KWfFFbBqF!Nr`*pn0ve!Pd6Mi`$^F z7IwcH8@4vsee3M1YvD0izo}Ojev|6KYw+N~8UyCVm^v3egGL{p0kiAYz-#CH28|zU z3|J!)m<|K(!?v@?OF-O%XA5@O2K%IJ+BmzxdV{P3bb|~p+sclzv+OFn%f7O|99S?v zLSI(6=7NUmu~);4_i_+N3*Y!gWgalvXfm!@z^N@|B2U)8^VUhAjW%&MU!3B2^nvN} z@@?=?T!_48;KM{yO7L=)VSu>ePbxq@VY*ae@-&};4||SQe7R{su0lt0C%O zx{^HNiHf<%UF8wSRLs+2PO>tIL$T#Jmd%S@P5fKPElMUHWhlQHy+CD5xoMsUzNRgV0E-7K3S+8Eh&IdQGTM}) zrHQOcm=ql zTl1xb=dUlO>J7ygFanTfCB<2!uWHm#KzkAx;kt`Q9~_nWsW;RTK7jmI=^yYjck{2h zZ+3t3{+;rzvh3=py1FG-_h+LOSGVliH-B*HyAVVNCWwAHHn5!Bdhg6bu9_NQ*X=3ch(Wa*jx9L_mU6i%7`^#|ThP$px zd|^-2qC2Y5K`AWVaOAEeF5%n63<+llPvNg6HQCFEzK`joco2_}-^oa!0?^+&@1C9$^Y5 zq+x+3x zcEakpK6Y*FW9OnJwq$W%pS(7?Xla4T^TsOi?uxsoV(F=~{_*H|oSf{6L*1Pz!6BYU zhZ?m)X~iixm4zx&%J=F=YxUfu1TbFzmw}+3q!fD{<{iilBJezXxu9gBL&K%4pw%~} z84gUnLhcI9W_$5o;>CVp=6?GQg-dpfR8-$*Wb-rk%(X zGZY?m^C^}RCy2izUV;gsZp?2SL*R9qp-1?OfFa^5+=bhUnIy^QL}HoP_MF)Moak95 zx+J0tkbe+;|F#h%h})Nm;lDYXYVL5&)p8?I^EZ9`lLup!mYo&fu2s9mWtz9GcnFi@ zdhA-P;^}>Ia6TrJ?|f}?lc&j-X2SF?xuVJ|31k$%7O!}>eRg6#E|dFKOrs>(`^5Jz Q0zHxO;MXd|XCS!$0U*divj6}9 literal 0 HcmV?d00001 diff --git a/app/routers/delivery.py b/app/routers/delivery.py new file mode 100644 index 0000000..e556a47 --- /dev/null +++ b/app/routers/delivery.py @@ -0,0 +1,106 @@ +from typing import Annotated +from datetime import datetime, timezone +from fastapi.responses import JSONResponse +from fastapi.encoders import jsonable_encoder +from fastapi import APIRouter, Form, Body +from database import session + +from app.schema.delivery import DeliverPricing + + +from app.models.delivery import Delivery +from app.models.money import MoneyDelivery +from app.models.pricing import Pricing_Oil_Oil, Pricing_Taxes + +router = APIRouter( + prefix="/delivery", + tags=["delivery"], + responses={404: {"description": "Not found"}}, +) + +@router.get("/order/money/{delivery_id_order}", status_code=201) +async def add_delivery(delivery_id_order): + get_delivery = (session.query(Delivery) + .filter(Delivery.id == delivery_id_order) + .first()) + get_money_delivery = (session.query(MoneyDelivery) + .filter(MoneyDelivery.delivery_id == get_delivery.id) + .first()) + + print(get_money_delivery) + + + return JSONResponse(content=jsonable_encoder(get_money_delivery), status_code=200) + + +@router.post("/add/{delivery_id_order}", status_code=201) +async def add_delivery(delivery_id_order, deliverydata: DeliverPricing): + + + now = datetime.now(timezone.utc).replace(tzinfo=None) + get_delivery = (session.query(Delivery) + .filter(Delivery.id == delivery_id_order) + .first()) + + get_current_prices = (session.query(Pricing_Oil_Oil) + .order_by(Pricing_Oil_Oil.id.desc()) + .first()) + + get_current_taxes = (session.query(Pricing_Taxes) + .filter(Pricing_Taxes.state_id == get_delivery.customer_state) + .order_by(Pricing_Taxes.id.desc()) + .first()) + + # get total amount for just oil delivered + calc_total_oil = (float(deliverydata.gallons_delivered) * float(get_delivery.customer_price)) + calc_total_oil_supplier = (float(deliverydata.gallons_delivered) * float(get_delivery.supplier_price)) + + # calculate prime + if deliverydata.prime: + prime_price = get_current_prices.price_prime + else: + prime_price = 0 + + # calculate same day + if deliverydata.same_day: + same_day_price = get_current_prices.price_same_day + else: + same_day_price = 0 + + # calculate fees + total_amount_fees_from_delivery = (float(same_day_price) + float(prime_price)) + + # total amount + total_amount_delivery = (float(same_day_price) + float(prime_price) +float(calc_total_oil)) + + # calculate taxes + tax_oil = (float(get_current_taxes.taxes_oil) * float(deliverydata.gallons_delivered)) + tax_other = (float(get_current_taxes.taxes_oil) * float(total_amount_fees_from_delivery)) + total_taxes = (float(tax_oil) + float(tax_other)) + + # calculate profit + profit_from_oil = float(calc_total_oil) - float(calc_total_oil_supplier) + profit_from_stop = (float(profit_from_oil) + float(total_amount_fees_from_delivery)) - float(total_taxes) + + new_money = MoneyDelivery( + delivery_id = get_delivery.id, + time_added=now, + gallons_delivered=deliverydata.gallons_delivered, + supplier_price=get_delivery.supplier_price, + customer_price=get_delivery.customer_price, + total_amount_oil=calc_total_oil, + total_amount_prime=prime_price, + total_amount_same_day=same_day_price, + total_amount_fee= total_amount_fees_from_delivery, + total_amount=total_amount_delivery, + taxes_paid=total_taxes, + total_profit_oil=profit_from_oil, + total_profit=profit_from_stop, + ) + + session.add(new_money) + session.commit() + + + return {"delivery_id": delivery_id_order} + \ No newline at end of file diff --git a/app/schema/__pycache__/delivery.cpython-312.pyc b/app/schema/__pycache__/delivery.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85d90ea3d01dfc6878baf765dfcde1602a5b1010 GIT binary patch literal 2038 zcmZ`)OK%)S5boLOU9Y__?|L78vQC6?R*LW+uux#K z2t17&-wl7Jg#3w0_T;DF;vs-DVi8Moh^zHAH`mW;sOKEr)%&_j`xJDY>BF2wpVEFl zM?NN2{wc8vOnauMary@;xRBoJAw<4bsS|#BK1sxC`QpL|RG{@;H~FH){mNrqAO-hTg2troX*UdfHx( za_ofAJ^zrSv(QJ;;1_a%{;yZI%pj0&I5=Rgxdpk~PZ%G+AB;sgOWnZVR>2=5g)I=r zixybPBA6a^f)xDDcrFw)m7($9TPn9iuBZ38P&PNF<; zI-)V{haQHQGYr?a zMh@b#VSG6*-JXB6S|tZqv!SIAHhHJKjmZ5ZXeuQI4<~ zR{XV`os0e~n}ZmYYi%WIt6pm>OIuAvpI4|Z5oXpG)%)^zPmk1Clm??P@?FLa+Y%L};Q0{qN;NHu zvoO5k5c!9ms49mL4i6J$r61XWsAb2}=N9A45*=kW!!MX+41I14ZO7pYke#S0D{|mo z%dVh-(MMrVLuzP_oX8lOgUIJ_GY=1#XJi{xrKWCyXtS>ZHi%#=6$)>%m^DXGGaUDU zDEPL6rB}mI5I8pU0dCiTT`4Wqn<~4AxdG#l5Qh#~b{Louw3NeWh*-$$PzuMpAZVU+S_+!STUL;Bp++}B4NNH$$nX=cb@FpgRlZ&@8OWpP&z9>-`alV8GoT+lk z@l8ZH>-a4cJrr+Eg%#vb)Zh&#AYdxgn=x%B3+4=rmIP7F{X>DJYT!{e0#EX=lIjpTQR+J-hKD^!%27Nc<=OXOn1&VZ~yji zvbp<$E`JaDZc@VmRK`)%l)I&Jxf|2&bpKNIWH+hSPwr*A%e@w)TwICiO45<}q}itV z)Mftl_Jp?6xrSx#^@^exj4jiH>)UKh91S^NRVJBc5t wa0|pMUDLFeWaA~-d{xl2_f8Kk2rQQcU0XYSa7kdftai1|>4U!sEHa;e0PU<5lK=n! literal 0 HcmV?d00001 diff --git a/app/schema/delivery.py b/app/schema/delivery.py new file mode 100644 index 0000000..f20f825 --- /dev/null +++ b/app/schema/delivery.py @@ -0,0 +1,46 @@ +from pydantic import BaseModel, Field +from datetime import datetime, timezone + + +def datetime_now() -> datetime: + return datetime.now(timezone.utc) + +class DeliverPricing(BaseModel): + prime: bool + same_day: bool + gallons_delivered: float + + + +class SchemaDelivery(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 \ No newline at end of file diff --git a/app/schema/money.py b/app/schema/money.py new file mode 100644 index 0000000..a80ac63 --- /dev/null +++ b/app/schema/money.py @@ -0,0 +1,21 @@ +from pydantic import BaseModel, Field +from datetime import datetime, timezone + + +def datetime_now() -> datetime: + return datetime.now(timezone.utc) + +class SchemaMoney(BaseModel): + delivery_id: int + time_added: datetime + gallons_delivered: float + supplier_price: float + customer_price: float + total_amount_oil: float + total_amount_prime: float + total_amount_same_day: float + total_amount_fee: float + total_amount: float + taxes_paid: float + total_profit: float + diff --git a/database.py b/database.py new file mode 100644 index 0000000..0242857 --- /dev/null +++ b/database.py @@ -0,0 +1,21 @@ +from sqlalchemy import create_engine +from sqlalchemy.engine import URL +from sqlalchemy.orm import sessionmaker +from sqlalchemy.orm import declarative_base + +url = URL.create( + drivername="postgresql", + username="postgres", + password="password", + host="192.168.1.204", + database="eamco", + port=5432 +) + +engine = create_engine(url) + +Session = sessionmaker(autocommit=False, autoflush=False, bind=engine) +session = Session() + +Base = declarative_base() +Base.metadata.create_all(engine) \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..5e825bb --- /dev/null +++ b/main.py @@ -0,0 +1,27 @@ +from fastapi import FastAPI +from app.routers import delivery +from fastapi.middleware.cors import CORSMiddleware + +app = FastAPI() + +app.include_router(delivery.router) + + +origins = [ + "http://localhost:9000", + "https://localhost:5173", + "http://localhost", + +] + +app.add_middleware( + CORSMiddleware, + allow_origins=origins, + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +@app.get("/") +def read_root(): + return {"Status": "Money Service is online"} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..4e961b3 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +fastapi +uvicorn[standard] +psycopg2-binary +sqlalchemy \ No newline at end of file