Subversion Repositories SmartDukaan

Rev

Rev 23993 | Rev 24089 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
22551 ashik.ali 1
package com.spice.profitmandi.web.controller;
2
 
23985 tejbeer 3
import java.text.MessageFormat;
22551 ashik.ali 4
import java.time.LocalDateTime;
5
import java.util.ArrayList;
6
import java.util.List;
23936 tejbeer 7
import java.util.Map;
22551 ashik.ali 8
 
23985 tejbeer 9
import javax.mail.internet.InternetAddress;
10
import javax.mail.internet.MimeMessage;
22551 ashik.ali 11
import javax.servlet.http.HttpServletRequest;
12
 
23985 tejbeer 13
import org.apache.logging.log4j.LogManager;
23568 govind 14
import org.apache.logging.log4j.Logger;
22551 ashik.ali 15
import org.springframework.beans.factory.annotation.Autowired;
23985 tejbeer 16
import org.springframework.mail.javamail.JavaMailSender;
17
import org.springframework.mail.javamail.MimeMessageHelper;
22551 ashik.ali 18
import org.springframework.stereotype.Controller;
19
import org.springframework.transaction.annotation.Transactional;
20
import org.springframework.ui.Model;
21
import org.springframework.web.bind.annotation.RequestMapping;
22
import org.springframework.web.bind.annotation.RequestMethod;
23
import org.springframework.web.bind.annotation.RequestParam;
24
 
25
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
23936 tejbeer 26
import com.spice.profitmandi.common.model.CustomRetailer;
22551 ashik.ali 27
import com.spice.profitmandi.common.model.ProfitMandiConstants;
28
import com.spice.profitmandi.common.util.StringUtils;
23936 tejbeer 29
import com.spice.profitmandi.dao.entity.transaction.AddWalletRequest;
22551 ashik.ali 30
import com.spice.profitmandi.dao.entity.transaction.UserWallet;
31
import com.spice.profitmandi.dao.entity.transaction.UserWalletHistory;
23936 tejbeer 32
import com.spice.profitmandi.dao.enumuration.transaction.AddWalletRequestStatus;
33
import com.spice.profitmandi.dao.repository.catalog.AddWalletRequestRepository;
23985 tejbeer 34
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
22551 ashik.ali 35
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
23936 tejbeer 36
import com.spice.profitmandi.service.user.RetailerService;
22551 ashik.ali 37
import com.spice.profitmandi.service.wallet.WalletService;
38
import com.spice.profitmandi.web.model.LoginDetails;
39
import com.spice.profitmandi.web.util.CookiesProcessor;
23936 tejbeer 40
import com.spice.profitmandi.web.util.MVCResponseSender;
22551 ashik.ali 41
 
23936 tejbeer 42
import in.shop2020.model.v1.order.WalletReferenceType;
43
 
