Răsfoiți Sursa

feat(contracts): troca select de Faixa de Habitantes para municipality_sizes

Os 4 dialogs de contrato (create/edit/edit-taxes/view) e as duas abas
que listam contratos agora carregam de getMunicipalitySizes() e
gravam/exibem o municipality_size_id no lugar do
inhabitant_classification_id.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
ebagabee 3 săptămâni în urmă
părinte
comite
69bb8089ac

+ 1 - 1
src/pages/tbr/tabs/ContractsTab.vue

@@ -16,7 +16,7 @@
     </template>
 
     <template #body-cell-inhabitant_classification="{ row }">
-      <q-td>{{ row.inhabitant_classification?.description ?? "—" }}</q-td>
+      <q-td>{{ row.municipality_size?.description ?? row.inhabitant_classification?.description ?? "—" }}</q-td>
     </template>
 
     <template #body-cell-tbr_fixed_value="{ row }">

+ 11 - 11
src/pages/unit/components/CreateContractDialog.vue

@@ -90,11 +90,11 @@
           </DefaultInput>
 
           <DefaultSelect
-            v-model="contractForm.inhabitant_classification_id"
+            v-model="contractForm.municipality_size_id"
             label="Faixa de Habitante"
             color="secondary"
             label-color="secondary"
-            :options="inhabitantOptions"
+            :options="municipalitySizeOptions"
             emit-value
             map-options
             use-input
@@ -170,7 +170,7 @@ import DefaultSelect from "src/components/defaults/DefaultSelect.vue";
 
 import { getUnit } from "src/api/unit";
 import { getLatestTbr } from "src/api/tbr";
-import { getInhabitantClassificationsForSelect } from "src/api/inhabitant_classification";
+import { getMunicipalitySizes } from "src/api/tbr_calculation";
 import { createFranchiseeContract } from "src/api/franchisee_contract";
 
 defineEmits([...useDialogPluginComponent.emits]);
@@ -186,7 +186,7 @@ const { dialogRef, onDialogHide, onDialogCancel, onDialogOK } =
   useDialogPluginComponent();
 
 const saving = ref(false);
