apskel-pos-backend/internal/models/inventory_movement.go
Aditya Siregar ebe9999793 Update users
2025-08-03 22:44:27 +07:00

160 lines
4.6 KiB
Go

package models
import (
"time"
"github.com/google/uuid"
)
type InventoryMovementType string
const (
InventoryMovementTypeSale InventoryMovementType = "sale"
InventoryMovementTypePurchase InventoryMovementType = "purchase"
InventoryMovementTypeAdjustment InventoryMovementType = "adjustment"
InventoryMovementTypeReturn InventoryMovementType = "return"
InventoryMovementTypeRefund InventoryMovementType = "refund"
InventoryMovementTypeVoid InventoryMovementType = "void"
InventoryMovementTypeTransferIn InventoryMovementType = "transfer_in"
InventoryMovementTypeTransferOut InventoryMovementType = "transfer_out"
InventoryMovementTypeDamage InventoryMovementType = "damage"
InventoryMovementTypeExpiry InventoryMovementType = "expiry"
)
type InventoryMovementReferenceType string
const (
InventoryMovementReferenceTypeOrder InventoryMovementReferenceType = "order"
InventoryMovementReferenceTypePayment InventoryMovementReferenceType = "payment"
InventoryMovementReferenceTypeRefund InventoryMovementReferenceType = "refund"
InventoryMovementReferenceTypeVoid InventoryMovementReferenceType = "void"
InventoryMovementReferenceTypeManual InventoryMovementReferenceType = "manual"
InventoryMovementReferenceTypeTransfer InventoryMovementReferenceType = "transfer"
InventoryMovementReferenceTypePurchaseOrder InventoryMovementReferenceType = "purchase_order"
)
type InventoryMovement struct {
ID uuid.UUID
OrganizationID uuid.UUID
OutletID uuid.UUID
ItemID uuid.UUID
ItemType string
MovementType InventoryMovementType
Quantity int
PreviousQuantity int
NewQuantity int
UnitCost float64
TotalCost float64
ReferenceType *InventoryMovementReferenceType
ReferenceID *uuid.UUID
OrderID *uuid.UUID
PaymentID *uuid.UUID
UserID uuid.UUID
Reason *string
Notes *string
Metadata map[string]interface{}
CreatedAt time.Time
}
type CreateInventoryMovementRequest struct {
OrganizationID uuid.UUID
OutletID uuid.UUID
ItemID uuid.UUID
ItemType string
MovementType InventoryMovementType
Quantity int
UnitCost float64
ReferenceType *InventoryMovementReferenceType
ReferenceID *uuid.UUID
OrderID *uuid.UUID
PaymentID *uuid.UUID
UserID uuid.UUID
Reason *string
Notes *string
Metadata map[string]interface{}
}
type InventoryMovementResponse struct {
ID uuid.UUID
OrganizationID uuid.UUID
OutletID uuid.UUID
ItemID uuid.UUID
ItemType string
MovementType InventoryMovementType
Quantity int
PreviousQuantity int
NewQuantity int
UnitCost float64
TotalCost float64
ReferenceType *InventoryMovementReferenceType
ReferenceID *uuid.UUID
OrderID *uuid.UUID
PaymentID *uuid.UUID
UserID uuid.UUID
Reason *string
Notes *string
Metadata map[string]interface{}
CreatedAt time.Time
MovementDescription string
}
type ListInventoryMovementsRequest struct {
OrganizationID *uuid.UUID
OutletID *uuid.UUID
ItemID *uuid.UUID
ItemType *string
MovementType *InventoryMovementType
ReferenceType *InventoryMovementReferenceType
ReferenceID *uuid.UUID
OrderID *uuid.UUID
PaymentID *uuid.UUID
UserID *uuid.UUID
DateFrom *time.Time
DateTo *time.Time
Page int
Limit int
}
type ListInventoryMovementsResponse struct {
Movements []InventoryMovementResponse
TotalCount int
Page int
Limit int
TotalPages int
}
func (im *InventoryMovement) IsPositiveMovement() bool {
return im.Quantity > 0
}
func (im *InventoryMovement) IsNegativeMovement() bool {
return im.Quantity < 0
}
func (im *InventoryMovement) GetMovementDescription() string {
switch im.MovementType {
case InventoryMovementTypeSale:
return "Sale"
case InventoryMovementTypePurchase:
return "Purchase"
case InventoryMovementTypeAdjustment:
return "Manual Adjustment"
case InventoryMovementTypeReturn:
return "Return"
case InventoryMovementTypeRefund:
return "Refund"
case InventoryMovementTypeVoid:
return "Void"
case InventoryMovementTypeTransferIn:
return "Transfer In"
case InventoryMovementTypeTransferOut:
return "Transfer Out"
case InventoryMovementTypeDamage:
return "Damage"
case InventoryMovementTypeExpiry:
return "Expiry"
default:
return "Unknown"
}
}