Configuracion final de back con serve
This commit is contained in:
31
.gitignore
vendored
Normal file
31
.gitignore
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
# Entorno virtual
|
||||
venv/
|
||||
ENV/
|
||||
env/
|
||||
.venv/
|
||||
|
||||
# Archivos de configuración del entorno
|
||||
.env
|
||||
*.env
|
||||
|
||||
# Python cache
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# Logs y archivos temporales
|
||||
*.log
|
||||
*.sqlite3
|
||||
*.db
|
||||
*.DS_Store
|
||||
*.egg-info/
|
||||
*.egg
|
||||
|
||||
# IDEs y editores
|
||||
.vscode/
|
||||
.idea/
|
||||
*.sublime-project
|
||||
*.sublime-workspace
|
||||
|
||||
# Otros
|
||||
*.pyc
|
||||
0
Back_comercial_iko/README.md
Normal file
0
Back_comercial_iko/README.md
Normal file
16
Back_comercial_iko/app/comercial/Main_comercial.py
Normal file
16
Back_comercial_iko/app/comercial/Main_comercial.py
Normal file
@@ -0,0 +1,16 @@
|
||||
from fastapi import APIRouter
|
||||
from Back_comercial_iko.services.Comercial_service import ComercialService
|
||||
from Back_comercial_iko.core.Response import ApiResponse
|
||||
from Back_comercial_iko.core.HttpStatus import HttpStatus
|
||||
|
||||
|
||||
router = APIRouter(prefix="/comercial", tags=["Comercial"])
|
||||
|
||||
@router.post("/create-project")
|
||||
def create_project(data: dict):
|
||||
try:
|
||||
service = ComercialService()
|
||||
result = service.create_project_commercial(data)
|
||||
return ApiResponse.success(result,"Proyecto creado",HttpStatus.CREATED)
|
||||
except Exception as e:
|
||||
return ApiResponse.error(str(e),HttpStatus.NOT_FOUND)
|
||||
48
Back_comercial_iko/core/Auth.py
Normal file
48
Back_comercial_iko/core/Auth.py
Normal file
@@ -0,0 +1,48 @@
|
||||
import jwt
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Dict, Any
|
||||
from core.Config import settings
|
||||
|
||||
|
||||
class TokenManager:
|
||||
"""
|
||||
Handles token generation and validation
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
def generate(cls, payload: Dict[str, Any]) -> str:
|
||||
data = cls._add_expiration(payload)
|
||||
|
||||
return jwt.encode(
|
||||
data,
|
||||
settings.token_secret_key,
|
||||
algorithm=settings.token_algorithm
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def verify(cls, token: str) -> Dict[str, Any]:
|
||||
|
||||
try:
|
||||
return jwt.decode(
|
||||
token,
|
||||
settings.token_secret_key,
|
||||
algorithms=[settings.token_algorithm]
|
||||
)
|
||||
|
||||
except jwt.ExpiredSignatureError:
|
||||
raise ValueError("Token expired")
|
||||
|
||||
except jwt.InvalidTokenError:
|
||||
raise ValueError("Invalid token")
|
||||
|
||||
@classmethod
|
||||
def _add_expiration(cls, payload: Dict[str, Any]) -> Dict[str, Any]:
|
||||
|
||||
expiration = datetime.utcnow() + timedelta(
|
||||
minutes=settings.token_expire_minutes
|
||||
)
|
||||
|
||||
data = payload.copy()
|
||||
data["exp"] = expiration
|
||||
|
||||
return data
|
||||
15
Back_comercial_iko/core/Config.py
Normal file
15
Back_comercial_iko/core/Config.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from pydantic_settings import BaseSettings
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
|
||||
token_secret_key: str
|
||||
token_algorithm: str
|
||||
token_expire_minutes: int
|
||||
|
||||
class Config:
|
||||
env_file = ".env"
|
||||
extra = "ignore"
|
||||
|
||||
|
||||
settings = Settings()
|
||||
16
Back_comercial_iko/core/ExceptionHandler.py
Normal file
16
Back_comercial_iko/core/ExceptionHandler.py
Normal file
@@ -0,0 +1,16 @@
|
||||
from fastapi.responses import JSONResponse
|
||||
from fastapi.exceptions import RequestValidationError
|
||||
from fastapi import Request
|
||||
from Back_comercial_iko.core.HttpStatus import HttpStatus
|
||||
|
||||
|
||||
async def validation_exception_handler(request: Request, exc: RequestValidationError):
|
||||
|
||||
return JSONResponse(
|
||||
status_code=HttpStatus.BAD_REQUEST,
|
||||
content={
|
||||
"success": False,
|
||||
"message": "Formato de request inválido",
|
||||
"error_code": "INVALID_JSON"
|
||||
}
|
||||
)
|
||||
14
Back_comercial_iko/core/HttpStatus.py
Normal file
14
Back_comercial_iko/core/HttpStatus.py
Normal file
@@ -0,0 +1,14 @@
|
||||
class HttpStatus:
|
||||
"""
|
||||
Common HTTP status codes used in the API
|
||||
"""
|
||||
OK = 200
|
||||
CREATED = 201
|
||||
NO_CONTENT = 204
|
||||
BAD_REQUEST = 400
|
||||
UNAUTHORIZED = 401
|
||||
FORBIDDEN = 403
|
||||
NOT_FOUND = 404
|
||||
CONFLICT = 409
|
||||
UNPROCESSABLE_ENTITY = 422
|
||||
INTERNAL_SERVER_ERROR = 500
|
||||
53
Back_comercial_iko/core/Response.py
Normal file
53
Back_comercial_iko/core/Response.py
Normal file
@@ -0,0 +1,53 @@
|
||||
from fastapi.responses import JSONResponse
|
||||
from typing import Any, Optional
|
||||
from Back_comercial_iko.core.HttpStatus import HttpStatus
|
||||
|
||||
|
||||
class ApiResponse:
|
||||
|
||||
@staticmethod
|
||||
def success(
|
||||
data: Optional[Any] = None,
|
||||
message: str = "Success",
|
||||
status_code: int = HttpStatus.OK
|
||||
):
|
||||
|
||||
return JSONResponse(
|
||||
status_code=status_code,
|
||||
content={
|
||||
"success": True,
|
||||
"message": message,
|
||||
"data": data
|
||||
}
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def error(
|
||||
message: str,
|
||||
status_code: int = HttpStatus.BAD_REQUEST,
|
||||
data: Optional[Any] = None
|
||||
):
|
||||
|
||||
return JSONResponse(
|
||||
status_code=status_code,
|
||||
content={
|
||||
"success": False,
|
||||
"message": message,
|
||||
"data": data
|
||||
}
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def exception(
|
||||
exception: Exception,
|
||||
status_code: int = HttpStatus.INTERNAL_SERVER_ERROR
|
||||
):
|
||||
|
||||
return JSONResponse(
|
||||
status_code=status_code,
|
||||
content={
|
||||
"success": False,
|
||||
"message": str(exception),
|
||||
"data": None
|
||||
}
|
||||
)
|
||||
10
Back_comercial_iko/core/SocieteNotFoundException.py
Normal file
10
Back_comercial_iko/core/SocieteNotFoundException.py
Normal file
@@ -0,0 +1,10 @@
|
||||
class SocieteNotFoundException(Exception):
|
||||
def __init__(self, societe_name=None, extra_msg=None):
|
||||
base_message = "Societe not found"
|
||||
if societe_name:
|
||||
base_message += f": '{societe_name}'"
|
||||
if extra_msg:
|
||||
base_message += f" - {extra_msg}"
|
||||
|
||||
self.message = base_message
|
||||
super().__init__(self.message)
|
||||
13
Back_comercial_iko/core/validators/Email_validator.py
Normal file
13
Back_comercial_iko/core/validators/Email_validator.py
Normal file
@@ -0,0 +1,13 @@
|
||||
import re
|
||||
|
||||
class EmailValidator:
|
||||
|
||||
EMAIL_REGEX = r"^[\w\.-]+@[\w\.-]+\.\w+$"
|
||||
|
||||
@staticmethod
|
||||
def validate(email: str) -> bool:
|
||||
|
||||
if not email:
|
||||
return False
|
||||
|
||||
return re.match(EmailValidator.EMAIL_REGEX, email) is not None
|
||||
7
Back_comercial_iko/core/validators/Field_validator.py
Normal file
7
Back_comercial_iko/core/validators/Field_validator.py
Normal file
@@ -0,0 +1,7 @@
|
||||
class FieldValidator:
|
||||
|
||||
@staticmethod
|
||||
def required(value, field_name: str):
|
||||
|
||||
if value is None or value == "":
|
||||
raise ValueError(f"{field_name} es obligatorio")
|
||||
25
Back_comercial_iko/database/Database.py
Normal file
25
Back_comercial_iko/database/Database.py
Normal file
@@ -0,0 +1,25 @@
|
||||
import os
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
class Database:
|
||||
|
||||
def __init__(self):
|
||||
self.user = os.getenv("DB_USER")
|
||||
self.password = os.getenv("DB_PASSWORD")
|
||||
self.server = os.getenv("DB_HOST")
|
||||
self.port = os.getenv("DB_PORT")
|
||||
self.database = os.getenv("DB_NAME")
|
||||
self.engine = self.getconnection()
|
||||
|
||||
def getconnection(self):
|
||||
return create_engine(
|
||||
"mysql+pymysql://{0}:{1}@{2}/{3}".format(self.user, self.password, self.server, self.database)
|
||||
)
|
||||
|
||||
def setConnection(self):
|
||||
session = sessionmaker(bind=self.engine)
|
||||
return session()
|
||||
9
Back_comercial_iko/main.py
Normal file
9
Back_comercial_iko/main.py
Normal file
@@ -0,0 +1,9 @@
|
||||
from fastapi import FastAPI
|
||||
from fastapi.exceptions import RequestValidationError
|
||||
from Back_comercial_iko.core.ExceptionHandler import validation_exception_handler
|
||||
from Back_comercial_iko.app.comercial.Main_comercial import router as comercial_router
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
app.include_router(comercial_router)
|
||||
app.add_exception_handler(RequestValidationError, validation_exception_handler)
|
||||
24
Back_comercial_iko/models/Projet_extrafields_model.py
Normal file
24
Back_comercial_iko/models/Projet_extrafields_model.py
Normal file
@@ -0,0 +1,24 @@
|
||||
from sqlalchemy import Column, Integer, String, Date, TIMESTAMP
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from datetime import datetime
|
||||
|
||||
Base = declarative_base()
|
||||
|
||||
class ProjetExtrafieldsModel(Base):
|
||||
__tablename__ = "llx_projet_extrafields"
|
||||
|
||||
ROWID = Column(Integer, primary_key=True, autoincrement=True, nullable=False)
|
||||
TMS = Column(TIMESTAMP, nullable=True)
|
||||
FK_OBJECT = Column(Integer, nullable=False)
|
||||
IMPORT_KEY = Column(String(14), nullable=True)
|
||||
DEVELOPER = Column(Integer, nullable=True)
|
||||
TIPO = Column(String(255), nullable=True)
|
||||
TIPO_COMERCIAL = Column(String(255), nullable=True)
|
||||
FK_EMPLAZAMIENTO = Column(Integer, nullable=True)
|
||||
LAST_CONTACT = Column(Date, nullable=True)
|
||||
EX_MONTH = Column(Integer, nullable=True)
|
||||
EX_MONTH2 = Column(String(50), nullable=True)
|
||||
ESTADO = Column(String(150), nullable=True)
|
||||
ESTADO_COMERCIAL = Column(String(150), nullable=True)
|
||||
AGENCIA = Column(String(150), nullable=True)
|
||||
ANUNCIANTE = Column(String(150), nullable=True)
|
||||
52
Back_comercial_iko/models/Projet_model.py
Normal file
52
Back_comercial_iko/models/Projet_model.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from sqlalchemy import Column, Integer, String, DateTime, Text, Float, Date, TIMESTAMP
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from datetime import datetime
|
||||
|
||||
Base = declarative_base()
|
||||
|
||||
class ProjetModel(Base):
|
||||
__tablename__ = "llx_projet"
|
||||
|
||||
ROWID = Column(Integer, primary_key=True, autoincrement=True, nullable=False)
|
||||
FK_SOC = Column(Integer, nullable=True)
|
||||
DATEC = Column(DateTime, nullable=True)
|
||||
TMS = Column(TIMESTAMP, nullable=True)
|
||||
DATEO = Column(Date, nullable=True)
|
||||
DATEE = Column(Date, nullable=True)
|
||||
REF = Column(String(50), nullable=True)
|
||||
ENTITY = Column(Integer, nullable=False, default=1)
|
||||
TITLE = Column(String(255), nullable=False)
|
||||
DESCRIPTION = Column(Text, nullable=True)
|
||||
FK_USER_CREAT = Column(Integer, nullable=False)
|
||||
FK_USER_MODIF = Column(Integer, nullable=True)
|
||||
PUBLIC = Column(Integer, nullable=True)
|
||||
FK_STATUT = Column(Integer, nullable=False, default=0)
|
||||
FK_OPP_STATUS = Column(Integer, nullable=True)
|
||||
OPP_PERCENT = Column(Float, nullable=True)
|
||||
FK_OPP_STATUS_END = Column(Integer, nullable=True)
|
||||
DATE_CLOSE = Column(DateTime, nullable=True)
|
||||
FK_USER_CLOSE = Column(Integer, nullable=True)
|
||||
NOTE_PRIVATE = Column(Text, nullable=True)
|
||||
NOTE_PUBLIC = Column(Text, nullable=True)
|
||||
EMAIL_MSGID = Column(String(175), nullable=True)
|
||||
OPP_AMOUNT = Column(Float, nullable=True)
|
||||
BUDGET_AMOUNT = Column(Float, nullable=True)
|
||||
USAGE_OPPORTUNITY = Column(Integer, nullable=True, default=0)
|
||||
USAGE_TASK = Column(Integer, nullable=True, default=1)
|
||||
USAGE_BILL_TIME = Column(Integer, nullable=True, default=0)
|
||||
USAGE_ORGANIZE_EVENT = Column(Integer, nullable=True, default=0)
|
||||
DATE_START_EVENT = Column(DateTime, nullable=True)
|
||||
DATE_END_EVENT = Column(DateTime, nullable=True)
|
||||
LOCATION = Column(String(255), nullable=True)
|
||||
ACCEPT_CONFERENCE_SUGGESTIONS = Column(Integer, nullable=True, default=0)
|
||||
ACCEPT_BOOTH_SUGGESTIONS = Column(Integer, nullable=True, default=0)
|
||||
MAX_ATTENDEES = Column(Integer, nullable=True, default=0)
|
||||
PRICE_REGISTRATION = Column(Float, nullable=True)
|
||||
PRICE_BOOTH = Column(Float, nullable=True)
|
||||
MODEL_PDF = Column(String(255), nullable=True)
|
||||
IP = Column(String(250), nullable=True)
|
||||
LAST_MAIN_DOC = Column(String(255), nullable=True)
|
||||
IMPORT_KEY = Column(String(14), nullable=True)
|
||||
EXTRAPARAMS = Column(String(255), nullable=True)
|
||||
CREATED_AT = Column(DateTime, default=datetime.utcnow)
|
||||
UPDATED_AT = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
99
Back_comercial_iko/models/Societe_model.py
Normal file
99
Back_comercial_iko/models/Societe_model.py
Normal file
@@ -0,0 +1,99 @@
|
||||
from sqlalchemy import Column, Integer, String, DateTime, Text, Float, TIMESTAMP
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from datetime import datetime
|
||||
|
||||
Base = declarative_base()
|
||||
|
||||
|
||||
class SocieteModel(Base):
|
||||
__tablename__ = "llx_societe"
|
||||
|
||||
ROWID = Column(Integer, primary_key=True, autoincrement=True, nullable=False)
|
||||
NOM = Column(String(128), nullable=True)
|
||||
NAME_ALIAS = Column(String(128), nullable=True)
|
||||
ENTITY = Column(Integer, nullable=False, default=1)
|
||||
REF_EXT = Column(String(255), nullable=True)
|
||||
STATUT = Column(Integer, nullable=True, default=0)
|
||||
PARENT = Column(Integer, nullable=True)
|
||||
STATUS = Column(Integer, nullable=True, default=1)
|
||||
CODE_CLIENT = Column(String(24), nullable=True)
|
||||
CODE_FOURNISSEUR = Column(String(24), nullable=True)
|
||||
CODE_COMPTA = Column(String(24), nullable=True)
|
||||
CODE_COMPTA_FOURNISSEUR = Column(String(24), nullable=True)
|
||||
ADDRESS = Column(String(255), nullable=True)
|
||||
ZIP = Column(String(25), nullable=True)
|
||||
TOWN = Column(String(50), nullable=True)
|
||||
FK_DEPARTEMENT = Column(Integer, nullable=True, default=0)
|
||||
FK_PAYS = Column(Integer, nullable=True, default=0)
|
||||
FK_ACCOUNT = Column(Integer, nullable=True, default=0)
|
||||
PHONE = Column(String(20), nullable=True)
|
||||
FAX = Column(String(20), nullable=True)
|
||||
URL = Column(String(255), nullable=True)
|
||||
EMAIL = Column(String(128), nullable=True)
|
||||
SOCIALNETWORKS = Column(Text, nullable=True)
|
||||
FK_EFFECTIF = Column(Integer, nullable=True, default=0)
|
||||
FK_TYPENT = Column(Integer, nullable=True)
|
||||
FK_FORME_JURIDIQUE = Column(Integer, nullable=True, default=0)
|
||||
FK_CURRENCY = Column(String(3), nullable=True)
|
||||
SIREN = Column(String(128), nullable=True)
|
||||
SIRET = Column(String(128), nullable=True)
|
||||
APE = Column(String(128), nullable=True)
|
||||
IDPROF4 = Column(String(128), nullable=True)
|
||||
IDPROF5 = Column(String(128), nullable=True)
|
||||
IDPROF6 = Column(String(128), nullable=True)
|
||||
TVA_INTRA = Column(String(20), nullable=True)
|
||||
CAPITAL = Column(Float, nullable=True)
|
||||
FK_STCOMM = Column(Integer, nullable=False, default=0)
|
||||
NOTE_PRIVATE = Column(Text, nullable=True)
|
||||
NOTE_PUBLIC = Column(Text, nullable=True)
|
||||
MODEL_PDF = Column(String(255), nullable=True)
|
||||
LAST_MAIN_DOC = Column(String(255), nullable=True)
|
||||
PREFIX_COMM = Column(String(5), nullable=True)
|
||||
CLIENT = Column(Integer, nullable=True, default=0)
|
||||
FOURNISSEUR = Column(Integer, nullable=True, default=0)
|
||||
SUPPLIER_ACCOUNT = Column(String(32), nullable=True)
|
||||
FK_PROSPECTLEVEL = Column(String(12), nullable=True)
|
||||
FK_INCOTERMS = Column(Integer, nullable=True)
|
||||
LOCATION_INCOTERMS = Column(String(255), nullable=True)
|
||||
CUSTOMER_BAD = Column(Integer, nullable=True, default=0)
|
||||
CUSTOMER_RATE = Column(Float, nullable=True, default=0)
|
||||
SUPPLIER_RATE = Column(Float, nullable=True, default=0)
|
||||
REMISE_CLIENT = Column(Float, nullable=True, default=0)
|
||||
REMISE_SUPPLIER = Column(Float, nullable=True, default=0)
|
||||
MODE_REGLEMENT = Column(Integer, nullable=True)
|
||||
COND_REGLEMENT = Column(Integer, nullable=True)
|
||||
DEPOSIT_PERCENT = Column(String(63), nullable=True)
|
||||
TRANSPORT_MODE = Column(Integer, nullable=True)
|
||||
MODE_REGLEMENT_SUPPLIER = Column(Integer, nullable=True)
|
||||
COND_REGLEMENT_SUPPLIER = Column(Integer, nullable=True)
|
||||
TRANSPORT_MODE_SUPPLIER = Column(Integer, nullable=True)
|
||||
FK_SHIPPING_METHOD = Column(Integer, nullable=True)
|
||||
TVA_ASSUJ = Column(Integer, nullable=True, default=1)
|
||||
LOCALTAX1_ASSUJ = Column(Integer, nullable=True, default=0)
|
||||
LOCALTAX1_VALUE = Column(Float, nullable=True)
|
||||
LOCALTAX2_ASSUJ = Column(Integer, nullable=True, default=0)
|
||||
LOCALTAX2_VALUE = Column(Float, nullable=True)
|
||||
BARCODE = Column(String(180), nullable=True)
|
||||
FK_BARCODE_TYPE = Column(Integer, nullable=True, default=0)
|
||||
PRICE_LEVEL = Column(Integer, nullable=True)
|
||||
OUTSTANDING_LIMIT = Column(Float, nullable=True)
|
||||
ORDER_MIN_AMOUNT = Column(Float, nullable=True)
|
||||
SUPPLIER_ORDER_MIN_AMOUNT = Column(Float, nullable=True)
|
||||
DEFAULT_LANG = Column(String(6), nullable=True)
|
||||
LOGO = Column(String(255), nullable=True)
|
||||
LOGO_SQUARRED = Column(String(255), nullable=True)
|
||||
CANVAS = Column(String(32), nullable=True)
|
||||
FK_WAREHOUSE = Column(Integer, nullable=True)
|
||||
WEBSERVICES_URL = Column(String(255), nullable=True)
|
||||
WEBSERVICES_KEY = Column(String(128), nullable=True)
|
||||
ACCOUNTANCY_CODE_SELL = Column(String(32), nullable=True)
|
||||
ACCOUNTANCY_CODE_BUY = Column(String(32), nullable=True)
|
||||
TMS = Column(TIMESTAMP, nullable=True)
|
||||
DATEC = Column(DateTime, nullable=True)
|
||||
FK_USER_CREAT = Column(Integer, nullable=True)
|
||||
FK_USER_MODIF = Column(Integer, nullable=True)
|
||||
FK_MULTICURRENCY = Column(Integer, nullable=True)
|
||||
MULTICURRENCY_CODE = Column(String(3), nullable=True)
|
||||
IMPORT_KEY = Column(String(14), nullable=True)
|
||||
CREATED_AT = Column(DateTime, default=datetime.utcnow)
|
||||
UPDATED_AT = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
88
Back_comercial_iko/models/User_model.py
Normal file
88
Back_comercial_iko/models/User_model.py
Normal file
@@ -0,0 +1,88 @@
|
||||
from sqlalchemy import Column, Integer, String, DateTime, Text, Float, Date, TIMESTAMP
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from datetime import datetime
|
||||
|
||||
Base = declarative_base()
|
||||
|
||||
|
||||
class UserModel(Base):
|
||||
__tablename__ = "llx_user"
|
||||
|
||||
ROWID = Column(Integer, primary_key=True, autoincrement=True, nullable=False)
|
||||
ENTITY = Column(Integer, nullable=False, default=1)
|
||||
REF_EMPLOYEE = Column(String(50), nullable=True)
|
||||
REF_EXT = Column(String(50), nullable=True)
|
||||
ADMIN = Column(Integer, nullable=True, default=0)
|
||||
EMPLOYEE = Column(Integer, nullable=True, default=1)
|
||||
FK_ESTABLISHMENT = Column(Integer, nullable=True, default=0)
|
||||
DATEC = Column(DateTime, nullable=True)
|
||||
TMS = Column(TIMESTAMP, nullable=True)
|
||||
FK_USER_CREAT = Column(Integer, nullable=True)
|
||||
FK_USER_MODIF = Column(Integer, nullable=True)
|
||||
LOGIN = Column(String(50), nullable=False)
|
||||
PASS_ENCODING = Column(String(24), nullable=True)
|
||||
PASS = Column(String(128), nullable=True)
|
||||
PASS_CRYPTED = Column(String(128), nullable=True)
|
||||
PASS_TEMP = Column(String(128), nullable=True)
|
||||
API_KEY = Column(String(128), nullable=True)
|
||||
GENDER = Column(String(10), nullable=True)
|
||||
CIVILITY = Column(String(6), nullable=True)
|
||||
LASTNAME = Column(String(50), nullable=True)
|
||||
FIRSTNAME = Column(String(50), nullable=True)
|
||||
ADDRESS = Column(String(255), nullable=True)
|
||||
ZIP = Column(String(25), nullable=True)
|
||||
TOWN = Column(String(50), nullable=True)
|
||||
FK_STATE = Column(Integer, nullable=True, default=0)
|
||||
FK_COUNTRY = Column(Integer, nullable=True, default=0)
|
||||
BIRTH = Column(Date, nullable=True)
|
||||
BIRTH_PLACE = Column(String(64), nullable=True)
|
||||
JOB = Column(String(128), nullable=True)
|
||||
OFFICE_PHONE = Column(String(20), nullable=True)
|
||||
OFFICE_FAX = Column(String(20), nullable=True)
|
||||
USER_MOBILE = Column(String(20), nullable=True)
|
||||
PERSONAL_MOBILE = Column(String(20), nullable=True)
|
||||
EMAIL = Column(String(255), nullable=True)
|
||||
PERSONAL_EMAIL = Column(String(255), nullable=True)
|
||||
SIGNATURE = Column(Text, nullable=True)
|
||||
SOCIALNETWORKS = Column(Text, nullable=True)
|
||||
FK_SOC = Column(Integer, nullable=True)
|
||||
FK_SOCPEOPLE = Column(Integer, nullable=True)
|
||||
FK_MEMBER = Column(Integer, nullable=True)
|
||||
FK_USER = Column(Integer, nullable=True)
|
||||
FK_USER_EXPENSE_VALIDATOR = Column(Integer, nullable=True)
|
||||
FK_USER_HOLIDAY_VALIDATOR = Column(Integer, nullable=True)
|
||||
NOTE_PUBLIC = Column(Text, nullable=True)
|
||||
NOTE_PRIVATE = Column(Text, nullable=True)
|
||||
MODEL_PDF = Column(String(255), nullable=True)
|
||||
DATELASTLOGIN = Column(DateTime, nullable=True)
|
||||
DATEPREVIOUSLOGIN = Column(DateTime, nullable=True)
|
||||
DATELASTPASSVALIDATION = Column(DateTime, nullable=True)
|
||||
DATESTARTVALIDITY = Column(DateTime, nullable=True)
|
||||
DATEENDVALIDITY = Column(DateTime, nullable=True)
|
||||
IPLASTLOGIN = Column(String(250), nullable=True)
|
||||
IPPREVIOUSLOGIN = Column(String(250), nullable=True)
|
||||
EGROUPWARE_ID = Column(Integer, nullable=True)
|
||||
LDAP_SID = Column(String(255), nullable=True)
|
||||
OPENID = Column(String(255), nullable=True)
|
||||
STATUT = Column(Integer, nullable=True, default=1)
|
||||
PHOTO = Column(String(255), nullable=True)
|
||||
LANG = Column(String(6), nullable=True)
|
||||
COLOR = Column(String(6), nullable=True)
|
||||
BARCODE = Column(String(255), nullable=True)
|
||||
FK_BARCODE_TYPE = Column(Integer, nullable=True, default=0)
|
||||
ACCOUNTANCY_CODE = Column(String(32), nullable=True)
|
||||
NB_HOLIDAY = Column(Integer, nullable=True, default=0)
|
||||
THM = Column(Float, nullable=True)
|
||||
TJM = Column(Float, nullable=True)
|
||||
SALARY = Column(Float, nullable=True)
|
||||
SALARYEXTRA = Column(Float, nullable=True)
|
||||
DATEEMPLOYMENT = Column(Date, nullable=True)
|
||||
DATEEMPLOYMENTEND = Column(Date, nullable=True)
|
||||
WEEKLYHOURS = Column(Float, nullable=True)
|
||||
IMPORT_KEY = Column(String(14), nullable=True)
|
||||
DEFAULT_RANGE = Column(Integer, nullable=True)
|
||||
DEFAULT_C_EXP_TAX_CAT = Column(Integer, nullable=True)
|
||||
NATIONAL_REGISTRATION_NUMBER = Column(String(50), nullable=True)
|
||||
FK_WAREHOUSE = Column(Integer, nullable=True)
|
||||
CREATED_AT = Column(DateTime, default=datetime.utcnow)
|
||||
UPDATED_AT = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
20
Back_comercial_iko/requirements.txt
Normal file
20
Back_comercial_iko/requirements.txt
Normal file
@@ -0,0 +1,20 @@
|
||||
annotated-doc==0.0.4
|
||||
annotated-types==0.7.0
|
||||
anyio==4.12.1
|
||||
click==8.3.1
|
||||
colorama==0.4.6
|
||||
fastapi==0.135.1
|
||||
greenlet==3.3.2
|
||||
h11==0.16.0
|
||||
idna==3.11
|
||||
pydantic==2.12.5
|
||||
pydantic-settings==2.13.1
|
||||
pydantic_core==2.41.5
|
||||
PyJWT==2.12.1
|
||||
PyMySQL==1.1.2
|
||||
python-dotenv==1.2.2
|
||||
SQLAlchemy==2.0.48
|
||||
starlette==0.52.1
|
||||
typing-inspection==0.4.2
|
||||
typing_extensions==4.15.0
|
||||
uvicorn==0.42.0
|
||||
24
Back_comercial_iko/services/Comercial_service.py
Normal file
24
Back_comercial_iko/services/Comercial_service.py
Normal file
@@ -0,0 +1,24 @@
|
||||
from Back_comercial_iko.database.Database import Database
|
||||
from Back_comercial_iko.models.Societe_model import SocieteModel
|
||||
from Back_comercial_iko.core.validators.Field_validator import FieldValidator
|
||||
from Back_comercial_iko.core.SocieteNotFoundException import SocieteNotFoundException
|
||||
|
||||
class ComercialService:
|
||||
|
||||
def __init__(self):
|
||||
self.conn = Database()
|
||||
self.db = self.conn.setConnection()
|
||||
|
||||
def create_project_commercial(self, data: dict):
|
||||
|
||||
FieldValidator.required(data.get("ex_societe"), "ex_societe")
|
||||
FieldValidator.required(data.get("nomUser"), "nomUser")
|
||||
nombre_soc = data.get("ex_societe")
|
||||
result_soc = (self.db.query(SocieteModel.ROWID, SocieteModel.NOM).filter(SocieteModel.NOM == nombre_soc).first())
|
||||
if not result_soc:
|
||||
raise SocieteNotFoundException()
|
||||
|
||||
return {
|
||||
"fk_soc": result_soc.ROWID,
|
||||
"nombre_soc": nombre_soc
|
||||
}
|
||||
Reference in New Issue
Block a user