%PDF- %PDF-
Direktori : /home/vacivi36/core/app/Http/Controllers/ |
Current File : /home/vacivi36/core/app/Http/Controllers/VaccineController.php |
<?php namespace App\Http\Controllers; use App\Models\Vaccine; use Illuminate\Http\Request; use Maatwebsite\Excel\Facades\Excel; use PhpOffice\PhpSpreadsheet\IOFactory; use Carbon\Carbon; class VaccineController extends Controller { /** * Exibir a lista de vacinas. */ public function index() { $vaccines = Vaccine::with('campaign')->get(); return response()->json($vaccines); } /** * Criar uma nova vacina. */ public function store(Request $request) { // Verifica se o código da vacina já está cadastrado if (Vaccine::where('code', $request->code)->exists()) { return response()->json(['status' => 'error', 'message' => 'Código da vacina já cadastrado no sistema. Por favor, utilize outro código ou verifique as informações.'], 409); } // Verifica se o nome da vacina já está cadastrado if (Vaccine::where('name', $request->name)->exists()) { return response()->json(['status' => 'error', 'message' => 'Nome da vacina já cadastrado no sistema. Por favor, utilize outro nome ou verifique as informações.'], 409); } $vaccine = new Vaccine(); $vaccine->code = $request->code; $vaccine->name = $request->name; $vaccine->batch = $request->batch; $vaccine->quantity = $request->quantity; $vaccine->due_date = $request->due_date; $vaccine->doses = $request->doses; $vaccine->manufacturing_date = $request->manufacturing_date; $vaccine->campaign_id = $request->campaign_id; $vaccine->laboratory = $request->laboratory; $vaccine->application_location = $request->application_location; $vaccine->notes = $request->notes; $insert = $vaccine->save(); if ($insert) { return response()->json(['status' => 'success', 'message' => 'Vacina criada com sucesso!'], 201); } else { return response()->json(['status' => 'error', 'message' => 'Erro ao criar vacina.'], 500); } } /** * Exibir uma vacina específica. */ public function show($id) { $vaccine = Vaccine::findOrFail($id); return response()->json($vaccine); } /** * Atualizar uma vacina existente. */ public function update(Request $request, $id) { $vaccine = Vaccine::findOrFail($id); $vaccine->code = $request->code; $vaccine->name = $request->name; $vaccine->batch = $request->batch; $vaccine->quantity = $request->quantity; $vaccine->due_date = $request->due_date; $vaccine->doses = $request->doses; $vaccine->manufacturing_date = $request->manufacturing_date; $vaccine->campaign_id = $request->campaign_id; $vaccine->laboratory = $request->laboratory; $vaccine->application_location = $request->application_location; $vaccine->notes = $request->notes; $update = $vaccine->save(); if ($update) { return response()->json(['status' => 'success', 'message' => 'Vacina atualizada com sucesso!'], 200); } else { return response()->json(['status' => 'error', 'message' => 'Erro ao atualizar vacina.'], 500); } } /** * Remover uma vacina. */ public function destroy($id) { $vaccine = Vaccine::findOrFail($id); // Verificar se há aplicações de vacina associadas usando o relacionamento if ($vaccine->vaccineApplications()->exists()) { return response()->json([ 'message' => 'A vacina possui aplicações vinculadas com pacientes e não pode ser excluída.' ], 400); } $vaccine->delete(); return response()->json(['message' => 'Vacina excluída com sucesso!']); } public function importFromSpreadsheet(Request $request) { // Verifica se o arquivo foi enviado if (!$request->hasFile('file') || !$request->file('file')->isValid()) { return response()->json(['status' => 'error', 'message' => 'Arquivo inválido ou não enviado.'], 400); } // Caminho do arquivo enviado $filePath = $request->file('file')->getPathname(); // Lê a planilha $spreadsheet = IOFactory::load($filePath); $sheet = $spreadsheet->getActiveSheet(); $rows = $sheet->toArray(); // Define os campos obrigatórios com mapeamento para os campos do banco de dados $requiredFields = [ 'Campanha' => 'campaign', 'Vacina' => 'name', 'Data de Fabricação' => 'manufacturing_date', 'Data de Vencimento' => 'due_date', 'Laboratório' => 'laboratory', 'Lote' => 'batch', 'Quantidade' => 'quantity', 'Dose' => 'doses', 'Local Aplicação' => 'application_location' ]; // Validação dos cabeçalhos da planilha $headers = $rows[0]; foreach (array_keys($requiredFields) as $field) { if (!in_array($field, $headers)) { return response()->json(['status' => 'error', 'message' => "Campo obrigatório '{$field}' está ausente na planilha."], 400); } } // Índices dos campos obrigatórios na planilha $indexes = array_flip($headers); // Inicializa uma coleção de dados a serem inseridos $vaccinesData = []; // Processa cada linha da planilha foreach (array_slice($rows, 1) as $row) { $vaccineData = []; foreach ($requiredFields as $field => $dbField) { $value = $row[$indexes[$field]] ?? null; if (is_null($value)) { return response()->json(['status' => 'error', 'message' => "O campo obrigatório '{$field}' está vazio em alguma linha."], 400); } // Verifica e converte as datas para o formato 'yyyy-mm-dd' if (in_array($field, ['Data de Fabricação', 'Data de Vencimento'])) { try { $value = Carbon::createFromFormat('m/d/Y', $value)->format('Y-m-d'); } catch (\Exception $e) { return response()->json(['status' => 'error', 'message' => "Data inválida no campo '{$field}': {$value}. Use o formato mm/dd/yyyy."], 400); } } // Adiciona o valor ao array com o nome correto do campo no banco de dados $vaccineData[$dbField] = $value; } // Verifica se o nome da vacina já existe no banco de dados if (Vaccine::where('name', $vaccineData['name'])->exists()) { return response()->json([ 'status' => 'error', 'message' => "A vacina '{$vaccineData['name']}' já existe no sistema." ], 400); } $vaccinesData[] = $vaccineData; } // Insere os dados no banco de dados foreach ($vaccinesData as $data) { Vaccine::create($data); } return response()->json(['status' => 'success', 'message' => 'Vacinas importadas com sucesso!']); } }