156 lines
4.5 KiB
Go
156 lines
4.5 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
|
||
|
|
ProductID uuid.UUID
|
||
|
|
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
|
||
|
|
ProductID uuid.UUID
|
||
|
|
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
|
||
|
|
ProductID uuid.UUID
|
||
|
|
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
|
||
|
|
ProductID *uuid.UUID
|
||
|
|
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"
|
||
|
|
}
|
||
|
|
}
|