mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-23 14:55:42 +00:00
Fix[BE]: availableqty not appeared
This commit is contained in:
+2
-2
@@ -73,7 +73,7 @@ func (u *ProjectFlockKandangController) GetOne(c *fiber.Ctx) error {
|
|||||||
return fiber.NewError(fiber.StatusBadRequest, "Invalid Id")
|
return fiber.NewError(fiber.StatusBadRequest, "Invalid Id")
|
||||||
}
|
}
|
||||||
|
|
||||||
result, availableQtys, err := u.ProjectFlockKandangService.GetOne(c, uint(id))
|
result, availableQtys, productWarehouses, err := u.ProjectFlockKandangService.GetOne(c, uint(id))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -83,6 +83,6 @@ func (u *ProjectFlockKandangController) GetOne(c *fiber.Ctx) error {
|
|||||||
Code: fiber.StatusOK,
|
Code: fiber.StatusOK,
|
||||||
Status: "success",
|
Status: "success",
|
||||||
Message: "Get projectFlockKandang successfully",
|
Message: "Get projectFlockKandang successfully",
|
||||||
Data: dto.ToProjectFlockKandangDetailDTOWithAvailableQty(*result, availableQtys),
|
Data: dto.ToProjectFlockKandangDetailDTOWithAvailableQty(*result, availableQtys, productWarehouses),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-3
@@ -97,7 +97,7 @@ func toProjectFlockDTO(pf *projectFlockDTO.ProjectFlockListDTO) *ProjectFlockDTO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func ToProjectFlockKandangDetailDTOWithAvailableQty(e entity.ProjectFlockKandang, availableQtyMap map[uint]float64) ProjectFlockKandangDetailDTO {
|
func ToProjectFlockKandangDetailDTOWithAvailableQty(e entity.ProjectFlockKandang, availableQtyMap map[uint]float64, productWarehouses []entity.ProductWarehouse) ProjectFlockKandangDetailDTO {
|
||||||
var projectFlockSummary *projectFlockDTO.ProjectFlockListDTO
|
var projectFlockSummary *projectFlockDTO.ProjectFlockListDTO
|
||||||
if e.ProjectFlock.Id != 0 {
|
if e.ProjectFlock.Id != 0 {
|
||||||
mapped := projectFlockDTO.ToProjectFlockListDTO(e.ProjectFlock)
|
mapped := projectFlockDTO.ToProjectFlockListDTO(e.ProjectFlock)
|
||||||
@@ -116,7 +116,7 @@ func ToProjectFlockKandangDetailDTOWithAvailableQty(e entity.ProjectFlockKandang
|
|||||||
return ProjectFlockKandangDetailDTO{
|
return ProjectFlockKandangDetailDTO{
|
||||||
ProjectFlockKandangListDTO: listDTO,
|
ProjectFlockKandangListDTO: listDTO,
|
||||||
Chickins: toChickinDTOs(e.Chickins),
|
Chickins: toChickinDTOs(e.Chickins),
|
||||||
AvailableQtys: toAvailableQtyDTOsFromMap(e.Chickins, availableQtyMap),
|
AvailableQtys: toAvailableQtyDTOsFromMap(e.Chickins, availableQtyMap, productWarehouses),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,11 +190,12 @@ func toChickinDTOs(chickins []entity.ProjectChickin) []chickinDTO.ChickinBaseDTO
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func toAvailableQtyDTOsFromMap(chickins []entity.ProjectChickin, availableQtyMap map[uint]float64) []AvailableQtyDTO {
|
func toAvailableQtyDTOsFromMap(chickins []entity.ProjectChickin, availableQtyMap map[uint]float64, productWarehouses []entity.ProductWarehouse) []AvailableQtyDTO {
|
||||||
if len(availableQtyMap) == 0 {
|
if len(availableQtyMap) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// First, build map from chickins
|
||||||
pwMap := make(map[uint]*entity.ProductWarehouse)
|
pwMap := make(map[uint]*entity.ProductWarehouse)
|
||||||
for _, chickin := range chickins {
|
for _, chickin := range chickins {
|
||||||
if chickin.ProductWarehouse != nil && chickin.ProductWarehouse.Id != 0 {
|
if chickin.ProductWarehouse != nil && chickin.ProductWarehouse.Id != 0 {
|
||||||
@@ -202,6 +203,13 @@ func toAvailableQtyDTOsFromMap(chickins []entity.ProjectChickin, availableQtyMap
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Then, add productWarehouses that are not in chickins yet
|
||||||
|
for i := range productWarehouses {
|
||||||
|
if _, exists := pwMap[productWarehouses[i].Id]; !exists {
|
||||||
|
pwMap[productWarehouses[i].Id] = &productWarehouses[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
result := make([]AvailableQtyDTO, 0, len(availableQtyMap))
|
result := make([]AvailableQtyDTO, 0, len(availableQtyMap))
|
||||||
for pwId, availableQty := range availableQtyMap {
|
for pwId, availableQty := range availableQtyMap {
|
||||||
pw, exists := pwMap[pwId]
|
pw, exists := pwMap[pwId]
|
||||||
|
|||||||
+20
-5
@@ -19,7 +19,7 @@ import (
|
|||||||
|
|
||||||
type ProjectFlockKandangService interface {
|
type ProjectFlockKandangService interface {
|
||||||
GetAll(ctx *fiber.Ctx, params *validation.Query) ([]entity.ProjectFlockKandang, int64, error)
|
GetAll(ctx *fiber.Ctx, params *validation.Query) ([]entity.ProjectFlockKandang, int64, error)
|
||||||
GetOne(ctx *fiber.Ctx, id uint) (*entity.ProjectFlockKandang, map[uint]float64, error)
|
GetOne(ctx *fiber.Ctx, id uint) (*entity.ProjectFlockKandang, map[uint]float64, []entity.ProductWarehouse, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: map[uint]float64 adalah mapping dari ProductWarehouse ID ke calculated available quantity
|
// Note: map[uint]float64 adalah mapping dari ProductWarehouse ID ke calculated available quantity
|
||||||
@@ -83,13 +83,13 @@ func (s projectFlockKandangService) GetAll(c *fiber.Ctx, params *validation.Quer
|
|||||||
return projectFlockKandangs, total, nil
|
return projectFlockKandangs, total, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s projectFlockKandangService) GetOne(c *fiber.Ctx, id uint) (*entity.ProjectFlockKandang, map[uint]float64, error) {
|
func (s projectFlockKandangService) GetOne(c *fiber.Ctx, id uint) (*entity.ProjectFlockKandang, map[uint]float64, []entity.ProductWarehouse, error) {
|
||||||
projectFlockKandang, err := s.Repository.GetByID(c.Context(), id)
|
projectFlockKandang, err := s.Repository.GetByID(c.Context(), id)
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
return nil, nil, fiber.NewError(fiber.StatusNotFound, "ProjectFlockKandang not found")
|
return nil, nil, nil, fiber.NewError(fiber.StatusNotFound, "ProjectFlockKandang not found")
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(projectFlockKandang.Chickins) > 0 && s.ApprovalSvc != nil {
|
if len(projectFlockKandang.Chickins) > 0 && s.ApprovalSvc != nil {
|
||||||
@@ -109,7 +109,22 @@ func (s projectFlockKandangService) GetOne(c *fiber.Ctx, id uint) (*entity.Proje
|
|||||||
availableQtyMap = nil
|
availableQtyMap = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return projectFlockKandang, availableQtyMap, nil
|
var productWarehouses []entity.ProductWarehouse
|
||||||
|
if len(availableQtyMap) > 0 {
|
||||||
|
pwIds := make([]uint, 0, len(availableQtyMap))
|
||||||
|
for pwId := range availableQtyMap {
|
||||||
|
pwIds = append(pwIds, pwId)
|
||||||
|
}
|
||||||
|
productWarehouses, err = s.ProductWarehouseRepo.GetByIDs(c.Context(), pwIds, func(db *gorm.DB) *gorm.DB {
|
||||||
|
return db.Preload("Product").Preload("Warehouse")
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
s.Log.Warnf("Failed to fetch product warehouses: %+v", err)
|
||||||
|
productWarehouses = []entity.ProductWarehouse{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return projectFlockKandang, availableQtyMap, productWarehouses, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s projectFlockKandangService) getAvailableQuantities(c *fiber.Ctx, projectFlockKandang *entity.ProjectFlockKandang) (map[uint]float64, error) {
|
func (s projectFlockKandangService) getAvailableQuantities(c *fiber.Ctx, projectFlockKandang *entity.ProjectFlockKandang) (map[uint]float64, error) {
|
||||||
|
|||||||
@@ -28,13 +28,12 @@ type ProjectFlockWithPivotDTO struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ProjectFlockKandangDTO struct {
|
type ProjectFlockKandangDTO struct {
|
||||||
Id uint `json:"id"`
|
Id uint `json:"id"`
|
||||||
ProjectFlockKandangId uint `json:"project_flock_kandang_id"`
|
|
||||||
ProjectFlockId uint `json:"project_flock_id"`
|
KandangId uint `json:"kandang_id"`
|
||||||
KandangId uint `json:"kandang_id"`
|
Kandang *kandangDTO.KandangBaseDTO `json:"kandang,omitempty"`
|
||||||
Kandang *kandangDTO.KandangBaseDTO `json:"kandang,omitempty"`
|
ProjectFlock *ProjectFlockWithPivotDTO `json:"project_flock,omitempty"`
|
||||||
ProjectFlock *ProjectFlockWithPivotDTO `json:"project_flock,omitempty"`
|
AvailableQuantity float64 `json:"available_quantity"`
|
||||||
AvailableQuantity float64 `json:"available_quantity"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func ToProjectFlockKandangDTO(e entity.ProjectFlockKandang) ProjectFlockKandangDTO {
|
func ToProjectFlockKandangDTO(e entity.ProjectFlockKandang) ProjectFlockKandangDTO {
|
||||||
@@ -89,12 +88,10 @@ func ToProjectFlockKandangDTO(e entity.ProjectFlockKandang) ProjectFlockKandangD
|
|||||||
}
|
}
|
||||||
|
|
||||||
return ProjectFlockKandangDTO{
|
return ProjectFlockKandangDTO{
|
||||||
Id: e.Id,
|
Id: e.Id,
|
||||||
ProjectFlockKandangId: e.Id,
|
KandangId: e.KandangId,
|
||||||
ProjectFlockId: e.ProjectFlockId,
|
Kandang: kandang,
|
||||||
KandangId: e.KandangId,
|
ProjectFlock: pf,
|
||||||
Kandang: kandang,
|
AvailableQuantity: 0,
|
||||||
ProjectFlock: pf,
|
|
||||||
AvailableQuantity: 0,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user