Subversion Repositories SmartDukaan

Rev

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

Rev 30822 Rev 31249
Line 1... Line 1...
1
package com.spice.profitmandi.web.controller;
1
package com.spice.profitmandi.web.controller;
2
 
2
 
3
import java.io.ByteArrayInputStream;
-
 
4
import java.io.ByteArrayOutputStream;
-
 
5
import java.io.IOException;
3
import java.io.IOException;
6
import java.io.InputStream;
-
 
7
import java.time.LocalDate;
4
import java.time.LocalDate;
8
import java.time.LocalDateTime;
5
import java.time.LocalDateTime;
9
import java.time.format.DateTimeFormatter;
6
import java.time.format.DateTimeFormatter;
10
import java.util.ArrayList;
7
import java.util.ArrayList;
11
import java.util.Arrays;
8
import java.util.Arrays;
12
import java.util.Base64;
-
 
13
import java.util.Comparator;
9
import java.util.Comparator;
14
import java.util.HashMap;
10
import java.util.HashMap;
15
import java.util.List;
11
import java.util.List;
16
import java.util.Map;
12
import java.util.Map;
17
import java.util.Map.Entry;
13
import java.util.Map.Entry;
Line 22... Line 18...
22
 
18
 
23
import org.apache.commons.csv.CSVRecord;
19
import org.apache.commons.csv.CSVRecord;
24
import org.apache.logging.log4j.LogManager;
20
import org.apache.logging.log4j.LogManager;
25
import org.apache.logging.log4j.Logger;
21
import org.apache.logging.log4j.Logger;
26
import org.springframework.beans.factory.annotation.Autowired;
22
import org.springframework.beans.factory.annotation.Autowired;
27
import org.springframework.core.io.InputStreamResource;
-
 
28
import org.springframework.format.annotation.DateTimeFormat;
23
import org.springframework.format.annotation.DateTimeFormat;
29
import org.springframework.http.HttpHeaders;
24
import org.springframework.http.HttpHeaders;
30
import org.springframework.http.HttpStatus;
25
import org.springframework.http.HttpStatus;
31
import org.springframework.http.MediaType;
26
import org.springframework.http.MediaType;
32
import org.springframework.http.ResponseEntity;
27
import org.springframework.http.ResponseEntity;
Line 39... Line 34...
39
import org.springframework.web.bind.annotation.RequestParam;
34
import org.springframework.web.bind.annotation.RequestParam;
40
import org.springframework.web.bind.annotation.RequestPart;
35
import org.springframework.web.bind.annotation.RequestPart;
41
import org.springframework.web.multipart.MultipartFile;
36
import org.springframework.web.multipart.MultipartFile;
42
 
37
 
43
import com.mongodb.DBObject;
38
import com.mongodb.DBObject;
-
 
39
import com.spice.profitmandi.common.enumuration.MessageType;
44
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
40
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
45
import com.spice.profitmandi.common.model.BrandStockPrice;
-
 
46
import com.spice.profitmandi.common.model.CustomRetailer;
41
import com.spice.profitmandi.common.model.CustomRetailer;
47
import com.spice.profitmandi.common.model.InvoicePdfModel;
-
 
48
import com.spice.profitmandi.common.model.ProfitMandiConstants;
42
import com.spice.profitmandi.common.model.ProfitMandiConstants;
-
 
43
import com.spice.profitmandi.common.model.SendNotificationModel;
49
import com.spice.profitmandi.common.util.FileUtil;
44
import com.spice.profitmandi.common.util.FileUtil;
50
import com.spice.profitmandi.common.util.PdfUtils;
45
import com.spice.profitmandi.common.util.FormattingUtils;
51
import com.spice.profitmandi.common.web.util.ResponseSender;
46
import com.spice.profitmandi.common.web.util.ResponseSender;
52
import com.spice.profitmandi.dao.entity.auth.AuthUser;
47
import com.spice.profitmandi.dao.entity.auth.AuthUser;
53
import com.spice.profitmandi.dao.entity.auth.PartnerCollectionPlan;
48
import com.spice.profitmandi.dao.entity.auth.PartnerCollectionPlan;
54
import com.spice.profitmandi.dao.entity.auth.PartnerCollectionRemark;
49
import com.spice.profitmandi.dao.entity.auth.PartnerCollectionRemark;
55
import com.spice.profitmandi.dao.entity.auth.PartnerSecondaryPlan;
50
import com.spice.profitmandi.dao.entity.auth.PartnerSecondaryPlan;
56
import com.spice.profitmandi.dao.entity.cs.Ticket;
51
import com.spice.profitmandi.dao.entity.cs.Ticket;
57
import com.spice.profitmandi.dao.entity.cs.TicketCategory;
52
import com.spice.profitmandi.dao.entity.cs.TicketCategory;
58
import com.spice.profitmandi.dao.entity.cs.TicketSubCategory;
53
import com.spice.profitmandi.dao.entity.cs.TicketSubCategory;
59
import com.spice.profitmandi.dao.entity.dtr.User;
54
import com.spice.profitmandi.dao.entity.dtr.User;
60
import com.spice.profitmandi.dao.entity.dtr.UserAccount;
55
import com.spice.profitmandi.dao.entity.dtr.UserAccount;
61
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
-
 
