add project edit button to project show page and billing rate info, fixes ST-236

This commit is contained in:
Gregor Vostrak
2024-09-29 00:40:14 +02:00
parent 469f128604
commit 084647c2a6
2 changed files with 45 additions and 2 deletions

View File

@@ -33,7 +33,10 @@ test('test that updating project member billable rate works for existing time en
.first() .first()
.getByRole('button') .getByRole('button')
.click(); .click();
await page.getByRole('button', { name: 'Edit' }).first().click(); await page
.getByRole('button', { name: 'Edit Project Member' })
.first()
.click();
await page.getByLabel('Billable Rate').fill(newBillableRate.toString()); await page.getByLabel('Billable Rate').fill(newBillableRate.toString());
await page.getByRole('button', { name: 'Update Project Member' }).click(); await page.getByRole('button', { name: 'Update Project Member' }).click();

View File

@@ -10,7 +10,9 @@ import {
ChevronRightIcon, ChevronRightIcon,
CheckCircleIcon, CheckCircleIcon,
UserGroupIcon, UserGroupIcon,
PencilSquareIcon,
} from '@heroicons/vue/20/solid'; } from '@heroicons/vue/20/solid';
import { Link } from '@inertiajs/vue3'; import { Link } from '@inertiajs/vue3';
import TaskCreateModal from '@/Components/Common/Task/TaskCreateModal.vue'; import TaskCreateModal from '@/Components/Common/Task/TaskCreateModal.vue';
import TaskTable from '@/Components/Common/Task/TaskTable.vue'; import TaskTable from '@/Components/Common/Task/TaskTable.vue';
@@ -19,10 +21,18 @@ import Card from '@/Components/Common/Card.vue';
import ProjectMemberTable from '@/Components/Common/ProjectMember/ProjectMemberTable.vue'; import ProjectMemberTable from '@/Components/Common/ProjectMember/ProjectMemberTable.vue';
import ProjectMemberCreateModal from '@/Components/Common/ProjectMember/ProjectMemberCreateModal.vue'; import ProjectMemberCreateModal from '@/Components/Common/ProjectMember/ProjectMemberCreateModal.vue';
import { useProjectMembersStore } from '@/utils/useProjectMembers'; import { useProjectMembersStore } from '@/utils/useProjectMembers';
import { canCreateTasks, canViewProjectMembers } from '@/utils/permissions'; import {
canCreateProjects,
canCreateTasks,
canViewProjectMembers,
} from '@/utils/permissions';
import TabBarItem from '@/Components/Common/TabBar/TabBarItem.vue'; import TabBarItem from '@/Components/Common/TabBar/TabBarItem.vue';
import TabBar from '@/Components/Common/TabBar/TabBar.vue'; import TabBar from '@/Components/Common/TabBar/TabBar.vue';
import { useTasksStore } from '@/utils/useTasks'; import { useTasksStore } from '@/utils/useTasks';
import ProjectEditModal from '@/Components/Common/Project/ProjectEditModal.vue';
import { Badge } from '@/packages/ui/src';
import { formatCents } from '../packages/ui/src/utils/money';
import { getOrganizationCurrencyString } from '../utils/money';
const { projects } = storeToRefs(useProjectsStore()); const { projects } = storeToRefs(useProjectsStore());
@@ -45,6 +55,8 @@ onMounted(() => {
} }
}); });
const showEditProjectModal = ref(false);
const activeTab = ref<'active' | 'done'>('active'); const activeTab = ref<'active' | 'done'>('active');
function isActiveTab(tab: string) { function isActiveTab(tab: string) {
@@ -98,7 +110,35 @@ const shownTasks = computed(() => {
</div> </div>
</li> </li>
</ol> </ol>
<div class="px-4">
<Badge v-if="project?.billable_rate">
{{
formatCents(
project?.billable_rate ?? 0,
getOrganizationCurrencyString()
)
}}
/ h
</Badge>
<Badge
v-if="project?.is_billable && !project?.billable_rate">
Default Rate
</Badge>
<Badge v-if="!project?.is_billable"> Non-Billable </Badge>
</div>
</nav> </nav>
<div>
<SecondaryButton
:icon="PencilSquareIcon"
@click="showEditProjectModal = true"
v-if="canCreateProjects()">
Edit Project
</SecondaryButton>
<ProjectEditModal
v-if="project"
:originalProject="project"
v-model:show="showEditProjectModal"></ProjectEditModal>
</div>
</MainContainer> </MainContainer>
<MainContainer> <MainContainer>
<div class="grid lg:grid-cols-2 gap-x-6 pt-6"> <div class="grid lg:grid-cols-2 gap-x-6 pt-6">