diff --git a/CPSCore/src/main/java/community/icon/cps/score/cpscore/CPSCore.java b/CPSCore/src/main/java/community/icon/cps/score/cpscore/CPSCore.java index 0cae3441..06957e67 100644 --- a/CPSCore/src/main/java/community/icon/cps/score/cpscore/CPSCore.java +++ b/CPSCore/src/main/java/community/icon/cps/score/cpscore/CPSCore.java @@ -2562,6 +2562,32 @@ public Map getProposalsHistory(@Optional int startIndex) { return Map.of(DATA, proposalHistory, COUNT, size); } + @Override + @External(readonly = true) + public List getRemainingMilestones(String ipfsHash){ + String ipfsHashPrefix = proposalPrefix(ipfsHash); + ArrayDB milestoneIDs = milestoneIds.at(ipfsHashPrefix); + + List milestoneIdList = new ArrayList<>(); + for (int i = 0; i < milestoneIDs.size(); i++) { + int milestoneId = milestoneIDs.get(i); + String milestonePrefix = mileStonePrefix(ipfsHash, milestoneId); + int proposalTotalPeriod = proposalPeriod.at(ipfsHashPrefix).getOrDefault(0); + int completionPeriod = MilestoneDb.completionPeriod.at(milestonePrefix).getOrDefault(0); + + int computedCompletionPeriod = proposalTotalPeriod + completionPeriod; + + int currentPeriod = getPeriodCount(); + if (computedCompletionPeriod > currentPeriod) { + int status = MilestoneDb.status.at(milestonePrefix).getOrDefault(0); + if (status != MILESTONE_REPORT_APPROVED ){ + milestoneIdList.add(milestoneId); + } + } + } + return milestoneIdList; + } + // =====================================TEMPORARY MIGRATIONS METHODS=============================================== @External diff --git a/score-lib/src/main/java/community/icon/cps/score/lib/interfaces/CPSCoreInterface.java b/score-lib/src/main/java/community/icon/cps/score/lib/interfaces/CPSCoreInterface.java index 390c8c7c..d07d19b3 100644 --- a/score-lib/src/main/java/community/icon/cps/score/lib/interfaces/CPSCoreInterface.java +++ b/score-lib/src/main/java/community/icon/cps/score/lib/interfaces/CPSCoreInterface.java @@ -265,6 +265,9 @@ public static class MilestoneVoteAttributes { @External(readonly = true) Map getProposalsHistory(@Optional int startIndex); + @External(readonly = true) + List getRemainingMilestones(String ipfsHash); + // EventLogs @EventLog(indexed = 1) void ProposalSubmitted(Address _sender_address, String note);