from pydantic import BaseModel, EmailStr, Field, validator from datetime import datetime from typing import Optional # import re from enum import Enum from sqlalchemy.orm import Session from datetime import datetime from typing import Optional from fastapi import HTTPException from app.modules.suppliers.models import Suppliers from app.modules.suppliers.schema import SupplierCreate, SupplierUpdate class SuppliersService: @staticmethod def create_suppliers(db: Session, data:SupplierCreate ): new_suppliers = Suppliers(**data.dict()) db.add(new_suppliers) db.commit() db.refresh(new_suppliers) return new_suppliers @staticmethod def get_suppliers(db: Session, suppliers_id: int, current_user): suppliers = db.query(Suppliers).filter(Suppliers.id == suppliers_id).first() if not suppliers: raise ValueError("suppliers no encontrado") return suppliers @staticmethod def update_suppliers(db: Session, suppliers_id: int, data:SupplierUpdate , current_user): suppliers = db.query(Suppliers).filter(Suppliers.id == suppliers_id).first() if not suppliers: raise ValueError("suppliers no encontrado") if current_user.role not in ["ROOT", "ADMIN"]: raise ValueError("No tienes permisos para actualizar este suppliers") update_data = data.dict(exclude_unset=True) for key, value in update_data.items(): setattr(suppliers, key, value) db.commit() db.refresh(suppliers) return suppliers @staticmethod def delete_suppliers(db: Session, suppliers_id: int, current_user): suppliers = db.query(Suppliers).filter(Suppliers.id == suppliers_id).first() if not suppliers: raise ValueError("suppliers no encontrado") if current_user.role not in ["ROOT", "ADMIN"]: raise ValueError("No tienes permisos para eliminar este suppliers") try: suppliers.is_active = False suppliers.deleted_at = datetime.utcnow() suppliers.deleted_by = current_user.id db.commit() db.refresh(suppliers) except Exception as e: db.rollback() raise ValueError(f"Error al eliminar el suppliers: {e}") return {"message": "suppliers eliminado correctamente"}