Subversion Repositories SmartDukaan

Rev

Rev 30294 | Rev 30330 | 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
 
622
			Map<Integer, PartnerCollectionPlanModel> collectionPlans = userWalletRepository
30137 tejbeer 623
					.getPartnerWiseTargetCollections(fofoIdList, startDate).stream()
30077 tejbeer 624
					.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
625
 
626
			LOGGER.info("collectionPlans {}", collectionPlans);
627
 
628
			Map<Integer, List<PartnerSecondaryPlanModel>> partnerSecondayPlans = orderRepository
30110 tejbeer 629
					.selectPartnerSecondaryGroupByBrand(fofoIdList, startDate.toLocalDate()).stream()
30077 tejbeer 630
					.collect(Collectors.groupingBy(x -> x.getFofoId()));
631
 
632
			LOGGER.info("partnerSecondayPlans {}", partnerSecondayPlans);
633
			for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailers.entrySet()) {
634
				int fofoId = customRetailerEntry.getKey();
635
				CustomRetailer customRetailer = customRetailerEntry.getValue();
636
				float totalSecondaryPlan = 0;
637
				float totalSecondaryAchivement = 0;
638
 
639
				PartnerTargetAchievementModel ptam = new PartnerTargetAchievementModel();
640
				ptam.setFofoId(fofoId);
641
				ptam.setBusinessName(customRetailer.getBusinessName());
642
 
30087 tejbeer 643
				if (partnerDailyInvestmentMap.get(fofoId) != null) {
644
					ptam.setWalletAmount(partnerDailyInvestmentMap.get(fofoId).getWalletAmount());
645
					ptam.setShortInvestment(partnerDailyInvestmentMap.get(fofoId).getShortInvestment());
646
				}
647
 
30077 tejbeer 648
				if (collectionPlans.get(fofoId) != null) {
30137 tejbeer 649
					PartnerCollectionPlanModel collectionPlan = collectionPlans.get(fofoId);
650
 
651
					Integer authId = collectionPlan.getAuthId();
30087 tejbeer 652
					LOGGER.info("authId" + authId);
653
					if (authId != null && authId == authUser.getId()) {
30077 tejbeer 654
 
30137 tejbeer 655
						if (collectionPlan.getTargetPlan() != null && collectionPlan.getCommittedDate() != null) {
656
 
657
							if (collectionPlan.getCommittedDate().isEqual(startDate)) {
658
								totalPartnerTargetCollection += collectionPlan.getTargetPlan();
659
							}
30087 tejbeer 660
						}
30137 tejbeer 661
						if (collectionPlan.getAchievementPlan() != null) {
662
							totalPartnerAchievementCollection += collectionPlan.getAchievementPlan();
30087 tejbeer 663
						}
664
 
665
					}
666
 
667
					if (authId != null && authId != authUser.getId()) {
668
						ptam.setAuthUser(authRepository.selectById(authId));
669
						ptam.setCollectionColor("red");
670
					}
671
					if (collectionPlans.get(fofoId).getTargetPlan() != null) {
672
 
30137 tejbeer 673
						ptam.setCollectionTarget(collectionPlan.getTargetPlan());
30087 tejbeer 674
					}
675
 
676
					if (collectionPlans.get(fofoId).getAchievementPlan() != null) {
30137 tejbeer 677
						ptam.setCollectionAchievement(collectionPlan.getAchievementPlan());
30087 tejbeer 678
					}
30137 tejbeer 679
 
680
					if (collectionPlan.getCommittedDate() != null) {
681
 
682
						ptam.setCollectionCommitmentDate(collectionPlan.getCommittedDate().toLocalDate());
683
					}
30077 tejbeer 684
				}
685
 
686
				PartnerSecondaryPlanModel otherPartnerSecondaryPlanModel = null;
30087 tejbeer 687
				Map<String, PartnerSecondaryPlanModel> secondaryModelMap = new HashMap<>();
30077 tejbeer 688
				if (partnerSecondayPlans.get(fofoId) != null) {
30087 tejbeer 689
 
30077 tejbeer 690
					long otherBrandSecondary = 0;
691
					for (PartnerSecondaryPlanModel pspm : partnerSecondayPlans.get(fofoId)) {
30087 tejbeer 692
						Integer authId = pspm.getAuthId();
30077 tejbeer 693
						if (!brands.contains(pspm.getBrand())) {
30087 tejbeer 694
							if (pspm.getAchievementPlan() != null) {
695
								otherBrandSecondary += pspm.getAchievementPlan();
696
							}
30077 tejbeer 697
						} else {
698
							otherPartnerSecondaryPlanModel = pspm;
699
						}
30087 tejbeer 700
 
701
						if (pspm.getTargetPlan() != null) {
702
							totalSecondaryPlan += pspm.getTargetPlan();
703
						}
704
 
705
						if (pspm.getAchievementPlan() != null) {
706
							totalSecondaryAchivement += pspm.getAchievementPlan();
707
						}
30137 tejbeer 708
 
709
						if (pspm.getCommittedDate() != null) {
710
 
711
							ptam.setSecondaryCommitmentDate(pspm.getCommittedDate().toLocalDate());
712
						}
30087 tejbeer 713
						if (authId != null && authId == authUser.getId()) {
714
 
30137 tejbeer 715
							if (pspm.getTargetPlan() != null && pspm.getCommittedDate() != null) {
30087 tejbeer 716
 
30137 tejbeer 717
								if (pspm.getCommittedDate().isEqual(startDate)) {
718
									totalPartnerTargetSecondary += pspm.getTargetPlan();
719
								}
30087 tejbeer 720
							}
721
 
722
							if (pspm.getAchievementPlan() != null) {
723
								totalPartnerAchievementSecondary += pspm.getAchievementPlan();
724
							}
725
 
726
						}
30077 tejbeer 727
					}
728
					if (otherPartnerSecondaryPlanModel != null) {
729
						otherPartnerSecondaryPlanModel.setAchievementPlan(otherBrandSecondary);
730
					}
30087 tejbeer 731
					secondaryModelMap = partnerSecondayPlans.get(fofoId).stream()
30077 tejbeer 732
							.filter(x -> brands.contains(x.getBrand()))
733
							.collect(Collectors.toMap(x -> x.getBrand(), x -> x));
734
 
735
					if (secondaryModelMap.containsKey("Others")) {
736
						PartnerSecondaryPlanModel psp = secondaryModelMap.get("Others");
737
						psp.setAchievementPlan(otherBrandSecondary);
738
					} else {
30087 tejbeer 739
						secondaryModelMap.put("Others", new PartnerSecondaryPlanModel(fofoId, "Others", (long) 0,
30137 tejbeer 740
								otherBrandSecondary, authUser.getId(), null));
30077 tejbeer 741
					}
742
					for (String brand : brands) {
743
						if (!secondaryModelMap.containsKey(brand)) {
30137 tejbeer 744
							secondaryModelMap.put(brand, new PartnerSecondaryPlanModel(fofoId, brand, (long) 0,
745
									(long) 0, authUser.getId(), null));
30077 tejbeer 746
						}
747
					}
748
 
30087 tejbeer 749
					for (Entry<String, PartnerSecondaryPlanModel> secondaryModelEntry : secondaryModelMap.entrySet()) {
750
						Integer authId = secondaryModelEntry.getValue().getAuthId();
751
						if (authId != null && authId != authUser.getId()) {
752
							secondaryModelEntry.getValue().setAuthUser(authRepository.selectById(authId));
753
							ptam.setSecondaryColor("red");
754
						}
755
 
756
					}
757
 
30077 tejbeer 758
					ptam.setPartnerSecondaryModel(secondaryModelMap);
759
					ptam.setTotalSecondaryPlan(totalSecondaryPlan);
30087 tejbeer 760
					ptam.setTotalSecondaryAchievement(totalSecondaryAchivement);
30077 tejbeer 761
 
30087 tejbeer 762
				} else {
763
					for (String brand : brands) {
764
						PartnerSecondaryPlanModel pspm = new PartnerSecondaryPlanModel();
765
						pspm.setAchievementPlan((long) 0);
766
						pspm.setTargetPlan((long) 0);
767
						pspm.setBrand(brand);
768
						pspm.setFofoId(fofoId);
769
						secondaryModelMap.put(brand, pspm);
770
					}
771
					ptam.setPartnerSecondaryModel(secondaryModelMap);
30077 tejbeer 772
				}
773
 
30078 tejbeer 774
				ptams.add(ptam);
775
 
30077 tejbeer 776
			}
