4 Achegas 3f26b9ec47 ... 170a0740ae

Autor SHA1 Mensaxe Data
  ebagabee 170a0740ae fix(package): update author information in package.json hai 5 días
  ebagabee f7d4b5cb87 feat(contracts): create student from contract dialog hai 5 días
  ebagabee b6d75afdfd feat(dashboard): enable attendance shortcut hai 5 días
  ebagabee 8e09449b15 docs(versions): update system changelog hai 5 días

+ 1 - 1
package.json

@@ -3,7 +3,7 @@
   "version": "0.0.1",
   "description": "Ginastica Franchisee",
   "productName": "Ginastica Cerebro Franchisee",
-  "author": "Denis <denis.gnl@gmail.com>",
+  "author": "Gabriel <alvesantos.gh@gmail.com>",
   "type": "module",
   "private": true,
   "scripts": {

+ 15 - 13
src/pages/dashboard/DashboardPage.vue

@@ -93,19 +93,15 @@
                 class="full-width"
                 @click="onCriarContrato"
               />
-              <div v-if="canEditClasses" class="full-width cursor-not-allowed">
-                <q-btn
-                  unelevated
-                  color="primary"
-                  label="Registrar presença"
-                  no-caps
-                  disable
-                  class="full-width"
-                />
-                <q-tooltip>
-                  Esta funcionalidade ainda não foi desenvolvida.
-                </q-tooltip>
-              </div>
+              <q-btn
+                v-if="canEditClasses"
+                unelevated
+                color="primary"
+                label="Registrar presença"
+                no-caps
+                class="full-width"
+                @click="onRegistrarPresenca"
+              />
               <div v-if="canAddOrders" class="full-width cursor-not-allowed">
                 <q-btn
                   unelevated
@@ -204,6 +200,7 @@
 
 <script setup>
 import { ref, computed, onMounted, watch } from "vue";
+import { useRouter } from "vue-router";
 import { Doughnut } from "vue-chartjs";
 import { Chart as ChartJS, ArcElement, Tooltip, Legend } from "chart.js";
 import { useQuasar } from "quasar";
@@ -223,6 +220,7 @@ import { permissionStore } from "src/stores/permission";
 ChartJS.register(ArcElement, Tooltip, Legend);
 
 const $q = useQuasar();
+const router = useRouter();
 const store = userStore();
 const permissions = permissionStore();
 const canAdd = computed(() =>
@@ -391,6 +389,10 @@ function onCriarContrato() {
   }).onOk(fetchSummary);
 }
 
+function onRegistrarPresenca() {
+  router.push({ name: "ClassPage" });
+}
+
 // Feriados
 const allHolidays = ref([]);
 const feriadosLoading = ref(false);

+ 45 - 12
src/pages/students/components/AddEditContractDialog.vue

@@ -30,18 +30,34 @@
 
         <div class="row q-col-gutter-sm">
           <div v-if="props.selectStudent" class="col-12">
-            <DefaultSelect
-              v-model="selectedStudent"
-              label="Aluno"
-              :options="filteredStudents"
-              option-label="name"
-              use-input
-              fill-input
-              hide-selected
-              input-debounce="0"
-              dropdown-icon="mdi-magnify"
-              @filter="filterStudents"
-            />
+            <div class="row items-start no-wrap q-col-gutter-sm">
+              <DefaultSelect
+                v-model="selectedStudent"
+                label="Aluno"
+                class="col"
+                :options="filteredStudents"
+                option-label="name"
+                use-input
+                fill-input
+                hide-selected
+                input-debounce="0"
+                dropdown-icon="mdi-magnify"
+                @filter="filterStudents"
+              />
+              <div v-if="canAddStudents" class="col-auto">
+                <q-btn
+                  round
+                  unelevated
+                  color="primary"
+                  icon="mdi-plus"
+                  aria-label="Cadastrar novo aluno"
+                  style="margin-top: 8px"
+                  @click="openCreateStudent"
+                >
+                  <q-tooltip>Cadastrar novo aluno</q-tooltip>
+                </q-btn>
+              </div>
+            </div>
           </div>
 
           <div v-if="!props.selectStudent" class="col-12">
@@ -384,6 +400,7 @@ import DefaultSelect from "src/components/defaults/DefaultSelect.vue";
 import DefaultTable from "src/components/defaults/DefaultTable.vue";
 import DefaultCurrencyInput from "src/components/defaults/DefaultCurrencyInput.vue";
 import DefaultInputDatePicker from "src/components/defaults/DefaultInputDatePicker.vue";
+import AddEditStudentDialog from "src/pages/students/components/AddEditStudentDialog.vue";
 import { useSubmitHandler } from "src/composables/useSubmitHandler";
 import { useFormUpdateTracker } from "src/composables/useFormUpdateTracker";
 import { formatDateYMDtoDMY, formatDateDMYtoYMD } from "src/helpers/utils";
