Subversion Repositories SmartDukaan

Rev

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