Subversion Repositories SmartDukaan

Rev

Rev 36642 | Rev 36741 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 36642 Rev 36644
Line 144... Line 144...
144
 
144
 
145
    @Autowired
145
    @Autowired
146
    private LeadLiveLocationRepository leadLiveLocationRepository;
146
    private LeadLiveLocationRepository leadLiveLocationRepository;
147
 
147
 
148
    @Autowired
148
    @Autowired
-
 
149
    private BeatRouteRepository beatRouteRepository;
-
 
150
 
-
 
151
    @Autowired
149
    private LeadVisitApprovalRepository leadVisitApprovalRepository;
152
    private LeadRouteRepository leadRouteRepository;
-
 
153
 
-
 
154
    @Autowired
-
 
155
    private BeatRepository beatRepository;
150
 
156
 
151
    @Autowired
157
    @Autowired
152
    private Mongo mongoClient;
158
    private Mongo mongoClient;
153
 
159
 
154
    @Autowired
160
    @Autowired
Line 921... Line 927...
921
 
927
 
922
        if (createLeadActivityRequest.getStatus() == LeadStatus.followUp) {
928
        if (createLeadActivityRequest.getStatus() == LeadStatus.followUp) {
923
            leadActivity.setSchelduleTimestamp(createLeadActivityRequest.getScheldule());
929
            leadActivity.setSchelduleTimestamp(createLeadActivityRequest.getScheldule());
924
            leadActivity.setCommunicationType(createLeadActivityRequest.getCommunicationType());
930
            leadActivity.setCommunicationType(createLeadActivityRequest.getCommunicationType());
925
            if (leadActivity.getCommunicationType().equals(CommunicationType.VISIT)) {
931
            if (leadActivity.getCommunicationType().equals(CommunicationType.VISIT)) {
926
                // Create pending visit approval instead of direct visit request
-
 
927
                LeadVisitApproval approval = new LeadVisitApproval();
-
 
928
                approval.setLeadId(createLeadActivityRequest.getId());
-
 
929
                approval.setAssignedTo(createLeadActivityRequest.getAssignTo());
-
 
930
                approval.setRequestedBy(authUser.getId());
-
 
931
                approval.setScheduleTimestamp(createLeadActivityRequest.getScheldule());
-
 
932
                approval.setStatus("PENDING");
-
 
933
                approval.setCreatedTimestamp(LocalDateTime.now());
-
 
934
                approval.setUpdatedTimestamp(LocalDateTime.now());
-
 
935
 
-
 
936
                // Parse beat selection if provided (format: "date|beatName|planGroupId")
932
                // Parse beat selection (format: "date|beatName|beatId")
937
                String beatSelection = createLeadActivityRequest.getBeatSelection();
933
                String beatSelection = createLeadActivityRequest.getBeatSelection();
-
 
934
                int beatId = 0;
-
 
935
                LocalDate beatDate = createLeadActivityRequest.getScheldule() != null
-
 
936
                        ? createLeadActivityRequest.getScheldule().toLocalDate() : LocalDate.now();
-
 
937
                String beatName = "Beat";
-
 
938
 
938
                if (beatSelection != null && beatSelection.contains("|")) {
939
                if (beatSelection != null && beatSelection.contains("|")) {
939
                    String[] parts = beatSelection.split("\\|", 3);
940
                    String[] parts = beatSelection.split("\\|", 3);
940
                    approval.setBeatDate(LocalDate.parse(parts[0]));
941
                    beatDate = LocalDate.parse(parts[0]);
941
                    approval.setBeatName(parts.length > 1 ? parts[1] : "");
942
                    beatName = parts.length > 1 ? parts[1] : "Beat";
942
                    if (parts.length > 2) {
943
                    if (parts.length > 2) {
-
 
944
                        try {
943
                        approval.setBeatPlanGroupId(parts[2]);
945
                            beatId = Integer.parseInt(parts[2]);
-
 
946
                        } catch (NumberFormatException ignored) {
-
 
947
                        }
-
 
948
                    }
-
 
949
                }
-
 
950
 
-
 
951
                // Find optimal insert position using lead geolocation
-
 
952
                int insertAt = 0;
-
 
953
                LeadLiveLocation leadGeo = leadLiveLocationRepository.selectApprovedByLeadId(createLeadActivityRequest.getId());
-
 
954
                List<BeatRoute> existingStops = beatId > 0
-
 
955
                        ? beatRouteRepository.selectByBeatId(beatId).stream()
-
 
956
                        .sorted(Comparator.comparingInt(BeatRoute::getSequenceOrder))
-
 
957
                        .collect(Collectors.toList())
-
 
958
                        : new ArrayList<>();
-
 
959
 
-
 
960
                insertAt = existingStops.size(); // default: append at end
-
 
961
 
-
 
962
                if (!existingStops.isEmpty() && leadGeo != null) {
-
 
963
                    // Use nearest neighbor to find optimal position
-
 
964
                    // (simplified — append at end for now, full geocoding done in LeadGeoLocationController)
-
 
965
                    insertAt = existingStops.size();
-
 
966
                }
-
 
967
 
-
 
968
                // Shift existing stops
-
 
969
                for (BeatRoute stop : existingStops) {
-
 
970
                    if (stop.getSequenceOrder() >= insertAt) {
-
 
971
                        stop.setSequenceOrder(stop.getSequenceOrder() + 1);
944
                    }
972
                    }
945
                } else if (createLeadActivityRequest.getScheldule() != null) {
-
 
946
                    approval.setBeatDate(createLeadActivityRequest.getScheldule().toLocalDate());
-
 
947
                }
973
                }
948
 
974
 
-
 
975
                // Create lead_route entry (directly APPROVED)
-
 
976
                LeadRoute leadRoute = new LeadRoute();
-
 
977
                leadRoute.setBeatId(beatId);
-
 
978
                leadRoute.setLeadId(createLeadActivityRequest.getId());
-
 
979
                leadRoute.setScheduleDate(beatDate);
-
 
980
                leadRoute.setSequenceOrder(insertAt);
-
 
981
                leadRoute.setStatus("APPROVED");
-
 
982
                leadRoute.setRequestedBy(authUser.getId());
-
 
983
                leadRoute.setApprovedBy(authUser.getId());
-
 
984
                leadRoute.setApprovedTimestamp(LocalDateTime.now());
-
 
985
                leadRoute.setCreatedTimestamp(LocalDateTime.now());
-
 
986
                leadRoute.setUpdatedTimestamp(LocalDateTime.now());
-
 
987
 
-
 
988
                // Set nearest store
-
 
989
                if (!existingStops.isEmpty()) {
-
 
990
                    leadRoute.setNearestStoreId(existingStops.get(Math.min(insertAt, existingStops.size() - 1)).getFofoId());
-
 
991
                }
949
                leadVisitApprovalRepository.persist(approval);
992
                leadRouteRepository.persist(leadRoute);
-
 
993
 
-
 
994
                // Create visit request
-
 
995
                visitRequestRepository.createVisitRequest(
-
 
996
                        createLeadActivityRequest.getId(), "lead",
-
 
997
                        createLeadActivityRequest.getAssignTo(),
-
 
998
                        beatDate.atTime(10, 0));
950
 
999
 
951
                // Log activity
1000
                // Log activity
952
                LeadActivity approvalActivity = new LeadActivity();
1001
                LeadActivity visitActivity = new LeadActivity();
953
                approvalActivity.setLeadId(createLeadActivityRequest.getId());
1002
                visitActivity.setLeadId(createLeadActivityRequest.getId());
954
                approvalActivity.setRemark("Visit requested on beat: " + approval.getBeatName()
1003
                visitActivity.setRemark("Lead scheduled for visit on beat: " + beatName
955
                        + " (" + approval.getBeatDate() + ") - Pending L4 approval");
1004
                        + " (" + beatDate + ") at stop #" + (insertAt + 1));
956
                approvalActivity.setAuthId(authUser.getId());
1005
                visitActivity.setAuthId(authUser.getId());
957
                approvalActivity.setCreatedTimestamp(LocalDateTime.now());
1006
                visitActivity.setCreatedTimestamp(LocalDateTime.now());
958
                leadActivityRepository.persist(approvalActivity);
1007
                leadActivityRepository.persist(visitActivity);
959
            }
1008
            }
960
        } else {
1009
        } else {
961
            leadActivity.setSchelduleTimestamp(null);
1010
            leadActivity.setSchelduleTimestamp(null);
962
        }
1011
        }
963
        leadActivity.setCreatedTimestamp(LocalDateTime.now());
1012
        leadActivity.setCreatedTimestamp(LocalDateTime.now());