Subversion Repositories SmartDukaan

Rev

Rev 30348 | Rev 30426 | 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
 
30077 tejbeer 659
			Map<Integer, CustomRetailer> customRetailers = retailerService.getFofoRetailers(fofoIdList);
660
 
30330 tejbeer 661
			/*
662
			 * Map<Integer, PartnerCollectionPlanModel> collectionPlans =
663
			 * userWalletRepository .getPartnerWiseTargetCollections(fofoIdList,
664
			 * startDate).stream() .collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
665
			 */
666
 
667
			Map<Integer, PartnerCollectionAchievementModel> collectionAchievementMap = userWalletRepository
668
					.getPartnerWiseCollectionAchievement(fofoIdList, startDate).stream()
30077 tejbeer 669
					.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
670
 
30330 tejbeer 671
			Map<Integer, PartnerCollectionPlan> todayTarget = partnerCollectionPlanRepository
672
					.selectByLocalDateAndFofoIds(startDate.toLocalDate(), fofoIdList, true).stream()
673
					.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
674
 
675
			int todayCollectionCount = todayTarget.size();
30348 tejbeer 676
			Map<Integer, PartnerCollectionPlanModel> foundCollectionMap = partnerCollectionService
677
					.getCollectionMap(fofoIdList, startDate);
30330 tejbeer 678
 
30077 tejbeer 679
			Map<Integer, List<PartnerSecondaryPlanModel>> partnerSecondayPlans = orderRepository
30110 tejbeer 680
					.selectPartnerSecondaryGroupByBrand(fofoIdList, startDate.toLocalDate()).stream()
30077 tejbeer 681
					.collect(Collectors.groupingBy(x -> x.getFofoId()));
682
 
683
			LOGGER.info("partnerSecondayPlans {}", partnerSecondayPlans);
