From a2b33394560d84f742bc019a396e76649330b7c3 Mon Sep 17 00:00:00 2001 From: "B.E.N.S.O.N" Date: Mon, 12 Jan 2026 18:15:14 +0800 Subject: [PATCH] Supporting Function: Warehouse Handle --- .../master/service/WarehouseService.kt | 52 +++++++++++++++++-- .../modules/master/web/WarehouseController.kt | 15 ++++++ .../master/web/models/SaveWarehouseRequest.kt | 14 +++-- 3 files changed, 73 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/WarehouseService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/WarehouseService.kt index 241e630..ba2bb1b 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/service/WarehouseService.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/service/WarehouseService.kt @@ -46,14 +46,58 @@ open class WarehouseService( return warehouseRepository.findByCodeAndDeletedIsFalse(code); } + open fun markDeleted(id: Long): List { + val warehouse = warehouseRepository.findById(id).orElseThrow().apply { + deleted = true + } + + warehouseRepository.save(warehouse) + + return getWarehouses() + } + open fun saveWarehouse(request: SaveWarehouseRequest): Warehouse { val warehouse = request.id?.let { warehouseRepository.findById(it).getOrNull() } ?: Warehouse(); warehouse.apply { - code = request.code - name = request.name - description = request.description - capacity = request.capacity + // Generate code, name, description if not provided but store_id, warehouse, area, slot are provided + if (request.code == null && request.store_id != null && request.warehouse != null && request.area != null && request.slot != null) { + code = "${request.store_id}-${request.warehouse}-${request.area}-${request.slot}" + } else if (request.code != null) { + code = request.code + } + + if (request.name == null && request.store_id != null && request.warehouse != null) { + name = "${request.store_id}-${request.warehouse}" + } else if (request.name != null) { + name = request.name + } + + if (request.description == null && request.store_id != null && request.warehouse != null) { + description = "${request.store_id}-${request.warehouse}" + } else if (request.description != null) { + description = request.description + } + + if (request.capacity == null) { + capacity = BigDecimal(10000) + } else { + capacity = request.capacity + } + + if (request.order == null && request.id == null) { + // Set a default order for new warehouses + val maxOrder = warehouseRepository.findAll().mapNotNull { it.order }.maxOrNull() ?: 0 + order = maxOrder + 1 + } else if (request.order != null) { + order = request.order + } + + if (request.store_id != null) store_id = request.store_id + if (request.warehouse != null) this.warehouse = request.warehouse + if (request.area != null) area = request.area + if (request.slot != null) slot = request.slot + if (request.stockTakeSection != null) stockTakeSection = request.stockTakeSection }; return warehouseRepository.save(warehouse); diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/WarehouseController.kt b/src/main/java/com/ffii/fpsms/modules/master/web/WarehouseController.kt index a04e304..e01edad 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/web/WarehouseController.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/web/WarehouseController.kt @@ -8,8 +8,13 @@ import org.apache.poi.ss.usermodel.Workbook import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.springframework.http.ResponseEntity import org.springframework.web.bind.ServletRequestBindingException +import com.ffii.fpsms.modules.master.web.models.SaveWarehouseRequest +import jakarta.validation.Valid +import org.springframework.web.bind.annotation.DeleteMapping import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController import org.springframework.web.multipart.MultipartHttpServletRequest @@ -29,6 +34,16 @@ class WarehouseController( return warehouseService.findCombo() } + @DeleteMapping("/{id}") + fun deleteWarehouse(@PathVariable id: Long): List { + return warehouseService.markDeleted(id) + } + + @PostMapping("/save") + fun saveWarehouse(@Valid @RequestBody request: SaveWarehouseRequest): Warehouse { + return warehouseService.saveWarehouse(request) + } + @PostMapping("/import") @Throws(ServletRequestBindingException::class) fun importExcel(request: HttpServletRequest): ResponseEntity<*> { diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/models/SaveWarehouseRequest.kt b/src/main/java/com/ffii/fpsms/modules/master/web/models/SaveWarehouseRequest.kt index 6db8353..5c57fcc 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/web/models/SaveWarehouseRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/web/models/SaveWarehouseRequest.kt @@ -4,10 +4,16 @@ import java.math.BigDecimal data class SaveWarehouseRequest( val id: Long? = null, - val code: String, - val name: String, - val description: String, - val capacity: BigDecimal, + val code: String? = null, + val name: String? = null, + val description: String? = null, + val capacity: BigDecimal? = null, + val store_id: String? = null, + val warehouse: String? = null, + val area: String? = null, + val slot: String? = null, + val order: Int? = null, + val stockTakeSection: String? = null, ) data class NewWarehouseRequest(