From 11b023cd2b1fe50c0f028af3a1bfec4a74a670d6 Mon Sep 17 00:00:00 2001 From: Anekdotin Date: Fri, 14 Jun 2024 16:09:27 -0400 Subject: [PATCH] first commit --- Dockerfile | 21 ++++++ app/__init__.py | 0 app/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 117 bytes app/__pycache__/database.cpython-312.pyc | Bin 0 -> 776 bytes app/__pycache__/main.cpython-312.pyc | Bin 0 -> 877 bytes app/database.py | 21 ++++++ app/dependencies.py | 13 ++++ app/main.py | 31 ++++++++ app/models/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 124 bytes app/models/__pycache__/admin.cpython-312.pyc | Bin 0 -> 1256 bytes .../__pycache__/delivery.cpython-312.pyc | Bin 0 -> 3179 bytes app/models/__pycache__/money.cpython-312.pyc | Bin 0 -> 1508 bytes .../__pycache__/pricing.cpython-312.pyc | Bin 0 -> 1524 bytes app/models/admin.py | 25 +++++++ app/models/auto.py | 20 +++++ app/models/customer.py | 29 ++++++++ app/models/delivery.py | 69 ++++++++++++++++++ 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__/command.cpython-312.pyc | Bin 0 -> 1162 bytes .../__pycache__/delivery.cpython-312.pyc | Bin 0 -> 3310 bytes app/routers/__pycache__/info.cpython-312.pyc | Bin 0 -> 1865 bytes .../__pycache__/printstatus.cpython-312.pyc | Bin 0 -> 2233 bytes app/routers/info.py | 52 +++++++++++++ app/schema/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 124 bytes .../__pycache__/delivery.cpython-312.pyc | Bin 0 -> 1800 bytes app/schema/__pycache__/money.cpython-312.pyc | Bin 0 -> 1062 bytes app/schema/__pycache__/price.cpython-312.pyc | Bin 0 -> 954 bytes app/schema/price.py | 17 +++++ requirements.txt | 6 ++ 34 files changed, 366 insertions(+) create mode 100755 Dockerfile create mode 100755 app/__init__.py create mode 100644 app/__pycache__/__init__.cpython-312.pyc create mode 100644 app/__pycache__/database.cpython-312.pyc create mode 100644 app/__pycache__/main.cpython-312.pyc create mode 100755 app/database.py create mode 100755 app/dependencies.py create mode 100755 app/main.py create mode 100755 app/models/__init__.py create mode 100644 app/models/__pycache__/__init__.cpython-312.pyc create mode 100644 app/models/__pycache__/admin.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/admin.py create mode 100644 app/models/auto.py create mode 100644 app/models/customer.py create mode 100755 app/models/delivery.py create mode 100755 app/models/money.py create mode 100755 app/models/pricing.py create mode 100755 app/routers/__init__.py create mode 100644 app/routers/__pycache__/__init__.cpython-312.pyc create mode 100755 app/routers/__pycache__/command.cpython-312.pyc create mode 100644 app/routers/__pycache__/delivery.cpython-312.pyc create mode 100644 app/routers/__pycache__/info.cpython-312.pyc create mode 100755 app/routers/__pycache__/printstatus.cpython-312.pyc create mode 100755 app/routers/info.py create mode 100755 app/schema/__init__.py create mode 100644 app/schema/__pycache__/__init__.cpython-312.pyc create mode 100644 app/schema/__pycache__/delivery.cpython-312.pyc create mode 100644 app/schema/__pycache__/money.cpython-312.pyc create mode 100644 app/schema/__pycache__/price.cpython-312.pyc create mode 100644 app/schema/price.py create mode 100755 requirements.txt diff --git a/Dockerfile b/Dockerfile new file mode 100755 index 0000000..c56cc93 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM python:3.12-bullseye + +ENV COMPANYID=1 + +ENV PYTHONFAULTHANDLER=1 + +ENV PYTHONUNBUFFERED=1 + +RUN mkdir -p /app + +COPY requirements.txt /app + +WORKDIR /app + +RUN pip3 install -r requirements.txt + +EXPOSE 8003 + +COPY . /app + + diff --git a/app/__init__.py b/app/__init__.py new file mode 100755 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..7adc33fea83e18626c431a02951c06e83bc62628 GIT binary patch literal 117 zcmX@j%ge<81dd5LX(0MBh(HIQS%4zb87dhx8U0o=6fpsLpFwJViRdR56o7Gjd}dx| mNqoFsLFF$Fo80`A(wtPgB37UxMj$Q*F+MUgGBOr116csMwicNH literal 0 HcmV?d00001 diff --git a/app/__pycache__/database.cpython-312.pyc b/app/__pycache__/database.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..18b138ba01669dd05ce419b85ca22ba50df67cc4 GIT binary patch literal 776 zcmYjOzi-n(6h6m}e_Z3FMWqQ;2r7Y4gcL{xs7MG2hE9k9#Nws8_^yq^ogMC+qA
GPbdUUF>1F zH#f5LmB3Z|4dRZ}6gmP=@iMO93i0;*ky)rvsc@7N5X>oN|7R6a>76f@PNm+3Q>1{z zoAoiku-dHs)_T*Be#i+*$p(qHqL?VbeERsIN)S~csdQ&pAtc0$gyWZf`_5{seS59dZmr(9Da!=0Fp1XAsz zAacY#HIuZus;+b~O3}2B)lYc3-ZUjdgER>f#-dbu8gJ5p=t`>-#rRRPCZU=H(XdO{ zkZbqk!imtz&&MsTS5N5)XS}RLu5U%!xf{|Pa4PNmAL%^Ft&mRPiL@SQ16)Q@q{o!7 zFcDGu9vrDc;CS&m>i4Jb>>#cF@Yub}5!xVAj@>-zB;V}Eh%`G0-KDP`v28360A#lE+k*#~gx-IWiwK5l=3>zVT% kF1%`H&Vf_kcg|(j7+Aahj{glbK7+>FrLW);zo=UN16cFWng9R* literal 0 HcmV?d00001 diff --git a/app/__pycache__/main.cpython-312.pyc b/app/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a368c7986c97acf5c75d544b50d4561ed5597678 GIT binary patch literal 877 zcmY*X&ubGw6n?Wm+op+a(k9dv?8QR_Hz+FDiXejE!79d6E@j=BCR1j2!tAc0Jw+<$ zv7UPJ;!Waz;-!jUSSTps!CPuP_2kSZo790f?|bvU_x784`zfEF1G(1Tv7J){@KXiZ zvd3WfMS>&1fDr>9H4su*W16ow^c3sN@XdyaKm&q$Px1y*WZq#aS{5%!`r_AxVzrT_lcRC&C z|5REb3mErY*5YBbar4@(+s_horD`O3moeVi=7Kh95GISG&=UlcAfhe{Gloy17RQsY zMO;ioc!p};`D}h%bI!5hhzs&)tC~;j z9r==On+l~R$;obx;Bh1c3qze$#(Bq|Jgt01nN_n-bjeTb>`4kP#@ka~QlNpyVoanO z)iJTgUT>0-xbz~a6tN)Noz2|wIgS~*E0k>YpM;Uz20B9M7p$JZ+6i3$VdW2KSN~&} zIjw6C3V@7nQ2Y$VzESKKSNi3P{Zjexa=Hz2fJ%SCLfW7>;T_&M+I+kD6)p`d(9GAB Vmz6iAgSAr)q1sRft&pNr)jxpf+iU;; literal 0 HcmV?d00001 diff --git a/app/database.py b/app/database.py new file mode 100755 index 0000000..0242857 --- /dev/null +++ b/app/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/app/dependencies.py b/app/dependencies.py new file mode 100755 index 0000000..49d6ead --- /dev/null +++ b/app/dependencies.py @@ -0,0 +1,13 @@ +from typing import Annotated + +from fastapi import Header, HTTPException + + +async def get_token_header(x_token: Annotated[str, Header()]): + if x_token != "fake-super-secret-token": + raise HTTPException(status_code=400, detail="X-Token header invalid") + + +async def get_query_token(token: str): + if token != "jessica": + raise HTTPException(status_code=400, detail="No Jessica token provided") \ No newline at end of file diff --git a/app/main.py b/app/main.py new file mode 100755 index 0000000..7602021 --- /dev/null +++ b/app/main.py @@ -0,0 +1,31 @@ + +from fastapi import FastAPI +from app.routers import info +from fastapi.middleware.cors import CORSMiddleware + +app = FastAPI() + +origins = [ + + "https://auburnoil.com", + "https://www.auburnoil.com", + "http://localhost:5169", +] + +app.add_middleware( + CORSMiddleware, + allow_origins=origins, + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + + +app.include_router(info.router) + + +@app.get("/") +def read_root(): + return {"Status": "API Service is online"} + + diff --git a/app/models/__init__.py b/app/models/__init__.py new file mode 100755 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..3baf897a8a1f85e5401fa4a643dfc93d5e167740 GIT binary patch literal 124 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 I1co%!zo08`nE(I) literal 0 HcmV?d00001 diff --git a/app/models/admin.py b/app/models/admin.py new file mode 100644 index 0000000..8295ec9 --- /dev/null +++ b/app/models/admin.py @@ -0,0 +1,25 @@ +from sqlalchemy import (Column, INTEGER, TIMESTAMP, VARCHAR) +from datetime import datetime +from app.database import Base + + + + +class Admin_Company(Base): + __tablename__ = 'admin_company' + __bind_key__ = 'eamco' + __table_args__ = {"schema": "public"} + + id = Column(INTEGER, + primary_key=True, + autoincrement=True, + unique=False) + creation_date = Column(TIMESTAMP(), default=datetime.utcnow()) + account_prefix = Column(VARCHAR(5)) + company_name = Column(VARCHAR(250)) + company_address = Column(VARCHAR(250)) + company_town = Column(VARCHAR(100)) + company_zip = Column(VARCHAR(25)) + company_state = Column(INTEGER()) + company_phone_number = Column(VARCHAR(50)) + diff --git a/app/models/auto.py b/app/models/auto.py new file mode 100644 index 0000000..a3afb18 --- /dev/null +++ b/app/models/auto.py @@ -0,0 +1,20 @@ +from sqlalchemy import Column, Integer,\ + DECIMAL, Text,\ + VARCHAR, TIMESTAMP, Date +import datetime +from app.database import Base + + +class Auto_Temp(Base): + __tablename__ = 'auto_temp' + + id = Column(Integer, + primary_key=True, + autoincrement=True, + unique=False) + todays_date = Column(TIMESTAMP(), default=datetime.utcnow()) + temp = Column(DECIMAL(50, 2)) + temp_max = Column(DECIMAL(50, 2)) + temp_min = Column(DECIMAL(50, 2)) + temp_avg = Column(DECIMAL(50, 2)) + degree_day = Column(Integer) \ No newline at end of file diff --git a/app/models/customer.py b/app/models/customer.py new file mode 100644 index 0000000..4414fde --- /dev/null +++ b/app/models/customer.py @@ -0,0 +1,29 @@ +from sqlalchemy import Column, Integer,\ + DECIMAL, Text,\ + VARCHAR, TIMESTAMP, Date +import datetime +from app.database import Base + + + +class Customer_Customer(Base): + __tablename__ = 'customer_customer' + + + id = Column(Integer, + primary_key=True, + autoincrement=True, + unique=False) + account_number = Column(VARCHAR(25)) + customer_last_name = Column(VARCHAR(250)) + customer_first_name = Column(VARCHAR(250)) + customer_town = Column(VARCHAR(140)) + customer_state = Column(Integer) + customer_zip = Column(VARCHAR(25)) + customer_first_call = Column(TIMESTAMP(), default=datetime.utcnow()) + customer_email = Column(VARCHAR(500)) + customer_automatic = Column(Integer) + customer_phone_number = Column(VARCHAR(25)) + customer_home_type = Column(Integer) + customer_apt = Column(VARCHAR(140)) + customer_address = Column(VARCHAR(1000)) \ No newline at end of file diff --git a/app/models/delivery.py b/app/models/delivery.py new file mode 100755 index 0000000..9765ae1 --- /dev/null +++ b/app/models/delivery.py @@ -0,0 +1,69 @@ +from sqlalchemy import Column, Integer,\ + DECIMAL, Text,\ + VARCHAR, TIMESTAMP, Date +import datetime +from app.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)) + + +class Auto_Delivery(Base): + __tablename__ = 'auto_delivery' + + + id = Column(Integer, + primary_key=True, + autoincrement=True, + unique=False) + customer_id = Column(Integer) + customer_full_name = Column(DECIMAL(50, 2)) + last_fill = Column(TIMESTAMP()) + last_updated = Column(TIMESTAMP()) + estimated_gallons_left = Column(Integer) + estimated_gallons_left_prev_day = Column(Integer) + tank_height = Column(VARCHAR(25)) + tank_size = Column(VARCHAR(25)) + k_factor = 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 100755 index 0000000..5194633 --- /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 app.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)) + \ No newline at end of file diff --git a/app/models/pricing.py b/app/models/pricing.py new file mode 100755 index 0000000..e3707e0 --- /dev/null +++ b/app/models/pricing.py @@ -0,0 +1,34 @@ +from sqlalchemy import (Column, Integer, DECIMAL, TIMESTAMP) +from datetime import datetime, timezone +from app.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__ = 'pricing_taxes' + + + 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)) diff --git a/app/routers/__init__.py b/app/routers/__init__.py new file mode 100755 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..22febaed0daca0332e2c08456a9b4138aa0079da GIT binary patch literal 125 zcmX@j%ge<81dd5LX(0MBh(HIQS%4zb87dhx8U0o=6fpsLpFwJV$>=8*6o7G2erZW+ uQL%n}d}dx|NqoFsLFF$Fo80`A(wtPgB37VcMj$Q*F+MUgGBOr116csQz8T~I literal 0 HcmV?d00001 diff --git a/app/routers/__pycache__/command.cpython-312.pyc b/app/routers/__pycache__/command.cpython-312.pyc new file mode 100755 index 0000000000000000000000000000000000000000..bc5914f92c5c83c603a17e7bb024fd8e1684f207 GIT binary patch literal 1162 zcmZWn&1(}u6rb5mvYTv^P3uRsg65!Ls>Zg^i-=ILqOJY#;~<1R= z2dF1K2wpshH>rXL{{#;OFAXWQ3>Fa;?5z?H>dBeSZYw%4Z+`RMn>X+M-g}?TW&mGq zyIdKO0Qf8}@lqnte8Is}fB=FvaG(Jl$&eh`kfG2?cEU*-$q>tS%25m@#0gt<(ndPO zNju|ch8E(K-R5MCECdq35GhEVf+&qLNVA{?U$rgDtzV5C&Q%Y@scfGpy9ir1l)DEO zBZHBj)rqq@Q)$>m+X zoA0<729Wn6h&TYC%DeXO3KFp<=BgU^GB)sY+pDVnrH&wi*AD}*^iC^m_`FLsL=_*e^DhOEtb4dZSEwMU@O$5J)Az$o!g-)^uS)(b%Mfg$2`j)3 zC0*P-&o@28#W(PC0esPSKbn6y|Lkf*?_Sk=>w53oqpN*`^}fNS_Ilq?Lmyt%$Lji6 zL%*?19Q@(xW&*8p>jB7HZ5@xPAN%?*d2da{MO7yM7HQ) z@)Qoj+Fybue*nl{E`F;gd9<31Pmx3XDww2KxY(2-gdahF9rUk*?sahND=4gk!|UM4 zr*y}fwref3m!mVF_PoTfvwn1ow#)kL8{v{X-%LYXzo&3W|zy( zu3}4B0&-ix_9+n>z!6#?J@}wNE})_);2`K<&a#V>GVoJOa=a2)5F2OGZRyiRkgoLofN!){hU1!(3LPAVbXPL`(Ekt&~Yf^-$ z$cag?;@<57sNzTyJoXiM9Prdr^b=3VD_&vn=RC7rcxFABOZ|<^l;bSl#ad0(OS&lJ z9F|uAL6;QK@{;d{S`z{FUA%hb`|6r5VvGN_iWL~;(L_y?)EbE4*UE2-O6ig)OK*#K z9gsj5S%%T1={?dFqF^6zSOZtFRF-P1#qUZo`CB0d{GfDG)HZzcLeDTb*OR38A#PSc z5VbOv>N>cw;agGl6BTu>Cghx!yN<<*bkpMX(yC_pu&CA58aTWWn=c8%{5#A}Q4$)K ztB&bPkr+HhA-*exalby5X-m z1V_VfIH<;i-NU3tfNBJcfZ^W&un}aE;iK)4;jK1*DUvd`gsFM+-vAJ&Kq3LwF30!);FYDMaAT(=YoWmx7KbBV`Hw%e`O`#OB0+dM!pTcDm?l$^s z@^yWNNMN#+mO~OSIg8zJIU$~wyR0gTr03$)6PzHugb-+$sU9Y|ZUt9GoiX{k6(gLKy4hs4MOA+juGc`n8+e>d-3bsd(n-&@(~D+$@oxBWI&&v{;6~FgJ`9*s zuQvH{XpH1{-ZHaiA6_uCSDJhpkjQ9zV8$GnX+D3!9JsJ~xf300NAqSh-<)4Dqbr+N zI`Pa0*Ub3j<`QT>^Zd>`W@@p?Cq9d0JIS$o>XzDxCp($hPHMcJI%TF#*+P1%Gc?&5 z$#*hmJA*Tw_(*5)xx;iQ>fXF^ID%Zk+e^2W-t&FRXa2+oZm-;0`IJw<6rs!qFEs;G zO@8WM8hJ_l^zt_@pXOF_X`rO_I=rbcd4SUM-96f#N(l~MUBW~gd*A~JQLoRzqpx(m zr1egFoIo0V)6KDD#pE?&MUM2)EX3qxZqWgX3c8v-fRY6r(Cg_ApvO5z?DSxAriiPA zL%N*d?k29q*Hulo`0J`F1JTH8Nv8?>5qbiu2w#NHm)>(=W=$3^;O{|`JiD~t!{@-s zaoi&`ypN{-g2o@A6Q85GM`-$UH2nz8?4$FL0seR=knH#qcZNFyvG;!b>!oJmWHbE2 zp@;W7Hr)piKE?eHH7yOo`wIdb~INwCMGGdl~vP5dso zbIu$+bKoKvY|ZS#-nTwp_~gaCWpn100}n;LX!?b{!H@Y*+g9j<2>Qf{9OGY5 J^Y|)w{%`$wB1`}P literal 0 HcmV?d00001 diff --git a/app/routers/__pycache__/info.cpython-312.pyc b/app/routers/__pycache__/info.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..18e94a9ecdd133b8f27fd236e36c0349beaf116a GIT binary patch literal 1865 zcma)6&2Jk;6rb5$ukH0GPDVT~@aZRhr?F{>{rRPfuUmCTMP%W%Rom7qvq1FFmGU*! zke85F*31=Z$Sa0smM&OEO*R|E5E<;1E^9iStDdZ8RxB(~seMI06bBU5E+ehxkff{r zg5^wCth%YBc`VkDTG2klf+Mfk*pF1ZW|`#p)nK+pj#RUbrO1u);1Ai0R0VuO=HAal zTmq0(!Wp0eK$T-Yj|hiGu;JoRbt~y^koU-|>N{W_sMWxKZ7%M^tf9yIG=URwch^8Q z>guDno23aAxCRyO7Iy`F&wl{ZeBo-E!<=;;2N@W4i6N8rBl=(1bEB@J2BLq2eHKzw zR9bFePE)WzQOBN&hHMA(wu5ktMV2ZSDwXTDV;Q8}9FDE14p}3lnod8rjYE&FDXP=c z593+6R$~(}uGp;7nOXx+&>ROpuVht9mZqag5*Z`YewT>fz+dZNUj&Jn+qsS0-IML9 z=Xa7%Z@j%}b!O*Vv-6$VTx&Mho_(pET-ZrIweiNcZ}mLDGqLXj$Ku=ZGo5&@70z>3KA9{vn?Khd2rx76mvS62wN8 z9&~6pL&~@jM-gV^RSh0WK$dIZ`e^`$@k6?dJYB*y2|TjLe} z7C#`BP{95Rmlv1vg?BE#d^OFZFp0tA1K3KnYnG{&%(}6xA{=zBrfjHbiBQqTBB{4( zzRxI#D4P*Q1&b9;Cp`qwk3i#8B&j$-L|VY!K_VPwjO&-EMBBv3&8DQDCIivFhXV&Z zQHoejk!jx`f^q5BaP$l9bM2czJDgg7g)nRK)a~R(aZ-$TbboR*i$?USt&6k(Xs#?SpcX+N0ENvksbJcMnk-_05K*sJfkzX*=zs z7o*+-Gxa77w|}q2{&mAVL4(~W2E}(^k0b*OsE586Nnl-9&!Y^n(SB$BnXn%t~JXko@^owe7QStkV* zi6oVpp4vmDUV7*iIhAtApU?wRFCa$(jp|ccsoaR%Lz+|H%RaJ6LMw&P8bN2c7 z<~{#BFpx#CUgY&kD}~TADJ08`neKZSq3;ku1pBCl%NR>u^R=2@))lY&sam?6R(#4g zYG&C~eA>5anQ}()hM%q3Wg8<6QA|u?tzwcPSz>$G!;f+;J^ETXM|0IvNecaw474B% zxyaxbs1>oOJoq2pPS1Pj7~aD@@BA^mM|$3)N4?ih6vqx^UPUZ2vsXX97BoZ3K*-Hq zUtG9Gc_XNE3i42u2X%MZr%SZH5)kEMa>}_E)WK|hNPX`PWot6@D)Z`a%ThI1=IdsO zhi=&9!iY}qTYyB^gz^>UH9`nq&nyICp%OIfq^Jv{!Dz+%Or%10m5U6EQ{d}X>8|UA zUVU{X#!($?c3cBn2O#V_P0osBBfkG98OLPh^-z~X~hT2S(oR=E1 zYSA~Q8fzlUs7sc-kk&Yxgpgs_-H(9$j$Uk{U!Ae9H@@2V{zlt5v*%3jI@3?i?af@; zow>9g<`4@ZqY2m`-iFV=rZT+czWhZsz&#uh>{_H!m1-zb# zzWpYY_CTV~=c>-o#b&LkuPQc literal 0 HcmV?d00001 diff --git a/app/routers/info.py b/app/routers/info.py new file mode 100755 index 0000000..53afe51 --- /dev/null +++ b/app/routers/info.py @@ -0,0 +1,52 @@ + + +from fastapi import APIRouter +from app.database import session +import os +from app.schema.price import SchemaPricing +from app.models.admin import Admin_Company +from app.models.pricing import Pricing_Oil_Oil + + +router = APIRouter( + prefix="/info", + tags=["info"], + responses={404: {"description": "Not found"}}, +) + + +@router.get("/price/today") +async def get_todays_price_of_oil(): + + get_current_prices = (session.query(Pricing_Oil_Oil) + .order_by(Pricing_Oil_Oil.id.desc()) + .first()) + + current_price = str(get_current_prices.price_for_customer) + return { + "ok": True, + "todays_price": current_price + } + + + +@router.get("/company") +async def get_company(): + company = os.getenv("COMPANYID") + + + get_company_info = (session.query(Admin_Company) + .filter(Admin_Company.id == company) + .first()) + + company_phone_number = get_company_info.company_phone_number + company_name = get_company_info.company_name + + return { + "ok": True, + "company_phone_number": company_phone_number, + "company_name": company_name + } + + + diff --git a/app/schema/__init__.py b/app/schema/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/app/schema/__pycache__/__init__.cpython-312.pyc b/app/schema/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6600c24fba6be5e5e72b87d44e383ef5c7bd732e GIT binary patch literal 124 zcmX@j%ge<81dd5LX(0MBh(HIQS%4zb87dhx8U0o=6fpsLpFwJVN$V#T6o7GYaz<)y tqJDgQW?p7Ve7s&kA>v6u@V1=gw!}m(RWrf5bTxFy{d zI(dv-s(|Wubq~Zj5>{?T=y9o_>$iZm^5=1-pzHV3*?%9Pp|wB6T=gvNFgoJOS=tlf z{DQ8O|Eu-eG>-KzaSm8OZ$s_gA>-2z;;F0`r4#kvCitsJNf*Qk`lGh|{myqgKUIIO z|5#6JThH+pufxj!ngScTI);+Y5kn)(MWfOeh}jIg)($MOGEm8oZ3t^peq}=yO%<@s z8C%uZ=8bK^P)$(@u{l=#wO$NnG|v_wM&pfZHNDn+<62#>wM_IyLv2l}vL!>yhB}&5 zr(I2|tDd30p%p``npC_sV_VmxqTDdFVf=0y8W`GCG<|D$OEw?q{rzONy|U&^5)lQA z6VH_mql6R=>Y`Dp>vEPPuQ`b5D3nd(kO(;4vTpQaFP5!G)c2z>ArW^OXRhpGT_=1e7BO(q5_2__wCS6l&*CBiC zo0vHQ5}Q!!V9R+rfeBFIIkFOYz8XX`nZ&X0!Bk@IIqbDYbG>7#6D)`shk`iF%k`3& z3K%elFGa9Kmcd)WAYvLb*(x-LayQ=qnj8?$9FHAB&r2>>A0dGp zel%rFxwL1tvBwiZ@_m|_d|FuAF=xa%p!^XdG>9glkTnqr>d*SAjlHl?_J<8wB{~uz za)FQ_awk3mt`qY0g!(E6XtoDYT7=LLdV^`Hods(mxGazThzhPQBYi#a4Mpmb;5U^R zC{a^F-3+{;#9|?;0LcZ2Z&B9nq_~qU_fp);daEg3opGn1;(oT&O>sBtuBCV_+t^I; zX4b!v;u~3aCB-Ybyxh3;Z0BO*&dKLz@1^+8<=~xX4=)D0C;MmjQoMV){r+zcFShrd z(b;mjHc0VcmcQ0K-OHNo)B8nsooiXkmGu;_XMJ5yUTt1a zTi4(2UEp5cuORgVr^oW&QN60}1N literal 0 HcmV?d00001 diff --git a/app/schema/__pycache__/money.cpython-312.pyc b/app/schema/__pycache__/money.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c58ddcd768cae41d7a33ecdf6a901f72e3d928f1 GIT binary patch literal 1062 zcmZXSKX21O6u|H7i|Zy%NJ~RfwUsJCL0RY*h!_|OLTZ4d z(XB#4Vn+QaEJ$XsPDl()Y?T5_C*IkKA#jr4{ocFx-o590pPJ1&f@PhMk!c|GT`Tid zo56Gs;2d$pv5x}m;=phXtaZaT1JgAF;u6qJVU7$=PKjGH&;!J4r-)kuUzlYc*P1N# z?H^j{8*2GJOT~V~g|BLRp71%?Y|f;RULcgM<%=j3%1VSBC*iQnQA(Xqf76E`&XL5W z8KGln;ol|6+;VKq>Cb*Ki#N&`SG`>p$HkWpk3_(B z1E_CuH=ZbGUN_Z&EpXOp(hi81=xgKp+rgW`d;5d)&dC}(pUF<*z{!6dfelSxgE&V5 zxtJr@c#MQ82*(4kiW-nnkOgE`L@KIPWL30OkzLVpMfHjr6*-zF&3;QY4vR+jb)TvM zPvxD6WI{cz>iT^s<6LmH@`U+*6sC0M0H#(tj$_{w35^qPC{$}WPGuBSdRs=4`IH6G zIFvNj(e< literal 0 HcmV?d00001 diff --git a/app/schema/__pycache__/price.cpython-312.pyc b/app/schema/__pycache__/price.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..faef3f0c913102860dfe14603877f98c876f8284 GIT binary patch literal 954 zcmZWn&1=*^6rV{Z+3Z)Vww7H=3nEnmVlP5HEFMH!Jy?X|C6^&&CN?EsP9{h^6|A7A z_ErSZt5W|HFT(b)4nhS_-U_P+dvYe(v=j&C_kQnl-kX^(-EIrW_4j?~??M26Dy3e= zgp5}u*#`s=7=j2oFwz_iDqRcpNO$xIIY{a{)qRbi9po4qSOdh^0mP*6K(FdJX3?;% zUrMnx(Y)to^ie`+D2&yBhD6#d;&RG^hzd*LizKGPWR&MD_Np2cs)A~dA4u2-TsB^< zEv;r}lB1e$nKe6;2b0_lV8eAAF*UQ$Nk;*<w!!!I%`T}O6gZFo zM|%ROP7#3vX{Cl_TFFew^ivx;WyUEp71IE1Q0sG}p3!O2mdv!2uV~sW(cLHqc`WA$ z;-^9jh?psd!ahqPoaJd629$|Q6Jx@#muEbQ&f92|hDkxGn5yD3H=>xhg=km0#E9BZ zOcUz6dC0NvdOTr;K zGRE-3#N|TIIAiLe%iCu?#nc2#>(h5x9PALU?U&a}1>TZCdco-ormYit_k> DsvzP= literal 0 HcmV?d00001 diff --git a/app/schema/price.py b/app/schema/price.py new file mode 100644 index 0000000..521c303 --- /dev/null +++ b/app/schema/price.py @@ -0,0 +1,17 @@ +from pydantic import BaseModel, Field +from datetime import datetime, timezone + + +def datetime_now() -> datetime: + return datetime.now(timezone.utc) + +class SchemaPricing(BaseModel): + + id: int + price_from_supplier: float + price_for_customer: str + price_for_employee: float + price_same_day: float + price_prime: float + date: datetime =Field(default_factory=datetime_now) + \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100755 index 0000000..710d751 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +fastapi +uvicorn[standard] +psycopg2-binary +sqlalchemy +python-multipart +pyowm \ No newline at end of file