Kaynağa Gözat

[MTMS - po + shop + item + qc item + stock in] Update related entity / service / controller

create_edit_user
cyril.tsui 3 ay önce
ebeveyn
işleme
b5d954bb3c
27 değiştirilmiş dosya ile 483 ekleme ve 38 silme
  1. +4
    -0
      src/main/java/com/ffii/fpsms/modules/master/entity/Items.kt
  2. +4
    -0
      src/main/java/com/ffii/fpsms/modules/master/entity/ItemsRepository.kt
  3. +36
    -24
      src/main/java/com/ffii/fpsms/modules/master/entity/Shop.kt
  4. +5
    -0
      src/main/java/com/ffii/fpsms/modules/master/entity/ShopRepository.kt
  5. +6
    -0
      src/main/java/com/ffii/fpsms/modules/master/enums/ShopType.kt
  6. +17
    -0
      src/main/java/com/ffii/fpsms/modules/master/enums/ShopTypeConverter.kt
  7. +11
    -3
      src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt
  8. +49
    -0
      src/main/java/com/ffii/fpsms/modules/master/service/QcItemService.kt
  9. +62
    -0
      src/main/java/com/ffii/fpsms/modules/master/service/ShopService.kt
  10. +3
    -1
      src/main/java/com/ffii/fpsms/modules/master/web/models/NewItemRequest.kt
  11. +21
    -0
      src/main/java/com/ffii/fpsms/modules/master/web/models/SaveShopRequest.kt
  12. +7
    -0
      src/main/java/com/ffii/fpsms/modules/master/web/models/SaveShopResponse.kt
  13. +7
    -5
      src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrder.kt
  14. +12
    -4
      src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLine.kt
  15. +2
    -0
      src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLineRepository.kt
  16. +2
    -0
      src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderRepository.kt
  17. +10
    -0
      src/main/java/com/ffii/fpsms/modules/purchaseOrder/enums/PurchaseOrderLineStatus.kt
  18. +17
    -0
      src/main/java/com/ffii/fpsms/modules/purchaseOrder/enums/PurchaseOrderLineStatusConverter.kt
  19. +16
    -0
      src/main/java/com/ffii/fpsms/modules/purchaseOrder/enums/PurchaseOrderStatus.kt
  20. +17
    -0
      src/main/java/com/ffii/fpsms/modules/purchaseOrder/enums/PurchaseOrderStatusConverter.kt
  21. +67
    -0
      src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderLineService.kt
  22. +47
    -1
      src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt
  23. +16
    -0
      src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderLineRequest.kt
  24. +13
    -0
      src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderLineResponse.kt
  25. +16
    -0
      src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderRequest.kt
  26. +15
    -0
      src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderResponse.kt
  27. +1
    -0
      src/main/java/com/ffii/fpsms/modules/stock/entity/StockInLine.kt

+ 4
- 0
src/main/java/com/ffii/fpsms/modules/master/entity/Items.kt Dosyayı Görüntüle

@@ -4,6 +4,7 @@ import com.ffii.core.entity.BaseEntity
import com.ffii.fpsms.modules.master.web.models.ItemType
import jakarta.persistence.*
import jakarta.validation.constraints.NotNull
import java.time.LocalDateTime

@Entity
@Table(name = "items")
@@ -37,4 +38,7 @@ open class Items : BaseEntity<Long>() {

@Column(name = "m18Id")
open var m18Id: Long? = null

@Column(name = "m18LastModifyDate")
open var m18LastModifyDate: LocalDateTime? = null
}

+ 4
- 0
src/main/java/com/ffii/fpsms/modules/master/entity/ItemsRepository.kt Dosyayı Görüntüle

@@ -7,6 +7,10 @@ import org.springframework.stereotype.Repository
@Repository
interface ItemsRepository : AbstractRepository<Items, Long> {
fun findAllByDeletedFalse(): List<Items>;

fun findByIdAndDeletedFalse(id: Long): Items;

fun findByCodeAndTypeAndDeletedFalse(code: String, type: String): Items?;

fun findByM18IdAndDeletedIsFalse(m18Id: Long): Items?;
}

