first commit

This commit is contained in:
2024-06-14 16:09:27 -04:00
commit 11b023cd2b
34 changed files with 366 additions and 0 deletions

21
Dockerfile Executable file
View File

@@ -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

0
app/__init__.py Executable file
View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

21
app/database.py Executable file
View File

@@ -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)

13
app/dependencies.py Executable file
View File

@@ -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")

31
app/main.py Executable file
View File

@@ -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"}

0
app/models/__init__.py Executable file
View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

25
app/models/admin.py Normal file
View File

@@ -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))

20
app/models/auto.py Normal file
View File

@@ -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)

29
app/models/customer.py Normal file
View File

@@ -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))

69
app/models/delivery.py Executable file
View File

@@ -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))

28
app/models/money.py Executable file
View File

@@ -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))

34
app/models/pricing.py Executable file
View File

@@ -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))

0
app/routers/__init__.py Executable file
View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

52
app/routers/info.py Executable file
View File

@@ -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
}

0
app/schema/__init__.py Executable file
View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

17
app/schema/price.py Normal file
View File

@@ -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)

6
requirements.txt Executable file
View File

@@ -0,0 +1,6 @@
fastapi
uvicorn[standard]
psycopg2-binary
sqlalchemy
python-multipart
pyowm