| Line 482... |
Line 482... |
| 482 |
LocalDate.now());
|
482 |
LocalDate.now());
|
| 483 |
Map<Integer, List<VisitRequest>> visitRequestMap = null;
|
483 |
Map<Integer, List<VisitRequest>> visitRequestMap = null;
|
| 484 |
if (!visitRequests.isEmpty()) {
|
484 |
if (!visitRequests.isEmpty()) {
|
| 485 |
visitRequestMap = visitRequests.stream().collect(Collectors.groupingBy(x -> x.getVisitId()));
|
485 |
visitRequestMap = visitRequests.stream().collect(Collectors.groupingBy(x -> x.getVisitId()));
|
| 486 |
}
|
486 |
}
|
| - |
|
487 |
|
| - |
|
488 |
// Hierarchy expansion (Sales only):
|
| - |
|
489 |
// L1 → just self
|
| - |
|
490 |
// L2 → self + every L1 reportee
|
| - |
|
491 |
// L3 → self + L1 + L2 reportees
|
| - |
|
492 |
// L4 → self + L1 + L2 + L3 reportees
|
| - |
|
493 |
// Non-Sales callers stay at "just self" — same as today.
|
| - |
|
494 |
List<Integer> visibleAuthIds = visibleAuthIdsForLeads(authUser.getId());
|
| - |
|
495 |
|
| 487 |
if (status.equals(LeadStatus.followUp)) {
|
496 |
if (status.equals(LeadStatus.followUp)) {
|
| 488 |
|
497 |
|
| 489 |
leads = leadRepository.selectLeadsScheduledBetweenDate(Arrays.asList(authUser.getId()), null, null);
|
498 |
leads = leadRepository.selectLeadsScheduledBetweenDate(visibleAuthIds, null, null);
|
| 490 |
|
499 |
|
| 491 |
if (visitRequestMap != null) {
|
500 |
if (visitRequestMap != null) {
|
| 492 |
for (Lead lead : leads) {
|
501 |
for (Lead lead : leads) {
|
| 493 |
List<VisitRequest> visitRequest = visitRequestMap.get(lead.getId());
|
502 |
List<VisitRequest> visitRequest = visitRequestMap.get(lead.getId());
|
| 494 |
|
503 |
|
| Line 520... |
Line 529... |
| 520 |
* else if (o1.getScheduledTimestamp() != null) { return 1; } else { return -1;
|
529 |
* else if (o1.getScheduledTimestamp() != null) { return 1; } else { return -1;
|
| 521 |
* } });
|
530 |
* } });
|
| 522 |
*/
|
531 |
*/
|
| 523 |
|
532 |
|
| 524 |
} else {
|
533 |
} else {
|
| - |
|
534 |
// Same hierarchy expansion as the followUp branch — Sales heads see their
|
| - |
|
535 |
// downline's leads alongside their own.
|
| 525 |
leads = leadRepository.selectByAssignAuthIdAndStatus(authUser.getId(), status);
|
536 |
leads = leadRepository.selectByAssignAuthIdsAndStatus(visibleAuthIds, status);
|
| 526 |
|
537 |
|
| 527 |
}
|
538 |
}
|
| 528 |
|
539 |
|
| 529 |
return responseSender.ok(leads);
|
540 |
return responseSender.ok(leads);
|
| 530 |
|
541 |
|
| 531 |
}
|
542 |
}
|
| 532 |
|
543 |
|
| - |
|
544 |
// Returns the auth-user IDs whose leads are visible to `authUserId` on the
|
| - |
|
545 |
// mobile "My Leads" screen. Sales heads see their full downline; everyone
|
| - |
|
546 |
// else (incl. non-Sales) sees only themselves.
|
| - |
|
547 |
private List<Integer> visibleAuthIdsForLeads(int authUserId) {
|
| - |
|
548 |
List<Integer> ids = new ArrayList<>();
|
| - |
|
549 |
ids.add(authUserId);
|
| - |
|
550 |
|
| - |
|
551 |
EscalationType highestSales = null;
|
| - |
|
552 |
try {
|
| - |
|
553 |
for (Position p : positionRepository.selectPositionByAuthId(authUserId)) {
|
| - |
|
554 |
if (p.getCategoryId() == ProfitMandiConstants.TICKET_CATEGORY_SALES) {
|
| - |
|
555 |
if (highestSales == null || p.getEscalationType().isGreaterThanEqualTo(highestSales)) {
|
| - |
|
556 |
highestSales = p.getEscalationType();
|
| - |
|
557 |
}
|
| - |
|
558 |
}
|
| - |
|
559 |
}
|
| - |
|
560 |
} catch (Exception ignored) {
|
| - |
|
561 |
}
|
| - |
|
562 |
|
| - |
|
563 |
// Only sales heads (L2+) get the downline expansion. L1 / non-Sales stay at self.
|
| - |
|
564 |
if (highestSales != null && highestSales.isGreaterThanEqualTo(EscalationType.L2)) {
|
| - |
|
565 |
try {
|
| - |
|
566 |
List<Integer> reportees = authService.getAllReportees(authUserId);
|
| - |
|
567 |
if (reportees != null) {
|
| - |
|
568 |
for (Integer r : reportees) {
|
| - |
|
569 |
if (r != null && !ids.contains(r)) ids.add(r);
|
| - |
|
570 |
}
|
| - |
|
571 |
}
|
| - |
|
572 |
} catch (Exception ignored) {
|
| - |
|
573 |
}
|
| - |
|
574 |
}
|
| - |
|
575 |
return ids;
|
| - |
|
576 |
}
|
| - |
|
577 |
|
| 533 |
@RequestMapping(value = "/getlead", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
|
578 |
@RequestMapping(value = "/getlead", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
|
| 534 |
@ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
|
579 |
@ApiImplicitParams({@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header")})
|
| 535 |
public ResponseEntity<?> getLead(HttpServletRequest request, @RequestParam(name = "id") int id) throws
|
580 |
public ResponseEntity<?> getLead(HttpServletRequest request, @RequestParam(name = "id") int id) throws
|
| 536 |
ProfitMandiBusinessException {
|
581 |
ProfitMandiBusinessException {
|
| 537 |
|
582 |
|