| @@ -7,11 +7,14 @@ import com.ffii.fpsms.modules.jobOrder.entity.JobOrder | |||||
| import com.ffii.fpsms.modules.master.entity.BomMaterial | import com.ffii.fpsms.modules.master.entity.BomMaterial | ||||
| import com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatus | import com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatus | ||||
| import com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatusConverter | import com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatusConverter | ||||
| import com.ffii.fpsms.modules.pickOrder.enums.PickOrderType | |||||
| import com.ffii.fpsms.modules.pickOrder.enums.PickOrderTypeConverter | |||||
| import com.ffii.fpsms.modules.user.entity.User | import com.ffii.fpsms.modules.user.entity.User | ||||
| import jakarta.persistence.* | import jakarta.persistence.* | ||||
| import jakarta.validation.constraints.NotNull | import jakarta.validation.constraints.NotNull | ||||
| import jakarta.validation.constraints.Size | import jakarta.validation.constraints.Size | ||||
| import org.hibernate.annotations.Formula | import org.hibernate.annotations.Formula | ||||
| import java.time.Instant | |||||
| import java.time.LocalDateTime | import java.time.LocalDateTime | ||||
| @Entity | @Entity | ||||
| @@ -41,8 +44,9 @@ open class PickOrder: BaseEntity<Long>() { | |||||
| open var completeDate: LocalDateTime? = null | open var completeDate: LocalDateTime? = null | ||||
| @Size(max = 30) | @Size(max = 30) | ||||
| @Convert(converter = PickOrderTypeConverter::class) | |||||
| @Column(name = "type", length = 30) | @Column(name = "type", length = 30) | ||||
| open var type: String? = null | |||||
| open var type: PickOrderType? = null | |||||
| @NotNull | @NotNull | ||||
| @Convert(converter = PickOrderStatusConverter::class) | @Convert(converter = PickOrderStatusConverter::class) | ||||
| @@ -56,4 +60,11 @@ open class PickOrder: BaseEntity<Long>() { | |||||
| @JsonManagedReference | @JsonManagedReference | ||||
| @OneToMany(mappedBy = "pickOrder", cascade = [CascadeType.ALL], orphanRemoval = true) | @OneToMany(mappedBy = "pickOrder", cascade = [CascadeType.ALL], orphanRemoval = true) | ||||
| open var pickOrderLines: MutableList<PickOrderLine> = mutableListOf() | open var pickOrderLines: MutableList<PickOrderLine> = mutableListOf() | ||||
| @Column(name = "releasedDate") | |||||
| open var releasedDate: LocalDateTime? = null | |||||
| @ManyToOne | |||||
| @JoinColumn(name = "assignTo", referencedColumnName = "id") | |||||
| open var assignTo: User? = null | |||||
| } | } | ||||
| @@ -1,8 +1,12 @@ | |||||
| package com.ffii.fpsms.modules.pickOrder.entity | package com.ffii.fpsms.modules.pickOrder.entity | ||||
| import com.fasterxml.jackson.annotation.JsonBackReference | |||||
| import com.fasterxml.jackson.annotation.JsonManagedReference | |||||
| import com.ffii.core.entity.BaseEntity | import com.ffii.core.entity.BaseEntity | ||||
| import com.ffii.fpsms.modules.master.entity.Items | import com.ffii.fpsms.modules.master.entity.Items | ||||
| import com.ffii.fpsms.modules.master.entity.UomConversion | import com.ffii.fpsms.modules.master.entity.UomConversion | ||||
| import com.ffii.fpsms.modules.stock.entity.StockOutLine | |||||
| import com.ffii.fpsms.modules.stock.entity.SuggestedPickLot | |||||
| import jakarta.persistence.* | import jakarta.persistence.* | ||||
| import jakarta.validation.constraints.NotNull | import jakarta.validation.constraints.NotNull | ||||
| import jakarta.validation.constraints.Size | import jakarta.validation.constraints.Size | ||||
| @@ -12,6 +16,7 @@ import java.math.BigDecimal | |||||
| @Table(name = "pick_order_line") | @Table(name = "pick_order_line") | ||||
| open class PickOrderLine : BaseEntity<Long>() { | open class PickOrderLine : BaseEntity<Long>() { | ||||
| @JsonBackReference | |||||
| @NotNull | @NotNull | ||||
| @ManyToOne | @ManyToOne | ||||
| @JoinColumn(name = "poId", nullable = false) | @JoinColumn(name = "poId", nullable = false) | ||||
| @@ -35,4 +40,12 @@ open class PickOrderLine : BaseEntity<Long>() { | |||||
| @NotNull | @NotNull | ||||
| @Column(name = "status", nullable = false, length = 30) | @Column(name = "status", nullable = false, length = 30) | ||||
| open var status: String? = null | open var status: String? = null | ||||
| @JsonManagedReference | |||||
| @OneToMany(mappedBy = "pickOrderLine", cascade = [CascadeType.ALL], orphanRemoval = true) | |||||
| open var stockOutLines: MutableList<StockOutLine> = mutableListOf() | |||||
| @JsonManagedReference | |||||
| @OneToMany(mappedBy = "pickOrderLine", cascade = [CascadeType.ALL], orphanRemoval = true) | |||||
| open var suggestedPickLots: MutableList<SuggestedPickLot> = mutableListOf() | |||||
| } | } | ||||
| @@ -1,7 +1,9 @@ | |||||
| package com.ffii.fpsms.modules.stock.entity | package com.ffii.fpsms.modules.stock.entity | ||||
| import com.fasterxml.jackson.annotation.JsonBackReference | |||||
| import com.ffii.core.entity.BaseEntity | import com.ffii.core.entity.BaseEntity | ||||
| import com.ffii.fpsms.modules.master.entity.Items | import com.ffii.fpsms.modules.master.entity.Items | ||||
| import com.ffii.fpsms.modules.pickOrder.entity.PickOrderLine | |||||
| import jakarta.persistence.* | import jakarta.persistence.* | ||||
| import jakarta.validation.constraints.NotNull | import jakarta.validation.constraints.NotNull | ||||
| import java.time.LocalDateTime | import java.time.LocalDateTime | ||||
| @@ -37,4 +39,9 @@ open class StockOutLine: BaseEntity<Long>() { | |||||
| @Column(name = "pickerId") | @Column(name = "pickerId") | ||||
| open var pickerId: Long? = null | open var pickerId: Long? = null | ||||
| @JsonBackReference | |||||
| @ManyToOne | |||||
| @JoinColumn(name = "pickOrderLineId") | |||||
| open var pickOrderLine: PickOrderLine? = null | |||||
| } | } | ||||
| @@ -1,30 +1,42 @@ | |||||
| package com.ffii.fpsms.modules.stock.entity | package com.ffii.fpsms.modules.stock.entity | ||||
| import com.fasterxml.jackson.annotation.JsonBackReference | |||||
| import com.ffii.core.entity.BaseEntity | import com.ffii.core.entity.BaseEntity | ||||
| import com.ffii.fpsms.modules.master.entity.Warehouse | import com.ffii.fpsms.modules.master.entity.Warehouse | ||||
| import com.ffii.fpsms.modules.pickOrder.entity.PickOrderLine | |||||
| import com.ffii.fpsms.modules.stock.enums.SuggestedPickLotType | |||||
| import com.ffii.fpsms.modules.stock.enums.SuggestedPickLotTypeConverter | |||||
| import jakarta.persistence.* | import jakarta.persistence.* | ||||
| import jakarta.validation.constraints.NotNull | import jakarta.validation.constraints.NotNull | ||||
| import jakarta.validation.constraints.Size | import jakarta.validation.constraints.Size | ||||
| import java.math.BigDecimal | |||||
| @Entity | @Entity | ||||
| @Table(name = "suggested_pick_lot") | @Table(name = "suggested_pick_lot") | ||||
| open class SuggestedPickLot: BaseEntity<Long>() { | open class SuggestedPickLot: BaseEntity<Long>() { | ||||
| @Size(max = 100) | |||||
| @NotNull | @NotNull | ||||
| @Convert(converter = SuggestedPickLotTypeConverter::class) | |||||
| @Column(name = "type", nullable = false, length = 100) | @Column(name = "type", nullable = false, length = 100) | ||||
| open var type: String? = null | |||||
| open var type: SuggestedPickLotType? = null | |||||
| @JsonBackReference | |||||
| @ManyToOne | @ManyToOne | ||||
| @JoinColumn(name = "stockOutLineId") | @JoinColumn(name = "stockOutLineId") | ||||
| open var stockOutLine: StockOutLine? = null | open var stockOutLine: StockOutLine? = null | ||||
| @NotNull | |||||
| @JsonBackReference | |||||
| @ManyToOne | @ManyToOne | ||||
| @JoinColumn(name = "suggestedLotId", nullable = false) | |||||
| open var suggestedLot: InventoryLot? = null | |||||
| @JoinColumn(name = "suggestedLotLineId", nullable = false) | |||||
| open var suggestedLotLine: InventoryLotLine? = null | |||||
| @NotNull | |||||
| @JsonBackReference | |||||
| @ManyToOne | @ManyToOne | ||||
| @JoinColumn(name = "suggestedLocId", nullable = false) | |||||
| open var suggestedLoc: Warehouse? = null | |||||
| @JoinColumn(name = "pickOrderLineId") | |||||
| open var pickOrderLine: PickOrderLine? = null | |||||
| @Column(name = "qty", precision = 14, scale = 2) | |||||
| open var qty: BigDecimal? = null | |||||
| @Column(name = "pickSuggested") | |||||
| open var pickSuggested: Boolean? = null | |||||
| } | } | ||||
| @@ -0,0 +1,6 @@ | |||||
| package com.ffii.fpsms.modules.stock.enums | |||||
| enum class SuggestedPickLotType(val value: String) { | |||||
| PICK_ORDER ("po"), | |||||
| DELIVERY_ORDER ("do"), | |||||
| } | |||||
| @@ -0,0 +1,18 @@ | |||||
| package com.ffii.fpsms.modules.stock.enums | |||||
| import jakarta.persistence.AttributeConverter | |||||
| import jakarta.persistence.Converter | |||||
| // Suggested Pick Lot Type | |||||
| @Converter(autoApply = true) | |||||
| class SuggestedPickLotTypeConverter : AttributeConverter<SuggestedPickLotType, String>{ | |||||
| override fun convertToDatabaseColumn(status: SuggestedPickLotType?): String? { | |||||
| return status?.value | |||||
| } | |||||
| override fun convertToEntityAttribute(value: String?): SuggestedPickLotType? { | |||||
| return value?.let { v -> | |||||
| SuggestedPickLotType.entries.find { it.value == v } | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,14 @@ | |||||
| -- liquibase formatted sql | |||||
| -- changeset cyril:update_pick_order | |||||
| ALTER TABLE `pick_order` | |||||
| ADD COLUMN `releasedDate` DATETIME NULL DEFAULT NULL AFTER `targetDate`, | |||||
| ADD COLUMN `assignTo` INT NULL DEFAULT NULL AFTER `releasedBy`, | |||||
| ADD INDEX `FK_PICK_ORDER_ON_ASSIGNTO` (`assignTo` ASC) VISIBLE; | |||||
| ; | |||||
| ALTER TABLE `pick_order` | |||||
| ADD CONSTRAINT `FK_PICK_ORDER_ON_ASSIGNTO` | |||||
| FOREIGN KEY (`assignTo`) | |||||
| REFERENCES `user` (`id`) | |||||
| ON DELETE RESTRICT | |||||
| ON UPDATE RESTRICT; | |||||
| @@ -0,0 +1,21 @@ | |||||
| -- liquibase formatted sql | |||||
| -- changeset cyril:update_suggested_pick_lot | |||||
| ALTER TABLE `suggested_pick_lot` | |||||
| DROP FOREIGN KEY `FK_SUGGESTED_PICK_LOT_ON_SUGGESTEDLOTLINEID`; | |||||
| ALTER TABLE `suggested_pick_lot` | |||||
| ADD COLUMN `pickOrderLineId` INT NULL AFTER `suggestedLotLineId`, | |||||
| ADD COLUMN `qty` DECIMAL(14,2) NULL AFTER `pickOrderLineId`, | |||||
| ADD COLUMN `pickSuggested` TINYINT(1) NULL AFTER `qty`, | |||||
| CHANGE COLUMN `suggestedLotLineId` `suggestedLotLineId` INT NULL , | |||||
| ADD INDEX `FK_SUGGESTED_PICK_LOT_ON_PICKORDERLINEID` (`pickOrderLineId` ASC) VISIBLE; | |||||
| ; | |||||
| ALTER TABLE `suggested_pick_lot` | |||||
| ADD CONSTRAINT `FK_SUGGESTED_PICK_LOT_ON_SUGGESTEDLOTLINEID` | |||||
| FOREIGN KEY (`suggestedLotLineId`) | |||||
| REFERENCES `inventory_lot_line` (`id`), | |||||
| ADD CONSTRAINT `FK_SUGGESTED_PICK_LOT_ON_PICKORDERLINEID` | |||||
| FOREIGN KEY (`pickOrderLineId`) | |||||
| REFERENCES `pick_order_line` (`id`) | |||||
| ON DELETE RESTRICT | |||||
| ON UPDATE RESTRICT; | |||||
| @@ -0,0 +1,13 @@ | |||||
| -- liquibase formatted sql | |||||
| -- changeset cyril:update_stock_out_line | |||||
| ALTER TABLE `stock_out_line` | |||||
| ADD COLUMN `pickOrderLineId` INT NULL DEFAULT NULL AFTER `stockOutId`, | |||||
| ADD INDEX `FK_STOCKOUT_LINE_PICKORDERLINE_ID_idx` (`pickOrderLineId` ASC) VISIBLE; | |||||
| ; | |||||
| ALTER TABLE `stock_out_line` | |||||
| ADD CONSTRAINT `FK_STOCKOUT_LINE_PICKORDERLINE_ID` | |||||
| FOREIGN KEY (`pickOrderLineId`) | |||||
| REFERENCES `pick_order_line` (`id`) | |||||
| ON DELETE NO ACTION | |||||
| ON UPDATE NO ACTION; | |||||