@@ -0,0 +1,63 @@ | |||
package com.ffii.fpsms.modules.master.entity | |||
import com.ffii.core.entity.BaseEntity | |||
import jakarta.persistence.Column | |||
import jakarta.persistence.Entity | |||
import jakarta.persistence.Table | |||
import jakarta.validation.constraints.NotNull | |||
import jakarta.validation.constraints.Size | |||
@Entity | |||
@Table(name = "shop") | |||
open class Shop : BaseEntity<Long>() { | |||
@Size(max = 30) | |||
@NotNull | |||
@Column(name = "code", nullable = false, length = 30) | |||
open var code: String? = null | |||
@Size(max = 30) | |||
@NotNull | |||
@Column(name = "name", nullable = false, length = 30) | |||
open var name: String? = null | |||
@Size(max = 30) | |||
@Column(name = "brNo", length = 30) | |||
open var brNo: String? = null | |||
@Size(max = 30) | |||
@Column(name = "contactNo", length = 30) | |||
open var contactNo: String? = null | |||
@Size(max = 30) | |||
@Column(name = "contactEmail", length = 30) | |||
open var contactEmail: String? = null | |||
@Size(max = 30) | |||
@Column(name = "contactName", length = 30) | |||
open var contactName: String? = null | |||
@Size(max = 30) | |||
@Column(name = "addr1", length = 30) | |||
open var addr1: String? = null | |||
@Size(max = 30) | |||
@Column(name = "addr2", length = 30) | |||
open var addr2: String? = null | |||
@Size(max = 30) | |||
@Column(name = "addr3", length = 30) | |||
open var addr3: String? = null | |||
@Size(max = 30) | |||
@Column(name = "addr4", length = 30) | |||
open var addr4: String? = null | |||
@Size(max = 30) | |||
@Column(name = "district", length = 30) | |||
open var district: String? = null | |||
@Size(max = 10) | |||
@Column(name = "type", length = 10) | |||
open var type: String? = null | |||
} |
@@ -0,0 +1,8 @@ | |||
package com.ffii.fpsms.modules.master.entity | |||
import com.ffii.core.support.AbstractRepository | |||
import org.springframework.stereotype.Repository | |||
@Repository | |||
interface ShopRepository : AbstractRepository<Shop, Long> { | |||
} |
@@ -0,0 +1,32 @@ | |||
package com.ffii.fpsms.modules.master.entity | |||
import com.ffii.core.entity.BaseEntity | |||
import jakarta.persistence.Column | |||
import jakarta.persistence.Entity | |||
import jakarta.persistence.Table | |||
import jakarta.validation.constraints.NotNull | |||
import jakarta.validation.constraints.Size | |||
import java.math.BigDecimal | |||
@Entity | |||
@Table(name = "warehouse") | |||
open class Warehouse : BaseEntity<Long>() { | |||
@Size(max = 30) | |||
@NotNull | |||
@Column(name = "code", nullable = false, length = 30) | |||
open var code: String? = null | |||
@Size(max = 30) | |||
@NotNull | |||
@Column(name = "name", nullable = false, length = 30) | |||
open var name: String? = null | |||
@Size(max = 30) | |||
@NotNull | |||
@Column(name = "description", nullable = false, length = 30) | |||
open var description: String? = null | |||
@NotNull | |||
@Column(name = "capacity", nullable = false, precision = 14, scale = 2) | |||
open var capacity: BigDecimal? = null | |||
} |
@@ -0,0 +1,8 @@ | |||
package com.ffii.fpsms.modules.master.entity | |||
import com.ffii.core.support.AbstractRepository | |||
import org.springframework.stereotype.Repository | |||
@Repository | |||
interface WarehouseRepository : AbstractRepository<Warehouse, Long> { | |||
} |
@@ -2,8 +2,11 @@ package com.ffii.fpsms.modules.stock.entity | |||
import com.ffii.core.entity.BaseEntity | |||
import com.ffii.fpsms.modules.master.entity.Items | |||
import com.ffii.fpsms.modules.master.entity.Warehouse | |||
import jakarta.persistence.* | |||
import jakarta.validation.constraints.NotNull | |||
import jakarta.validation.constraints.Size | |||
import java.math.BigDecimal | |||
import java.time.LocalDate | |||
@Entity | |||
@@ -36,4 +39,16 @@ open class Inventory: BaseEntity<Long>(){ | |||
// @NotNull | |||
@Column(name = "status") | |||
open var status: String? = null | |||
@NotNull | |||
@ManyToOne(fetch = FetchType.LAZY, optional = false) | |||
@JoinColumn(name = "warehouseId", nullable = false) | |||
open var warehouse: Warehouse? = null | |||
@Column(name = "price", precision = 14, scale = 2) | |||
open var price: BigDecimal? = null | |||
@Size(max = 5) | |||
@Column(name = "priceUnit", length = 5) | |||
open var priceUnit: String? = null | |||
} |
@@ -0,0 +1,25 @@ | |||
package com.ffii.fpsms.modules.stock.entity | |||
import com.ffii.core.entity.BaseEntity | |||
import jakarta.persistence.* | |||
import jakarta.validation.constraints.NotNull | |||
import jakarta.validation.constraints.Size | |||
import org.hibernate.annotations.JdbcTypeCode | |||
import org.hibernate.type.SqlTypes | |||
@Entity | |||
@Table(name = "inventory_lot_no") | |||
open class InventoryLotNo : BaseEntity<Long>() { | |||
@NotNull | |||
@ManyToOne(fetch = FetchType.LAZY, optional = false) | |||
@JoinColumn(name = "inventoryId", nullable = false) | |||
open var inventory: Inventory? = null | |||
@Size(max = 30) | |||
@Column(name = "lotNo", length = 30) | |||
open var lotNo: String? = null | |||
@JdbcTypeCode(SqlTypes.JSON) | |||
@Column(name = "qrCodeJson") | |||
open var qrCodeJson: MutableMap<String, Any>? = null | |||
} |
@@ -0,0 +1,8 @@ | |||
package com.ffii.fpsms.modules.stock.entity | |||
import com.ffii.core.support.AbstractRepository | |||
import org.springframework.stereotype.Repository | |||
@Repository | |||
interface InventoryLotNoRepository : AbstractRepository<InventoryLotNo, Long> { | |||
} |
@@ -0,0 +1,33 @@ | |||
package com.ffii.fpsms.modules.stock.entity | |||
import com.ffii.core.entity.BaseEntity | |||
import jakarta.persistence.Column | |||
import jakarta.persistence.Entity | |||
import jakarta.persistence.Table | |||
import jakarta.validation.constraints.NotNull | |||
import jakarta.validation.constraints.Size | |||
import org.hibernate.annotations.JdbcTypeCode | |||
import org.hibernate.type.SqlTypes | |||
@Entity | |||
@Table(name = "m18_data_log") | |||
open class M18DataLog : BaseEntity<Long>() { | |||
@Size(max = 10) | |||
@NotNull | |||
@Column(name = "refType", nullable = false, length = 10) | |||
open var refType: String? = null | |||
@NotNull | |||
@Column(name = "m18Key", nullable = false) | |||
open var m18Key: Int? = null | |||
@NotNull | |||
@JdbcTypeCode(SqlTypes.JSON) | |||
@Column(name = "dataLog", nullable = false) | |||
open var dataLog: MutableMap<String, Any>? = null | |||
@Size(max = 5) | |||
@NotNull | |||
@Column(name = "status", nullable = false, length = 5) | |||
open var status: String? = null | |||
} |
@@ -0,0 +1,8 @@ | |||
package com.ffii.fpsms.modules.stock.entity | |||
import com.ffii.core.support.AbstractRepository | |||
import org.springframework.stereotype.Repository | |||
@Repository | |||
interface M18DataLogRepository : AbstractRepository<M18DataLog, Long> { | |||
} |
@@ -0,0 +1,50 @@ | |||
package com.ffii.fpsms.modules.stock.entity | |||
import com.ffii.core.entity.BaseEntity | |||
import com.ffii.fpsms.modules.master.entity.Shop | |||
import com.ffii.fpsms.modules.stock.entity.enum.StockInStatus | |||
import jakarta.persistence.* | |||
import jakarta.validation.constraints.NotNull | |||
import jakarta.validation.constraints.Size | |||
import java.time.Instant | |||
import java.time.LocalDate | |||
import java.time.LocalDateTime | |||
@Entity | |||
@Table(name = "stock_in") | |||
open class StockIn : BaseEntity<Long>() { | |||
@Size(max = 30) | |||
@NotNull | |||
@Column(name = "code", nullable = false, length = 30) | |||
open var code: String? = null | |||
@ManyToOne(fetch = FetchType.LAZY, optional = false) | |||
@JoinColumn(name = "supplierId") | |||
open var supplier: Shop? = null | |||
@ManyToOne(fetch = FetchType.LAZY, optional = false) | |||
@JoinColumn(name = "shopId") | |||
open var shop: Shop? = null | |||
@Column(name = "refId") | |||
open var refId: Int? = null | |||
@Size(max = 5) | |||
@Column(name = "refType", length = 5) | |||
open var refType: String? = null | |||
@Column(name = "orderDate") | |||
open var orderDate: LocalDateTime? = null | |||
@Column(name = "estimatedCompleteDate") | |||
open var estimatedCompleteDate: LocalDate? = null | |||
@Column(name = "completeDate") | |||
open var completeDate: LocalDateTime? = null | |||
@Size(max = 10) | |||
@NotNull | |||
@Column(name = "status", nullable = false, length = 10) | |||
@Enumerated(EnumType.STRING) | |||
open var status: StockInStatus? = null | |||
} |
@@ -0,0 +1,64 @@ | |||
package com.ffii.fpsms.modules.stock.entity | |||
import com.ffii.core.entity.BaseEntity | |||
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 | |||
import jakarta.persistence.* | |||
import jakarta.validation.constraints.NotNull | |||
import jakarta.validation.constraints.Size | |||
import java.math.BigDecimal | |||
import java.time.Instant | |||
@Entity | |||
@Table(name = "stock_in_line") | |||
open class StockInLine : BaseEntity<Long>() { | |||
@NotNull | |||
@ManyToOne(fetch = FetchType.LAZY, optional = false) | |||
@JoinColumn(name = "itemId", nullable = false) | |||
open var item: Items? = null | |||
@Size(max = 20) | |||
@NotNull | |||
@Column(name = "itemNo", nullable = false, length = 20) | |||
open var itemNo: String? = null | |||
@NotNull | |||
@ManyToOne(fetch = FetchType.LAZY, optional = false) | |||
@JoinColumn(name = "stockInId", nullable = false) | |||
open var stockIn: StockIn? = null | |||
@Column(name = "demandQty", precision = 14, scale = 2) | |||
open var demandQty: BigDecimal? = null | |||
@Column(name = "acceptedQty", precision = 14, scale = 2) | |||
open var acceptedQty: BigDecimal? = null | |||
@Column(name = "price", precision = 14, scale = 2) | |||
open var price: BigDecimal? = null | |||
@Size(max = 5) | |||
@Column(name = "priceUnit", length = 5) | |||
open var priceUnit: String? = null | |||
@Column(name = "productDate") | |||
open var productDate: Instant? = null | |||
@Column(name = "shelfLifeDate") | |||
open var shelfLifeDate: Instant? = null | |||
@Size(max = 10) | |||
@NotNull | |||
@Column(name = "status", nullable = false, length = 10) | |||
@Enumerated(EnumType.STRING) | |||
open var status: StockInLineStatus? = null | |||
@ManyToOne(fetch = FetchType.LAZY) | |||
@JoinColumn(name = "userId") | |||
open var user: User? = null | |||
@NotNull | |||
@ManyToOne(fetch = FetchType.LAZY, optional = false) | |||
@JoinColumn(name = "m18DataLogId", nullable = false) | |||
open var m18DataLog: M18DataLog? = null | |||
} |
@@ -0,0 +1,8 @@ | |||
package com.ffii.fpsms.modules.stock.entity | |||
import com.ffii.core.support.AbstractRepository | |||
import org.springframework.stereotype.Repository | |||
@Repository | |||
interface StockInLineRepository : AbstractRepository<StockInLine, Long> { | |||
} |
@@ -0,0 +1,8 @@ | |||
package com.ffii.fpsms.modules.stock.entity | |||
import com.ffii.core.support.AbstractRepository | |||
import org.springframework.stereotype.Repository | |||
@Repository | |||
interface StockInRepository : AbstractRepository<StockIn, Long> { | |||
} |
@@ -0,0 +1,10 @@ | |||
package com.ffii.fpsms.modules.stock.entity.enum | |||
enum class StockInLineStatus(val status: String) { | |||
PENDING("pending"), | |||
QC1("qc1"), | |||
QC2("qc2"), | |||
QC3("qc3"), | |||
RECEIVING("receiving"), | |||
COMPLETED("completed") | |||
} |
@@ -0,0 +1,7 @@ | |||
package com.ffii.fpsms.modules.stock.entity.enum | |||
enum class StockInStatus(val status: String) { | |||
PENDING("pending"), | |||
RECEIVING("receiving"), | |||
COMPLETED("completed") | |||
} |
@@ -0,0 +1,43 @@ | |||
--liquibase formatted sql | |||
--changeset cyril:master data for shop and warehouse | |||
CREATE TABLE `shop` | |||
( | |||
`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(30) NOT NULL, | |||
`name` VARCHAR(30) NOT NULL, | |||
`brNo` VARCHAR(30) NULL, | |||
`contactNo` VARCHAR(30) NULL, | |||
`contactEmail` VARCHAR(30) NULL, | |||
`contactName` VARCHAR(30) NULL, | |||
`addr1` VARCHAR(30) NULL, | |||
`addr2` VARCHAR(30) NULL, | |||
`addr3` VARCHAR(30) NULL, | |||
`addr4` VARCHAR(30) NULL, | |||
`district` VARCHAR(30) NULL, | |||
`type` VARCHAR(10) NULL, | |||
`m18Id` INT NOT NULL, | |||
CONSTRAINT pk_shop PRIMARY KEY (id) | |||
); | |||
CREATE TABLE `warehouse` | |||
( | |||
`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(30) NOT NULL, | |||
`name` VARCHAR(30) NOT NULL, | |||
`description` VARCHAR(30) NOT NULL, | |||
`capacity` DECIMAL(14, 2) NOT NULL, | |||
CONSTRAINT pk_warehouse PRIMARY KEY (id) | |||
); |
@@ -0,0 +1,18 @@ | |||
--liquibase formatted sql | |||
--changeset cyril:m18 data log | |||
CREATE TABLE `m18_data_log` | |||
( | |||
`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', | |||
`refType` VARCHAR(10) NOT NULL, | |||
`m18Key` INT NOT NULL, | |||
`dataLog` JSON NOT NULL, | |||
`status` VARCHAR(5) NOT NULL, | |||
CONSTRAINT pk_m18_data_log PRIMARY KEY (id) | |||
); |
@@ -0,0 +1,55 @@ | |||
--liquibase formatted sql | |||
--changeset cyril:stock in | |||
CREATE TABLE `stock_in` | |||
( | |||
`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(30) NOT NULL, | |||
`supplierId` INT NULL, | |||
`shopId` INT NULL, | |||
`refId` INT NULL, | |||
`refType` VARCHAR(5) NULL, | |||
`orderDate` DATETIME NULL, | |||
`estimatedCompleteDate` DATETIME NULL, | |||
`completeDate` DATETIME NULL, | |||
`status` VARCHAR(10) NOT NULL DEFAULT 'pending', | |||
`m18DataLogId` INT NOT NULL, | |||
CONSTRAINT pk_stock_in PRIMARY KEY (id), | |||
CONSTRAINT FK_STOCK_IN_ON_SUPPLIERID FOREIGN KEY (supplierId) REFERENCES shop (id), | |||
CONSTRAINT FK_STOCK_IN_ON_SHOPID FOREIGN KEY (shopId) REFERENCES shop (id), | |||
CONSTRAINT FK_STOCK_IN_ON_M18DATALOGID FOREIGN KEY (m18DataLogId) REFERENCES m18_data_log (id) | |||
); | |||
CREATE TABLE `stock_in_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', | |||
`itemId` INT NOT NULL, | |||
`itemNo` VARCHAR(20) NOT NULL, | |||
`stockInId` INT NOT NULL, | |||
`demandQty` DECIMAL(14, 2) NULL, | |||
`acceptedQty` DECIMAL(14, 2) NULL, | |||
`price` DECIMAL(14, 2) NULL, | |||
`priceUnit` VARCHAR(5) NULL, | |||
`productDate` DATETIME NULL, | |||
`shelfLifeDate` DATETIME NULL, | |||
`status` VARCHAR(10) NOT NULL DEFAULT 'pending', | |||
`userId` INT NULL, | |||
`m18DataLogId` INT NOT NULL, | |||
CONSTRAINT pk_stock_in_line PRIMARY KEY (id), | |||
CONSTRAINT FK_STOCK_IN_LINE_ON_ITEMID FOREIGN KEY (itemId) REFERENCES items (id), | |||
CONSTRAINT FK_STOCK_IN_LINE_ON_STOCKINID FOREIGN KEY (stockInId) REFERENCES stock_in (id), | |||
CONSTRAINT FK_STOCK_IN_LINE_ON_USERID FOREIGN KEY (userId) REFERENCES user (id), | |||
CONSTRAINT FK_STOCK_IN_LINE_ON_M18DATALOGID FOREIGN KEY (m18DataLogId) REFERENCES m18_data_log (id) | |||
); |
@@ -0,0 +1,25 @@ | |||
--liquibase formatted sql | |||
--changeset cyril:inventory | |||
ALTER TABLE `inventory` | |||
ADD COLUMN `price` DECIMAL(14, 2) NULL AFTER `qty`, | |||
ADD COLUMN `priceUnit` VARCHAR(5) NULL AFTER `price`, | |||
ADD COLUMN `warehouseId` INT NOT NULL AFTER `stockInLineId`, | |||
ADD CONSTRAINT FK_INVENTORY_STOCKINLINEID FOREIGN KEY (stockInLineId) REFERENCES stock_in_line (id), | |||
ADD CONSTRAINT FK_INVENTORY_WAREHOUSEID FOREIGN KEY (warehouseId) REFERENCES warehouse (id); | |||
CREATE TABLE `inventory_lot_no` | |||
( | |||
`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', | |||
`inventoryId` INT NOT NULL, | |||
`lotNo` VARCHAR(30) NULL, | |||
`qrCodeJson` JSON NULL, | |||
CONSTRAINT pk_inventory_lot_no PRIMARY KEY (id), | |||
CONSTRAINT FK_INVENTORY_LOT_NO_INVENTORYID FOREIGN KEY (inventoryId) REFERENCES inventory (id) | |||
); |