feat(admin-center): implement admin center settings retrieval and enhance holiday population logic
- Added a new API endpoint in AdminCenterController to fetch admin center settings, including organization details. - Updated the admin center API router to include the new settings route. - Enhanced the holiday controller to check for recent holiday population before attempting to repopulate, preventing duplicate entries. - Improved the holiday calendar component to manage holiday population attempts and display loading states. - Updated localization files to support new messages related to calculation methods and holiday settings.
This commit is contained in:
@@ -1,114 +1,114 @@
|
||||
{
|
||||
"financeText": "Finance",
|
||||
"ratecardSingularText": "Rate Card",
|
||||
"groupByText": "Group by",
|
||||
"statusText": "Status",
|
||||
"phaseText": "Phase",
|
||||
"priorityText": "Priority",
|
||||
"exportButton": "Export",
|
||||
"currencyText": "Currency",
|
||||
"importButton": "Import",
|
||||
"filterText": "Filter",
|
||||
"billableOnlyText": "Billable Only",
|
||||
"nonBillableOnlyText": "Non-Billable Only",
|
||||
"allTasksText": "All Tasks",
|
||||
"projectBudgetOverviewText": "Project Budget Overview",
|
||||
"taskColumn": "Task",
|
||||
"membersColumn": "Members",
|
||||
"hoursColumn": "Estimated Hours",
|
||||
"manDaysColumn": "Estimated Man Days",
|
||||
"actualManDaysColumn": "Actual Man Days",
|
||||
"effortVarianceColumn": "Effort Variance",
|
||||
"totalTimeLoggedColumn": "Total Time Logged",
|
||||
"costColumn": "Actual Cost",
|
||||
"estimatedCostColumn": "Estimated Cost",
|
||||
"fixedCostColumn": "Fixed Cost",
|
||||
"totalBudgetedCostColumn": "Total Budgeted Cost",
|
||||
"totalActualCostColumn": "Total Actual Cost",
|
||||
"varianceColumn": "Variance",
|
||||
"totalText": "Total",
|
||||
"noTasksFound": "No tasks found",
|
||||
"addRoleButton": "+ Add Role",
|
||||
"ratecardImportantNotice": "* This rate card is generated based on the company's standard job titles and rates. However, you have the flexibility to modify it according to the project. These changes will not impact the organization's standard job titles and rates.",
|
||||
"saveButton": "Save",
|
||||
"jobTitleColumn": "Job Title",
|
||||
"ratePerHourColumn": "Rate per hour",
|
||||
"ratePerManDayColumn": "Rate per man day",
|
||||
"calculationMethodText": "Calculation Method",
|
||||
"hourlyRatesText": "Hourly Rates",
|
||||
"manDaysText": "Man Days",
|
||||
"hoursPerDayText": "Hours per Day",
|
||||
"ratecardPluralText": "Rate Cards",
|
||||
"labourHoursColumn": "Labour Hours",
|
||||
"actions": "Actions",
|
||||
"selectJobTitle": "Select Job Title",
|
||||
"ratecardsPluralText": "Rate Card Templates",
|
||||
"deleteConfirm": "Are you sure ?",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"alreadyImportedRateCardMessage": "A rate card has already been imported. Clear all imported rate cards to add a new one.",
|
||||
"financeText": "财务",
|
||||
"ratecardSingularText": "费率卡",
|
||||
"groupByText": "分组方式",
|
||||
"statusText": "状态",
|
||||
"phaseText": "阶段",
|
||||
"priorityText": "优先级",
|
||||
"exportButton": "导出",
|
||||
"currencyText": "货币",
|
||||
"importButton": "导入",
|
||||
"filterText": "筛选",
|
||||
"billableOnlyText": "仅可计费",
|
||||
"nonBillableOnlyText": "仅不可计费",
|
||||
"allTasksText": "所有任务",
|
||||
"projectBudgetOverviewText": "项目预算概览",
|
||||
"taskColumn": "任务",
|
||||
"membersColumn": "成员",
|
||||
"hoursColumn": "预估工时",
|
||||
"manDaysColumn": "预估人天",
|
||||
"actualManDaysColumn": "实际人天",
|
||||
"effortVarianceColumn": "工作量偏差",
|
||||
"totalTimeLoggedColumn": "总记录时间",
|
||||
"costColumn": "实际成本",
|
||||
"estimatedCostColumn": "预估成本",
|
||||
"fixedCostColumn": "固定成本",
|
||||
"totalBudgetedCostColumn": "总预算成本",
|
||||
"totalActualCostColumn": "总实际成本",
|
||||
"varianceColumn": "偏差",
|
||||
"totalText": "总计",
|
||||
"noTasksFound": "未找到任务",
|
||||
"addRoleButton": "+ 添加角色",
|
||||
"ratecardImportantNotice": "* 此费率卡基于公司标准职位和费率生成。但是,您可以根据项目灵活修改。这些更改不会影响组织的标准职位和费率。",
|
||||
"saveButton": "保存",
|
||||
"jobTitleColumn": "职位",
|
||||
"ratePerHourColumn": "每小时费率",
|
||||
"ratePerManDayColumn": "每人每日费率",
|
||||
"calculationMethodText": "计算方法",
|
||||
"hourlyRatesText": "小时费率",
|
||||
"manDaysText": "人天",
|
||||
"hoursPerDayText": "每日工时",
|
||||
"ratecardPluralText": "费率卡",
|
||||
"labourHoursColumn": "工时",
|
||||
"actions": "操作",
|
||||
"selectJobTitle": "选择职位",
|
||||
"ratecardsPluralText": "费率卡模板",
|
||||
"deleteConfirm": "您确定吗?",
|
||||
"yes": "是",
|
||||
"no": "否",
|
||||
"alreadyImportedRateCardMessage": "已导入费率卡。清除所有已导入的费率卡以添加新的费率卡。",
|
||||
"budgetOverviewTooltips": {
|
||||
"manualBudget": "Manual project budget amount set by project manager",
|
||||
"totalActualCost": "Total actual cost including fixed costs",
|
||||
"variance": "Difference between manual budget and actual cost",
|
||||
"utilization": "Percentage of manual budget utilized",
|
||||
"estimatedHours": "Total estimated hours from all tasks",
|
||||
"fixedCosts": "Total fixed costs from all tasks",
|
||||
"timeBasedCost": "Actual cost from time tracking (excluding fixed costs)",
|
||||
"remainingBudget": "Remaining budget amount"
|
||||
"manualBudget": "项目经理设置的手动项目预算金额",
|
||||
"totalActualCost": "包括固定成本在内的总实际成本",
|
||||
"variance": "手动预算与实际成本之间的差异",
|
||||
"utilization": "手动预算使用百分比",
|
||||
"estimatedHours": "所有任务的总预估工时",
|
||||
"fixedCosts": "所有任务的总固定成本",
|
||||
"timeBasedCost": "基于时间跟踪的实际成本(不包括固定成本)",
|
||||
"remainingBudget": "剩余预算金额"
|
||||
},
|
||||
"budgetModal": {
|
||||
"title": "Edit Project Budget",
|
||||
"description": "Set a manual budget for this project. This budget will be used for all financial calculations and should include both time-based costs and fixed costs.",
|
||||
"placeholder": "Enter budget amount",
|
||||
"saveButton": "Save",
|
||||
"cancelButton": "Cancel"
|
||||
"title": "编辑项目预算",
|
||||
"description": "为此项目设置手动预算。此预算将用于所有财务计算,应包括基于时间的成本和固定成本。",
|
||||
"placeholder": "输入预算金额",
|
||||
"saveButton": "保存",
|
||||
"cancelButton": "取消"
|
||||
},
|
||||
"budgetStatistics": {
|
||||
"manualBudget": "Manual Budget",
|
||||
"totalActualCost": "Total Actual Cost",
|
||||
"variance": "Variance",
|
||||
"budgetUtilization": "Budget Utilization",
|
||||
"estimatedHours": "Estimated Hours",
|
||||
"fixedCosts": "Fixed Costs",
|
||||
"timeBasedCost": "Time-based Cost",
|
||||
"remainingBudget": "Remaining Budget",
|
||||
"noManualBudgetSet": "(No Manual Budget Set)"
|
||||
"manualBudget": "手动预算",
|
||||
"totalActualCost": "总实际成本",
|
||||
"variance": "偏差",
|
||||
"budgetUtilization": "预算使用率",
|
||||
"estimatedHours": "预估工时",
|
||||
"fixedCosts": "固定成本",
|
||||
"timeBasedCost": "基于时间的成本",
|
||||
"remainingBudget": "剩余预算",
|
||||
"noManualBudgetSet": "(未设置手动预算)"
|
||||
},
|
||||
"budgetSettingsDrawer": {
|
||||
"title": "Project Budget Settings",
|
||||
"budgetConfiguration": "Budget Configuration",
|
||||
"projectBudget": "Project Budget",
|
||||
"projectBudgetTooltip": "Total budget allocated for this project",
|
||||
"currency": "Currency",
|
||||
"costCalculationMethod": "Cost Calculation Method",
|
||||
"calculationMethod": "Calculation Method",
|
||||
"workingHoursPerDay": "Working Hours per Day",
|
||||
"workingHoursPerDayTooltip": "Number of working hours in a day for man-day calculations",
|
||||
"hourlyCalculationInfo": "Costs will be calculated using estimated hours × hourly rates",
|
||||
"manDaysCalculationInfo": "Costs will be calculated using estimated man days × daily rates",
|
||||
"importantNotes": "Important Notes",
|
||||
"calculationMethodChangeNote": "• Changing the calculation method will affect how costs are calculated for all tasks in this project",
|
||||
"immediateEffectNote": "• Changes take effect immediately and will recalculate all project totals",
|
||||
"projectWideNote": "• Budget settings apply to the entire project and all its tasks",
|
||||
"cancel": "Cancel",
|
||||
"saveChanges": "Save Changes",
|
||||
"budgetSettingsUpdated": "Budget settings updated successfully",
|
||||
"budgetSettingsUpdateFailed": "Failed to update budget settings"
|
||||
"title": "项目预算设置",
|
||||
"budgetConfiguration": "预算配置",
|
||||
"projectBudget": "项目预算",
|
||||
"projectBudgetTooltip": "为此项目分配的总预算",
|
||||
"currency": "货币",
|
||||
"costCalculationMethod": "成本计算方法",
|
||||
"calculationMethod": "计算方法",
|
||||
"workingHoursPerDay": "每日工作工时",
|
||||
"workingHoursPerDayTooltip": "人天计算中每日的工作工时数",
|
||||
"hourlyCalculationInfo": "成本将使用预估工时 × 小时费率计算",
|
||||
"manDaysCalculationInfo": "成本将使用预估人天 × 日费率计算",
|
||||
"importantNotes": "重要说明",
|
||||
"calculationMethodChangeNote": "• 更改计算方法将影响此项目中所有任务的成本计算方式",
|
||||
"immediateEffectNote": "• 更改立即生效并将重新计算所有项目总计",
|
||||
"projectWideNote": "• 预算设置适用于整个项目及其所有任务",
|
||||
"cancel": "取消",
|
||||
"saveChanges": "保存更改",
|
||||
"budgetSettingsUpdated": "预算设置更新成功",
|
||||
"budgetSettingsUpdateFailed": "更新预算设置失败"
|
||||
},
|
||||
"columnTooltips": {
|
||||
"hours": "Total estimated hours for all tasks. Calculated from task time estimates.",
|
||||
"manDays": "Total estimated man days for all tasks. Based on {{hoursPerDay}} hours per working day.",
|
||||
"actualManDays": "Actual man days spent based on time logged. Calculated as: Total Time Logged ÷ {{hoursPerDay}} hours per day.",
|
||||
"effortVariance": "Difference between estimated and actual man days. Positive values indicate over-estimation, negative values indicate under-estimation.",
|
||||
"totalTimeLogged": "Total time actually logged by team members across all tasks.",
|
||||
"estimatedCostHourly": "Estimated cost calculated as: Estimated Hours × Hourly Rates for assigned team members.",
|
||||
"estimatedCostManDays": "Estimated cost calculated as: Estimated Man Days × Daily Rates for assigned team members.",
|
||||
"actualCost": "Actual cost based on time logged. Calculated as: Time Logged × Hourly Rates for team members.",
|
||||
"fixedCost": "Fixed costs that don't depend on time spent. Added manually per task.",
|
||||
"totalBudgetHourly": "Total budgeted cost including estimated cost (Hours × Hourly Rates) + Fixed Costs.",
|
||||
"totalBudgetManDays": "Total budgeted cost including estimated cost (Man Days × Daily Rates) + Fixed Costs.",
|
||||
"totalActual": "Total actual cost including time-based cost + Fixed Costs.",
|
||||
"variance": "Cost variance: Total Budgeted Costs - Total Actual Cost. Positive values indicate under-budget, negative values indicate over-budget."
|
||||
"hours": "所有任务的总预估工时。根据任务时间估算计算。",
|
||||
"manDays": "所有任务的总预估人天。基于每个工作日 {{hoursPerDay}} 小时。",
|
||||
"actualManDays": "基于记录时间花费的实际人天。计算方式:总记录时间 ÷ {{hoursPerDay}} 小时/天。",
|
||||
"effortVariance": "预估人天与实际人天之间的差异。正值表示过度估算,负值表示估算不足。",
|
||||
"totalTimeLogged": "团队成员在所有任务中实际记录的总时间。",
|
||||
"estimatedCostHourly": "预估成本计算方式:预估工时 × 分配团队成员的小时费率。",
|
||||
"estimatedCostManDays": "预估成本计算方式:预估人天 × 分配团队成员的日费率。",
|
||||
"actualCost": "基于记录时间的实际成本。计算方式:记录时间 × 团队成员的小时费率。",
|
||||
"fixedCost": "不依赖时间花费的固定成本。每个任务手动添加。",
|
||||
"totalBudgetHourly": "总预算成本包括预估成本(工时 × 小时费率)+ 固定成本。",
|
||||
"totalBudgetManDays": "总预算成本包括预估成本(人天 × 日费率)+ 固定成本。",
|
||||
"totalActual": "总实际成本包括基于时间的成本 + 固定成本。",
|
||||
"variance": "成本偏差:总预算成本 - 总实际成本。正值表示预算内,负值表示超预算。"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,5 +48,8 @@
|
||||
"jobTitleCreatedSuccess": "职位名称创建成功",
|
||||
"jobTitleCreateError": "职位名称创建失败",
|
||||
"createButton": "创建",
|
||||
"cancelButton": "取消"
|
||||
"cancelButton": "取消",
|
||||
"discardButton": "放弃",
|
||||
"manDaysCalculationMessage": "组织正在使用人日计算({{hours}}小时/天)。上述费率代表日费率。",
|
||||
"hourlyCalculationMessage": "组织正在使用小时计算。上述费率代表小时费率。"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user