Sfoglia il codice sorgente

feat(contracts): automatically calculate class quantity based on contract dates and weekdays

alvesantos 1 settimana fa
parent
commit
7cd463ded9
1 ha cambiato i file con 39 aggiunte e 4 eliminazioni
  1. 39 4
      src/pages/students/components/AddEditContractDialog.vue

+ 39 - 4
src/pages/students/components/AddEditContractDialog.vue

@@ -962,10 +962,6 @@ watch(
 
     if (!selectedPackage) return;
 
-    form.class_quantity = selectedPackage.quantity_classes;
-
-    form.total_classes = selectedPackage.quantity_classes;
-
     form.weekday = selectedPackage.weekday ?? null;
 
     form.start_time = trimTime(selectedPackage.start_time);
@@ -996,6 +992,45 @@ watch(
   },
 );
 
+const calculateClassQuantity = () => {
+  if (!form.signature_date || !form.end_date) return;
+
+  const parseDateStr = (dmy) => {
+    if (!dmy || dmy.length !== 10) return null;
+    const parts = dmy.split('/');
+    if (parts.length !== 3) return null;
+    return new Date(`${parts[2]}-${parts[1]}-${parts[0]}T00:00:00`);
+  };
+
+  const start = parseDateStr(form.signature_date);
+  const end = parseDateStr(form.end_date);
+  
+  if (!start || !end || isNaN(start) || isNaN(end) || start > end) {
+    return;
+  }
+
+  let count = 0;
+  for (let d = new Date(start); d <= end; d.setDate(d.getDate() + 1)) {
+    const day = d.getDay();
+    if (form.weekday !== null && day === Number(form.weekday)) count++;
+    if (form.second_weekday !== null && day === Number(form.second_weekday)) count++;
+  }
+  
+  form.class_quantity = count;
+  form.total_classes = count;
+};
+
+watch(
+  [
+    () => form.signature_date, 
+    () => form.end_date, 
+    () => form.weekday, 
+    () => form.second_weekday
+  ], 
+  calculateClassQuantity,
+  { immediate: true }
+);
+
 // Os valores do contrato vêm da modalidade escolhida na proposta comercial:
 // o que estiver marcado "incluso no valor do curso" não é cobrado à parte
 // (só entra no Total do Curso); o que "permite parcelar" vira cobrança