Subversion Repositories SmartDukaan

Rev

Rev 29447 | Rev 30078 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
25899 tejbeer 1
package com.spice.profitmandi.web.controller;
2
 
29434 amit.gupta 3
import java.time.LocalDate;
25899 tejbeer 4
import java.time.LocalDateTime;
29446 amit.gupta 5
import java.time.LocalTime;
25952 tejbeer 6
import java.util.ArrayList;
29434 amit.gupta 7
import java.util.Arrays;
25899 tejbeer 8
import java.util.List;
25952 tejbeer 9
import java.util.Map;
30077 tejbeer 10
import java.util.Map.Entry;
25952 tejbeer 11
import java.util.Set;
28935 tejbeer 12
import java.util.stream.Collectors;
25899 tejbeer 13
 
14
import javax.servlet.http.HttpServletRequest;
15
 
16
import org.apache.logging.log4j.LogManager;
17
import org.apache.logging.log4j.Logger;
18
import org.springframework.beans.factory.annotation.Autowired;
19
import org.springframework.format.annotation.DateTimeFormat;
20
import org.springframework.http.MediaType;
21
import org.springframework.http.ResponseEntity;
22
import org.springframework.stereotype.Controller;
23
import org.springframework.transaction.annotation.Transactional;
28935 tejbeer 24
import org.springframework.ui.Model;
25899 tejbeer 25
import org.springframework.web.bind.annotation.RequestBody;
26
import org.springframework.web.bind.annotation.RequestMapping;
27
import org.springframework.web.bind.annotation.RequestMethod;
28
import org.springframework.web.bind.annotation.RequestParam;
29
 
30
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
25952 tejbeer 31
import com.spice.profitmandi.common.model.CustomRetailer;
27117 tejbeer 32
import com.spice.profitmandi.common.model.ProfitMandiConstants;
25899 tejbeer 33
import com.spice.profitmandi.common.web.util.ResponseSender;
34
import com.spice.profitmandi.dao.entity.auth.AuthUser;
30077 tejbeer 35
import com.spice.profitmandi.dao.entity.auth.PartnerCollectionPlan;
36
import com.spice.profitmandi.dao.entity.auth.PartnerSecondaryPlan;
37
import com.spice.profitmandi.dao.entity.cs.Position;
25899 tejbeer 38
import com.spice.profitmandi.dao.entity.dtr.User;
25952 tejbeer 39
import com.spice.profitmandi.dao.entity.dtr.UserAccount;
28935 tejbeer 40
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
41
import com.spice.profitmandi.dao.entity.fofo.PartnerOnBoardingPanel;
25952 tejbeer 42
import com.spice.profitmandi.dao.entity.user.FranchiseeActivity;
43
import com.spice.profitmandi.dao.entity.user.FranchiseeVisit;
25899 tejbeer 44
import com.spice.profitmandi.dao.entity.user.Lead;
45
import com.spice.profitmandi.dao.entity.user.LeadActivity;
25952 tejbeer 46
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeActivityStatus;
47
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeVisitStatus;
25899 tejbeer 48
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
28935 tejbeer 49
import com.spice.profitmandi.dao.enumuration.dtr.StoreTimeline;
25979 tejbeer 50
import com.spice.profitmandi.dao.model.CreateRefferalRequest;
28935 tejbeer 51
import com.spice.profitmandi.dao.model.OnBoardingTimelineModel;
30077 tejbeer 52
import com.spice.profitmandi.dao.model.PartnerCollectionPlanModel;
53
import com.spice.profitmandi.dao.model.PartnerSecondaryPlanModel;
54
import com.spice.profitmandi.dao.model.PartnerTargetAchievementModel;
55
import com.spice.profitmandi.dao.model.TargetModel;
28935 tejbeer 56
import com.spice.profitmandi.dao.model.UserCart;
25899 tejbeer 57
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
30077 tejbeer 58
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionPlanRepository;
59
import com.spice.profitmandi.dao.repository.auth.PartnerSecondaryPlanRepository;
25952 tejbeer 60
import com.spice.profitmandi.dao.repository.cs.CsService;
30077 tejbeer 61
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
28935 tejbeer 62
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
25952 tejbeer 63
import com.spice.profitmandi.dao.repository.dtr.FranchiseeActivityRepository;
64
import com.spice.profitmandi.dao.repository.dtr.FranchiseeVisitRepository;
25899 tejbeer 65
import com.spice.profitmandi.dao.repository.dtr.LeadActivityRepository;
66
import com.spice.profitmandi.dao.repository.dtr.LeadRepository;
28935 tejbeer 67
import com.spice.profitmandi.dao.repository.dtr.PartnerOnBoardingPanelRepository;
25952 tejbeer 68
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
25899 tejbeer 69
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
30077 tejbeer 70
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
71
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
72
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
25952 tejbeer 73
import com.spice.profitmandi.service.user.RetailerService;
28935 tejbeer 74
import com.spice.profitmandi.service.user.StoreTimelineTatService;
25952 tejbeer 75
import com.spice.profitmandi.web.req.CreateFranchiseeRequest;
76
import com.spice.profitmandi.web.res.Partner;
25899 tejbeer 77
 
