diff --git a/backend/src/modules/drawing/drawing-master-data.controller.ts b/backend/src/modules/drawing/drawing-master-data.controller.ts index b523afb..1869d19 100644 --- a/backend/src/modules/drawing/drawing-master-data.controller.ts +++ b/backend/src/modules/drawing/drawing-master-data.controller.ts @@ -9,6 +9,7 @@ import { Query, UseGuards, ParseIntPipe, + Logger, } from '@nestjs/common'; import { ApiTags, @@ -27,6 +28,8 @@ import { RequirePermission } from '../../common/decorators/require-permission.de @UseGuards(JwtAuthGuard, RbacGuard) @Controller('drawings/master-data') export class DrawingMasterDataController { + private readonly logger = new Logger(DrawingMasterDataController.name); + constructor(private readonly masterDataService: DrawingMasterDataService) {} // ===================================================== @@ -38,9 +41,12 @@ export class DrawingMasterDataController { @ApiQuery({ name: 'projectId', required: true, type: Number }) @RequirePermission('document.view') getVolumes(@Query('projectId', ParseIntPipe) projectId: number) { + this.logger.log(`Fetching Contract Volumes for Project ID: ${projectId}`); return this.masterDataService.findAllVolumes(projectId); } + // ... (Create/Update/Delete methods remain unchanged) ... + @Post('contract/volumes') @ApiOperation({ summary: 'Create Volume' }) @RequirePermission('master_data.drawing_category.manage') @@ -89,9 +95,14 @@ export class DrawingMasterDataController { @ApiQuery({ name: 'projectId', required: true, type: Number }) @RequirePermission('document.view') getCategories(@Query('projectId', ParseIntPipe) projectId: number) { + this.logger.log( + `Fetching Contract Categories for Project ID: ${projectId}` + ); return this.masterDataService.findAllCategories(projectId); } + // ... (Create/Update/Delete methods remain unchanged) ... + @Post('contract/categories') @ApiOperation({ summary: 'Create Category' }) @RequirePermission('master_data.drawing_category.manage') @@ -140,9 +151,14 @@ export class DrawingMasterDataController { @ApiQuery({ name: 'projectId', required: true, type: Number }) @RequirePermission('document.view') getContractSubCats(@Query('projectId', ParseIntPipe) projectId: number) { + this.logger.log( + `Fetching Contract Sub-Categories for Project ID: ${projectId}` + ); return this.masterDataService.findAllContractSubCats(projectId); } + // ... (Create/Update/Delete methods remain unchanged) ... + @Post('contract/sub-categories') @ApiOperation({ summary: 'Create Contract Sub-Category' }) @RequirePermission('master_data.drawing_category.manage') @@ -228,9 +244,14 @@ export class DrawingMasterDataController { @ApiQuery({ name: 'projectId', required: true, type: Number }) @RequirePermission('document.view') getShopMainCats(@Query('projectId', ParseIntPipe) projectId: number) { + this.logger.log( + `Fetching Shop Main Categories for Project ID: ${projectId}` + ); return this.masterDataService.findAllShopMainCats(projectId); } + // ... (Create/Update/Delete methods remain unchanged) ... + @Post('shop/main-categories') @ApiOperation({ summary: 'Create Shop Main Category' }) @RequirePermission('master_data.drawing_category.manage') @@ -285,6 +306,9 @@ export class DrawingMasterDataController { @Query('projectId', ParseIntPipe) projectId: number, @Query('mainCategoryId') mainCategoryId?: number ) { + this.logger.log( + `Fetching Shop Sub-Categories for Project ID: ${projectId}, MainCategory: ${mainCategoryId}` + ); return this.masterDataService.findAllShopSubCats( projectId, mainCategoryId ? Number(mainCategoryId) : undefined diff --git a/frontend/app/(admin)/admin/doc-control/drawings/contract/categories/page.tsx b/frontend/app/(admin)/admin/doc-control/drawings/contract/categories/page.tsx index deb83db..2334a54 100644 --- a/frontend/app/(admin)/admin/doc-control/drawings/contract/categories/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/drawings/contract/categories/page.tsx @@ -232,10 +232,10 @@ function ManageMappings({ projectId }: { projectId: number }) { - {subCategories + {(subCategories || []) .filter( (s: ContractSubCategory) => - !mappings.find((m: { subCategory: { id: number } }) => m.subCategory.id === s.id) + !(mappings || []).find((m: { subCategory: { id: number } }) => m.subCategory?.id === s.id) ) .map((s: ContractSubCategory) => ( diff --git a/frontend/app/(admin)/admin/doc-control/drawings/shop/sub-categories/page.tsx b/frontend/app/(admin)/admin/doc-control/drawings/shop/sub-categories/page.tsx index 9f4b1d6..95a0e02 100644 --- a/frontend/app/(admin)/admin/doc-control/drawings/shop/sub-categories/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/drawings/shop/sub-categories/page.tsx @@ -1,19 +1,13 @@ -"use client"; +'use client'; -import { useState } from "react"; -import { GenericCrudTable } from "@/components/admin/reference/generic-crud-table"; -import { ColumnDef } from "@tanstack/react-table"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; -import { Loader2, CheckCircle, XCircle } from "lucide-react"; -import { useProjects } from "@/hooks/use-master-data"; -import { drawingMasterDataService } from "@/lib/services/drawing-master-data.service"; -import { Badge } from "@/components/ui/badge"; +import { useState } from 'react'; +import { GenericCrudTable } from '@/components/admin/reference/generic-crud-table'; +import { ColumnDef } from '@tanstack/react-table'; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; +import { Loader2, CheckCircle, XCircle } from 'lucide-react'; +import { useProjects } from '@/hooks/use-master-data'; +import { drawingMasterDataService } from '@/lib/services/drawing-master-data.service'; +import { Badge } from '@/components/ui/badge'; interface SubCategory { id: number; @@ -28,46 +22,41 @@ export default function ShopSubCategoriesPage() { const [selectedProjectId, setSelectedProjectId] = useState(undefined); const { data: projects = [], isLoading: isLoadingProjects } = useProjects(); + console.log('Projects Data:', projects); + const columns: ColumnDef[] = [ { - accessorKey: "subCategoryCode", - header: "Code", + accessorKey: 'subCategoryCode', + header: 'Code', cell: ({ row }) => ( - {row.getValue("subCategoryCode")} + {row.getValue('subCategoryCode')} ), }, { - accessorKey: "subCategoryName", - header: "Sub-category Name", + accessorKey: 'subCategoryName', + header: 'Sub-category Name', }, { - accessorKey: "description", - header: "Description", - cell: ({ row }) => ( - - {row.getValue("description") || "-"} - - ), + accessorKey: 'description', + header: 'Description', + cell: ({ row }) => {row.getValue('description') || '-'}, }, { - accessorKey: "isActive", - header: "Active", - cell: ({ row }) => ( - row.getValue("isActive") ? ( + accessorKey: 'isActive', + header: 'Active', + cell: ({ row }) => + row.getValue('isActive') ? ( ) : ( - ) - ), + ), }, { - accessorKey: "sortOrder", - header: "Order", - cell: ({ row }) => ( - {row.getValue("sortOrder")} - ), + accessorKey: 'sortOrder', + header: 'Order', + cell: ({ row }) => {row.getValue('sortOrder')}, }, ]; @@ -75,7 +64,7 @@ export default function ShopSubCategoriesPage() {
Project: