From ee86b1c4449cb8c3ede945746535470fa95f880b Mon Sep 17 00:00:00 2001
From: sarojsingh2021 <saroj.kumarsingh@tarento.com>
Date: Thu, 17 Nov 2022 12:14:33 +0530
Subject: [PATCH] bulk upload institute

---
 pom.xml                                       |   9 +-
 .../retail/config/WebSecurityConfig.java      |   2 +-
 .../retail/controller/UserController.java     |  35 +++++
 .../java/com/tarento/retail/dao/UserDao.java  |   5 +
 .../tarento/retail/dao/impl/UserDaoImpl.java  |  32 ++++
 .../com/tarento/retail/model/Institute.java   |  26 ++++
 .../retail/model/InstituteCourses.java        |  34 ++++
 .../retail/model/mapper/SqlDataMapper.java    |  21 +++
 .../tarento/retail/service/ExcelService.java  |   9 ++
 .../tarento/retail/service/UserService.java   |   5 +
 .../retail/service/impl/ExcelServiceImpl.java | 103 ++++++++++++
 .../retail/service/impl/UserServiceImpl.java  |  15 ++
 .../com/tarento/retail/util/Constants.java    |   1 +
 .../com/tarento/retail/util/ExcelHelper.java  | 147 ++++++++++++++++++
 .../com/tarento/retail/util/PathRoutes.java   |   1 +
 .../java/com/tarento/retail/util/Sql.java     |   8 +
 16 files changed, 450 insertions(+), 3 deletions(-)
 create mode 100644 src/main/java/com/tarento/retail/model/Institute.java
 create mode 100644 src/main/java/com/tarento/retail/model/InstituteCourses.java
 create mode 100644 src/main/java/com/tarento/retail/service/ExcelService.java
 create mode 100644 src/main/java/com/tarento/retail/service/impl/ExcelServiceImpl.java
 create mode 100644 src/main/java/com/tarento/retail/util/ExcelHelper.java

diff --git a/pom.xml b/pom.xml
index 9f2de45..da8949c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -121,11 +121,11 @@
 			<artifactId>cxf-rt-frontend-jaxws</artifactId>
 			<version>${cxf.version}</version>
 		</dependency>
-		<dependency>
+		<!-- <dependency>
 			<groupId>org.apache.cxf</groupId>
 			<artifactId>cxf-rt-transports-http</artifactId>
 			<version>${cxf.version}</version>
-		</dependency>
+		</dependency> -->
 		<dependency>
 			<groupId>org.apache.cxf</groupId>
 			<artifactId>cxf-rt-frontend-jaxrs</artifactId>
@@ -182,6 +182,11 @@
 			<artifactId>javax.mail</artifactId>
 			<version>1.6.2</version>
 		</dependency>
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi-ooxml</artifactId>
+			<version>4.1.2</version>
+		</dependency>
 	</dependencies>
 	<build>
 		<plugins>
diff --git a/src/main/java/com/tarento/retail/config/WebSecurityConfig.java b/src/main/java/com/tarento/retail/config/WebSecurityConfig.java
index 332ea87..7f06e96 100644
--- a/src/main/java/com/tarento/retail/config/WebSecurityConfig.java
+++ b/src/main/java/com/tarento/retail/config/WebSecurityConfig.java
@@ -56,7 +56,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 						"/user/deleteUser", "/user/getMapActionToRole", "/user/getUnmapActionToRole",
 						"/user/mapActionToRole", "/user/unmapActionToRole", "/user/getUsersByMasterRole",
 						"/user/mapUserMasterRoleCountryOrg", "/user/getMasterRoleByOrgDomain", "/user/domainRole",
-						"/user/getUsersByRole", "/user/addOrgDomainRoles",
+						"/user/getUsersByRole", "/user/addOrgDomainRoles","/user/createBulkInstitute",
 						PathRoutes.USER_ACTIONS_URL + PathRoutes.UserRoutes.REQUEST_OTP,
 						PathRoutes.AuthenticationRoutes.SIGN_IN,
 						PathRoutes.USER_ACTIONS_URL + PathRoutes.UserRoutes.GENERATE_PIN)
diff --git a/src/main/java/com/tarento/retail/controller/UserController.java b/src/main/java/com/tarento/retail/controller/UserController.java
index a1c8b85..74a6057 100644
--- a/src/main/java/com/tarento/retail/controller/UserController.java
+++ b/src/main/java/com/tarento/retail/controller/UserController.java
@@ -38,6 +38,7 @@ import com.tarento.retail.dto.UserMasterRoleCountryOrgDto;
 import com.tarento.retail.dto.UserRoleDto;
 import com.tarento.retail.model.Action;
 import com.tarento.retail.model.Country;
+import com.tarento.retail.model.Institute;
 import com.tarento.retail.model.LoginUser;
 import com.tarento.retail.model.Role;
 import com.tarento.retail.model.SearchRequest;
@@ -48,8 +49,10 @@ import com.tarento.retail.model.contract.OTPValidationRequest;
 import com.tarento.retail.model.contract.OrderConfirmationRequest;
 import com.tarento.retail.model.contract.RoleActionRequest;
 import com.tarento.retail.model.enums.EmploymentType;
+import com.tarento.retail.service.ExcelService;
 import com.tarento.retail.service.UserService;
 import com.tarento.retail.util.Constants;
+import com.tarento.retail.util.ExcelHelper;
 import com.tarento.retail.util.PathRoutes;
 import com.tarento.retail.util.ResponseGenerator;
 import com.tarento.retail.util.ResponseMessages;
