| @@ -46,14 +46,58 @@ open class WarehouseService( | |||||
| return warehouseRepository.findByCodeAndDeletedIsFalse(code); | return warehouseRepository.findByCodeAndDeletedIsFalse(code); | ||||
| } | } | ||||
| open fun markDeleted(id: Long): List<Warehouse> { | |||||
| val warehouse = warehouseRepository.findById(id).orElseThrow().apply { | |||||
| deleted = true | |||||
| } | |||||
| warehouseRepository.save(warehouse) | |||||
| return getWarehouses() | |||||
| } | |||||
| open fun saveWarehouse(request: SaveWarehouseRequest): Warehouse { | open fun saveWarehouse(request: SaveWarehouseRequest): Warehouse { | ||||
| val warehouse = request.id?.let { warehouseRepository.findById(it).getOrNull() } ?: Warehouse(); | val warehouse = request.id?.let { warehouseRepository.findById(it).getOrNull() } ?: Warehouse(); | ||||
| warehouse.apply { | 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); | return warehouseRepository.save(warehouse); | ||||
| @@ -8,8 +8,13 @@ import org.apache.poi.ss.usermodel.Workbook | |||||
| import org.apache.poi.xssf.usermodel.XSSFWorkbook | import org.apache.poi.xssf.usermodel.XSSFWorkbook | ||||
| import org.springframework.http.ResponseEntity | import org.springframework.http.ResponseEntity | ||||
| import org.springframework.web.bind.ServletRequestBindingException | 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.GetMapping | ||||
| import org.springframework.web.bind.annotation.PathVariable | |||||
| import org.springframework.web.bind.annotation.PostMapping | 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.RequestMapping | ||||
| import org.springframework.web.bind.annotation.RestController | import org.springframework.web.bind.annotation.RestController | ||||
| import org.springframework.web.multipart.MultipartHttpServletRequest | import org.springframework.web.multipart.MultipartHttpServletRequest | ||||
| @@ -29,6 +34,16 @@ class WarehouseController( | |||||
| return warehouseService.findCombo() | return warehouseService.findCombo() | ||||
| } | } | ||||
| @DeleteMapping("/{id}") | |||||
| fun deleteWarehouse(@PathVariable id: Long): List<Warehouse> { | |||||
| return warehouseService.markDeleted(id) | |||||
| } | |||||
| @PostMapping("/save") | |||||
| fun saveWarehouse(@Valid @RequestBody request: SaveWarehouseRequest): Warehouse { | |||||
| return warehouseService.saveWarehouse(request) | |||||
| } | |||||
| @PostMapping("/import") | @PostMapping("/import") | ||||
| @Throws(ServletRequestBindingException::class) | @Throws(ServletRequestBindingException::class) | ||||
| fun importExcel(request: HttpServletRequest): ResponseEntity<*> { | fun importExcel(request: HttpServletRequest): ResponseEntity<*> { | ||||
| @@ -4,10 +4,16 @@ import java.math.BigDecimal | |||||
| data class SaveWarehouseRequest( | data class SaveWarehouseRequest( | ||||
| val id: Long? = null, | 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( | data class NewWarehouseRequest( | ||||