Skip to content

Commit 85bff70

Browse files
authored
Merge pull request #73 from TAVE-9RP/dev
프로젝트 거절 로직 추가 (Dev -> Main)
2 parents 7935e70 + 495a629 commit 85bff70

File tree

9 files changed

+46
-29
lines changed

9 files changed

+46
-29
lines changed

src/main/java/com/nexerp/domain/admin/controller/AdminController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public BaseResponse<Void> approveInventory(
124124
@PreAuthorize("hasPermission('MANAGEMENT', 'ALL')")
125125
@Operation(summary = "입고 거절 처리(오너)",
126126
description = """
127-
오너가 승인 요청된 입고 업무를 거절(ASSIGNED) 상태로 변경합니다.
127+
오너가 승인 요청된 입고 업무를 거절(REJECT) 상태로 변경합니다.
128128
PENDING 상태에서만 거절 가능하며, 거절 시 수정 후 재승인 요청이 필요합니다.
129129
""")
130130
public BaseResponse<Void> rejectInventory(
@@ -140,7 +140,7 @@ public BaseResponse<Void> rejectInventory(
140140
@PreAuthorize("hasPermission('MANAGEMENT', 'ALL')")
141141
@Operation(summary = "출하 거절 처리(오너)",
142142
description = """
143-
오너가 승인 요청된 출하 업무를 거절(ASSIGNED) 상태로 변경합니다.
143+
오너가 승인 요청된 출하 업무를 거절(REJECT) 상태로 변경합니다.
144144
PENDING 상태에서만 거절 가능하며, 거절 시 수정 후 재승인 요청이 필요합니다.
145145
""")
146146
public BaseResponse<Void> rejectLogistics(

src/main/java/com/nexerp/domain/inventory/controller/InventoryController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public class InventoryController {
4848
description = """
4949
**물품 추가를 제외한 입고 업무의 공통 정보를 저장 또는 수정합니다.**
5050
- 해당 업무 할당된 담당자만 가능
51-
- 상태 검증: ASSIGNED에서만 수정 가능
51+
- 상태 검증: ASSIGNED 또는 REJECT 에서만 수정 가능
5252
- 입고 업무명(title), 업무 설명(description)을 필수
5353
- URL 경로의 {inventoryId} 값을 통해 수정할 입고 업무를 지정
5454
프로젝트 넘버는 오너가 프로젝트 생성 시 할당되었기에 별도로 지정하지 않습니다.
@@ -98,7 +98,7 @@ public BaseResponse<Void> updateInventoryCommon(
9898
기존 재고 검색을 통해서 추가할 때는 여러 개를 추가하겠지만,
9999
새 물품 추가를 통해서 추가 시에는 한 개씩 추가 가능합니다.
100100
- **중복 방지**: 이미 등록된 itemId는 자동으로 제외됩니다.
101-
- **상태 검증**: ASSIGNED에서만 수정 가능
101+
- **상태 검증**: ASSIGNED 또는 REJECT 에서만 수정 가능
102102
103103
**입고 예정 품목(Inventory_Item) 생성 전용 API**
104104
품목의 목표 입고 수량은 이 API에서 입력하지 않으며,
@@ -148,7 +148,7 @@ public BaseResponse<InventoryItemAddResponse> addInventoryItems(
148148
특정 입고 업무(inventoryId)에 등록된 여러 품목들의
149149
**목표 입고 수량(targetQuantity)** 을 한 번에 수정합니다.
150150
151-
승인 요청 전(ASSIGNED 상태)에서만 가능
151+
승인 요청 전(ASSIGNED 상태) 또는 반려 상태(REJECT) 에서만 가능
152152
이미 존재하는 Inventory_Item의 targetQuantity 필드만 변경
153153
processed_quantity(현재 입고 수량)에는 영향을 주지 않음
154154
담당자로 지정된 멤버만 수정 가능
@@ -241,7 +241,7 @@ public BaseResponse<List<InventoryItemResponse>> getInventoryItems(
241241
summary = "입고 승인 요청 API",
242242
description = """
243243
담당자가 입고 업무를 승인 요청(PENDING) 상태로 전환합니다.
244-
ASSIGNED 상태에서만 요청 가능
244+
ASSIGNED 또는 REJECT 상태에서만 요청 가능
245245
입고 예정 품목(InventoryItem)이 1개 이상 존재해야 함
246246
""")
247247
public BaseResponse<Void> requestApproval(

src/main/java/com/nexerp/domain/inventory/model/entity/Inventory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,6 @@ public void approve() {
126126

127127
public void reject() {
128128
this.requestedAt = null;
129-
updateStatus(TaskStatus.ASSIGNED, null);
129+
updateStatus(TaskStatus.REJECT, null);
130130
}
131131
}

src/main/java/com/nexerp/domain/inventory/service/InventoryService.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,16 @@ public void updateInventoryCommonInfo(
5252

5353
validateAssignee(inventoryId, memberId);
5454

55-
Inventory inv = inventoryRepository.findById(inventoryId)
55+
Inventory inventory = inventoryRepository.findById(inventoryId)
5656
.orElseThrow(() -> new BaseException(GlobalErrorCode.NOT_FOUND, "입고 업무를 찾을 수 없습니다."));
5757

5858
// 상태 검증: 승인 요청(PENDING) 이후에는 수정 불가
59-
if (inv.getStatus() != TaskStatus.ASSIGNED) {
60-
throw new BaseException(GlobalErrorCode.BAD_REQUEST, "ASSIGNED 상태에서만 수정할 수 있습니다.");
59+
if (inventory.getStatus() != TaskStatus.ASSIGNED
60+
&& inventory.getStatus() != TaskStatus.REJECT) {
61+
throw new BaseException(GlobalErrorCode.BAD_REQUEST, "ASSIGNED 또는 REJECT 상태에서만 수정할 수 있습니다.");
6162
}
6263

63-
inv.updateCommonInfo(
64+
inventory.updateCommonInfo(
6465
request.getInventoryTitle(),
6566
request.getInventoryDescription()
6667
);
@@ -76,6 +77,11 @@ public InventoryItemAddResponse addInventoryItems(
7677
Inventory inventory = inventoryRepository.findById(inventoryId)
7778
.orElseThrow(() -> new BaseException(GlobalErrorCode.NOT_FOUND, "입고 업무를 찾을 수 없습니다."));
7879

80+
if (inventory.getStatus() != TaskStatus.ASSIGNED
81+
&& inventory.getStatus() != TaskStatus.REJECT) {
82+
throw new BaseException(GlobalErrorCode.BAD_REQUEST, "ASSIGNED 또는 REJECT 상태에서만 추가 할 수 있습니다.");
83+
}
84+
7985
validateAssignee(inventoryId, memberId);
8086

8187
List<Long> createdIds = new ArrayList<>();
@@ -115,8 +121,9 @@ public void updateTargetQuantities(
115121

116122
validateAssignee(inventoryId, memberId);
117123

118-
if (inventory.getStatus() != TaskStatus.ASSIGNED) {
119-
throw new BaseException(GlobalErrorCode.BAD_REQUEST, "승인 요청 전까지만 설정 가능합니다.");
124+
if (inventory.getStatus() != TaskStatus.ASSIGNED
125+
&& inventory.getStatus() != TaskStatus.REJECT) {
126+
throw new BaseException(GlobalErrorCode.BAD_REQUEST, "ASSIGNED 또는 REJECT 상태에서만 수정할 수 있습니다.");
120127
}
121128

122129
for (InventoryTargetQuantityUpdateRequest.QuantityUpdateUnit unit : request.getUpdates()) {
@@ -151,8 +158,9 @@ public void requestApproval(Long memberId, Long inventoryId) {
151158

152159
validateAssignee(inventoryId, memberId);
153160

154-
if (inventory.getStatus() != TaskStatus.ASSIGNED) {
155-
throw new BaseException(GlobalErrorCode.BAD_REQUEST, "ASSIGNED 상태에서만 승인 요청을 할 수 있습니다.");
161+
if (inventory.getStatus() != TaskStatus.ASSIGNED
162+
&& inventory.getStatus() != TaskStatus.REJECT) {
163+
throw new BaseException(GlobalErrorCode.BAD_REQUEST, "ASSIGNED 또는 REJECT 상태에서만 수정할 수 있습니다.");
156164
}
157165

158166
boolean hasItem = inventoryItemRepository.existsByInventoryId(inventoryId);

src/main/java/com/nexerp/domain/item/model/response/ItemSearchResponse.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.nexerp.domain.item.model.response;
22

33
import com.nexerp.domain.item.model.entity.Item;
4+
import java.time.LocalDate;
45
import lombok.Builder;
56
import lombok.Getter;
67

@@ -14,15 +15,19 @@ public class ItemSearchResponse {
1415
private final Long quantity;
1516
private final String location;
1617
private final Long price;
18+
private final LocalDate receivedAt;
19+
private final LocalDate createdAt;
1720

18-
public static ItemSearchResponse from (Item i) {
21+
public static ItemSearchResponse from(Item i) {
1922
return ItemSearchResponse.builder()
2023
.itemId(i.getId())
2124
.code(i.getCode())
2225
.name(i.getName())
2326
.quantity(i.getQuantity())
2427
.location(i.getLocation())
2528
.price(i.getPrice())
29+
.receivedAt(i.getReceivedAt().toLocalDate())
30+
.createdAt(i.getCreatedAt().toLocalDate())
2631
.build();
2732
}
2833
}

src/main/java/com/nexerp/domain/logistics/controller/LogisticsController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public BaseResponse<List<LogisticsSearchResponse>> getCompanyLogisticsSummaries(
100100
description = """
101101
**물품 추가를 제외한 입고 업무의 공통 정보를 저장 또는 수정합니다.**
102102
- 해당 업무 할당된 담당자만 가능
103-
- 상태 검증: ASSIGNED에서만 수정 가능
103+
- 상태 검증: ASSIGNED 또는 REJECT 에서만 수정 가능
104104
- 출하 업무명(title), 업무 설명(description)을 필수
105105
- URL 경로의 {logisticsId} 값을 통해 수정할 입고 업무를 지정
106106
- 프로젝트 넘버는 오너가 프로젝트 생성 시 할당되었기에 별도로 지정하지 않습니다.
@@ -158,7 +158,7 @@ public BaseResponse<Void> updateLogisticsDetails(
158158
description = """
159159
담당자가 작성을 완료한 출하 업무를 승인 대기(PENDING) 상태로 전환합니다.
160160
출하 예정 품목(LogisticsItem)이 1개 이상 존재해야 함
161-
- **상태 검증**: ASSIGNED에서만 수정 가능
161+
- **상태 검증**: ASSIGNED 또는 REJECT 에서만 수정 가능
162162
"""
163163
)
164164
public BaseResponse<Void> requestLogisticsApproval(
@@ -178,7 +178,7 @@ public BaseResponse<Void> requestLogisticsApproval(
178178
description = """
179179
출하 업무에 포함될 물품들을 ID 리스트 형식으로 추가합니다.
180180
- **중복 방지**: 이미 등록된 itemId는 자동으로 제외됩니다.
181-
- **상태 검증**: ASSIGNED에서만 수정 가능
181+
- **상태 검증**: ASSIGNED 또는 REJECT 에서만 수정 가능
182182
183183
**출하 예정 품목(Llogistics_item) 생성 전용 API**
184184
품목의 목표 입고 수량은 이 API에서 입력하지 않으며,
@@ -382,7 +382,7 @@ public BaseResponse<Void> completeLogistics(
382382
processed_quantity(현재 입고 수량)에는 영향을 주지 않음
383383
담당자로 지정된 멤버만 수정 가능
384384
385-
- **상태 검증**: ASSIGNED에서만 수정 가능
385+
- **상태 검증**: ASSIGNED 또는 REJECT 에서만 수정 가능
386386
- 요청 시 누락된 물품은 기존 수량을 유지합니다.
387387
""",
388388
requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(

src/main/java/com/nexerp/domain/logistics/model/entity/Logistics.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ public void changeStatus(TaskStatus status) {
113113

114114
public void requestApproval() {
115115

116-
if (this.status != TaskStatus.ASSIGNED) {
117-
throw new BaseException(GlobalErrorCode.STATE_CONFLICT, "할당 단계에서만 승인 요청이 가능합니다.");
116+
if (this.status != TaskStatus.ASSIGNED && this.status != TaskStatus.REJECT) {
117+
throw new BaseException(GlobalErrorCode.STATE_CONFLICT, "할당 단계 또는 반려에서 승인 요청이 가능합니다.");
118118
}
119119

120120
this.requestedAt = LocalDate.now();
@@ -150,6 +150,6 @@ public void complete() {
150150

151151
public void reject() {
152152
this.requestedAt = null;
153-
changeStatus(TaskStatus.ASSIGNED);
153+
changeStatus(TaskStatus.REJECT);
154154
}
155155
}

src/main/java/com/nexerp/domain/logistics/service/LogisticsService.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,9 @@ public void updateLogisticsDetails(Long memberId, Long logisticsId,
6363

6464
validateAssignee(logistics, memberId);
6565

66-
if (logistics.getStatus() != TaskStatus.ASSIGNED) {
67-
throw new BaseException(GlobalErrorCode.BAD_REQUEST, "ASSIGNED 상태에서만 수정할 수 있습니다.");
66+
if (logistics.getStatus() != TaskStatus.ASSIGNED
67+
&& logistics.getStatus() != TaskStatus.REJECT) {
68+
throw new BaseException(GlobalErrorCode.BAD_REQUEST, "ASSIGNED 또는 REJECT 상태에서만 수정할 수 있습니다.");
6869
}
6970

7071
logistics.update(
@@ -109,8 +110,9 @@ public void addLogisticsItems(Long memberId, Long logisticsId,
109110

110111
validateAssignee(logistics, memberId);
111112

112-
if (logistics.getStatus() != TaskStatus.ASSIGNED) {
113-
throw new BaseException(GlobalErrorCode.BAD_REQUEST, "ASSIGNED 상태에서만 수정할 수 있습니다.");
113+
if (logistics.getStatus() != TaskStatus.ASSIGNED
114+
&& logistics.getStatus() != TaskStatus.REJECT) {
115+
throw new BaseException(GlobalErrorCode.BAD_REQUEST, "ASSIGNED 또는 REJECT 상태에서만 수정할 수 있습니다.");
114116
}
115117

116118
Set<Long> requestedIds = validateDuplicate(itemRequests);
@@ -222,8 +224,9 @@ public void updateTargetQuantities(Long memberId, Long logisticsId,
222224

223225
validateAssignee(logistics, memberId);
224226

225-
if (logistics.getStatus() != TaskStatus.ASSIGNED) {
226-
throw new BaseException(GlobalErrorCode.BAD_REQUEST, "ASSIGNED 상태에서만 수정할 수 있습니다.");
227+
if (logistics.getStatus() != TaskStatus.ASSIGNED
228+
&& logistics.getStatus() != TaskStatus.REJECT) {
229+
throw new BaseException(GlobalErrorCode.BAD_REQUEST, "ASSIGNED 또는 REJECT 상태에서만 수정할 수 있습니다.");
227230
}
228231

229232
List<Long> requestedIds = request.stream()

src/main/java/com/nexerp/global/common/model/TaskStatus.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
public enum TaskStatus {
44
ASSIGNED,
55
PENDING,
6+
REJECT,
67
IN_PROGRESS,
78
COMPLETED
89
}

0 commit comments

Comments
 (0)