78
import io.swagger.annotations.ApiImplicitParam;
79
import io.swagger.annotations.ApiImplicitParams;
80
 
81
@Controller
82
@Transactional(rollbackFor = Throwable.class)
83
public class LeadController {
84
	private static final Logger LOGGER = LogManager.getLogger(LeadController.class);
85
	@Autowired
86
	private ResponseSender<?> responseSender;
87
 
88
	@Autowired
89
	private AuthRepository authRepository;
90
 
91
	@Autowired
92
	private LeadRepository leadRepository;
93
 
94
	@Autowired
25952 tejbeer 95
	private CsService csService;
96
 
97
	@Autowired
98
	private UserRepository userRepository;
99
 
100
	@Autowired
101
	private UserAccountRepository userAccountRepository;
102
 
103
	@Autowired
104
	private com.spice.profitmandi.dao.repository.user.UserRepository userUserRepository;
105
 
106
	@Autowired
107
	private RetailerService retailerService;
108
 
109
	@Autowired
25899 tejbeer 110
	private LeadActivityRepository leadActivityRepository;
111
 
25952 tejbeer 112
	@Autowired
113
	private FranchiseeVisitRepository franchiseeVisitRepository;
114
 
115
	@Autowired
116
	private FranchiseeActivityRepository franchiseeActivityRepository;
117
 
28935 tejbeer 118
	@Autowired
119
	private PartnerOnBoardingPanelRepository partnerOnBoardingPanelRepository;
120
 
121
	@Autowired
122
	private FofoStoreRepository fofoStoreRepository;
123
 
124
	@Autowired
125
	private StoreTimelineTatService storeTimelineTatService;
126
 
25899 tejbeer 127
	@RequestMapping(value = "/lead", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
128
	@ApiImplicitParams({
129
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
130
	public ResponseEntity<?> LeadUser(HttpServletRequest request,
131
			@RequestBody CreateRefferalRequest createRefferalRequest) throws Exception {
132
		Lead lead = new Lead();
133
		lead.setFirstName(createRefferalRequest.getFirstName());
134
		lead.setLastName(createRefferalRequest.getLastName());
135
		lead.setLeadMobile(createRefferalRequest.getMobile());
136
		lead.setState(createRefferalRequest.getState());
137
		lead.setCity(createRefferalRequest.getCity());
138
		lead.setAddress(createRefferalRequest.getAddress());
139
		lead.setCreatedTimestamp(LocalDateTime.now());
140
		lead.setUpdatedTimestamp(LocalDateTime.now());
141
		lead.setStatus(createRefferalRequest.getStatus());
25979 tejbeer 142
		lead.setSource(createRefferalRequest.getSource());
28201 tejbeer 143
		lead.setNotinterestedReason(createRefferalRequest.getReason());
26244 tejbeer 144
		if (createRefferalRequest.getColorCheck() == true) {
145
			lead.setColor("Green");
146
		} else {
147
			lead.setColor("Yellow");
148
		}
25900 amit.gupta 149
		AuthUser authUser = authRepository.selectByGmailId(createRefferalRequest.getReffereeEmail());
150
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
151
		lead.setCreatedBy(authUserName);
152
		lead.setAuthId(authUser.getId());
25981 tejbeer 153
		lead.setAssignTo(authUser.getId());
25899 tejbeer 154
 
155
		leadRepository.persist(lead);
156
		LeadActivity leadActivity = new LeadActivity();
157
		leadActivity.setLeadId(lead.getId());
158
		leadActivity.setRemark(createRefferalRequest.getRemark());
159
 
160
		if (createRefferalRequest.getStatus().equals(LeadStatus.followUp)) {
161
			leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
26958 tejbeer 162
			leadActivity.setClosureTimestamp(createRefferalRequest.getClosureTimestamp());
27025 tejbeer 163
			lead.setClosureTimestamp(createRefferalRequest.getClosureTimestamp());
25899 tejbeer 164
		} else {
165
			leadActivity.setSchelduleTimestamp(null);
26958 tejbeer 166
			leadActivity.setClosureTimestamp(null);
27025 tejbeer 167
			lead.setClosureTimestamp(null);
25899 tejbeer 168
		}
169
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
170
		leadActivityRepository.persist(leadActivity);
171
 
172
		return responseSender.ok(true);
173
	}
174
 
175
	@RequestMapping(value = "/lead-description", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
176
	@ApiImplicitParams({
177
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
178
	public ResponseEntity<?> leadDescription(HttpServletRequest request, @RequestParam(name = "gmailId") String gmailId,
29331 tejbeer 179
			@RequestParam(name = "status") LeadStatus status) throws ProfitMandiBusinessException {
25899 tejbeer 180
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
29434 amit.gupta 181
		List<Lead> leads = null;
182
		if (status.equals(LeadStatus.followUp)) {
30077 tejbeer 183
			leads = leadRepository.selectLeadsScheduledBetweenDate(Arrays.asList(authUser.getId()),
184
					LocalDate.now().atStartOfDay().minusDays(30), LocalDate.now().plusDays(3).atTime(LocalTime.MAX));
29434 amit.gupta 185
		} else {
186
			leads = leadRepository.selectByAssignAuthIdAndStatus(authUser.getId(), status);
187
		}
25979 tejbeer 188
 
25899 tejbeer 189
		return responseSender.ok(leads);
190
 
191
	}
192
 
193
	@RequestMapping(value = "/getlead", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
194
	@ApiImplicitParams({
195
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
196
	public ResponseEntity<?> getLead(HttpServletRequest request, @RequestParam(name = "id") int id)
197
			throws ProfitMandiBusinessException {
198
 
199
		List<LeadActivity> leadActivities = leadActivityRepository.selectBYLeadId(id);
29317 tejbeer 200
		Lead lead = leadRepository.selectById(id);
201
		lead.setLeadActivities(leadActivities);
202
		return responseSender.ok(lead);
25899 tejbeer 203
 
204
	}
205
 
25948 amit.gupta 206
	@RequestMapping(value = "/leadUpdate", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
25899 tejbeer 207
	@ApiImplicitParams({
208
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
209
	public ResponseEntity<?> leadUpdate(HttpServletRequest request, @RequestParam(name = "id") int id,
26244 tejbeer 210
			@RequestParam(name = "status") LeadStatus status, @RequestParam(name = "colorCheck") Boolean colorCheck,
28201 tejbeer 211
			@RequestParam(name = "remark") String remark, @RequestParam(name = "reason") String reason,
26958 tejbeer 212
			@RequestParam(name = "schelduleTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime schelduleTimestamp,
213
			@RequestParam(name = "closureTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime closureTimestamp)
25899 tejbeer 214
			throws ProfitMandiBusinessException {
215
 
216
		Lead lead = leadRepository.selectById(id);
217
 
218
		LeadActivity leadActivity = new LeadActivity();
26250 tejbeer 219
		lead.setStatus(status);
28201 tejbeer 220
		lead.setNotinterestedReason(reason);
26250 tejbeer 221
		leadActivity.setRemark(remark);
222
		leadActivity.setLeadId(id);
223
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
224
		leadActivity.setSchelduleTimestamp(null);
26958 tejbeer 225
		leadActivity.setClosureTimestamp(null);
26250 tejbeer 226
		lead.setUpdatedTimestamp(LocalDateTime.now());
227
		if (colorCheck == true) {
228
			lead.setColor("Green");
229
		} else {
230
			lead.setColor("Yellow");
231
		}
232
		if (status == LeadStatus.followUp) {
25899 tejbeer 233
 
234
			leadActivity.setSchelduleTimestamp(schelduleTimestamp);
26958 tejbeer 235
			leadActivity.setClosureTimestamp(closureTimestamp);
27025 tejbeer 236
			lead.setClosureTimestamp(closureTimestamp);
26250 tejbeer 237
 
25899 tejbeer 238
		} else {
26250 tejbeer 239
 
25899 tejbeer 240
			leadActivity.setSchelduleTimestamp(null);
26958 tejbeer 241
			leadActivity.setClosureTimestamp(null);
27025 tejbeer 242
			lead.setClosureTimestamp(null);
26244 tejbeer 243
 
25899 tejbeer 244
		}
26250 tejbeer 245
		leadActivityRepository.persist(leadActivity);
25899 tejbeer 246
		return responseSender.ok(true);
247
 
248
	}
25952 tejbeer 249
 
27117 tejbeer 250
	@RequestMapping(value = ProfitMandiConstants.URL_NEW_LEAD, method = RequestMethod.POST)
251
	public ResponseEntity<?> newLead(HttpServletRequest request,
27597 amit.gupta 252
			@RequestBody CreateRefferalRequest createRefferalRequest) throws ProfitMandiBusinessException {
27117 tejbeer 253
		LOGGER.info("requested url : " + request.getRequestURL().toString());
254
		Lead lead = new Lead();
255
		lead.setAddress(createRefferalRequest.getCity());
27625 tejbeer 256
		Long.parseLong(createRefferalRequest.getMobile());
28201 tejbeer 257
		if (createRefferalRequest.getMobile().length() != 10) {
258
			throw new ProfitMandiBusinessException("Mobile Number", createRefferalRequest.getMobile(),
259
					"Number should be of 10 digits");
27597 amit.gupta 260
		}
27117 tejbeer 261
		lead.setLeadMobile(createRefferalRequest.getMobile());
262
		lead.setCity(createRefferalRequest.getCity());
263
		lead.setState(createRefferalRequest.getState());
264
		lead.setLastName(createRefferalRequest.getLastName());
265
		if (lead.getState().equals("Uttar Pradesh")) {
29276 amit.gupta 266
			lead.setAssignTo(53);
27117 tejbeer 267
		} else if (lead.getState().equals("Haryana")) {
29276 amit.gupta 268
			lead.setAssignTo(53);
27117 tejbeer 269
		} else if (lead.getState().equals("Delhi")) {
29276 amit.gupta 270
			lead.setAssignTo(53);
27117 tejbeer 271
		} else {
28201 tejbeer 272
			// Assign to sm
27992 amit.gupta 273
			lead.setAssignTo(53);
28201 tejbeer 274
			// Assign to neha
275
			// lead.setAssignTo(1);
27117 tejbeer 276
		}
277
		lead.setAuthId(lead.getAssignTo());
278
		lead.setCreatedBy("daily-sync");
279
		lead.setSource("SD-WEB");
280
		lead.setFirstName(createRefferalRequest.getFirstName());
281
		lead.setStatus(LeadStatus.followUp);
282
		lead.setColor("yellow");
283
		lead.setCreatedTimestamp(LocalDateTime.now());
284
		lead.setUpdatedTimestamp(LocalDateTime.now());
285
		leadRepository.persist(lead);
286
 
287
		return responseSender.ok(true);
288
 
289
	}
290
 
25952 tejbeer 291
	@RequestMapping(value = "/getPartnersList", method = RequestMethod.GET)
292
	@ApiImplicitParams({
293
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
294
	public ResponseEntity<?> getPartners(HttpServletRequest request, @RequestParam(name = "gmailId") String gmailId)
295
			throws ProfitMandiBusinessException {
296
 
25973 tejbeer 297
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
25952 tejbeer 298
 
299
		Map<String, Set<String>> storeGuyMap = csService.getAuthUserPartnerEmailMapping();
300
 
30077 tejbeer 301
		Set<String> emails = storeGuyMap.get("ankit.bhatia@smartdukaan.com");
25952 tejbeer 302
		LOGGER.info("emails" + emails);
303
		List<User> users = userRepository.selectAllByEmailIds(new ArrayList<>(emails));
304
		List<Partner> partners = new ArrayList<>();
305
		for (User user : users) {
306
 
307
			UserAccount uc = userAccountRepository.selectSaholicByUserId(user.getId());
308
			com.spice.profitmandi.dao.entity.user.User userInfo = userUserRepository.selectById(uc.getAccountKey());
309
			CustomRetailer customRetailer = retailerService.getFofoRetailer(userInfo.getId());
310
 
311
			Partner partner = new Partner();
312
			partner.setBusinessName(customRetailer.getBusinessName());
313
			partner.setPartnerId(customRetailer.getPartnerId());
314
			partner.setCartId(customRetailer.getCartId());
315
			partner.setEmail(customRetailer.getEmail());
316
			partner.setGstNumber(customRetailer.getGstNumber());
317
			partner.setDisplayName(customRetailer.getDisplayName());
318
			partner.setCity(customRetailer.getAddress().getCity());
319
			partner.setUserId(user.getId());
320
			partners.add(partner);
321
		}
322
		LOGGER.info("partners" + partners);
323
		return responseSender.ok(partners);
324
	}
325
 
326
	@RequestMapping(value = "/franchise-first-visit", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
327
	@ApiImplicitParams({
328
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
329
	public ResponseEntity<?> FranchiseFirstVisit(HttpServletRequest request,
330
			@RequestBody CreateFranchiseeRequest createFranchiseeRequest) throws Exception {
331
 
332
		FranchiseeVisit franchiseeVisit = new FranchiseeVisit();
333
		franchiseeVisit.setFofoId(createFranchiseeRequest.getFofoId());
334
		CustomRetailer customRetailer = retailerService.getFofoRetailer(createFranchiseeRequest.getFofoId());
335
 
336
		franchiseeVisit.setPartnerName(customRetailer.getBusinessName());
337
		franchiseeVisit.setAgenda(createFranchiseeRequest.getAgenda());
338
		franchiseeVisit.setCreatedTimestamp(LocalDateTime.now());
339
		franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
340
		franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
341
		franchiseeVisit.setSchelduleTimestamp(createFranchiseeRequest.getFirstSchelduleTimestamp());
342
		// change
25973 tejbeer 343
		AuthUser authUser = authRepository.selectByGmailId(createFranchiseeRequest.getCreatedBy());
25952 tejbeer 344
 
345
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
346
		franchiseeVisit.setCreatedBy(authUserName);
347
		franchiseeVisit.setAuthId(authUser.getId());
348
 
349
		franchiseeVisitRepository.persist(franchiseeVisit);
350
 
351
		return responseSender.ok(true);
352
	}
353
 
354
	@RequestMapping(value = "/franchise-visit", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
355
	@ApiImplicitParams({
356
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
357
	public ResponseEntity<?> FranchiseVisit(HttpServletRequest request,
358
			@RequestBody CreateFranchiseeRequest createFranchiseeRequest) throws Exception {
359
 
360
		FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(createFranchiseeRequest.getId());
361
		franchiseeVisit.setFofoId(createFranchiseeRequest.getFofoId());
362
		CustomRetailer customRetailer = retailerService.getFofoRetailer(createFranchiseeRequest.getFofoId());
363
 
364
		franchiseeVisit.setPartnerName(customRetailer.getBusinessName());
365
		franchiseeVisit.setAgenda(createFranchiseeRequest.getAgenda());
366
		franchiseeVisit.setPartnerRemark(createFranchiseeRequest.getPartnerRemark());
367
		franchiseeVisit.setOutsideVisibity(createFranchiseeRequest.getOutsideVisibity());
368
		franchiseeVisit.setInstoreVisibility(createFranchiseeRequest.getInstoreVisibility());
369
		franchiseeVisit.setOutsideStock(createFranchiseeRequest.getOutsideStock());
370
		franchiseeVisit.setSystemKnowledge(createFranchiseeRequest.getSystemKnowledge());
371
		franchiseeVisit.setWorkingDevice(createFranchiseeRequest.getWorkingDevice());
372
		franchiseeVisit.setWorkingPrinter(createFranchiseeRequest.getWorkingPrinter());
373
		franchiseeVisit.setCarryBags(createFranchiseeRequest.getCarryBags());
374
		franchiseeVisit.setSmartdukaanTshirt(createFranchiseeRequest.getSmartdukaanTshirt());
375
		franchiseeVisit.setLatestDummies(createFranchiseeRequest.getLatestDummies());
376
		franchiseeVisit.setInvestment(createFranchiseeRequest.getInvestment());
377
		franchiseeVisit.setMtd(createFranchiseeRequest.getMtd());
378
		franchiseeVisit.setHygiene(createFranchiseeRequest.getHygiene());
379
		franchiseeVisit.setCreatedTimestamp(LocalDateTime.now());
380
		franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
381
		if (createFranchiseeRequest.getAction().equals(FranchiseeActivityStatus.FOLLOWUP)) {
382
			franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
383
		} else {
384
			franchiseeVisit.setStatus(FranchiseeVisitStatus.CLOSE);
385
		}
386
 
387
		// AuthUser authUser =
388
		// authRepository.selectByGmailId(createFranchiseeRequest.getCreatedBy());
389
		// change
25973 tejbeer 390
		AuthUser authUser = authRepository.selectByGmailId(createFranchiseeRequest.getCreatedBy());
25952 tejbeer 391
 
392
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
393
		franchiseeVisit.setCreatedBy(authUserName);
394
		franchiseeVisit.setAuthId(authUser.getId());
395
 
396
		franchiseeVisitRepository.persist(franchiseeVisit);
397
 
398
		FranchiseeActivity franchiseeActivity = new FranchiseeActivity();
399
		franchiseeActivity.setAction(createFranchiseeRequest.getAction());
400
		franchiseeActivity.setFranchiseeVisitd(franchiseeVisit.getId());
401
		franchiseeActivity.setResolution(createFranchiseeRequest.getResolution());
402
		if (createFranchiseeRequest.getAction().equals(FranchiseeActivityStatus.FOLLOWUP)) {
403
			franchiseeActivity.setSchelduleTimestamp(createFranchiseeRequest.getSchelduleTimestamp());
404
		} else {
405
			franchiseeActivity.setSchelduleTimestamp(null);
406
		}
407
		franchiseeActivity.setCreatedTimestamp(LocalDateTime.now());
408
		franchiseeActivityRepository.persist(franchiseeActivity);
409
 
410
		franchiseeVisit.setFranchiseActivityId(franchiseeActivity.getId());
411
		return responseSender.ok(true);
412
	}
413
 
414
	@RequestMapping(value = "/getFranchiseVisit", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
415
	@ApiImplicitParams({
416
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
417
	public ResponseEntity<?> getFranchiseVisit(HttpServletRequest request,
418
			@RequestParam(name = "gmailId") String gmailId, @RequestParam(name = "status") FranchiseeVisitStatus status,
419
			@RequestParam(name = "offset", defaultValue = "0") int offset,
420
			@RequestParam(name = "limit", defaultValue = "10") int limit) throws ProfitMandiBusinessException {
25973 tejbeer 421
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
25952 tejbeer 422
 
423
		List<FranchiseeVisit> franchiseeVisits = franchiseeVisitRepository.selectByAuthIdAndStatus(authUser.getId(),
424
				status, offset, limit);
425
 
426
		for (FranchiseeVisit fv : franchiseeVisits) {
427
			if (fv.getFranchiseActivityId() != 0) {
428
				FranchiseeActivity fA = franchiseeActivityRepository.selectById(fv.getFranchiseActivityId());
429
				fv.setFranchiseeActivity(fA);
430
			}
431
		}
432
 
433
		return responseSender.ok(franchiseeVisits);
434
 
435
	}
436
 
437
	@RequestMapping(value = "/getFranchiseActivity", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
438
	@ApiImplicitParams({
439
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
440
	public ResponseEntity<?> getFranchiseActivity(HttpServletRequest request, @RequestParam(name = "id") int id)
441
			throws ProfitMandiBusinessException {
442
 
443
		List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository.selectByFranchiseeVisitId(id);
444
 
445
		return responseSender.ok(franchiseeActivities);
446
 
447
	}
448
 
449
	@RequestMapping(value = "/getFranchiseeInfo", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
450
	@ApiImplicitParams({
451
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
452
	public ResponseEntity<?> getFranchiseeInfo(HttpServletRequest request, @RequestParam(name = "id") int id)
453
			throws ProfitMandiBusinessException {
454
		FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(id);
455
 
456
		return responseSender.ok(franchiseeVisit);
457
 
458
	}
459
 
460
	@RequestMapping(value = "/franchise-visit-update", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
461
	@ApiImplicitParams({
462
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
463
	public ResponseEntity<?> franchiseVisitUpdate(HttpServletRequest request, @RequestParam(name = "id") int id,
464
			@RequestParam(name = "action") FranchiseeActivityStatus action,
465
			@RequestParam(name = "resolution") String resolution,
466
			@RequestParam(name = "schelduleTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime schelduleTimestamp)
467
			throws ProfitMandiBusinessException {
468
		FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(id);
469
 
470
		FranchiseeActivity franchiseeActivity = new FranchiseeActivity();
471
 
472
		if (action == FranchiseeActivityStatus.FOLLOWUP) {
473
			franchiseeActivity.setResolution(resolution);
474
			franchiseeActivity.setFranchiseeVisitd(franchiseeVisit.getId());
475
			franchiseeActivity.setAction(action);
476
			franchiseeActivity.setSchelduleTimestamp(schelduleTimestamp);
477
			franchiseeActivity.setCreatedTimestamp(LocalDateTime.now());
478
			franchiseeActivityRepository.persist(franchiseeActivity);
479
			franchiseeVisit.setFranchiseActivityId(franchiseeActivity.getId());
480
			franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
481
			franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
482
			franchiseeVisitRepository.persist(franchiseeVisit);
483
 
484
		} else {
485
			franchiseeActivity.setResolution(resolution);
486
			franchiseeActivity.setFranchiseeVisitd(franchiseeVisit.getId());
487
			franchiseeActivity.setAction(action);
488
			franchiseeActivity.setSchelduleTimestamp(null);
489
			franchiseeActivity.setCreatedTimestamp(LocalDateTime.now());
490
			franchiseeActivityRepository.persist(franchiseeActivity);
491
			franchiseeVisit.setFranchiseActivityId(franchiseeActivity.getId());
492
			franchiseeVisit.setStatus(FranchiseeVisitStatus.CLOSE);
493
			franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
494
			franchiseeVisitRepository.persist(franchiseeVisit);
495
 
496
		}
497
 
498
		return responseSender.ok(true);
499
 
500
	}
28935 tejbeer 501
 
502
	@RequestMapping(value = "/onBoardingTimelineStatus", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
503
	@ApiImplicitParams({
504
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
505
	public ResponseEntity<?> onBoardingTimelineStatus(HttpServletRequest request, Model model)
506
			throws ProfitMandiBusinessException {
507
		int userId = (int) request.getAttribute("userId");
508
		UserCart uc = userAccountRepository.getUserCart(userId);
509
		FofoStore fs = fofoStoreRepository.selectByRetailerId(uc.getUserId());
510
		PartnerOnBoardingPanel partnerOnBoardingPanel = partnerOnBoardingPanelRepository.selectByCode(fs.getCode());
511
		Map<StoreTimeline, OnBoardingTimelineModel> timelineStatus = null;
512
		LOGGER.info("partnerOnBoardingPanel" + partnerOnBoardingPanel);
513
		if (partnerOnBoardingPanel != null) {
514
 
515
			timelineStatus = storeTimelineTatService.getTimeline(partnerOnBoardingPanel.getId());
516
		}
517
		List<OnBoardingTimelineModel> onBoardingModel = new ArrayList<>();
518
		if (timelineStatus != null) {
519
			onBoardingModel = timelineStatus.values().stream().skip(2).map(x -> x).collect(Collectors.toList());
520
		}
521
		return responseSender.ok(onBoardingModel);
522
 
523
	}
28982 tejbeer 524
 
525
	@RequestMapping(value = "/onBoardingTimelineVisibility", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
526
	@ApiImplicitParams({
527
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
528
	public ResponseEntity<?> onBoardingTimelineVisibility(HttpServletRequest request, Model model)
529
			throws ProfitMandiBusinessException {
530
		int userId = (int) request.getAttribute("userId");
531
		UserCart uc = userAccountRepository.getUserCart(userId);
532
 
533
		FofoStore fs = fofoStoreRepository.selectByRetailerId(uc.getUserId());
534
		PartnerOnBoardingPanel partnerOnBoardingPanel = partnerOnBoardingPanelRepository.selectByCode(fs.getCode());
535
		boolean status = true;
536
		if (partnerOnBoardingPanel != null) {
537
 
538
			status = storeTimelineTatService.getTimelineCompleted(partnerOnBoardingPanel.getId());
539
		}
540
 
28983 tejbeer 541
		LOGGER.info("status" + status);
542
 
28982 tejbeer 543
		return responseSender.ok(status);
544
 
545
	}
30077 tejbeer 546
 
547
	@Autowired
548
	private com.spice.profitmandi.service.transaction.TransactionService transactionService;
549
 
550
	@Autowired
551
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
552
 
553
	@Autowired
554
	private OrderRepository orderRepository;
555
 
556
	@Autowired
557
	private PositionRepository positionRepository;
558
 
559
	@Autowired
560
	private UserWalletRepository userWalletRepository;
561
 
562
	@Autowired
563
	private PartnerCollectionPlanRepository partnerCollectionPlanRepository;
564
 
565
	@Autowired
566
	private PartnerSecondaryPlanRepository partnerSecondaryPlanRepository;
567
 
568
	@RequestMapping(value = "/getPartnerTarget", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
569
	@ApiImplicitParams({
570
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
571
	public ResponseEntity<?> getPartnerTarget(HttpServletRequest request,
572
			@RequestParam(name = "gmailId") String gmailId) throws ProfitMandiBusinessException {
573
 
574
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
575
 
576
		Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
577
 
578
		Set<Integer> fofoIds = storeGuyMap.get("ankit.bhatia@smartdukaan.com");
579
 
580
		if (fofoIds == null) {
581
			List<Position> positions1 = positionRepository.selectAll(authUser.getId());
582
			if (positions1.stream().filter(x -> x.getCategoryId() == ProfitMandiConstants.TICKET_CATEGORY_MASTER)
583
					.count() > 0) {
584
				fofoIds = csService.getPositionCustomRetailerMap(positions1).values().stream().flatMap(x -> x.stream())
585
						.map(x -> x.getPartnerId()).collect(Collectors.toSet());
586
			}
587
		}
588
 
589
		List<String> brands = Arrays.asList("Vivo", "Samsung", "Oppo", "Itel", "Others");
590
		float totalPartnerTargetSecondary = 0;
591
		float totalPartnerTargetCollection = 0;
592
 
593
		float totalPartnerAchievementSecondary = 0;
594
		float totalPartnerAchievementCollection = 0;
595
		TargetModel tm = new TargetModel();
596
 
597
		List<PartnerTargetAchievementModel> ptams = new ArrayList<>();
598
 
599
		if (fofoIds.size() > 0 && fofoIds != null) {
600
			List<Integer> fofoIdList = new ArrayList<>(fofoIds);
601
 
602
			LocalDateTime startDate = LocalDate.now().atStartOfDay();
603
 
604
			Map<Integer, CustomRetailer> customRetailers = retailerService.getFofoRetailers(fofoIdList);
605
 
606
			Map<Integer, PartnerCollectionPlanModel> collectionPlans = userWalletRepository
607
					.getPartnerWiseTargetCollections(fofoIdList, startDate).stream()
608
					.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
609
 
610
			LOGGER.info("collectionPlans {}", collectionPlans);
611
 
612
			Map<Integer, List<PartnerSecondaryPlanModel>> partnerSecondayPlans = orderRepository
613
					.selectPartnerSecondaryGroupByBrand(fofoIdList, startDate).stream()
614
					.collect(Collectors.groupingBy(x -> x.getFofoId()));
615
 
616
			LOGGER.info("partnerSecondayPlans {}", partnerSecondayPlans);
617
			for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailers.entrySet()) {
618
				int fofoId = customRetailerEntry.getKey();
619
				CustomRetailer customRetailer = customRetailerEntry.getValue();
620
				float totalSecondaryPlan = 0;
621
				float totalSecondaryAchivement = 0;
622
 
623
				PartnerTargetAchievementModel ptam = new PartnerTargetAchievementModel();
624
				ptam.setFofoId(fofoId);
625
				ptam.setBusinessName(customRetailer.getBusinessName());
626
 
627
				if (collectionPlans.get(fofoId) != null) {
628
					totalPartnerTargetCollection += collectionPlans.get(fofoId).getTargetPlan();
629
 
630
					totalPartnerAchievementCollection += collectionPlans.get(fofoId).getAchievementPlan();
631
					ptam.setCollectionTarget(collectionPlans.get(fofoId).getTargetPlan());
632
					ptam.setCollectionAchievement(collectionPlans.get(fofoId).getAchievementPlan());
633
				}
634
 
635
				PartnerSecondaryPlanModel otherPartnerSecondaryPlanModel = null;
636
				if (partnerSecondayPlans.get(fofoId) != null) {
637
					long otherBrandSecondary = 0;
638
					for (PartnerSecondaryPlanModel pspm : partnerSecondayPlans.get(fofoId)) {
639
						if (!brands.contains(pspm.getBrand())) {
640
							otherBrandSecondary += pspm.getAchievementPlan();
641
						} else {
642
							otherPartnerSecondaryPlanModel = pspm;
643
						}
644
						totalSecondaryPlan += pspm.getTargetPlan();
645
						totalSecondaryAchivement += pspm.getAchievementPlan();
646
					}
647
					if (otherPartnerSecondaryPlanModel != null) {
648
						otherPartnerSecondaryPlanModel.setAchievementPlan(otherBrandSecondary);
649
					}
650
					Map<String, PartnerSecondaryPlanModel> secondaryModelMap = partnerSecondayPlans.get(fofoId).stream()
651
							.filter(x -> brands.contains(x.getBrand()))
652
							.collect(Collectors.toMap(x -> x.getBrand(), x -> x));
653
 
654
					if (secondaryModelMap.containsKey("Others")) {
655
						PartnerSecondaryPlanModel psp = secondaryModelMap.get("Others");
656
						psp.setAchievementPlan(otherBrandSecondary);
657
					} else {
658
						secondaryModelMap.put("Others",
659
								new PartnerSecondaryPlanModel(fofoId, "Others", 0, otherBrandSecondary));
660
					}
661
					for (String brand : brands) {
662
 
663
						if (!secondaryModelMap.containsKey(brand)) {
664
							secondaryModelMap.put(brand, new PartnerSecondaryPlanModel(fofoId, brand, 0, 0));
665
						}
666
 
667
					}
668
 
669
					ptam.setPartnerSecondaryModel(secondaryModelMap);
670
					ptam.setTotalSecondaryPlan(totalSecondaryPlan);
671
 
672
					totalPartnerTargetSecondary += totalSecondaryPlan;
673
 
674
					totalPartnerAchievementSecondary += totalSecondaryAchivement;
675
 
676
					ptam.setTotalSecondaryAchivewment(totalSecondaryAchivement);
677
					ptams.add(ptam);
678
 
679
				}
680
 
681
			}
682
 
683
			tm.setTotalPartnerTargetCollection(totalPartnerTargetCollection);
684
			tm.setTotalPartnerTargetSecondary(totalPartnerTargetSecondary);
685
			tm.setTotalPartnerSecondary(totalPartnerAchievementSecondary);
686
			tm.setTotalPartnerCollection(totalPartnerAchievementCollection);
687
			tm.setTargetAchievement(ptams);
688
 
689
		}
690
 
691
		return responseSender.ok(tm);
692
 
693
	}
694
 
695
	@RequestMapping(value = "/target", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
696
	@ApiImplicitParams({
697
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
698
	public ResponseEntity<?> createPartnerTarget(HttpServletRequest request,
699
			@RequestBody PartnerTargetAchievementModel ptam) throws ProfitMandiBusinessException {
700
 
701
		AuthUser authUser = authRepository.selectByGmailId("ankit.bhatia@shop2020.in");
702
 
703
		PartnerCollectionPlan pcp = partnerCollectionPlanRepository.selectByLocalDate(LocalDate.now(),
704
				ptam.getFofoId());
705
		LOGGER.info("pcp" + pcp);
706
 
707
		if (pcp == null) {
708
			if (ptam.getCollectionTarget() > 0) {
709
				PartnerCollectionPlan partnerCollectionPlan = new PartnerCollectionPlan();
710
				partnerCollectionPlan.setAuthId(authUser.getId());
711
				partnerCollectionPlan.setFofoId(ptam.getFofoId());
712
				partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
713
				partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
714
				partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
715
				partnerCollectionPlanRepository.persist(partnerCollectionPlan);
716
			}
717
		}
718
 
719
		for (Entry<String, PartnerSecondaryPlanModel> pspm : ptam.getPartnerSecondaryModel().entrySet()) {
720
			if (pspm.getValue().getTargetPlan() > 0) {
721
				PartnerSecondaryPlanModel plan = pspm.getValue();
722
				PartnerSecondaryPlan psp = partnerSecondaryPlanRepository.selectByLocalDateBrand(plan.getBrand(),
723
						LocalDate.now(), ptam.getFofoId());
724
				LOGGER.info("psp" + psp);
725
				if (psp == null)
726
					psp = new PartnerSecondaryPlan();
727
				psp.setAuthId(authUser.getId());
728
				psp.setBrand(pspm.getKey());
729
				psp.setFofoId(pspm.getValue().getFofoId());
730
				psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
731
				psp.setCreateTimestamp(LocalDateTime.now());
732
				psp.setUpdatedTimestamp(LocalDateTime.now());
733
				partnerSecondaryPlanRepository.persist(psp);
734
			}
735
		}
736
 
737
		return responseSender.ok(true);
738
	}
739
 
740
}