62
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
56
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
63
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
57
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
64
import com.spice.profitmandi.dao.entity.fofo.PartnerOnBoardingPanel;
58
import com.spice.profitmandi.dao.entity.fofo.PartnerOnBoardingPanel;
65
import com.spice.profitmandi.dao.entity.user.FranchiseeActivity;
59
import com.spice.profitmandi.dao.entity.user.FranchiseeActivity;
66
import com.spice.profitmandi.dao.entity.user.FranchiseeVisit;
60
import com.spice.profitmandi.dao.entity.user.FranchiseeVisit;
67
import com.spice.profitmandi.dao.entity.user.Lead;
61
import com.spice.profitmandi.dao.entity.user.Lead;
68
import com.spice.profitmandi.dao.entity.user.LeadActivity;
62
import com.spice.profitmandi.dao.entity.user.LeadActivity;
-
 
63
import com.spice.profitmandi.dao.entity.user.VisitRequest;
69
import com.spice.profitmandi.dao.enumuration.auth.CollectionRemark;
64
import com.spice.profitmandi.dao.enumuration.auth.CollectionRemark;
-
 
65
import com.spice.profitmandi.dao.enumuration.dtr.CommunicationType;
70
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeActivityStatus;
66
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeActivityStatus;
71
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeVisitStatus;
67
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeVisitStatus;
72
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
68
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
73
import com.spice.profitmandi.dao.enumuration.dtr.StoreTimeline;
69
import com.spice.profitmandi.dao.enumuration.dtr.StoreTimeline;
-
 
70
import com.spice.profitmandi.dao.enumuration.dtr.VisitStatus;
74
import com.spice.profitmandi.dao.model.CreateRefferalRequest;
71
import com.spice.profitmandi.dao.model.CreateRefferalRequest;
75
import com.spice.profitmandi.dao.model.OnBoardingTimelineModel;
72
import com.spice.profitmandi.dao.model.OnBoardingTimelineModel;
76
import com.spice.profitmandi.dao.model.PartnerCollectionAchievementModel;
-
 
77
import com.spice.profitmandi.dao.model.PartnerCollectionPlanModel;
73
import com.spice.profitmandi.dao.model.PartnerCollectionPlanModel;
78
import com.spice.profitmandi.dao.model.PartnerCollectionRemarkModel;
74
import com.spice.profitmandi.dao.model.PartnerCollectionRemarkModel;
79
import com.spice.profitmandi.dao.model.PartnerSecondaryPlanModel;
75
import com.spice.profitmandi.dao.model.PartnerSecondaryPlanModel;
80
import com.spice.profitmandi.dao.model.PartnerTargetAchievementModel;
76
import com.spice.profitmandi.dao.model.PartnerTargetAchievementModel;
81
import com.spice.profitmandi.dao.model.TargetModel;
77
import com.spice.profitmandi.dao.model.TargetModel;
82
import com.spice.profitmandi.dao.model.TicketViewModel;
78
import com.spice.profitmandi.dao.model.TicketViewModel;
83
import com.spice.profitmandi.dao.model.UserCart;
79
import com.spice.profitmandi.dao.model.UserCart;
-
 
80
import com.spice.profitmandi.dao.model.UserVisitModel;
-
 
81
import com.spice.profitmandi.dao.model.VisitDescriptionModel;
-
 
82
import com.spice.profitmandi.dao.model.VisitSummaryModel;
84
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
83
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
85
import com.spice.profitmandi.dao.repository.auth.AuthUserPartnerMappingRepository;
84
import com.spice.profitmandi.dao.repository.auth.AuthUserPartnerMappingRepository;
86
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionPlanRepository;
85
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionPlanRepository;
87
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionRemarkRepository;
86
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionRemarkRepository;
88
import com.spice.profitmandi.dao.repository.auth.PartnerSecondaryPlanRepository;
87
import com.spice.profitmandi.dao.repository.auth.PartnerSecondaryPlanRepository;
89
import com.spice.profitmandi.dao.repository.cs.CsService;
88
import com.spice.profitmandi.dao.repository.cs.CsService;
90
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
-
 
91
import com.spice.profitmandi.dao.repository.cs.TicketCategoryRepository;
89
import com.spice.profitmandi.dao.repository.cs.TicketCategoryRepository;
92
import com.spice.profitmandi.dao.repository.cs.TicketRepository;
90
import com.spice.profitmandi.dao.repository.cs.TicketRepository;
93
import com.spice.profitmandi.dao.repository.cs.TicketSubCategoryRepository;
91
import com.spice.profitmandi.dao.repository.cs.TicketSubCategoryRepository;
94
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
92
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
95
import com.spice.profitmandi.dao.repository.dtr.FranchiseeActivityRepository;
93
import com.spice.profitmandi.dao.repository.dtr.FranchiseeActivityRepository;
Line 98... Line 96...
98
import com.spice.profitmandi.dao.repository.dtr.LeadRepository;
96
import com.spice.profitmandi.dao.repository.dtr.LeadRepository;
99
import com.spice.profitmandi.dao.repository.dtr.Mongo;
97
import com.spice.profitmandi.dao.repository.dtr.Mongo;
100
import com.spice.profitmandi.dao.repository.dtr.PartnerOnBoardingPanelRepository;
98
import com.spice.profitmandi.dao.repository.dtr.PartnerOnBoardingPanelRepository;
101
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
99
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
102
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
100
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
-
 
101
import com.spice.profitmandi.dao.repository.dtr.VisitRequestRepository;
103
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
102
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
104
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
103
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
-
 
