Add Customer users
This commit is contained in:
@@ -47,8 +47,8 @@ func NewInventoryMovementProcessorImpl(
|
||||
}
|
||||
}
|
||||
|
||||
func (p *InventoryMovementProcessorImpl) CreateMovement(ctx context.Context, req *models.CreateInventoryMovementRequest) (*models.InventoryMovementResponse, error) {
|
||||
currentInventory, err := p.inventoryRepo.GetByProductAndOutlet(ctx, req.ProductID, req.OutletID)
|
||||
func (p *InventoryMovementProcessorImpl) CreateInventoryMovement(ctx context.Context, req *models.CreateInventoryMovementRequest) (*models.InventoryMovementResponse, error) {
|
||||
currentInventory, err := p.inventoryRepo.GetByProductAndOutlet(ctx, req.ItemID, req.OutletID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get current inventory: %w", err)
|
||||
}
|
||||
@@ -59,11 +59,12 @@ func (p *InventoryMovementProcessorImpl) CreateMovement(ctx context.Context, req
|
||||
movement := &entities.InventoryMovement{
|
||||
OrganizationID: req.OrganizationID,
|
||||
OutletID: req.OutletID,
|
||||
ProductID: req.ProductID,
|
||||
ItemID: req.ItemID,
|
||||
ItemType: req.ItemType,
|
||||
MovementType: entities.InventoryMovementType(req.MovementType),
|
||||
Quantity: req.Quantity,
|
||||
PreviousQuantity: previousQuantity,
|
||||
NewQuantity: newQuantity,
|
||||
Quantity: float64(req.Quantity),
|
||||
PreviousQuantity: float64(previousQuantity),
|
||||
NewQuantity: float64(newQuantity),
|
||||
UnitCost: req.UnitCost,
|
||||
TotalCost: float64(req.Quantity) * req.UnitCost,
|
||||
ReferenceType: (*entities.InventoryMovementReferenceType)(req.ReferenceType),
|
||||
@@ -89,7 +90,7 @@ func (p *InventoryMovementProcessorImpl) CreateMovement(ctx context.Context, req
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (p *InventoryMovementProcessorImpl) GetMovementByID(ctx context.Context, id uuid.UUID) (*models.InventoryMovementResponse, error) {
|
||||
func (p *InventoryMovementProcessorImpl) GetInventoryMovementByID(ctx context.Context, id uuid.UUID) (*models.InventoryMovementResponse, error) {
|
||||
movement, err := p.movementRepo.GetWithRelations(ctx, id)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("movement not found: %w", err)
|
||||
@@ -99,44 +100,29 @@ func (p *InventoryMovementProcessorImpl) GetMovementByID(ctx context.Context, id
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func (p *InventoryMovementProcessorImpl) ListMovements(ctx context.Context, req *models.ListInventoryMovementsRequest) (*models.ListInventoryMovementsResponse, error) {
|
||||
filters := make(map[string]interface{})
|
||||
if req.OrganizationID != nil {
|
||||
filters["organization_id"] = *req.OrganizationID
|
||||
func (p *InventoryMovementProcessorImpl) ListInventoryMovements(ctx context.Context, organizationID uuid.UUID, outletID *uuid.UUID, page, limit int, search string) (*models.PaginatedResponse[models.InventoryMovementResponse], error) {
|
||||
// Set default values
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
if req.OutletID != nil {
|
||||
filters["outlet_id"] = *req.OutletID
|
||||
if limit < 1 {
|
||||
limit = 10
|
||||
}
|
||||
if req.ProductID != nil {
|
||||
filters["product_id"] = *req.ProductID
|
||||
}
|
||||
if req.MovementType != nil {
|
||||
filters["movement_type"] = string(*req.MovementType)
|
||||
}
|
||||
if req.ReferenceType != nil {
|
||||
filters["reference_type"] = string(*req.ReferenceType)
|
||||
}
|
||||
if req.ReferenceID != nil {
|
||||
filters["reference_id"] = *req.ReferenceID
|
||||
}
|
||||
if req.OrderID != nil {
|
||||
filters["order_id"] = *req.OrderID
|
||||
}
|
||||
if req.PaymentID != nil {
|
||||
filters["payment_id"] = *req.PaymentID
|
||||
}
|
||||
if req.UserID != nil {
|
||||
filters["user_id"] = *req.UserID
|
||||
}
|
||||
if req.DateFrom != nil {
|
||||
filters["date_from"] = *req.DateFrom
|
||||
}
|
||||
if req.DateTo != nil {
|
||||
filters["date_to"] = *req.DateTo
|
||||
if limit > 100 {
|
||||
limit = 100
|
||||
}
|
||||
|
||||
offset := (req.Page - 1) * req.Limit
|
||||
movements, total, err := p.movementRepo.List(ctx, filters, req.Limit, offset)
|
||||
filters := make(map[string]interface{})
|
||||
filters["organization_id"] = organizationID
|
||||
if outletID != nil {
|
||||
filters["outlet_id"] = *outletID
|
||||
}
|
||||
if search != "" {
|
||||
filters["search"] = search
|
||||
}
|
||||
|
||||
offset := (page - 1) * limit
|
||||
movements, total, err := p.movementRepo.List(ctx, filters, limit, offset)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to list movements: %w", err)
|
||||
}
|
||||
@@ -150,19 +136,18 @@ func (p *InventoryMovementProcessorImpl) ListMovements(ctx context.Context, req
|
||||
}
|
||||
}
|
||||
|
||||
// Calculate total pages
|
||||
totalPages := int(total) / req.Limit
|
||||
if int(total)%req.Limit > 0 {
|
||||
totalPages++
|
||||
// Create paginated response
|
||||
paginatedResponse := &models.PaginatedResponse[models.InventoryMovementResponse]{
|
||||
Data: movementResponses,
|
||||
Pagination: models.Pagination{
|
||||
Page: page,
|
||||
Limit: limit,
|
||||
Total: total,
|
||||
TotalPages: int((total + int64(limit) - 1) / int64(limit)),
|
||||
},
|
||||
}
|
||||
|
||||
return &models.ListInventoryMovementsResponse{
|
||||
Movements: movementResponses,
|
||||
TotalCount: int(total),
|
||||
Page: req.Page,
|
||||
Limit: req.Limit,
|
||||
TotalPages: totalPages,
|
||||
}, nil
|
||||
return paginatedResponse, nil
|
||||
}
|
||||
|
||||
func (p *InventoryMovementProcessorImpl) GetMovementsByProductAndOutlet(ctx context.Context, productID, outletID uuid.UUID, limit, offset int) (*models.ListInventoryMovementsResponse, error) {
|
||||
|
||||
Reference in New Issue
Block a user