684
			for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailers.entrySet()) {
685
				int fofoId = customRetailerEntry.getKey();
686
				CustomRetailer customRetailer = customRetailerEntry.getValue();
687
				float totalSecondaryPlan = 0;
688
				float totalSecondaryAchivement = 0;
689
 
690
				PartnerTargetAchievementModel ptam = new PartnerTargetAchievementModel();
691
				ptam.setFofoId(fofoId);
692
				ptam.setBusinessName(customRetailer.getBusinessName());
30416 tejbeer 693
				ptam.setMobile(customRetailer.getMobileNumber());
30077 tejbeer 694
 
30087 tejbeer 695
				if (partnerDailyInvestmentMap.get(fofoId) != null) {
696
					ptam.setWalletAmount(partnerDailyInvestmentMap.get(fofoId).getWalletAmount());
697
					ptam.setShortInvestment(partnerDailyInvestmentMap.get(fofoId).getShortInvestment());
698
				}
699
 
30330 tejbeer 700
				if (foundCollectionMap.get(fofoId) != null) {
701
					PartnerCollectionPlanModel collectionPlan = foundCollectionMap.get(fofoId);
702
					PartnerCollectionAchievementModel collectionAchievement = collectionAchievementMap.get(fofoId);
30416 tejbeer 703
					ptam.setRemark(collectionPlan.getRemark());
704
					ptam.setMessage(collectionPlan.getMessage());
705
					ptam.setRemarkTimestamp(collectionPlan.getRemarkTimestamp());
30330 tejbeer 706
					ptam.setRank(collectionPlan.getRank());
30137 tejbeer 707
					Integer authId = collectionPlan.getAuthId();
30330 tejbeer 708
 
30416 tejbeer 709
					Map<Integer, String> rankColorMap = ProfitMandiConstants.Rank_Color_Map;
30330 tejbeer 710
 
30416 tejbeer 711
					ptam.setCollectionColor(rankColorMap.get(collectionPlan.getRank()));
712
 
30087 tejbeer 713
					LOGGER.info("authId" + authId);
30077 tejbeer 714
 
30330 tejbeer 715
					if (collectionPlan.getTargetPlan() != null && collectionPlan.getCommittedDate() != null) {
716
						float targetCollection = 0;
30137 tejbeer 717
 
30330 tejbeer 718
						if (collectionPlan.getRank() == 2) {
719
							targetCollection = collectionPlan.getTargetPlan() - collectionPlan.getAchievementPlan();
720
						} else {
721
							targetCollection = collectionPlan.getTargetPlan();
30087 tejbeer 722
						}
30330 tejbeer 723
 
724
						if (!collectionPlan.getCommittedDate().isAfter(startDate)) {
725
							totalPartnerTargetCollection += targetCollection;
30087 tejbeer 726
						}
30330 tejbeer 727
						ptam.setCollectionTarget(targetCollection);
728
					}
729
					if (collectionAchievement.getAmount() != null) {
730
						totalPartnerAchievementCollection += collectionAchievement.getAmount();
30087 tejbeer 731
 
30330 tejbeer 732
						ptam.setCollectionAchievement(collectionAchievement.getAmount());
30087 tejbeer 733
					}
734
 
735
					if (authId != null && authId != authUser.getId()) {
736
						ptam.setAuthUser(authRepository.selectById(authId));
737
 
738
					}
739
 
30137 tejbeer 740
					if (collectionPlan.getCommittedDate() != null) {
741
 
742
						ptam.setCollectionCommitmentDate(collectionPlan.getCommittedDate().toLocalDate());
743
					}
30077 tejbeer 744
				}
745
 
30330 tejbeer 746
				// Secondary
747
 
30077 tejbeer 748
				PartnerSecondaryPlanModel otherPartnerSecondaryPlanModel = null;
30087 tejbeer 749
				Map<String, PartnerSecondaryPlanModel> secondaryModelMap = new HashMap<>();
30077 tejbeer 750
				if (partnerSecondayPlans.get(fofoId) != null) {
751
					long otherBrandSecondary = 0;
752
					for (PartnerSecondaryPlanModel pspm : partnerSecondayPlans.get(fofoId)) {
30087 tejbeer 753
						Integer authId = pspm.getAuthId();
30077 tejbeer 754
						if (!brands.contains(pspm.getBrand())) {
30087 tejbeer 755
							if (pspm.getAchievementPlan() != null) {
756
								otherBrandSecondary += pspm.getAchievementPlan();
757
							}
30077 tejbeer 758
						} else {
759
							otherPartnerSecondaryPlanModel = pspm;
760
						}
30087 tejbeer 761
						if (pspm.getTargetPlan() != null) {
762
							totalSecondaryPlan += pspm.getTargetPlan();
763
						}
764
 
765
						if (pspm.getAchievementPlan() != null) {
766
							totalSecondaryAchivement += pspm.getAchievementPlan();
767
						}
30137 tejbeer 768
 
769
						if (pspm.getCommittedDate() != null) {
770
 
771
							ptam.setSecondaryCommitmentDate(pspm.getCommittedDate().toLocalDate());
772
						}
30087 tejbeer 773
						if (authId != null && authId == authUser.getId()) {
774
 
30137 tejbeer 775
							if (pspm.getTargetPlan() != null && pspm.getCommittedDate() != null) {
30087 tejbeer 776
 
30137 tejbeer 777
								if (pspm.getCommittedDate().isEqual(startDate)) {
778
									totalPartnerTargetSecondary += pspm.getTargetPlan();
779
								}
30087 tejbeer 780
							}
781
 
782
							if (pspm.getAchievementPlan() != null) {
783
								totalPartnerAchievementSecondary += pspm.getAchievementPlan();
784
							}
785
 
786
						}
30077 tejbeer 787
					}
788
					if (otherPartnerSecondaryPlanModel != null) {
789
						otherPartnerSecondaryPlanModel.setAchievementPlan(otherBrandSecondary);
790
					}
30087 tejbeer 791
					secondaryModelMap = partnerSecondayPlans.get(fofoId).stream()
30077 tejbeer 792
							.filter(x -> brands.contains(x.getBrand()))
793
							.collect(Collectors.toMap(x -> x.getBrand(), x -> x));
794
 
795
					if (secondaryModelMap.containsKey("Others")) {
796
						PartnerSecondaryPlanModel psp = secondaryModelMap.get("Others");
797
						psp.setAchievementPlan(otherBrandSecondary);
798
					} else {
30087 tejbeer 799
						secondaryModelMap.put("Others", new PartnerSecondaryPlanModel(fofoId, "Others", (long) 0,
30137 tejbeer 800
								otherBrandSecondary, authUser.getId(), null));
30077 tejbeer 801
					}
802
					for (String brand : brands) {
803
						if (!secondaryModelMap.containsKey(brand)) {
30137 tejbeer 804
							secondaryModelMap.put(brand, new PartnerSecondaryPlanModel(fofoId, brand, (long) 0,
805
									(long) 0, authUser.getId(), null));
30077 tejbeer 806
						}
807
					}
808
 
30087 tejbeer 809
					for (Entry<String, PartnerSecondaryPlanModel> secondaryModelEntry : secondaryModelMap.entrySet()) {
810
						Integer authId = secondaryModelEntry.getValue().getAuthId();
811
						if (authId != null && authId != authUser.getId()) {
812
							secondaryModelEntry.getValue().setAuthUser(authRepository.selectById(authId));
813
							ptam.setSecondaryColor("red");
814
						}
815
 
816
					}
817
 
30077 tejbeer 818
					ptam.setPartnerSecondaryModel(secondaryModelMap);
819
					ptam.setTotalSecondaryPlan(totalSecondaryPlan);
30087 tejbeer 820
					ptam.setTotalSecondaryAchievement(totalSecondaryAchivement);
30330 tejbeer 821
					// Secondary
30077 tejbeer 822
 
30087 tejbeer 823
				} else {
824
					for (String brand : brands) {
825
						PartnerSecondaryPlanModel pspm = new PartnerSecondaryPlanModel();
826
						pspm.setAchievementPlan((long) 0);
827
						pspm.setTargetPlan((long) 0);
828
						pspm.setBrand(brand);
829
						pspm.setFofoId(fofoId);
830
						secondaryModelMap.put(brand, pspm);
831
					}
832
					ptam.setPartnerSecondaryModel(secondaryModelMap);
30077 tejbeer 833
				}
834
 
30416 tejbeer 835
				if (!partnerTicketCount.isEmpty()) {
836
					if (partnerTicketCount.get(fofoId) != null) {
837
						ptam.setTicketCount(partnerTicketCount.get(fofoId));
838
					} else {
839
						ptam.setTicketCount(0);
840
 
841
					}
842
				}
843
 
30078 tejbeer 844
				ptams.add(ptam);
845
 
30077 tejbeer 846
			}
