diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrder.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrder.kt index b4b5800..3a266fc 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrder.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrder.kt @@ -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.pickOrder.enums.PickOrderStatus 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 jakarta.persistence.* import jakarta.validation.constraints.NotNull import jakarta.validation.constraints.Size import org.hibernate.annotations.Formula +import java.time.Instant import java.time.LocalDateTime @Entity @@ -41,8 +44,9 @@ open class PickOrder: BaseEntity() { open var completeDate: LocalDateTime? = null @Size(max = 30) + @Convert(converter = PickOrderTypeConverter::class) @Column(name = "type", length = 30) - open var type: String? = null + open var type: PickOrderType? = null @NotNull @Convert(converter = PickOrderStatusConverter::class) @@ -56,4 +60,11 @@ open class PickOrder: BaseEntity() { @JsonManagedReference @OneToMany(mappedBy = "pickOrder", cascade = [CascadeType.ALL], orphanRemoval = true) open var pickOrderLines: MutableList = mutableListOf() + + @Column(name = "releasedDate") + open var releasedDate: LocalDateTime? = null + + @ManyToOne + @JoinColumn(name = "assignTo", referencedColumnName = "id") + open var assignTo: User? = null } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderLine.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderLine.kt index 8bfccd1..6b2004b 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderLine.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderLine.kt @@ -1,8 +1,12 @@ 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.fpsms.modules.master.entity.Items 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.validation.constraints.NotNull import jakarta.validation.constraints.Size @@ -12,6 +16,7 @@ import java.math.BigDecimal @Table(name = "pick_order_line") open class PickOrderLine : BaseEntity() { + @JsonBackReference @NotNull @ManyToOne @JoinColumn(name = "poId", nullable = false) @@ -35,4 +40,12 @@ open class PickOrderLine : BaseEntity() { @NotNull @Column(name = "status", nullable = false, length = 30) open var status: String? = null + + @JsonManagedReference + @OneToMany(mappedBy = "pickOrderLine", cascade = [CascadeType.ALL], orphanRemoval = true) + open var stockOutLines: MutableList = mutableListOf() + + @JsonManagedReference + @OneToMany(mappedBy = "pickOrderLine", cascade = [CascadeType.ALL], orphanRemoval = true) + open var suggestedPickLots: MutableList = mutableListOf() } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/stock/entity/StockOutLine.kt b/src/main/java/com/ffii/fpsms/modules/stock/entity/StockOutLine.kt index 94f6a4b..1527648 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/entity/StockOutLine.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/entity/StockOutLine.kt @@ -1,7 +1,9 @@ package com.ffii.fpsms.modules.stock.entity +import com.fasterxml.jackson.annotation.JsonBackReference import com.ffii.core.entity.BaseEntity import com.ffii.fpsms.modules.master.entity.Items +import com.ffii.fpsms.modules.pickOrder.entity.PickOrderLine import jakarta.persistence.* import jakarta.validation.constraints.NotNull import java.time.LocalDateTime @@ -37,4 +39,9 @@ open class StockOutLine: BaseEntity() { @Column(name = "pickerId") open var pickerId: Long? = null + + @JsonBackReference + @ManyToOne + @JoinColumn(name = "pickOrderLineId") + open var pickOrderLine: PickOrderLine? = null } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/stock/entity/SuggestedPickLot.kt b/src/main/java/com/ffii/fpsms/modules/stock/entity/SuggestedPickLot.kt index 7ccdc8e..db087e9 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/entity/SuggestedPickLot.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/entity/SuggestedPickLot.kt @@ -1,30 +1,42 @@ package com.ffii.fpsms.modules.stock.entity +import com.fasterxml.jackson.annotation.JsonBackReference import com.ffii.core.entity.BaseEntity 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.validation.constraints.NotNull import jakarta.validation.constraints.Size +import java.math.BigDecimal @Entity @Table(name = "suggested_pick_lot") open class SuggestedPickLot: BaseEntity() { - @Size(max = 100) @NotNull + @Convert(converter = SuggestedPickLotTypeConverter::class) @Column(name = "type", nullable = false, length = 100) - open var type: String? = null + open var type: SuggestedPickLotType? = null + @JsonBackReference @ManyToOne @JoinColumn(name = "stockOutLineId") open var stockOutLine: StockOutLine? = null - @NotNull + @JsonBackReference @ManyToOne - @JoinColumn(name = "suggestedLotId", nullable = false) - open var suggestedLot: InventoryLot? = null + @JoinColumn(name = "suggestedLotLineId", nullable = false) + open var suggestedLotLine: InventoryLotLine? = null - @NotNull + @JsonBackReference @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 } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/stock/enums/SuggestedPickLotEnum.kt b/src/main/java/com/ffii/fpsms/modules/stock/enums/SuggestedPickLotEnum.kt new file mode 100644 index 0000000..980ead9 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/stock/enums/SuggestedPickLotEnum.kt @@ -0,0 +1,6 @@ +package com.ffii.fpsms.modules.stock.enums + +enum class SuggestedPickLotType(val value: String) { + PICK_ORDER ("po"), + DELIVERY_ORDER ("do"), +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/stock/enums/SuggestedPickLotEnumConverter.kt b/src/main/java/com/ffii/fpsms/modules/stock/enums/SuggestedPickLotEnumConverter.kt new file mode 100644 index 0000000..59e497b --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/stock/enums/SuggestedPickLotEnumConverter.kt @@ -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{ + 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 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/20250619_01_cyril/01_update_pick_order.sql b/src/main/resources/db/changelog/changes/20250619_01_cyril/01_update_pick_order.sql new file mode 100644 index 0000000..d736e36 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20250619_01_cyril/01_update_pick_order.sql @@ -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; diff --git a/src/main/resources/db/changelog/changes/20250619_01_cyril/02_update_suggested_pick_lot.sql b/src/main/resources/db/changelog/changes/20250619_01_cyril/02_update_suggested_pick_lot.sql new file mode 100644 index 0000000..993556e --- /dev/null +++ b/src/main/resources/db/changelog/changes/20250619_01_cyril/02_update_suggested_pick_lot.sql @@ -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; diff --git a/src/main/resources/db/changelog/changes/20250620_01_cyril/01_update_stock_out_line.sql b/src/main/resources/db/changelog/changes/20250620_01_cyril/01_update_stock_out_line.sql new file mode 100644 index 0000000..1c81be0 --- /dev/null +++ b/src/main/resources/db/changelog/changes/20250620_01_cyril/01_update_stock_out_line.sql @@ -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;