| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- import typer
- from sqlalchemy.orm.session import Session
- from client.measures_client import ClimaMeasuresClient
- from config.settings import CLIMA_API_URL
- from cruds.finca_company import create_finca_company, delete_finca_company
- from cruds.fincas import (
- create_finca,
- get_finca_by_station_code,
- get_fincas_filter_company,
- update_finca_title,
- )
- from database.sqlalchemy import SessionLocal
- from models.users import User
- from schemas.finca_company import FincaCompany as FincaCompanySchema
- def update_fincas(company_id: int):
- db: Session = SessionLocal()
- user = db.query(User).first()
- client = ClimaMeasuresClient(
- token=user.token,
- url=CLIMA_API_URL,
- )
- fincas_api = client.get_stations(str(company_id))
- fincas_local = get_fincas_filter_company(db, company_id)
- added = 0
- deleted = 0
- updated = 0
- # Agregar Fincas que esten en clima pero no en este sistema
- for finca_api in fincas_api:
- if not any(
- finca_local.station_code == finca_api.station_code
- for finca_local in fincas_local
- ):
- if not get_finca_by_station_code(db, finca_api.station_code):
- finca = create_finca(db=db, finca=finca_api)
- else:
- finca = get_finca_by_station_code(db, finca_api.station_code)
- finca_company = FincaCompanySchema(
- finca_station_code=finca.station_code, company_id=company_id
- )
- create_finca_company(db, finca_company)
- added += 1
- # Eliminar Relaciones con Fincas que no esten en clima pero si en este sistema
- for finca_local in fincas_local:
- if not any(
- finca_local.station_code == finca_api.station_code
- for finca_api in fincas_api
- ):
- delete_finca_company(
- db=db, company_id=company_id, station_code=finca_local.station_code
- )
- deleted += 1
- fincas_local = get_fincas_filter_company(db, company_id)
- # Mantener congruencia de titulos
- for finca_local in fincas_local:
- finca_api = next(
- (x for x in fincas_api if x.station_code == finca_local.station_code),
- None,
- )
- if finca_local.title != finca_api.title:
- update_finca_title(
- db=db, station_code=finca_local.station_code, new_title=finca_api.title
- )
- updated += 1
- response = {
- "added_fincas": added,
- "deleted_fincas": deleted,
- "updated_fincas": updated,
- }
- return response
- def update_fincas_console(
- company_id: int = typer.Option("", "--id"),
- ):
- return update_fincas(company_id)
|