-const inhabitantOptions = ref([]);
+const municipalitySizeOptions = ref([]);
 
 const unitData = reactive({
   id: null,
@@ -200,17 +200,17 @@ const contractForm = reactive({
   end_date: null,
   tbr_fixed_value: null,
   invoice_due_date: null,
-  inhabitant_classification_id: null,
+  municipality_size_id: null,
   tax_base_royalts: null,
   tax_base_fnm: null,
   tax_base_maintenance: null,
 });
 
 async function loadData() {
-  const [unit, latestTbr, classifications] = await Promise.all([
+  const [unit, latestTbr, sizes] = await Promise.all([
     getUnit(props.unitId),
     getLatestTbr(),
-    getInhabitantClassificationsForSelect(),
+    getMunicipalitySizes(),
   ]);
 
   unitData.id = unit.id;
@@ -235,9 +235,9 @@ async function loadData() {
     );
   }
 
-  inhabitantOptions.value = classifications.map((c) => ({
-    label: c.description,
-    value: c.id,
+  municipalitySizeOptions.value = (sizes ?? []).map((s) => ({
+    label: s.description,
+    value: s.id,
   }));
 }
 
@@ -250,7 +250,7 @@ async function save() {
       end_date: contractForm.end_date,
       tbr_fixed_value: contractForm.tbr_fixed_value,
       invoice_due_date: contractForm.invoice_due_date,
-      inhabitant_classification_id: contractForm.inhabitant_classification_id,
+      municipality_size_id: contractForm.municipality_size_id,
       tbr_fixed_value_percentage:
         contractForm.tax_base_royalts != null
           ? contractForm.tax_base_royalts / 100

+ 16 - 13
src/pages/unit/components/EditContractDialog.vue

@@ -79,11 +79,11 @@
           />
 
           <DefaultSelect
-            v-model="contractForm.inhabitant_classification_id"
+            v-model="contractForm.municipality_size_id"
             label="Faixa de Habitantes"
             color="secondary"
             label-color="secondary"
-            :options="inhabitantOptions"
+            :options="municipalitySizeOptions"
             emit-value
             map-options
             use-input
@@ -202,7 +202,7 @@ import DefaultCurrencyInput from "src/components/defaults/DefaultCurrencyInput.v
 import DefaultSelect from "src/components/defaults/DefaultSelect.vue";
 
 import { getUnit } from "src/api/unit";
-import { getInhabitantClassificationsForSelect } from "src/api/inhabitant_classification";
+import { getMunicipalitySizes } from "src/api/tbr_calculation";
 import { getFranchiseeContractTaxHistory } from "src/api/franchisee_contract";
 
 defineEmits([...useDialogPluginComponent.emits]);
@@ -226,7 +226,7 @@ function openTaxesDialog() {
 }
 
 const loadingHistory = ref(false);
-const inhabitantOptions = ref([]);
+const municipalitySizeOptions = ref([]);
 const tbrHistory = ref([]);
 
 const unitData = reactive({
@@ -243,8 +243,8 @@ const contractForm = reactive({
     ? parseFloat(props.contract.tbr_fixed_value)
     : null,
   invoice_due_date: props.contract.invoice_due_date ?? null,
-  inhabitant_classification_id:
-    props.contract.inhabitant_classification_id ?? null,
+  municipality_size_id:
+    props.contract.municipality_size_id ?? null,
   tax_base_royalts:
     props.contract.tbr_fixed_value_percentage != null
       ? parseFloat((props.contract.tbr_fixed_value_percentage * 100).toFixed(4))
@@ -268,9 +268,12 @@ const tbrColumns = [
     align: "left",
   },
   {
-    name: "inhabitant_classification",
+    name: "municipality_size",
     label: "Faixa de Habitantes",
-    field: "inhabitant_classification",
+    field: (row) =>
+      row.municipality_size?.description ??
+      row.inhabitant_classification?.description ??
+      "—",
     align: "left",
   },
   {
@@ -309,9 +312,9 @@ const tbrColumns = [
 ];
 
 async function loadData() {
-  const [unit, classifications] = await Promise.all([
+  const [unit, sizes] = await Promise.all([
     getUnit(props.unitId),
-    getInhabitantClassificationsForSelect(),
+    getMunicipalitySizes(),
   ]);
 
   unitData.id = unit.id;
@@ -323,9 +326,9 @@ async function loadData() {
     unitData.franchisee_birthday = firstPartner.birth_date;
   }
 
-  inhabitantOptions.value = classifications.map((c) => ({
-    label: c.description,
-    value: c.id,
+  municipalitySizeOptions.value = (sizes ?? []).map((s) => ({
+    label: s.description,
+    value: s.id,
   }));
 
   await loadTaxHistory();

+ 11 - 11
src/pages/unit/components/EditContractTaxesDialog.vue

@@ -11,11 +11,11 @@
 
         <div class="row q-col-gutter-sm">
           <DefaultSelect
-            v-model="form.inhabitant_classification_id"
+            v-model="form.municipality_size_id"
             label="Faixa de Habitantes"
             color="secondary"
             label-color="secondary"
-            :options="inhabitantOptions"
+            :options="municipalitySizeOptions"
             emit-value
             map-options
             use-input
@@ -104,7 +104,7 @@ import DefaultInput from "src/components/defaults/DefaultInput.vue";
 import DefaultCurrencyInput from "src/components/defaults/DefaultCurrencyInput.vue";
 import DefaultSelect from "src/components/defaults/DefaultSelect.vue";
 
-import { getInhabitantClassificationsForSelect } from "src/api/inhabitant_classification";
+import { getMunicipalitySizes } from "src/api/tbr_calculation";
 import { updateFranchiseeContract } from "src/api/franchisee_contract";
 
 defineEmits([...useDialogPluginComponent.emits]);
@@ -121,11 +121,11 @@ const { dialogRef, onDialogHide, onDialogCancel, onDialogOK } =
 
 const $q = useQuasar();
 const saving = ref(false);
-const inhabitantOptions = ref([]);
+const municipalitySizeOptions = ref([]);
 
 const form = reactive({
-  inhabitant_classification_id:
-    props.contract.inhabitant_classification_id ?? null,
+  municipality_size_id:
+    props.contract.municipality_size_id ?? null,
   tbr_fixed_value: props.contract.tbr_fixed_value
     ? parseFloat(props.contract.tbr_fixed_value)
     : null,
@@ -144,10 +144,10 @@ const form = reactive({
 });
 
 async function loadData() {
-  const classifications = await getInhabitantClassificationsForSelect();
-  inhabitantOptions.value = classifications.map((c) => ({
-    label: c.description,
-    value: c.id,
+  const sizes = await getMunicipalitySizes();
+  municipalitySizeOptions.value = (sizes ?? []).map((s) => ({
+    label: s.description,
+    value: s.id,
   }));
 }
 
@@ -163,7 +163,7 @@ async function save() {
   saving.value = true;
   try {
     await updateFranchiseeContract(props.contract.id, {
-      inhabitant_classification_id: form.inhabitant_classification_id,
+      municipality_size_id: form.municipality_size_id,
       tbr_fixed_value: form.tbr_fixed_value,
       tbr_fixed_value_percentage:
         form.tax_base_royalts != null ? form.tax_base_royalts / 100 : null,

+ 16 - 13
src/pages/unit/components/ViewContractDialog.vue

@@ -82,11 +82,11 @@
           />
 
           <DefaultSelect
-            v-model="contractForm.inhabitant_classification_id"
+            v-model="contractForm.municipality_size_id"
             label="Faixa de Habitantes"
             color="secondary"
             label-color="secondary"
-            :options="inhabitantOptions"
+            :options="municipalitySizeOptions"
             emit-value
             map-options
             use-input
@@ -189,7 +189,7 @@ import DefaultCurrencyInput from "src/components/defaults/DefaultCurrencyInput.v
 import DefaultSelect from "src/components/defaults/DefaultSelect.vue";
 
 import { getUnit } from "src/api/unit";
-import { getInhabitantClassificationsForSelect } from "src/api/inhabitant_classification";
+import { getMunicipalitySizes } from "src/api/tbr_calculation";
 import { getFranchiseeContractTaxHistory } from "src/api/franchisee_contract";
 
 defineEmits([...useDialogPluginComponent.emits]);
@@ -208,7 +208,7 @@ const props = defineProps({
 const { dialogRef, onDialogHide, onDialogCancel } = useDialogPluginComponent();
 
 const loadingHistory = ref(false);
-const inhabitantOptions = ref([]);
+const municipalitySizeOptions = ref([]);
 const tbrHistory = ref([]);
 
 const unitData = reactive({
@@ -225,8 +225,8 @@ const contractForm = reactive({
     ? parseFloat(props.contract.tbr_fixed_value)
     : null,
   invoice_due_date: props.contract.invoice_due_date ?? null,
-  inhabitant_classification_id:
-    props.contract.inhabitant_classification_id ?? null,
+  municipality_size_id:
+    props.contract.municipality_size_id ?? null,
   tax_base_royalts:
     props.contract.tbr_fixed_value_percentage != null
       ? parseFloat((props.contract.tbr_fixed_value_percentage * 100).toFixed(4))
@@ -250,9 +250,12 @@ const historyColumns = [
     align: "left",
   },
   {
-    name: "inhabitant_classification",
+    name: "municipality_size",
     label: "Faixa de Habitantes",
-    field: "inhabitant_classification",
+    field: (row) =>
+      row.municipality_size?.description ??
+      row.inhabitant_classification?.description ??
+      "—",
     align: "left",
   },
   { name: "tbr_fixed_value", label: "TBR", field: "tbr_fixed_value", align: "left" },
@@ -286,9 +289,9 @@ const historyColumns = [
 ];
 
 async function loadData() {
-  const [unit, classifications] = await Promise.all([
+  const [unit, sizes] = await Promise.all([
     getUnit(props.unitId),
-    getInhabitantClassificationsForSelect(),
+    getMunicipalitySizes(),
   ]);
 
   unitData.id = unit.id;
@@ -300,9 +303,9 @@ async function loadData() {
     unitData.franchisee_birthday = firstPartner.birth_date;
   }
 
-  inhabitantOptions.value = classifications.map((c) => ({
-    label: c.description,
-    value: c.id,
+  municipalitySizeOptions.value = (sizes ?? []).map((s) => ({
+    label: s.description,
+    value: s.id,
   }));
 
   loadingHistory.value = true;

+ 5 - 1
src/pages/unit/tabs/ContractsTab.vue

@@ -53,7 +53,11 @@
       </template>
 
       <template #body-cell-inhabitant_classification="{ row }">
-        <q-td>{{ row.inhabitant_classification?.description ?? "-" }}</q-td>
+        <q-td>{{
+          row.municipality_size?.description ??
+          row.inhabitant_classification?.description ??
+          "-"
+        }}</q-td>
       </template>
 
       <template #body-cell-actions="{ row: contract }">