| @@ -0,0 +1,57 @@ | |||
| package com.ffii.fpsms.modules.pickOrder.entity | |||
| import com.fasterxml.jackson.annotation.JsonManagedReference | |||
| import com.ffii.core.entity.BaseEntity | |||
| import com.ffii.fpsms.modules.deliveryOrder.entity.DeliveryOrder | |||
| import com.ffii.fpsms.modules.jobOrder.entity.JobOrder | |||
| import com.ffii.fpsms.modules.master.entity.BomMaterial | |||
| import com.ffii.fpsms.modules.user.entity.User | |||
| import jakarta.persistence.* | |||
| import jakarta.validation.constraints.NotNull | |||
| import jakarta.validation.constraints.Size | |||
| import org.hibernate.annotations.Formula | |||
| import java.time.LocalDateTime | |||
| @Entity | |||
| @Table(name = "pick_order") | |||
| open class PickOrder: BaseEntity<Long>() { | |||
| @Size(max = 255) | |||
| @NotNull | |||
| @Column(name = "code", nullable = false) | |||
| open var code: String? = null | |||
| @Size(max = 255) | |||
| @Column(name = "consoCode") | |||
| open var consoCode: String? = null | |||
| @ManyToOne | |||
| @JoinColumn(name = "joId") | |||
| open var jobOrder: JobOrder? = null | |||
| @ManyToOne | |||
| @JoinColumn(name = "doId") | |||
| open var deliveryOrder: DeliveryOrder? = null | |||
| @Column(name = "targetDate") | |||
| open var targetDate: LocalDateTime? = null | |||
| @Column(name = "completeDate") | |||
| open var completeDate: LocalDateTime? = null | |||
| @Size(max = 30) | |||
| @Column(name = "type", length = 30) | |||
| open var type: String? = null | |||
| @Size(max = 30) | |||
| @NotNull | |||
| @Column(name = "status", nullable = false, length = 30) | |||
| open var status: String? = null | |||
| @ManyToOne | |||
| @JoinColumn(name = "releasedBy", referencedColumnName = "id") | |||
| open var releasedBy: User? = null | |||
| @JsonManagedReference | |||
| @OneToMany(mappedBy = "pickOrder", cascade = [CascadeType.ALL], orphanRemoval = true) | |||
| open var pickOrderLines: MutableList<PickOrderLine> = mutableListOf() | |||
| } | |||
| @@ -0,0 +1,38 @@ | |||
| package com.ffii.fpsms.modules.pickOrder.entity | |||
| import com.ffii.core.entity.BaseEntity | |||
| import com.ffii.fpsms.modules.master.entity.Items | |||
| import com.ffii.fpsms.modules.master.entity.UomConversion | |||
| import jakarta.persistence.* | |||
| import jakarta.validation.constraints.NotNull | |||
| import jakarta.validation.constraints.Size | |||
| import java.math.BigDecimal | |||
| @Entity | |||
| @Table(name = "pick_order_line") | |||
| open class PickOrderLine : BaseEntity<Long>() { | |||
| @NotNull | |||
| @ManyToOne | |||
| @JoinColumn(name = "poId", nullable = false) | |||
| open var pickOrder: PickOrder? = null | |||
| @NotNull | |||
| @ManyToOne | |||
| @JoinColumn(name = "itemId", nullable = false) | |||
| open var item: Items? = null | |||
| @NotNull | |||
| @Column(name = "qty", nullable = false, precision = 14, scale = 2) | |||
| open var qty: BigDecimal? = null | |||
| @NotNull | |||
| @ManyToOne | |||
| @JoinColumn(name = "uomId", nullable = false) | |||
| open var uom: UomConversion? = null | |||
| @Size(max = 30) | |||
| @NotNull | |||
| @Column(name = "status", nullable = false, length = 30) | |||
| open var status: String? = null | |||
| } | |||
| @@ -0,0 +1,9 @@ | |||
| package com.ffii.fpsms.modules.pickOrder.entity | |||
| import com.ffii.core.support.AbstractRepository | |||
| import org.springframework.stereotype.Repository | |||
| @Repository | |||
| interface PickOrderLineRepository : AbstractRepository<PickOrderLine, Long> { | |||
| } | |||
| @@ -0,0 +1,11 @@ | |||
| package com.ffii.fpsms.modules.pickOrder.entity | |||
| import com.ffii.core.support.AbstractRepository | |||
| import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderInfo | |||
| import org.springframework.data.jpa.repository.Query | |||
| import org.springframework.stereotype.Repository | |||
| @Repository | |||
| interface PickOrderRepository: AbstractRepository<PickOrder, Long> { | |||
| fun findPickOrderInfoByDeletedIsFalse(): List<PickOrderInfo> | |||
| } | |||
| @@ -0,0 +1,24 @@ | |||
| package com.ffii.fpsms.modules.pickOrder.entity.projection | |||
| import org.springframework.beans.factory.annotation.Value | |||
| import java.time.LocalDateTime | |||
| data class PickOrderItemInfo( | |||
| val name: String?, | |||
| val type: String?, | |||
| ) | |||
| interface PickOrderInfo { | |||
| val id: Long? | |||
| val code: String? | |||
| val consoCode: String? | |||
| val targetDate: LocalDateTime? | |||
| val completeDate: LocalDateTime? | |||
| val type: String? | |||
| val status: String? | |||
| @get:Value("#{target.releasedBy.name}") | |||
| val releasedBy: String? | |||
| @get:Value("#{target.pickOrderLines?.size() > 0 ? target.pickOrderLines.![new com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderItemInfo(item.name, item.type)] : null}") | |||
| val items: List<PickOrderItemInfo?>? | |||
| } | |||
| @@ -0,0 +1,19 @@ | |||
| package com.ffii.fpsms.modules.pickOrder.service | |||
| import com.ffii.fpsms.modules.pickOrder.entity.PickOrderRepository | |||
| import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderInfo | |||
| import org.springframework.stereotype.Service | |||
| @Service | |||
| open class PickOrderService( | |||
| val pickOrderRepository: PickOrderRepository, | |||
| ) { | |||
| open fun allPickOrders(): List<PickOrderInfo> { | |||
| return pickOrderRepository.findPickOrderInfoByDeletedIsFalse() | |||
| } | |||
| // Consolidating Pick Orders | |||
| open fun consoPickOrders() { | |||
| } | |||
| } | |||
| @@ -0,0 +1,18 @@ | |||
| package com.ffii.fpsms.modules.pickOrder.web | |||
| import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderInfo | |||
| import com.ffii.fpsms.modules.pickOrder.service.PickOrderService | |||
| import org.springframework.web.bind.annotation.GetMapping | |||
| import org.springframework.web.bind.annotation.RequestMapping | |||
| import org.springframework.web.bind.annotation.RestController | |||
| @RestController | |||
| @RequestMapping("/pickOrder") | |||
| class PickOrderController( | |||
| private val pickOrderService: PickOrderService, | |||
| ) { | |||
| @GetMapping("/list") | |||
| fun allPickOrders(): List<PickOrderInfo> { | |||
| return pickOrderService.allPickOrders(); | |||
| } | |||
| } | |||
| @@ -22,8 +22,9 @@ open class Inventory: BaseEntity<Long>(){ | |||
| @Column(name = "price") | |||
| open var price: BigDecimal? = null | |||
| @Column(name = "stockInLineId") | |||
| open var stockInLine: Long? = null // change this later | |||
| @ManyToOne | |||
| @JoinColumn(name = "itemId") | |||
| open var item: Items? = null | |||
| @ManyToOne | |||
| @JoinColumn(name = "currencyId") | |||
| @@ -48,7 +49,7 @@ open class Inventory: BaseEntity<Long>(){ | |||
| @NotNull | |||
| @ManyToOne | |||
| @JoinColumn(name = "uomId") | |||
| open var uomId: UomConversion? = null | |||
| open var uom: UomConversion? = null | |||
| // @NotNull | |||
| @Column(name = "status") | |||
| @@ -1,8 +1,10 @@ | |||
| package com.ffii.fpsms.modules.stock.entity | |||
| import com.ffii.core.support.AbstractRepository | |||
| import com.ffii.fpsms.modules.stock.entity.projection.InventoryInfo | |||
| import org.springframework.stereotype.Repository | |||
| @Repository | |||
| interface InventoryRepository: AbstractRepository<Inventory, Long> { | |||
| fun findInventoryInfoByDeletedIsFalse(): List<InventoryInfo> | |||
| } | |||
| @@ -0,0 +1,35 @@ | |||
| package com.ffii.fpsms.modules.stock.entity.projection | |||
| import org.springframework.beans.factory.annotation.Value | |||
| import java.math.BigDecimal | |||
| interface InventoryInfo{ | |||
| val id: Long? | |||
| @get:Value("#{target.item.code}") | |||
| val code: String? | |||
| @get:Value("#{target.item.name}") | |||
| val name: String? | |||
| @get:Value("#{target.item.type}") | |||
| val type: String? | |||
| val qty: BigDecimal? | |||
| @get:Value("#{target.uom.code}") | |||
| val uomCode: String? | |||
| @get:Value("#{target.uom.udfudesc}") | |||
| val uomUdfudesc: String? | |||
| @get:Value("#{target.qty * target.uom.gramPerSmallestUnit}") | |||
| val germPerSmallestUnit: BigDecimal? | |||
| @get:Value("#{target.qty * (target.uom.unit4 != '' ? target.uom.unit4Qty " + | |||
| ": target.uom.unit3 != '' ? target.uom.unit3Qty " + | |||
| ": target.uom.unit2 != '' ? target.uom.unit2Qty " + | |||
| ": target.uom.unit1Qty)}") | |||
| val qtyPerSmallestUnit: BigDecimal? | |||
| @get:Value("#{target.uom.unit4 != '' ? target.uom.unit4 " + | |||
| ": target.uom.unit3 != '' ? target.uom.unit3 " + | |||
| ": target.uom.unit2 != '' ? target.uom.unit2 " + | |||
| ": target.uom.unit1}") | |||
| val smallestUnit: String? | |||
| val price: BigDecimal? | |||
| @get:Value("#{target.currency?.name}") | |||
| val currencyName: String? | |||
| val status: String? | |||
| } | |||
| @@ -8,6 +8,7 @@ import com.ffii.fpsms.modules.master.entity.ItemsRepository | |||
| import com.ffii.fpsms.modules.master.web.models.MessageResponse | |||
| import com.ffii.fpsms.modules.stock.entity.Inventory | |||
| import com.ffii.fpsms.modules.stock.entity.InventoryRepository | |||
| import com.ffii.fpsms.modules.stock.entity.projection.InventoryInfo | |||
| import com.ffii.fpsms.modules.stock.web.model.SaveInventoryRequest | |||
| import org.springframework.stereotype.Service | |||
| import java.io.IOException | |||
| @@ -25,6 +26,11 @@ open class InventoryService( | |||
| val inventory = inventoryRepository.findAll() | |||
| return inventory | |||
| } | |||
| open fun allInventories(): List<InventoryInfo>{ | |||
| return inventoryRepository.findInventoryInfoByDeletedIsFalse(); | |||
| } | |||
| // @Throws(IOException::class) | |||
| // open fun updateInventory(request: SaveInventoryRequest): MessageResponse { | |||
| // // out need id | |||
| @@ -0,0 +1,18 @@ | |||
| package com.ffii.fpsms.modules.stock.web | |||
| import com.ffii.fpsms.modules.stock.entity.projection.InventoryInfo | |||
| import com.ffii.fpsms.modules.stock.service.InventoryService | |||
| import org.springframework.web.bind.annotation.GetMapping | |||
| import org.springframework.web.bind.annotation.RequestMapping | |||
| import org.springframework.web.bind.annotation.RestController | |||
| @RestController | |||
| @RequestMapping("/inventory") | |||
| class InventoryController( | |||
| private val inventoryService: InventoryService, | |||
| ) { | |||
| @GetMapping("/list") | |||
| fun allInventories(): List<InventoryInfo> { | |||
| return inventoryService.allInventories() | |||
| } | |||
| } | |||
| @@ -0,0 +1,46 @@ | |||
| -- liquibase formatted sql | |||
| -- changeset cyril:create pick order | |||
| CREATE TABLE `pick_order` | |||
| ( | |||
| `id` INT NOT NULL AUTO_INCREMENT, | |||
| `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, | |||
| `createdBy` VARCHAR(30) NULL DEFAULT NULL, | |||
| `version` INT NOT NULL DEFAULT '0', | |||
| `modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, | |||
| `modifiedBy` VARCHAR(30) NULL DEFAULT NULL, | |||
| `deleted` TINYINT(1) NOT NULL DEFAULT '0', | |||
| `code` VARCHAR(255) NOT NULL, | |||
| `consoCode` VARCHAR(255) NULL, | |||
| `joId` INT NULL, | |||
| `doId` INT NULL, | |||
| `targetDate` DATETIME NULL, | |||
| `completeDate` DATETIME NULL, | |||
| `type` VARCHAR(30) NULL, | |||
| `status` VARCHAR(30) NOT NULL DEFAULT 'pending', | |||
| `releasedBy` INT NULL, | |||
| CONSTRAINT pk_pick_order PRIMARY KEY (id), | |||
| CONSTRAINT `FK_PICK_ORDER_ON_JOID` FOREIGN KEY (`joId`) REFERENCES `job_order` (`id`), | |||
| CONSTRAINT `FK_PICK_ORDER_ON_DOID` FOREIGN KEY (`doId`) REFERENCES `delivery_order` (`id`), | |||
| CONSTRAINT `FK_PICK_ORDER_ON_RELEASEDBY` FOREIGN KEY (`releasedBy`) REFERENCES `user` (`id`) | |||
| ); | |||
| CREATE TABLE `pick_order_line` | |||
| ( | |||
| `id` INT NOT NULL AUTO_INCREMENT, | |||
| `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, | |||
| `createdBy` VARCHAR(30) NULL DEFAULT NULL, | |||
| `version` INT NOT NULL DEFAULT '0', | |||
| `modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, | |||
| `modifiedBy` VARCHAR(30) NULL DEFAULT NULL, | |||
| `deleted` TINYINT(1) NOT NULL DEFAULT '0', | |||
| `poId` INT NOT NULL, | |||
| `itemId` INT NOT NULL, | |||
| `qty` DECIMAL(14, 2) NOT NULL DEFAULT 0, | |||
| `uomId` INT NOT NULL, | |||
| `status` VARCHAR(30) NOT NULL DEFAULT 'pending', | |||
| CONSTRAINT pk_pick_order_line PRIMARY KEY (id), | |||
| CONSTRAINT `FK_PICK_ORDER_LINE_ON_POID` FOREIGN KEY (`poId`) REFERENCES `pick_order` (`id`), | |||
| CONSTRAINT `FK_PICK_ORDER_LINE_ON_ITEMID` FOREIGN KEY (`itemId`) REFERENCES `items` (`id`), | |||
| CONSTRAINT `FK_PICK_ORDER_LINE_ON_UOMID` FOREIGN KEY (`uomId`) REFERENCES `uom_conversion` (`id`) | |||
| ); | |||