feat(entities): Add new entities for inventory management and update migration scripts
This commit is contained in:
parent
46706e655a
commit
189994bf9a
|
|
@ -32,6 +32,7 @@ type Authorization struct {
|
|||
type Audit struct {
|
||||
CreatedBy uuid.UUID `gorm:"type:uuid;not null" json:"created_by"`
|
||||
UpdatedBy uuid.UUID `gorm:"type:uuid;not null" json:"updated_by"`
|
||||
DeletedBy uuid.UUID `gorm:"type:uuid;" json:"deleted_by,omitempty"`
|
||||
}
|
||||
|
||||
// TimestampWithAudit menggabungkan timestamp dan audit
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
package entities
|
||||
|
||||
import "github.com/google/uuid"
|
||||
|
||||
type InventoryStorageEntity struct {
|
||||
ID uuid.UUID `gorm:"primaryKey;type:uuid;default:uuid_generate_v4()" json:"id"`
|
||||
OnHandQuantity float64 `gorm:"type:numeric;not null;default:0" json:"on_hand_quantity"`
|
||||
AvailableQuantity float64 `gorm:"type:numeric;not null;default:0" json:"available_quantity"`
|
||||
|
||||
ProductID uuid.UUID `gorm:"type:uuid;index;" json:"product_id"`
|
||||
AisleID uuid.UUID `gorm:"type:uuid;index;" json:"aisle_id"`
|
||||
UomID uuid.UUID `gorm:"type:uuid;index;" json:"uom_id"`
|
||||
ClientID uuid.UUID `gorm:"type:uuid;index;" json:"client_id"`
|
||||
InvRequestID uuid.UUID `gorm:"type:uuid;index;" json:"inv_request_id"`
|
||||
InvReceiptID uuid.UUID `gorm:"type:uuid;index;" json:"inv_receipt_id"`
|
||||
|
||||
Product MProductEntity `gorm:"foreignKey:ProductID;references:ID"`
|
||||
Aisle MAisleEntity `gorm:"foreignKey:AisleID;references:ID"`
|
||||
Uom MUomEntity `gorm:"foreignKey:UomID;references:ID"`
|
||||
Client M_Client `gorm:"foreignKey:ClientID;references:ID"`
|
||||
InvRequest TInventoryRequestEntity `gorm:"foreignKey:InvRequestID;references:ID"`
|
||||
InvReceipt TInventoryReceiptEntity `gorm:"foreignKey:InvReceiptID;references:ID"`
|
||||
|
||||
FullAuditTrail
|
||||
}
|
||||
|
||||
func (InventoryStorageEntity) TableName() string {
|
||||
return "m_inventory_storages"
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
package entities
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type InventoryTransactionEntity struct {
|
||||
ID uuid.UUID `gorm:"primaryKey;type:uuid;default:uuid_generate_v4()" json:"id"`
|
||||
TransactionDate time.Time `gorm:"type:timestamp;" json:"transaction_date"`
|
||||
TransactionType string `gorm:"type:varchar(100);" json:"transaction_type"`
|
||||
|
||||
ProductID uuid.UUID `gorm:"type:uuid;index;" json:"product_id"`
|
||||
AisleID uuid.UUID `gorm:"type:uuid;index;" json:"aisle_id"`
|
||||
ClientID uuid.UUID `gorm:"type:uuid;index;" json:"client_id"`
|
||||
InvReceiptID uuid.UUID `gorm:"type:uuid;index;" json:"inv_receipt_id"`
|
||||
InvIssueID uuid.UUID `gorm:"type:uuid;index;" json:"inv_issue_id"`
|
||||
InvMoveID uuid.UUID `gorm:"type:uuid;index;" json:"inv_move_id"`
|
||||
|
||||
Product MProductEntity `gorm:"foreignKey:ProductID;references:ID"`
|
||||
Aisle MAisleEntity `gorm:"foreignKey:AisleID;references:ID"`
|
||||
Client M_Client `gorm:"foreignKey:ClientID;references:ID"`
|
||||
InvReceipt TInventoryReceiptEntity `gorm:"foreignKey:InvReceiptID;references:ID"`
|
||||
Issue TInventoryIssueEntity `gorm:"foreignKey:InvIssueID;references:ID"`
|
||||
|
||||
FullAuditTrail
|
||||
}
|
||||
|
||||
func (InventoryTransactionEntity) TableName() string {
|
||||
return "m_inventory_transactions"
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
package entities
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type TAssignmentEntity struct {
|
||||
ID uuid.UUID `gorm:"primaryKey;type:uuid;default:uuid_generate_v4()" json:"id"`
|
||||
DocumentType string `gorm:"type:varchar(100);" json:"document_type"`
|
||||
|
||||
DocumentID uuid.UUID `gorm:"type:uuid;index;" json:"document_id"`
|
||||
UserID uuid.UUID `gorm:"type:uuid;index;" json:"user_id"`
|
||||
RoleID uuid.UUID `gorm:"type:uuid;index;" json:"role_id"`
|
||||
ClientID uuid.UUID `gorm:"type:uuid;index;" json:"client_id"`
|
||||
|
||||
// Document TInventoryRequestEntity `gorm:"foreignKey:DocumentID;references:ID"`
|
||||
User M_User `gorm:"foreignKey:UserID;references:ID"`
|
||||
Role M_Role `gorm:"foreignKey:RoleID;references:ID"`
|
||||
Client M_Client `gorm:"foreignKey:ClientID;references:ID"`
|
||||
|
||||
FullAuditTrail
|
||||
}
|
||||
|
||||
func (TAssignmentEntity) TableName() string {
|
||||
return "t_assignments"
|
||||
}
|
||||
|
||||
// Contoh fungsi switch-case untuk ambil dokumen
|
||||
func GetDocumentByAssignment(db *gorm.DB, assignment TAssignmentEntity) (interface{}, error) {
|
||||
switch assignment.DocumentType {
|
||||
// case "SOHeader":
|
||||
// var so SOHeader
|
||||
// if err := db.First(&so, "id = ?", assignment.DocumentID).Error; err != nil {
|
||||
// return nil, err
|
||||
// }
|
||||
// return so, nil
|
||||
// case "GRHeader":
|
||||
// var gr GRHeader
|
||||
// if err := db.First(&gr, "id = ?", assignment.DocumentID).Error; err != nil {
|
||||
// return nil, err
|
||||
// }
|
||||
// return gr, nil
|
||||
// Tambahkan case lain sesuai kebutuhan
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown document type: %s", assignment.DocumentType)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package entities
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type TInventoryIssueEntity struct {
|
||||
ID uuid.UUID `gorm:"primaryKey;type:uuid;default:uuid_generate_v4()" json:"id"`
|
||||
DocumentNumber string `gorm:"type:varchar(100);" json:"document_number"`
|
||||
DocumentDate time.Time `gorm:"type:timestamp;" json:"document_date"`
|
||||
DueDate time.Time `gorm:"type:timestamp;" json:"due_date"`
|
||||
Status string `gorm:"type:varchar(50);" json:"status"`
|
||||
|
||||
IssuerBy uuid.UUID `gorm:"type:uuid;index;" json:"issuer_by"`
|
||||
InvRequestID uuid.UUID `gorm:"type:uuid;index;" json:"inv_request_id"`
|
||||
ClientID uuid.UUID `gorm:"type:uuid;index;" json:"client_id"`
|
||||
|
||||
Issuer M_User `gorm:"foreignKey:IssuerBy;references:ID"`
|
||||
InvRequest TInventoryRequestEntity `gorm:"foreignKey:InvRequestID;references:ID"`
|
||||
Client M_Client `gorm:"foreignKey:ClientID;references:ID"`
|
||||
|
||||
FullAuditTrail
|
||||
}
|
||||
|
||||
func (TInventoryIssueEntity) TableName() string {
|
||||
return "t_inventory_issues"
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
package entities
|
||||
|
||||
import (
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type TInventoryIssueLineEntity struct {
|
||||
ID uuid.UUID `gorm:"primaryKey;type:uuid;default:uuid_generate_v4()" json:"id"`
|
||||
CurrentStock float64 `gorm:"type:numeric;default:0" json:"current_stock"`
|
||||
MinStock float64 `gorm:"type:numeric;default:0" json:"min_stock"`
|
||||
RequestQuantity float64 `gorm:"type:numeric;default:0" json:"request_quantity"`
|
||||
IssuedQuantity float64 `gorm:"type:numeric;default:0" json:"issued_quantity"`
|
||||
Remarks string `gorm:"type:text;" json:"remarks"`
|
||||
|
||||
IssueID uuid.UUID `gorm:"type:uuid;index;" json:"issue_id"`
|
||||
ProductID uuid.UUID `gorm:"type:uuid;index;" json:"product_id"`
|
||||
WarehouseID uuid.UUID `gorm:"type:uuid;index;" json:"warehouse_id"`
|
||||
ClientID uuid.UUID `gorm:"type:uuid;index;" json:"client_id"`
|
||||
|
||||
Product MProductEntity `gorm:"foreignKey:ProductID;references:ID"`
|
||||
Issue TInventoryIssueEntity `gorm:"foreignKey:IssueID;references:ID"`
|
||||
Warehouse MWarehouseEntity `gorm:"foreignKey:WarehouseID;references:ID"`
|
||||
Client M_Client `gorm:"foreignKey:ClientID;references:ID"`
|
||||
|
||||
FullAuditTrail
|
||||
}
|
||||
|
||||
func (TInventoryIssueLineEntity) TableName() string {
|
||||
return "t_inventory_issue_lines"
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package entities
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type TInventoryReceiptEntity struct {
|
||||
ID uuid.UUID `gorm:"primaryKey;type:uuid;default:uuid_generate_v4()" json:"id"`
|
||||
ReferenceNumber string `gorm:"type:varchar(100);" json:"reference_number"`
|
||||
DocumentNumber string `gorm:"type:varchar(100);" json:"document_number"`
|
||||
ReceiptDate time.Time `gorm:"type:timestamp;" json:"receipt_date"`
|
||||
Source string `gorm:"type:varchar(50);" json:"source"`
|
||||
QrCodeFile string `gorm:"type:text;" json:"qr_code_file"`
|
||||
|
||||
ClientID uuid.UUID `gorm:"type:uuid;index;" json:"client_id"`
|
||||
|
||||
Client M_Client `gorm:"foreignKey:ClientID;references:ID"`
|
||||
|
||||
FullAuditTrail
|
||||
}
|
||||
|
||||
func (TInventoryReceiptEntity) TableName() string {
|
||||
return "t_inventory_receipts"
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package entities
|
||||
|
||||
import (
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type TInventoryReceiptLineEntity struct {
|
||||
ID uuid.UUID `gorm:"primaryKey;type:uuid;default:uuid_generate_v4()" json:"id"`
|
||||
Quantity float64 `gorm:"type:numeric;not null;default:0" json:"quantity"`
|
||||
BatchNumber string `gorm:"type:varchar(100);" json:"batch_number"`
|
||||
RepackingSuggestion string `gorm:"type:text;" json:"repacking_suggestion"`
|
||||
|
||||
RepackUomID uuid.UUID `gorm:"type:uuid;index;" json:"repack_uom_id"`
|
||||
InvReceiptID uuid.UUID `gorm:"type:uuid;index;" json:"inv_receipt_id"`
|
||||
ProductID uuid.UUID `gorm:"type:uuid;index;" json:"product_id"`
|
||||
ClientID uuid.UUID `gorm:"type:uuid;index;" json:"client_id"`
|
||||
|
||||
Product MProductEntity `gorm:"foreignKey:ProductID;references:ID"`
|
||||
RepackUom MUomEntity `gorm:"foreignKey:RepackUomID;references:ID"`
|
||||
InvReceipt TInventoryReceiptEntity `gorm:"foreignKey:InvReceiptID;references:ID"`
|
||||
Client M_Client `gorm:"foreignKey:ClientID;references:ID"`
|
||||
|
||||
FullAuditTrail
|
||||
}
|
||||
|
||||
func (TInventoryReceiptLineEntity) TableName() string {
|
||||
return "t_inventory_receipt_lines"
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package entities
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type TInventoryRequestEntity struct {
|
||||
ID uuid.UUID `gorm:"primaryKey;type:uuid;default:uuid_generate_v4()" json:"id"`
|
||||
ReferenceNumber string `gorm:"type:varchar(100);" json:"reference_number"`
|
||||
DocumentNumber string `gorm:"type:varchar(100);" json:"document_number"`
|
||||
DueDate time.Time `gorm:"type:timestamp;" json:"due_date"`
|
||||
RequestType string `gorm:"type:varchar(50);" json:"request_type"`
|
||||
Note string `gorm:"type:text;" json:"note"`
|
||||
Status string `gorm:"type:varchar(50);" json:"status"`
|
||||
|
||||
ClientID uuid.UUID `gorm:"type:uuid;index;" json:"client_id"`
|
||||
|
||||
Client M_Client `gorm:"foreignKey:ClientID;references:ID"`
|
||||
|
||||
FullAuditTrail
|
||||
}
|
||||
|
||||
func (TInventoryRequestEntity) TableName() string {
|
||||
return "t_inventory_requests"
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package entities
|
||||
|
||||
import (
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type TInventoryRequestLineEntity struct {
|
||||
ID uuid.UUID `gorm:"primaryKey;type:uuid;default:uuid_generate_v4()" json:"id"`
|
||||
Quantity float64 `gorm:"type:numeric;not null;default:0" json:"quantity"`
|
||||
|
||||
ProductID uuid.UUID `gorm:"type:uuid;index;" json:"product_id"`
|
||||
InvRequestID uuid.UUID `gorm:"type:uuid;index;" json:"inv_request_id"`
|
||||
ClientID uuid.UUID `gorm:"type:uuid;index;" json:"client_id"`
|
||||
|
||||
Product MProductEntity `gorm:"foreignKey:ProductID;references:ID"`
|
||||
InvRequest TInventoryRequestEntity `gorm:"foreignKey:InvRequestID;references:ID"`
|
||||
Client M_Client `gorm:"foreignKey:ClientID;references:ID"`
|
||||
|
||||
FullAuditTrail
|
||||
}
|
||||
|
||||
func (TInventoryRequestLineEntity) TableName() string {
|
||||
return "t_inventory_request_lines"
|
||||
}
|
||||
|
|
@ -28,6 +28,15 @@ func Migrate(db *gorm.DB) error {
|
|||
&entities.MWarehouseEntity{},
|
||||
&entities.MZonaEntity{},
|
||||
&entities.MAisleEntity{},
|
||||
&entities.TAssignmentEntity{},
|
||||
&entities.TInventoryReceiptEntity{},
|
||||
&entities.TInventoryReceiptLineEntity{},
|
||||
// &entities.TInventoryRequestEntity{},
|
||||
// &entities.TInventoryRequestLineEntity{},
|
||||
// &entities.TInventoryIssueEntity{},
|
||||
// &entities.TInventoryIssueLineEntity{},
|
||||
// &entities.InventoryTransactionEntity{},
|
||||
// &entities.InventoryStorageEntity{},
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -56,9 +65,18 @@ func MigrateFresh(db *gorm.DB) error {
|
|||
// &entities.MUomEntity{},
|
||||
// &entities.MVendorEntity{},
|
||||
// &entities.MCrossReferenceEntity{},
|
||||
&entities.MWarehouseEntity{},
|
||||
&entities.MZonaEntity{},
|
||||
&entities.MAisleEntity{},
|
||||
// &entities.MWarehouseEntity{},
|
||||
// &entities.MZonaEntity{},
|
||||
// &entities.MAisleEntity{},
|
||||
&entities.TAssignmentEntity{},
|
||||
&entities.TInventoryReceiptEntity{},
|
||||
&entities.TInventoryReceiptLineEntity{},
|
||||
&entities.TInventoryRequestEntity{},
|
||||
&entities.TInventoryRequestLineEntity{},
|
||||
&entities.TInventoryIssueEntity{},
|
||||
&entities.TInventoryIssueLineEntity{},
|
||||
&entities.InventoryTransactionEntity{},
|
||||
&entities.InventoryStorageEntity{},
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue