@@ -150,12 +150,12 @@ open class M18MasterDataService( | |||
// type = if (pro.seriesId == m18Config.SERIESID_PF) ProductType.MATERIAL | |||
// else ItemType.PRODUCT, | |||
type = when (pro.udfProducttype) { | |||
M18ItemType.CONSUMABLES.type -> ItemType.CONSUMABLES | |||
M18ItemType.NONCONSUMABLES.type -> ItemType.NONCONSUMABLES | |||
M18ItemType.FG.type -> ItemType.FG | |||
M18ItemType.SFG.type -> ItemType.SFG | |||
M18ItemType.ITEM.type -> ItemType.ITEM | |||
else -> ItemType.MATERIAL | |||
M18ItemType.CONSUMABLES.type -> ItemType.CONSUMABLES.type | |||
M18ItemType.NONCONSUMABLES.type -> ItemType.NONCONSUMABLES.type | |||
M18ItemType.FG.type -> ItemType.FG.type | |||
M18ItemType.SFG.type -> ItemType.SFG.type | |||
M18ItemType.ITEM.type -> ItemType.ITEM.type | |||
else -> ItemType.MATERIAL.type | |||
}, | |||
id = existingItem?.id, | |||
description = pro.desc, | |||
@@ -164,7 +164,8 @@ open class M18MasterDataService( | |||
countryOfOrigin = null, | |||
maxQty = null, | |||
m18Id = id, | |||
m18LastModifyDate = commonUtils.timestampToLocalDateTime(pro.lastModifyDate) | |||
m18LastModifyDate = commonUtils.timestampToLocalDateTime(pro.lastModifyDate), | |||
qcCategoryId = null | |||
) | |||
val savedItem = itemsService.saveItem(saveItemRequest) | |||
@@ -244,12 +245,12 @@ open class M18MasterDataService( | |||
// type = if (pro.seriesId == m18Config.SERIESID_PF) ProductType.MATERIAL | |||
// else ItemType.PRODUCT, | |||
type = when (pro.udfProducttype) { | |||
M18ItemType.CONSUMABLES.type -> ItemType.CONSUMABLES | |||
M18ItemType.NONCONSUMABLES.type -> ItemType.NONCONSUMABLES | |||
M18ItemType.FG.type -> ItemType.FG | |||
M18ItemType.SFG.type -> ItemType.SFG | |||
M18ItemType.ITEM.type -> ItemType.ITEM | |||
else -> ItemType.MATERIAL | |||
M18ItemType.CONSUMABLES.type -> ItemType.CONSUMABLES.type | |||
M18ItemType.NONCONSUMABLES.type -> ItemType.NONCONSUMABLES.type | |||
M18ItemType.FG.type -> ItemType.FG.type | |||
M18ItemType.SFG.type -> ItemType.SFG.type | |||
M18ItemType.ITEM.type -> ItemType.ITEM.type | |||
else -> ItemType.MATERIAL.type | |||
}, | |||
id = existingItem?.id, | |||
description = pro.desc, | |||
@@ -258,7 +259,8 @@ open class M18MasterDataService( | |||
countryOfOrigin = null, | |||
maxQty = null, | |||
m18Id = item.id, | |||
m18LastModifyDate = commonUtils.timestampToLocalDateTime(pro.lastModifyDate) | |||
m18LastModifyDate = commonUtils.timestampToLocalDateTime(pro.lastModifyDate), | |||
qcCategoryId = null | |||
) | |||
val savedItem = itemsService.saveItem(saveItemRequest) | |||
@@ -1,9 +1,12 @@ | |||
package com.ffii.fpsms.modules.master.entity | |||
import com.ffii.core.support.AbstractRepository | |||
import com.ffii.fpsms.modules.master.entity.projections.QcCategoryCombo | |||
import org.springframework.stereotype.Repository | |||
@Repository | |||
interface QcCategoryRepository : AbstractRepository<QcCategory, Long> { | |||
fun findAllByDeletedIsFalse(): List<QcCategory> | |||
fun findAllByDeletedIsFalse(): List<QcCategory>; | |||
fun findQcCategoryComboByDeletedIsFalse(): List<QcCategoryCombo>; | |||
} |
@@ -0,0 +1,11 @@ | |||
package com.ffii.fpsms.modules.master.entity.projections | |||
import org.springframework.beans.factory.annotation.Value | |||
interface QcCategoryCombo { | |||
val id: Long; | |||
@get:Value("#{target.id}") | |||
val value: Long; | |||
@get:Value("#{target.code}") | |||
val label: String; | |||
} |
@@ -13,13 +13,14 @@ import java.io.IOException | |||
import java.time.LocalDateTime | |||
import java.time.format.DateTimeFormatter | |||
import java.time.temporal.TemporalAdjusters | |||
import kotlin.jvm.optionals.getOrNull | |||
@Service | |||
open class ItemsService( | |||
private val jdbcDao: JdbcDao, | |||
private val itemsRepository: ItemsRepository, | |||
private val qcCheckRepository: QcCheckRepository, | |||
private val qcItemsRepository: QcItemRepository, | |||
private val qcItemsRepository: QcItemRepository, private val qcCategoryRepository: QcCategoryRepository, | |||
): AbstractBaseEntityService<Items, Long, ItemsRepository>(jdbcDao, itemsRepository) { | |||
// do mapping with projection | |||
open fun allItems(): List<Items> { | |||
@@ -170,7 +171,7 @@ open class ItemsService( | |||
@Throws(IOException::class) | |||
@Transactional | |||
open fun saveItem(request: NewItemRequest): MessageResponse { | |||
val duplicatedItem = itemsRepository.findByCodeAndTypeAndDeletedFalse(request.code, request.type.type) | |||
val duplicatedItem = itemsRepository.findByCodeAndTypeAndDeletedFalse(request.code, request.type) | |||
if (duplicatedItem != null && duplicatedItem.id != request.id) { | |||
return MessageResponse( | |||
id = request.id, | |||
@@ -196,6 +197,8 @@ open class ItemsService( | |||
) | |||
} | |||
val qcCategory = request.qcCategoryId?.let { qcCategoryRepository.findById(it).getOrNull() } | |||
item.apply { | |||
code = request.code | |||
name = request.name | |||
@@ -204,7 +207,8 @@ open class ItemsService( | |||
shelfLife = request.shelfLife | |||
countryOfOrigin = request.countryOfOrigin | |||
maxQty = request.maxQty | |||
this.type = request.type.type | |||
this.type = request.type | |||
this.qcCategory = qcCategory | |||
m18Id = request.m18Id ?: this.m18Id | |||
m18LastModifyDate = request.m18LastModifyDate ?: this.m18LastModifyDate | |||
} | |||
@@ -3,6 +3,7 @@ package com.ffii.fpsms.modules.master.service | |||
import com.ffii.core.support.AbstractBaseEntityService | |||
import com.ffii.fpsms.modules.master.entity.QcCategory | |||
import com.ffii.fpsms.modules.master.entity.QcCategoryRepository | |||
import com.ffii.fpsms.modules.master.entity.projections.QcCategoryCombo | |||
import org.springframework.stereotype.Service | |||
@Service | |||
@@ -12,4 +13,8 @@ open class QcCategoryService( | |||
open fun allQcCategories(): List<QcCategory> { | |||
return qcCategoryRepository.findAllByDeletedIsFalse() | |||
} | |||
open fun getQcCategoryCombo(): List<QcCategoryCombo> { | |||
return qcCategoryRepository.findQcCategoryComboByDeletedIsFalse(); | |||
} | |||
} |
@@ -1,6 +1,7 @@ | |||
package com.ffii.fpsms.modules.master.web | |||
import com.ffii.fpsms.modules.master.entity.QcCategory | |||
import com.ffii.fpsms.modules.master.entity.projections.QcCategoryCombo | |||
import com.ffii.fpsms.modules.master.service.QcCategoryService | |||
import org.springframework.web.bind.annotation.GetMapping | |||
import org.springframework.web.bind.annotation.RequestMapping | |||
@@ -15,4 +16,9 @@ class QcCategoryController( | |||
fun allQcCategories(): List<QcCategory> { | |||
return qcCategoryService.allQcCategories() | |||
} | |||
@GetMapping("/combo") | |||
fun getQcCategoryCombo(): List<QcCategoryCombo> { | |||
return qcCategoryService.getQcCategoryCombo(); | |||
} | |||
} |
@@ -34,7 +34,7 @@ data class NewItemRequest( | |||
@field:NotBlank(message = "material name cannot be empty") | |||
val name: String, | |||
@field:NotNull(message = "typeId cannot be null") | |||
val type: ItemType, | |||
val type: String, | |||
val id: Long?, | |||
val description: String?, | |||
@@ -44,6 +44,7 @@ data class NewItemRequest( | |||
val maxQty: Double?, | |||
val m18Id: Long?, | |||
val m18LastModifyDate: LocalDateTime?, | |||
val qcCategoryId: Long?, | |||
// val type: List<NewTypeRequest>?, | |||
// val uom: List<NewUomRequest>?, | |||
// val weightUnit: List<NewWeightUnitRequest>?, | |||
@@ -14,13 +14,13 @@ interface InventoryInfo{ | |||
@get:Value("#{target.item.type}") | |||
val itemType: String? | |||
// @get:Value("#{target.qty / (target.item.itemUoms.^[stockUnit == true && deleted == false]?.ratioN / target.item.itemUoms.^[stockUnit == true && deleted == false]?.ratioD)}") | |||
@get:Value("#{target.onHandQty / (target.item.itemUoms.^[salesUnit == true && deleted == false]?.ratioN / target.item.itemUoms.^[salesUnit == true && deleted == false]?.ratioD)}") | |||
@get:Value("#{target.onHandQty / (target.item.itemUoms.^[stockUnit == true && deleted == false]?.ratioN / target.item.itemUoms.^[stockUnit == true && deleted == false]?.ratioD)}") | |||
val onHandQty: BigDecimal? | |||
@get:Value("#{target.onHoldQty / (target.item.itemUoms.^[salesUnit == true && deleted == false]?.ratioN / target.item.itemUoms.^[salesUnit == true && deleted == false]?.ratioD)}") | |||
@get:Value("#{target.onHoldQty / (target.item.itemUoms.^[stockUnit == true && deleted == false]?.ratioN / target.item.itemUoms.^[stockUnit == true && deleted == false]?.ratioD)}") | |||
val onHoldQty: BigDecimal? | |||
@get:Value("#{target.unavailableQty / (target.item.itemUoms.^[salesUnit == true && deleted == false]?.ratioN / target.item.itemUoms.^[salesUnit == true && deleted == false]?.ratioD)}") | |||
@get:Value("#{target.unavailableQty / (target.item.itemUoms.^[stockUnit == true && deleted == false]?.ratioN / target.item.itemUoms.^[stockUnit == true && deleted == false]?.ratioD)}") | |||
val unavailableQty: BigDecimal? | |||
@get:Value("#{(target.onHandQty - target.onHoldQty - target.unavailableQty) / (target.item.itemUoms.^[salesUnit == true && deleted == false]?.ratioN / target.item.itemUoms.^[salesUnit == true && deleted == false]?.ratioD)}") | |||
@get:Value("#{(target.onHandQty - target.onHoldQty - target.unavailableQty) / (target.item.itemUoms.^[stockUnit == true && deleted == false]?.ratioN / target.item.itemUoms.^[stockUnit == true && deleted == false]?.ratioD)}") | |||
val availableQty: BigDecimal? | |||
@get:Value("#{target.item.itemUoms.^[purchaseUnit == true && deleted == false]?.uom.code}") | |||
val uomCode: String? | |||