diff --git a/database/entities/common.go b/database/entities/common.go index e7f977e..bc293d7 100644 --- a/database/entities/common.go +++ b/database/entities/common.go @@ -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 diff --git a/database/entities/inventory_storage_entity.go b/database/entities/inventory_storage_entity.go new file mode 100644 index 0000000..e668e9c --- /dev/null +++ b/database/entities/inventory_storage_entity.go @@ -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" +} diff --git a/database/entities/inventory_transaction_entity.go b/database/entities/inventory_transaction_entity.go new file mode 100644 index 0000000..23cff41 --- /dev/null +++ b/database/entities/inventory_transaction_entity.go @@ -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" +} diff --git a/database/entities/t_assignment_entity.go b/database/entities/t_assignment_entity.go new file mode 100644 index 0000000..c2a1822 --- /dev/null +++ b/database/entities/t_assignment_entity.go @@ -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) + } +} diff --git a/database/entities/t_inventory_issue_entity.go b/database/entities/t_inventory_issue_entity.go new file mode 100644 index 0000000..7fdcd72 --- /dev/null +++ b/database/entities/t_inventory_issue_entity.go @@ -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" +} diff --git a/database/entities/t_inventory_issue_line_entity.go b/database/entities/t_inventory_issue_line_entity.go new file mode 100644 index 0000000..a3e2c03 --- /dev/null +++ b/database/entities/t_inventory_issue_line_entity.go @@ -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" +} diff --git a/database/entities/t_inventory_receipt_entity.go b/database/entities/t_inventory_receipt_entity.go new file mode 100644 index 0000000..a4f0bad --- /dev/null +++ b/database/entities/t_inventory_receipt_entity.go @@ -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" +} diff --git a/database/entities/t_inventory_receipt_line_entity.go b/database/entities/t_inventory_receipt_line_entity.go new file mode 100644 index 0000000..1d31fbc --- /dev/null +++ b/database/entities/t_inventory_receipt_line_entity.go @@ -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" +} diff --git a/database/entities/t_inventory_request_entity.go b/database/entities/t_inventory_request_entity.go new file mode 100644 index 0000000..2425576 --- /dev/null +++ b/database/entities/t_inventory_request_entity.go @@ -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" +} diff --git a/database/entities/t_inventory_request_line_entity.go b/database/entities/t_inventory_request_line_entity.go new file mode 100644 index 0000000..db81035 --- /dev/null +++ b/database/entities/t_inventory_request_line_entity.go @@ -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" +} diff --git a/database/migration.go b/database/migration.go index 6fb3457..44acc47 100644 --- a/database/migration.go +++ b/database/migration.go @@ -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 }