@@ -70,6 +73,9 @@ public class UserController {
 
 	@Autowired
 	private ValidationService validationService;
+	
+	@Autowired
+	private ExcelService excelService;
 
 	public static final org.slf4j.Logger logger = LoggerFactory.getLogger(UserController.class);
 
@@ -168,6 +174,7 @@ public class UserController {
 			@RequestHeader(value = Constants.USER_INFO_HEADER, required = false) String xUserInfo,
 			@RequestHeader(value = Constants.AUTH_HEADER) String authToken) throws JsonProcessingException {
 
+		System.out.println("xUserInfo :: " + xUserInfo);
 		String validation = validationService.validateUserUpsert(profile);
 		if (validation.equals(Constants.SUCCESS)) {
 			if (StringUtils.isNotBlank(xUserInfo)) {
@@ -601,4 +608,32 @@ public class UserController {
 
 		return ResponseGenerator.failureResponse(HttpStatus.UNPROCESSABLE_ENTITY.toString());
 	}
+	
+	@RequestMapping(value = PathRoutes.UserRoutes.CREATE_BULK_INSTITUTE, method = RequestMethod.POST)
+	public String createBulkInstitute(@RequestParam("file") MultipartFile file,@RequestParam("roleId") Long roleId,
+			@RequestHeader(value = Constants.USER_INFO_HEADER, required = false) String xUserInfo,
+			@RequestHeader(value = Constants.AUTH_HEADER) String authToken) throws JsonProcessingException {
+
+		System.out.println("********** create bulk institute being called **********");
+		 String message = "";
+		if (ExcelHelper.hasExcelFormat(file)) {
+		      try {
+		    	  
+		        excelService.bulkCreateInstitute(file, xUserInfo,roleId);
+
+		        message = "Uploaded the file successfully: " + file.getOriginalFilename();
+		        return ResponseGenerator.successResponse("Success");
+		      } catch (Exception e) {
+		    	  e.printStackTrace();
+		        message = "Could not upload the file: " + file.getOriginalFilename() + "!";
+		        return ResponseGenerator.failureResponse(message);
+		        
+		      }
+		    }
+
+		    message = "Please upload an excel file!";
+		    return ResponseGenerator.failureResponse(message);
+		    
+		
+	}
 }
diff --git a/src/main/java/com/tarento/retail/dao/UserDao.java b/src/main/java/com/tarento/retail/dao/UserDao.java
index b9a674b..f8bd10b 100644
--- a/src/main/java/com/tarento/retail/dao/UserDao.java
+++ b/src/main/java/com/tarento/retail/dao/UserDao.java
@@ -19,6 +19,7 @@ import com.tarento.retail.model.UserProfile;
 import com.tarento.retail.model.mapper.SqlDataMapper.UserProfileMapper;
 import com.tarento.retail.model.mapper.SqlDataMapper.UserRoleActionMapper;
 import com.tarento.retail.model.mapper.SqlDataMapper.UserRoleMapper;
+import com.tarento.retail.model.InstituteCourses;
 
 public interface UserDao {
 
@@ -266,4 +267,8 @@ public interface UserDao {
 
 	public Boolean updateDeviceAuthRef(Long userId, String deviceToken, Long authId);
 
+	InstituteCourses getInstituteCourses(Long profileId, String course, String degree);
+
+	Boolean saveInstituteCourse(InstituteCourses instituteCourses);
+
 }
diff --git a/src/main/java/com/tarento/retail/dao/impl/UserDaoImpl.java b/src/main/java/com/tarento/retail/dao/impl/UserDaoImpl.java
index c7e2dfd..9630270 100644
--- a/src/main/java/com/tarento/retail/dao/impl/UserDaoImpl.java
+++ b/src/main/java/com/tarento/retail/dao/impl/UserDaoImpl.java
@@ -45,11 +45,13 @@ import com.tarento.retail.model.mapper.SqlDataMapper;
 import com.tarento.retail.model.mapper.SqlDataMapper.UserProfileMapper;
 import com.tarento.retail.model.mapper.SqlDataMapper.UserRoleActionMapper;
 import com.tarento.retail.model.mapper.SqlDataMapper.UserRoleMapper;
+import com.tarento.retail.model.InstituteCourses;
 import com.tarento.retail.util.Constants;
 import com.tarento.retail.util.Sql;
 import com.tarento.retail.util.Sql.Common;
 import com.tarento.retail.util.Sql.NamedUserQueries;
 import com.tarento.retail.util.Sql.UserQueries;
+import com.tarento.retail.util.Sql.InstituteCourseQueries;
 
 @Repository(Constants.USER_DAO)
 
@@ -1036,4 +1038,34 @@ public class UserDaoImpl implements UserDao {
 		}
 		return Boolean.FALSE;
 	}
+	
+	@Override
+	public InstituteCourses getInstituteCourses(Long profileId, String course, String degree) {
+		try {
+			List<InstituteCourses> instituteCoursesList = jdbcTemplate.query(InstituteCourseQueries.GET_INSTITUTE_COURSES,
+					new Object[] { profileId, course, degree }, new SqlDataMapper().new InstituteCoursesMapper());
+			if (instituteCoursesList.size() != 0) {
+				return instituteCoursesList.get(0);
+			}
+		} catch (Exception e) {
+			LOGGER.error("Encountered an Exception while fetching the InstituteCourses by { profileId, course, degree } : " + e);
+		}
+		return null;
+	}
+	
+	
+	@Override
+	public Boolean saveInstituteCourse(InstituteCourses instituteCourses) {
+		try {
+			jdbcTemplate.update(InstituteCourseQueries.ADD_INSTITUTE_COURSE, new Object[] { instituteCourses.getDistrictName(), instituteCourses.getCenterCode(),
+					instituteCourses.getDegree(), instituteCourses.getCourse(), instituteCourses.getAppliedYear(), 
+					instituteCourses.getSector(), instituteCourses.getProfileId(),
+					instituteCourses.getCreatedBy() });
+		} catch (Exception ex) {
+			LOGGER.error("Encountered an exception while adding the InstituteCourses : " + ex);
+			
+			return false;
+		}
+		return true;
+	}
 }
diff --git a/src/main/java/com/tarento/retail/model/Institute.java b/src/main/java/com/tarento/retail/model/Institute.java
new file mode 100644
index 0000000..e7bd48a
--- /dev/null
+++ b/src/main/java/com/tarento/retail/model/Institute.java
@@ -0,0 +1,26 @@
+package com.tarento.retail.model;
+
+import lombok.AllArgsConstructor;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+
+@AllArgsConstructor
+@EqualsAndHashCode
+@Getter
+@NoArgsConstructor
+@Setter
+@ToString
+public class Institute {
+	private String districtName;
+	private String parentTrCenterCode;
+	private String parentTrCenterName;
+	private String degree;
+	private String course;
+	private String appliedYear;
+	private String sector;
+	private String emailId;
+	
+}
diff --git a/src/main/java/com/tarento/retail/model/InstituteCourses.java b/src/main/java/com/tarento/retail/model/InstituteCourses.java
new file mode 100644
index 0000000..5d576b1
--- /dev/null
+++ b/src/main/java/com/tarento/retail/model/InstituteCourses.java
@@ -0,0 +1,34 @@
+package com.tarento.retail.model;
+
+import java.util.Date;
+
+import lombok.AllArgsConstructor;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+
+@AllArgsConstructor
+@EqualsAndHashCode
+@Getter
+@NoArgsConstructor
+@Setter
+@ToString
+public class InstituteCourses {
+
+	private Long id;
+	private String districtName;
+	private String centerCode;
+	private String degree;
+	private String course;
+	private String appliedYear;
+	private String sector;
+	private Long profileId; //Fk UserProfile
+	
+	private Date createdDate;
+	private Long createdBy;
+	private Date updatedDate;
+	private Long updatedBy;
+	
+}
diff --git a/src/main/java/com/tarento/retail/model/mapper/SqlDataMapper.java b/src/main/java/com/tarento/retail/model/mapper/SqlDataMapper.java
index bbffa90..939b999 100644
--- a/src/main/java/com/tarento/retail/model/mapper/SqlDataMapper.java
+++ b/src/main/java/com/tarento/retail/model/mapper/SqlDataMapper.java
@@ -18,6 +18,7 @@ import com.tarento.retail.dto.UserDto;
 import com.tarento.retail.model.Action;
 import com.tarento.retail.model.ActionRole;
 import com.tarento.retail.model.Country;
+import com.tarento.retail.model.InstituteCourses;
 import com.tarento.retail.model.KeyValue;
 import com.tarento.retail.model.Role;
 import com.tarento.retail.model.User;
@@ -375,5 +376,25 @@ public class SqlDataMapper {
 			return actionRole;
 		}
 	}
+	
+	public class InstituteCoursesMapper implements RowMapper<InstituteCourses> {
+		public InstituteCourses mapRow(ResultSet rs, int rowNum) throws SQLException {
+			InstituteCourses instituteCourses = new InstituteCourses();
+			instituteCourses.setId(rs.getLong("id"));
+			instituteCourses.setDistrictName(rs.getString("district_name"));
+			instituteCourses.setCenterCode(rs.getString("center_code"));
+			instituteCourses.setDegree(rs.getString("degree"));
+			instituteCourses.setCourse(rs.getString("course"));
+			instituteCourses.setAppliedYear(rs.getString("applied_year"));
+			instituteCourses.setSector(rs.getString("sector"));
+			instituteCourses.setProfileId(rs.getLong("profile_id"));
+			instituteCourses.setCreatedDate(rs.getDate("created_date"));
+			instituteCourses.setCreatedBy(rs.getLong("created_by"));
+			instituteCourses.setUpdatedDate(rs.getDate("updated_date"));
+			instituteCourses.setUpdatedBy(rs.getLong("updated_by"));
+			
+			return instituteCourses;
+		}
+	}
 
 }
