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