Subversion Repositories SmartDukaan

Rev

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