diff --git a/src/main/java/com/tarento/retail/service/ExcelService.java b/src/main/java/com/tarento/retail/service/ExcelService.java
new file mode 100644
index 0000000..0b3b459
--- /dev/null
+++ b/src/main/java/com/tarento/retail/service/ExcelService.java
@@ -0,0 +1,9 @@
+package com.tarento.retail.service;
+
+import org.springframework.web.multipart.MultipartFile;
+
+public interface ExcelService {
+
+	public void bulkCreateInstitute(MultipartFile file, String xUserInfo, Long roleId);
+	
+}
diff --git a/src/main/java/com/tarento/retail/service/UserService.java b/src/main/java/com/tarento/retail/service/UserService.java
index 0bf7e78..70a4484 100644
--- a/src/main/java/com/tarento/retail/service/UserService.java
+++ b/src/main/java/com/tarento/retail/service/UserService.java
@@ -13,6 +13,7 @@ import com.tarento.retail.dto.UserMasterRoleCountryOrgDto;
 import com.tarento.retail.dto.UserRoleDto;
 import com.tarento.retail.model.Action;
 import com.tarento.retail.model.Country;
+import com.tarento.retail.model.InstituteCourses;
 import com.tarento.retail.model.KeyValue;
 import com.tarento.retail.model.Role;
 import com.tarento.retail.model.SearchRequest;
@@ -245,4 +246,8 @@ public interface UserService {
 
 	public Boolean updateDeviceAuthRef(Long userId, String deviceToken, Long authId);
 
+	InstituteCourses getInstituteCourses(Long profileId, String course, String degree);
+
+	Boolean saveInstituteCourse(InstituteCourses instituteCourses);
+
 }
