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:
@@ -8,12 +8,16 @@
|
||||
"exportButton": "Export",
|
||||
"currencyText": "Currency",
|
||||
"importButton": "Import",
|
||||
"filterText": "Filter",
|
||||
"billableOnlyText": "Billable Only",
|
||||
"nonBillableOnlyText": "Non-Billable Only",
|
||||
"allTasksText": "All Tasks",
|
||||
|
||||
"taskColumn": "Task",
|
||||
"membersColumn": "Members",
|
||||
"hoursColumn": "Estimated Hours",
|
||||
"totalTimeLoggedColumn": "Total Time Logged",
|
||||
"costColumn": "Cost",
|
||||
"costColumn": "Actual Cost",
|
||||
"estimatedCostColumn": "Estimated Cost",
|
||||
"fixedCostColumn": "Fixed Cost",
|
||||
"totalBudgetedCostColumn": "Total Budgeted Cost",
|
||||
|
||||
@@ -2,27 +2,49 @@
|
||||
"nameColumn": "Name",
|
||||
"createdColumn": "Created",
|
||||
"noProjectsAvailable": "No projects available",
|
||||
"deleteConfirmationTitle": "Are you sure?",
|
||||
"deleteConfirmationOk": "Yes",
|
||||
"deleteConfirmationTitle": "Are you sure you want to delete this rate card?",
|
||||
"deleteConfirmationOk": "Yes, delete",
|
||||
"deleteConfirmationCancel": "Cancel",
|
||||
"searchPlaceholder": "Search by name",
|
||||
"searchPlaceholder": "Search rate cards by name",
|
||||
"createRatecard": "Create Rate Card",
|
||||
"editTooltip": "Edit rate card",
|
||||
"deleteTooltip": "Delete rate card",
|
||||
"fetchError": "Failed to fetch rate cards",
|
||||
"createError": "Failed to create rate card",
|
||||
"deleteSuccess": "Rate card deleted successfully",
|
||||
"deleteError": "Failed to delete rate card",
|
||||
|
||||
"jobTitleColumn": "Job title",
|
||||
"ratePerHourColumn": "Rate per hour",
|
||||
"saveButton": "Save",
|
||||
"addRoleButton": "+ Add Role",
|
||||
"createRatecardSuccessMessage": "Create Rate Card success!",
|
||||
"createRatecardErrorMessage": "Create Rate Card failed!",
|
||||
"updateRatecardSuccessMessage": "Update Rate Card success!",
|
||||
"updateRatecardErrorMessage": "Update Rate Card failed!",
|
||||
"addRoleButton": "Add Role",
|
||||
"createRatecardSuccessMessage": "Rate card created successfully",
|
||||
"createRatecardErrorMessage": "Failed to create rate card",
|
||||
"updateRatecardSuccessMessage": "Rate card updated successfully",
|
||||
"updateRatecardErrorMessage": "Failed to update rate card",
|
||||
"currency": "Currency",
|
||||
"actionsColumn": "Actions",
|
||||
"addAllButton": "Add All",
|
||||
"removeAllButton": "Remove All",
|
||||
"selectJobTitle": "Select job title",
|
||||
"unsavedChangesTitle": "Unsaved changes",
|
||||
"ratecardNameRequired": "Rate card name is required"
|
||||
|
||||
|
||||
"unsavedChangesTitle": "You have unsaved changes",
|
||||
"unsavedChangesMessage": "Do you want to save your changes before leaving?",
|
||||
"unsavedChangesSave": "Save",
|
||||
"unsavedChangesDiscard": "Discard",
|
||||
"ratecardNameRequired": "Rate card name is required",
|
||||
"ratecardNamePlaceholder": "Enter rate card name",
|
||||
"noRatecardsFound": "No rate cards found",
|
||||
"loadingRateCards": "Loading rate cards...",
|
||||
"noJobTitlesAvailable": "No job titles available",
|
||||
"noRolesAdded": "No roles added yet",
|
||||
"createFirstJobTitle": "Create First Job Title",
|
||||
"jobRolesTitle": "Job Roles",
|
||||
"noJobTitlesMessage": "Please create job titles first in the Job Titles settings before adding roles to rate cards.",
|
||||
"createNewJobTitle": "Create New Job Title",
|
||||
"jobTitleNamePlaceholder": "Enter job title name",
|
||||
"jobTitleNameRequired": "Job title name is required",
|
||||
"jobTitleCreatedSuccess": "Job title created successfully",
|
||||
"jobTitleCreateError": "Failed to create job title",
|
||||
"createButton": "Create",
|
||||
"cancelButton": "Cancel"
|
||||
}
|
||||
|
||||
@@ -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."
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"financeText": "Finanças",
|
||||
"ratecardSingularText": "Tabela de Taxas",
|
||||
"ratecardSingularText": "Cartão de Taxa",
|
||||
"groupByText": "Agrupar por",
|
||||
"statusText": "Status",
|
||||
"phaseText": "Fase",
|
||||
@@ -8,27 +8,38 @@
|
||||
"exportButton": "Exportar",
|
||||
"currencyText": "Moeda",
|
||||
"importButton": "Importar",
|
||||
"filterText": "Filtro",
|
||||
"billableOnlyText": "Apenas Faturável",
|
||||
"nonBillableOnlyText": "Apenas Não Faturável",
|
||||
"allTasksText": "Todas as Tarefas",
|
||||
|
||||
"taskColumn": "Tarefa",
|
||||
"membersColumn": "Membros",
|
||||
"hoursColumn": "Horas Estimadas",
|
||||
"totalTimeLoggedColumn": "Tempo Total Registrado",
|
||||
"costColumn": "Custo",
|
||||
"costColumn": "Custo Real",
|
||||
"estimatedCostColumn": "Custo Estimado",
|
||||
"fixedCostColumn": "Custo Fixo",
|
||||
"totalBudgetedCostColumn": "Custo Total Orçado",
|
||||
"totalActualCostColumn": "Custo Total Real",
|
||||
"varianceColumn": "Variação",
|
||||
"totalActualCostColumn": "Custo Real Total",
|
||||
"varianceColumn": "Variância",
|
||||
"totalText": "Total",
|
||||
"noTasksFound": "Nenhuma tarefa encontrada",
|
||||
|
||||
"addRoleButton": "+ Adicionar Função",
|
||||
"ratecardImportantNotice": "* Esta tabela de taxas é gerada com base nos cargos e taxas padrão da empresa. No entanto, você tem a flexibilidade de modificá-la de acordo com o projeto. Essas alterações não impactarão os cargos e taxas padrão da organização.",
|
||||
"ratecardImportantNotice": "* Este cartão de taxa é gerado com base nos títulos de trabalho e taxas padrão da empresa. No entanto, você tem a flexibilidade de modificá-lo de acordo com o projeto. Essas alterações não afetarão os títulos de trabalho e taxas padrão da organização.",
|
||||
"saveButton": "Salvar",
|
||||
|
||||
"jobTitleColumn": "Título do Cargo",
|
||||
"ratePerHourColumn": "Taxa por Hora",
|
||||
"ratecardPluralText": "Tabelas de Taxas",
|
||||
"labourHoursColumn": "Horas de Trabalho"
|
||||
"jobTitleColumn": "Título do Trabalho",
|
||||
"ratePerHourColumn": "Taxa por hora",
|
||||
"ratecardPluralText": "Cartões de Taxa",
|
||||
"labourHoursColumn": "Horas de Trabalho",
|
||||
"actions": "Ações",
|
||||
"selectJobTitle": "Selecionar Título do Trabalho",
|
||||
"ratecardsPluralText": "Modelos de Cartão de Taxa",
|
||||
"deleteConfirm": "Tem certeza?",
|
||||
"yes": "Sim",
|
||||
"no": "Não",
|
||||
"alreadyImportedRateCardMessage": "Um cartão de taxa já foi importado. Limpe todos os cartões de taxa importados para adicionar um novo."
|
||||
}
|
||||
|
||||
@@ -2,19 +2,49 @@
|
||||
"nameColumn": "Nome",
|
||||
"createdColumn": "Criado",
|
||||
"noProjectsAvailable": "Nenhum projeto disponível",
|
||||
"deleteConfirmationTitle": "Tem certeza?",
|
||||
"deleteConfirmationOk": "Sim",
|
||||
"deleteConfirmationTitle": "Tem certeza que deseja excluir esta tabela de preços?",
|
||||
"deleteConfirmationOk": "Sim, excluir",
|
||||
"deleteConfirmationCancel": "Cancelar",
|
||||
"searchPlaceholder": "Pesquisar por nome",
|
||||
"searchPlaceholder": "Pesquisar tabelas de preços por nome",
|
||||
"createRatecard": "Criar Tabela de Preços",
|
||||
"editTooltip": "Editar tabela de preços",
|
||||
"deleteTooltip": "Excluir tabela de preços",
|
||||
"fetchError": "Falha ao carregar tabelas de preços",
|
||||
"createError": "Falha ao criar tabela de preços",
|
||||
"deleteSuccess": "Tabela de preços excluída com sucesso",
|
||||
"deleteError": "Falha ao excluir tabela de preços",
|
||||
|
||||
"jobTitleColumn": "Cargo",
|
||||
"ratePerHourColumn": "Taxa por hora",
|
||||
"saveButton": "Salvar",
|
||||
"addRoleButton": "+ Adicionar Função",
|
||||
"createRatecardSuccessMessage": "Tabela de Preços criada com sucesso!",
|
||||
"createRatecardErrorMessage": "Falha ao criar Tabela de Preços!",
|
||||
"updateRatecardSuccessMessage": "Tabela de Preços atualizada com sucesso!",
|
||||
"updateRatecardErrorMessage": "Falha ao atualizar Tabela de Preços!",
|
||||
"currency": "Moeda"
|
||||
"addRoleButton": "Adicionar Cargo",
|
||||
"createRatecardSuccessMessage": "Tabela de preços criada com sucesso",
|
||||
"createRatecardErrorMessage": "Falha ao criar tabela de preços",
|
||||
"updateRatecardSuccessMessage": "Tabela de preços atualizada com sucesso",
|
||||
"updateRatecardErrorMessage": "Falha ao atualizar tabela de preços",
|
||||
"currency": "Moeda",
|
||||
"actionsColumn": "Ações",
|
||||
"addAllButton": "Adicionar Todos",
|
||||
"removeAllButton": "Remover Todos",
|
||||
"selectJobTitle": "Selecionar cargo",
|
||||
"unsavedChangesTitle": "Você tem alterações não salvas",
|
||||
"unsavedChangesMessage": "Deseja salvar suas alterações antes de sair?",
|
||||
"unsavedChangesSave": "Salvar",
|
||||
"unsavedChangesDiscard": "Descartar",
|
||||
"ratecardNameRequired": "O nome da tabela de preços é obrigatório",
|
||||
"ratecardNamePlaceholder": "Digite o nome da tabela de preços",
|
||||
"noRatecardsFound": "Nenhuma tabela de preços encontrada",
|
||||
"loadingRateCards": "Carregando tabelas de preços...",
|
||||
"noJobTitlesAvailable": "Nenhum cargo disponível",
|
||||
"noRolesAdded": "Nenhum cargo adicionado ainda",
|
||||
"createFirstJobTitle": "Criar Primeiro Cargo",
|
||||
"jobRolesTitle": "Cargos",
|
||||
"noJobTitlesMessage": "Por favor, crie cargos primeiro nas configurações de Cargos antes de adicionar funções às tabelas de preços.",
|
||||
"createNewJobTitle": "Criar Novo Cargo",
|
||||
"jobTitleNamePlaceholder": "Digite o nome do cargo",
|
||||
"jobTitleNameRequired": "O nome do cargo é obrigatório",
|
||||
"jobTitleCreatedSuccess": "Cargo criado com sucesso",
|
||||
"jobTitleCreateError": "Falha ao criar cargo",
|
||||
"createButton": "Criar",
|
||||
"cancelButton": "Cancelar"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user