22551 ashik.ali 44
@Controller
45
@Transactional(rollbackFor = Throwable.class)
46
public class WalletController {
47
 
48
	@Autowired
22927 ashik.ali 49
	private CookiesProcessor cookiesProcessor;
23993 tejbeer 50
 
22551 ashik.ali 51
	@Autowired
22927 ashik.ali 52
	private WalletService walletService;
23993 tejbeer 53
 
22551 ashik.ali 54
	@Autowired
22927 ashik.ali 55
	private UserWalletRepository userWalletRepository;
23993 tejbeer 56
 
23936 tejbeer 57
	@Autowired
58
	private MVCResponseSender mvcResponseSender;
23993 tejbeer 59
 
23936 tejbeer 60
	@Autowired
23985 tejbeer 61
	private UserAccountRepository userAccountRepository;
62
 
63
	@Autowired
64
	JavaMailSender mailSender;
23993 tejbeer 65
 
23985 tejbeer 66
	@Autowired
23936 tejbeer 67
	private RetailerService retailerService;
68
 
69
	@Autowired
70
	AddWalletRequestRepository addWalletRequestRepository;
23568 govind 71
	private static final Logger LOGGER = LogManager.getLogger(WalletController.class);
23993 tejbeer 72
 
22551 ashik.ali 73
	@RequestMapping(value = "/walletDetails", method = RequestMethod.GET)
23993 tejbeer 74
	public String dashboard(HttpServletRequest request,
75
			@RequestParam(name = ProfitMandiConstants.START_TIME, required = false) String startTimeString,
76
			@RequestParam(name = ProfitMandiConstants.END_TIME, required = false) String endTimeString,
77
			@RequestParam(name = "offset", defaultValue = "0") int offset,
78
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
79
			throws ProfitMandiBusinessException {
22927 ashik.ali 80
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
23993 tejbeer 81
 
22551 ashik.ali 82
		UserWallet userWallet = null;
23993 tejbeer 83
		try {
22551 ashik.ali 84
			userWallet = userWalletRepository.selectByRetailerId(fofoDetails.getFofoId());
23993 tejbeer 85
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
22551 ashik.ali 86
			LOGGER.error("UserWallet not found : ", profitMandiBusinessException);
23993 tejbeer 87
			// return "error";
22551 ashik.ali 88
		}
23993 tejbeer 89
 
22551 ashik.ali 90
		LocalDateTime startDateTime = StringUtils.toDateTime(startTimeString);
91
		LocalDateTime endDateTime = StringUtils.toDateTime(endTimeString);
23993 tejbeer 92
 
22551 ashik.ali 93
		List<UserWalletHistory> userWalletHistories = new ArrayList<>();
23993 tejbeer 94
		try {
95
			userWalletHistories = walletService.getPaginatedUserWalletHistoryByRetailerId(fofoDetails.getFofoId(),
96
					startDateTime, endDateTime, offset, limit);
97
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
22551 ashik.ali 98
			LOGGER.error("UserWallet History not found : ", profitMandiBusinessException);
99
		}
23993 tejbeer 100
 
22551 ashik.ali 101
		long countItems = 0;
23993 tejbeer 102
		try {
22551 ashik.ali 103
			countItems = walletService.getSizeByRetailerId(fofoDetails.getFofoId(), startDateTime, endDateTime);
23993 tejbeer 104
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
105
			LOGGER.error("UserWallet not found : ", profitMandiBusinessException);
22551 ashik.ali 106
		}
107
		model.addAttribute("userWallet", userWallet);
108
		model.addAttribute("walletHistories", userWalletHistories);
109
		model.addAttribute("start", offset + 1);
23993 tejbeer 110
		model.addAttribute("size", countItems);
22551 ashik.ali 111
		model.addAttribute(ProfitMandiConstants.START_TIME, startTimeString);
112
		model.addAttribute(ProfitMandiConstants.END_TIME, endTimeString);
23993 tejbeer 113
		if (userWalletHistories.size() < limit) {
22551 ashik.ali 114
			model.addAttribute("end", offset + userWalletHistories.size());
23993 tejbeer 115
		} else {
22551 ashik.ali 116
			model.addAttribute("end", offset + limit);
117
		}
118
		return "wallet-details";
119
	}
23993 tejbeer 120
 
22551 ashik.ali 121
	@RequestMapping(value = "/getPaginatedWalletHistory")
23993 tejbeer 122
	public String getSaleHistoryPaginated(HttpServletRequest request,
123
			@RequestParam(name = ProfitMandiConstants.START_TIME, required = false) String startTimeString,
124
			@RequestParam(name = ProfitMandiConstants.END_TIME, required = false) String endTimeString,
125
			@RequestParam(name = "offset", defaultValue = "0") int offset,
126
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
127
			throws ProfitMandiBusinessException {
22927 ashik.ali 128
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
23993 tejbeer 129
 
22551 ashik.ali 130
		LocalDateTime startDateTime = StringUtils.toDateTime(startTimeString);
131
		LocalDateTime endDateTime = StringUtils.toDateTime(endTimeString);
132
 
133
		List<UserWalletHistory> userWalletHistories = new ArrayList<>();
23993 tejbeer 134
		try {
135
			userWalletHistories = walletService.getPaginatedUserWalletHistoryByRetailerId(loginDetails.getFofoId(),
136
					startDateTime, endDateTime, offset, limit);
137
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
22551 ashik.ali 138
			LOGGER.error("UserWallet History not found : ", profitMandiBusinessException);
139
		}
23993 tejbeer 140
 
22551 ashik.ali 141
		model.addAttribute("walletHistories", userWalletHistories);
142
		return "wallet-history-paginated";
143
	}
23993 tejbeer 144
 
23936 tejbeer 145
	@RequestMapping(value = "/getAddWalletRequest", method = RequestMethod.GET)
146
	public String getAddwalletRequest(HttpServletRequest request,
147
			@RequestParam(name = "offset", defaultValue = "0") int offset,
23993 tejbeer 148
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
23936 tejbeer 149
		List<AddWalletRequest> walletRequest = null;
150
		long size = 0;
23993 tejbeer 151
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.pending);
152
		LOGGER.info("walletRequest" + walletRequest);
23936 tejbeer 153
		size = addWalletRequestRepository.selectCountByStatus(AddWalletRequestStatus.pending);
23993 tejbeer 154
		if (!walletRequest.isEmpty()) {
155
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
156
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23936 tejbeer 157
 
23993 tejbeer 158
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
159
			model.addAttribute("walletRequest", walletRequest);
160
			model.addAttribute("rStatus", "pending");
161
			model.addAttribute("start", offset + 1);
162
			model.addAttribute("size", size);
163
			model.addAttribute("url", "/getPaginatedWalletRequest");
164
 
165
			if (walletRequest.size() < limit) {
166
				model.addAttribute("end", offset + walletRequest.size());
167
			} else {
168
				model.addAttribute("end", offset + limit);
169
			}
170
 
23936 tejbeer 171
		} else {
23993 tejbeer 172
 
173
			model.addAttribute("walletRequest", walletRequest);
174
			model.addAttribute("size", size);
175
 
23936 tejbeer 176
		}
177
		return "add-wallet-request";
178
	}
179
 
180
	@RequestMapping(value = "/getPaginatedWalletRequest", method = RequestMethod.GET)
181
	public String getPaginatedWalletRequest(HttpServletRequest request,
182
			@RequestParam(name = "offset", defaultValue = "0") int offset,
23993 tejbeer 183
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws Exception {
184
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
23936 tejbeer 185
		List<AddWalletRequest> walletRequest = null;
23993 tejbeer 186
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.pending);
23936 tejbeer 187
		LOGGER.info("walletRequest" + walletRequest);
23993 tejbeer 188
		if (!walletRequest.isEmpty()) {
189
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
190
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23936 tejbeer 191
 
23993 tejbeer 192
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
193
			model.addAttribute("walletRequest", walletRequest);
194
			model.addAttribute("rStatus", "pending");
195
			model.addAttribute("url", "/getPaginatedWalletRequest");
196
 
197
		} else {
198
			model.addAttribute("walletRequest", walletRequest);
199
 
200
		}
201
 
23936 tejbeer 202
		return "add-wallet-request-paginated";
203
	}
23993 tejbeer 204
 
23936 tejbeer 205
	@RequestMapping(value = "/getAddWalletApproved", method = RequestMethod.GET)
206
	public String getAddwalletRequestApproved(HttpServletRequest request,
207
			@RequestParam(name = "offset", defaultValue = "0") int offset,
208
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
209
			throws ProfitMandiBusinessException {
210
		List<AddWalletRequest> walletRequest = null;
23993 tejbeer 211
 
23936 tejbeer 212
		long size = 0;
23993 tejbeer 213
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.approved);
23936 tejbeer 214
		size = addWalletRequestRepository.selectCountByStatus(AddWalletRequestStatus.approved);
215
		LOGGER.info("walletRequest" + walletRequest);
23993 tejbeer 216
		if (!walletRequest.isEmpty()) {
217
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
218
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23936 tejbeer 219
 
23993 tejbeer 220
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
221
			model.addAttribute("walletRequest", walletRequest);
222
			model.addAttribute("start", offset + 1);
223
			model.addAttribute("size", size);
224
			model.addAttribute("url", "/getPaginatedWalletApproved");
225
 
226
			if (walletRequest.size() < limit) {
227
				model.addAttribute("end", offset + walletRequest.size());
228
			} else {
229
				model.addAttribute("end", offset + limit);
230
			}
23936 tejbeer 231
		} else {
23993 tejbeer 232
 
233
			model.addAttribute("walletRequest", walletRequest);
234
			model.addAttribute("size", size);
235
 
23936 tejbeer 236
		}
237
		return "add-wallet-request";
238
	}
239
 
240
	@RequestMapping(value = "/getPaginatedWalletApproved", method = RequestMethod.GET)
241
	public String getPaginatedWalletApproved(HttpServletRequest request,
242
			@RequestParam(name = "offset", defaultValue = "0") int offset,
243
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
244
			throws ProfitMandiBusinessException {
23993 tejbeer 245
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
23936 tejbeer 246
		List<AddWalletRequest> walletRequest = null;
247
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.approved);
248
		LOGGER.info("walletRequest" + walletRequest);
23993 tejbeer 249
		if (!walletRequest.isEmpty()) {
250
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
251
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23936 tejbeer 252
 
23993 tejbeer 253
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
254
			model.addAttribute("walletRequest", walletRequest);
255
			model.addAttribute("url", "/getPaginatedWalletApproved");
256
		} else {
257
			model.addAttribute("walletRequest", walletRequest);
258
 
259
		}
23936 tejbeer 260
		return "add-wallet-request-paginated";
261
	}
23993 tejbeer 262
 
23985 tejbeer 263
	@RequestMapping(value = "/getAddWalletRequestRejected", method = RequestMethod.GET)
264
	public String getAddwalletRequestRejected(HttpServletRequest request,
265
			@RequestParam(name = "offset", defaultValue = "0") int offset,
266
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
267
			throws ProfitMandiBusinessException {
268
		List<AddWalletRequest> walletRequest = null;
23993 tejbeer 269
 
23985 tejbeer 270
		long size = 0;
23993 tejbeer 271
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.rejected);
23985 tejbeer 272
		size = addWalletRequestRepository.selectCountByStatus(AddWalletRequestStatus.rejected);
273
		LOGGER.info("walletRequest" + walletRequest);
23993 tejbeer 274
		if (!walletRequest.isEmpty()) {
275
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
276
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23985 tejbeer 277
 
23993 tejbeer 278
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
279
			model.addAttribute("walletRequest", walletRequest);
280
			model.addAttribute("start", offset + 1);
281
			model.addAttribute("size", size);
282
			model.addAttribute("url", "/getPaginatedWalletRequestRejected");
283
 
284
			if (walletRequest.size() < limit) {
285
				model.addAttribute("end", offset + walletRequest.size());
286
			} else {
287
				model.addAttribute("end", offset + limit);
288
			}
23985 tejbeer 289
		} else {
23993 tejbeer 290
			model.addAttribute("walletRequest", walletRequest);
291
			model.addAttribute("size", size);
23985 tejbeer 292
		}
293
 
294
		return "add-wallet-request";
295
	}
23993 tejbeer 296
 
23985 tejbeer 297
	@RequestMapping(value = "/getPaginatedWalletRequestRejected", method = RequestMethod.GET)
298
	public String getPaginatedWalletRequestRejected(HttpServletRequest request,
299
			@RequestParam(name = "offset", defaultValue = "0") int offset,
300
			@RequestParam(name = "limit", defaultValue = "10") int limit, Model model)
301
			throws ProfitMandiBusinessException {
23993 tejbeer 302
		LOGGER.info("requested offset=[{}], limit = [{}]", offset, limit);
23985 tejbeer 303
		List<AddWalletRequest> walletRequest = null;
304
		walletRequest = addWalletRequestRepository.selectAllByStatus(offset, limit, AddWalletRequestStatus.rejected);
305
		LOGGER.info("walletRequest" + walletRequest);
23993 tejbeer 306
		if (!walletRequest.isEmpty()) {
307
			List<Integer> fofoIds = this.getFofoIdsFromWalletRequest(walletRequest);
308
			Map<Integer, CustomRetailer> fofoIdsAndRetailerName = retailerService.getFofoRetailers(fofoIds);
23985 tejbeer 309
 
23993 tejbeer 310
			model.addAttribute("fofoIdsAndRetailerName", fofoIdsAndRetailerName);
311
			model.addAttribute("walletRequest", walletRequest);
312
			model.addAttribute("url", "/getPaginatedWalletRequestRejected");
313
		} else {
314
			model.addAttribute("walletRequest", walletRequest);
315
 
316
		}
317
 
23985 tejbeer 318
		return "add-wallet-request-paginated";
319
	}
23993 tejbeer 320
 
23936 tejbeer 321
	@RequestMapping(value = "/addAmountToWallet", method = RequestMethod.PUT)
23993 tejbeer 322
	public String addAmountToWallet(HttpServletRequest request, @RequestParam(name = "id", defaultValue = "0") int id,
323
			Model model) throws Exception {
324
 
325
		AddWalletRequest addWalletRequest = addWalletRequestRepository.selectById(id);
326
		if (addWalletRequest.getStatus().equals(AddWalletRequestStatus.pending)) {
327
			walletService.addAmountToWallet(addWalletRequest.getRetailerId(), id, WalletReferenceType.ADVANCE_AMOUNT,
328
					"ntfs/rgfs", addWalletRequest.getAmount());
329
			addWalletRequest.setStatus(AddWalletRequestStatus.approved);
330
			addWalletRequest.setUpdateTimestamp(LocalDateTime.now());
331
			addWalletRequestRepository.persist(addWalletRequest);
332
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
333
			CustomRetailer customRetailer = retailerService.getFofoRetailer(addWalletRequest.getRetailerId());
334
			String subject = "Request Approved for " + customRetailer.getBusinessName() + " of Rs."
335
					+ addWalletRequest.getAmount();
336
			String messageText = MessageFormat.format(
337
					"User Id - {0}\n Name -{1}\n Email -{2}\n mobile -{3}\n Reference - {4}\n Amount - Rs.{5}",
338
					new Integer(addWalletRequest.getRetailerId()), customRetailer.getBusinessName(),
339
					customRetailer.getEmail(), customRetailer.getMobileNumber(),
340
					addWalletRequest.getTransaction_reference(), new Float(addWalletRequest.getAmount()));
341
 
342
			this.sendMailWithAttachments(subject, messageText);
343
			return "response";
344
		} else {
345
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
346
			return "response";
347
		}
23936 tejbeer 348
	}
23993 tejbeer 349
 
23985 tejbeer 350
	@RequestMapping(value = "/addAmountToWalletRequestRejected", method = RequestMethod.PUT)
23993 tejbeer 351
	public String addAmountToWalletRequestRejected(HttpServletRequest request,
352
			@RequestParam(name = "id", defaultValue = "0") int id, Model model) throws Exception {
353
 
354
		AddWalletRequest addWalletRequest = addWalletRequestRepository.selectById(id);
355
		if (addWalletRequest.getStatus().equals(AddWalletRequestStatus.pending)) {
356
			addWalletRequest.setStatus(AddWalletRequestStatus.rejected);
357
			addWalletRequest.setUpdateTimestamp(LocalDateTime.now());
358
			addWalletRequestRepository.persist(addWalletRequest);
359
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
360
			CustomRetailer customRetailer = retailerService.getFofoRetailer(addWalletRequest.getRetailerId());
361
			String subject = "Request Rejected for " + customRetailer.getBusinessName() + " of Rs."
362
					+ addWalletRequest.getAmount();
363
			String messageText = MessageFormat.format(
364
					"User Id - {0}\n Name -{1}\n Email -{2}\n mobile -{3}\n Reference - {4}\n Amount - Rs.{5}",
365
					new Integer(addWalletRequest.getRetailerId()), customRetailer.getBusinessName(),
366
					customRetailer.getEmail(), customRetailer.getMobileNumber(),
367
					addWalletRequest.getTransaction_reference(), new Float(addWalletRequest.getAmount()));
368
 
369
			this.sendMailWithAttachments(subject, messageText);
370
			return "response";
371
		} else {
372
			model.addAttribute("response", mvcResponseSender.createResponseString(false));
373
			return "response";
374
		}
23985 tejbeer 375
	}
23993 tejbeer 376
 
23985 tejbeer 377
	private void sendMailWithAttachments(String subject, String messageText) throws Exception {
378
		MimeMessage message = mailSender.createMimeMessage();
379
		MimeMessageHelper helper = new MimeMessageHelper(message, true);
23996 tejbeer 380
		String[] email = { "neerajgupta2021@gmail.com","adeel.yazdani@smartdukaan.com", "kamini.sharma@smartdukaan.com", "care@smartdukaan.com",
23993 tejbeer 381
				"mohinder.mutreja@smartdukaan.com" };
23985 tejbeer 382
		helper.setSubject(subject);
383
		helper.setText(messageText);
384
		helper.setTo(email);
385
		InternetAddress senderAddress = new InternetAddress("noreply@smartdukaan.com", "ProfitMandi Admin");
386
		helper.setFrom(senderAddress);
387
		mailSender.send(message);
388
 
389
	}
23993 tejbeer 390
 
391
	private List<Integer> getFofoIdsFromWalletRequest(List<AddWalletRequest> walletRequest) {
23936 tejbeer 392
		List<Integer> fofoIds = new ArrayList<>();
23993 tejbeer 393
		for (AddWalletRequest walletdetail : walletRequest) {
23936 tejbeer 394
			fofoIds.add(walletdetail.getRetailerId());
395
		}
396
		return fofoIds;
23993 tejbeer 397
	}
23936 tejbeer 398
 
22551 ashik.ali 399
}