+ 36
- 24
src/main/java/com/ffii/fpsms/modules/master/entity/Shop.kt Dosyayı Görüntüle

@@ -1,63 +1,75 @@
package com.ffii.fpsms.modules.master.entity

import com.ffii.core.entity.BaseEntity
import com.ffii.fpsms.modules.master.enums.ShopType
import com.ffii.fpsms.modules.master.enums.ShopTypeConverter
import jakarta.persistence.Column
import jakarta.persistence.Convert
import jakarta.persistence.Entity
import jakarta.persistence.Table
import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Size
import java.time.LocalDateTime

@Entity
@Table(name = "shop")
open class Shop : BaseEntity<Long>() {

@Size(max = 30)
@Size(max = 50)
@NotNull
@Column(name = "code", nullable = false, length = 30)
@Column(name = "code", nullable = false, length = 50)
open var code: String? = null

@Size(max = 30)
@Size(max = 300)
@NotNull
@Column(name = "name", nullable = false, length = 30)
@Column(name = "name", nullable = false, length = 300)
open var name: String? = null

@Size(max = 30)
@Column(name = "brNo", length = 30)
@Size(max = 50)
@Column(name = "brNo", length = 50)
open var brNo: String? = null

@Size(max = 30)
@Column(name = "contactNo", length = 30)
@Size(max = 50)
@Column(name = "contactNo", length = 50)
open var contactNo: String? = null

@Size(max = 30)
@Column(name = "contactEmail", length = 30)
@Size(max = 50)
@Column(name = "contactEmail", length = 50)
open var contactEmail: String? = null

@Size(max = 30)
@Column(name = "contactName", length = 30)
@Size(max = 50)
@Column(name = "contactName", length = 50)
open var contactName: String? = null

@Size(max = 30)
@Column(name = "addr1", length = 30)
@Size(max = 300)
@Column(name = "addr1", length = 300)
open var addr1: String? = null

@Size(max = 30)
@Column(name = "addr2", length = 30)
@Size(max = 300)
@Column(name = "addr2", length = 300)
open var addr2: String? = null

@Size(max = 30)
@Column(name = "addr3", length = 30)
@Size(max = 300)
@Column(name = "addr3", length = 300)
open var addr3: String? = null

@Size(max = 30)
@Column(name = "addr4", length = 30)
@Size(max = 300)
@Column(name = "addr4", length = 300)
open var addr4: String? = null

@Size(max = 30)
@Column(name = "district", length = 30)
@Size(max = 300)
@Column(name = "district", length = 300)
open var district: String? = null

@Size(max = 10)
@Convert(converter = ShopTypeConverter::class)
@Column(name = "type", length = 10)
open var type: String? = null
open var type: ShopType? = null

@NotNull
@Column(name = "m18Id", nullable = false)
open var m18Id: Long? = null

@NotNull
@Column(name = "m18LastModifyDate", nullable = false)
open var m18LastModifyDate: LocalDateTime? = null
}

+ 5
- 0
src/main/java/com/ffii/fpsms/modules/master/entity/ShopRepository.kt Dosyayı Görüntüle

@@ -5,4 +5,9 @@ import org.springframework.stereotype.Repository

@Repository
interface ShopRepository : AbstractRepository<Shop, Long> {
fun findAllByDeletedIsFalse(): List<Shop>

fun findByIdAndDeletedIsFalse(id: Long): Shop?

fun findByM18IdAndDeletedIsFalse(m18Id: Long): Shop?
}

+ 6
- 0
src/main/java/com/ffii/fpsms/modules/master/enums/ShopType.kt Dosyayı Görüntüle

@@ -0,0 +1,6 @@
package com.ffii.fpsms.modules.master.enums

