feat(project-finance): add billable filter functionality to project finance queries

- Introduced a `billable_filter` query parameter to filter tasks based on their billable status (billable, non-billable, or all).
- Updated the project finance controller to construct SQL queries with billable conditions based on the filter.
- Enhanced the frontend components to support billable filtering in project finance views and exports.
- Added corresponding translations for filter options in multiple languages.
- Refactored related API services to accommodate the new filtering logic.
This commit is contained in:
chamikaJ
2025-06-06 12:02:53 +05:30
parent ba2ecb2d85
commit 791cbe22df
19 changed files with 965 additions and 499 deletions

View File

@@ -8,27 +8,38 @@
"exportButton": "Exportar",
"currencyText": "Moneda",
"importButton": "Importar",
"filterText": "Filtro",
"billableOnlyText": "Solo Facturable",
"nonBillableOnlyText": "Solo No Facturable",
"allTasksText": "Todas las Tareas",
"taskColumn": "Tarea",
"membersColumn": "Miembros",
"hoursColumn": "Horas Estimadas",
"totalTimeLoggedColumn": "Tiempo Total Registrado",
"costColumn": "Costo",
"costColumn": "Costo Real",
"estimatedCostColumn": "Costo Estimado",
"fixedCostColumn": "Costo Fijo",
"totalBudgetedCostColumn": "Costo Total Presupuestado",
"totalActualCostColumn": "Costo Total Real",
"varianceColumn": "Diferencia",
"totalActualCostColumn": "Costo Real Total",
"varianceColumn": "Varianza",
"totalText": "Total",
"noTasksFound": "No se encontraron tareas",
"addRoleButton": "+ Agregar Rol",
"ratecardImportantNotice": "* Esta tarifa se genera en función de los títulos de trabajo y tarifas estándar de la empresa. Sin embargo, tienes la flexibilidad de modificarla según el proyecto. Estos cambios no afectarán los títulos de trabajo y tarifas estándar de la organización.",
"ratecardImportantNotice": "* Esta tarifa se genera en base a los títulos de trabajo y tarifas estándar de la empresa. Sin embargo, tienes la flexibilidad de modificarla según el proyecto. Estos cambios no afectarán los títulos de trabajo y tarifas estándar de la organización.",
"saveButton": "Guardar",
"jobTitleColumn": "Título del Trabajo",
"ratePerHourColumn": "Tarifa por hora",
"ratecardPluralText": "Tarifas",
"labourHoursColumn": "Horas de Trabajo"
"labourHoursColumn": "Horas de Trabajo",
"actions": "Acciones",
"selectJobTitle": "Seleccionar Título del Trabajo",
"ratecardsPluralText": "Plantillas de Tarifas",
"deleteConfirm": "¿Estás seguro?",
"yes": "Sí",
"no": "No",
"alreadyImportedRateCardMessage": "Ya se ha importado una tarifa. Borra todas las tarifas importadas para agregar una nueva."
}

View File

@@ -2,19 +2,49 @@
"nameColumn": "Nombre",
"createdColumn": "Creado",
"noProjectsAvailable": "No hay proyectos disponibles",
"deleteConfirmationTitle": "¿Estás seguro?",
"deleteConfirmationOk": "Sí",
"deleteConfirmationTitle": "¿Está seguro de que desea eliminar esta tarjeta de tarifas?",
"deleteConfirmationOk": "Sí, eliminar",
"deleteConfirmationCancel": "Cancelar",
"searchPlaceholder": "Buscar por nombre",
"createRatecard": "Crear Tarifa",
"searchPlaceholder": "Buscar tarjetas de tarifas por nombre",
"createRatecard": "Crear Tarjeta de Tarifas",
"editTooltip": "Editar tarjeta de tarifas",
"deleteTooltip": "Eliminar tarjeta de tarifas",
"fetchError": "Error al cargar las tarjetas de tarifas",
"createError": "Error al crear la tarjeta de tarifas",
"deleteSuccess": "Tarjeta de tarifas eliminada con éxito",
"deleteError": "Error al eliminar la tarjeta de tarifas",
"jobTitleColumn": "Puesto de trabajo",
"jobTitleColumn": "Título del trabajo",
"ratePerHourColumn": "Tarifa por hora",
"saveButton": "Guardar",
"addRoleButton": "+ Agregar Rol",
"createRatecardSuccessMessage": "¡Tarifa creada con éxito!",
"createRatecardErrorMessage": "¡Error al crear la tarifa!",
"updateRatecardSuccessMessage": "¡Tarifa actualizada con éxito!",
"updateRatecardErrorMessage": "¡Error al actualizar la tarifa!",
"currency": "Moneda"
"addRoleButton": "Añadir Rol",
"createRatecardSuccessMessage": "Tarjeta de tarifas creada con éxito",
"createRatecardErrorMessage": "Error al crear la tarjeta de tarifas",
"updateRatecardSuccessMessage": "Tarjeta de tarifas actualizada con éxito",
"updateRatecardErrorMessage": "Error al actualizar la tarjeta de tarifas",
"currency": "Moneda",
"actionsColumn": "Acciones",
"addAllButton": "Añadir Todo",
"removeAllButton": "Eliminar Todo",
"selectJobTitle": "Seleccionar título del trabajo",
"unsavedChangesTitle": "Tiene cambios sin guardar",
"unsavedChangesMessage": "¿Desea guardar los cambios antes de salir?",
"unsavedChangesSave": "Guardar",
"unsavedChangesDiscard": "Descartar",
"ratecardNameRequired": "El nombre de la tarjeta de tarifas es obligatorio",
"ratecardNamePlaceholder": "Ingrese el nombre de la tarjeta de tarifas",
"noRatecardsFound": "No se encontraron tarjetas de tarifas",
"loadingRateCards": "Cargando tarjetas de tarifas...",
"noJobTitlesAvailable": "No hay títulos de trabajo disponibles",
"noRolesAdded": "Aún no se han añadido roles",
"createFirstJobTitle": "Crear Primer Título de Trabajo",
"jobRolesTitle": "Roles de Trabajo",
"noJobTitlesMessage": "Por favor, cree títulos de trabajo primero en la configuración de Títulos de Trabajo antes de añadir roles a las tarjetas de tarifas.",
"createNewJobTitle": "Crear Nuevo Título de Trabajo",
"jobTitleNamePlaceholder": "Ingrese el nombre del título de trabajo",
"jobTitleNameRequired": "El nombre del título de trabajo es obligatorio",
"jobTitleCreatedSuccess": "Título de trabajo creado con éxito",
"jobTitleCreateError": "Error al crear el título de trabajo",
"createButton": "Crear",
"cancelButton": "Cancelar"
}