Subversion Repositories SmartDukaan

Rev

Rev 30332 | Rev 30334 | 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);
722
				} else {
723
 
724
					collectionModel.setRank(5);
725
					if (!collectionModel.getCreatedDate().toLocalDate().equals(LocalDate.now())) {
726
						collectionModel.setTargetPlan((long) 0);
727
					}
728
				}
729
 
730
			}
731
			LOGGER.info("updatedList {}", foundCollections);
30077 tejbeer 732
			Map<Integer, List<PartnerSecondaryPlanModel>> partnerSecondayPlans = orderRepository
30110 tejbeer 733
					.selectPartnerSecondaryGroupByBrand(fofoIdList, startDate.toLocalDate()).stream()
30077 tejbeer 734
					.collect(Collectors.groupingBy(x -> x.getFofoId()));
735
 
736
			LOGGER.info("partnerSecondayPlans {}", partnerSecondayPlans);
737
			for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailers.entrySet()) {
738
				int fofoId = customRetailerEntry.getKey();
739
				CustomRetailer customRetailer = customRetailerEntry.getValue();
740
				float totalSecondaryPlan = 0;
741
				float totalSecondaryAchivement = 0;
742
 
743
				PartnerTargetAchievementModel ptam = new PartnerTargetAchievementModel();
744
				ptam.setFofoId(fofoId);
745
				ptam.setBusinessName(customRetailer.getBusinessName());
746
 
30087 tejbeer 747
				if (partnerDailyInvestmentMap.get(fofoId) != null) {
748
					ptam.setWalletAmount(partnerDailyInvestmentMap.get(fofoId).getWalletAmount());
749
					ptam.setShortInvestment(partnerDailyInvestmentMap.get(fofoId).getShortInvestment());
750
				}
751
 
30330 tejbeer 752
				if (foundCollectionMap.get(fofoId) != null) {
753
					PartnerCollectionPlanModel collectionPlan = foundCollectionMap.get(fofoId);
754
					PartnerCollectionAchievementModel collectionAchievement = collectionAchievementMap.get(fofoId);
30137 tejbeer 755
 
30330 tejbeer 756
					ptam.setRank(collectionPlan.getRank());
30137 tejbeer 757
					Integer authId = collectionPlan.getAuthId();
30330 tejbeer 758
 
759
					if (collectionPlan.getRank() == 1) {
760
						ptam.setCollectionColor("#007bff");
761
					} else if (collectionPlan.getRank() == 2) {
762
						ptam.setCollectionColor("#ffc107");
763
					} else if (collectionPlan.getRank() == 3) {
764
						ptam.setCollectionColor("#dc3545");
765
					} else if (collectionPlan.getRank() == 4) {
766
						ptam.setCollectionColor("#6c757d");
767
					} else {
768
						ptam.setCollectionColor("White");
769
					}
770
 
30087 tejbeer 771
					LOGGER.info("authId" + authId);
30077 tejbeer 772
 
30330 tejbeer 773
					if (collectionPlan.getTargetPlan() != null && collectionPlan.getCommittedDate() != null) {
774
						float targetCollection = 0;
30137 tejbeer 775
 
30330 tejbeer 776
						if (collectionPlan.getRank() == 2) {
777
							targetCollection = collectionPlan.getTargetPlan() - collectionPlan.getAchievementPlan();
778
						} else {
779
							targetCollection = collectionPlan.getTargetPlan();
30087 tejbeer 780
						}
30330 tejbeer 781
 
782
						if (!collectionPlan.getCommittedDate().isAfter(startDate)) {
783
							totalPartnerTargetCollection += targetCollection;
30087 tejbeer 784
						}
30330 tejbeer 785
						ptam.setCollectionTarget(targetCollection);
786
					}
787
					if (collectionAchievement.getAmount() != null) {
788
						totalPartnerAchievementCollection += collectionAchievement.getAmount();
30087 tejbeer 789
 
30330 tejbeer 790
						ptam.setCollectionAchievement(collectionAchievement.getAmount());
30087 tejbeer 791
					}
792
 
793
					if (authId != null && authId != authUser.getId()) {
794
						ptam.setAuthUser(authRepository.selectById(authId));
795
 
796
					}
797
 
30137 tejbeer 798
					if (collectionPlan.getCommittedDate() != null) {
799
 
800
						ptam.setCollectionCommitmentDate(collectionPlan.getCommittedDate().toLocalDate());
801
					}
30077 tejbeer 802
				}
803
 
30330 tejbeer 804
				// Secondary
805
 
30077 tejbeer 806
				PartnerSecondaryPlanModel otherPartnerSecondaryPlanModel = null;
30087 tejbeer 807
				Map<String, PartnerSecondaryPlanModel> secondaryModelMap = new HashMap<>();
30077 tejbeer 808
				if (partnerSecondayPlans.get(fofoId) != null) {
809
					long otherBrandSecondary = 0;
810
					for (PartnerSecondaryPlanModel pspm : partnerSecondayPlans.get(fofoId)) {
30087 tejbeer 811
						Integer authId = pspm.getAuthId();
30077 tejbeer 812
						if (!brands.contains(pspm.getBrand())) {
30087 tejbeer 813
							if (pspm.getAchievementPlan() != null) {
814
								otherBrandSecondary += pspm.getAchievementPlan();
815
							}
30077 tejbeer 816
						} else {
817
							otherPartnerSecondaryPlanModel = pspm;
818
						}
30087 tejbeer 819
						if (pspm.getTargetPlan() != null) {
820
							totalSecondaryPlan += pspm.getTargetPlan();
821
						}
822
 
823
						if (pspm.getAchievementPlan() != null) {
824
							totalSecondaryAchivement += pspm.getAchievementPlan();
825
						}
30137 tejbeer 826
 
827
						if (pspm.getCommittedDate() != null) {
828
 
829
							ptam.setSecondaryCommitmentDate(pspm.getCommittedDate().toLocalDate());
830
						}
30087 tejbeer 831
						if (authId != null && authId == authUser.getId()) {
832
 
30137 tejbeer 833
							if (pspm.getTargetPlan() != null && pspm.getCommittedDate() != null) {
30087 tejbeer 834
 
30137 tejbeer 835
								if (pspm.getCommittedDate().isEqual(startDate)) {
836
									totalPartnerTargetSecondary += pspm.getTargetPlan();
837
								}
30087 tejbeer 838
							}
839
 
840
							if (pspm.getAchievementPlan() != null) {
841
								totalPartnerAchievementSecondary += pspm.getAchievementPlan();
842
							}
843
 
844
						}
30077 tejbeer 845
					}
846
					if (otherPartnerSecondaryPlanModel != null) {
847
						otherPartnerSecondaryPlanModel.setAchievementPlan(otherBrandSecondary);
848
					}
30087 tejbeer 849
					secondaryModelMap = partnerSecondayPlans.get(fofoId).stream()
30077 tejbeer 850
							.filter(x -> brands.contains(x.getBrand()))
851
							.collect(Collectors.toMap(x -> x.getBrand(), x -> x));
852
 
853
					if (secondaryModelMap.containsKey("Others")) {
854
						PartnerSecondaryPlanModel psp = secondaryModelMap.get("Others");
855
						psp.setAchievementPlan(otherBrandSecondary);
856
					} else {
30087 tejbeer 857
						secondaryModelMap.put("Others", new PartnerSecondaryPlanModel(fofoId, "Others", (long) 0,
30137 tejbeer 858
								otherBrandSecondary, authUser.getId(), null));
30077 tejbeer 859
					}
860
					for (String brand : brands) {
861
						if (!secondaryModelMap.containsKey(brand)) {
30137 tejbeer 862
							secondaryModelMap.put(brand, new PartnerSecondaryPlanModel(fofoId, brand, (long) 0,
863
									(long) 0, authUser.getId(), null));
30077 tejbeer 864
						}
865
					}
866
 
30087 tejbeer 867
					for (Entry<String, PartnerSecondaryPlanModel> secondaryModelEntry : secondaryModelMap.entrySet()) {
868
						Integer authId = secondaryModelEntry.getValue().getAuthId();
869
						if (authId != null && authId != authUser.getId()) {
870
							secondaryModelEntry.getValue().setAuthUser(authRepository.selectById(authId));
871
							ptam.setSecondaryColor("red");
872
						}
873
 
874
					}
875
 
30077 tejbeer 876
					ptam.setPartnerSecondaryModel(secondaryModelMap);
877
					ptam.setTotalSecondaryPlan(totalSecondaryPlan);
30087 tejbeer 878
					ptam.setTotalSecondaryAchievement(totalSecondaryAchivement);
30330 tejbeer 879
					// Secondary
30077 tejbeer 880
 
30087 tejbeer 881
				} else {
882
					for (String brand : brands) {
883
						PartnerSecondaryPlanModel pspm = new PartnerSecondaryPlanModel();
884
						pspm.setAchievementPlan((long) 0);
885
						pspm.setTargetPlan((long) 0);
886
						pspm.setBrand(brand);
887
						pspm.setFofoId(fofoId);
888
						secondaryModelMap.put(brand, pspm);
889
					}
890
					ptam.setPartnerSecondaryModel(secondaryModelMap);
30077 tejbeer 891
				}
892
 
30078 tejbeer 893
				ptams.add(ptam);
894
 
30077 tejbeer 895
			}
