| @@ -19,7 +19,7 @@ open class PurchaseOrder : BaseEntity<Long>() { | |||||
| @Column(name = "code", nullable = false, length = 30) | @Column(name = "code", nullable = false, length = 30) | ||||
| open var code: String? = null | open var code: String? = null | ||||
| @ManyToOne(fetch = FetchType.LAZY) | |||||
| @ManyToOne | |||||
| @JoinColumn(name = "supplierId") | @JoinColumn(name = "supplierId") | ||||
| open var supplier: Shop? = null | open var supplier: Shop? = null | ||||
| @@ -38,7 +38,7 @@ open class PurchaseOrder : BaseEntity<Long>() { | |||||
| open var status: PurchaseOrderStatus? = null | open var status: PurchaseOrderStatus? = null | ||||
| @NotNull | @NotNull | ||||
| @ManyToOne(fetch = FetchType.LAZY, optional = false) | |||||
| @ManyToOne | |||||
| @JoinColumn(name = "m18DataLogId", nullable = false) | @JoinColumn(name = "m18DataLogId", nullable = false) | ||||
| open var m18DataLog: M18DataLog? = null | open var m18DataLog: M18DataLog? = null | ||||
| } | } | ||||
| @@ -15,7 +15,7 @@ import java.math.BigDecimal | |||||
| @Table(name = "purchase_order_line") | @Table(name = "purchase_order_line") | ||||
| open class PurchaseOrderLine : BaseEntity<Long>(){ | open class PurchaseOrderLine : BaseEntity<Long>(){ | ||||
| @NotNull | @NotNull | ||||
| @ManyToOne(fetch = FetchType.LAZY, optional = false) | |||||
| @ManyToOne | |||||
| @JoinColumn(name = "itemId", nullable = false) | @JoinColumn(name = "itemId", nullable = false) | ||||
| open var item: Items? = null | open var item: Items? = null | ||||
| @@ -30,7 +30,7 @@ open class PurchaseOrderLine : BaseEntity<Long>(){ | |||||
| // open var uom: UomConversion? = null | // open var uom: UomConversion? = null | ||||
| @NotNull | @NotNull | ||||
| @ManyToOne(fetch = FetchType.LAZY, optional = false) | |||||
| @ManyToOne | |||||
| @JoinColumn(name = "purchaseOrderId", nullable = false) | @JoinColumn(name = "purchaseOrderId", nullable = false) | ||||
| open var purchaseOrder: PurchaseOrder? = null | open var purchaseOrder: PurchaseOrder? = null | ||||
| @@ -50,7 +50,7 @@ open class PurchaseOrderLine : BaseEntity<Long>(){ | |||||
| open var status: PurchaseOrderLineStatus? = null | open var status: PurchaseOrderLineStatus? = null | ||||
| @NotNull | @NotNull | ||||
| @ManyToOne(fetch = FetchType.LAZY, optional = false) | |||||
| @ManyToOne | |||||
| @JoinColumn(name = "m18DataLogId", nullable = false) | @JoinColumn(name = "m18DataLogId", nullable = false) | ||||
| open var m18DataLog: M18DataLog? = null | open var m18DataLog: M18DataLog? = null | ||||
| } | } | ||||
| @@ -1,10 +1,15 @@ | |||||
| package com.ffii.fpsms.modules.purchaseOrder.entity | package com.ffii.fpsms.modules.purchaseOrder.entity | ||||
| import com.ffii.core.support.AbstractRepository | import com.ffii.core.support.AbstractRepository | ||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.projections.PurchaseOrderLineInfo | |||||
| import org.springframework.stereotype.Repository | import org.springframework.stereotype.Repository | ||||
| import java.io.Serializable | import java.io.Serializable | ||||
| @Repository | @Repository | ||||
| interface PurchaseOrderLineRepository : AbstractRepository<PurchaseOrderLine, Long> { | interface PurchaseOrderLineRepository : AbstractRepository<PurchaseOrderLine, Long> { | ||||
| fun findByM18DataLogIdAndDeletedIsFalse(m18datalogId: Serializable): PurchaseOrderLine? | fun findByM18DataLogIdAndDeletedIsFalse(m18datalogId: Serializable): PurchaseOrderLine? | ||||
| fun findAllPurchaseOrderLineInfoByPurchaseOrderIdAndDeletedIsFalse(purchaseOrderId: Long): List<PurchaseOrderLineInfo> | |||||
| fun findAllByPurchaseOrderIdAndDeletedIsFalse(purchaseOrderId: Long): List<PurchaseOrderLine> | |||||
| // fun find | |||||
| } | } | ||||
| @@ -1,10 +1,14 @@ | |||||
| package com.ffii.fpsms.modules.purchaseOrder.entity | package com.ffii.fpsms.modules.purchaseOrder.entity | ||||
| import com.ffii.core.support.AbstractRepository | import com.ffii.core.support.AbstractRepository | ||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.projections.PurchaseOrderInfo | |||||
| import org.springframework.stereotype.Repository | import org.springframework.stereotype.Repository | ||||
| import java.io.Serializable | import java.io.Serializable | ||||
| @Repository | @Repository | ||||
| interface PurchaseOrderRepository : AbstractRepository<PurchaseOrder, Long> { | interface PurchaseOrderRepository : AbstractRepository<PurchaseOrder, Long> { | ||||
| fun findByM18DataLogIdAndDeletedIsFalse(m18datalogId: Serializable): PurchaseOrder? | fun findByM18DataLogIdAndDeletedIsFalse(m18datalogId: Serializable): PurchaseOrder? | ||||
| fun findPurchaseOrderInfoByDeletedIsFalse(): List<PurchaseOrderInfo> | |||||
| fun findPurchaseOrderInfoByIdAndDeletedIsFalse(id: Long): PurchaseOrderInfo | |||||
| } | } | ||||
| @@ -0,0 +1,18 @@ | |||||
| package com.ffii.fpsms.modules.purchaseOrder.entity.projections | |||||
| import com.ffii.fpsms.modules.stock.entity.StockInLine | |||||
| import org.springframework.beans.factory.annotation.Value | |||||
| import java.time.LocalDate | |||||
| import java.time.LocalDateTime | |||||
| interface PurchaseOrderInfo { | |||||
| val id: Long | |||||
| val code: String | |||||
| val orderDate: LocalDateTime | |||||
| val estimatedArrivalDate: LocalDateTime | |||||
| val completeDate: LocalDateTime | |||||
| val status: String | |||||
| // @get:Value("#{target.supplier?.name}") | |||||
| // val supplier: String? | |||||
| } | |||||
| @@ -0,0 +1,29 @@ | |||||
| package com.ffii.fpsms.modules.purchaseOrder.entity.projections | |||||
| import com.ffii.fpsms.modules.stock.entity.StockInLine | |||||
| import org.springframework.beans.factory.annotation.Value | |||||
| import java.math.BigDecimal | |||||
| interface PurchaseOrderLineInfo { | |||||
| val id: Long | |||||
| @get:Value("#{target.purchaseOrder.id}") | |||||
| val purchaseOrderId: Long | |||||
| val itemNo: String | |||||
| @get:Value("#{target.items?.name}") | |||||
| val itemName: String? | |||||
| val qty: BigDecimal | |||||
| val price: BigDecimal | |||||
| val status: String | |||||
| } | |||||
| data class PoLineWithStockInLine ( | |||||
| val id: Long, | |||||
| val purchaseOrderId: Long, | |||||
| val itemNo: String, | |||||
| val itemName: String?, | |||||
| val qty: BigDecimal, | |||||
| val price: BigDecimal, | |||||
| val status: String, | |||||
| val stockInLine: List<StockInLine>? | |||||
| ) | |||||
| @@ -7,6 +7,7 @@ import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrder | |||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderLine | import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderLine | ||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderLineRepository | import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderLineRepository | ||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderRepository | import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderRepository | ||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.projections.PurchaseOrderLineInfo | |||||
| import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderLineStatus | 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.SavePurchaseOrderLineRequest | ||||
| import com.ffii.fpsms.modules.purchaseOrder.web.model.SavePurchaseOrderLineResponse | import com.ffii.fpsms.modules.purchaseOrder.web.model.SavePurchaseOrderLineResponse | ||||
| @@ -17,11 +18,11 @@ import kotlin.jvm.optionals.getOrNull | |||||
| @Service | @Service | ||||
| open class PurchaseOrderLineService( | open class PurchaseOrderLineService( | ||||
| val purchaseOrderLineRepository: PurchaseOrderLineRepository, | |||||
| val itemsService: ItemsService, | |||||
| val itemsRepository: ItemsRepository, | |||||
| val purchaseOrderRepository: PurchaseOrderRepository, | |||||
| val m18DataLogRepository: M18DataLogRepository | |||||
| private val purchaseOrderLineRepository: PurchaseOrderLineRepository, | |||||
| private val itemsService: ItemsService, | |||||
| private val itemsRepository: ItemsRepository, | |||||
| private val purchaseOrderRepository: PurchaseOrderRepository, | |||||
| private val m18DataLogRepository: M18DataLogRepository | |||||
| ) { | ) { | ||||
| open fun allPurchaseOrderLine(): List<PurchaseOrderLine> { | open fun allPurchaseOrderLine(): List<PurchaseOrderLine> { | ||||
| return purchaseOrderLineRepository.findAll() | return purchaseOrderLineRepository.findAll() | ||||
| @@ -30,6 +31,9 @@ open class PurchaseOrderLineService( | |||||
| open fun findPurchaseOrderLineByM18Id(m18DataLogId: Long): PurchaseOrderLine? { | open fun findPurchaseOrderLineByM18Id(m18DataLogId: Long): PurchaseOrderLine? { | ||||
| return purchaseOrderLineRepository.findByM18DataLogIdAndDeletedIsFalse(m18DataLogId) | return purchaseOrderLineRepository.findByM18DataLogIdAndDeletedIsFalse(m18DataLogId) | ||||
| } | } | ||||
| open fun findAllPoLineInfoByPoId(poId: Long): List<PurchaseOrderLineInfo> { | |||||
| return purchaseOrderLineRepository.findAllPurchaseOrderLineInfoByPurchaseOrderIdAndDeletedIsFalse(poId) | |||||
| } | |||||
| open fun savePurchaseOrderLine(request: SavePurchaseOrderLineRequest): SavePurchaseOrderLineResponse { | open fun savePurchaseOrderLine(request: SavePurchaseOrderLineRequest): SavePurchaseOrderLineResponse { | ||||
| val purchaseOrderLine = | val purchaseOrderLine = | ||||
| @@ -1,26 +1,74 @@ | |||||
| package com.ffii.fpsms.modules.purchaseOrder.service | package com.ffii.fpsms.modules.purchaseOrder.service | ||||
| import com.ffii.core.support.AbstractBaseEntityService | |||||
| import com.ffii.core.support.JdbcDao | |||||
| import com.ffii.fpsms.m18.entity.M18DataLogRepository | import com.ffii.fpsms.m18.entity.M18DataLogRepository | ||||
| import com.ffii.fpsms.modules.master.entity.ShopRepository | import com.ffii.fpsms.modules.master.entity.ShopRepository | ||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrder | import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrder | ||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderLineRepository | |||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderRepository | import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderRepository | ||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.projections.PoLineWithStockInLine | |||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.projections.PurchaseOrderInfo | |||||
| import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderStatus | 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.SavePurchaseOrderRequest | ||||
| import com.ffii.fpsms.modules.purchaseOrder.web.model.SavePurchaseOrderResponse | import com.ffii.fpsms.modules.purchaseOrder.web.model.SavePurchaseOrderResponse | ||||
| import com.ffii.fpsms.modules.stock.entity.StockInLine | |||||
| import com.ffii.fpsms.modules.stock.entity.StockInLineRepository | |||||
| import com.ffii.fpsms.modules.stock.entity.StockInRepository | |||||
| import org.springframework.stereotype.Service | import org.springframework.stereotype.Service | ||||
| import java.util.HashMap | |||||
| import java.util.Objects | |||||
| import kotlin.jvm.optionals.getOrDefault | import kotlin.jvm.optionals.getOrDefault | ||||
| import kotlin.jvm.optionals.getOrNull | import kotlin.jvm.optionals.getOrNull | ||||
| @Service | @Service | ||||
| open class PurchaseOrderService( | open class PurchaseOrderService( | ||||
| val purchaseOrderRepository: PurchaseOrderRepository, | |||||
| val shopRepository: ShopRepository, | |||||
| val m18DataLogRepository: M18DataLogRepository, | |||||
| ) { | |||||
| private val jdbcDao: JdbcDao, | |||||
| private val purchaseOrderRepository: PurchaseOrderRepository, | |||||
| private val polRepository: PurchaseOrderLineRepository, | |||||
| private val shopRepository: ShopRepository, | |||||
| private val m18DataLogRepository: M18DataLogRepository, | |||||
| private val stockInRepository: StockInRepository, | |||||
| private val stockInLineRepository: StockInLineRepository, | |||||
| ): AbstractBaseEntityService<PurchaseOrder, Long, PurchaseOrderRepository>(jdbcDao, purchaseOrderRepository) { | |||||
| open fun getPoList(): List<PurchaseOrderInfo> { | |||||
| return purchaseOrderRepository.findPurchaseOrderInfoByDeletedIsFalse() | |||||
| } | |||||
| open fun allPurchaseOrder(): List<PurchaseOrder> { | open fun allPurchaseOrder(): List<PurchaseOrder> { | ||||
| return purchaseOrderRepository.findAll() | return purchaseOrderRepository.findAll() | ||||
| } | } | ||||
| open fun getDetailedPo(id: Long): Map<String, Any> { | |||||
| val po = purchaseOrderRepository.findPurchaseOrderInfoByIdAndDeletedIsFalse(id) | |||||
| val pol = polRepository.findAllByPurchaseOrderIdAndDeletedIsFalse(id) | |||||
| // val pol = polRepository.findAllPurchaseOrderLineInfoByPurchaseOrderIdAndDeletedIsFalse(id) | |||||
| val stockIn = stockInRepository.findByPurchaseOrderIdAndDeletedFalse(id) | |||||
| val stockInLine = if (stockIn == null) listOf() else { | |||||
| stockInLineRepository.findAllByStockInIdAndDeletedFalse(stockIn.id!!) | |||||
| } | |||||
| val mappedPoLine = pol.map { thisPol -> | |||||
| val inLine = stockInLine.filter { it.itemNo.equals(thisPol.itemNo)} | |||||
| PoLineWithStockInLine( | |||||
| thisPol.id!!, | |||||
| thisPol.purchaseOrder!!.id!!, | |||||
| thisPol.itemNo!!, | |||||
| thisPol.item!!.name, | |||||
| thisPol.qty!!, | |||||
| thisPol.price!!, | |||||
| thisPol.status!!.toString(), | |||||
| inLine | |||||
| ) | |||||
| } | |||||
| val result = mapOf( | |||||
| "id" to po.id, | |||||
| "code" to po.code, | |||||
| "orderDate" to po.orderDate, | |||||
| "estimatedArrivalDate" to po.estimatedArrivalDate, | |||||
| "completeDate" to po.completeDate, | |||||
| "status" to po.status, | |||||
| "pol" to mappedPoLine | |||||
| ) | |||||
| return result | |||||
| } | |||||
| open fun findPurchaseOrderByM18Id(m18DataLogId: Long): PurchaseOrder? { | open fun findPurchaseOrderByM18Id(m18DataLogId: Long): PurchaseOrder? { | ||||
| return purchaseOrderRepository.findByM18DataLogIdAndDeletedIsFalse(m18DataLogId) | return purchaseOrderRepository.findByM18DataLogIdAndDeletedIsFalse(m18DataLogId) | ||||
| } | } | ||||
| @@ -0,0 +1,27 @@ | |||||
| package com.ffii.fpsms.modules.purchaseOrder.web | |||||
| import com.ffii.core.support.JdbcDao | |||||
| import com.ffii.fpsms.modules.master.entity.Items | |||||
| import com.ffii.fpsms.modules.master.service.ItemsService | |||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrder | |||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.projections.PurchaseOrderInfo | |||||
| import com.ffii.fpsms.modules.purchaseOrder.service.PurchaseOrderService | |||||
| import org.springframework.web.bind.annotation.GetMapping | |||||
| import org.springframework.web.bind.annotation.PathVariable | |||||
| import org.springframework.web.bind.annotation.RequestMapping | |||||
| import org.springframework.web.bind.annotation.RestController | |||||
| @RestController | |||||
| @RequestMapping("/po") | |||||
| class PurchaseOrderController( | |||||
| private val purchaseOrderService: PurchaseOrderService | |||||
| ) { | |||||
| @GetMapping("/list") | |||||
| fun getPoList(): List<PurchaseOrderInfo> { | |||||
| return purchaseOrderService.getPoList() | |||||
| } | |||||
| @GetMapping("/detail/{id}") | |||||
| fun getDetailedPo(@PathVariable id: Long): Map<String, Any> { | |||||
| return purchaseOrderService.getDetailedPo(id) | |||||
| } | |||||
| } | |||||
| @@ -31,7 +31,7 @@ open class StockIn : BaseEntity<Long>() { | |||||
| @JoinColumn(name = "purchaseOrderId") | @JoinColumn(name = "purchaseOrderId") | ||||
| open var purchaseOrder: PurchaseOrder? = null | open var purchaseOrder: PurchaseOrder? = null | ||||
| @ManyToMany | |||||
| @ManyToOne | |||||
| @JoinColumn(name = "stockOutId") | @JoinColumn(name = "stockOutId") | ||||
| open var stockOutId: StockOut? = null | open var stockOutId: StockOut? = null | ||||
| @@ -5,4 +5,5 @@ import org.springframework.stereotype.Repository | |||||
| @Repository | @Repository | ||||
| interface StockInLineRepository : AbstractRepository<StockInLine, Long> { | interface StockInLineRepository : AbstractRepository<StockInLine, Long> { | ||||
| fun findAllByStockInIdAndDeletedFalse(stockInId: Long): List<StockInLine> | |||||
| } | } | ||||
| @@ -5,4 +5,5 @@ import org.springframework.stereotype.Repository | |||||
| @Repository | @Repository | ||||
| interface StockInRepository : AbstractRepository<StockIn, Long> { | interface StockInRepository : AbstractRepository<StockIn, Long> { | ||||
| fun findByPurchaseOrderIdAndDeletedFalse(purchaseOrderId: Long): StockIn? | |||||
| } | } | ||||