Subversion Repositories SmartDukaan

Rev

Rev 30416 | Rev 30433 | 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
 
30416 tejbeer 3
import java.time.LocalDate;
4
import java.time.LocalDateTime;
5
import java.util.ArrayList;
6
import java.util.Arrays;
7
import java.util.Comparator;
8
import java.util.HashMap;
9
import java.util.List;
10
import java.util.Map;
11
import java.util.Map.Entry;
12
import java.util.Set;
13
import java.util.stream.Collectors;
14
 
15
import javax.servlet.http.HttpServletRequest;
16
 
17
import org.apache.logging.log4j.LogManager;
18
import org.apache.logging.log4j.Logger;
19
import org.springframework.beans.factory.annotation.Autowired;
20
import org.springframework.format.annotation.DateTimeFormat;
21
import org.springframework.http.MediaType;
22
import org.springframework.http.ResponseEntity;
23
import org.springframework.stereotype.Controller;
24
import org.springframework.transaction.annotation.Transactional;
25
import org.springframework.ui.Model;
26
import org.springframework.web.bind.annotation.RequestBody;
27
import org.springframework.web.bind.annotation.RequestMapping;
28
import org.springframework.web.bind.annotation.RequestMethod;
29
import org.springframework.web.bind.annotation.RequestParam;
30
 
25899 tejbeer 31
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
25952 tejbeer 32
import com.spice.profitmandi.common.model.CustomRetailer;
27117 tejbeer 33
import com.spice.profitmandi.common.model.ProfitMandiConstants;
25899 tejbeer 34
import com.spice.profitmandi.common.web.util.ResponseSender;
35
import com.spice.profitmandi.dao.entity.auth.AuthUser;
30077 tejbeer 36
import com.spice.profitmandi.dao.entity.auth.PartnerCollectionPlan;
30416 tejbeer 37
import com.spice.profitmandi.dao.entity.auth.PartnerCollectionRemark;
30077 tejbeer 38
import com.spice.profitmandi.dao.entity.auth.PartnerSecondaryPlan;
30416 tejbeer 39
import com.spice.profitmandi.dao.entity.cs.Ticket;
40
import com.spice.profitmandi.dao.entity.cs.TicketCategory;
41
import com.spice.profitmandi.dao.entity.cs.TicketSubCategory;
25899 tejbeer 42
import com.spice.profitmandi.dao.entity.dtr.User;
25952 tejbeer 43
import com.spice.profitmandi.dao.entity.dtr.UserAccount;
28935 tejbeer 44
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
30087 tejbeer 45
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
28935 tejbeer 46
import com.spice.profitmandi.dao.entity.fofo.PartnerOnBoardingPanel;
25952 tejbeer 47
import com.spice.profitmandi.dao.entity.user.FranchiseeActivity;
48
import com.spice.profitmandi.dao.entity.user.FranchiseeVisit;
25899 tejbeer 49
import com.spice.profitmandi.dao.entity.user.Lead;
50
import com.spice.profitmandi.dao.entity.user.LeadActivity;
30416 tejbeer 51
import com.spice.profitmandi.dao.enumuration.auth.CollectionRemark;
25952 tejbeer 52
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeActivityStatus;
53
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeVisitStatus;
25899 tejbeer 54
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
28935 tejbeer 55
import com.spice.profitmandi.dao.enumuration.dtr.StoreTimeline;
30416 tejbeer 56
import com.spice.profitmandi.dao.model.CreateRefferalRequest;
57
import com.spice.profitmandi.dao.model.OnBoardingTimelineModel;
58
import com.spice.profitmandi.dao.model.PartnerCollectionAchievementModel;
59
import com.spice.profitmandi.dao.model.PartnerCollectionPlanModel;
60
import com.spice.profitmandi.dao.model.PartnerCollectionRemarkModel;
61
import com.spice.profitmandi.dao.model.PartnerSecondaryPlanModel;
62
import com.spice.profitmandi.dao.model.PartnerTargetAchievementModel;
63
import com.spice.profitmandi.dao.model.TargetModel;
64
import com.spice.profitmandi.dao.model.TicketViewModel;
65
import com.spice.profitmandi.dao.model.UserCart;
25899 tejbeer 66
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
30104 tejbeer 67
import com.spice.profitmandi.dao.repository.auth.AuthUserPartnerMappingRepository;
30077 tejbeer 68
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionPlanRepository;
30416 tejbeer 69
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionRemarkRepository;
30077 tejbeer 70
import com.spice.profitmandi.dao.repository.auth.PartnerSecondaryPlanRepository;
25952 tejbeer 71
import com.spice.profitmandi.dao.repository.cs.CsService;
30077 tejbeer 72
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
30416 tejbeer 73
import com.spice.profitmandi.dao.repository.cs.TicketCategoryRepository;
74
import com.spice.profitmandi.dao.repository.cs.TicketRepository;
75
import com.spice.profitmandi.dao.repository.cs.TicketSubCategoryRepository;
76
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
77
import com.spice.profitmandi.dao.repository.dtr.FranchiseeActivityRepository;
78
import com.spice.profitmandi.dao.repository.dtr.FranchiseeVisitRepository;
79
import com.spice.profitmandi.dao.repository.dtr.LeadActivityRepository;
80
import com.spice.profitmandi.dao.repository.dtr.LeadRepository;
81
import com.spice.profitmandi.dao.repository.dtr.PartnerOnBoardingPanelRepository;
82
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
83
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
30087 tejbeer 84
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
30077 tejbeer 85
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
86
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
30348 tejbeer 87
import com.spice.profitmandi.service.PartnerCollectionService;
25952 tejbeer 88
import com.spice.profitmandi.service.user.RetailerService;
28935 tejbeer 89
import com.spice.profitmandi.service.user.StoreTimelineTatService;
25952 tejbeer 90
import com.spice.profitmandi.web.req.CreateFranchiseeRequest;
91
import com.spice.profitmandi.web.res.Partner;
30416 tejbeer 92
 
25899 tejbeer 93
import io.swagger.annotations.ApiImplicitParam;
94
import io.swagger.annotations.ApiImplicitParams;
95
 