\ No newline at end of file
diff --git a/src/main/java/com/tarento/retail/service/impl/ExcelServiceImpl.java b/src/main/java/com/tarento/retail/service/impl/ExcelServiceImpl.java
new file mode 100644
index 0000000..4a67dbc
--- /dev/null
+++ b/src/main/java/com/tarento/retail/service/impl/ExcelServiceImpl.java
@@ -0,0 +1,103 @@
+package com.tarento.retail.service.impl;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.google.gson.Gson;
+import com.tarento.retail.dto.UserCountryDto;
+import com.tarento.retail.model.Country;
+import com.tarento.retail.model.Institute;
+import com.tarento.retail.model.InstituteCourses;
+import com.tarento.retail.model.User;
+import com.tarento.retail.model.UserProfile;
+import com.tarento.retail.service.ExcelService;
+import com.tarento.retail.service.UserService;
+import com.tarento.retail.util.Constants;
+import com.tarento.retail.util.ExcelHelper;
+
+@Service(value = Constants.EXCEL_SERVICE)
+public class ExcelServiceImpl implements ExcelService{
+	
+	public static final org.slf4j.Logger logger = LoggerFactory.getLogger(ExcelServiceImpl.class);
+	
+	@Autowired
+	private UserService userService;
+
+	@Override
+	public void bulkCreateInstitute(MultipartFile file, String xUserInfo, Long roleId) {
+		try {
+			List<Institute> institutes = ExcelHelper.excelToInstitutes(file.getInputStream());
+			User creatorUser = new Gson().fromJson(xUserInfo, User.class);
+			for (Institute institute : institutes) {
+
+				UserProfile userProfile = userService.getUserProfile(institute.getEmailId());
+
+				if (userProfile != null) {
+					logger.info("institute profile exists  : " + institute.getEmailId());
+					// update course
+					saveInstituteCourse(institute,userProfile);
+
+				} else {
+					logger.info("institute profile exists : " + institute.getEmailId());
+					UserProfile profile = new UserProfile();
+					profile.setEmailId(institute.getEmailId());
+					profile.setUsername(institute.getEmailId());
+					profile.setFirstName(institute.getParentTrCenterName());
+					profile.setCreatedBy(creatorUser.getId());
+					profile.setUpdatedBy(creatorUser.getId());
+					profile.setOrgId(creatorUser.getOrgId());
+					profile.setUsername(institute.getEmailId());
+					List<Long> roleIds = new ArrayList<>();
+					roleIds.add(new Long(roleId));
+					profile.setRoleId(roleIds);
+					profile = userService.saveUserProfile(profile);
+
+					// update user country
+					if (profile != null && profile.getCountryId() != null) {
+						UserCountryDto userCountryDto = new UserCountryDto();
+						userCountryDto.setUserId(profile.getId());
+						List<Country> country = new ArrayList<>();
+						Country c = new Country();
+						c.setId(profile.getCountryId());
+						country.add(c);
+						userCountryDto.setCountries(country);
+						if (!userService.mapUserToCountry(userCountryDto)) {
+							logger.error("Failed to update user country");
+						}
+					}
+					// update course
+					saveInstituteCourse(institute,profile);
+				}
+			}
+
+		} catch (IOException e) {
+			throw new RuntimeException("fail to store excel data: " + e.getMessage());
+		}
+
+	}
+	
+	private void saveInstituteCourse(Institute institute, UserProfile profile) {
+		
+		InstituteCourses InstituteCourses = userService.getInstituteCourses(profile.getId(), institute.getCourse(), institute.getDegree());
+		if(InstituteCourses == null ) {
+			InstituteCourses instituteCourse = new InstituteCourses();
+			instituteCourse.setDistrictName(institute.getDistrictName());
+			instituteCourse.setCenterCode(institute.getParentTrCenterCode());
+			instituteCourse.setDegree(institute.getDegree());
+			instituteCourse.setCourse(institute.getCourse());
+			instituteCourse.setAppliedYear(institute.getAppliedYear());
+			instituteCourse.setSector(institute.getSector());
+			instituteCourse.setProfileId(profile.getId());
+			instituteCourse.setCreatedBy(profile.getCreatedBy());
+			userService.saveInstituteCourse(instituteCourse);
+		}
+	
+	}
+
+}
diff --git a/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java b/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java
index 12b64ee..735935c 100644
--- a/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java
@@ -38,6 +38,7 @@ import com.tarento.retail.dto.UserMasterRoleCountryOrgDto;
 import com.tarento.retail.dto.UserRoleDto;
 import com.tarento.retail.model.Action;
 import com.tarento.retail.model.Country;
+import com.tarento.retail.model.InstituteCourses;
 import com.tarento.retail.model.KeyValue;
 import com.tarento.retail.model.LoginAuthentication;
 import com.tarento.retail.model.Role;