enum class ShopType(val value: String) {
SUPPLIER("supplier"),
SHOP("shop");
}

+ 17
- 0
src/main/java/com/ffii/fpsms/modules/master/enums/ShopTypeConverter.kt Dosyayı Görüntüle

@@ -0,0 +1,17 @@
package com.ffii.fpsms.modules.master.enums

import jakarta.persistence.AttributeConverter
import jakarta.persistence.Converter

@Converter(autoApply = true)
class ShopTypeConverter : AttributeConverter<ShopType, String> {
override fun convertToDatabaseColumn(type: ShopType?): String? {
return type?.value
}

override fun convertToEntityAttribute(value: String?): ShopType? {
return value?.let { v ->
ShopType.entries.find { it.value == v }
}
}
}

+ 11
- 3
src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt Dosyayı Görüntüle

@@ -48,6 +48,11 @@ open class ItemsService(
return jdbcDao.queryForList(sql.toString(), args);
}


open fun findByM18Id(m18Id: Long): Items? {
return itemsRepository.findByM18IdAndDeletedIsFalse(m18Id)
}

// QcCheck included item
open fun getItem(id: Long): ItemWithQcResponse {
val list = listOf(1,2)
@@ -83,7 +88,7 @@ open class ItemsService(
@Throws(IOException::class)
@Transactional
open fun saveItem(request: NewItemRequest): MessageResponse {
val duplicatedItem = itemsRepository.findByCodeAndTypeAndDeletedFalse(request.code, request.type.name)
val duplicatedItem = itemsRepository.findByCodeAndTypeAndDeletedFalse(request.code, request.type.type)
if (duplicatedItem != null && duplicatedItem.id != request.id) {
return MessageResponse(
id = request.id,
@@ -94,7 +99,8 @@ open class ItemsService(
errorPosition = "code"
)
}
val item = if (request.id != null && request.id > 0) itemsRepository.findByIdAndDeletedFalse(request.id)
val item = if (request.m18Id != null) findByM18Id(request.m18Id) ?: Items()
else if (request.id != null && request.id > 0) itemsRepository.findByIdAndDeletedFalse(request.id)
else Items()
item.apply {
code = request.code
@@ -104,7 +110,9 @@ open class ItemsService(
shelfLife = request.shelfLife
countryOfOrigin = request.countryOfOrigin
maxQty = request.maxQty
this.type = request.type.name
this.type = request.type.type
m18Id = request.m18Id ?: this.m18Id
m18LastModifyDate = request.m18LastModifyDate ?: this.m18LastModifyDate
}
val savedItem = itemsRepository.saveAndFlush(item)
return MessageResponse(


+ 49
- 0
src/main/java/com/ffii/fpsms/modules/master/service/QcItemService.kt Dosyayı Görüntüle

@@ -4,7 +4,11 @@ import com.ffii.core.support.AbstractBaseEntityService
import com.ffii.core.support.JdbcDao
import com.ffii.fpsms.modules.master.entity.QcItem
import com.ffii.fpsms.modules.master.entity.QcItemRepository
import com.ffii.fpsms.modules.master.web.models.SaveQcItemRequest
import com.ffii.fpsms.modules.master.web.models.SaveQcItemResponse
import jakarta.validation.Valid
import org.springframework.stereotype.Service
import org.springframework.web.bind.annotation.RequestBody

@Service
open class QcItemService(
@@ -31,4 +35,49 @@ open class QcItemService(

return allQcItems()
}

open fun saveQcItem(@Valid @RequestBody request: SaveQcItemRequest): SaveQcItemResponse {

// val qcItemProperties = QcItem::class.members.filterIsInstance<KProperty<QcItem>>()
val errors = mutableMapOf<String, String>()
val id = request.id
val qcItem = if (id != null) qcItemRepository.findById(id).orElseThrow() else QcItem()

// check duplicated code
val duplicateQcItem = findQcItemByCode(request.code)
if (duplicateQcItem != null && duplicateQcItem.id != qcItem.id) {
errors["code"] = "Code is duplicated"
}

if (errors.isNotEmpty()) {
request.let {
SaveQcItemResponse(
id = it.id,
code = it.code,
name = it.name,
description = it.description,
errors = errors
)
}
}

// Save Qc Item
qcItem.apply {
code = request.code
name = request.name
description = request.description
}

val savedQcItem = qcItemRepository.save(qcItem)

return savedQcItem.let {
SaveQcItemResponse(
id = it.id,
code = it.code,
name = it.name,
description = it.description,
errors = null
)
}
}
}

+ 62
- 0
src/main/java/com/ffii/fpsms/modules/master/service/ShopService.kt Dosyayı Görüntüle

@@ -0,0 +1,62 @@
package com.ffii.fpsms.modules.master.service

import com.ffii.fpsms.modules.master.entity.Shop
import com.ffii.fpsms.modules.master.entity.ShopRepository
import com.ffii.fpsms.modules.master.enums.ShopType
import com.ffii.fpsms.modules.master.web.models.SaveShopRequest
import com.ffii.fpsms.modules.master.web.models.SaveShopResponse
import org.springframework.stereotype.Service
import kotlin.jvm.optionals.getOrDefault

@Service
open class ShopService(
val shopRepository: ShopRepository
) {
open fun findAll(): List<Shop> {
return shopRepository.findAllByDeletedIsFalse()
}

open fun findById(id: Long): Shop? {
return shopRepository.findByIdAndDeletedIsFalse(id)
}

open fun findByM18Id(m18Id: Long): Shop? {
return shopRepository.findByM18IdAndDeletedIsFalse(m18Id)
}

open fun saveShop(request: SaveShopRequest): SaveShopResponse {
val shop = if (request.m18Id != null) {
findByM18Id(request.m18Id) ?: Shop()
} else {
request.id?.let { shopRepository.findById(it).getOrDefault(Shop()) } ?: Shop()
}
val type = request.type?.let { type -> ShopType.entries.find { it.value == type } }

shop.apply {
code = request.code
name = request.name
brNo = request.brNo
contactNo = request.contactNo
contactEmail = request.contactEmail
contactName = request.contactName
addr1 = request.addr1
addr2 = request.addr2
addr3 = request.addr3
addr4 = request.addr4
district = request.district
this.type = type
m18Id = request.m18Id ?: this.m18Id
m18LastModifyDate = request.m18LastModifyDate ?: this.m18LastModifyDate
}

val response = shopRepository.saveAndFlush(shop).let {
SaveShopResponse(
id = it.id,
code = it.code,
name = it.name,
)
}

return response
}
}

+ 3
- 1
src/main/java/com/ffii/fpsms/modules/master/web/models/NewItemRequest.kt Dosyayı Görüntüle

@@ -2,8 +2,9 @@ package com.ffii.fpsms.modules.master.web.models

import jakarta.validation.constraints.NotBlank
import jakarta.validation.constraints.NotNull
import java.time.LocalDateTime

enum class ItemType(type: String) {
enum class ItemType(val type: String) {
MATERIAL("mat"),
BY_PRODUCT("byp"),
PRODUCT("product"),
@@ -24,6 +25,7 @@ data class NewItemRequest(
val countryOfOrigin: String?,
val maxQty: Double?,
val m18Id: Long?,
val m18LastModifyDate: LocalDateTime?,
// val type: List<NewTypeRequest>?,
// val uom: List<NewUomRequest>?,
// val weightUnit: List<NewWeightUnitRequest>?,


+ 21
- 0
src/main/java/com/ffii/fpsms/modules/master/web/models/SaveShopRequest.kt Dosyayı Görüntüle

@@ -0,0 +1,21 @@
package com.ffii.fpsms.modules.master.web.models

import java.time.LocalDateTime

data class SaveShopRequest (
val id: Long?,
val code: String?,
val name: String?,
val brNo: String?,
val contactNo: String?,
val contactEmail: String?,
val contactName: String?,
val addr1: String?,
val addr2: String?,
val addr3: String?,
val addr4: String?,
val district: String?,
val type: String?,
val m18Id: Long?,
val m18LastModifyDate: LocalDateTime?,
)

+ 7
- 0
src/main/java/com/ffii/fpsms/modules/master/web/models/SaveShopResponse.kt Dosyayı Görüntüle

@@ -0,0 +1,7 @@
package com.ffii.fpsms.modules.master.web.models

data class SaveShopResponse (
val id: Long?,
val code: String?,
val name: String?,
)

+ 7
- 5
src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrder.kt Dosyayı Görüntüle

@@ -2,7 +2,9 @@ package com.ffii.fpsms.modules.purchaseOrder.entity

import com.ffii.core.entity.BaseEntity
import com.ffii.fpsms.modules.master.entity.Shop
import com.ffii.fpsms.modules.stock.entity.M18DataLog
import com.ffii.fpsms.m18.entity.M18DataLog
import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderStatus
import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderStatusConverter
import jakarta.persistence.*
import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Size
@@ -24,16 +26,16 @@ open class PurchaseOrder : BaseEntity<Long>() {
@Column(name = "orderDate")
open var orderDate: LocalDateTime? = null

@Column(name = "estimatedCompleteDate")
open var estimatedCompleteDate: LocalDate? = null
@Column(name = "estimatedArrivalDate")
open var estimatedArrivalDate: LocalDateTime? = null

@Column(name = "completeDate")
open var completeDate: LocalDateTime? = null

@Size(max = 10)
@NotNull
@Column(name = "status", nullable = false, length = 10)
open var status: String? = null
@Convert(converter = PurchaseOrderStatusConverter::class)
open var status: PurchaseOrderStatus? = null

@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)


+ 12
- 4
src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLine.kt Dosyayı Görüntüle

@@ -2,7 +2,10 @@ package com.ffii.fpsms.modules.purchaseOrder.entity

import com.ffii.core.entity.BaseEntity
import com.ffii.fpsms.modules.master.entity.Items
import com.ffii.fpsms.modules.stock.entity.M18DataLog
import com.ffii.fpsms.m18.entity.M18DataLog
import com.ffii.fpsms.modules.master.enums.ShopTypeConverter
import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderLineStatus
import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderLineStatusConverter
import jakarta.persistence.*
import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Size
@@ -10,7 +13,7 @@ import java.math.BigDecimal

@Entity
@Table(name = "purchase_order_line")
class PurchaseOrderLine : BaseEntity<Long>(){
open class PurchaseOrderLine : BaseEntity<Long>(){
@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "itemId", nullable = false)
@@ -21,6 +24,11 @@ class PurchaseOrderLine : BaseEntity<Long>(){
@Column(name = "itemNo", nullable = false, length = 20)
open var itemNo: String? = null

// @NotNull
// @ManyToOne(fetch = FetchType.LAZY, optional = false)
// @JoinColumn(name = "uomId", nullable = false)
// open var uom: UomConversion? = null

@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "purchaseOrderId", nullable = false)
@@ -36,10 +44,10 @@ class PurchaseOrderLine : BaseEntity<Long>(){
@Column(name = "priceUnit", length = 5)
open var priceUnit: String? = null

@Size(max = 10)
@Convert(converter = PurchaseOrderLineStatusConverter::class)
@NotNull
@Column(name = "status", nullable = false, length = 10)
open var status: String? = null
open var status: PurchaseOrderLineStatus? = null

@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)


+ 2
- 0
src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLineRepository.kt Dosyayı Görüntüle

@@ -2,7 +2,9 @@ package com.ffii.fpsms.modules.purchaseOrder.entity

import com.ffii.core.support.AbstractRepository
import org.springframework.stereotype.Repository
import java.io.Serializable

@Repository
interface PurchaseOrderLineRepository : AbstractRepository<PurchaseOrderLine, Long> {
fun findByM18DataLogIdAndDeletedIsFalse(m18datalogId: Serializable): PurchaseOrderLine?
}

+ 2
- 0
src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderRepository.kt Dosyayı Görüntüle

@@ -2,7 +2,9 @@ package com.ffii.fpsms.modules.purchaseOrder.entity

import com.ffii.core.support.AbstractRepository
import org.springframework.stereotype.Repository
import java.io.Serializable

@Repository
interface PurchaseOrderRepository : AbstractRepository<PurchaseOrder, Long> {
fun findByM18DataLogIdAndDeletedIsFalse(m18datalogId: Serializable): PurchaseOrder?
}

+ 10
- 0
src/main/java/com/ffii/fpsms/modules/purchaseOrder/enums/PurchaseOrderLineStatus.kt Dosyayı Görüntüle

@@ -0,0 +1,10 @@
package com.ffii.fpsms.modules.purchaseOrder.enums

import com.ffii.fpsms.modules.master.enums.ShopType

enum class PurchaseOrderLineStatus(val value: String) {
PENDING("pending"),
PICKING("picking"),
COMPLETED("completed");
}


+ 17
- 0
src/main/java/com/ffii/fpsms/modules/purchaseOrder/enums/PurchaseOrderLineStatusConverter.kt Dosyayı Görüntüle

@@ -0,0 +1,17 @@
package com.ffii.fpsms.modules.purchaseOrder.enums

import jakarta.persistence.AttributeConverter
import jakarta.persistence.Converter

@Converter(autoApply = true)
class PurchaseOrderLineStatusConverter : AttributeConverter<PurchaseOrderLineStatus, String> {
override fun convertToDatabaseColumn(status: PurchaseOrderLineStatus?): String? {
return status?.value
}

override fun convertToEntityAttribute(value: String?): PurchaseOrderLineStatus? {
return value?.let { v ->
PurchaseOrderLineStatus.entries.find { it.value == v }
}
}
}

+ 16
- 0
src/main/java/com/ffii/fpsms/modules/purchaseOrder/enums/PurchaseOrderStatus.kt Dosyayı Görüntüle

@@ -0,0 +1,16 @@
package com.ffii.fpsms.modules.purchaseOrder.enums

import com.ffii.fpsms.modules.master.enums.ShopType

enum class PurchaseOrderStatus(val value: String) {
PENDING ("pending"),
RECEIVING ("receiving"),
COMPLETED ("completed");

companion object {
fun fromValue(value: String): ShopType {
return ShopType.entries.find { it.value == value }
?: throw IllegalArgumentException("No enum constant with value: $value")
}
}
}

+ 17
- 0
src/main/java/com/ffii/fpsms/modules/purchaseOrder/enums/PurchaseOrderStatusConverter.kt Dosyayı Görüntüle

@@ -0,0 +1,17 @@
package com.ffii.fpsms.modules.purchaseOrder.enums

import jakarta.persistence.AttributeConverter
import jakarta.persistence.Converter

@Converter(autoApply = true)
class PurchaseOrderStatusConverter : AttributeConverter<PurchaseOrderStatus, String>{
override fun convertToDatabaseColumn(status: PurchaseOrderStatus?): String? {
return status?.value
}

override fun convertToEntityAttribute(value: String?): PurchaseOrderStatus? {
return value?.let { v ->
PurchaseOrderStatus.entries.find { it.value == v }
}
}
}

+ 67
- 0
src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderLineService.kt Dosyayı Görüntüle

@@ -0,0 +1,67 @@
package com.ffii.fpsms.modules.purchaseOrder.service

import com.ffii.fpsms.m18.entity.M18DataLogRepository
import com.ffii.fpsms.modules.master.entity.ItemsRepository
import com.ffii.fpsms.modules.master.service.ItemsService
import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrder
import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderLine
import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderLineRepository
import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderRepository
import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderLineStatus
import com.ffii.fpsms.modules.purchaseOrder.web.model.SavePurchaseOrderLineRequest
import com.ffii.fpsms.modules.purchaseOrder.web.model.SavePurchaseOrderLineResponse
import org.springframework.stereotype.Service
import java.math.BigDecimal
import kotlin.jvm.optionals.getOrDefault
import kotlin.jvm.optionals.getOrNull

@Service
open class PurchaseOrderLineService(
val purchaseOrderLineRepository: PurchaseOrderLineRepository,
val itemsService: ItemsService,
val itemsRepository: ItemsRepository,
val purchaseOrderRepository: PurchaseOrderRepository,
val m18DataLogRepository: M18DataLogRepository
) {
open fun allPurchaseOrderLine(): List<PurchaseOrderLine> {
return purchaseOrderLineRepository.findAll()
}

open fun findPurchaseOrderLineByM18Id(m18DataLogId: Long): PurchaseOrderLine? {
return purchaseOrderLineRepository.findByM18DataLogIdAndDeletedIsFalse(m18DataLogId)
}

open fun savePurchaseOrderLine(request: SavePurchaseOrderLineRequest): SavePurchaseOrderLineResponse {
val purchaseOrderLine =
request.id?.let { purchaseOrderLineRepository.findById(it).getOrDefault(PurchaseOrderLine()) }
?: PurchaseOrderLine()
val item = request.itemId?.let { itemsRepository.findById(it).getOrNull() }
val purchaseOrder = request.purchaseOrderId?.let { purchaseOrderRepository.findById(it).getOrNull() }
val status = request.status?.let { status -> PurchaseOrderLineStatus.entries.find { it.value == status } }
val m18DataLog = request.m18DataLogId?.let { m18DataLogRepository.findById(it).getOrNull() }

purchaseOrderLine.apply {
this.item = item
itemNo = item?.code
this.purchaseOrder = purchaseOrder
qty = request.qty
price = request.price
priceUnit = request.priceUnit
this.status = status
this.m18DataLog = m18DataLog ?: this.m18DataLog
}

val savedPurchaseOrderLine = purchaseOrderLineRepository.saveAndFlush(purchaseOrderLine).let {
SavePurchaseOrderLineResponse(
id = it.id,
itemNo = it.itemNo,
qty = it.qty,
price = it.price,
priceUnit = it.priceUnit,
status = it.status?.value
)
}

return savedPurchaseOrderLine
}
}

+ 47
- 1
src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt Dosyayı Görüntüle

@@ -1,14 +1,60 @@
package com.ffii.fpsms.modules.purchaseOrder.service

import com.ffii.fpsms.m18.entity.M18DataLogRepository
import com.ffii.fpsms.modules.master.entity.ShopRepository
import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrder
import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderRepository
import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderStatus
import com.ffii.fpsms.modules.purchaseOrder.web.model.SavePurchaseOrderRequest
import com.ffii.fpsms.modules.purchaseOrder.web.model.SavePurchaseOrderResponse
import org.springframework.stereotype.Service
import kotlin.jvm.optionals.getOrDefault
import kotlin.jvm.optionals.getOrNull

@Service
open class PurchaseOrderService(
val purchaseOrderRepository: PurchaseOrderRepository
val purchaseOrderRepository: PurchaseOrderRepository,
val shopRepository: ShopRepository,
val m18DataLogRepository: M18DataLogRepository,
) {
open fun allPurchaseOrder(): List<PurchaseOrder> {
return purchaseOrderRepository.findAll()
}

open fun findPurchaseOrderByM18Id(m18DataLogId: Long): PurchaseOrder? {
return purchaseOrderRepository.findByM18DataLogIdAndDeletedIsFalse(m18DataLogId)
}
open fun savePurchaseOrder(request: SavePurchaseOrderRequest): SavePurchaseOrderResponse {
val purchaseOrder =
request.id?.let { purchaseOrderRepository.findById(it).getOrDefault(PurchaseOrder()) } ?: PurchaseOrder()
val supplier = request.supplierId?.let { shopRepository.findById(it).getOrNull() }
val status = request.status?.let { status -> PurchaseOrderStatus.entries.find { it.value == status } }
val m18DataLog = request.m18DataLogId?.let { m18DataLogRepository.findById(it).getOrNull() }

//Need check duplicate?

purchaseOrder.apply {
code = request.code
this.supplier = supplier
orderDate = request.orderDate
estimatedArrivalDate = request.estimatedArrivalDate
completeDate = request.completeDate
this.status = status
this.m18DataLog = m18DataLog
}

val savedPurchaseOrder = purchaseOrderRepository.saveAndFlush(purchaseOrder).let {
SavePurchaseOrderResponse(
id = it.id,
code = it.code,
supplierCode = it.supplier?.code,
orderDate = it.orderDate,
estimatedArrivalDate = it.estimatedArrivalDate,
completeDate = it.completeDate,
status = it.status?.value
)
}

return savedPurchaseOrder
}
}

+ 16
- 0
src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderLineRequest.kt Dosyayı Görüntüle

@@ -0,0 +1,16 @@
package com.ffii.fpsms.modules.purchaseOrder.web.model

import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderLineStatus
import java.math.BigDecimal

data class SavePurchaseOrderLineRequest(
val id: Long?,
val itemId: Long?,
val uomId: Long?,
val purchaseOrderId: Long?,
val qty: BigDecimal?,
val price: BigDecimal?,
val priceUnit: String?,
val status: String?,
val m18DataLogId: Long?,
)

+ 13
- 0
src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderLineResponse.kt Dosyayı Görüntüle

@@ -0,0 +1,13 @@
package com.ffii.fpsms.modules.purchaseOrder.web.model

import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderLineStatus
import java.math.BigDecimal

data class SavePurchaseOrderLineResponse (
val id: Long?,
val itemNo: String?,
val qty: BigDecimal?,
val price: BigDecimal?,
val priceUnit: String?,
val status: String?,
)

+ 16
- 0
src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderRequest.kt Dosyayı Görüntüle

@@ -0,0 +1,16 @@
package com.ffii.fpsms.modules.purchaseOrder.web.model

import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderStatus
import java.time.LocalDate
import java.time.LocalDateTime

data class SavePurchaseOrderRequest (
val id: Long?,
val code: String?,
val supplierId: Long?,
val orderDate: LocalDateTime?,
val estimatedArrivalDate: LocalDateTime?,
val completeDate: LocalDateTime?,
val status: String?,
val m18DataLogId: Long?
)

+ 15
- 0
src/main/java/com/ffii/fpsms/modules/purchaseOrder/web/model/SavePurchaseOrderResponse.kt Dosyayı Görüntüle

@@ -0,0 +1,15 @@
package com.ffii.fpsms.modules.purchaseOrder.web.model

import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderStatus
import java.time.LocalDate
import java.time.LocalDateTime

data class SavePurchaseOrderResponse (
val id: Long?,
val code: String?,
val supplierCode: String?,
val orderDate: LocalDateTime?,
val estimatedArrivalDate: LocalDateTime?,
val completeDate: LocalDateTime?,
val status: String?,
)

+ 1
- 0
src/main/java/com/ffii/fpsms/modules/stock/entity/StockInLine.kt Dosyayı Görüntüle

@@ -1,6 +1,7 @@
package com.ffii.fpsms.modules.stock.entity

import com.ffii.core.entity.BaseEntity
import com.ffii.fpsms.m18.entity.M18DataLog
import com.ffii.fpsms.modules.master.entity.Items
import com.ffii.fpsms.modules.stock.entity.enum.StockInLineStatus
import com.ffii.fpsms.modules.user.entity.User


Yükleniyor…
İptal
Kaydet