96
@Controller
97
@Transactional(rollbackFor = Throwable.class)
98
public class LeadController {
99
	private static final Logger LOGGER = LogManager.getLogger(LeadController.class);
100
	@Autowired
101
	private ResponseSender<?> responseSender;
102
 
103
	@Autowired
104
	private AuthRepository authRepository;
105
 
106
	@Autowired
107
	private LeadRepository leadRepository;
108
 
109
	@Autowired
25952 tejbeer 110
	private CsService csService;
111
 
112
	@Autowired
113
	private UserRepository userRepository;
114
 
115
	@Autowired
116
	private UserAccountRepository userAccountRepository;
117
 
118
	@Autowired
119
	private com.spice.profitmandi.dao.repository.user.UserRepository userUserRepository;
120
 
121
	@Autowired
122
	private RetailerService retailerService;
123
 
124
	@Autowired
25899 tejbeer 125
	private LeadActivityRepository leadActivityRepository;
126
 
25952 tejbeer 127
	@Autowired
128
	private FranchiseeVisitRepository franchiseeVisitRepository;
129
 
130
	@Autowired
131
	private FranchiseeActivityRepository franchiseeActivityRepository;
132
 
28935 tejbeer 133
	@Autowired
134
	private PartnerOnBoardingPanelRepository partnerOnBoardingPanelRepository;
135
 
136
	@Autowired
137
	private FofoStoreRepository fofoStoreRepository;
138
 
139
	@Autowired
140
	private StoreTimelineTatService storeTimelineTatService;
141
 
30348 tejbeer 142
	@Autowired
143
	private PartnerCollectionService partnerCollectionService;
144
 
30416 tejbeer 145
	@Autowired
146
	private TicketRepository ticketRepository;
147
 
148
	@Autowired
149
	private TicketCategoryRepository ticketCategoryRepository;
150
 
151
	@Autowired
152
	private TicketSubCategoryRepository ticketSubCategoryRepository;
153
 
154
	@Autowired
155
	private PartnerCollectionRemarkRepository partnerCollectionRemarkRepository;
156
 
25899 tejbeer 157
	@RequestMapping(value = "/lead", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
158
	@ApiImplicitParams({
30294 tejbeer 159
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25899 tejbeer 160
	public ResponseEntity<?> LeadUser(HttpServletRequest request,
30294 tejbeer 161
			@RequestBody CreateRefferalRequest createRefferalRequest) throws Exception {
25899 tejbeer 162
		Lead lead = new Lead();
163
		lead.setFirstName(createRefferalRequest.getFirstName());
164
		lead.setLastName(createRefferalRequest.getLastName());
165
		lead.setLeadMobile(createRefferalRequest.getMobile());
166
		lead.setState(createRefferalRequest.getState());
167
		lead.setCity(createRefferalRequest.getCity());
168
		lead.setAddress(createRefferalRequest.getAddress());
169
		lead.setCreatedTimestamp(LocalDateTime.now());
170
		lead.setUpdatedTimestamp(LocalDateTime.now());
171
		lead.setStatus(createRefferalRequest.getStatus());
25979 tejbeer 172
		lead.setSource(createRefferalRequest.getSource());
28201 tejbeer 173
		lead.setNotinterestedReason(createRefferalRequest.getReason());
26244 tejbeer 174
		if (createRefferalRequest.getColorCheck() == true) {
175
			lead.setColor("Green");
176
		} else {
177
			lead.setColor("Yellow");
178
		}
25900 amit.gupta 179
		AuthUser authUser = authRepository.selectByGmailId(createRefferalRequest.getReffereeEmail());
180
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
181
		lead.setCreatedBy(authUserName);
182
		lead.setAuthId(authUser.getId());
25981 tejbeer 183
		lead.setAssignTo(authUser.getId());
25899 tejbeer 184
 
185
		leadRepository.persist(lead);
186
		LeadActivity leadActivity = new LeadActivity();
187
		leadActivity.setLeadId(lead.getId());
188
		leadActivity.setRemark(createRefferalRequest.getRemark());
189
 
190
		if (createRefferalRequest.getStatus().equals(LeadStatus.followUp)) {
191
			leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
26958 tejbeer 192
			leadActivity.setClosureTimestamp(createRefferalRequest.getClosureTimestamp());
27025 tejbeer 193
			lead.setClosureTimestamp(createRefferalRequest.getClosureTimestamp());
25899 tejbeer 194
		} else {
195
			leadActivity.setSchelduleTimestamp(null);
26958 tejbeer 196
			leadActivity.setClosureTimestamp(null);
27025 tejbeer 197
			lead.setClosureTimestamp(null);
25899 tejbeer 198
		}
199
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
200
		leadActivityRepository.persist(leadActivity);
201
 
202
		return responseSender.ok(true);
203
	}
204
 
205
	@RequestMapping(value = "/lead-description", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
206
	@ApiImplicitParams({
30294 tejbeer 207
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25899 tejbeer 208
	public ResponseEntity<?> leadDescription(HttpServletRequest request, @RequestParam(name = "gmailId") String gmailId,
30294 tejbeer 209
			@RequestParam(name = "status") LeadStatus status) throws ProfitMandiBusinessException {
25899 tejbeer 210
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
29434 amit.gupta 211
		List<Lead> leads = null;
30306 tejbeer 212
		LOGGER.info("emails" + status);
29434 amit.gupta 213
		if (status.equals(LeadStatus.followUp)) {
30306 tejbeer 214
 
215
			leads = leadRepository.selectLeadsScheduledBetweenDate(Arrays.asList(authUser.getId()), null, null);
216
			leads = leads.stream()
217
					.sorted(Comparator.comparing(Lead::getScheduledTimestamp,
218
							Comparator.nullsFirst(Comparator.reverseOrder())))
219
					.collect(Collectors
220
							.toList());/*
221
										 * Collections.sort(leads, (o1, o2) -> { if (o1.getScheduledTimestamp() != null
222
										 * && o2.getScheduledTimestamp() != null) { return
223
										 * o1.getScheduledTimestamp().isBefore(o2.getScheduledTimestamp()) ? -1 : 1; }
224
										 * else if (o1.getScheduledTimestamp() != null) { return 1; } else { return -1;
225
										 * } });
226
										 */
227
 
30294 tejbeer 228
		} else {
229
			leads = leadRepository.selectByAssignAuthIdAndStatus(authUser.getId(), status);
230
 
29434 amit.gupta 231
		}
25979 tejbeer 232
 
25899 tejbeer 233
		return responseSender.ok(leads);
234
 
235
	}
236
 
237
	@RequestMapping(value = "/getlead", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
238
	@ApiImplicitParams({
30294 tejbeer 239
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25899 tejbeer 240
	public ResponseEntity<?> getLead(HttpServletRequest request, @RequestParam(name = "id") int id)
241
			throws ProfitMandiBusinessException {
242
 
243
		List<LeadActivity> leadActivities = leadActivityRepository.selectBYLeadId(id);
29317 tejbeer 244
		Lead lead = leadRepository.selectById(id);
245
		lead.setLeadActivities(leadActivities);
246
		return responseSender.ok(lead);
25899 tejbeer 247
 
248
	}
249
 
25948 amit.gupta 250
	@RequestMapping(value = "/leadUpdate", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
25899 tejbeer 251
	@ApiImplicitParams({
30294 tejbeer 252
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25899 tejbeer 253
	public ResponseEntity<?> leadUpdate(HttpServletRequest request, @RequestParam(name = "id") int id,
30294 tejbeer 254
			@RequestParam(name = "status") LeadStatus status, @RequestParam(name = "colorCheck") Boolean colorCheck,
255
			@RequestParam(name = "remark") String remark, @RequestParam(name = "reason") String reason,
256
			@RequestParam(name = "schelduleTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime schelduleTimestamp,
257
			@RequestParam(name = "closureTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime closureTimestamp)
25899 tejbeer 258
			throws ProfitMandiBusinessException {
259
 
260
		Lead lead = leadRepository.selectById(id);
261
 
262
		LeadActivity leadActivity = new LeadActivity();
26250 tejbeer 263
		lead.setStatus(status);
28201 tejbeer 264
		lead.setNotinterestedReason(reason);
26250 tejbeer 265
		leadActivity.setRemark(remark);
266
		leadActivity.setLeadId(id);
267
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
268
		leadActivity.setSchelduleTimestamp(null);
26958 tejbeer 269
		leadActivity.setClosureTimestamp(null);
26250 tejbeer 270
		lead.setUpdatedTimestamp(LocalDateTime.now());
271
		if (colorCheck == true) {
272
			lead.setColor("Green");
273
		} else {
274
			lead.setColor("Yellow");
275
		}
276
		if (status == LeadStatus.followUp) {
25899 tejbeer 277
 
278
			leadActivity.setSchelduleTimestamp(schelduleTimestamp);
26958 tejbeer 279
			leadActivity.setClosureTimestamp(closureTimestamp);
27025 tejbeer 280
			lead.setClosureTimestamp(closureTimestamp);
26250 tejbeer 281
 
25899 tejbeer 282
		} else {
26250 tejbeer 283
 
25899 tejbeer 284
			leadActivity.setSchelduleTimestamp(null);
26958 tejbeer 285
			leadActivity.setClosureTimestamp(null);
27025 tejbeer 286
			lead.setClosureTimestamp(null);
26244 tejbeer 287
 
25899 tejbeer 288
		}
26250 tejbeer 289
		leadActivityRepository.persist(leadActivity);
25899 tejbeer 290
		return responseSender.ok(true);
291
 
292
	}
25952 tejbeer 293
 
27117 tejbeer 294
	@RequestMapping(value = ProfitMandiConstants.URL_NEW_LEAD, method = RequestMethod.POST)
295
	public ResponseEntity<?> newLead(HttpServletRequest request,
30294 tejbeer 296
			@RequestBody CreateRefferalRequest createRefferalRequest) throws ProfitMandiBusinessException {
27117 tejbeer 297
		LOGGER.info("requested url : " + request.getRequestURL().toString());
298
		Lead lead = new Lead();
299
		lead.setAddress(createRefferalRequest.getCity());
27625 tejbeer 300
		Long.parseLong(createRefferalRequest.getMobile());
28201 tejbeer 301
		if (createRefferalRequest.getMobile().length() != 10) {
302
			throw new ProfitMandiBusinessException("Mobile Number", createRefferalRequest.getMobile(),
303
					"Number should be of 10 digits");
27597 amit.gupta 304
		}
27117 tejbeer 305
		lead.setLeadMobile(createRefferalRequest.getMobile());
306
		lead.setCity(createRefferalRequest.getCity());
307
		lead.setState(createRefferalRequest.getState());
308
		lead.setLastName(createRefferalRequest.getLastName());
309
		if (lead.getState().equals("Uttar Pradesh")) {
29276 amit.gupta 310
			lead.setAssignTo(53);
27117 tejbeer 311
		} else if (lead.getState().equals("Haryana")) {
29276 amit.gupta 312
			lead.setAssignTo(53);
27117 tejbeer 313
		} else if (lead.getState().equals("Delhi")) {
29276 amit.gupta 314
			lead.setAssignTo(53);
27117 tejbeer 315
		} else {
28201 tejbeer 316
			// Assign to sm
27992 amit.gupta 317
			lead.setAssignTo(53);
28201 tejbeer 318
			// Assign to neha
319
			// lead.setAssignTo(1);
27117 tejbeer 320
		}
321
		lead.setAuthId(lead.getAssignTo());
322
		lead.setCreatedBy("daily-sync");
323
		lead.setSource("SD-WEB");
324
		lead.setFirstName(createRefferalRequest.getFirstName());
325
		lead.setStatus(LeadStatus.followUp);
326
		lead.setColor("yellow");
327
		lead.setCreatedTimestamp(LocalDateTime.now());
328
		lead.setUpdatedTimestamp(LocalDateTime.now());
329
		leadRepository.persist(lead);
330
 
331
		return responseSender.ok(true);
332
 
333
	}
334
 
25952 tejbeer 335
	@RequestMapping(value = "/getPartnersList", method = RequestMethod.GET)
336
	@ApiImplicitParams({
30294 tejbeer 337
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25952 tejbeer 338
	public ResponseEntity<?> getPartners(HttpServletRequest request, @RequestParam(name = "gmailId") String gmailId)
339
			throws ProfitMandiBusinessException {
340
 
25973 tejbeer 341
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
25952 tejbeer 342
 
343
		Map<String, Set<String>> storeGuyMap = csService.getAuthUserPartnerEmailMapping();
344
 
30288 tejbeer 345
		Set<String> emails = storeGuyMap.get(authUser.getEmailId());
25952 tejbeer 346
		LOGGER.info("emails" + emails);
347
		List<User> users = userRepository.selectAllByEmailIds(new ArrayList<>(emails));
348
		List<Partner> partners = new ArrayList<>();
349
		for (User user : users) {
350
 
351
			UserAccount uc = userAccountRepository.selectSaholicByUserId(user.getId());
352
			com.spice.profitmandi.dao.entity.user.User userInfo = userUserRepository.selectById(uc.getAccountKey());
353
			CustomRetailer customRetailer = retailerService.getFofoRetailer(userInfo.getId());
354
 
355
			Partner partner = new Partner();
356
			partner.setBusinessName(customRetailer.getBusinessName());
357
			partner.setPartnerId(customRetailer.getPartnerId());
358
			partner.setCartId(customRetailer.getCartId());
359
			partner.setEmail(customRetailer.getEmail());
360
			partner.setGstNumber(customRetailer.getGstNumber());
361
			partner.setDisplayName(customRetailer.getDisplayName());
362
			partner.setCity(customRetailer.getAddress().getCity());
363
			partner.setUserId(user.getId());
364
			partners.add(partner);
365
		}
366
		LOGGER.info("partners" + partners);
367
		return responseSender.ok(partners);
368
	}
369
 
370
	@RequestMapping(value = "/franchise-first-visit", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
371
	@ApiImplicitParams({
30294 tejbeer 372
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25952 tejbeer 373
	public ResponseEntity<?> FranchiseFirstVisit(HttpServletRequest request,
30294 tejbeer 374
			@RequestBody CreateFranchiseeRequest createFranchiseeRequest) throws Exception {
25952 tejbeer 375
 
376
		FranchiseeVisit franchiseeVisit = new FranchiseeVisit();
377
		franchiseeVisit.setFofoId(createFranchiseeRequest.getFofoId());
378
		CustomRetailer customRetailer = retailerService.getFofoRetailer(createFranchiseeRequest.getFofoId());
379
 
380
		franchiseeVisit.setPartnerName(customRetailer.getBusinessName());
381
		franchiseeVisit.setAgenda(createFranchiseeRequest.getAgenda());
382
		franchiseeVisit.setCreatedTimestamp(LocalDateTime.now());
383
		franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
384
		franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
385
		franchiseeVisit.setSchelduleTimestamp(createFranchiseeRequest.getFirstSchelduleTimestamp());
386
		// change
25973 tejbeer 387
		AuthUser authUser = authRepository.selectByGmailId(createFranchiseeRequest.getCreatedBy());
25952 tejbeer 388
 
389
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
390
		franchiseeVisit.setCreatedBy(authUserName);
391
		franchiseeVisit.setAuthId(authUser.getId());
392
 
393
		franchiseeVisitRepository.persist(franchiseeVisit);
394
 
395
		return responseSender.ok(true);
396
	}
397
 
398
	@RequestMapping(value = "/franchise-visit", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
399
	@ApiImplicitParams({
30294 tejbeer 400
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25952 tejbeer 401
	public ResponseEntity<?> FranchiseVisit(HttpServletRequest request,
30294 tejbeer 402
			@RequestBody CreateFranchiseeRequest createFranchiseeRequest) throws Exception {
25952 tejbeer 403
 
404
		FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(createFranchiseeRequest.getId());
405
		franchiseeVisit.setFofoId(createFranchiseeRequest.getFofoId());
406
		CustomRetailer customRetailer = retailerService.getFofoRetailer(createFranchiseeRequest.getFofoId());
407
 
408
		franchiseeVisit.setPartnerName(customRetailer.getBusinessName());
409
		franchiseeVisit.setAgenda(createFranchiseeRequest.getAgenda());
410
		franchiseeVisit.setPartnerRemark(createFranchiseeRequest.getPartnerRemark());
411
		franchiseeVisit.setOutsideVisibity(createFranchiseeRequest.getOutsideVisibity());
412
		franchiseeVisit.setInstoreVisibility(createFranchiseeRequest.getInstoreVisibility());
413
		franchiseeVisit.setOutsideStock(createFranchiseeRequest.getOutsideStock());
414
		franchiseeVisit.setSystemKnowledge(createFranchiseeRequest.getSystemKnowledge());
415
		franchiseeVisit.setWorkingDevice(createFranchiseeRequest.getWorkingDevice());
416
		franchiseeVisit.setWorkingPrinter(createFranchiseeRequest.getWorkingPrinter());
417
		franchiseeVisit.setCarryBags(createFranchiseeRequest.getCarryBags());
418
		franchiseeVisit.setSmartdukaanTshirt(createFranchiseeRequest.getSmartdukaanTshirt());
419
		franchiseeVisit.setLatestDummies(createFranchiseeRequest.getLatestDummies());
420
		franchiseeVisit.setInvestment(createFranchiseeRequest.getInvestment());
421
		franchiseeVisit.setMtd(createFranchiseeRequest.getMtd());
422
		franchiseeVisit.setHygiene(createFranchiseeRequest.getHygiene());
423
		franchiseeVisit.setCreatedTimestamp(LocalDateTime.now());
424
		franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
425
		if (createFranchiseeRequest.getAction().equals(FranchiseeActivityStatus.FOLLOWUP)) {
426
			franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
427
		} else {
428
			franchiseeVisit.setStatus(FranchiseeVisitStatus.CLOSE);
429
		}
430
 
431
		// AuthUser authUser =
432
		// authRepository.selectByGmailId(createFranchiseeRequest.getCreatedBy());
433
		// change
25973 tejbeer 434
		AuthUser authUser = authRepository.selectByGmailId(createFranchiseeRequest.getCreatedBy());
25952 tejbeer 435
 
436
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
437
		franchiseeVisit.setCreatedBy(authUserName);
438
		franchiseeVisit.setAuthId(authUser.getId());
439
 
440
		franchiseeVisitRepository.persist(franchiseeVisit);
441
 
442
		FranchiseeActivity franchiseeActivity = new FranchiseeActivity();
443
		franchiseeActivity.setAction(createFranchiseeRequest.getAction());
444
		franchiseeActivity.setFranchiseeVisitd(franchiseeVisit.getId());
445
		franchiseeActivity.setResolution(createFranchiseeRequest.getResolution());
446
		if (createFranchiseeRequest.getAction().equals(FranchiseeActivityStatus.FOLLOWUP)) {
447
			franchiseeActivity.setSchelduleTimestamp(createFranchiseeRequest.getSchelduleTimestamp());
448
		} else {
449
			franchiseeActivity.setSchelduleTimestamp(null);
450
		}
451
		franchiseeActivity.setCreatedTimestamp(LocalDateTime.now());
452
		franchiseeActivityRepository.persist(franchiseeActivity);
453
 
454
		franchiseeVisit.setFranchiseActivityId(franchiseeActivity.getId());
455
		return responseSender.ok(true);
456
	}
457
 
458
	@RequestMapping(value = "/getFranchiseVisit", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
459
	@ApiImplicitParams({
30294 tejbeer 460
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25952 tejbeer 461
	public ResponseEntity<?> getFranchiseVisit(HttpServletRequest request,
30294 tejbeer 462
			@RequestParam(name = "gmailId") String gmailId, @RequestParam(name = "status") FranchiseeVisitStatus status,
463
			@RequestParam(name = "offset", defaultValue = "0") int offset,
464
			@RequestParam(name = "limit", defaultValue = "10") int limit) throws ProfitMandiBusinessException {
25973 tejbeer 465
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
25952 tejbeer 466
 
467
		List<FranchiseeVisit> franchiseeVisits = franchiseeVisitRepository.selectByAuthIdAndStatus(authUser.getId(),
468
				status, offset, limit);
469
 
470
		for (FranchiseeVisit fv : franchiseeVisits) {
471
			if (fv.getFranchiseActivityId() != 0) {
472
				FranchiseeActivity fA = franchiseeActivityRepository.selectById(fv.getFranchiseActivityId());
473
				fv.setFranchiseeActivity(fA);
474
			}
475
		}
476
 
477
		return responseSender.ok(franchiseeVisits);
478
 
479
	}
480
 
481
	@RequestMapping(value = "/getFranchiseActivity", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
482
	@ApiImplicitParams({
30294 tejbeer 483
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25952 tejbeer 484
	public ResponseEntity<?> getFranchiseActivity(HttpServletRequest request, @RequestParam(name = "id") int id)
485
			throws ProfitMandiBusinessException {
486
 
487
		List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository.selectByFranchiseeVisitId(id);
488
 
489
		return responseSender.ok(franchiseeActivities);
490
 
491
	}
492
 
493
	@RequestMapping(value = "/getFranchiseeInfo", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
494
	@ApiImplicitParams({
30294 tejbeer 495
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25952 tejbeer 496
	public ResponseEntity<?> getFranchiseeInfo(HttpServletRequest request, @RequestParam(name = "id") int id)
497
			throws ProfitMandiBusinessException {
498
		FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(id);
499
 
500
		return responseSender.ok(franchiseeVisit);
501
 
502
	}
503
 
504
	@RequestMapping(value = "/franchise-visit-update", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
505
	@ApiImplicitParams({
30294 tejbeer 506
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25952 tejbeer 507
	public ResponseEntity<?> franchiseVisitUpdate(HttpServletRequest request, @RequestParam(name = "id") int id,
30294 tejbeer 508
			@RequestParam(name = "action") FranchiseeActivityStatus action,
509
			@RequestParam(name = "resolution") String resolution,
510
			@RequestParam(name = "schelduleTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime schelduleTimestamp)
25952 tejbeer 511
			throws ProfitMandiBusinessException {
512
		FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(id);
513
 
514
		FranchiseeActivity franchiseeActivity = new FranchiseeActivity();
515
 
516
		if (action == FranchiseeActivityStatus.FOLLOWUP) {
517
			franchiseeActivity.setResolution(resolution);
518
			franchiseeActivity.setFranchiseeVisitd(franchiseeVisit.getId());
519
			franchiseeActivity.setAction(action);
520
			franchiseeActivity.setSchelduleTimestamp(schelduleTimestamp);
521
			franchiseeActivity.setCreatedTimestamp(LocalDateTime.now());
522
			franchiseeActivityRepository.persist(franchiseeActivity);
523
			franchiseeVisit.setFranchiseActivityId(franchiseeActivity.getId());
524
			franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
525
			franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
526
			franchiseeVisitRepository.persist(franchiseeVisit);
527
 
528
		} else {
529
			franchiseeActivity.setResolution(resolution);
530
			franchiseeActivity.setFranchiseeVisitd(franchiseeVisit.getId());
531
			franchiseeActivity.setAction(action);
532
			franchiseeActivity.setSchelduleTimestamp(null);
533
			franchiseeActivity.setCreatedTimestamp(LocalDateTime.now());
534
			franchiseeActivityRepository.persist(franchiseeActivity);
535
			franchiseeVisit.setFranchiseActivityId(franchiseeActivity.getId());
536
			franchiseeVisit.setStatus(FranchiseeVisitStatus.CLOSE);
537
			franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
538
			franchiseeVisitRepository.persist(franchiseeVisit);
539
 
540
		}
541
 
542
		return responseSender.ok(true);
543
 
544
	}
28935 tejbeer 545
 
546
	@RequestMapping(value = "/onBoardingTimelineStatus", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
547
	@ApiImplicitParams({
30294 tejbeer 548
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
28935 tejbeer 549
	public ResponseEntity<?> onBoardingTimelineStatus(HttpServletRequest request, Model model)
550
			throws ProfitMandiBusinessException {
551
		int userId = (int) request.getAttribute("userId");
552
		UserCart uc = userAccountRepository.getUserCart(userId);
553
		FofoStore fs = fofoStoreRepository.selectByRetailerId(uc.getUserId());
554
		PartnerOnBoardingPanel partnerOnBoardingPanel = partnerOnBoardingPanelRepository.selectByCode(fs.getCode());
555
		Map<StoreTimeline, OnBoardingTimelineModel> timelineStatus = null;
556
		LOGGER.info("partnerOnBoardingPanel" + partnerOnBoardingPanel);
557
		if (partnerOnBoardingPanel != null) {
558
 
559
			timelineStatus = storeTimelineTatService.getTimeline(partnerOnBoardingPanel.getId());
560
		}
561
		List<OnBoardingTimelineModel> onBoardingModel = new ArrayList<>();
562
		if (timelineStatus != null) {
563
			onBoardingModel = timelineStatus.values().stream().skip(2).map(x -> x).collect(Collectors.toList());
564
		}
565
		return responseSender.ok(onBoardingModel);
566
 
567
	}
28982 tejbeer 568
 
569
	@RequestMapping(value = "/onBoardingTimelineVisibility", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
570
	@ApiImplicitParams({
30294 tejbeer 571
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
28982 tejbeer 572
	public ResponseEntity<?> onBoardingTimelineVisibility(HttpServletRequest request, Model model)
573
			throws ProfitMandiBusinessException {
574
		int userId = (int) request.getAttribute("userId");
575
		UserCart uc = userAccountRepository.getUserCart(userId);
576
 
577
		FofoStore fs = fofoStoreRepository.selectByRetailerId(uc.getUserId());
578
		PartnerOnBoardingPanel partnerOnBoardingPanel = partnerOnBoardingPanelRepository.selectByCode(fs.getCode());
579
		boolean status = true;
580
		if (partnerOnBoardingPanel != null) {
581
 
582
			status = storeTimelineTatService.getTimelineCompleted(partnerOnBoardingPanel.getId());
583
		}
584
 
28983 tejbeer 585
		LOGGER.info("status" + status);
586
 
28982 tejbeer 587
		return responseSender.ok(status);
588
 
589
	}
30077 tejbeer 590
 
591
	@Autowired
592
	private OrderRepository orderRepository;
593
 
594
	@Autowired
595
	private PositionRepository positionRepository;
596
 
597
	@Autowired
598
	private UserWalletRepository userWalletRepository;
599
 
600
	@Autowired
601
	private PartnerCollectionPlanRepository partnerCollectionPlanRepository;
602
 
603
	@Autowired
604
	private PartnerSecondaryPlanRepository partnerSecondaryPlanRepository;
605
 
30087 tejbeer 606
	@Autowired
607
	private PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
608
 
30104 tejbeer 609
	@Autowired
610
	private AuthUserPartnerMappingRepository authUserPartnerMappingRepository;
611
 
30077 tejbeer 612
	@RequestMapping(value = "/getPartnerTarget", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
613
	@ApiImplicitParams({
30294 tejbeer 614
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
30077 tejbeer 615
	public ResponseEntity<?> getPartnerTarget(HttpServletRequest request,
30294 tejbeer 616
			@RequestParam(name = "gmailId") String gmailId, @RequestParam String dayValue)
30087 tejbeer 617
			throws ProfitMandiBusinessException {
30077 tejbeer 618
 
619
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
620
 
30348 tejbeer 621
		Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
30077 tejbeer 622
 
30348 tejbeer 623
		Set<Integer> fofoIds = storeGuyMap.get(authUser.getEmailId());
30077 tejbeer 624
 
30348 tejbeer 625
		List<String> brands = Arrays.asList("Vivo", "Samsung", "Oppo", "Itel", "Almost New", "Others");
30078 tejbeer 626
 
30077 tejbeer 627
		float totalPartnerTargetSecondary = 0;
628
		float totalPartnerTargetCollection = 0;
629
		float totalPartnerAchievementSecondary = 0;
630
		float totalPartnerAchievementCollection = 0;
631
		TargetModel tm = new TargetModel();
30087 tejbeer 632
		Map<Integer, PartnerDailyInvestment> partnerDailyInvestmentMap = new HashMap<>();
30077 tejbeer 633
 
30416 tejbeer 634
		Map<Integer, Long> partnerTicketCount = ticketRepository.selectAllOpenTicketsGroupByRetailer();
635
 
636
		LOGGER.info("partnerTicketCount {}", partnerTicketCount);
637
 
30077 tejbeer 638
		List<PartnerTargetAchievementModel> ptams = new ArrayList<>();
639
 
640
		if (fofoIds.size() > 0 && fofoIds != null) {
30087 tejbeer 641
			List<Integer> fofoIdl = new ArrayList<>(fofoIds);
642
			List<Integer> fofoIdList = fofoStoreRepository.selectByRetailerIds(fofoIdl).stream()
643
					.filter(x -> !x.isInternal()).map(x -> x.getId()).collect(Collectors.toList());
30077 tejbeer 644
 
645
			LocalDateTime startDate = LocalDate.now().atStartOfDay();
646
 
30087 tejbeer 647
			if (dayValue.equals("previous")) {
648
				startDate = LocalDate.now().minusDays(1).atStartOfDay();
30138 tejbeer 649
 
30087 tejbeer 650
			}
651
 
652
			List<PartnerDailyInvestment> partnerDailyInvestments = partnerDailyInvestmentRepository
30149 tejbeer 653
					.selectAll(fofoIdList, startDate.toLocalDate().minusDays(1));
30087 tejbeer 654
			if (!partnerDailyInvestments.isEmpty()) {
655
				partnerDailyInvestmentMap = partnerDailyInvestments.stream()
656
						.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
657
			}
658
 
30426 tejbeer 659
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
30077 tejbeer 660
 
30426 tejbeer 661
			Map<Integer, CustomRetailer> customRetailers = fofoIdList.stream().map(x -> customRetailerMap.get(x))
662
					.filter(x -> x != null).collect(Collectors.toList()).stream()
663
					.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
664
 
30330 tejbeer 665
			/*
666
			 * Map<Integer, PartnerCollectionPlanModel> collectionPlans =
667
			 * userWalletRepository .getPartnerWiseTargetCollections(fofoIdList,
668
			 * startDate).stream() .collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
669
			 */
670
 
671
			Map<Integer, PartnerCollectionAchievementModel> collectionAchievementMap = userWalletRepository
672
					.getPartnerWiseCollectionAchievement(fofoIdList, startDate).stream()
30077 tejbeer 673
					.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
674
 
30330 tejbeer 675
			Map<Integer, PartnerCollectionPlan> todayTarget = partnerCollectionPlanRepository
676
					.selectByLocalDateAndFofoIds(startDate.toLocalDate(), fofoIdList, true).stream()
677
					.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
678
 
679
			int todayCollectionCount = todayTarget.size();
30348 tejbeer 680
			Map<Integer, PartnerCollectionPlanModel> foundCollectionMap = partnerCollectionService
681
					.getCollectionMap(fofoIdList, startDate);
30330 tejbeer 682
 
30077 tejbeer 683
			Map<Integer, List<PartnerSecondaryPlanModel>> partnerSecondayPlans = orderRepository
30110 tejbeer 684
					.selectPartnerSecondaryGroupByBrand(fofoIdList, startDate.toLocalDate()).stream()
30077 tejbeer 685
					.collect(Collectors.groupingBy(x -> x.getFofoId()));
686
 
687
			LOGGER.info("partnerSecondayPlans {}", partnerSecondayPlans);
688
			for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailers.entrySet()) {
689
				int fofoId = customRetailerEntry.getKey();
690
				CustomRetailer customRetailer = customRetailerEntry.getValue();
691
				float totalSecondaryPlan = 0;
692
				float totalSecondaryAchivement = 0;
693
 
694
				PartnerTargetAchievementModel ptam = new PartnerTargetAchievementModel();
695
				ptam.setFofoId(fofoId);
696
				ptam.setBusinessName(customRetailer.getBusinessName());
30416 tejbeer 697
				ptam.setMobile(customRetailer.getMobileNumber());
30077 tejbeer 698
 
30087 tejbeer 699
				if (partnerDailyInvestmentMap.get(fofoId) != null) {
700
					ptam.setWalletAmount(partnerDailyInvestmentMap.get(fofoId).getWalletAmount());
701
					ptam.setShortInvestment(partnerDailyInvestmentMap.get(fofoId).getShortInvestment());
702
				}
703
 
30330 tejbeer 704
				if (foundCollectionMap.get(fofoId) != null) {
705
					PartnerCollectionPlanModel collectionPlan = foundCollectionMap.get(fofoId);
706
					PartnerCollectionAchievementModel collectionAchievement = collectionAchievementMap.get(fofoId);
30416 tejbeer 707
					ptam.setRemark(collectionPlan.getRemark());
708
					ptam.setMessage(collectionPlan.getMessage());
709
					ptam.setRemarkTimestamp(collectionPlan.getRemarkTimestamp());
30330 tejbeer 710
					ptam.setRank(collectionPlan.getRank());
30137 tejbeer 711
					Integer authId = collectionPlan.getAuthId();
30330 tejbeer 712
 
30416 tejbeer 713
					Map<Integer, String> rankColorMap = ProfitMandiConstants.Rank_Color_Map;
30330 tejbeer 714
 
30416 tejbeer 715
					ptam.setCollectionColor(rankColorMap.get(collectionPlan.getRank()));
716
 
30087 tejbeer 717
					LOGGER.info("authId" + authId);
30077 tejbeer 718
 
30330 tejbeer 719
					if (collectionPlan.getTargetPlan() != null && collectionPlan.getCommittedDate() != null) {
720
						float targetCollection = 0;
30137 tejbeer 721
 
30330 tejbeer 722
						if (collectionPlan.getRank() == 2) {
723
							targetCollection = collectionPlan.getTargetPlan() - collectionPlan.getAchievementPlan();
724
						} else {
725
							targetCollection = collectionPlan.getTargetPlan();
30087 tejbeer 726
						}
30330 tejbeer 727
 
728
						if (!collectionPlan.getCommittedDate().isAfter(startDate)) {
729
							totalPartnerTargetCollection += targetCollection;
30087 tejbeer 730
						}
30330 tejbeer 731
						ptam.setCollectionTarget(targetCollection);
732
					}
733
					if (collectionAchievement.getAmount() != null) {
734
						totalPartnerAchievementCollection += collectionAchievement.getAmount();
30087 tejbeer 735
 
30330 tejbeer 736
						ptam.setCollectionAchievement(collectionAchievement.getAmount());
30087 tejbeer 737
					}
738
 
739
					if (authId != null && authId != authUser.getId()) {
740
						ptam.setAuthUser(authRepository.selectById(authId));
741
 
742
					}
743
 
30137 tejbeer 744
					if (collectionPlan.getCommittedDate() != null) {
745
 
746
						ptam.setCollectionCommitmentDate(collectionPlan.getCommittedDate().toLocalDate());
747
					}
30077 tejbeer 748
				}
749
 
30330 tejbeer 750
				// Secondary
751
 
30077 tejbeer 752
				PartnerSecondaryPlanModel otherPartnerSecondaryPlanModel = null;
30087 tejbeer 753
				Map<String, PartnerSecondaryPlanModel> secondaryModelMap = new HashMap<>();
30077 tejbeer 754
				if (partnerSecondayPlans.get(fofoId) != null) {
755
					long otherBrandSecondary = 0;
756
					for (PartnerSecondaryPlanModel pspm : partnerSecondayPlans.get(fofoId)) {
30087 tejbeer 757
						Integer authId = pspm.getAuthId();
30077 tejbeer 758
						if (!brands.contains(pspm.getBrand())) {
30087 tejbeer 759
							if (pspm.getAchievementPlan() != null) {
760
								otherBrandSecondary += pspm.getAchievementPlan();
761
							}
30077 tejbeer 762
						} else {
763
							otherPartnerSecondaryPlanModel = pspm;
764
						}
30087 tejbeer 765
						if (pspm.getTargetPlan() != null) {
766
							totalSecondaryPlan += pspm.getTargetPlan();
767
						}
768
 
769
						if (pspm.getAchievementPlan() != null) {
770
							totalSecondaryAchivement += pspm.getAchievementPlan();
771
						}
30137 tejbeer 772
 
773
						if (pspm.getCommittedDate() != null) {
774
 
775
							ptam.setSecondaryCommitmentDate(pspm.getCommittedDate().toLocalDate());
776
						}
30087 tejbeer 777
						if (authId != null && authId == authUser.getId()) {
778
 
30137 tejbeer 779
							if (pspm.getTargetPlan() != null && pspm.getCommittedDate() != null) {
30087 tejbeer 780
 
30137 tejbeer 781
								if (pspm.getCommittedDate().isEqual(startDate)) {
782
									totalPartnerTargetSecondary += pspm.getTargetPlan();
783
								}
30087 tejbeer 784
							}
785
 
786
							if (pspm.getAchievementPlan() != null) {
787
								totalPartnerAchievementSecondary += pspm.getAchievementPlan();
788
							}
789
 
790
						}
30077 tejbeer 791
					}
792
					if (otherPartnerSecondaryPlanModel != null) {
793
						otherPartnerSecondaryPlanModel.setAchievementPlan(otherBrandSecondary);
794
					}
30087 tejbeer 795
					secondaryModelMap = partnerSecondayPlans.get(fofoId).stream()
30077 tejbeer 796
							.filter(x -> brands.contains(x.getBrand()))
797
							.collect(Collectors.toMap(x -> x.getBrand(), x -> x));
798
 
799
					if (secondaryModelMap.containsKey("Others")) {
800
						PartnerSecondaryPlanModel psp = secondaryModelMap.get("Others");
801
						psp.setAchievementPlan(otherBrandSecondary);
802
					} else {
30087 tejbeer 803
						secondaryModelMap.put("Others", new PartnerSecondaryPlanModel(fofoId, "Others", (long) 0,
30137 tejbeer 804
								otherBrandSecondary, authUser.getId(), null));
30077 tejbeer 805
					}
806
					for (String brand : brands) {
807
						if (!secondaryModelMap.containsKey(brand)) {
30137 tejbeer 808
							secondaryModelMap.put(brand, new PartnerSecondaryPlanModel(fofoId, brand, (long) 0,
809
									(long) 0, authUser.getId(), null));
30077 tejbeer 810
						}
811
					}
812
 
30087 tejbeer 813
					for (Entry<String, PartnerSecondaryPlanModel> secondaryModelEntry : secondaryModelMap.entrySet()) {
814
						Integer authId = secondaryModelEntry.getValue().getAuthId();
815
						if (authId != null && authId != authUser.getId()) {
816
							secondaryModelEntry.getValue().setAuthUser(authRepository.selectById(authId));
817
							ptam.setSecondaryColor("red");
818
						}
819
 
820
					}
821
 
30077 tejbeer 822
					ptam.setPartnerSecondaryModel(secondaryModelMap);
823
					ptam.setTotalSecondaryPlan(totalSecondaryPlan);
30087 tejbeer 824
					ptam.setTotalSecondaryAchievement(totalSecondaryAchivement);
30330 tejbeer 825
					// Secondary
30077 tejbeer 826
 
30087 tejbeer 827
				} else {
828
					for (String brand : brands) {
829
						PartnerSecondaryPlanModel pspm = new PartnerSecondaryPlanModel();
830
						pspm.setAchievementPlan((long) 0);
831
						pspm.setTargetPlan((long) 0);
832
						pspm.setBrand(brand);
833
						pspm.setFofoId(fofoId);
834
						secondaryModelMap.put(brand, pspm);
835
					}
836
					ptam.setPartnerSecondaryModel(secondaryModelMap);
30077 tejbeer 837
				}
838
 
30416 tejbeer 839
				if (!partnerTicketCount.isEmpty()) {
840
					if (partnerTicketCount.get(fofoId) != null) {
841
						ptam.setTicketCount(partnerTicketCount.get(fofoId));
842
					} else {
843
						ptam.setTicketCount(0);
844
 
845
					}
846
				}
847
 
30078 tejbeer 848
				ptams.add(ptam);
849
 
30077 tejbeer 850
			}
851
 
852
			tm.setTotalPartnerTargetCollection(totalPartnerTargetCollection);
853
			tm.setTotalPartnerTargetSecondary(totalPartnerTargetSecondary);
854
			tm.setTotalPartnerSecondary(totalPartnerAchievementSecondary);
855
			tm.setTotalPartnerCollection(totalPartnerAchievementCollection);
30330 tejbeer 856
			tm.setTodayCollectionCount(todayCollectionCount);
30077 tejbeer 857
 
30330 tejbeer 858
			tm.setTargetAchievement(ptams.stream().sorted(Comparator.comparing(PartnerTargetAchievementModel::getRank))
30087 tejbeer 859
					.collect(Collectors.toList()));
860
 
30077 tejbeer 861
		}
862
 
863
		return responseSender.ok(tm);
864
 
865
	}
866
 
867
	@RequestMapping(value = "/target", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
868
	@ApiImplicitParams({
30294 tejbeer 869
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
30077 tejbeer 870
	public ResponseEntity<?> createPartnerTarget(HttpServletRequest request,
30294 tejbeer 871
			@RequestBody PartnerTargetAchievementModel ptam) throws ProfitMandiBusinessException {
30077 tejbeer 872
 
30089 tejbeer 873
		LOGGER.info("ptam" + ptam);
874
 
30087 tejbeer 875
		AuthUser authUser = authRepository.selectByGmailId(ptam.getCreatedBy());
30077 tejbeer 876
 
30137 tejbeer 877
		if (ptam.getCollectionCommitmentDate().isAfter(LocalDate.now())
878
				|| ptam.getCollectionCommitmentDate().isEqual(LocalDate.now())) {
879
			PartnerCollectionPlan partnerCollectionPlan = partnerCollectionPlanRepository
880
					.selectByLocalDate(LocalDate.now(), ptam.getFofoId(), true);
881
			LOGGER.info("pcp" + partnerCollectionPlan);
30077 tejbeer 882
 
30137 tejbeer 883
			if (partnerCollectionPlan == null) {
884
				if (ptam.getCollectionTarget() > 0) {
30087 tejbeer 885
 
30137 tejbeer 886
					partnerCollectionPlan = new PartnerCollectionPlan();
887
					partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
888
					partnerCollectionPlan.setAuthId(authUser.getId());
889
					partnerCollectionPlan.setFofoId(ptam.getFofoId());
890
					partnerCollectionPlan.setActive(true);
891
					partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
892
					partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
893
					partnerCollectionPlan.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
894
					partnerCollectionPlanRepository.persist(partnerCollectionPlan);
30416 tejbeer 895
 
30137 tejbeer 896
				}
30087 tejbeer 897
 
30137 tejbeer 898
			} else {
30087 tejbeer 899
 
30137 tejbeer 900
				if (partnerCollectionPlan.getCollectionPlan() != ptam.getCollectionTarget()) {
901
					float totalCollectionPlan = partnerCollectionPlan.getCollectionPlan() + 10000;
902
					if (authUser.getId() == partnerCollectionPlan.getAuthId()) {
30087 tejbeer 903
 
30185 tejbeer 904
						if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
905
								|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
906
								|| ptam.getCollectionTarget() >= totalCollectionPlan) {
30137 tejbeer 907
							partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
908
							partnerCollectionPlan.setActive(true);
909
							partnerCollectionPlan
910
									.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
911
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
912
						} else {
913
							throw new ProfitMandiBusinessException("collection target", "",
914
									"collection target should be more than " + totalCollectionPlan);
915
						}
30087 tejbeer 916
 
917
					} else {
30137 tejbeer 918
 
30185 tejbeer 919
						if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
920
								|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
921
								|| ptam.getCollectionTarget() >= totalCollectionPlan) {
30137 tejbeer 922
 
923
							partnerCollectionPlan.setActive(false);
924
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
925
							partnerCollectionPlan = new PartnerCollectionPlan();
926
							partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
927
							partnerCollectionPlan.setAuthId(authUser.getId());
928
							partnerCollectionPlan.setFofoId(ptam.getFofoId());
929
							partnerCollectionPlan.setActive(true);
930
							partnerCollectionPlan
931
									.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
932
							partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
933
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
934
							partnerCollectionPlanRepository.persist(partnerCollectionPlan);
935
						} else {
936
							throw new ProfitMandiBusinessException("collection target", "",
937
									"collection target should be more than " + totalCollectionPlan);
938
						}
30087 tejbeer 939
					}
940
				}
30137 tejbeer 941
 
30146 tejbeer 942
				if ((LocalDate.now().atStartOfDay().equals(ptam.getCollectionCommitmentDate().atStartOfDay())
943
						|| ptam.getCollectionCommitmentDate().atStartOfDay().isAfter(LocalDate.now().atStartOfDay()))
30137 tejbeer 944
						&& partnerCollectionPlan.getCollectionPlan() == ptam.getCollectionTarget()) {
945
					partnerCollectionPlan.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
946
					partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
947
				}
30416 tejbeer 948
 
949
				PartnerCollectionRemark pcr = new PartnerCollectionRemark();
950
				pcr.setFofoId(ptam.getFofoId());
951
				pcr.setAuthId(authUser.getId());
952
				pcr.setMessage("Collection plan for" + ptam.getCollectionCommitmentDate());
953
				pcr.setRemark(CollectionRemark.COLLECTION_PLAN);
954
				pcr.setCreateTimestamp(LocalDateTime.now());
955
				partnerCollectionRemarkRepository.persist(pcr);
30087 tejbeer 956
			}
30137 tejbeer 957
		} else {
958
			throw new ProfitMandiBusinessException("Date", "",
30138 tejbeer 959
					"you can't select the back date " + ptam.getCollectionCommitmentDate());
30077 tejbeer 960
		}
961
 
962
		for (Entry<String, PartnerSecondaryPlanModel> pspm : ptam.getPartnerSecondaryModel().entrySet()) {
30087 tejbeer 963
 
30137 tejbeer 964
			if (ptam.getCollectionCommitmentDate().isAfter(LocalDate.now())
965
					|| ptam.getCollectionCommitmentDate().isEqual(LocalDate.now())) {
966
				PartnerSecondaryPlanModel plan = pspm.getValue();
967
				PartnerSecondaryPlan psp = partnerSecondaryPlanRepository.selectByLocalDateBrand(plan.getBrand(),
968
						LocalDate.now(), ptam.getFofoId(), true);
969
				LOGGER.info("psp" + psp);
30087 tejbeer 970
 
30137 tejbeer 971
				if (psp == null) {
30334 tejbeer 972
					if (plan.getTargetPlan() > 0 && plan.getTargetPlan() != null) {
30087 tejbeer 973
 
30137 tejbeer 974
						psp = new PartnerSecondaryPlan();
975
						psp.setAuthId(authUser.getId());
976
						psp.setBrand(pspm.getKey());
977
						psp.setFofoId(pspm.getValue().getFofoId());
978
						psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
979
						psp.setCreateTimestamp(LocalDateTime.now());
980
						psp.setUpdatedTimestamp(LocalDateTime.now());
981
						psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
982
						psp.setActive(true);
983
						partnerSecondaryPlanRepository.persist(psp);
984
					}
30087 tejbeer 985
 
30137 tejbeer 986
				} else {
987
					if (plan.getTargetPlan() != psp.getSecondaryPlan()) {
988
						float totalSecondaryPlan = psp.getSecondaryPlan() + 10000;
989
						if (authUser.getId() == plan.getAuthId()) {
30185 tejbeer 990
							if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
991
									|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
992
									|| plan.getTargetPlan() >= totalSecondaryPlan) {
30137 tejbeer 993
								psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
994
								psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
995
								psp.setUpdatedTimestamp(LocalDateTime.now());
996
								psp.setActive(true);
997
							} else {
998
								throw new ProfitMandiBusinessException("secondary target", "",
999
										"secondary target should be more than " + totalSecondaryPlan);
1000
							}
30087 tejbeer 1001
 
30137 tejbeer 1002
						} else {
30087 tejbeer 1003
 
30185 tejbeer 1004
							if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
1005
									|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
1006
									|| plan.getTargetPlan() >= totalSecondaryPlan) {
30087 tejbeer 1007
 
30137 tejbeer 1008
								psp.setUpdatedTimestamp(LocalDateTime.now());
1009
								psp.setActive(false);
1010
								psp = new PartnerSecondaryPlan();
1011
								psp.setAuthId(authUser.getId());
1012
								psp.setBrand(pspm.getKey());
1013
								psp.setFofoId(pspm.getValue().getFofoId());
1014
								psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
1015
								psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1016
								psp.setCreateTimestamp(LocalDateTime.now());
1017
								psp.setUpdatedTimestamp(LocalDateTime.now());
1018
								psp.setActive(true);
1019
								partnerSecondaryPlanRepository.persist(psp);
1020
							} else {
1021
								throw new ProfitMandiBusinessException("secondary target", "",
1022
										"secondary target should be more than " + totalSecondaryPlan);
1023
							}
30087 tejbeer 1024
						}
1025
					}
30137 tejbeer 1026
 
30146 tejbeer 1027
					if ((LocalDate.now().atStartOfDay().equals(ptam.getSecondaryCommitmentDate().atStartOfDay())
1028
							|| ptam.getSecondaryCommitmentDate().atStartOfDay().isAfter(LocalDate.now().atStartOfDay()))
30137 tejbeer 1029
							&& plan.getTargetPlan() == psp.getSecondaryPlan()) {
1030
						psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1031
						psp.setUpdatedTimestamp(LocalDateTime.now());
1032
					}
1033
 
30087 tejbeer 1034
				}
30137 tejbeer 1035
			} else {
1036
				throw new ProfitMandiBusinessException("Date", "",
30138 tejbeer 1037
						"you can't select the back date " + ptam.getSecondaryCommitmentDate());
30077 tejbeer 1038
			}
30137 tejbeer 1039
 
30077 tejbeer 1040
		}
1041
 
1042
		return responseSender.ok(true);
30137 tejbeer 1043
 
30077 tejbeer 1044
	}
1045
 
30416 tejbeer 1046
	@RequestMapping(value = "/viewTickets", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1047
	@ApiImplicitParams({
1048
 
1049
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1050
	public ResponseEntity<?> viewTickets(HttpServletRequest request, @RequestParam int fofoId)
1051
			throws ProfitMandiBusinessException {
1052
		List<Ticket> tickets = ticketRepository.selectAllOpenTicketByRetailer(fofoId);
1053
 
1054
		List<TicketViewModel> viewList = new ArrayList<>();
1055
		for (Ticket ticket : tickets) {
1056
 
1057
			TicketViewModel ticketViewModel = new TicketViewModel();
1058
			ticketViewModel.setId(ticket.getId());
1059
			TicketSubCategory ticketSubCategory = ticketSubCategoryRepository.selectById(ticket.getSubCategoryId());
1060
			TicketCategory ticketCategory = ticketCategoryRepository.selectById(ticketSubCategory.getCategoryId());
1061
 
1062
			ticketViewModel.setCategoryName(ticketCategory.getName());
1063
			ticketViewModel.setSubCategoryName(ticketSubCategory.getName());
1064
			ticketViewModel.setCreatedTimestamp(ticket.getCreateTimestamp());
1065
 
1066
			viewList.add(ticketViewModel);
1067
		}
1068
		return responseSender.ok(viewList);
1069
 
1070
	}
1071
 
1072
	@RequestMapping(value = "/viewRecentTickets", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1073
	@ApiImplicitParams({
1074
 
1075
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1076
	public ResponseEntity<?> viewRecentTickets(HttpServletRequest request, @RequestParam int fofoId)
1077
			throws ProfitMandiBusinessException {
1078
		List<TicketViewModel> viewList = ticketRepository.selectRecentClosedTicket(fofoId,
1079
				LocalDateTime.now().minusDays(20));
1080
 
1081
		return responseSender.ok(viewList);
1082
 
1083
	}
1084
 
1085
	@RequestMapping(value = "/createTicket", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1086
	@ApiImplicitParams({
1087
 
1088
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1089
	public ResponseEntity<?> createTicket(HttpServletRequest request) throws ProfitMandiBusinessException {
1090
		List<TicketCategory> ticketCategories = csService.getAllTicketCategotyFromSubCategory();
1091
		return responseSender.ok(ticketCategories);
1092
	}
1093
 
1094
	@RequestMapping(value = "/getSubCategoriesByCategoryId", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1095
	@ApiImplicitParams({
1096
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1097
 
1098
	public ResponseEntity<?> getSubCategoriesByCategoryId(HttpServletRequest request,
1099
			@RequestParam(name = "categoryId", defaultValue = "0") int categoryId, Model model) {
1100
		List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository.selectAll(categoryId);
1101
		LOGGER.info(ticketSubCategories);
1102
		return responseSender.ok(ticketSubCategories);
1103
	}
1104
 
1105
	@RequestMapping(value = "/createTicket", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1106
	@ApiImplicitParams({
1107
 
1108
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1109
	public ResponseEntity<?> createTicket(HttpServletRequest request, @RequestParam(name = "categoryId") int categoryId,
1110
			@RequestParam(name = "subCategoryId") int subCategoryId, @RequestParam(name = "message") String message,
1111
			@RequestParam(name = "fofoId") int fofoId) throws Exception {
1112
		List<Ticket> tickets = ticketRepository.selectAllResolvedMarkedTicketByCreator(fofoId);
1113
		if (tickets.size() > 3 || tickets.size() == 3) {
1114
			return responseSender.ok(false);
1115
		} else {
1116
			csService.createTicket(fofoId, categoryId, subCategoryId, message);
1117
 
1118
		}
1119
		return responseSender.ok(true);
1120
	}
1121
 
1122
	@RequestMapping(value = "/getCollectionRemark", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1123
	@ApiImplicitParams({
1124
 
1125
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1126
	public ResponseEntity<?> getCollectionRemark(HttpServletRequest request) throws ProfitMandiBusinessException {
1127
 
1128
		return responseSender.ok(CollectionRemark.values());
1129
	}
1130
 
1131
	@RequestMapping(value = "/createPartnerColectionRemark", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1132
	@ApiImplicitParams({
1133
 
1134
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1135
	public ResponseEntity<?> createPartnerColectionRemark(HttpServletRequest request,
1136
			@RequestBody PartnerCollectionRemarkModel partnerCollectionRemarkModel)
1137
			throws ProfitMandiBusinessException {
1138
		AuthUser authUser = authRepository.selectByGmailId(partnerCollectionRemarkModel.getGmailId());
1139
 
1140
		PartnerCollectionRemark pcr = new PartnerCollectionRemark();
1141
		pcr.setFofoId(partnerCollectionRemarkModel.getFofoId());
1142
		pcr.setAuthId(authUser.getId());
1143
		pcr.setMessage(partnerCollectionRemarkModel.getMessage());
1144
		pcr.setRemark(partnerCollectionRemarkModel.getRemark());
1145
		pcr.setCreateTimestamp(LocalDateTime.now());
1146
		partnerCollectionRemarkRepository.persist(pcr);
1147
		return responseSender.ok(true);
1148
 
1149
	}
30077 tejbeer 1150
}