This commit is contained in:
@@ -44,7 +44,7 @@ export default function DisciplinesPage() {
|
|||||||
];
|
];
|
||||||
|
|
||||||
const contractOptions = contracts.map((c) => ({
|
const contractOptions = contracts.map((c) => ({
|
||||||
label: `${c.contractName} (${c.contractNo})`,
|
label: `${c.contractName} (${c.contractCode})`,
|
||||||
value: c.id,
|
value: c.id,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@ export default function DisciplinesPage() {
|
|||||||
queryKey={['disciplines', selectedContractId ?? 'all']}
|
queryKey={['disciplines', selectedContractId ?? 'all']}
|
||||||
fetchFn={() => masterDataService.getDisciplines(selectedContractId ? parseInt(selectedContractId) : undefined)}
|
fetchFn={() => masterDataService.getDisciplines(selectedContractId ? parseInt(selectedContractId) : undefined)}
|
||||||
createFn={(data: Record<string, unknown>) => masterDataService.createDiscipline(data as unknown as Parameters<typeof masterDataService.createDiscipline>[0])}
|
createFn={(data: Record<string, unknown>) => masterDataService.createDiscipline(data as unknown as Parameters<typeof masterDataService.createDiscipline>[0])}
|
||||||
updateFn={(id, data) => Promise.reject('Not implemented yet')} // Update endpoint needs to be verified/added if missing
|
updateFn={(id, data) => Promise.reject('Not implemented yet')}
|
||||||
deleteFn={(id) => masterDataService.deleteDiscipline(id)}
|
deleteFn={(id) => masterDataService.deleteDiscipline(id)}
|
||||||
columns={columns}
|
columns={columns}
|
||||||
filters={
|
filters={
|
||||||
@@ -73,7 +73,7 @@ export default function DisciplinesPage() {
|
|||||||
<SelectItem value="all">All Contracts</SelectItem>
|
<SelectItem value="all">All Contracts</SelectItem>
|
||||||
{contracts.map((c) => (
|
{contracts.map((c) => (
|
||||||
<SelectItem key={c.id} value={c.id.toString()}>
|
<SelectItem key={c.id} value={c.id.toString()}>
|
||||||
{c.contractName} ({c.contractNo})
|
{c.contractName} ({c.contractCode})
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
))}
|
))}
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ export default function RfaTypesPage() {
|
|||||||
];
|
];
|
||||||
|
|
||||||
const contractOptions = contracts.map((c) => ({
|
const contractOptions = contracts.map((c) => ({
|
||||||
label: `${c.contractName} (${c.contractNo})`,
|
label: `${c.contractName} (${c.contractCode})`,
|
||||||
value: c.id,
|
value: c.id,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ export default function RfaTypesPage() {
|
|||||||
<SelectItem value="all">All Contracts</SelectItem>
|
<SelectItem value="all">All Contracts</SelectItem>
|
||||||
{contracts.map((c) => (
|
{contracts.map((c) => (
|
||||||
<SelectItem key={c.id} value={c.id.toString()}>
|
<SelectItem key={c.id} value={c.id.toString()}>
|
||||||
{c.contractName} ({c.contractNo})
|
{c.contractName} ({c.contractCode})
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
))}
|
))}
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ export default function TagsPage() {
|
|||||||
|
|
||||||
const formatPayload = (data: Record<string, unknown>) => {
|
const formatPayload = (data: Record<string, unknown>) => {
|
||||||
const payload = { ...data };
|
const payload = { ...data };
|
||||||
|
// Backend entity uses project_id (underscore) per ADR-017/018 schema
|
||||||
if (!payload.project_id || payload.project_id === "") {
|
if (!payload.project_id || payload.project_id === "") {
|
||||||
payload.project_id = null;
|
payload.project_id = null;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -125,18 +125,18 @@ export const numberingApi = {
|
|||||||
* Get all templates
|
* Get all templates
|
||||||
*/
|
*/
|
||||||
getTemplates: async (): Promise<NumberingTemplate[]> => {
|
getTemplates: async (): Promise<NumberingTemplate[]> => {
|
||||||
const res = await apiClient.get<NumberingTemplate[]>('/admin/document-numbering/templates');
|
const res = await apiClient.get<any>('/admin/document-numbering/templates');
|
||||||
return res.data;
|
return res.data.data || res.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get templates for a specific project
|
* Get templates for a specific project
|
||||||
*/
|
*/
|
||||||
getTemplatesByProject: async (projectId: number): Promise<NumberingTemplate[]> => {
|
getTemplatesByProject: async (projectId: number): Promise<NumberingTemplate[]> => {
|
||||||
const res = await apiClient.get<NumberingTemplate[]>(
|
const res = await apiClient.get<any>(
|
||||||
`/admin/document-numbering/templates?projectId=${projectId}`
|
`/admin/document-numbering/templates?projectId=${projectId}`
|
||||||
);
|
);
|
||||||
return res.data;
|
return res.data.data || res.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -151,11 +151,11 @@ export const numberingApi = {
|
|||||||
* Save (create or update) a template
|
* Save (create or update) a template
|
||||||
*/
|
*/
|
||||||
saveTemplate: async (dto: Partial<NumberingTemplate>): Promise<NumberingTemplate> => {
|
saveTemplate: async (dto: Partial<NumberingTemplate>): Promise<NumberingTemplate> => {
|
||||||
const res = await apiClient.post<NumberingTemplate>(
|
const res = await apiClient.post<any>(
|
||||||
'/admin/document-numbering/templates',
|
'/admin/document-numbering/templates',
|
||||||
dto
|
dto
|
||||||
);
|
);
|
||||||
return res.data;
|
return res.data.data || res.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -173,30 +173,30 @@ export const numberingApi = {
|
|||||||
* Get audit logs
|
* Get audit logs
|
||||||
*/
|
*/
|
||||||
getAuditLogs: async (limit = 100): Promise<DocumentNumberAudit[]> => {
|
getAuditLogs: async (limit = 100): Promise<DocumentNumberAudit[]> => {
|
||||||
const res = await apiClient.get<DocumentNumberAudit[]>(
|
const res = await apiClient.get<any>(
|
||||||
`/document-numbering/logs/audit?limit=${limit}`
|
`/document-numbering/logs/audit?limit=${limit}`
|
||||||
);
|
);
|
||||||
return res.data;
|
return res.data.data || res.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get error logs
|
* Get error logs
|
||||||
*/
|
*/
|
||||||
getErrorLogs: async (limit = 100): Promise<DocumentNumberError[]> => {
|
getErrorLogs: async (limit = 100): Promise<DocumentNumberError[]> => {
|
||||||
const res = await apiClient.get<DocumentNumberError[]>(
|
const res = await apiClient.get<any>(
|
||||||
`/document-numbering/logs/errors?limit=${limit}`
|
`/document-numbering/logs/errors?limit=${limit}`
|
||||||
);
|
);
|
||||||
return res.data;
|
return res.data.data || res.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get metrics (audit + errors combined)
|
* Get metrics (audit + errors combined)
|
||||||
*/
|
*/
|
||||||
getMetrics: async (): Promise<{ audit: DocumentNumberAudit[]; errors: DocumentNumberError[] }> => {
|
getMetrics: async (): Promise<{ audit: DocumentNumberAudit[]; errors: DocumentNumberError[] }> => {
|
||||||
const res = await apiClient.get<{ audit: DocumentNumberAudit[]; errors: DocumentNumberError[] }>(
|
const res = await apiClient.get<any>(
|
||||||
'/admin/document-numbering/metrics'
|
'/admin/document-numbering/metrics'
|
||||||
);
|
);
|
||||||
return res.data;
|
return res.data.data || res.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
// ----------------------------------------------------------
|
// ----------------------------------------------------------
|
||||||
@@ -207,44 +207,44 @@ export const numberingApi = {
|
|||||||
* Manually override/set a counter value
|
* Manually override/set a counter value
|
||||||
*/
|
*/
|
||||||
manualOverride: async (dto: ManualOverrideDto): Promise<{ success: boolean; message: string }> => {
|
manualOverride: async (dto: ManualOverrideDto): Promise<{ success: boolean; message: string }> => {
|
||||||
const res = await apiClient.post<{ success: boolean; message: string }>(
|
const res = await apiClient.post<any>(
|
||||||
'/admin/document-numbering/manual-override',
|
'/admin/document-numbering/manual-override',
|
||||||
dto
|
dto
|
||||||
);
|
);
|
||||||
return res.data;
|
return res.data.data || res.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Void a document number and generate replacement
|
* Void a document number and generate replacement
|
||||||
*/
|
*/
|
||||||
voidAndReplace: async (dto: VoidAndReplaceDto): Promise<{ newNumber: string; auditId: number }> => {
|
voidAndReplace: async (dto: VoidAndReplaceDto): Promise<{ newNumber: string; auditId: number }> => {
|
||||||
const res = await apiClient.post<{ newNumber: string; auditId: number }>(
|
const res = await apiClient.post<any>(
|
||||||
'/admin/document-numbering/void-and-replace',
|
'/admin/document-numbering/void-and-replace',
|
||||||
dto
|
dto
|
||||||
);
|
);
|
||||||
return res.data;
|
return res.data.data || res.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cancel/skip a document number
|
* Cancel/skip a document number
|
||||||
*/
|
*/
|
||||||
cancelNumber: async (dto: CancelNumberDto): Promise<{ success: boolean }> => {
|
cancelNumber: async (dto: CancelNumberDto): Promise<{ success: boolean }> => {
|
||||||
const res = await apiClient.post<{ success: boolean }>(
|
const res = await apiClient.post<any>(
|
||||||
'/admin/document-numbering/cancel',
|
'/admin/document-numbering/cancel',
|
||||||
dto
|
dto
|
||||||
);
|
);
|
||||||
return res.data;
|
return res.data.data || res.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bulk import counter values
|
* Bulk import counter values
|
||||||
*/
|
*/
|
||||||
bulkImport: async (items: BulkImportItem[]): Promise<{ imported: number; errors: string[] }> => {
|
bulkImport: async (items: BulkImportItem[]): Promise<{ imported: number; errors: string[] }> => {
|
||||||
const res = await apiClient.post<{ imported: number; errors: string[] }>(
|
const res = await apiClient.post<any>(
|
||||||
'/admin/document-numbering/bulk-import',
|
'/admin/document-numbering/bulk-import',
|
||||||
items
|
items
|
||||||
);
|
);
|
||||||
return res.data;
|
return res.data.data || res.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -265,8 +265,8 @@ export const numberingApi = {
|
|||||||
const url = projectId
|
const url = projectId
|
||||||
? `/document-numbering/sequences?projectId=${projectId}`
|
? `/document-numbering/sequences?projectId=${projectId}`
|
||||||
: '/document-numbering/sequences';
|
: '/document-numbering/sequences';
|
||||||
const res = await apiClient.get<NumberSequence[]>(url);
|
const res = await apiClient.get<any>(url);
|
||||||
return res.data;
|
return res.data.data || res.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -119,12 +119,12 @@ export const drawingMasterDataService = {
|
|||||||
|
|
||||||
async createContractVolume(data: CreateContractVolumeDto): Promise<ContractVolume> {
|
async createContractVolume(data: CreateContractVolumeDto): Promise<ContractVolume> {
|
||||||
const response = await apiClient.post(`/drawings/master-data/contract/volumes`, data);
|
const response = await apiClient.post(`/drawings/master-data/contract/volumes`, data);
|
||||||
return response.data;
|
return response.data?.data || response.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
async updateContractVolume(id: number, data: Partial<CreateContractVolumeDto>): Promise<ContractVolume> {
|
async updateContractVolume(id: number, data: Partial<CreateContractVolumeDto>): Promise<ContractVolume> {
|
||||||
const response = await apiClient.patch(`/drawings/master-data/contract/volumes/${id}`, data);
|
const response = await apiClient.patch(`/drawings/master-data/contract/volumes/${id}`, data);
|
||||||
return response.data;
|
return response.data?.data || response.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
async deleteContractVolume(id: number): Promise<void> {
|
async deleteContractVolume(id: number): Promise<void> {
|
||||||
@@ -141,12 +141,12 @@ export const drawingMasterDataService = {
|
|||||||
|
|
||||||
async createContractCategory(data: CreateContractCategoryDto): Promise<ContractCategory> {
|
async createContractCategory(data: CreateContractCategoryDto): Promise<ContractCategory> {
|
||||||
const response = await apiClient.post(`/drawings/master-data/contract/categories`, data);
|
const response = await apiClient.post(`/drawings/master-data/contract/categories`, data);
|
||||||
return response.data;
|
return response.data?.data || response.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
async updateContractCategory(id: number, data: Partial<CreateContractCategoryDto>): Promise<ContractCategory> {
|
async updateContractCategory(id: number, data: Partial<CreateContractCategoryDto>): Promise<ContractCategory> {
|
||||||
const response = await apiClient.patch(`/drawings/master-data/contract/categories/${id}`, data);
|
const response = await apiClient.patch(`/drawings/master-data/contract/categories/${id}`, data);
|
||||||
return response.data;
|
return response.data?.data || response.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
async deleteContractCategory(id: number): Promise<void> {
|
async deleteContractCategory(id: number): Promise<void> {
|
||||||
@@ -163,7 +163,7 @@ export const drawingMasterDataService = {
|
|||||||
|
|
||||||
async createContractSubCategory(data: CreateContractSubCategoryDto): Promise<ContractSubCategory> {
|
async createContractSubCategory(data: CreateContractSubCategoryDto): Promise<ContractSubCategory> {
|
||||||
const response = await apiClient.post(`/drawings/master-data/contract/sub-categories`, data);
|
const response = await apiClient.post(`/drawings/master-data/contract/sub-categories`, data);
|
||||||
return response.data;
|
return response.data?.data || response.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
async updateContractSubCategory(
|
async updateContractSubCategory(
|
||||||
@@ -171,7 +171,7 @@ export const drawingMasterDataService = {
|
|||||||
data: Partial<CreateContractSubCategoryDto>
|
data: Partial<CreateContractSubCategoryDto>
|
||||||
): Promise<ContractSubCategory> {
|
): Promise<ContractSubCategory> {
|
||||||
const response = await apiClient.patch(`/drawings/master-data/contract/sub-categories/${id}`, data);
|
const response = await apiClient.patch(`/drawings/master-data/contract/sub-categories/${id}`, data);
|
||||||
return response.data;
|
return response.data?.data || response.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
async deleteContractSubCategory(id: number): Promise<void> {
|
async deleteContractSubCategory(id: number): Promise<void> {
|
||||||
@@ -195,7 +195,7 @@ export const drawingMasterDataService = {
|
|||||||
subCategoryId: number;
|
subCategoryId: number;
|
||||||
}): Promise<{ id: number }> {
|
}): Promise<{ id: number }> {
|
||||||
const response = await apiClient.post(`/drawings/master-data/contract/mappings`, data);
|
const response = await apiClient.post(`/drawings/master-data/contract/mappings`, data);
|
||||||
return response.data;
|
return response.data?.data || response.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
async deleteContractMapping(id: number): Promise<void> {
|
async deleteContractMapping(id: number): Promise<void> {
|
||||||
@@ -212,12 +212,12 @@ export const drawingMasterDataService = {
|
|||||||
|
|
||||||
async createShopMainCategory(data: CreateShopMainCategoryDto): Promise<ShopMainCategory> {
|
async createShopMainCategory(data: CreateShopMainCategoryDto): Promise<ShopMainCategory> {
|
||||||
const response = await apiClient.post(`/drawings/master-data/shop/main-categories`, data);
|
const response = await apiClient.post(`/drawings/master-data/shop/main-categories`, data);
|
||||||
return response.data;
|
return response.data?.data || response.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
async updateShopMainCategory(id: number, data: Partial<CreateShopMainCategoryDto>): Promise<ShopMainCategory> {
|
async updateShopMainCategory(id: number, data: Partial<CreateShopMainCategoryDto>): Promise<ShopMainCategory> {
|
||||||
const response = await apiClient.patch(`/drawings/master-data/shop/main-categories/${id}`, data);
|
const response = await apiClient.patch(`/drawings/master-data/shop/main-categories/${id}`, data);
|
||||||
return response.data;
|
return response.data?.data || response.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
async deleteShopMainCategory(id: number): Promise<void> {
|
async deleteShopMainCategory(id: number): Promise<void> {
|
||||||
@@ -234,12 +234,12 @@ export const drawingMasterDataService = {
|
|||||||
|
|
||||||
async createShopSubCategory(data: CreateShopSubCategoryDto): Promise<ShopSubCategory> {
|
async createShopSubCategory(data: CreateShopSubCategoryDto): Promise<ShopSubCategory> {
|
||||||
const response = await apiClient.post(`/drawings/master-data/shop/sub-categories`, data);
|
const response = await apiClient.post(`/drawings/master-data/shop/sub-categories`, data);
|
||||||
return response.data;
|
return response.data?.data || response.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
async updateShopSubCategory(id: number, data: Partial<CreateShopSubCategoryDto>): Promise<ShopSubCategory> {
|
async updateShopSubCategory(id: number, data: Partial<CreateShopSubCategoryDto>): Promise<ShopSubCategory> {
|
||||||
const response = await apiClient.patch(`/drawings/master-data/shop/sub-categories/${id}`, data);
|
const response = await apiClient.patch(`/drawings/master-data/shop/sub-categories/${id}`, data);
|
||||||
return response.data;
|
return response.data?.data || response.data;
|
||||||
},
|
},
|
||||||
|
|
||||||
async deleteShopSubCategory(id: number): Promise<void> {
|
async deleteShopSubCategory(id: number): Promise<void> {
|
||||||
|
|||||||
Reference in New Issue
Block a user