from datetime import datetime from typing import List from sqlalchemy.orm import Session from sqlalchemy.sql.sqltypes import Boolean from cruds.finca_company import get_finca_company_by_company_id from cruds.utils import order_fincas from models.company import Company from models.fincas import Finca as FincaModel from schemas.fincas import Finca as FincaSchema def get_fincas(db: Session, skip: int = 0, limit: int = 100) -> List[FincaModel]: return order_fincas(db.query(FincaModel).offset(skip).limit(limit).all()) def get_fincas_filter_company(db: Session, company_id: int) -> List[FincaModel]: fincas_company = get_finca_company_by_company_id(db, company_id) station_codes = [f.finca_station_code for f in fincas_company] return order_fincas( db.query(FincaModel).filter(FincaModel.station_code.in_(station_codes)).all() ) def get_finca_by_station_code(db: Session, station_code: str) -> FincaModel: return db.query(FincaModel).filter(FincaModel.station_code == station_code).first() def get_finca_by_title(db: Session, title: str) -> FincaModel: return db.query(FincaModel).filter(FincaModel.title == title).first() def create_finca(db: Session, finca: FincaSchema) -> FincaModel: db_finca = FincaModel( station_code=finca.station_code, title=finca.title, last_synced=finca.last_synced or datetime.now(), ) db.add(db_finca) db.commit() db.refresh(db_finca) return db_finca def delete_finca(db: Session, station_code: str) -> Boolean: finca = db.query(FincaModel).filter(FincaModel.station_code == station_code).first() db.delete(finca) db.commit() return True def update_finca_title(db: Session, station_code: str, new_title: str) -> FincaModel: finca = db.query(FincaModel).filter(FincaModel.station_code == station_code).first() finca.title = new_title db.commit() db.refresh(finca) return finca