|
|
@@ -2,19 +2,75 @@ package com.ffii.fpsms.modules.master.service |
|
|
|
|
|
|
|
import com.ffii.core.support.AbstractBaseEntityService |
|
|
|
import com.ffii.core.support.JdbcDao |
|
|
|
import com.ffii.fpsms.enums.RelationColumnType |
|
|
|
import com.ffii.fpsms.modules.master.entity.Material |
|
|
|
import com.ffii.fpsms.modules.master.entity.MaterialRepository |
|
|
|
import com.ffii.fpsms.modules.master.web.models.NewMaterialRequest |
|
|
|
import com.ffii.fpsms.modules.master.web.models.NewMaterialResponse |
|
|
|
import org.springframework.stereotype.Service |
|
|
|
import org.springframework.transaction.annotation.Transactional |
|
|
|
import kotlin.jvm.optionals.getOrNull |
|
|
|
|
|
|
|
@Service |
|
|
|
open class MaterialService( |
|
|
|
private val jdbcDao: JdbcDao, |
|
|
|
private val materialRepository: MaterialRepository, |
|
|
|
private val uomService: ProductMaterialUomService, |
|
|
|
private val typeService: ProductMaterialTypeService, |
|
|
|
private val weightUnitService: ProductMaterialWeightUnitService, |
|
|
|
): AbstractBaseEntityService<Material, Long, MaterialRepository>(jdbcDao, materialRepository) { |
|
|
|
// do mapping with projection |
|
|
|
open fun getMaterials(): List<Material> { |
|
|
|
open fun allMaterials(): List<Material> { |
|
|
|
// TODO: Replace by actual logic |
|
|
|
val materials = materialRepository.findAll() |
|
|
|
return materials |
|
|
|
} |
|
|
|
open fun getMaterial(id: Long): Material? { |
|
|
|
return materialRepository.findById(id).getOrNull() |
|
|
|
} |
|
|
|
@Transactional |
|
|
|
open fun saveMaterial(request: NewMaterialRequest): NewMaterialResponse { |
|
|
|
val duplicateMaterial = materialRepository.findByCodeAndDeletedIsFalse(request.code) |
|
|
|
val material = |
|
|
|
if (request.id != null && request.id > 0) materialRepository.findByIdAndDeletedFalse(request.id) |
|
|
|
else Material() |
|
|
|
if (duplicateMaterial != null && duplicateMaterial.id != request.id) { |
|
|
|
return NewMaterialResponse( |
|
|
|
id = request.id, |
|
|
|
code = request.code, |
|
|
|
name = request.name, |
|
|
|
message = "The material code has already existed", |
|
|
|
errorPosition = "code" |
|
|
|
) |
|
|
|
} |
|
|
|
material.apply { |
|
|
|
code = request.code |
|
|
|
name = request.name |
|
|
|
isConsumables = request.isConsumables |
|
|
|
description = request.description |
|
|
|
remarks = request.remarks |
|
|
|
shelfLife = request.shelfLife |
|
|
|
countryOfOrigin = request.countryOfOrigin |
|
|
|
minHumid = request.minHumid |
|
|
|
maxHumid = request.maxHumid |
|
|
|
minTemp = request.minTemp |
|
|
|
maxTemp = request.maxTemp |
|
|
|
sampleRate = request.sampleRate |
|
|
|
passingRate = request.passingRate |
|
|
|
netWeight = request.netWeight |
|
|
|
} |
|
|
|
val savedMaterial = materialRepository.saveAndFlush(material) |
|
|
|
|
|
|
|
val columnName = RelationColumnType.MATERIAL |
|
|
|
if (!request.uom.isNullOrEmpty()) uomService.saveUom(savedMaterial.id!!, columnName, request.uom) |
|
|
|
if (!request.weightUnit.isNullOrEmpty()) weightUnitService.saveWeightUnit(savedMaterial.id!!, columnName, request.weightUnit) |
|
|
|
if (!request.type.isNullOrEmpty()) typeService.saveType(savedMaterial.id!!, columnName, request.type) |
|
|
|
return NewMaterialResponse( |
|
|
|
id = savedMaterial.id, |
|
|
|
name = savedMaterial.name, |
|
|
|
code = savedMaterial.code, |
|
|
|
message = "Material Save Success", |
|
|
|
errorPosition = null, |
|
|
|
) |
|
|
|
} |
|
|
|
} |