<?php
namespace App\Controller;
use App\Entity\BoletimMedicao;
use App\Entity\ServicoBoletimMedicao;
use App\Entity\ServicoPropostaComercial;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class ServicoBoletimMedicaoAdminController extends AbstractController
{
/**
* @Route("/app/servicoboletimmedicao/{id}/update-quantidade", name="admin_servico_boletim_medicao_update_quantidade", methods={"POST"})
*/
public function updateQuantidade(Request $request, ServicoBoletimMedicao $servico, EntityManagerInterface $em): JsonResponse
{
try {
$quantidade = $request->request->get('quantidade');
$valor = $request->request->get('valor');
$servicoId = $request->request->get('servicoId');
if ($quantidade === null) {
return new JsonResponse(['success' => false, 'message' => 'Quantidade não fornecida'], 400);
}
// Atualizar quantidade do ServicoBoletimMedicao
$servico->setQuantidade((float) $quantidade);
// Se o valor foi fornecido, atualizar o valor no ServicoPropostaComercial
if ($valor !== null && $servicoId) {
$servicoPropostaComercial = $em->getRepository(ServicoPropostaComercial::class)->find($servicoId);
if ($servicoPropostaComercial) {
$servicoPropostaComercial->setValor((float) $valor);
}
}
$em->flush();
return new JsonResponse([
'success' => true,
'message' => 'Dados atualizados com sucesso',
'quantidade' => $servico->getQuantidade(),
'valor' => $valor
]);
} catch (\Exception $e) {
return new JsonResponse([
'success' => false,
'message' => 'Erro ao atualizar: ' . $e->getMessage()
], 500);
}
}
/**
* @Route("/app/boletimmedicao/{id}/servicos-disponiveis", name="admin_boletim_medicao_servicos_disponiveis", methods={"GET"})
*/
public function servicosDisponiveis(BoletimMedicao $boletim, EntityManagerInterface $em): JsonResponse
{
try {
$proposta = $boletim->getOs()->getProposta();
$servicosProposta = $proposta->getServicos();
$servicos = [];
foreach ($servicosProposta as $servicoProposta) {
$servicos[] = [
'id' => $servicoProposta->getId(),
'titulo' => $servicoProposta->getServico()->getTitulo(),
'valor' => $servicoProposta->getValor(),
'quantidade' => $servicoProposta->getQuantidade() ?: 1,
'unidade' => $servicoProposta->getUnidade()
];
}
return new JsonResponse([
'success' => true,
'servicos' => $servicos
]);
} catch (\Exception $e) {
return new JsonResponse([
'success' => false,
'message' => 'Erro ao buscar serviços: ' . $e->getMessage()
], 500);
}
}
/**
* @Route("/app/boletimmedicao/{id}/adicionar-servico", name="admin_boletim_medicao_adicionar_servico", methods={"POST"})
*/
public function adicionarServico(Request $request, BoletimMedicao $boletim, EntityManagerInterface $em): JsonResponse
{
try {
$servicoPropostaId = $request->request->get('servicoPropostaId');
$quantidade = $request->request->get('quantidade', 1);
if (!$servicoPropostaId) {
return new JsonResponse(['success' => false, 'message' => 'Serviço não informado'], 400);
}
$servicoProposta = $em->getRepository(ServicoPropostaComercial::class)->find($servicoPropostaId);
if (!$servicoProposta) {
return new JsonResponse(['success' => false, 'message' => 'Serviço não encontrado'], 404);
}
// Verificar se o serviço já existe no boletim
foreach ($boletim->getServicos() as $servicoExistente) {
if ($servicoExistente->getServico()->getId() == $servicoPropostaId) {
return new JsonResponse(['success' => false, 'message' => 'Serviço já adicionado ao boletim'], 400);
}
}
$servicoBoletim = new ServicoBoletimMedicao();
$servicoBoletim->setServico($servicoProposta);
$servicoBoletim->setProposta($boletim->getOs()->getProposta());
$servicoBoletim->setBoletim($boletim);
$servicoBoletim->setQuantidade((float) $quantidade);
$em->persist($servicoBoletim);
$em->flush();
return new JsonResponse([
'success' => true,
'message' => 'Serviço adicionado com sucesso',
'servico' => [
'id' => $servicoBoletim->getId(),
'titulo' => $servicoProposta->getServico()->getTitulo(),
'valor' => $servicoProposta->getValor(),
'quantidade' => $servicoBoletim->getQuantidade(),
'servicoPropostaId' => $servicoProposta->getId()
]
]);
} catch (\Exception $e) {
return new JsonResponse([
'success' => false,
'message' => 'Erro ao adicionar serviço: ' . $e->getMessage()
], 500);
}
}
}