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

@@ -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."
}

View File

@@ -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"
}