104
import com.spice.profitmandi.service.AuthService;
105
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
105
import com.spice.profitmandi.service.NotificationService;
106
import com.spice.profitmandi.service.PartnerCollectionService;
106
import com.spice.profitmandi.service.PartnerCollectionService;
107
import com.spice.profitmandi.service.user.RetailerService;
107
import com.spice.profitmandi.service.user.RetailerService;
108
import com.spice.profitmandi.service.user.StoreTimelineTatService;
108
import com.spice.profitmandi.service.user.StoreTimelineTatService;
109
import com.spice.profitmandi.web.req.CreateFranchiseeRequest;
109
import com.spice.profitmandi.web.req.CreateFranchiseeRequest;
110
import com.spice.profitmandi.web.res.Partner;
110
import com.spice.profitmandi.web.res.Partner;
111
 
111
 
112
import io.swagger.annotations.ApiImplicitParam;
112
import io.swagger.annotations.ApiImplicitParam;
113
import io.swagger.annotations.ApiImplicitParams;
113
import io.swagger.annotations.ApiImplicitParams;
114
import okhttp3.OkHttpClient;
-
 
115
import okhttp3.Request;
-
 
116
import okhttp3.Response;
-
 
117
 
114
 
118
@Controller
115
@Controller
119
@Transactional(rollbackFor = Throwable.class)
116
@Transactional(rollbackFor = Throwable.class)
120
public class LeadController {
117
public class LeadController {
121
	private static final Logger LOGGER = LogManager.getLogger(LeadController.class);
118
	private static final Logger LOGGER = LogManager.getLogger(LeadController.class);
Line 181... Line 178...
181
 
178
 
182
	@Autowired
179
	@Autowired
183
	private OrderRepository orderRepository;
180
	private OrderRepository orderRepository;
184
 
181
 
185
	@Autowired
182
	@Autowired
186
	private PositionRepository positionRepository;
-
 
187
 
-
 
188
	@Autowired
-
 
189
	private UserWalletRepository userWalletRepository;
-
 
190
 
-
 
191
	@Autowired
-
 
192
	private PartnerCollectionPlanRepository partnerCollectionPlanRepository;
183
	private PartnerCollectionPlanRepository partnerCollectionPlanRepository;
193
 
184
 
194
	@Autowired
185
	@Autowired
195
	private PartnerSecondaryPlanRepository partnerSecondaryPlanRepository;
186
	private PartnerSecondaryPlanRepository partnerSecondaryPlanRepository;
196
 
187
 
Line 198... Line 189...
198
	private PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
189
	private PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
199
 
190
 
200
	@Autowired
191
	@Autowired
201
	private AuthUserPartnerMappingRepository authUserPartnerMappingRepository;
192
	private AuthUserPartnerMappingRepository authUserPartnerMappingRepository;
202
 
193
 
-
 
194
	@Autowired
-
 
195
	private VisitRequestRepository visitRequestRepository;
-
 
196
 
-
 
197
	@Autowired
-
 
198
	private AuthService authService;
-
 
199
 
-
 
200
	@Autowired
-
 
201
	private NotificationService notificationService;
-
 
202
 
203
	@RequestMapping(value = "/lead", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
203
	@RequestMapping(value = "/lead", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
204
	@ApiImplicitParams({
204
	@ApiImplicitParams({
205
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
205
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
206
	public ResponseEntity<?> LeadUser(HttpServletRequest request,
206
	public ResponseEntity<?> LeadUser(HttpServletRequest request,
207
			@RequestBody CreateRefferalRequest createRefferalRequest) throws Exception {
207
			@RequestBody CreateRefferalRequest createRefferalRequest) throws Exception {
Line 231... Line 231...
231
		leadRepository.persist(lead);
231
		leadRepository.persist(lead);
232
		LeadActivity leadActivity = new LeadActivity();
232
		LeadActivity leadActivity = new LeadActivity();
233
		leadActivity.setLeadId(lead.getId());
233
		leadActivity.setLeadId(lead.getId());
234
		leadActivity.setRemark(createRefferalRequest.getRemark());
234
		leadActivity.setRemark(createRefferalRequest.getRemark());
235
 
235
 
-
 
236
		leadActivity.setAuthId(authUser.getId());
-
 
237
 
236
		if (createRefferalRequest.getStatus().equals(LeadStatus.followUp)) {
238
		if (createRefferalRequest.getStatus().equals(LeadStatus.followUp)) {
237
			leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
239
			leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
-
 
240
			leadActivity.setCommunicationType(createRefferalRequest.getCommunicationType());
-
 
241
 
-
 
242
			if (leadActivity.getCommunicationType().equals(CommunicationType.VISIT)) {
-
 
243
 
-
 
244
				visitRequestRepository.createVisitRequest(lead.getId(), "lead", lead.getAssignTo(),
-
 
245
						createRefferalRequest.getSchelduleTimestamp());
-
 
246
			}
-
 
247
			//
238
			leadActivity.setClosureTimestamp(createRefferalRequest.getClosureTimestamp());
248
			leadActivity.setClosureTimestamp(createRefferalRequest.getClosureTimestamp());
239
			lead.setClosureTimestamp(createRefferalRequest.getClosureTimestamp());
249
			lead.setClosureTimestamp(createRefferalRequest.getClosureTimestamp());
240
		} else {
250
		} else {
241
			leadActivity.setSchelduleTimestamp(null);
251
			leadActivity.setSchelduleTimestamp(null);
242
			leadActivity.setClosureTimestamp(null);
252
			leadActivity.setClosureTimestamp(null);
Line 254... Line 264...
254
	public ResponseEntity<?> leadDescription(HttpServletRequest request, @RequestParam(name = "gmailId") String gmailId,
264
	public ResponseEntity<?> leadDescription(HttpServletRequest request, @RequestParam(name = "gmailId") String gmailId,
255
			@RequestParam(name = "status") LeadStatus status) throws ProfitMandiBusinessException {
265
			@RequestParam(name = "status") LeadStatus status) throws ProfitMandiBusinessException {
256
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
266
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
257
		List<Lead> leads = null;
267
		List<Lead> leads = null;
258
		LOGGER.info("emails" + status);
268
		LOGGER.info("emails" + status);
-
 
269
 
-
 
270
		List<VisitRequest> visitRequests = visitRequestRepository.selectByAuthIdAndDate(authUser.getId(),
-
 
271
				LocalDate.now());
-
 
272
		Map<Integer, List<VisitRequest>> visitRequestMap = null;
-
 
273
		if (!visitRequests.isEmpty()) {
-
 
274
			visitRequestMap = visitRequests.stream().collect(Collectors.groupingBy(x -> x.getVisitId()));
-
 
275
		}
259
		if (status.equals(LeadStatus.followUp)) {
276
		if (status.equals(LeadStatus.followUp)) {
260
 
277
 
261
			leads = leadRepository.selectLeadsScheduledBetweenDate(Arrays.asList(authUser.getId()), null, null);
278
			leads = leadRepository.selectLeadsScheduledBetweenDate(Arrays.asList(authUser.getId()), null, null);
-
 
279
 
-
 
280
			if (visitRequestMap != null) {
-
 
281
				for (Lead lead : leads) {
-
 
282
					List<VisitRequest> visitRequest = visitRequestMap.get(lead.getId());
-
 
283
 
-
 
284
					if (visitRequest != null) {
-
 
285
						if (visitRequest.size() > 1) {
-
 
286
 
-
 
287
							Comparator<VisitRequest> visitComparato = Comparator
-
 
288
									.comparing(VisitRequest::getCreatedTimestamp);
-
 
289
 
-
 
290
							VisitRequest youngestVisit = visitRequest.stream().max(visitComparato).get();
-
 
291
							lead.setVisitStatus(youngestVisit.getStatus());
-
 
292
 
-
 
293
						} else {
-
 
294
							lead.setVisitStatus(visitRequest.get(0).getStatus());
-
 
295
 
-
 
296
						}
-
 
297
					}
-
 
298
 
-
 
299
				}
-
 
300
			}
-
 
301
 
262
			leads = leads.stream()
302
			leads = leads.stream()
263
					.sorted(Comparator.comparing(Lead::getScheduledTimestamp,
303
					.sorted(Comparator.comparing(Lead::getScheduledTimestamp,
264
							Comparator.nullsFirst(Comparator.reverseOrder())))
304
							Comparator.nullsFirst(Comparator.reverseOrder())))
265
					.collect(Collectors
305
					.collect(Collectors
266
							.toList());/*
306
							.toList());/*
Line 298... Line 338...
298
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
338
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
299
	public ResponseEntity<?> leadUpdate(HttpServletRequest request, @RequestParam(name = "id") int id,
339
	public ResponseEntity<?> leadUpdate(HttpServletRequest request, @RequestParam(name = "id") int id,
300
			@RequestParam(name = "status") LeadStatus status, @RequestParam(name = "colorCheck") Boolean colorCheck,
340
			@RequestParam(name = "status") LeadStatus status, @RequestParam(name = "colorCheck") Boolean colorCheck,
301
			@RequestParam(name = "remark") String remark, @RequestParam(name = "reason") String reason,
341
			@RequestParam(name = "remark") String remark, @RequestParam(name = "reason") String reason,
302
			@RequestParam(name = "schelduleTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime schelduleTimestamp,
342
			@RequestParam(name = "schelduleTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime schelduleTimestamp,
303
			@RequestParam(name = "closureTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime closureTimestamp)
343
			@RequestParam(name = "closureTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime closureTimestamp,
-
 
344
			@RequestParam(name = "communicationType") CommunicationType communicationType)
304
			throws ProfitMandiBusinessException {
345
			throws ProfitMandiBusinessException {
305
 
346
 
306
		Lead lead = leadRepository.selectById(id);
347
		Lead lead = leadRepository.selectById(id);
307
 
348
 
308
		LeadActivity leadActivity = new LeadActivity();
349
		LeadActivity leadActivity = new LeadActivity();
Line 311... Line 352...
311
		leadActivity.setRemark(remark);
352
		leadActivity.setRemark(remark);
312
		leadActivity.setLeadId(id);
353
		leadActivity.setLeadId(id);
313
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
354
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
314
		leadActivity.setSchelduleTimestamp(null);
355
		leadActivity.setSchelduleTimestamp(null);
315
		leadActivity.setClosureTimestamp(null);
356
		leadActivity.setClosureTimestamp(null);
-
 
357
		leadActivity.setAuthId(lead.getAssignTo());
316
		lead.setUpdatedTimestamp(LocalDateTime.now());
358
		lead.setUpdatedTimestamp(LocalDateTime.now());
317
		if (colorCheck == true) {
359
		if (colorCheck == true) {
318
			lead.setColor("Green");
360
			lead.setColor("Green");
319
		} else {
361
		} else {
320
			lead.setColor("Yellow");
362
			lead.setColor("Yellow");
321
		}
363
		}
322
		if (status == LeadStatus.followUp) {
364
		if (status == LeadStatus.followUp) {
323
 
365
 
-
 
366
			if (schelduleTimestamp != null) {
-
 
367
 
-
 
368
				leadActivity.setCommunicationType(communicationType);
-
 
369
 
-
 
370
				if (leadActivity.getCommunicationType().equals(CommunicationType.VISIT)) {
-
 
371
 
-
 
372
					visitRequestRepository.createVisitRequest(lead.getId(), "lead", lead.getAssignTo(),
-
 
373
							schelduleTimestamp);
-
 
374
				}
-
 
375
 
-
 
376
			}
324
			leadActivity.setSchelduleTimestamp(schelduleTimestamp);
377
			leadActivity.setSchelduleTimestamp(schelduleTimestamp);
325
			leadActivity.setClosureTimestamp(closureTimestamp);
378
			leadActivity.setClosureTimestamp(closureTimestamp);
326
			lead.setClosureTimestamp(closureTimestamp);
379
			lead.setClosureTimestamp(closureTimestamp);
327
 
380
 
328
		} else {
381
		} else {
Line 436... Line 489...
436
		franchiseeVisit.setCreatedBy(authUserName);
489
		franchiseeVisit.setCreatedBy(authUserName);
437
		franchiseeVisit.setAuthId(authUser.getId());
490
		franchiseeVisit.setAuthId(authUser.getId());
438
 
491
 
439
		franchiseeVisitRepository.persist(franchiseeVisit);
492
		franchiseeVisitRepository.persist(franchiseeVisit);
440
 
493
 
-
 
494
		FranchiseeActivity franchiseeActivity = new FranchiseeActivity();
-
 
495
		franchiseeActivity.setAction(FranchiseeActivityStatus.FOLLOWUP);
-
 
496
		franchiseeActivity.setFranchiseeVisitd(franchiseeVisit.getId());
-
 
497
		franchiseeActivity.setResolution(createFranchiseeRequest.getResolution());
-
 
498
		franchiseeActivity.setSchelduleTimestamp(createFranchiseeRequest.getFirstSchelduleTimestamp());
-
 
499
 
-
 
500
		franchiseeActivity.setCreatedTimestamp(LocalDateTime.now());
-
 
501
		franchiseeActivityRepository.persist(franchiseeActivity);
-
 
502
 
-
 
503
		franchiseeVisit.setFranchiseActivityId(franchiseeActivity.getId());
-
 
504
 
-
 
505
		visitRequestRepository.createVisitRequest(franchiseeVisit.getId(), "franchiseeVisit", authUser.getId(),
-
 
506
				createFranchiseeRequest.getFirstSchelduleTimestamp());
-
 
507
 
441
		return responseSender.ok(true);
508
		return responseSender.ok(true);
442
	}
509
	}
443
 
510
 
444
	@RequestMapping(value = "/franchise-visit", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
511
	@RequestMapping(value = "/franchise-visit", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
445
	@ApiImplicitParams({
512
	@ApiImplicitParams({
Line 491... Line 558...
491
		franchiseeActivity.setAction(createFranchiseeRequest.getAction());
558
		franchiseeActivity.setAction(createFranchiseeRequest.getAction());
492
		franchiseeActivity.setFranchiseeVisitd(franchiseeVisit.getId());
559
		franchiseeActivity.setFranchiseeVisitd(franchiseeVisit.getId());
493
		franchiseeActivity.setResolution(createFranchiseeRequest.getResolution());
560
		franchiseeActivity.setResolution(createFranchiseeRequest.getResolution());
494
		if (createFranchiseeRequest.getAction().equals(FranchiseeActivityStatus.FOLLOWUP)) {
561
		if (createFranchiseeRequest.getAction().equals(FranchiseeActivityStatus.FOLLOWUP)) {
495
			franchiseeActivity.setSchelduleTimestamp(createFranchiseeRequest.getSchelduleTimestamp());
562
			franchiseeActivity.setSchelduleTimestamp(createFranchiseeRequest.getSchelduleTimestamp());
-
 
563
 
-
 
564
			visitRequestRepository.createVisitRequest(franchiseeVisit.getId(), "franchiseeVisit",
-
 
565
					franchiseeVisit.getAuthId(), createFranchiseeRequest.getSchelduleTimestamp());
496
		} else {
566
		} else {
497
			franchiseeActivity.setSchelduleTimestamp(null);
567
			franchiseeActivity.setSchelduleTimestamp(null);
498
		}
568
		}
499
		franchiseeActivity.setCreatedTimestamp(LocalDateTime.now());
569
		franchiseeActivity.setCreatedTimestamp(LocalDateTime.now());
500
		franchiseeActivityRepository.persist(franchiseeActivity);
570
		franchiseeActivityRepository.persist(franchiseeActivity);
Line 509... Line 579...
509
	public ResponseEntity<?> getFranchiseVisit(HttpServletRequest request,
579
	public ResponseEntity<?> getFranchiseVisit(HttpServletRequest request,
510
			@RequestParam(name = "gmailId") String gmailId, @RequestParam(name = "status") FranchiseeVisitStatus status,
580
			@RequestParam(name = "gmailId") String gmailId, @RequestParam(name = "status") FranchiseeVisitStatus status,
511
			@RequestParam(name = "offset", defaultValue = "0") int offset,
581
			@RequestParam(name = "offset", defaultValue = "0") int offset,
512
			@RequestParam(name = "limit", defaultValue = "10") int limit) throws ProfitMandiBusinessException {
582
			@RequestParam(name = "limit", defaultValue = "10") int limit) throws ProfitMandiBusinessException {
513
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
583
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
-
 
584
		List<VisitRequest> visitRequests = visitRequestRepository.selectByAuthIdAndDate(authUser.getId(),
-
 
585
				LocalDate.now());
-
 
586
		Map<Integer, List<VisitRequest>> visitRequestMap = null;
-
 
587
		if (!visitRequests.isEmpty()) {
-
 
588
			visitRequestMap = visitRequests.stream().collect(Collectors.groupingBy(x -> x.getVisitId()));
514
 
589
		}
515
		List<FranchiseeVisit> franchiseeVisits = franchiseeVisitRepository.selectByAuthIdAndStatus(authUser.getId(),
590
		List<FranchiseeVisit> franchiseeVisits = franchiseeVisitRepository.selectByAuthIdAndStatus(authUser.getId(),
516
				status, offset, limit);
591
				status, offset, limit);
517
 
592
 
518
		for (FranchiseeVisit fv : franchiseeVisits) {
593
		for (FranchiseeVisit fv : franchiseeVisits) {
-
 
594
			if (visitRequestMap != null) {
-
 
595
 
-
 
596
				List<VisitRequest> visitRequest = visitRequestMap.get(fv.getId());
-
 
597
				if (visitRequest != null) {
-
 
598
					if (visitRequest.size() > 1) {
-
 
599
 
-
 
600
						Comparator<VisitRequest> visitComparato = Comparator
-
 
601
								.comparing(VisitRequest::getCreatedTimestamp);
-
 
602
 
-
 
603
						VisitRequest youngestVisit = visitRequest.stream().max(visitComparato).get();
-
 
604
						fv.setVisitStatus(youngestVisit.getStatus());
-
 
605
 
-
 
606
					} else {
-
 
607
						fv.setVisitStatus(visitRequest.get(0).getStatus());
-
 
608
 
-
 
609
					}
-
 
610
				}
-
 
611
			}
519
			if (fv.getFranchiseActivityId() != 0) {
612
			if (fv.getFranchiseActivityId() != 0) {
520
				FranchiseeActivity fA = franchiseeActivityRepository.selectById(fv.getFranchiseActivityId());
613
				FranchiseeActivity fA = franchiseeActivityRepository.selectById(fv.getFranchiseActivityId());
521
				fv.setFranchiseeActivity(fA);
614
				fv.setFranchiseeActivity(fA);
522
			}
615
			}
-
 
616
 
523
		}
617
		}
524
 
618
 
525
		return responseSender.ok(franchiseeVisits);
619
		return responseSender.ok(franchiseeVisits);
526
 
620
 
527
	}
621
	}
Line 567... Line 661...
567
 
661
 
568
		FranchiseeActivity franchiseeActivity = new FranchiseeActivity();
662
		FranchiseeActivity franchiseeActivity = new FranchiseeActivity();
569
 
663
 
570
		if (action == FranchiseeActivityStatus.FOLLOWUP) {
664
		if (action == FranchiseeActivityStatus.FOLLOWUP) {
571
 
665
 
-
 
666
			if (schelduleTimestamp != null) {
-
 
667
 
-
 
668
				visitRequestRepository.createVisitRequest(franchiseeVisit.getId(), "franchiseeVisit",
-
 
669
						franchiseeVisit.getAuthId(), schelduleTimestamp);
-
 
670
			}
-
 
671
 
572
			franchiseeActivity.setSchelduleTimestamp(schelduleTimestamp);
672
			franchiseeActivity.setSchelduleTimestamp(schelduleTimestamp);
573
			franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
673
			franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
574
			franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
674
			franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
575
			franchiseeVisitRepository.persist(franchiseeVisit);
675
			franchiseeVisitRepository.persist(franchiseeVisit);
576
 
676
 
Line 1306... Line 1406...
1306
		franchiseeVisit.setVisitTimestamp(LocalDateTime.now());
1406
		franchiseeVisit.setVisitTimestamp(LocalDateTime.now());
1307
 
1407
 
1308
		return responseSender.ok(true);
1408
		return responseSender.ok(true);
1309
 
1409
 
1310
	}
1410
	}
-
 
1411
 
-
 
1412
	@RequestMapping(value = "/getVisitRequests", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
-
 
1413
	public ResponseEntity<?> getVisitRequests(HttpServletRequest request,
-
 
1414
			@RequestParam(name = "gmailId") String gmailId, Model model) throws Exception {
-
 
1415
 
-
 
1416
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
-
 
1417
 
-
 
1418
		List<Integer> authUserIds = authService.getAllReportees(authUser.getId());
-
 
1419
		List<VisitSummaryModel> visitSummary = new ArrayList<>();
-
 
1420
 
-
 
1421
		if (!authUserIds.isEmpty()) {
-
 
1422
			List<AuthUser> authUsers = authRepository.selectAllAuthUserByIds(authUserIds);
-
 
1423
 
-
 
1424
			List<VisitRequest> allVisitRequests = visitRequestRepository.selectByAuthIdsAndDate(authUserIds,
-
 
1425
					LocalDate.now().minusDays(7), Arrays.asList(VisitStatus.approved, VisitStatus.pending));
-
 
1426
			LOGGER.info("allVisitRequests {}", allVisitRequests);
-
 
1427
 
-
 
1428
			if (!allVisitRequests.isEmpty()) {
-
 
1429
 
-
 
1430
				List<Integer> leadIds = allVisitRequests.stream().filter(x -> x.getVisitType().equals("lead"))
-
 
1431
						.map(x -> x.getVisitId()).collect(Collectors.toList());
-
 
1432
				List<Lead> leads = new ArrayList<>();
-
 
1433
				if (!leadIds.isEmpty()) {
-
 
1434
					leads = leadRepository.selectAllByIds(leadIds);
-
 
1435
 
-
 
1436
					for (Lead lead : leads) {
-
 
1437
						List<LeadActivity> leadActivities = leadActivityRepository.selectBYLeadId(lead.getId());
-
 
1438
						lead.setScheduledTimestamp(leadActivities.get(0).getSchelduleTimestamp());
-
 
1439
						lead.setLeadActivity(leadActivities.get(0));
-
 
1440
					}
-
 
1441
				}
-
 
1442
				List<Integer> franchiseeIds = allVisitRequests.stream()
-
 
1443
						.filter(x -> x.getVisitType().equals("franchiseeVisit")).map(x -> x.getVisitId())
-
 
1444
						.collect(Collectors.toList());
-
 
1445
				List<FranchiseeVisit> franchiseeVisits = new ArrayList<>();
-
 
1446
				if (!franchiseeIds.isEmpty()) {
-
 
1447
					franchiseeVisits = franchiseeVisitRepository.selectAllByIds(franchiseeIds);
-
 
1448
					LOGGER.info("franchiseeVisits {}", franchiseeVisits);
-
 
1449
 
-
 
1450
					for (FranchiseeVisit franchiseeVisit : franchiseeVisits) {
-
 
1451
						List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository
-
 
1452
								.selectByFranchiseeVisitId(franchiseeVisit.getId());
-
 
1453
						LOGGER.info("franchiseeActivities {}", franchiseeActivities);
-
 
1454
 
-
 
1455
						franchiseeVisit.setScheduleTimestamp(franchiseeActivities.get(0).getSchelduleTimestamp());
-
 
1456
						franchiseeVisit.setFranchiseeActivity(franchiseeActivities.get(0));
-
 
1457
					}
-
 
1458
 
-
 
1459
				}
-
 
1460
 
-
 
1461
				Map<LocalDate, List<VisitRequest>> dateWiseVisitRequest = allVisitRequests.stream()
-
 
1462
						.collect(Collectors.groupingBy(x -> x.getScheduleTimestamp().toLocalDate()));
-
 
1463
 
-
 
1464
				for (Entry<LocalDate, List<VisitRequest>> visitEntry : dateWiseVisitRequest.entrySet()) {
-
 
1465
 
-
 
1466
					LocalDate date = visitEntry.getKey();
-
 
1467
					List<VisitRequest> visitRequests = visitEntry.getValue();
-
 
1468
 
-
 
1469
					VisitSummaryModel visitSummaryModel = new VisitSummaryModel();
-
 
1470
 
-
 
1471
					visitSummaryModel.setDate(date);
-
 
1472
					List<Integer> dateWiseLeadEntry = visitRequests.stream()
-
 
1473
							.filter(x -> x.getVisitType().equals("lead")).map(x -> x.getVisitId())
-
 
1474
							.collect(Collectors.toList());
-
 
1475
 
-
 
1476
					List<Integer> dateWiseFranchiseeIds = visitRequests.stream()
-
 
1477
							.filter(x -> x.getVisitType().equals("franchiseeVisit")).map(x -> x.getVisitId())
-
 
1478
							.collect(Collectors.toList());
-
 
1479
 
-
 
1480
					Map<Integer, List<Lead>> filteredLeadsMap = null;
-
 
1481
					if (!leads.isEmpty()) {
-
 
1482
						filteredLeadsMap = leads.stream().filter(x -> dateWiseLeadEntry.contains(x.getId()))
-
 
1483
								.collect(Collectors.groupingBy(x -> x.getAssignTo()));
-
 
1484
 
-
 
1485
					}
-
 
1486
 
-
 
1487
					Map<Integer, List<FranchiseeVisit>> filteredFranchiseeVisitsMap = null;
-
 
1488
 
-
 
1489
					if (!franchiseeVisits.isEmpty()) {
-
 
1490
						filteredFranchiseeVisitsMap = franchiseeVisits.stream()
-
 
1491
								.filter(x -> dateWiseFranchiseeIds.contains(x.getId()))
-
 
1492
								.collect(Collectors.groupingBy(x -> x.getAuthId()));
-
 
1493
 
-
 
1494
					}
-
 
1495
 
-
 
1496
					List<UserVisitModel> userVisits = new ArrayList<>();
-
 
1497
 
-
 
1498
					for (AuthUser auth : authUsers) {
-
 
1499
						UserVisitModel userVisitModel = new UserVisitModel();
-
 
1500
						List<VisitDescriptionModel> visitDescriptions = new ArrayList<>();
-
 
1501
 
-
 
1502
						List<Lead> authLeads = new ArrayList<>();
-
 
1503
						if (filteredLeadsMap != null) {
-
 
1504
							authLeads = filteredLeadsMap.get(auth.getId());
-
 
1505
 
-
 
1506
						}
-
 
1507
 
-
 
1508
						if (authLeads != null && !authLeads.isEmpty()) {
-
 
1509
							userVisitModel.setAuthUser(auth.getFullName());
-
 
1510
 
-
 
1511
							for (Lead lead : authLeads) {
-
 
1512
 
-
 
1513
								VisitRequest visitRequest = visitRequests.stream().filter(
-
 
1514
										x -> x.getVisitId() == lead.getId() && x.getCreatedBy() == lead.getAssignTo())
-
 
1515
										.findAny().orElse(null);
-
 
1516
								VisitDescriptionModel visitDescriptionModel = new VisitDescriptionModel();
-
 
1517
								visitDescriptionModel.setVisitId(visitRequest.getId());
-
 
1518
								visitDescriptionModel.setVisitName(lead.getFirstName());
-
 
1519
								visitDescriptionModel.setCity(lead.getCity());
-
 
1520
								visitDescriptionModel.setState(lead.getState());
-
 
1521
								visitDescriptionModel.setScheduleTime(lead.getScheduledTimestamp());
-
 
1522
								visitDescriptionModel.setStatus(visitRequest.getStatus());
-
 
1523
								visitDescriptionModel.setRemarks(lead.getLeadActivity().getRemark());
-
 
1524
								visitDescriptionModel.setVisitType(visitRequest.getVisitType());
-
 
1525
								visitDescriptions.add(visitDescriptionModel);
-
 
1526
 
-
 
1527
							}
-
 
1528
						}
-
 
1529
 
-
 
1530
						List<FranchiseeVisit> authfranchiseeVisit = new ArrayList<>();
-
 
1531
						if (filteredFranchiseeVisitsMap != null) {
-
 
1532
							authfranchiseeVisit = filteredFranchiseeVisitsMap.get(auth.getId());
-
 
1533
 
-
 
1534
						}
-
 
1535
 
-
 
1536
						if (authfranchiseeVisit != null && !authfranchiseeVisit.isEmpty()) {
-
 
1537
							userVisitModel.setAuthUser(auth.getFullName());
-
 
1538
 
-
 
1539
							for (FranchiseeVisit franchiseeVisit : authfranchiseeVisit) {
-
 
1540
 
-
 
1541
								VisitRequest visitRequest = visitRequests.stream()
-
 
1542
										.filter(x -> x.getVisitId() == franchiseeVisit.getId()
-
 
1543
												&& x.getCreatedBy() == franchiseeVisit.getAuthId())
-
 
1544
										.findAny().orElse(null);
-
 
1545
 
-
 
1546
								CustomRetailer customRetailer = retailerService
-
 
1547
										.getFofoRetailer(franchiseeVisit.getFofoId());
-
 
1548
								VisitDescriptionModel visitDescriptionModel = new VisitDescriptionModel();
-
 
1549
								visitDescriptionModel.setVisitId(visitRequest.getId());
-
 
1550
								visitDescriptionModel.setVisitName(franchiseeVisit.getPartnerName());
-
 
1551
								visitDescriptionModel.setCity(customRetailer.getAddress().getCity());
-
 
1552
								visitDescriptionModel.setState(customRetailer.getAddress().getState());
-
 
1553
								visitDescriptionModel.setScheduleTime(
-
 
1554
										franchiseeVisit.getFranchiseeActivity().getSchelduleTimestamp());
-
 
1555
								visitDescriptionModel.setStatus(visitRequest.getStatus());
-
 
1556
								visitDescriptionModel.setRemarks(franchiseeVisit.getAgenda());
-
 
1557
								visitDescriptionModel.setVisitType(visitRequest.getVisitType());
-
 
1558
 
-
 
1559
								visitDescriptions.add(visitDescriptionModel);
-
 
1560
 
-
 
1561
							}
-
 
1562
						}
-
 
1563
 
-
 
1564
						userVisitModel.setVisitDescriptions(visitDescriptions);
-
 
1565
						LOGGER.info("userVisit {}", userVisitModel);
-
 
1566
 
-
 
1567
						if (userVisitModel.getAuthUser() != null) {
-
 
1568
							userVisits.add(userVisitModel);
-
 
1569
						}
-
 
1570
 
-
 
1571
					}
-
 
1572
 
-
 
1573
					visitSummaryModel.setUserVisits(userVisits);
-
 
1574
 
-
 
1575
					visitSummary.add(visitSummaryModel);
-
 
1576
 
-
 
1577
				}
-
 
1578
 
-
 
1579
			}
-
 
1580
 
-
 
1581
		}
-
 
1582
		return responseSender.ok(visitSummary);
-
 
1583
 
-
 
1584
	}
-
 
1585
 
-
 
1586
	@RequestMapping(value = "/visitRequest", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
-
 
1587
	public ResponseEntity<?> visitRequest(HttpServletRequest request, @RequestParam(name = "gmailId") String gmailId,
-
 
1588
			@RequestParam(name = "visitId") int visitId, @RequestParam(name = "status") VisitStatus status, Model model)
-
 
1589
			throws Exception {
-
 
1590
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
-
 
1591
 
-
 
1592
		VisitRequest visitRequest = visitRequestRepository.selectById(visitId);
-
 
1593
		visitRequest.setActionedBy(authUser.getId());
-
 
1594
		visitRequest.setStatus(status);
-
 
1595
		visitRequest.setUpdatedTimestamp(LocalDateTime.now());
-
 
1596
		if (status.equals(VisitStatus.approved)) {
-
 
1597
			visitRequest.setApprovedTimestamp(LocalDateTime.now());
-
 
1598
		}
-
 
1599
 
-
 
1600
		SendNotificationModel sendNotificationModel = new SendNotificationModel();
-
 
1601
		sendNotificationModel.setCampaignName("Visit Request");
-
 
1602
		sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
-
 
1603
		sendNotificationModel.setTitle("Visit Request");
-
 
1604
		String message = "Visit Request has been " + status + " for scheduled time on "
-
 
1605
				+ visitRequest.getScheduleTimestamp().toLocalDate();
-
 
1606
 
-
 
1607
		sendNotificationModel.setMessage(message);
-
 
1608
		sendNotificationModel.setMessageType(MessageType.notification);
-
 
1609
		User user = userRepository.selectByEmailId(gmailId);
-
 
1610
		sendNotificationModel.setUserIds(new ArrayList<>(user.getId()));
-
 
1611
 
-
 
1612
		notificationService.sendNotificationToAll(sendNotificationModel);
-
 
1613
 
-
 
1614
		return responseSender.ok(true);
-
 
1615
 
-
 
1616
	}
-
 
1617
 
1311
}
1618
}
1312
1619