847
 
848
			tm.setTotalPartnerTargetCollection(totalPartnerTargetCollection);
849
			tm.setTotalPartnerTargetSecondary(totalPartnerTargetSecondary);
850
			tm.setTotalPartnerSecondary(totalPartnerAchievementSecondary);
851
			tm.setTotalPartnerCollection(totalPartnerAchievementCollection);
30330 tejbeer 852
			tm.setTodayCollectionCount(todayCollectionCount);
30077 tejbeer 853
 
30330 tejbeer 854
			tm.setTargetAchievement(ptams.stream().sorted(Comparator.comparing(PartnerTargetAchievementModel::getRank))
30087 tejbeer 855
					.collect(Collectors.toList()));
856
 
30077 tejbeer 857
		}
858
 
859
		return responseSender.ok(tm);
860
 
861
	}
862
 
863
	@RequestMapping(value = "/target", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
864
	@ApiImplicitParams({
30294 tejbeer 865
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
30077 tejbeer 866
	public ResponseEntity<?> createPartnerTarget(HttpServletRequest request,
30294 tejbeer 867
			@RequestBody PartnerTargetAchievementModel ptam) throws ProfitMandiBusinessException {
30077 tejbeer 868
 
30089 tejbeer 869
		LOGGER.info("ptam" + ptam);
870
 
30087 tejbeer 871
		AuthUser authUser = authRepository.selectByGmailId(ptam.getCreatedBy());
30077 tejbeer 872
 
30137 tejbeer 873
		if (ptam.getCollectionCommitmentDate().isAfter(LocalDate.now())
874
				|| ptam.getCollectionCommitmentDate().isEqual(LocalDate.now())) {
875
			PartnerCollectionPlan partnerCollectionPlan = partnerCollectionPlanRepository
876
					.selectByLocalDate(LocalDate.now(), ptam.getFofoId(), true);
877
			LOGGER.info("pcp" + partnerCollectionPlan);
30077 tejbeer 878
 
30137 tejbeer 879
			if (partnerCollectionPlan == null) {
880
				if (ptam.getCollectionTarget() > 0) {
30087 tejbeer 881
 
30137 tejbeer 882
					partnerCollectionPlan = new PartnerCollectionPlan();
883
					partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
884
					partnerCollectionPlan.setAuthId(authUser.getId());
885
					partnerCollectionPlan.setFofoId(ptam.getFofoId());
886
					partnerCollectionPlan.setActive(true);
887
					partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
888
					partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
889
					partnerCollectionPlan.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
890
					partnerCollectionPlanRepository.persist(partnerCollectionPlan);
30416 tejbeer 891
 
30137 tejbeer 892
				}
30087 tejbeer 893
 
30137 tejbeer 894
			} else {
30087 tejbeer 895
 
30137 tejbeer 896
				if (partnerCollectionPlan.getCollectionPlan() != ptam.getCollectionTarget()) {
897
					float totalCollectionPlan = partnerCollectionPlan.getCollectionPlan() + 10000;
898
					if (authUser.getId() == partnerCollectionPlan.getAuthId()) {
30087 tejbeer 899
 
30185 tejbeer 900
						if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
901
								|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
902
								|| ptam.getCollectionTarget() >= totalCollectionPlan) {
30137 tejbeer 903
							partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
904
							partnerCollectionPlan.setActive(true);
905
							partnerCollectionPlan
906
									.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
907
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
908
						} else {
909
							throw new ProfitMandiBusinessException("collection target", "",
910
									"collection target should be more than " + totalCollectionPlan);
911
						}
30087 tejbeer 912
 
913
					} else {
30137 tejbeer 914
 
30185 tejbeer 915
						if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
916
								|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
917
								|| ptam.getCollectionTarget() >= totalCollectionPlan) {
30137 tejbeer 918
 
919
							partnerCollectionPlan.setActive(false);
920
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
921
							partnerCollectionPlan = new PartnerCollectionPlan();
922
							partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
923
							partnerCollectionPlan.setAuthId(authUser.getId());
924
							partnerCollectionPlan.setFofoId(ptam.getFofoId());
925
							partnerCollectionPlan.setActive(true);
926
							partnerCollectionPlan
927
									.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
928
							partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
929
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
930
							partnerCollectionPlanRepository.persist(partnerCollectionPlan);
931
						} else {
932
							throw new ProfitMandiBusinessException("collection target", "",
933
									"collection target should be more than " + totalCollectionPlan);
934
						}
30087 tejbeer 935
					}
936
				}
30137 tejbeer 937
 
30146 tejbeer 938
				if ((LocalDate.now().atStartOfDay().equals(ptam.getCollectionCommitmentDate().atStartOfDay())
939
						|| ptam.getCollectionCommitmentDate().atStartOfDay().isAfter(LocalDate.now().atStartOfDay()))
30137 tejbeer 940
						&& partnerCollectionPlan.getCollectionPlan() == ptam.getCollectionTarget()) {
941
					partnerCollectionPlan.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
942
					partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
943
				}
30416 tejbeer 944
 
945
				PartnerCollectionRemark pcr = new PartnerCollectionRemark();
946
				pcr.setFofoId(ptam.getFofoId());
947
				pcr.setAuthId(authUser.getId());
948
				pcr.setMessage("Collection plan for" + ptam.getCollectionCommitmentDate());
949
				pcr.setRemark(CollectionRemark.COLLECTION_PLAN);
950
				pcr.setCreateTimestamp(LocalDateTime.now());
951
				partnerCollectionRemarkRepository.persist(pcr);
30087 tejbeer 952
			}
30137 tejbeer 953
		} else {
954
			throw new ProfitMandiBusinessException("Date", "",
30138 tejbeer 955
					"you can't select the back date " + ptam.getCollectionCommitmentDate());
30077 tejbeer 956
		}
957
 
958
		for (Entry<String, PartnerSecondaryPlanModel> pspm : ptam.getPartnerSecondaryModel().entrySet()) {
30087 tejbeer 959
 
30137 tejbeer 960
			if (ptam.getCollectionCommitmentDate().isAfter(LocalDate.now())
961
					|| ptam.getCollectionCommitmentDate().isEqual(LocalDate.now())) {
962
				PartnerSecondaryPlanModel plan = pspm.getValue();
963
				PartnerSecondaryPlan psp = partnerSecondaryPlanRepository.selectByLocalDateBrand(plan.getBrand(),
964
						LocalDate.now(), ptam.getFofoId(), true);
965
				LOGGER.info("psp" + psp);
30087 tejbeer 966
 
30137 tejbeer 967
				if (psp == null) {
30334 tejbeer 968
					if (plan.getTargetPlan() > 0 && plan.getTargetPlan() != null) {
30087 tejbeer 969
 
30137 tejbeer 970
						psp = new PartnerSecondaryPlan();
971
						psp.setAuthId(authUser.getId());
972
						psp.setBrand(pspm.getKey());
973
						psp.setFofoId(pspm.getValue().getFofoId());
974
						psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
975
						psp.setCreateTimestamp(LocalDateTime.now());
976
						psp.setUpdatedTimestamp(LocalDateTime.now());
977
						psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
978
						psp.setActive(true);
979
						partnerSecondaryPlanRepository.persist(psp);
980
					}
30087 tejbeer 981
 
30137 tejbeer 982
				} else {
983
					if (plan.getTargetPlan() != psp.getSecondaryPlan()) {
984
						float totalSecondaryPlan = psp.getSecondaryPlan() + 10000;
985
						if (authUser.getId() == plan.getAuthId()) {
30185 tejbeer 986
							if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
987
									|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
988
									|| plan.getTargetPlan() >= totalSecondaryPlan) {
30137 tejbeer 989
								psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
990
								psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
991
								psp.setUpdatedTimestamp(LocalDateTime.now());
992
								psp.setActive(true);
993
							} else {
994
								throw new ProfitMandiBusinessException("secondary target", "",
995
										"secondary target should be more than " + totalSecondaryPlan);
996
							}
30087 tejbeer 997
 
30137 tejbeer 998
						} else {
30087 tejbeer 999
 
30185 tejbeer 1000
							if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
1001
									|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
1002
									|| plan.getTargetPlan() >= totalSecondaryPlan) {
30087 tejbeer 1003
 
30137 tejbeer 1004
								psp.setUpdatedTimestamp(LocalDateTime.now());
1005
								psp.setActive(false);
1006
								psp = new PartnerSecondaryPlan();
1007
								psp.setAuthId(authUser.getId());
1008
								psp.setBrand(pspm.getKey());
1009
								psp.setFofoId(pspm.getValue().getFofoId());
1010
								psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
1011
								psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1012
								psp.setCreateTimestamp(LocalDateTime.now());
1013
								psp.setUpdatedTimestamp(LocalDateTime.now());
1014
								psp.setActive(true);
1015
								partnerSecondaryPlanRepository.persist(psp);
1016
							} else {
1017
								throw new ProfitMandiBusinessException("secondary target", "",
1018
										"secondary target should be more than " + totalSecondaryPlan);
1019
							}
30087 tejbeer 1020
						}
1021
					}
30137 tejbeer 1022
 
30146 tejbeer 1023
					if ((LocalDate.now().atStartOfDay().equals(ptam.getSecondaryCommitmentDate().atStartOfDay())
1024
							|| ptam.getSecondaryCommitmentDate().atStartOfDay().isAfter(LocalDate.now().atStartOfDay()))
30137 tejbeer 1025
							&& plan.getTargetPlan() == psp.getSecondaryPlan()) {
1026
						psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1027
						psp.setUpdatedTimestamp(LocalDateTime.now());
1028
					}
1029
 
30087 tejbeer 1030
				}
30137 tejbeer 1031
			} else {
1032
				throw new ProfitMandiBusinessException("Date", "",
30138 tejbeer 1033
						"you can't select the back date " + ptam.getSecondaryCommitmentDate());
30077 tejbeer 1034
			}
30137 tejbeer 1035
 
30077 tejbeer 1036
		}
