Compare commits

..

5 Commits

Author SHA1 Message Date
Giovanni Gabriel Septriadi 690db8b485 Merge branch 'fix/kandang-group' into 'development'
fix get list kandang group

See merge request mbugroup/lti-api!615
2026-06-09 04:17:07 +00:00
giovanni 22bf66dbb9 fix get list kandang group 2026-06-09 11:16:06 +07:00
Giovanni Gabriel Septriadi f836685253 Merge branch 'feat/usage-sapronak-price' into 'development'
add response detail recording

See merge request mbugroup/lti-api!614
2026-06-09 02:46:09 +00:00
Giovanni Gabriel Septriadi 61e15dd95d Merge branch 'fix/non-active-phase' into 'development'
Fix/non active phase

See merge request mbugroup/lti-api!613
2026-06-09 01:35:01 +00:00
giovanni 59d72f20b4 non active phase daily checklist 2026-06-08 21:01:20 +07:00
7 changed files with 83 additions and 5 deletions
@@ -0,0 +1,2 @@
UPDATE phases SET is_active = true
WHERE id IN (2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26);
@@ -0,0 +1,2 @@
UPDATE phases SET is_active = false
WHERE id IN (2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26);
@@ -1215,7 +1215,9 @@ func (s dailyChecklistService) AssignPhases(c *fiber.Ctx, id uint, req *validati
}
if len(phaseIDs) > 0 {
phases, err := s.PhaseRepo.GetByIDs(c.Context(), phaseIDs, nil)
phases, err := s.PhaseRepo.GetByIDs(c.Context(), phaseIDs, func(db *gorm.DB) *gorm.DB {
return db.Where("is_active = true")
})
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return fiber.NewError(fiber.StatusBadRequest, "Phase not found")
@@ -72,9 +72,9 @@ func (s kandangGroupService) GetAll(c *fiber.Ctx, params *validation.Query) ([]e
}
if params.OrderBy == "desc" || params.OrderBy == "" {
db = db.Order(fmt.Sprintf("kandang_groups.%s DESC", params.SortBy))
db = db.Order(fmt.Sprintf("kandang_groups.%s DESC, kandang_groups.id ASC", params.SortBy))
} else {
db = db.Order(fmt.Sprintf("kandang_groups.%s ASC", params.SortBy))
db = db.Order(fmt.Sprintf("kandang_groups.%s ASC, kandang_groups.id ASC", params.SortBy))
}
return db
@@ -20,6 +20,6 @@ type Query struct {
Search string `query:"search" validate:"omitempty,max=50"`
LocationId int `query:"location_id" validate:"omitempty,number,gt=0"`
PicId int `query:"pic_id" validate:"omitempty,number,gt=0"`
SortBy string `query:"sort_by" validate:"omitempty,max=50,oneof=name created_at updated_at" default:"updated_at"`
OrderBy string `query:"order_by" validate:"omitempty,oneof=asc desc" default:"desc"`
SortBy string `query:"sort_by" validate:"omitempty,max=50,oneof=name created_at updated_at" default:"name"`
OrderBy string `query:"order_by" validate:"omitempty,oneof=asc desc" default:"asc"`
}
@@ -50,6 +50,7 @@ func (s phasesService) GetAll(c *fiber.Ctx, params *validation.Query) ([]entity.
phasess, total, err := s.Repository.GetAll(c.Context(), offset, params.Limit, func(db *gorm.DB) *gorm.DB {
db = s.withRelations(db)
db = db.Where("is_active = true")
if params.Search != "" {
return db.Where("name ILIKE ?", "%"+params.Search+"%")
}
@@ -0,0 +1,71 @@
package dto
import (
"math"
"testing"
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
)
func TestToMarketingReportItemsUsesDeliveryProductTotalWeight(t *testing.T) {
mdps := []entity.MarketingDeliveryProduct{
{
Id: 1,
UsageQty: 10,
AvgWeight: 2.5,
TotalWeight: 17.75,
UnitPrice: 1000,
},
}
got := ToMarketingReportItems(mdps, nil, nil, nil)
if len(got) != 1 {
t.Fatalf("expected 1 marketing report item, got %d", len(got))
}
if got[0].TotalWeightKg != 17.75 {
t.Fatalf("expected total_weight_kg to use delivery product total_weight 17.75, got %.2f", got[0].TotalWeightKg)
}
if got[0].Qty != 10 {
t.Fatalf("expected qty to stay from usage_qty, got %.2f", got[0].Qty)
}
if got[0].AverageWeightKg != 2.5 {
t.Fatalf("expected average_weight_kg to stay from avg_weight, got %.2f", got[0].AverageWeightKg)
}
if got[0].SalesAmount != 17750 {
t.Fatalf("expected sales_amount to use delivery product total_weight, got %.2f", got[0].SalesAmount)
}
}
func TestMarketingSummaryUsesReportItemTotalWeight(t *testing.T) {
items := []RepportMarketingItemDTO{
{
Qty: 10,
TotalWeightKg: 17.75,
SalesAmount: 17750,
},
{
Qty: 5,
TotalWeightKg: 8.25,
SalesAmount: 8250,
},
}
got := ToSummaryFromDTOItems(items)
if got == nil {
t.Fatal("expected summary, got nil")
}
if got.TotalWeightKg != 26 {
t.Fatalf("expected summary total_weight_kg to sum item total weights, got %.2f", got.TotalWeightKg)
}
if diff := math.Abs(got.AverageWeightKg - (26.0 / 15.0)); diff > 0.000001 {
t.Fatalf("expected summary average_weight_kg to use total_weight_kg / total_qty, got %.6f", got.AverageWeightKg)
}
if got.TotalQty != 15 {
t.Fatalf("expected total qty 15, got %d", got.TotalQty)
}
if got.TotalSalesAmount != 26000 {
t.Fatalf("expected total sales amount 26000, got %d", got.TotalSalesAmount)
}
}