Adicionar importação de reservas em massa via CSV com modal de pesquisa de IDs no painel admin#152
Adicionar importação de reservas em massa via CSV com modal de pesquisa de IDs no painel admin#152Copilot wants to merge 18 commits into
Conversation
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/c15f61c7-4d55-40de-b428-433cbce7baa9 Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/c15f61c7-4d55-40de-b428-433cbce7baa9 Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/3ff397cc-c4ca-405e-846d-9e183bfa8375 Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
Reverti totalmente essas alterações fora de escopo no commit Se quiseres, avanço já com a implementação correta da importação CSV nas reservas em massa ( |
|
@copilot Sim, podes avançar com a implementação do correto. |
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/4b49d234-7d64-4371-9ed8-1404a6bdde04 Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/16198339-3d5e-4b7b-b357-4e2ab6d7ecad Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/16198339-3d5e-4b7b-b357-4e2ab6d7ecad Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/16198339-3d5e-4b7b-b357-4e2ab6d7ecad Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
Feito no commit Screenshot: |
|
📝 Manual Update Required? It looks like you've modified core logic. Please check if the user manual needs a refresh! @marpisco |
There was a problem hiding this comment.
Pull request overview
Implementa importação de reservas em massa via CSV no painel de admin (admin/reservaemmassa.php), com um modal para pesquisa rápida de IDs (requisitor/tempo/sala) suportado por endpoints JSON em /admin/api.
Changes:
- Adiciona UI e fluxo
action=import_csvpara upload, parsing e importação de reservas a partir de CSV (delimitador;), com validações e feedback agregado. - Introduz modal (tabs) para lookup de IDs e integra chamadas
fetch()para endpoints dedicados. - Adiciona um ficheiro de modelo CSV para facilitar a preparação de importações.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| assets/csvsample_reservas.csv | Adiciona modelo de CSV para importação de reservas em massa. |
| admin/reservaemmassa.php | Implementa fluxo de importação CSV + modal de lookup de IDs no ecrã de reservas em massa. |
| admin/api/requisitor_lookup.php | Endpoint JSON para lookup de requisitores (cache) com filtro mínimo e limite. |
| admin/api/tempo_lookup.php | Endpoint JSON para lookup de tempos com filtro mínimo e limite. |
| admin/api/sala_lookup.php | Endpoint JSON para lookup de salas com filtro mínimo e limite. |
Comments suppressed due to low confidence (1)
admin/reservaemmassa.php:444
- O formulário principal de criação de reservas em massa (
massReservationForm) continua sem token CSRF, apesar de já existir helpercsrf_token_field()e de o novo fluxo de importação CSV o usar. Como este POST cria reservas (ação sensível de admin), deve incluir o campo CSRF e validar o token antes de processar$_POST.
<form id="massReservationForm" action="reservaemmassa.php" method="POST" class="mt-4">
<div class="row mb-3">
<div class="col-md-6">
<div class="form-floating">
<select class="form-select" id="sala" name="sala" required>
| if (count($data) < 5) { | ||
| $errorCount++; | ||
| $errors[] = "Linha {$lineNumber} inválida (mínimo 5 colunas)."; | ||
| continue; | ||
| } | ||
|
|
||
| $salaId = $firstColumn; | ||
| $requisitorId = trim($data[1]); | ||
| $tempoId = trim($data[2]); | ||
| $dataReserva = trim($data[3]); | ||
| $motivo = trim($data[4]); | ||
| $extra = isset($data[5]) ? trim($data[5]) : ''; |
| $requisitoresValidos = []; | ||
| $stmtRequisitores = $db->prepare("SELECT id FROM cache"); | ||
| $stmtRequisitores->execute(); | ||
| $resultRequisitores = $stmtRequisitores->get_result(); | ||
| while ($row = $resultRequisitores->fetch_assoc()) { | ||
| $requisitoresValidos[$row['id']] = true; | ||
| } | ||
| $stmtRequisitores->close(); | ||
|
|
||
| $temposValidos = []; | ||
| $stmtTempos = $db->prepare("SELECT id FROM tempos"); | ||
| $stmtTempos->execute(); | ||
| $resultTempos = $stmtTempos->get_result(); | ||
| while ($row = $resultTempos->fetch_assoc()) { | ||
| $temposValidos[$row['id']] = true; | ||
| } | ||
| $stmtTempos->close(); | ||
|
|
marpisco
left a comment
There was a problem hiding this comment.
@copilot De acordo com a revisão automática, faz o seguinte:
"O parser CSV rejeita linhas com menos de 5 colunas (count($data) < 5), mas o próprio código trata Motivo como opcional (preenche valor por omissão quando vazio) e a UI indica Extra como opcional. Assim, um CSV válido com apenas 4 colunas (sem Motivo/Extra) vai falhar desnecessariamente. Ajustar a validação para aceitar 4 colunas e tratar data[4]/data[5] como opcionais (default quando ausentes)."
Parece me correto e deve de ser corrigido.
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/7ee34890-325a-4694-af70-b9c8c4869a66 Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
Corrigido no commit |
marpisco
left a comment
There was a problem hiding this comment.
@copilot Fiz no Excel e saiu me um ficheiro com ,. Modifica a lógica do /admin/materiais.php para ler ficheiros com , (porque isto é suposto ser feito no Excel), modifica o csvsample.csv para ser csvsample_materiais.csv (e ser em virgulas), e modifica o csvsample_reservas.csv para ser também com vírgulas e faz com a importação das reservas em massa sejam em vírgulas (e não em ponto e vírgula, refiro a apenas virgula quando falo em ficheiros com virgulas neste pedido).
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/41bc349a-24b5-4d23-a36a-79d2398775f9 Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
Este PR implementa a importação de reservas em massa via CSV no script correto da issue original:
admin/reservaemmassa.php, incluindo um modal de apoio para pesquisa de IDs via API.Alterações
admin/reservaemmassa.phppara upload de CSV:action=import_csvpara:;,SalaID,RequisitorID,TempoID),YYYY-MM-DD),reservas,aprovado = 1,acaoexecutada(...).assets/csvsample_reservas.csv.admin/reservaemmassa.phpcom 3 tabs:requisitorID,tempoID,salaID./admin/apipara suportar a pesquisa no modal:admin/api/requisitor_lookup.php,admin/api/tempo_lookup.php,admin/api/sala_lookup.php.Resultado
A importação CSV fica disponível no módulo de reservas em massa (
admin/reservaemmassa.php), alinhada com o escopo correto da issue, e passa a ter apoio de pesquisa rápida de IDs (requisitor, tempo e sala) para facilitar a preparação dos ficheiros CSV.