@@ -422,6 +439,9 @@ const permissions = permissionStore();
 const canViewFinancial = computed(() =>
   permissions.getAccess("franchisee_financial", "view"),
 );
+const canAddStudents = computed(() =>
+  permissions.getAccess("franchisee_students", "add"),
+);
 const activeTab = ref("dados");
 const medias = ref([]);
 const loadingMedias = ref(false);
@@ -447,6 +467,19 @@ function filterStudents(value, update) {
   });
 }
 
+function openCreateStudent() {
+  $q.dialog({
+    component: AddEditStudentDialog,
+  }).onOk(async (createdStudent) => {
+    const unitStudents = await getStudentsForSelect();
+    students.value = unitStudents;
+    filteredStudents.value = unitStudents;
+    selectedStudent.value =
+      unitStudents.find((student) => student.id === createdStudent?.id) ??
+      createdStudent;
+  });
+}
+
 const trimTime = (t) => (t ? t.slice(0, 5) : null);
 
 function calculateEndTime(startTime, durationMinutes = 120) {

+ 2 - 2
src/pages/students/components/AddEditStudentDialog.vue

@@ -227,8 +227,8 @@ const howFoundOptions = ref([
 
 const { loading, execute } = useSubmitHandler({
   formRef,
-  onSuccess: () => {
-    onDialogOK(true);
+  onSuccess: (student) => {
+    onDialogOK(student);
   },
 });
 

+ 25 - 46
src/pages/version/data/versions.js

@@ -1,62 +1,41 @@
 export default [
   {
-    version: "0.0.1",
-    date: "09/02/2026",
+    version: "1.0.0",
+    date: "24/07/2026",
     changes: [
       {
         type: "Funcionalidades",
         changes: [
-          {
-            description: "Criação do Projeto",
-          },
-          {
-            description:
-              "Adequação do Projeto ao Layout de Cores e Fontes do Cliente",
-          },
-          {
-            description: "Criação do Layout de Login",
-          },
-          {
-            description: "Criação do Layout de Menu Lateral Esquerdo",
-          },
-          {
-            description: "Criação de Permissões do Sistema",
-          },
-          {
-            description: "Tela de Cadastros",
-          },
-          {
-            description: "Criado o Cadastro de Usuários",
-          },
-          {
-            description:
-              "Criado o Cadastro de Clientes",
-          },
-          {
-            description: "Criado o Cadastro de Setores",
-          },
-          {
-            description:
-              "Criado o Cadastro de Cidades, Estados e Países.",
-          },
-          {
-            description: "Criado os Componentes de graficos",
-          },
-          {
-            description: "Criado a Pagina de Dashboard",
-          },
-          {
-            description: "Criado a Pagina de Bem vindo",
-          },
+          { description: "Dashboard gerencial com alunos, contratos, aniversariantes, matrículas e feriados." },
+          { description: "Gestão completa de alunos, responsáveis, contratos, documentos e mídias." },
+          { description: "Criação, edição, congelamento, cancelamento e reativação de contratos." },
+          { description: "Agenda de aulas com visualizações mensal e diária, atividades e controle de presença." },
+          { description: "Gestão de pacotes de aulas, horários e duração das atividades." },
+          { description: "Módulo financeiro com contas a pagar, contas a receber, tesouraria e plano de contas." },
+          { description: "Gestão de usuários, tipos de usuário e permissões por funcionalidade." },
+          { description: "Quadro de atividades em Kanban com responsáveis, unidades e movimentação entre etapas." },
+          { description: "Central de suporte com abertura e acompanhamento de chamados." },
+          { description: "Seleção de unidade ativa para usuários com acesso a múltiplas unidades." },
+          { description: "Notificações de movimentações financeiras e pagamentos creditados." },
         ],
       },
       {
         type: "Melhorias",
-        changes: [],
+        changes: [
+          { description: "Padronização de filtros, tabelas, formulários, diálogos e navegação." },
+          { description: "Aplicação de permissões em telas, menus e ações do sistema." },
+          { description: "Integração dos indicadores do dashboard com dados reais da unidade." },
+          { description: "Preenchimento automático de datas, valores e horários na criação de contratos." },
+          { description: "Atualização automática dos dados ao trocar a unidade selecionada." },
+        ],
       },
       {
         type: "Correções",
-        changes: [],
+        changes: [
+          { description: "Correções no login, recuperação de senha e exibição do último acesso." },
+          { description: "Ajustes na listagem de alunos arquivados e contratos relacionados." },
+          { description: "Correções de navegação, responsividade, datas e carregamento de dados." },
+        ],
       },
     ],
   },