Subversion Repositories SmartDukaan

Rev

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