1037
 
1038
		return responseSender.ok(true);
30137 tejbeer 1039
 
30077 tejbeer 1040
	}
1041
 
30416 tejbeer 1042
	@RequestMapping(value = "/viewTickets", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1043
	@ApiImplicitParams({
1044
 
1045
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1046
	public ResponseEntity<?> viewTickets(HttpServletRequest request, @RequestParam int fofoId)
1047
			throws ProfitMandiBusinessException {
1048
		List<Ticket> tickets = ticketRepository.selectAllOpenTicketByRetailer(fofoId);
1049
 
1050
		List<TicketViewModel> viewList = new ArrayList<>();
1051
		for (Ticket ticket : tickets) {
1052
 
1053
			TicketViewModel ticketViewModel = new TicketViewModel();
1054
			ticketViewModel.setId(ticket.getId());
1055
			TicketSubCategory ticketSubCategory = ticketSubCategoryRepository.selectById(ticket.getSubCategoryId());
1056
			TicketCategory ticketCategory = ticketCategoryRepository.selectById(ticketSubCategory.getCategoryId());
1057
 
1058
			ticketViewModel.setCategoryName(ticketCategory.getName());
1059
			ticketViewModel.setSubCategoryName(ticketSubCategory.getName());
1060
			ticketViewModel.setCreatedTimestamp(ticket.getCreateTimestamp());
1061
 
1062
			viewList.add(ticketViewModel);
1063
		}
1064
		return responseSender.ok(viewList);
1065
 
1066
	}
1067
 
1068
	@RequestMapping(value = "/viewRecentTickets", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1069
	@ApiImplicitParams({
1070
 
1071
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1072
	public ResponseEntity<?> viewRecentTickets(HttpServletRequest request, @RequestParam int fofoId)
1073
			throws ProfitMandiBusinessException {
1074
		List<TicketViewModel> viewList = ticketRepository.selectRecentClosedTicket(fofoId,
1075
				LocalDateTime.now().minusDays(20));
1076
 
1077
		return responseSender.ok(viewList);
1078
 
1079
	}
1080
 
1081
	@RequestMapping(value = "/createTicket", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1082
	@ApiImplicitParams({
1083
 
1084
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1085
	public ResponseEntity<?> createTicket(HttpServletRequest request) throws ProfitMandiBusinessException {
1086
		List<TicketCategory> ticketCategories = csService.getAllTicketCategotyFromSubCategory();
1087
		return responseSender.ok(ticketCategories);
1088
	}
1089
 
1090
	@RequestMapping(value = "/getSubCategoriesByCategoryId", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1091
	@ApiImplicitParams({
1092
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1093
 
1094
	public ResponseEntity<?> getSubCategoriesByCategoryId(HttpServletRequest request,
1095
			@RequestParam(name = "categoryId", defaultValue = "0") int categoryId, Model model) {
1096
		List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository.selectAll(categoryId);
1097
		LOGGER.info(ticketSubCategories);
1098
		return responseSender.ok(ticketSubCategories);
1099
	}
1100
 
1101
	@RequestMapping(value = "/createTicket", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1102
	@ApiImplicitParams({
1103
 
1104
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1105
	public ResponseEntity<?> createTicket(HttpServletRequest request, @RequestParam(name = "categoryId") int categoryId,
1106
			@RequestParam(name = "subCategoryId") int subCategoryId, @RequestParam(name = "message") String message,
1107
			@RequestParam(name = "fofoId") int fofoId) throws Exception {
1108
		List<Ticket> tickets = ticketRepository.selectAllResolvedMarkedTicketByCreator(fofoId);
1109
		if (tickets.size() > 3 || tickets.size() == 3) {
1110
			return responseSender.ok(false);
1111
		} else {
1112
			csService.createTicket(fofoId, categoryId, subCategoryId, message);
1113
 
1114
		}
1115
		return responseSender.ok(true);
1116
	}
1117
 
1118
	@RequestMapping(value = "/getCollectionRemark", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1119
	@ApiImplicitParams({
1120
 
1121
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1122
	public ResponseEntity<?> getCollectionRemark(HttpServletRequest request) throws ProfitMandiBusinessException {
1123
 
1124
		return responseSender.ok(CollectionRemark.values());
1125
	}
1126
 
1127
	@RequestMapping(value = "/createPartnerColectionRemark", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1128
	@ApiImplicitParams({
1129
 
1130
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1131
	public ResponseEntity<?> createPartnerColectionRemark(HttpServletRequest request,
1132
			@RequestBody PartnerCollectionRemarkModel partnerCollectionRemarkModel)
1133
			throws ProfitMandiBusinessException {
1134
		AuthUser authUser = authRepository.selectByGmailId(partnerCollectionRemarkModel.getGmailId());
1135
 
1136
		PartnerCollectionRemark pcr = new PartnerCollectionRemark();
1137
		pcr.setFofoId(partnerCollectionRemarkModel.getFofoId());
1138
		pcr.setAuthId(authUser.getId());
1139
		pcr.setMessage(partnerCollectionRemarkModel.getMessage());
1140
		pcr.setRemark(partnerCollectionRemarkModel.getRemark());
1141
		pcr.setCreateTimestamp(LocalDateTime.now());
1142
		partnerCollectionRemarkRepository.persist(pcr);
1143
		return responseSender.ok(true);
1144
 
1145
	}
30077 tejbeer 1146
}