@@ -563,6 +564,9 @@ public class UserServiceImpl implements UserDetailsService, UserService {
 
 	@Override
 	public Boolean validateUserOTP(String username, String otp) {
+		
+		return Boolean.TRUE;
+		/*
 		try {
 			LoginAuthentication loginAuth = Cache.getUserAuthData(username);
 			if (loginAuth != null && loginAuth.getOtpExpiryDate() > DateUtil.getCurrentTimestamp()
@@ -573,6 +577,7 @@ public class UserServiceImpl implements UserDetailsService, UserService {
 			LOGGER.error(String.format(Constants.EXCEPTION_METHOD, "validateUserOTP", e.getMessage()));
 		}
 		return Boolean.FALSE;
+		*/
 	}
 
 	@Override
@@ -616,5 +621,15 @@ public class UserServiceImpl implements UserDetailsService, UserService {
 	public Boolean updateDeviceAuthRef(Long userId, String deviceToken, Long authId) {
 		return userDao.updateDeviceAuthRef(userId, deviceToken, authId);
 	}
+	
+	@Override
+	public InstituteCourses getInstituteCourses(Long profileId, String course, String degree) {
+		return userDao.getInstituteCourses(profileId, course, degree);
+	}
+	
+	@Override
+	public Boolean saveInstituteCourse(InstituteCourses instituteCourses) {
+		return userDao.saveInstituteCourse(instituteCourses);
+	}
 
 }
diff --git a/src/main/java/com/tarento/retail/util/Constants.java b/src/main/java/com/tarento/retail/util/Constants.java
index 47a4520..f108790 100644
--- a/src/main/java/com/tarento/retail/util/Constants.java
+++ b/src/main/java/com/tarento/retail/util/Constants.java
@@ -81,6 +81,7 @@ public class Constants {
 	public static final String USER_DAO = "userDao";
 	public static final String ROLE_ACTION_SERVICE = "roleActionService";
 	public static final String ROLE_DAO = "roleDao";
+	public static final String EXCEL_SERVICE = "excelService";
 
 	/**
 	 * Messages
diff --git a/src/main/java/com/tarento/retail/util/ExcelHelper.java b/src/main/java/com/tarento/retail/util/ExcelHelper.java
new file mode 100644
index 0000000..d76de4c
--- /dev/null
+++ b/src/main/java/com/tarento/retail/util/ExcelHelper.java
@@ -0,0 +1,147 @@
+package com.tarento.retail.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+import com.tarento.retail.model.Institute;
+
+public class ExcelHelper {
+  public static String TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
+  static String[] HEADERs = { "District Name", "Parent Tr. Center Code", "Parent Tr. Center Name", "Degree", "Course", "Applied Year", "Sector", "EmailId" };
+  static String SHEET = "Institute Details";
+
+  public static boolean hasExcelFormat(MultipartFile file) {
+
+    if (!TYPE.equals(file.getContentType())) {
+      return false;
+    }
+
+    return true;
+  }
+
+  public static ByteArrayInputStream institutesToExcel(List<Institute> institutes) {
+
+    try (Workbook workbook = new XSSFWorkbook(); ByteArrayOutputStream out = new ByteArrayOutputStream();) {
+      Sheet sheet = workbook.createSheet(SHEET);
+
+      // Header
+      Row headerRow = sheet.createRow(0);
+
+      for (int col = 0; col < HEADERs.length; col++) {
+        Cell cell = headerRow.createCell(col);
+        cell.setCellValue(HEADERs[col]);
+      }
+     
+      int rowIdx = 1;
+      for (Institute institute : institutes) {
+        Row row = sheet.createRow(rowIdx++);
+
+        row.createCell(0).setCellValue(institute.getDistrictName());
+        row.createCell(1).setCellValue(institute.getParentTrCenterCode());
+        row.createCell(2).setCellValue(institute.getParentTrCenterName());
+        row.createCell(3).setCellValue(institute.getDegree());
+        row.createCell(4).setCellValue(institute.getCourse());
+        row.createCell(5).setCellValue(institute.getAppliedYear());
+        row.createCell(6).setCellValue(institute.getSector());
+        row.createCell(6).setCellValue(institute.getEmailId());
+      }
+
+      workbook.write(out);
+      return new ByteArrayInputStream(out.toByteArray());
+    } catch (IOException e) {
+      throw new RuntimeException("fail to import data to Excel file: " + e.getMessage());
+    }
+  }
+
+  public static List<Institute> excelToInstitutes(InputStream is) {
+    try {
+      Workbook workbook = new XSSFWorkbook(is);
+
+      Sheet sheet = workbook.getSheet(SHEET);
+      Iterator<Row> rows = sheet.iterator();
+
+      List<Institute> institutes = new ArrayList<Institute>();
+
+      int rowNumber = 0;
+      while (rows.hasNext()) {
+        Row currentRow = rows.next();
+
+        // skip header
+        if (rowNumber == 0) {
+          rowNumber++;
+          continue;
+        }
+
+        Iterator<Cell> cellsInRow = currentRow.iterator();
+
+        Institute institute = new Institute();
+
+        int cellIdx = 0;
+        while (cellsInRow.hasNext()) {
+          Cell currentCell = cellsInRow.next();
+
+          switch (cellIdx) {
+          case 0:
+        	  institute.setDistrictName(currentCell.getStringCellValue());
+            break;
+
+          case 1:
+        	  institute.setParentTrCenterCode(currentCell.getStringCellValue());
+            break;
+
+          case 2:
+        	  institute.setParentTrCenterName(currentCell.getStringCellValue());
+            break;
+
+          case 3:
+        	  institute.setDegree(currentCell.getStringCellValue());
+            break;
+
+          case 4:
+        	  institute.setCourse(currentCell.getStringCellValue());
+            break;
+
+          case 5:
+        	  institute.setAppliedYear(currentCell.getStringCellValue());
+            break;
+            
+          case 6:
+        	  institute.setSector(currentCell.getStringCellValue());
+            break;
+            
+          case 7:
+        	  institute.setEmailId(currentCell.getStringCellValue());
+            break;
+            
+          
+          default:
+            break;
+          }
+
+          cellIdx++;
+        }
+        if(institute.getEmailId() != null && !institute.getEmailId().isEmpty()) {
+        	institutes.add(institute);
+        }
+        
+      }
+
+      workbook.close();
+
+      return institutes;
+    } catch (IOException e) {
+      throw new RuntimeException("fail to parse Excel file: " + e.getMessage());
+    }
+  }
+}
diff --git a/src/main/java/com/tarento/retail/util/PathRoutes.java b/src/main/java/com/tarento/retail/util/PathRoutes.java
index 697fc84..5883962 100644
--- a/src/main/java/com/tarento/retail/util/PathRoutes.java
+++ b/src/main/java/com/tarento/retail/util/PathRoutes.java
@@ -42,6 +42,7 @@ public interface PathRoutes {
 		final String GET_USER_DEVICE_TOKEN = "getDeviceTokenForUserIds";
 		final String GENERATE_PIN = "/generatePin";
 		final String DELETE_USER_DEVICE_TOKEN = "/deleteDeviceToken";
+		final String CREATE_BULK_INSTITUTE = "/createBulkInstitute";
 	}
 
 	public interface AuthenticationRoutes {
diff --git a/src/main/java/com/tarento/retail/util/Sql.java b/src/main/java/com/tarento/retail/util/Sql.java
index 480a4ed..509979c 100644
--- a/src/main/java/com/tarento/retail/util/Sql.java
+++ b/src/main/java/com/tarento/retail/util/Sql.java
@@ -1,5 +1,7 @@
 package com.tarento.retail.util;
 
+import java.util.Date;
+
 /**
  * This interface will hold all the SQL Quries which are being used by the
  * application Internally, the inner interface will have the queries separated
@@ -201,4 +203,10 @@ public interface Sql {
 		final String APPEND_VALUE = String.format(" = :%s ", Constants.Parameters.VALUE);
 	}
 
+	public interface InstituteCourseQueries {
+		final String GET_INSTITUTE_COURSES = "SELECT ics.id, ics.district_name, ics.center_code, ics.degree, ics.course, ics.applied_year, ics.sector, ics.profile_id, ics.created_date, ics.created_by, ics.updated_date, ics.updated_by from institute_courses ics WHERE ics.profile_id = ? AND ics.course = ? AND ics.degree = ? ";
+		final String ADD_INSTITUTE_COURSE = "INSERT INTO institute_courses(district_name, center_code, degree, course, applied_year, sector, profile_id, created_by) VALUES(?, ?, ?, ?, ?, ?, ?, ?)";
+		
+	}
+
 }
-- 
GitLab