feat/BE/US-33/TASK-292,293,Adjust Project Flock status (add status Selesai), Validate with restriction when expense not finish and stock is not used

This commit is contained in:
ragilap
2025-12-05 17:47:03 +07:00
parent c593df661c
commit 6572176cca
8 changed files with 229 additions and 17 deletions
@@ -15,8 +15,8 @@ type ExpenseRepository interface {
IdExists(ctx context.Context, id uint) (bool, error)
GetNextSequence(ctx context.Context) (int, error)
GetWithSupplier(ctx context.Context, id uint64) (*entity.Expense, error)
WithProjectFlockKandangFilter(pfkID uint) func(*gorm.DB) *gorm.DB
CountUnfinishedByProjectFlockKandang(ctx context.Context, pfkID uint, isFinished func(*entity.Approval) bool) (int64, error)
WithProjectFlockKandangFilter(pfkID, kandangID uint) func(*gorm.DB) *gorm.DB
CountUnfinishedByProjectFlockKandang(ctx context.Context, pfkID, kandangID uint, isFinished func(*entity.Approval) bool) (int64, error)
}
type ExpenseRepositoryImpl struct {
@@ -54,25 +54,31 @@ func (r *ExpenseRepositoryImpl) GetWithSupplier(ctx context.Context, id uint64)
return &expense, nil
}
func (r *ExpenseRepositoryImpl) WithProjectFlockKandangFilter(pfkID uint) func(*gorm.DB) *gorm.DB {
func (r *ExpenseRepositoryImpl) WithProjectFlockKandangFilter(pfkID, kandangID uint) func(*gorm.DB) *gorm.DB {
return func(db *gorm.DB) *gorm.DB {
if pfkID == 0 {
if pfkID == 0 && kandangID == 0 {
return db
}
return db.Joins("JOIN expense_nonstocks ON expense_nonstocks.expense_id = expenses.id").
Where("expense_nonstocks.project_flock_kandang_id = ?", pfkID)
q := db.Joins("JOIN expense_nonstocks ON expense_nonstocks.expense_id = expenses.id")
if pfkID > 0 && kandangID > 0 {
return q.Where("expense_nonstocks.project_flock_kandang_id = ? OR expense_nonstocks.kandang_id = ?", pfkID, kandangID)
}
if pfkID > 0 {
return q.Where("expense_nonstocks.project_flock_kandang_id = ?", pfkID)
}
return q.Where("expense_nonstocks.kandang_id = ?", kandangID)
}
}
func (r *ExpenseRepositoryImpl) CountUnfinishedByProjectFlockKandang(ctx context.Context, pfkID uint, isFinished func(*entity.Approval) bool) (int64, error) {
if pfkID == 0 {
func (r *ExpenseRepositoryImpl) CountUnfinishedByProjectFlockKandang(ctx context.Context, pfkID, kandangID uint, isFinished func(*entity.Approval) bool) (int64, error) {
if pfkID == 0 && kandangID == 0 {
return 0, nil
}
var ids []uint64
if err := r.DB().WithContext(ctx).
Table("expenses").
Scopes(r.WithProjectFlockKandangFilter(pfkID)).
Scopes(r.WithProjectFlockKandangFilter(pfkID, kandangID)).
Group("expenses.id").
Pluck("expenses.id", &ids).Error; err != nil {
return 0, err