diff --git a/internal/tender_approval/entity.go b/internal/tender_approval/entity.go index 19e0de7..c43d3b8 100644 --- a/internal/tender_approval/entity.go +++ b/internal/tender_approval/entity.go @@ -145,6 +145,7 @@ func (ta *TenderApproval) Approve() { // Reject rejects the tender with a reason func (ta *TenderApproval) Reject() { ta.Status = ApprovalStatusRejected + ta.SubmissionMode = "" ta.CreatedAt = time.Now().Unix() } diff --git a/internal/tender_approval/form.go b/internal/tender_approval/form.go index 3fbe5ca..5fef335 100644 --- a/internal/tender_approval/form.go +++ b/internal/tender_approval/form.go @@ -61,25 +61,21 @@ type TenderApprovalSearchForm struct { // TenderApproval statistics DTOs type TenderApprovalStatsResponse struct { - TotalApprovals int64 `json:"total_approvals"` - ApprovedTenders int64 `json:"approved_tenders"` - RejectedTenders int64 `json:"rejected_tenders"` - ApprovalsByStatus map[string]int64 `json:"approvals_by_status"` - ApprovalsBySubmission map[string]int64 `json:"approvals_by_submission"` - LastUpdated int64 `json:"last_updated"` + TotalApprovals int64 `json:"total_approvals"` + ApprovedTenders int64 `json:"approved_tenders"` + RejectedTenders int64 `json:"rejected_tenders"` + LastUpdated int64 `json:"last_updated"` } // CompanyTenderApprovalStatsResponse represents company-specific tender approval statistics type CompanyTenderApprovalStatsResponse struct { - CompanyID string `json:"company_id"` - TotalApprovals int64 `json:"total_approvals"` - ApprovedTenders int64 `json:"approved_tenders"` - RejectedTenders int64 `json:"rejected_tenders"` - SelfApplyCount int64 `json:"self_apply_count"` - PartnershipCount int64 `json:"partnership_count"` - ApprovalsByStatus map[string]int64 `json:"approvals_by_status"` - ApprovalsBySubmission map[string]int64 `json:"approvals_by_submission"` - LastUpdated int64 `json:"last_updated"` + CompanyID string `json:"company_id"` + TotalApprovals int64 `json:"total_approvals"` + ApprovedTenders int64 `json:"approved_tenders"` + RejectedTenders int64 `json:"rejected_tenders"` + SelfApplyCount int64 `json:"self_apply_count"` + PartnershipCount int64 `json:"partnership_count"` + LastUpdated int64 `json:"last_updated"` } // ToggleTenderApprovalForm represents the form for toggling a tender approval diff --git a/internal/tender_approval/repository.go b/internal/tender_approval/repository.go index d567838..afa09e1 100644 --- a/internal/tender_approval/repository.go +++ b/internal/tender_approval/repository.go @@ -478,27 +478,13 @@ func (r *tenderApprovalRepository) GetTenderApprovalStats(ctx context.Context) ( approvedTenders, _ := r.CountByStatus(ctx, ApprovalStatusApproved) rejectedTenders, _ := r.CountByStatus(ctx, ApprovalStatusRejected) - // For this implementation, we'll return basic stats - // In a real implementation, you'd use MongoDB aggregation pipelines stats := &TenderApprovalStatsResponse{ - TotalApprovals: totalApprovals, - ApprovedTenders: approvedTenders, - RejectedTenders: rejectedTenders, - ApprovalsByStatus: make(map[string]int64), - ApprovalsBySubmission: make(map[string]int64), - LastUpdated: time.Now().Unix(), + TotalApprovals: totalApprovals, + ApprovedTenders: approvedTenders, + RejectedTenders: rejectedTenders, + LastUpdated: time.Now().Unix(), } - // Add status breakdown - stats.ApprovalsByStatus["approved"] = approvedTenders - stats.ApprovalsByStatus["rejected"] = rejectedTenders - - // Add submission mode breakdown - selfApplyCount, _ := r.CountBySubmissionMode(ctx, SubmissionModeSelfApply) - partnershipCount, _ := r.CountBySubmissionMode(ctx, SubmissionModePartnership) - stats.ApprovalsBySubmission["self-apply"] = selfApplyCount - stats.ApprovalsBySubmission["partnership"] = partnershipCount - return stats, nil } @@ -515,32 +501,22 @@ func (r *tenderApprovalRepository) GetCompanyTenderApprovalStats(ctx context.Con rejectedTenders, _ := r.ormRepo.Count(ctx, rejectedFilter) // Count by submission mode for this company - selfApplyFilter := bson.M{"company_id": companyID, "submission_mode": string(SubmissionModeSelfApply)} + selfApplyFilter := bson.M{"company_id": companyID, "status": string(ApprovalStatusApproved), "submission_mode": string(SubmissionModeSelfApply)} selfApplyCount, _ := r.ormRepo.Count(ctx, selfApplyFilter) - partnershipFilter := bson.M{"company_id": companyID, "submission_mode": string(SubmissionModePartnership)} + partnershipFilter := bson.M{"company_id": companyID, "status": string(ApprovalStatusApproved), "submission_mode": string(SubmissionModePartnership)} partnershipCount, _ := r.ormRepo.Count(ctx, partnershipFilter) stats := &CompanyTenderApprovalStatsResponse{ - CompanyID: companyID, - TotalApprovals: totalApprovals, - ApprovedTenders: approvedTenders, - RejectedTenders: rejectedTenders, - SelfApplyCount: selfApplyCount, - PartnershipCount: partnershipCount, - ApprovalsByStatus: make(map[string]int64), - ApprovalsBySubmission: make(map[string]int64), - LastUpdated: time.Now().Unix(), + CompanyID: companyID, + TotalApprovals: totalApprovals, + ApprovedTenders: approvedTenders, + RejectedTenders: rejectedTenders, + SelfApplyCount: selfApplyCount, + PartnershipCount: partnershipCount, + LastUpdated: time.Now().Unix(), } - // Add status breakdown - stats.ApprovalsByStatus["approved"] = approvedTenders - stats.ApprovalsByStatus["rejected"] = rejectedTenders - - // Add submission mode breakdown - stats.ApprovalsBySubmission["self-apply"] = selfApplyCount - stats.ApprovalsBySubmission["partnership"] = partnershipCount - return stats, nil } diff --git a/internal/tender_approval/service.go b/internal/tender_approval/service.go index 472d4e3..cf31d25 100644 --- a/internal/tender_approval/service.go +++ b/internal/tender_approval/service.go @@ -694,16 +694,12 @@ func (s *tenderApprovalService) GetAggregatedCompanyStats(ctx context.Context) ( // In a real implementation, you might want to get stats for all companies // and aggregate them properly stats := &AggregatedCompanyStatsResponse{ - TotalCompanies: 1, // This should be calculated from actual company data - TotalApprovals: generalStats.TotalApprovals, - TotalApprovedTenders: generalStats.ApprovedTenders, - TotalRejectedTenders: generalStats.RejectedTenders, - TotalSelfApplyCount: generalStats.ApprovalsBySubmission["self-apply"], - TotalPartnershipCount: generalStats.ApprovalsBySubmission["partnership"], - ApprovalsByStatus: generalStats.ApprovalsByStatus, - ApprovalsBySubmission: generalStats.ApprovalsBySubmission, - CompanyStats: []*CompanyTenderApprovalStatsResponse{}, // Empty for now - LastUpdated: time.Now().Unix(), + TotalCompanies: 1, // This should be calculated from actual company data + TotalApprovals: generalStats.TotalApprovals, + TotalApprovedTenders: generalStats.ApprovedTenders, + TotalRejectedTenders: generalStats.RejectedTenders, + CompanyStats: []*CompanyTenderApprovalStatsResponse{}, // Empty for now + LastUpdated: time.Now().Unix(), } s.logger.Info("Aggregated company stats retrieved successfully", map[string]interface{}{