Files
backend_fiesta/services/stockrequestService.go

59 lines
1.8 KiB
Go

package services
import (
"nearle/models"
"nearle/repositories"
"time"
)
type StockRequestService interface {
CreateStockRequest(req *models.StockRequest) error
GetStockRequests(tenantID int, locationID int, status string, date string, pageNo int, pageSize int) ([]models.StockRequest, error)
UpdateStockRequest(requestID int, status string) error
}
type stockRequestService struct {
repo repositories.StockRequestRepository
productService ProductService
}
func NewStockRequestService(repo repositories.StockRequestRepository, productService ProductService) StockRequestService {
return &stockRequestService{repo: repo, productService: productService}
}
func (s *stockRequestService) CreateStockRequest(req *models.StockRequest) error {
return s.repo.CreateStockRequest(req)
}
func (s *stockRequestService) GetStockRequests(tenantID int, locationID int, status string, date string, pageNo int, pageSize int) ([]models.StockRequest, error) {
return s.repo.GetStockRequests(tenantID, locationID, status, date, pageNo, pageSize)
}
func (s *stockRequestService) UpdateStockRequest(requestID int, status string) error {
// If the request is being marked as Received, we need to update the actual store inventory
if status == "Received" {
req, err := s.repo.GetStockRequestByID(requestID)
if err != nil {
return err
}
if req.Status != "Received" { // prevent double receiving
stk := models.Productstock{
Tenantid: req.Tenantid,
Locationid: req.Locationid,
Productid: req.Productid,
Quantity: req.Qty,
Stocktype: "in",
Stockdate: time.Now(),
}
err = s.productService.CreateProductStock([]models.Productstock{stk})
if err != nil {
return err
}
}
}
return s.repo.UpdateStockRequest(requestID, status)
}