/// <summary> /// Calculates the number of documents to be set for every review set /// For every review set in the list /// 1. Check if original document count for the review set is greater than calculated number of documents /// 2. If so, check if the document count need to be obtained from family duplicate grouping /// 3. If yes, then set family/ duplicate grouping count to the review set /// 4. If no, and it belongs to orphan group then also add the orphan group to the same review set /// 5. If no, and there is no orphan group then add the original count to the review set /// </summary> /// <param name="documentGroup"></param> /// <param name="reviewsetList"></param> /// <param name="useFamilyCount"></param> private void CalculateNumberOfDocuments(DocumentGroupById documentGroup, List <ReviewsetDetails> reviewsetList, bool useFamilyCount) { reviewsetList.ShouldNotBe(null); for (int i = 0; i < reviewsetList.Count; i++) { if (reviewsetList[i].OriginalNoOfDocs > reviewsetList[i].CalculatedNoOfDocs) { if (useFamilyCount) { reviewsetList[i].CalculatedNoOfDocs += documentGroup.DocumentCount; } else { if (documentGroup != null && documentGroup.DocumentCount > 0) { //if there is orphan family, that can be splitted between review sets, calculated number of docs will increase by the difference between //original docs and calculated number. Document group count has to be reduced by the same difference if ((reviewsetList[i].CalculatedNoOfDocs + documentGroup.DocumentCount) > reviewsetList[i].OriginalNoOfDocs) { reviewsetList[i].CalculatedNoOfDocs += (reviewsetList[i].OriginalNoOfDocs - reviewsetList[i].CalculatedNoOfDocs); documentGroup.DocumentCount -= (reviewsetList[i].OriginalNoOfDocs - reviewsetList[i].CalculatedNoOfDocs); continue; } else { reviewsetList[i].CalculatedNoOfDocs += documentGroup.DocumentCount; break; } } else { reviewsetList[i].CalculatedNoOfDocs += reviewsetList[i].OriginalNoOfDocs; } } if ((reviewsetList[i].CalculatedNoOfDocs > reviewsetList[i].OriginalNoOfDocs)) { if (i + 1 < reviewsetList.Count) { reviewsetList[i + 1].OriginalNoOfDocs -= (reviewsetList[i].CalculatedNoOfDocs - reviewsetList[i].OriginalNoOfDocs); //if the next set count becomes zero then pull from next set in the list if ((reviewsetList[i + 1].OriginalNoOfDocs <= 0) && (i + 2 < reviewsetList.Count)) { reviewsetList[i + 1].OriginalNoOfDocs = reviewsetList[i + 2].OriginalNoOfDocs; } } } if (useFamilyCount) { break; } } } }
/// <summary> /// Calculates the number of documents to be set for every review set /// For every review set in the list /// 1. Check if original document count for the review set is greater than calculated number of documents /// 2. If so, check if the document count need to be obtained from family duplicate grouping /// 3. If yes, then set family/ duplicate grouping count to the review set /// 4. If no, and it belongs to orphan group then also add the orphan group to the same review set /// 5. If no, and there is no orphan group then add the original count to the review set /// </summary> /// <param name="documentGroup"></param> /// <param name="reviewsetList"></param> /// <param name="useFamilyCount"></param> private void CalculateNumberOfDocuments(DocumentGroupById documentGroup, List<ReviewsetDetails> reviewsetList, bool useFamilyCount) { reviewsetList.ShouldNotBe(null); for (int i = 0; i < reviewsetList.Count; i++) { if (reviewsetList[i].OriginalNoOfDocs > reviewsetList[i].CalculatedNoOfDocs) { if (useFamilyCount) { reviewsetList[i].CalculatedNoOfDocs += documentGroup.DocumentCount; } else { if (documentGroup != null && documentGroup.DocumentCount > 0) { //if there is orphan family, that can be splitted between review sets, calculated number of docs will increase by the difference between //original docs and calculated number. Document group count has to be reduced by the same difference if ((reviewsetList[i].CalculatedNoOfDocs + documentGroup.DocumentCount) > reviewsetList[i].OriginalNoOfDocs) { reviewsetList[i].CalculatedNoOfDocs += (reviewsetList[i].OriginalNoOfDocs - reviewsetList[i].CalculatedNoOfDocs); documentGroup.DocumentCount -= (reviewsetList[i].OriginalNoOfDocs - reviewsetList[i].CalculatedNoOfDocs); continue; } else { reviewsetList[i].CalculatedNoOfDocs += documentGroup.DocumentCount; break; } } else { reviewsetList[i].CalculatedNoOfDocs += reviewsetList[i].OriginalNoOfDocs; } } if ((reviewsetList[i].CalculatedNoOfDocs > reviewsetList[i].OriginalNoOfDocs)) { if (i + 1 < reviewsetList.Count) { reviewsetList[i + 1].OriginalNoOfDocs -= (reviewsetList[i].CalculatedNoOfDocs - reviewsetList[i].OriginalNoOfDocs); //if the next set count becomes zero then pull from next set in the list if ((reviewsetList[i + 1].OriginalNoOfDocs <= 0) && (i + 2 < reviewsetList.Count)) { reviewsetList[i + 1].OriginalNoOfDocs = reviewsetList[i + 2].OriginalNoOfDocs; } } } if (useFamilyCount) { break; } } } }