Subversion Repositories SmartDukaan

Rev

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