front_ponto_eletronico/routes/company.py

201 lines
6.0 KiB
Python

from flask import Blueprint, request, jsonify
from flask_jwt_extended import jwt_required
from flasgger.utils import swag_from
from models.company import Company
from models.user import db
from models.service_instance import ServiceInstance
company_bp = Blueprint('company', __name__, url_prefix='/company')
@company_bp.route('/', methods=['POST'])
@jwt_required()
@swag_from('../docs/company/create.yml')
def create_company():
#dados basicos
data = request.get_json()
name = data.get('name')
fantasy_name = data.get('fantasy_name')
type = data.get('tipo')
cnpj = data.get('cnpj')
#contato
email = data.get('email')
email_sec = data.get('email_sec')
phone = data.get('phone')
phone_sec = data.get('phone_sec')
#endereço
estado = data.get('estado')
cidade = data.get('cidade')
bairro = data.get('bairro')
numero = data.get('numero')
rua = data.get('rua')
complemento = data.get('complemento')
cep = data.get('cep')
#relacao
service_instance_id = data.get('service_instance_id')
parent_id = data.get('parent_id')
# Criando
company = Company(
name=name,
fantasy_name = fantasy_name,
type= type,
cnpj=cnpj,
email=email,
email_sec = email_sec,
phone = phone,
phone_sec = phone_sec,
cep=cep,
rua=rua,
numero = numero,
bairro=bairro,
complemento=complemento,
estado=estado,
cidade=cidade,
service_instance_id=service_instance_id,
parent_id=parent_id
)
# Adiciona e comita no banco de dados
db.session.add(company)
db.session.commit()
return jsonify({'message': 'empresa criada com sucesso', 'company_id': company.id}), 201
@company_bp.route('/<int:company_id>', methods=['PUT'])
@swag_from('../docs/company/update.yml')
def update_company(company_id):
"""Atualiza um turno existente."""
data = request.get_json()
print(data)
# Localiza o turno ou retorna 404
company = Company.query.get_or_404(company_id)
# Atualiza os campos fornecidos no body
if 'name' in data:
company.name = data['name']
if 'fantasy_name' in data:
company.fantasyname = data['fantasy_name']
if 'cnpj' in data:
company.cnpj = data['cnpj']
if 'type' in data:
company.type = data['type']
if 'email' in data:
company.email=data['email']
if 'email_sec' in data:
company.email_sec=data['email_sec']
if 'phone' in data:
company.phone=data['phone']
if 'phone_sec' in data:
company.phone_sec=data['phone_sec']
if 'estado' in data:
company.estado=data['estado']
if 'cidade' in data:
company.cidade=data['cidade']
if 'cep' in data:
company.cep=data['cep']
if 'rua' in data:
company.rua=data['rua']
if 'numero' in data:
company.numero=data['numero']
if 'complemento' in data:
company.complemento=data['complemento']
if 'parent_id' in data:
company.parent_id=data['parent_id']
if 'service_instance_id' in data:
ServiceInstance.query.get_or_404(data['service_instance_id']) # Valida a existência
company.service_instance_id = data['service_instance_id']
db.session.commit()
return jsonify({'message': 'holiday updated successfully'}), 200
#Listar
@company_bp.route('/', methods=['GET'])
@swag_from('../docs/company/list.yml')
def list_company():
"""Lista todos as empresas, opcionalmente filtrando por parent_id."""
#service_instance_id = request.args.get('service_instance_id')
parent_id = request.args.get('parent_id')
if parent_id:
# Filtrar por service_instance_id
company = Company.query.filter_by(parent_id=parent_id).all()
else:
# Retornar todos os turnos
companys = Company.query.all()
company_list = [{
'id': company.id,
'name': company.name,
"fantasy_name": company.fantasy_name,
"cnpj": company.cnpj,
"type": company.type,
'email': company.email,
"email_sec": company.email_sec,
"phone": company.phone,
"phone_sec":company.phone_sec,
"cep": company.cep,
"rua": company.rua,
"numero": company.numero,
"bairro": company.bairro,
"complemento": company.complemento,
"estado": company.estado,
"cidade": company.cidade,
'service_instance_id': company.service_instance_id,
"parent_id":company.parent_id
} for company in companys]
return jsonify(company_list), 200
#Get
@company_bp.route('/<int:company_id>', methods=['GET'])
@swag_from('../docs/company/get.yml')
def get_company_id(company_id):
company = Company.query.get(company_id)
if not company:
return jsonify({'error': 'Escala não encontrada'}), 404
return jsonify({
'id': company.id,
'name': company.name,
"fantasy_name": company.fantasy_name,
"cnpj": company.cnpj,
"type": company.type,
'email': company.email,
"email_sec": company.email_sec,
"phone": company.phone,
"phone_sec":company.phone_sec,
"cep": company.cep,
"rua": company.rua,
"numero": company.numero,
"bairro": company.bairro,
"complemento": company.complemento,
"estado": company.estado,
"cidade": company.cidade,
'service_instance_id': company.service_instance_id,
"parent_id":company.parent_id
}),200
#deletar
@company_bp.route('/<int:company_id>', methods=['DELETE'])
@swag_from('../docs/company/delete.yml')
def delete_company(company_id):
"""Deleta um turno pelo ID."""
company = Company.query.get_or_404(company_id)
db.session.delete(company)
db.session.commit()
return jsonify({'message': 'Shift deleted successfully'}), 200