Subversion Repositories SmartDukaan

Rev

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