mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-06-09 15:07:49 +00:00
fix
This commit is contained in:
@@ -35,7 +35,8 @@ func (TransactionModule) RegisterRoutes(router fiber.Router, db *gorm.DB, valida
|
|||||||
panic(fmt.Sprintf("failed to register injection approval workflow: %v", err))
|
panic(fmt.Sprintf("failed to register injection approval workflow: %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
transactionService := sTransaction.NewTransactionService(transactionRepo, approvalService, validate)
|
fifoPaymentService := commonSvc.NewFifoPaymentService(db, utils.Log)
|
||||||
|
transactionService := sTransaction.NewTransactionService(transactionRepo, approvalService, fifoPaymentService, validate)
|
||||||
userService := sUser.NewUserService(userRepo, validate)
|
userService := sUser.NewUserService(userRepo, validate)
|
||||||
|
|
||||||
TransactionRoutes(router, userService, transactionService)
|
TransactionRoutes(router, userService, transactionService)
|
||||||
|
|||||||
@@ -30,19 +30,22 @@ type transactionService struct {
|
|||||||
Validate *validator.Validate
|
Validate *validator.Validate
|
||||||
Repository repository.TransactionRepository
|
Repository repository.TransactionRepository
|
||||||
ApprovalSvc commonSvc.ApprovalService
|
ApprovalSvc commonSvc.ApprovalService
|
||||||
|
FifoPaymentSvc commonSvc.FifoPaymentService
|
||||||
approvalWorkflows map[string]approvalutils.ApprovalWorkflowKey
|
approvalWorkflows map[string]approvalutils.ApprovalWorkflowKey
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTransactionService(
|
func NewTransactionService(
|
||||||
repo repository.TransactionRepository,
|
repo repository.TransactionRepository,
|
||||||
approvalSvc commonSvc.ApprovalService,
|
approvalSvc commonSvc.ApprovalService,
|
||||||
|
fifoPaymentSvc commonSvc.FifoPaymentService,
|
||||||
validate *validator.Validate,
|
validate *validator.Validate,
|
||||||
) TransactionService {
|
) TransactionService {
|
||||||
return &transactionService{
|
return &transactionService{
|
||||||
Log: utils.Log,
|
Log: utils.Log,
|
||||||
Validate: validate,
|
Validate: validate,
|
||||||
Repository: repo,
|
Repository: repo,
|
||||||
ApprovalSvc: approvalSvc,
|
ApprovalSvc: approvalSvc,
|
||||||
|
FifoPaymentSvc: fifoPaymentSvc,
|
||||||
approvalWorkflows: map[string]approvalutils.ApprovalWorkflowKey{
|
approvalWorkflows: map[string]approvalutils.ApprovalWorkflowKey{
|
||||||
string(utils.TransactionTypeSaldoAwal): utils.ApprovalWorkflowInitial,
|
string(utils.TransactionTypeSaldoAwal): utils.ApprovalWorkflowInitial,
|
||||||
string(utils.TransactionTypeInjection): utils.ApprovalWorkflowInjection,
|
string(utils.TransactionTypeInjection): utils.ApprovalWorkflowInjection,
|
||||||
@@ -182,6 +185,19 @@ func (s transactionService) GetOne(c *fiber.Ctx, id uint) (*entity.Payment, erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s transactionService) DeleteOne(c *fiber.Ctx, id uint) error {
|
func (s transactionService) DeleteOne(c *fiber.Ctx, id uint) error {
|
||||||
|
// Snapshot party SEBELUM delete supaya bisa re-FIFO setelah trigger DB
|
||||||
|
// (`trg_soft_delete_fk_payments`) CASCADE hard-DELETE allocations.
|
||||||
|
existing, err := s.Repository.GetByID(c.Context(), id, nil)
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
return fiber.NewError(fiber.StatusNotFound, "Transaction not found")
|
||||||
|
}
|
||||||
|
s.Log.Errorf("Failed to load transaction before delete: %+v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
partyType := existing.PartyType
|
||||||
|
partyID := existing.PartyId
|
||||||
|
|
||||||
if err := s.Repository.DeleteOne(c.Context(), id); err != nil {
|
if err := s.Repository.DeleteOne(c.Context(), id); err != nil {
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
return fiber.NewError(fiber.StatusNotFound, "Transaction not found")
|
return fiber.NewError(fiber.StatusNotFound, "Transaction not found")
|
||||||
@@ -189,6 +205,14 @@ func (s transactionService) DeleteOne(c *fiber.Ctx, id uint) error {
|
|||||||
s.Log.Errorf("Failed to delete transaction: %+v", err)
|
s.Log.Errorf("Failed to delete transaction: %+v", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Re-FIFO setelah delete agar payment lain yang masih punya unallocated nominal
|
||||||
|
// otomatis reflow ke MDP/purchase_item/expense_realization yang kekurangan paid.
|
||||||
|
if s.FifoPaymentSvc != nil && partyID > 0 {
|
||||||
|
if err := s.FifoPaymentSvc.ReallocateForParty(c.Context(), nil, partyType, partyID); err != nil {
|
||||||
|
s.Log.Warnf("Failed to reallocate payments after delete (party=%s id=%d): %+v", partyType, partyID, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user