@php /** * Modal de lançamento — o MESMO arquivo para cadastrar e para editar. * * Recebe: * $modalId id único do modal (o alvo do data-bs-target da listagem) * $entry null para cadastro; o lançamento para edição * $operation o lado do caixa, que vem da ROTA e nunca do formulário * $month o mês aberto na listagem, usado como data padrão * * REEXIBIR APÓS ERRO: `form_id` viaja como campo escondido para que, ao * voltar com erros de validação, a tela saiba QUAL dos modais reabrir — sem * ele, o usuário veria a listagem com uma mensagem de erro e nenhum * formulário aberto, e concluiria que a tela está quebrada. */ $isEdit = $entry !== null; $wasSubmitted = $errors->any() && old('form_id') === $modalId; // A data padrão é o dia de HOJE quando o mês aberto é o corrente, e o // primeiro dia do mês quando o usuário está navegando por outro: lançar em // agosto olhando agosto não deve trazer a data de julho. $defaultDate = $month->isSameMonth(now()) ? now() : $month->copy()->startOfMonth(); $value = $isEdit ? number_format($entry->amount / 100, 2, ',', '.') : ''; $dueDate = $isEdit ? $entry->due_date->format('Y-m-d') : $defaultDate->format('Y-m-d'); // Os campos opcionais (observação, anexo, tags) começam ESCONDIDOS atrás dos // botões do rodapé, como na referência — mas aparecem já abertos quando o // lançamento tem conteúdo neles, ou quando o usuário acabou de digitar algo // e a validação recusou. Um campo preenchido escondido é conteúdo perdido. $notesValue = $wasSubmitted ? old('notes') : ($entry->notes ?? ''); $tagsValue = $wasSubmitted ? old('tags') : ($isEdit ? App\Support\FinancialTags::toInput($entry) : ''); $showNotes = filled($notesValue); $showTags = filled($tagsValue); $showReceipt = $isEdit && $entry->hasReceipt(); $showRepeat = $wasSubmitted && filled(old('repeat')); // A categoria nova NÃO é reexibida na edição (ela já virou categoria de // verdade e está selecionada no select); só volta quando o usuário acabou de // digitá-la e a validação recusou o envio. $newCategoryValue = $wasSubmitted ? old('new_category') : ''; $showNewCategory = filled($newCategoryValue); // Um lançamento que faz parte de uma série precisa perguntar o ALCANCE da // edição antes de gravar. Sem série, a pergunta não existe. $isRecurring = $isEdit && $entry->financial_recurrence_id !== null; @endphp