777
 
778
			tm.setTotalPartnerTargetCollection(totalPartnerTargetCollection);
779
			tm.setTotalPartnerTargetSecondary(totalPartnerTargetSecondary);
780
			tm.setTotalPartnerSecondary(totalPartnerAchievementSecondary);
781
			tm.setTotalPartnerCollection(totalPartnerAchievementCollection);
782
 
30087 tejbeer 783
			tm.setTargetAchievement(ptams.stream()
784
					.sorted(Comparator.comparing(PartnerTargetAchievementModel::getShortInvestment).reversed())
785
					.collect(Collectors.toList()));
786
 
30077 tejbeer 787
		}
788
 
789
		return responseSender.ok(tm);
790
 
791
	}
792
 
793
	@RequestMapping(value = "/target", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
794
	@ApiImplicitParams({
30294 tejbeer 795
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
30077 tejbeer 796
	public ResponseEntity<?> createPartnerTarget(HttpServletRequest request,
30294 tejbeer 797
			@RequestBody PartnerTargetAchievementModel ptam) throws ProfitMandiBusinessException {
30077 tejbeer 798
 
30089 tejbeer 799
		LOGGER.info("ptam" + ptam);
800
 
30087 tejbeer 801
		AuthUser authUser = authRepository.selectByGmailId(ptam.getCreatedBy());
30077 tejbeer 802
 
30137 tejbeer 803
		if (ptam.getCollectionCommitmentDate().isAfter(LocalDate.now())
804
				|| ptam.getCollectionCommitmentDate().isEqual(LocalDate.now())) {
805
			PartnerCollectionPlan partnerCollectionPlan = partnerCollectionPlanRepository
806
					.selectByLocalDate(LocalDate.now(), ptam.getFofoId(), true);
807
			LOGGER.info("pcp" + partnerCollectionPlan);
30077 tejbeer 808
 
30137 tejbeer 809
			if (partnerCollectionPlan == null) {
810
				if (ptam.getCollectionTarget() > 0) {
30087 tejbeer 811
 
30137 tejbeer 812
					partnerCollectionPlan = new PartnerCollectionPlan();
813
					partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
814
					partnerCollectionPlan.setAuthId(authUser.getId());
815
					partnerCollectionPlan.setFofoId(ptam.getFofoId());
816
					partnerCollectionPlan.setActive(true);
817
					partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
818
					partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
819
					partnerCollectionPlan.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
820
					partnerCollectionPlanRepository.persist(partnerCollectionPlan);
821
				}
30087 tejbeer 822
 
30137 tejbeer 823
			} else {
30087 tejbeer 824
 
30137 tejbeer 825
				if (partnerCollectionPlan.getCollectionPlan() != ptam.getCollectionTarget()) {
826
					float totalCollectionPlan = partnerCollectionPlan.getCollectionPlan() + 10000;
827
					if (authUser.getId() == partnerCollectionPlan.getAuthId()) {
30087 tejbeer 828
 
30185 tejbeer 829
						if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
830
								|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
831
								|| ptam.getCollectionTarget() >= totalCollectionPlan) {
30137 tejbeer 832
							partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
833
							partnerCollectionPlan.setActive(true);
834
							partnerCollectionPlan
835
									.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
836
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
837
						} else {
838
							throw new ProfitMandiBusinessException("collection target", "",
839
									"collection target should be more than " + totalCollectionPlan);
840
						}
30087 tejbeer 841
 
842
					} else {
30137 tejbeer 843
 
30185 tejbeer 844
						if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
845
								|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
846
								|| ptam.getCollectionTarget() >= totalCollectionPlan) {
30137 tejbeer 847
 
848
							partnerCollectionPlan.setActive(false);
849
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
850
							partnerCollectionPlan = new PartnerCollectionPlan();
851
							partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
852
							partnerCollectionPlan.setAuthId(authUser.getId());
853
							partnerCollectionPlan.setFofoId(ptam.getFofoId());
854
							partnerCollectionPlan.setActive(true);
855
							partnerCollectionPlan
856
									.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
857
							partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
858
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
859
							partnerCollectionPlanRepository.persist(partnerCollectionPlan);
860
						} else {
861
							throw new ProfitMandiBusinessException("collection target", "",
862
									"collection target should be more than " + totalCollectionPlan);
863
						}
30087 tejbeer 864
					}
865
				}
30137 tejbeer 866
 
30146 tejbeer 867
				if ((LocalDate.now().atStartOfDay().equals(ptam.getCollectionCommitmentDate().atStartOfDay())
868
						|| ptam.getCollectionCommitmentDate().atStartOfDay().isAfter(LocalDate.now().atStartOfDay()))
30137 tejbeer 869
						&& partnerCollectionPlan.getCollectionPlan() == ptam.getCollectionTarget()) {
870
					partnerCollectionPlan.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
871
					partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
872
				}
30087 tejbeer 873
			}
30137 tejbeer 874
		} else {
875
			throw new ProfitMandiBusinessException("Date", "",
30138 tejbeer 876
					"you can't select the back date " + ptam.getCollectionCommitmentDate());
30077 tejbeer 877
		}
878
 
879
		for (Entry<String, PartnerSecondaryPlanModel> pspm : ptam.getPartnerSecondaryModel().entrySet()) {
30087 tejbeer 880
 
30137 tejbeer 881
			if (ptam.getCollectionCommitmentDate().isAfter(LocalDate.now())
882
					|| ptam.getCollectionCommitmentDate().isEqual(LocalDate.now())) {
883
				PartnerSecondaryPlanModel plan = pspm.getValue();
884
				PartnerSecondaryPlan psp = partnerSecondaryPlanRepository.selectByLocalDateBrand(plan.getBrand(),
885
						LocalDate.now(), ptam.getFofoId(), true);
886
				LOGGER.info("psp" + psp);
30087 tejbeer 887
 
30137 tejbeer 888
				if (psp == null) {
889
					if (plan.getTargetPlan() > 0) {
30087 tejbeer 890
 
30137 tejbeer 891
						psp = new PartnerSecondaryPlan();
892
						psp.setAuthId(authUser.getId());
893
						psp.setBrand(pspm.getKey());
894
						psp.setFofoId(pspm.getValue().getFofoId());
895
						psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
896
						psp.setCreateTimestamp(LocalDateTime.now());
897
						psp.setUpdatedTimestamp(LocalDateTime.now());
898
						psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
899
						psp.setActive(true);
900
						partnerSecondaryPlanRepository.persist(psp);
901
					}
30087 tejbeer 902
 
30137 tejbeer 903
				} else {
904
					if (plan.getTargetPlan() != psp.getSecondaryPlan()) {
905
						float totalSecondaryPlan = psp.getSecondaryPlan() + 10000;
906
						if (authUser.getId() == plan.getAuthId()) {
30185 tejbeer 907
							if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
908
									|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
909
									|| plan.getTargetPlan() >= totalSecondaryPlan) {
30137 tejbeer 910
								psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
911
								psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
912
								psp.setUpdatedTimestamp(LocalDateTime.now());
913
								psp.setActive(true);
914
							} else {
915
								throw new ProfitMandiBusinessException("secondary target", "",
916
										"secondary target should be more than " + totalSecondaryPlan);
917
							}
30087 tejbeer 918
 
30137 tejbeer 919
						} else {
30087 tejbeer 920
 
30185 tejbeer 921
							if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
922
									|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
923
									|| plan.getTargetPlan() >= totalSecondaryPlan) {
30087 tejbeer 924
 
30137 tejbeer 925
								psp.setUpdatedTimestamp(LocalDateTime.now());
926
								psp.setActive(false);
927
								psp = new PartnerSecondaryPlan();
928
								psp.setAuthId(authUser.getId());
929
								psp.setBrand(pspm.getKey());
930
								psp.setFofoId(pspm.getValue().getFofoId());
931
								psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
932
								psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
933
								psp.setCreateTimestamp(LocalDateTime.now());
934
								psp.setUpdatedTimestamp(LocalDateTime.now());
935
								psp.setActive(true);
936
								partnerSecondaryPlanRepository.persist(psp);
937
							} else {
938
								throw new ProfitMandiBusinessException("secondary target", "",
939
										"secondary target should be more than " + totalSecondaryPlan);
940
							}
30087 tejbeer 941
						}
942
					}
30137 tejbeer 943
 
30146 tejbeer 944
					if ((LocalDate.now().atStartOfDay().equals(ptam.getSecondaryCommitmentDate().atStartOfDay())
945
							|| ptam.getSecondaryCommitmentDate().atStartOfDay().isAfter(LocalDate.now().atStartOfDay()))
30137 tejbeer 946
							&& plan.getTargetPlan() == psp.getSecondaryPlan()) {
947
						psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
948
						psp.setUpdatedTimestamp(LocalDateTime.now());
949
					}
950
 
30087 tejbeer 951
				}
30137 tejbeer 952
			} else {
953
				throw new ProfitMandiBusinessException("Date", "",
30138 tejbeer 954
						"you can't select the back date " + ptam.getSecondaryCommitmentDate());
30077 tejbeer 955
			}
30137 tejbeer 956
 
30077 tejbeer 957
		}
958
 
959
		return responseSender.ok(true);
30137 tejbeer 960
 
30077 tejbeer 961
	}
962
 
963
}