896
 
897
			tm.setTotalPartnerTargetCollection(totalPartnerTargetCollection);
898
			tm.setTotalPartnerTargetSecondary(totalPartnerTargetSecondary);
899
			tm.setTotalPartnerSecondary(totalPartnerAchievementSecondary);
900
			tm.setTotalPartnerCollection(totalPartnerAchievementCollection);
30330 tejbeer 901
			tm.setTodayCollectionCount(todayCollectionCount);
30077 tejbeer 902
 
30330 tejbeer 903
			tm.setTargetAchievement(ptams.stream().sorted(Comparator.comparing(PartnerTargetAchievementModel::getRank))
30087 tejbeer 904
					.collect(Collectors.toList()));
905
 
30077 tejbeer 906
		}
907
 
908
		return responseSender.ok(tm);
909
 
910
	}
911
 
912
	@RequestMapping(value = "/target", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
913
	@ApiImplicitParams({
30294 tejbeer 914
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
30077 tejbeer 915
	public ResponseEntity<?> createPartnerTarget(HttpServletRequest request,
30294 tejbeer 916
			@RequestBody PartnerTargetAchievementModel ptam) throws ProfitMandiBusinessException {
30077 tejbeer 917
 
30089 tejbeer 918
		LOGGER.info("ptam" + ptam);
919
 
30087 tejbeer 920
		AuthUser authUser = authRepository.selectByGmailId(ptam.getCreatedBy());
30077 tejbeer 921
 
30137 tejbeer 922
		if (ptam.getCollectionCommitmentDate().isAfter(LocalDate.now())
923
				|| ptam.getCollectionCommitmentDate().isEqual(LocalDate.now())) {
924
			PartnerCollectionPlan partnerCollectionPlan = partnerCollectionPlanRepository
925
					.selectByLocalDate(LocalDate.now(), ptam.getFofoId(), true);
926
			LOGGER.info("pcp" + partnerCollectionPlan);
30077 tejbeer 927
 
30137 tejbeer 928
			if (partnerCollectionPlan == null) {
929
				if (ptam.getCollectionTarget() > 0) {
30087 tejbeer 930
 
30137 tejbeer 931
					partnerCollectionPlan = new PartnerCollectionPlan();
932
					partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
933
					partnerCollectionPlan.setAuthId(authUser.getId());
934
					partnerCollectionPlan.setFofoId(ptam.getFofoId());
935
					partnerCollectionPlan.setActive(true);
936
					partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
937
					partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
938
					partnerCollectionPlan.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
939
					partnerCollectionPlanRepository.persist(partnerCollectionPlan);
940
				}
30087 tejbeer 941
 
30137 tejbeer 942
			} else {
30087 tejbeer 943
 
30137 tejbeer 944
				if (partnerCollectionPlan.getCollectionPlan() != ptam.getCollectionTarget()) {
945
					float totalCollectionPlan = partnerCollectionPlan.getCollectionPlan() + 10000;
946
					if (authUser.getId() == partnerCollectionPlan.getAuthId()) {
30087 tejbeer 947
 
30185 tejbeer 948
						if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
949
								|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
950
								|| ptam.getCollectionTarget() >= totalCollectionPlan) {
30137 tejbeer 951
							partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
952
							partnerCollectionPlan.setActive(true);
953
							partnerCollectionPlan
954
									.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
955
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
956
						} else {
957
							throw new ProfitMandiBusinessException("collection target", "",
958
									"collection target should be more than " + totalCollectionPlan);
959
						}
30087 tejbeer 960
 
961
					} else {
30137 tejbeer 962
 
30185 tejbeer 963
						if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
964
								|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
965
								|| ptam.getCollectionTarget() >= totalCollectionPlan) {
30137 tejbeer 966
 
967
							partnerCollectionPlan.setActive(false);
968
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
969
							partnerCollectionPlan = new PartnerCollectionPlan();
970
							partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
971
							partnerCollectionPlan.setAuthId(authUser.getId());
972
							partnerCollectionPlan.setFofoId(ptam.getFofoId());
973
							partnerCollectionPlan.setActive(true);
974
							partnerCollectionPlan
975
									.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
976
							partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
977
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
978
							partnerCollectionPlanRepository.persist(partnerCollectionPlan);
979
						} else {
980
							throw new ProfitMandiBusinessException("collection target", "",
981
									"collection target should be more than " + totalCollectionPlan);
982
						}
30087 tejbeer 983
					}
984
				}
30137 tejbeer 985
 
30146 tejbeer 986
				if ((LocalDate.now().atStartOfDay().equals(ptam.getCollectionCommitmentDate().atStartOfDay())
987
						|| ptam.getCollectionCommitmentDate().atStartOfDay().isAfter(LocalDate.now().atStartOfDay()))
30137 tejbeer 988
						&& partnerCollectionPlan.getCollectionPlan() == ptam.getCollectionTarget()) {
989
					partnerCollectionPlan.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
990
					partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
991
				}
30087 tejbeer 992
			}
30137 tejbeer 993
		} else {
994
			throw new ProfitMandiBusinessException("Date", "",
30138 tejbeer 995
					"you can't select the back date " + ptam.getCollectionCommitmentDate());
30077 tejbeer 996
		}
997
 
998
		for (Entry<String, PartnerSecondaryPlanModel> pspm : ptam.getPartnerSecondaryModel().entrySet()) {
30087 tejbeer 999
 
30137 tejbeer 1000
			if (ptam.getCollectionCommitmentDate().isAfter(LocalDate.now())
1001
					|| ptam.getCollectionCommitmentDate().isEqual(LocalDate.now())) {
1002
				PartnerSecondaryPlanModel plan = pspm.getValue();
1003
				PartnerSecondaryPlan psp = partnerSecondaryPlanRepository.selectByLocalDateBrand(plan.getBrand(),
1004
						LocalDate.now(), ptam.getFofoId(), true);
1005
				LOGGER.info("psp" + psp);
30087 tejbeer 1006
 
30137 tejbeer 1007
				if (psp == null) {
1008
					if (plan.getTargetPlan() > 0) {
30087 tejbeer 1009
 
30137 tejbeer 1010
						psp = new PartnerSecondaryPlan();
1011
						psp.setAuthId(authUser.getId());
1012
						psp.setBrand(pspm.getKey());
1013
						psp.setFofoId(pspm.getValue().getFofoId());
1014
						psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
1015
						psp.setCreateTimestamp(LocalDateTime.now());
1016
						psp.setUpdatedTimestamp(LocalDateTime.now());
1017
						psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1018
						psp.setActive(true);
1019
						partnerSecondaryPlanRepository.persist(psp);
1020
					}
30087 tejbeer 1021
 
30137 tejbeer 1022
				} else {
1023
					if (plan.getTargetPlan() != psp.getSecondaryPlan()) {
1024
						float totalSecondaryPlan = psp.getSecondaryPlan() + 10000;
1025
						if (authUser.getId() == plan.getAuthId()) {
30185 tejbeer 1026
							if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
1027
									|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
1028
									|| plan.getTargetPlan() >= totalSecondaryPlan) {
30137 tejbeer 1029
								psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
1030
								psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1031
								psp.setUpdatedTimestamp(LocalDateTime.now());
1032
								psp.setActive(true);
1033
							} else {
1034
								throw new ProfitMandiBusinessException("secondary target", "",
1035
										"secondary target should be more than " + totalSecondaryPlan);
1036
							}
30087 tejbeer 1037
 
30137 tejbeer 1038
						} else {
30087 tejbeer 1039
 
30185 tejbeer 1040
							if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
1041
									|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
1042
									|| plan.getTargetPlan() >= totalSecondaryPlan) {
30087 tejbeer 1043
 
30137 tejbeer 1044
								psp.setUpdatedTimestamp(LocalDateTime.now());
1045
								psp.setActive(false);
1046
								psp = new PartnerSecondaryPlan();
1047
								psp.setAuthId(authUser.getId());
1048
								psp.setBrand(pspm.getKey());
1049
								psp.setFofoId(pspm.getValue().getFofoId());
1050
								psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
1051
								psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1052
								psp.setCreateTimestamp(LocalDateTime.now());
1053
								psp.setUpdatedTimestamp(LocalDateTime.now());
1054
								psp.setActive(true);
1055
								partnerSecondaryPlanRepository.persist(psp);
1056
							} else {
1057
								throw new ProfitMandiBusinessException("secondary target", "",
1058
										"secondary target should be more than " + totalSecondaryPlan);
1059
							}
30087 tejbeer 1060
						}
1061
					}
30137 tejbeer 1062
 
30146 tejbeer 1063
					if ((LocalDate.now().atStartOfDay().equals(ptam.getSecondaryCommitmentDate().atStartOfDay())
1064
							|| ptam.getSecondaryCommitmentDate().atStartOfDay().isAfter(LocalDate.now().atStartOfDay()))
30137 tejbeer 1065
							&& plan.getTargetPlan() == psp.getSecondaryPlan()) {
1066
						psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1067
						psp.setUpdatedTimestamp(LocalDateTime.now());
1068
					}
1069
 
30087 tejbeer 1070
				}
30137 tejbeer 1071
			} else {
1072
				throw new ProfitMandiBusinessException("Date", "",
30138 tejbeer 1073
						"you can't select the back date " + ptam.getSecondaryCommitmentDate());
30077 tejbeer 1074
			}
30137 tejbeer 1075
 
30077 tejbeer 1076
		}
1077
 
1078
		return responseSender.ok(true);
30137 tejbeer 1079
 
30077 tejbeer 1080
	}
1081
 
1082
}