diff --git a/src/main/java/com/ffii/fpsms/m18/entity/M18DataLog.kt b/src/main/java/com/ffii/fpsms/m18/entity/M18DataLog.kt index 1525736..4c05bc4 100644 --- a/src/main/java/com/ffii/fpsms/m18/entity/M18DataLog.kt +++ b/src/main/java/com/ffii/fpsms/m18/entity/M18DataLog.kt @@ -25,9 +25,8 @@ open class M18DataLog : BaseEntity() { @Column(name = "m18Id", nullable = false) open var m18Id: Long? = null - @NotNull @JdbcTypeCode(SqlTypes.JSON) - @Column(name = "dataLog", nullable = false) + @Column(name = "dataLog") open var dataLog: MutableMap? = null @NotNull diff --git a/src/main/java/com/ffii/fpsms/m18/entity/M18DataLogRepository.kt b/src/main/java/com/ffii/fpsms/m18/entity/M18DataLogRepository.kt index 12d3016..a8cab66 100644 --- a/src/main/java/com/ffii/fpsms/m18/entity/M18DataLogRepository.kt +++ b/src/main/java/com/ffii/fpsms/m18/entity/M18DataLogRepository.kt @@ -1,10 +1,11 @@ package com.ffii.fpsms.m18.entity import com.ffii.core.support.AbstractRepository +import com.ffii.fpsms.m18.enums.M18DataLogStatus import org.springframework.stereotype.Repository @Repository interface M18DataLogRepository : AbstractRepository { // find latest m18 data log by m18 id & ref type & status is true & deleted is false (order by id asc limit 1) - fun findTopByM18IdAndRefTypeAndDeletedIsFalseAndStatusIsTrueOrderByIdDesc(m18Id: Long, refType: String): M18DataLog? + fun findTopByM18IdAndRefTypeAndDeletedIsFalseAndStatusOrderByIdDesc(m18Id: Long, refType: String, status: M18DataLogStatus): M18DataLog? } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/m18/model/M18MasterDataRequest.kt b/src/main/java/com/ffii/fpsms/m18/model/M18MasterDataRequest.kt index 41ad625..f6c2461 100644 --- a/src/main/java/com/ffii/fpsms/m18/model/M18MasterDataRequest.kt +++ b/src/main/java/com/ffii/fpsms/m18/model/M18MasterDataRequest.kt @@ -8,6 +8,7 @@ enum class StSearchType(val value: String) { UNIT("unit"), CURRENCY("cur"), BOM("udfbomforshop"), + BUSINESS_UNIT("virDept"), } /** M18 Common Master Data Request */ diff --git a/src/main/java/com/ffii/fpsms/m18/model/M18MasterDataResponse.kt b/src/main/java/com/ffii/fpsms/m18/model/M18MasterDataResponse.kt index 0ee93da..ed351e5 100644 --- a/src/main/java/com/ffii/fpsms/m18/model/M18MasterDataResponse.kt +++ b/src/main/java/com/ffii/fpsms/m18/model/M18MasterDataResponse.kt @@ -191,4 +191,44 @@ data class M18BomUdfProduct ( val udfProduct: Long, val udfIngredients: String, val udfBaseUnit: String, +) + +/** Shop Response */ +data class M18BusinessUnitResponse ( + val data: M18BusinessUnitData?, + val messages: List? +) + +data class M18BusinessUnitData ( + val virdept: List? +) + +data class M18BusinessUnitVirdept ( + val id: Long, + val code: String, + /** name */ + val desc: String, + val `desc_zh-TW`: String, + /** contactNo */ + val tel: String, + val email: String, + val addr: String, + val addr_en: String, + val addr2: String, + val addr2_en: String, + val addr3: String, + val addr3_en: String, + val udfdistrict: Long, + val lastModifyDate: Long, +) + +/** BusinessUnit List Response */ +data class M18BusinessUnitListResponse ( + val values: List?, + val messages: List? +) + +data class M18BusinessUnitListValue ( + val id: Long, + val lastModifyDate: String?, ) \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/m18/model/M18PurchaseOrderResponse.kt b/src/main/java/com/ffii/fpsms/m18/model/M18PurchaseOrderResponse.kt index 972395d..f3e8ba0 100644 --- a/src/main/java/com/ffii/fpsms/m18/model/M18PurchaseOrderResponse.kt +++ b/src/main/java/com/ffii/fpsms/m18/model/M18PurchaseOrderResponse.kt @@ -27,6 +27,8 @@ data class M18PurchaseOrderMainPo ( val tDate: Long, val lastModifyDate: Long, val curId: Long, + /** Business Unit (Shop) */ + val virDeptId: Long?, ) data class M18PurchaseOrderPot ( diff --git a/src/main/java/com/ffii/fpsms/m18/model/M18PurchaseQuotationResponse.kt b/src/main/java/com/ffii/fpsms/m18/model/M18PurchaseQuotationResponse.kt index de48683..21f32e6 100644 --- a/src/main/java/com/ffii/fpsms/m18/model/M18PurchaseQuotationResponse.kt +++ b/src/main/java/com/ffii/fpsms/m18/model/M18PurchaseQuotationResponse.kt @@ -19,6 +19,7 @@ data class M18PurchaseQuotationMainvqu( val tDate: Long, val venId: Long, val manId: Long, + val curId: Long, val code: String, ) diff --git a/src/main/java/com/ffii/fpsms/m18/service/M18DataLogService.kt b/src/main/java/com/ffii/fpsms/m18/service/M18DataLogService.kt index f0e27ab..958753b 100644 --- a/src/main/java/com/ffii/fpsms/m18/service/M18DataLogService.kt +++ b/src/main/java/com/ffii/fpsms/m18/service/M18DataLogService.kt @@ -5,7 +5,6 @@ import com.ffii.fpsms.m18.entity.M18DataLogRepository import com.ffii.fpsms.m18.enums.M18DataLogStatus import com.ffii.fpsms.m18.model.M18DataLogResponse import com.ffii.fpsms.m18.model.SaveM18DataLogRequest -import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderStatus import org.springframework.stereotype.Service import kotlin.jvm.optionals.getOrDefault @@ -13,8 +12,8 @@ import kotlin.jvm.optionals.getOrDefault class M18DataLogService( val m18DataLogRepository: M18DataLogRepository ) { - fun findLatestM18DataLog(m18Id: Long, refType: String): M18DataLog? { - return m18DataLogRepository.findTopByM18IdAndRefTypeAndDeletedIsFalseAndStatusIsTrueOrderByIdDesc(m18Id, refType) + fun findLatestM18DataLogWithSuccess(m18Id: Long, refType: String): M18DataLog? { + return m18DataLogRepository.findTopByM18IdAndRefTypeAndDeletedIsFalseAndStatusOrderByIdDesc(m18Id, refType, M18DataLogStatus.SUCCESS) } fun saveM18DataLog(request: SaveM18DataLogRequest): M18DataLogResponse { @@ -27,7 +26,7 @@ class M18DataLogService( refType = request.refType ?: this.refType m18Id = request.m18Id ?: this.m18Id m18LastModifyDate = request.m18LastModifyDate ?: this.m18LastModifyDate - dataLog = request.dataLog ?: request.dataLog + dataLog = request.dataLog ?: this.dataLog this.status = status } diff --git a/src/main/java/com/ffii/fpsms/m18/service/M18MasterDataService.kt b/src/main/java/com/ffii/fpsms/m18/service/M18MasterDataService.kt index c7bd024..d9ced09 100644 --- a/src/main/java/com/ffii/fpsms/m18/service/M18MasterDataService.kt +++ b/src/main/java/com/ffii/fpsms/m18/service/M18MasterDataService.kt @@ -54,6 +54,7 @@ open class M18MasterDataService( val M18_LOAD_UNIT_API = "${M18_COMMON_LOAD_LINE_API}/${StSearchType.UNIT.value}" val M18_LOAD_CURRENCY_API = "${M18_COMMON_LOAD_LINE_API}/${StSearchType.CURRENCY.value}" val M18_LOAD_BOM_API = "${M18_COMMON_LOAD_LINE_API}/${StSearchType.BOM.value}" + val M18_LOAD_BUSINESS_UNIT_API = "${M18_COMMON_LOAD_LINE_API}/${StSearchType.BUSINESS_UNIT.value}" // for shop po? // --------------------------------------------- Common Function --------------------------------------------- /// private inline fun getList( @@ -302,7 +303,7 @@ open class M18MasterDataService( logger.info("--------------------------------------------End - Saving M18 Vendors--------------------------------------------") } - // --------------------------------------------- Unit --------------------------------------------- /// + // --------------------------------------------- Unit (UoM) --------------------------------------------- /// open fun getUnits(): M18UnitListResponse? { // seems no beId return getList( @@ -487,7 +488,6 @@ open class M18MasterDataService( logger.info(bomUdfProduct.toString()) if (bomUdfBomForShop != null && bomUdfProduct != null) { // Save Bom - logger.info("AAAAA") val saveBomRequest = SaveBomRequest( // itemId = itemsService.findByNameAndM18UomId(bomUdfBomForShop.desc, bomUdfBomForShop.udfUnit)?.id, code = bomUdfBomForShop.code, @@ -500,7 +500,6 @@ open class M18MasterDataService( m18Id = bomUdfBomForShop.id, m18LastModifyDate = commonUtils.timestampToLocalDateTime(bomUdfBomForShop.lastModifyDate) ) - logger.info("BBBBB") val bomId = bomService.saveBom(saveBomRequest).id successList += bom.id @@ -560,4 +559,90 @@ open class M18MasterDataService( logger.info("--------------------------------------------End - Saving Boms--------------------------------------------") } + + // --------------------------------------------- Business Unit (Shop) --------------------------------------------- /// + open fun getBusinessUnits(): M18BusinessUnitListResponse? { + // seems no beId + return getList( + stSearch = StSearchType.BUSINESS_UNIT.value, + params = null, +// conds = beIdConds + ) + } + + open fun getBusinessUnit(id: Long): M18BusinessUnitResponse? { + logger.info("M18 Business Unit ID: $id") + return getLine( + id = id, + params = null, + api = M18_LOAD_BUSINESS_UNIT_API + ) + } + + open fun saveBusinessUnits() { + logger.info("--------------------------------------------Start - Saving M18 Business Units (Shops)--------------------------------------------") + val businessUnits = getBusinessUnits() + + val successList = mutableListOf() + val failList = mutableListOf() + val values = businessUnits?.values?.sortedBy { it.id } + val busMessages = if(businessUnits?.messages?.isNotEmpty() == true) businessUnits.messages[0] else null + + if (values != null) { + values.forEach { businessUnit -> +// if (vendor.id in exampleVendors) { + try { + val businessUnitDetail = getBusinessUnit(businessUnit.id) + val virdept = businessUnitDetail?.data?.virdept?.get(0) + val buMessages = if(businessUnitDetail?.messages?.isNotEmpty() == true) businessUnitDetail?.messages[0] else null + + if (virdept != null) { + + val saveShopRequest = SaveShopRequest( + id = null, + code = virdept.code, + name = virdept.desc.ifEmpty { virdept.`desc_zh-TW` }, + brNo = null, + contactNo = virdept.tel, + contactEmail = virdept.email, + contactName = null, + addr1 = virdept.addr.ifEmpty { virdept.addr_en }, + addr2 = virdept.addr2.ifEmpty { virdept.addr2_en }, + addr3 = virdept.addr3.ifEmpty { virdept.addr3_en }, + addr4 = null, + district = null, + type = ShopType.SHOP.value, + m18Id = businessUnit.id, + m18LastModifyDate = commonUtils.timestampToLocalDateTime(virdept.lastModifyDate) + ) + + shopService.saveShop(saveShopRequest) + successList.add(businessUnit.id) + logger.info("Success Count ${successList.size}: ${businessUnit.id} | ${virdept.code} | ${virdept.desc}") + } else { + failList.add(businessUnit.id) + logger.error("(Business Unit) Fail Message: ${buMessages?.msgDetail}") + logger.error("(Business Unit) Fail Count ${failList.size}: Business Unit ID - ${businessUnit.id} Not Found") + } + } catch (e: Exception) { + failList.add(businessUnit.id) + logger.error("(Business Unit) Exception") + logger.error("(Business Unit) Fail Message: ${e.message}") + logger.error("(Business Unit) Fail Count ${failList.size}: Business Unit ID - ${businessUnit.id}") + } +// } + } + } else { + logger.error("(Business Unit) Business Unit List is null. May occur errors.") + logger.error("(Business Unit)) Fail Message: ${busMessages?.msgDetail}") + logger.error("(Business Unit) Business Unit List is null. May occur errors.") + } + + logger.info("Total Success (${successList.size})") + + if (failList.size > 0) { + logger.error("Total Fail (${failList.size}): $failList") + } + logger.info("--------------------------------------------End - Saving M18 Business Units--------------------------------------------") + } } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/m18/service/M18PurchaseOrderService.kt b/src/main/java/com/ffii/fpsms/m18/service/M18PurchaseOrderService.kt index 620e574..a8271d4 100644 --- a/src/main/java/com/ffii/fpsms/m18/service/M18PurchaseOrderService.kt +++ b/src/main/java/com/ffii/fpsms/m18/service/M18PurchaseOrderService.kt @@ -56,7 +56,7 @@ open class M18PurchaseOrderService( val materialPoBuyers = commonUtils.listToString(listOf(m18Config.BEID_PP, m18Config.BEID_PF), "beId=equal=", "=or=") val materialPoSupplierNot = commonUtils.listToString( - shopService.findM18VendorIdsByCodeNotRegexp(m18Config.MATERIAL_PO_SUPPLIER_NOT), + shopService.findM18VendorIdsByCodeRegexp(m18Config.MATERIAL_PO_SUPPLIER_NOT), "venId=unequal=", "=or=" ) @@ -194,8 +194,9 @@ open class M18PurchaseOrderService( // Find the latest m18 data log by m18 id & type logger.info("${poRefType}: Finding For Latest M18 Data Log...") val latestPurchaseOrderLog = - m18DataLogService.findLatestM18DataLog(purchaseOrder.id, poRefType) + m18DataLogService.findLatestM18DataLogWithSuccess(purchaseOrder.id, poRefType) + logger.info(latestPurchaseOrderLog.toString()) // Save to m18_data_log table logger.info("${poRefType}: Saving for M18 Data Log...") val mainpoJson = @@ -228,6 +229,7 @@ open class M18PurchaseOrderService( id = existingPurchaseOrder?.id, code = mainpo.code, m18SupplierId = mainpo.venId, + m18ShopId = mainpo.virDeptId, m18CurrencyId = mainpo.curId, orderDate = commonUtils.timestampToLocalDateTime(mainpo.tDate), estimatedArrivalDate = commonUtils.timestampToLocalDateTime(mainpo.dDate), @@ -243,7 +245,7 @@ open class M18PurchaseOrderService( // Update m18_data_log with success val successSaveM18PurchaseOrderLogRequest = SaveM18DataLogRequest( - id = saveM18PurchaseOrderLogRequest.id, + id = saveM18PurchaseOrderLog.id, dataLog = mainpoJson, statusEnum = M18DataLogStatus.SUCCESS ) @@ -261,7 +263,7 @@ open class M18PurchaseOrderService( logger.error(e.message) val errorSaveM18PurchaseOrderLogRequest = SaveM18DataLogRequest( - id = saveM18PurchaseOrderLogRequest.id, + id = saveM18PurchaseOrderLog.id, dataLog = mutableMapOf(Pair("Exception Message", e.message)), statusEnum = M18DataLogStatus.FAIL ) @@ -279,7 +281,7 @@ open class M18PurchaseOrderService( // Find the latest m18 data log by m18 id & type logger.info("${poLineRefType}: Finding For Latest M18 Data Log...") val latestPurchaseOrderLineLog = - m18DataLogService.findLatestM18DataLog(line.id, poLineRefType) + m18DataLogService.findLatestM18DataLogWithSuccess(line.id, poLineRefType) // logger.info("${poLineRefType}: Latest M18 Data Log ID: ${latestPurchaseOrderLineLog?.id}") // Save to m18_data_log table diff --git a/src/main/java/com/ffii/fpsms/m18/service/M18PurchaseQuotationService.kt b/src/main/java/com/ffii/fpsms/m18/service/M18PurchaseQuotationService.kt index f3b4e18..fb65470 100644 --- a/src/main/java/com/ffii/fpsms/m18/service/M18PurchaseQuotationService.kt +++ b/src/main/java/com/ffii/fpsms/m18/service/M18PurchaseQuotationService.kt @@ -118,6 +118,7 @@ open class M18PurchaseQuotationService( expiryDate = commonUtils.timestampToLocalDateTime(mainvqu.expDate), effectiveDate = commonUtils.timestampToLocalDateTime(mainvqu.tDate), m18ShopId = mainvqu.venId, + m18CurrencyId = mainvqu.curId, remarks = remvqu?.remarks, m18Id = mainvqu.id, m18LastModifyDate = commonUtils.timestampToLocalDateTime(mainvqu.lastModifyDate) diff --git a/src/main/java/com/ffii/fpsms/m18/web/M18TestController.kt b/src/main/java/com/ffii/fpsms/m18/web/M18TestController.kt index 4d3b334..1d8574a 100644 --- a/src/main/java/com/ffii/fpsms/m18/web/M18TestController.kt +++ b/src/main/java/com/ffii/fpsms/m18/web/M18TestController.kt @@ -57,6 +57,18 @@ class M18TestController ( println(response?.uom?.id) return response } + // --------------------------------------------- Master Data --------------------------------------------- /// + @GetMapping("/master-data") + fun m18MasterData() { + // Master Data + m18MasterDataService.saveUnits() + m18MasterDataService.saveProducts() + m18MasterDataService.saveVendors() + m18MasterDataService.saveBusinessUnits() + m18MasterDataService.saveCurrencies() + m18MasterDataService.saveBoms() + } + // --------------------------------------------- Master Data --------------------------------------------- /// @GetMapping("/product") fun m18Products() { @@ -88,6 +100,12 @@ class M18TestController ( m18MasterDataService.saveBoms() } + @GetMapping("/businessUnit") + fun m18BusinessUnit() { + logger.info("Access token: ${m18Config.ACCESS_TOKEN}") + m18MasterDataService.saveBusinessUnits() + } + // --------------------------------------------- Purchase Order --------------------------------------------- /// @GetMapping("/po") fun m18PO() { diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/Bom.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/Bom.kt index cd54e17..0284bff 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/Bom.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/Bom.kt @@ -1,5 +1,6 @@ package com.ffii.fpsms.modules.master.entity +import com.fasterxml.jackson.annotation.JsonManagedReference import com.ffii.core.entity.BaseEntity import jakarta.persistence.* import jakarta.validation.constraints.NotNull @@ -20,9 +21,9 @@ open class Bom : BaseEntity() { @Column(name = "code", nullable = false, length = 30) open var code: String? = null - @Size(max = 30) + @Size(max = 100) @NotNull - @Column(name = "name", nullable = false, length = 30) + @Column(name = "name", nullable = false, length = 100) open var name: String? = null @Size(max = 100) @@ -44,6 +45,10 @@ open class Bom : BaseEntity() { @JoinColumn(name = "uomId") open var uom: UomConversion? = null + @JsonManagedReference + @OneToMany(mappedBy = "bom", cascade = [CascadeType.ALL], orphanRemoval = true) + open var bomMaterials: MutableList = mutableListOf() + @Column(name = "m18Id") open var m18Id: Long? = null diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/BomMaterial.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/BomMaterial.kt index 3b8f14a..3eca51c 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/BomMaterial.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/BomMaterial.kt @@ -1,5 +1,6 @@ package com.ffii.fpsms.modules.master.entity +import com.fasterxml.jackson.annotation.JsonBackReference import com.ffii.core.entity.BaseEntity import jakarta.persistence.* import jakarta.validation.constraints.NotNull @@ -15,8 +16,8 @@ open class BomMaterial : BaseEntity() { @JoinColumn(name = "itemId") open var item: Items? = null - @Size(max = 50) - @Column(name = "itemName", length = 50) + @Size(max = 100) + @Column(name = "itemName", length = 100) open var itemName: String? = null @NotNull @@ -31,13 +32,14 @@ open class BomMaterial : BaseEntity() { @JoinColumn(name = "uomId") open var uom: UomConversion? = null - @Size(max = 50) - @Column(name = "uomName", length = 50) + @Size(max = 100) + @Column(name = "uomName", length = 100) open var uomName: String? = null @NotNull @ManyToOne(optional = false) @JoinColumn(name = "bomId", nullable = false) + @JsonBackReference open var bom: Bom? = null @NotNull diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/BomRepository.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/BomRepository.kt index ec0103c..4931678 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/BomRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/BomRepository.kt @@ -6,6 +6,8 @@ import java.io.Serializable @Repository interface BomRepository : AbstractRepository { + fun findAllByDeletedIsFalse(): List + fun findByIdAndDeletedIsFalse(id: Serializable): Bom? fun findByM18IdAndDeletedIsFalse(m18Id: Long): Bom? diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/Items.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/Items.kt index 083cb8e..6a07e91 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/Items.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/Items.kt @@ -44,5 +44,5 @@ open class Items : BaseEntity() { @JsonManagedReference @OneToMany(mappedBy = "item", cascade = [CascadeType.ALL], orphanRemoval = true) - open var itemUoms: MutableSet = mutableSetOf() + open var itemUoms: MutableList = mutableListOf() } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/UomConversionRepository.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/UomConversionRepository.kt index aa6ff9c..1c06fc7 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/UomConversionRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/UomConversionRepository.kt @@ -7,6 +7,8 @@ import java.time.LocalDateTime @Repository interface UomConversionRepository : AbstractRepository { //fun importFromM18(): ArrayList; + fun findAllByDeletedFalse(): List; + fun findByIdAndDeletedFalse(id: Long): UomConversion?; fun findByM18IdAndDeletedFalse(m18Id: Long): UomConversion?; diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/BomService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/BomService.kt index 3b4f8bf..d2099fc 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/service/BomService.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/service/BomService.kt @@ -14,6 +14,10 @@ open class BomService( val uomConversionService: UomConversionService ) { + open fun findAll(): List { + return bomRepository.findAll() + } + open fun findById(id: Long): Bom? { return bomRepository.findByIdAndDeletedIsFalse(id) } diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/ShopService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/ShopService.kt index 1a2b13a..bf6134e 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/service/ShopService.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/service/ShopService.kt @@ -25,6 +25,10 @@ open class ShopService( return shopRepository.findByM18IdAndTypeAndDeletedIsFalse(m18Id, ShopType.SUPPLIER) } + open fun findShopByM18Id(m18Id: Long): Shop? { + return shopRepository.findByM18IdAndTypeAndDeletedIsFalse(m18Id, ShopType.SHOP) + } + open fun findM18VendorIdsByCodeRegexp(code: List): List? { val codeRegexp = code.joinToString("|") return shopRepository.findM18IdsByCodeRegexpAndTypeAndDeletedIsFalse(codeRegexp, type = ShopType.SUPPLIER.value) diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/UomConversionService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/UomConversionService.kt index 9febe1b..cda702a 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/service/UomConversionService.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/service/UomConversionService.kt @@ -195,6 +195,9 @@ open class UomConversionService( } } } + open fun findAll(): List { + return uomConversionRepository.findAllByDeletedFalse(); + } open fun findById(id: Long): UomConversion? { return uomConversionRepository.findByIdAndDeletedFalse(id) diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/BomController.kt b/src/main/java/com/ffii/fpsms/modules/master/web/BomController.kt new file mode 100644 index 0000000..d67cf55 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/master/web/BomController.kt @@ -0,0 +1,18 @@ +package com.ffii.fpsms.modules.master.web + +import com.ffii.fpsms.modules.master.entity.Bom +import com.ffii.fpsms.modules.master.service.BomService +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("/bom") +class BomController ( + val bomService: BomService, +) { + @GetMapping + fun getBoms(): List { + return bomService.findAll() + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/UomConversionController.kt b/src/main/java/com/ffii/fpsms/modules/master/web/UomConversionController.kt index adb7d5b..25a69e0 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/web/UomConversionController.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/web/UomConversionController.kt @@ -24,6 +24,11 @@ class UomConversionController( // return uomConversionService.allItems() // } + @GetMapping + fun getUoms(): List { + return uomConversionService.findAll() + } + @RequestMapping(value = ["/castBom"], method = [RequestMethod.GET]) fun convertBom(request: HttpServletRequest?): ArrayList { try { diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrder.kt b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrder.kt index bc2923a..ab0a64e 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrder.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrder.kt @@ -25,6 +25,10 @@ open class PurchaseOrder : BaseEntity() { @JoinColumn(name = "supplierId") open var supplier: Shop? = null + @ManyToOne + @JoinColumn(name = "shopId") + open var shop: Shop? = null + @Column(name = "orderDate") open var orderDate: LocalDateTime? = null diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt index 8fc85f8..9203e1b 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt @@ -92,6 +92,8 @@ open class PurchaseOrderService( request.id?.let { purchaseOrderRepository.findById(it).getOrDefault(PurchaseOrder()) } ?: PurchaseOrder() val supplier = request.m18SupplierId?.let { shopService.findVendorByM18Id(it) } ?: request.supplierId?.let { shopService.findById(it) } + val shop = request.m18ShopId?.let { shopService.findShopByM18Id(it) } + ?: request.shopId?.let { shopService.findById(it) } val currency = request.m18CurrencyId?.let { currencyService.findByM18Id(it) } ?: request.currencyId?.let { currencyService.findById(it) } val status = request.status?.let { status -> PurchaseOrderStatus.entries.find { it.value == status } } @@ -99,10 +101,10 @@ open class PurchaseOrderService( val m18DataLog = request.m18DataLogId?.let { m18DataLogRepository.findById(it).getOrNull() } //Need check duplicate? - purchaseOrder.apply { code = request.code this.supplier = supplier + this.shop = shop this.currency = currency orderDate = request.orderDate estimatedArrivalDate = request.estimatedArrivalDate @@ -117,6 +119,7 @@ open class PurchaseOrderService( id = it.id, code = it.code, supplierCode = it.supplier?.code, + shopCode = it.shop?.code, currencyCode = it.currency?.code, orderDate = it.orderDate, estimatedArrivalDate = it.estimatedArrivalDate, diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderRequest.kt b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderRequest.kt index 8957981..8a86ce5 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderRequest.kt @@ -9,6 +9,8 @@ data class SavePurchaseOrderRequest ( val code: String?, val supplierId: Long? = null, val m18SupplierId: Long? = null, + val shopId: Long? = null, + val m18ShopId: Long? = null, val currencyId: Long? = null, val m18CurrencyId: Long? = null, val orderDate: LocalDateTime?, diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderResponse.kt b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderResponse.kt index 59cd74b..2edb05d 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderResponse.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderResponse.kt @@ -8,6 +8,7 @@ data class SavePurchaseOrderResponse ( val id: Long?, val code: String?, val supplierCode: String?, + val shopCode: String?, val currencyCode: String?, val orderDate: LocalDateTime?, val estimatedArrivalDate: LocalDateTime?, diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseQuotation/entity/PurchaseQuotationLine.kt b/src/main/java/com/ffii/fpsms/modules/purchaseQuotation/entity/PurchaseQuotationLine.kt index 56686a5..3258f96 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseQuotation/entity/PurchaseQuotationLine.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseQuotation/entity/PurchaseQuotationLine.kt @@ -23,8 +23,8 @@ open class PurchaseQuotationLine : BaseEntity() { @Column(name = "code", length = 30) open var code: String? = null - @Size(max = 30) - @Column(name = "description", length = 30) + @Size(max = 300) + @Column(name = "description", length = 300) open var description: String? = null @ManyToOne diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseQuotation/service/PurchaseQuotationService.kt b/src/main/java/com/ffii/fpsms/modules/purchaseQuotation/service/PurchaseQuotationService.kt index 1b84192..dc1ddaf 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseQuotation/service/PurchaseQuotationService.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseQuotation/service/PurchaseQuotationService.kt @@ -23,6 +23,7 @@ open class PurchaseQuotationService( open fun savePurchaseQuotation(request: SavePurchaseQuotationRequest): SavePurchaseQuotationResponse { val purchaseQuotation = request.m18Id?.let { findByM18Id(it) } ?: request.id?.let { findById(it) } ?: PurchaseQuotation() val shop = request.m18ShopId?.let { shopService.findVendorByM18Id(it) } ?: request.shopId?.let { shopService.findById(it) } + val currency = request.m18CurrencyId?.let { } purchaseQuotation.apply { code = request.code diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseQuotation/web/model/SavePurchaseQuotationRequest.kt b/src/main/java/com/ffii/fpsms/modules/purchaseQuotation/web/model/SavePurchaseQuotationRequest.kt index ac9ceb1..a204aee 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseQuotation/web/model/SavePurchaseQuotationRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseQuotation/web/model/SavePurchaseQuotationRequest.kt @@ -9,6 +9,8 @@ data class SavePurchaseQuotationRequest( val effectiveDate: LocalDateTime? = null, val shopId: Long? = null, val m18ShopId: Long? = null, + val currencyId: Long? = null, + val m18CurrencyId: Long? = null, val remarks: String? = null, val m18Id: Long? = null, val m18LastModifyDate: LocalDateTime? = null, diff --git a/src/main/resources/db/changelog/changes/20250526_01_cyril/01_update_bom.sql b/src/main/resources/db/changelog/changes/20250526_01_cyril/01_update_bom.sql new file mode 100644 index 0000000..1d184df --- /dev/null +++ b/src/main/resources/db/changelog/changes/20250526_01_cyril/01_update_bom.sql @@ -0,0 +1,26 @@ +-- liquibase formatted sql + +-- changeset cyril:update bom +ALTER TABLE `bom` + CHANGE COLUMN `name` `name` VARCHAR(100) NOT NULL ; + + +ALTER TABLE `bom_material` + ADD COLUMN `itemName` VARCHAR(100) NULL AFTER `itemId`, + ADD COLUMN `uomName` VARCHAR(100) NULL AFTER `uomId`, + ADD COLUMN `remarks` VARCHAR(1000) NULL AFTER `bomId` +; + +ALTER TABLE `bom_material` + DROP FOREIGN KEY `FK_BOM_MATERIAL_ON_ITEMID`, + DROP FOREIGN KEY `FK_BOM_MATERIAL_ON_UOMID`; +ALTER TABLE `bom_material` + CHANGE COLUMN `itemId` `itemId` INT NULL, + CHANGE COLUMN `uomId` `uomId` INT NULL; +ALTER TABLE `bom_material` + ADD CONSTRAINT `FK_BOM_MATERIAL_ON_ITEMID` + FOREIGN KEY (`itemId`) + REFERENCES `items` (`id`), + ADD CONSTRAINT `FK_BOM_MATERIAL_ON_UOMID` + FOREIGN KEY (`uomId`) + REFERENCES `uom_conversion` (`id`); diff --git a/src/main/resources/db/changelog/changes/20250526_01_cyril/02_update_purchase_order.sql b/src/main/resources/db/changelog/changes/20250526_01_cyril/02_update_purchase_order.sql new file mode 100644 index 0000000..37e1f17 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20250526_01_cyril/02_update_purchase_order.sql @@ -0,0 +1,9 @@ +-- liquibase formatted sql + +-- changeset cyril:update purchase order + +ALTER TABLE `purchase_order` + ADD COLUMN `shopId` INT NULL AFTER `supplierId`, + ADD CONSTRAINT `FK_PURCHASE_ORDER_ON_SHOPID` + FOREIGN KEY (`shopId`) + REFERENCES `shop` (`id`); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20250526_01_cyril/03_update_m18_data_log.sql b/src/main/resources/db/changelog/changes/20250526_01_cyril/03_update_m18_data_log.sql new file mode 100644 index 0000000..4beeff4 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20250526_01_cyril/03_update_m18_data_log.sql @@ -0,0 +1,6 @@ +-- liquibase formatted sql + +-- changeset cyril:update m18 data log + +ALTER TABLE `m18_data_log` + CHANGE COLUMN `dataLog` `dataLog` JSON NULL ; \ No newline at end of file