입고테이블 생성날짜 저장에러ㅏ 수정

This commit is contained in:
kjs
2025-12-10 16:06:47 +09:00
parent 08575c296e
commit 3188bc0513
4 changed files with 481 additions and 278 deletions

View File

@@ -45,8 +45,10 @@ export const getCascadingRelations = async (req: Request, res: Response) => {
let paramIndex = 1;
// 멀티테넌시 필터링
// - 최고 관리자(company_code = "*"): 모든 데이터 조회 가능
// - 일반 회사: 자기 회사 데이터만 조회 (공통 데이터는 조회 불가)
if (companyCode !== "*") {
query += ` AND (company_code = $${paramIndex} OR company_code = '*')`;
query += ` AND company_code = $${paramIndex}`;
params.push(companyCode);
paramIndex++;
}
@@ -120,9 +122,9 @@ export const getCascadingRelationById = async (req: Request, res: Response) => {
const params: any[] = [id];
// 멀티테넌시 필터링
// 멀티테넌시 필터링 (company_code = "*"는 최고 관리자 전용)
if (companyCode !== "*") {
query += ` AND (company_code = $2 OR company_code = '*')`;
query += ` AND company_code = $2`;
params.push(companyCode);
}
@@ -152,7 +154,10 @@ export const getCascadingRelationById = async (req: Request, res: Response) => {
/**
* 연쇄 관계 코드로 조회
*/
export const getCascadingRelationByCode = async (req: Request, res: Response) => {
export const getCascadingRelationByCode = async (
req: Request,
res: Response
) => {
try {
const { code } = req.params;
const companyCode = req.user?.companyCode || "*";
@@ -185,14 +190,12 @@ export const getCascadingRelationByCode = async (req: Request, res: Response) =>
const params: any[] = [code];
// 멀티테넌시 필터링 (회사 전용 관계 우선, 없으면 공통 관계)
// 멀티테넌시 필터링 (company_code = "*"는 최고 관리자 전용)
if (companyCode !== "*") {
query += ` AND (company_code = $2 OR company_code = '*')`;
query += ` AND company_code = $2`;
params.push(companyCode);
query += ` ORDER BY CASE WHEN company_code = $2 THEN 0 ELSE 1 END LIMIT 1`;
} else {
query += ` LIMIT 1`;
}
query += ` LIMIT 1`;
const result = await pool.query(query, params);
@@ -245,8 +248,16 @@ export const createCascadingRelation = async (req: Request, res: Response) => {
} = req.body;
// 필수 필드 검증
if (!relationCode || !relationName || !parentTable || !parentValueColumn ||
!childTable || !childFilterColumn || !childValueColumn || !childLabelColumn) {
if (
!relationCode ||
!relationName ||
!parentTable ||
!parentValueColumn ||
!childTable ||
!childFilterColumn ||
!childValueColumn ||
!childLabelColumn
) {
return res.status(400).json({
success: false,
message: "필수 필드가 누락되었습니다.",
@@ -379,7 +390,11 @@ export const updateCascadingRelation = async (req: Request, res: Response) => {
// 다른 회사의 데이터는 수정 불가 (최고 관리자 제외)
const existingCompanyCode = existingCheck.rows[0].company_code;
if (companyCode !== "*" && existingCompanyCode !== companyCode && existingCompanyCode !== "*") {
if (
companyCode !== "*" &&
existingCompanyCode !== companyCode &&
existingCompanyCode !== "*"
) {
return res.status(403).json({
success: false,
message: "수정 권한이 없습니다.",
@@ -425,7 +440,11 @@ export const updateCascadingRelation = async (req: Request, res: Response) => {
emptyParentMessage,
noOptionsMessage,
loadingMessage,
clearOnParentChange !== undefined ? (clearOnParentChange ? "Y" : "N") : null,
clearOnParentChange !== undefined
? clearOnParentChange
? "Y"
: "N"
: null,
isActive !== undefined ? (isActive ? "Y" : "N") : null,
userId,
id,
@@ -476,7 +495,11 @@ export const deleteCascadingRelation = async (req: Request, res: Response) => {
// 다른 회사의 데이터는 삭제 불가 (최고 관리자 제외)
const existingCompanyCode = existingCheck.rows[0].company_code;
if (companyCode !== "*" && existingCompanyCode !== companyCode && existingCompanyCode !== "*") {
if (
companyCode !== "*" &&
existingCompanyCode !== companyCode &&
existingCompanyCode !== "*"
) {
return res.status(403).json({
success: false,
message: "삭제 권한이 없습니다.",
@@ -531,13 +554,12 @@ export const getParentOptions = async (req: Request, res: Response) => {
const relationParams: any[] = [code];
// 멀티테넌시 필터링 (company_code = "*"는 최고 관리자 전용)
if (companyCode !== "*") {
relationQuery += ` AND (company_code = $2 OR company_code = '*')`;
relationQuery += ` AND company_code = $2`;
relationParams.push(companyCode);
relationQuery += ` ORDER BY CASE WHEN company_code = $2 THEN 0 ELSE 1 END LIMIT 1`;
} else {
relationQuery += ` LIMIT 1`;
}
relationQuery += ` LIMIT 1`;
const relationResult = await pool.query(relationQuery, relationParams);
@@ -551,7 +573,8 @@ export const getParentOptions = async (req: Request, res: Response) => {
const relation = relationResult.rows[0];
// 라벨 컬럼이 없으면 값 컬럼 사용
const labelColumn = relation.parent_label_column || relation.parent_value_column;
const labelColumn =
relation.parent_label_column || relation.parent_value_column;
// 부모 옵션 조회
let optionsQuery = `
@@ -571,8 +594,13 @@ export const getParentOptions = async (req: Request, res: Response) => {
const optionsParams: any[] = [];
if (tableInfoResult.rowCount && tableInfoResult.rowCount > 0 && companyCode !== "*") {
optionsQuery += ` AND (company_code = $1 OR company_code = '*')`;
// company_code = "*"는 최고 관리자 전용이므로 일반 회사는 자기 회사 데이터만
if (
tableInfoResult.rowCount &&
tableInfoResult.rowCount > 0 &&
companyCode !== "*"
) {
optionsQuery += ` AND company_code = $1`;
optionsParams.push(companyCode);
}
@@ -646,13 +674,12 @@ export const getCascadingOptions = async (req: Request, res: Response) => {
const relationParams: any[] = [code];
// 멀티테넌시 필터링 (company_code = "*"는 최고 관리자 전용)
if (companyCode !== "*") {
relationQuery += ` AND (company_code = $2 OR company_code = '*')`;
relationQuery += ` AND company_code = $2`;
relationParams.push(companyCode);
relationQuery += ` ORDER BY CASE WHEN company_code = $2 THEN 0 ELSE 1 END LIMIT 1`;
} else {
relationQuery += ` LIMIT 1`;
}
relationQuery += ` LIMIT 1`;
const relationResult = await pool.query(relationQuery, relationParams);
@@ -683,8 +710,13 @@ export const getCascadingOptions = async (req: Request, res: Response) => {
const optionsParams: any[] = [parentValue];
if (tableInfoResult.rowCount && tableInfoResult.rowCount > 0 && companyCode !== "*") {
optionsQuery += ` AND (company_code = $2 OR company_code = '*')`;
// company_code = "*"는 최고 관리자 전용이므로 일반 회사는 자기 회사 데이터만
if (
tableInfoResult.rowCount &&
tableInfoResult.rowCount > 0 &&
companyCode !== "*"
) {
optionsQuery += ` AND company_code = $2`;
optionsParams.push(companyCode);
}
@@ -716,4 +748,3 @@ export const getCascadingOptions = async (req: Request, res: Response) => {
});
}
};