Unverified Commit 00b2f4e0 authored by srgajula-nisum-com's avatar srgajula-nisum-com Committed by GitHub

Merge pull request #1 from nisum-inc/MT-01

MT-01: [Srikanth] committng intial project setup and required rest and backend logic
parents 6f0f3646 c32caa2d
# generated files
classes/
build/
target/
out/
node_modules/
vendor/
# Git
*.patch
# OS files
.DS_Store
Thumbs.db
# Caches
.sass-cache/
.gradle/
cobertura.ser
.bundle/
.gradletasknamecache
# Eclipse
.settings/
.classpath
.project
# IntelliJ
.idea/
*.iml
*.ipr
*.iws
/bin/
*.log
*.log.lck
# mytime
\ No newline at end of file
# NisumTime
\ No newline at end of file
defaultTasks = ['clean','build']
buildscript {
ext {
springBootVersion = '1.5.8.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'war'
war {
dependsOn test
baseName = 'myTime'
version = ''
}
group = 'com.nisum.mytime'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.data:spring-data-mongodb')
compile('org.springframework:spring-context-support')
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-data-rest')
compile('org.springframework.boot:spring-boot-starter-web')
compile('javax.servlet:jstl')
compile('javax.mail:mail:1.4.1')
compile('org.mongodb:mongo-java-driver')
compile('org.projectlombok:lombok:1.16.+')
compile('org.quartz-scheduler:quartz:2.2.1')
compile('org.quartz-scheduler:quartz:2.3.0')
compile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version:'1.5.8.RELEASE'
testCompile ('junit:junit:4.12')
compile('net.sf.ucanaccess:ucanaccess:4.0.1')
testCompile('org.hsqldb:hsqldb')
compile('com.healthmarketscience.jackcess:jackcess')
compile('commons-logging:commons-logging')
compile('commons-lang:commons-lang')
compile('com.jcraft:jsch:0.1.46')
compile('com.itextpdf:itextpdf:5.0.6')
compile('jcifs:jcifs:1.3.17')
compile('javax.servlet:servlet-api')
}
\ No newline at end of file
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.5.1-bin.zip
#!/usr/bin/env sh
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save ( ) {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
package com.nisum.mytime;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@SpringBootApplication
@EnableAutoConfiguration
@EnableMongoRepositories(basePackages = { "com.nisum.mytime.repository" })
public class MyTimeApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MyTimeApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(MyTimeApplication.class, args);
}
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(0);
return bean;
}
}
package com.nisum.mytime.configuration;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DbConnection {
private static Logger log = LoggerFactory.getLogger(DbConnection.class);
private static Connection connection = null;
public static Connection getDBConnection(String dbURL) throws SQLException {
try {
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
connection = DriverManager.getConnection(dbURL);
} catch (ClassNotFoundException cnfex) {
log.error("Problem in loading or " + "registering MS Access JDBC driver", cnfex);
}
return connection;
}
}
package com.nisum.mytime.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@EnableWebMvc
@WebAppConfiguration("webapp")
public class MvcConfiguration extends WebMvcConfigurerAdapter {
@Bean
public InternalResourceViewResolver getViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/");
resolver.setViewNames("templates/**");
resolver.setSuffix(".html");
return resolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/css/**").addResourceLocations("/WEB-INF/css/");
registry.addResourceHandler("/images/**").addResourceLocations("/WEB-INF/images/");
registry.addResourceHandler("/js/**").addResourceLocations("/WEB-INF/js/");
registry.addResourceHandler("/controllers/**").addResourceLocations("/WEB-INF/controllers/");
registry.addResourceHandler("/fonts/**").addResourceLocations("/WEB-INF/fonts/");
registry.addResourceHandler("/reports/**").addResourceLocations("/WEB-INF/reports/");
registry.addResourceHandler("/templates/**").addResourceLocations("/WEB-INF/templates/");
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
\ No newline at end of file
package com.nisum.mytime.configuration;
import java.io.File;
import java.io.IOException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ResourceLoader;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ReportsCleanUpScheduler {
private static final Logger logger = LoggerFactory.getLogger(ReportsCleanUpScheduler.class);
@Autowired
ResourceLoader resourceLoader;
@Scheduled(cron= "0 55 23 1/1 * *")
public boolean cleanReports(){
boolean flag = false;
try {
File dir = resourceLoader.getResource("/WEB-INF/reports/").getFile();
for(File file : dir.listFiles()){
String fileName = file.getName();
if(file.exists() && !"MyTime.pdf".equals(fileName)){
flag = file.delete();
}
}
logger.info("Reports cleanup performed successfully");
} catch (IOException e) {
logger.error("Report deletion failed due to: ", e);
}
return flag;
}
}
package com.nisum.mytime.configuration;
import java.io.IOException;
import java.util.Properties;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.spi.JobFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import com.nisum.mytime.schedular.AutowiringSpringBeanJobFactory;
import com.nisum.mytime.schedular.MyTimeCronSchedularJob;
@Configuration
@ConditionalOnProperty(name = "quartz.enabled")
public class SchedulerConfig {
@Value("${cron.expression}")
private String cronExp;
@Bean
public JobFactory jobFactory(ApplicationContext applicationContext) {
AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
jobFactory.setApplicationContext(applicationContext);
return jobFactory;
}
@Bean
public Scheduler schedulerFactoryBean(JobFactory jobFactory,
@Qualifier("myTimeJobTrigger") Trigger myTimeJobTrigger) throws Exception {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
factory.setOverwriteExistingJobs(true);
factory.setJobFactory(jobFactory);
factory.setQuartzProperties(quartzProperties());
factory.afterPropertiesSet();
Scheduler scheduler = factory.getScheduler();
scheduler.setJobFactory(jobFactory);
scheduler.scheduleJob((JobDetail) myTimeJobTrigger.getJobDataMap().get("jobDetail"), myTimeJobTrigger);
scheduler.start();
return scheduler;
}
@Bean
public Properties quartzProperties() throws IOException {
PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));
propertiesFactoryBean.afterPropertiesSet();
return propertiesFactoryBean.getObject();
}
@Bean
public JobDetailFactoryBean myTimeJobDetail() {
return createJobDetail(MyTimeCronSchedularJob.class);
}
@Bean(name = "myTimeJobTrigger")
public CronTriggerFactoryBean myTimeJobTrigger(@Qualifier("myTimeJobDetail") JobDetail jobDetail,
@Value("${myTimejob.frequency}") long frequency) {
return createCronTrigger(jobDetail, frequency);
}
private JobDetailFactoryBean createJobDetail(Class<MyTimeCronSchedularJob> jobClass) {
JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
factoryBean.setJobClass(jobClass);
factoryBean.setDurability(true);
return factoryBean;
}
private CronTriggerFactoryBean createCronTrigger(JobDetail jobDetail, long cronExpression) {
CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean();
factoryBean.setJobDetail(jobDetail);
factoryBean.setCronExpression(cronExp);
factoryBean.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
return factoryBean;
}
}
\ No newline at end of file
package com.nisum.mytime.configuration;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.convert.CustomConversions;
import org.springframework.data.mongodb.core.convert.DbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import com.nisum.mytime.utils.MyTimeLogger;
@Configuration
public class SpringMongoConfig {
@Bean
public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory, MongoMappingContext context,
BeanFactory beanFactory) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);
try {
mappingConverter.setCustomConversions(beanFactory.getBean(CustomConversions.class));
} catch (NoSuchBeanDefinitionException ignore) {
MyTimeLogger.getInstance().error("Exception occured due to: ", ignore);
}
mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
return mappingConverter;
}
}
package com.nisum.mytime.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ApplicationController {
@RequestMapping("/")
public String login() {
return "templates/index";
}
}
package com.nisum.mytime.controller;
import java.sql.SQLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.nisum.mytime.exception.handler.MyTimeException;
import com.nisum.mytime.model.AttendenceData;
import com.nisum.mytime.model.EmpLoginData;
import com.nisum.mytime.service.AttendanceService;
import com.nisum.mytime.service.UserService;
@RestController
@RequestMapping("/attendance")
public class AttendanceController {
@Autowired
private UserService userService;
@Autowired
private AttendanceService attendanceService;
@RequestMapping(value = "employeeLoginsBasedOnDate", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<EmpLoginData>> employeeLoginsBasedOnDate(@RequestParam("empId") long id,
@RequestParam("fromDate") String fromDate, @RequestParam("toDate") String toDate) throws MyTimeException {
List<EmpLoginData> message = userService.employeeLoginsBasedOnDate(id, fromDate, toDate);
return new ResponseEntity<>(message, HttpStatus.OK);
}
@RequestMapping(value = "generatePdfReport/{id}/{fromDate}/{toDate}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<String> generatePdfReport(@PathVariable("id") long id,
@PathVariable("fromDate") String fromDate, @PathVariable("toDate") String toDate) throws MyTimeException {
String result = userService.generatePdfReport(id, fromDate, toDate);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@RequestMapping(value = "attendanciesReport/{reportDate}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<AttendenceData>> attendanciesReport(@PathVariable("reportDate") String reportDate)
throws MyTimeException, SQLException {
List<AttendenceData> lisOfAttendenceData = attendanceService.getAttendanciesReport(reportDate);
return new ResponseEntity<>(lisOfAttendenceData, HttpStatus.OK);
}
@RequestMapping(value = "employeesDataSave/{searchDate}", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Boolean> employeesDataSave(@PathVariable("searchDate") String searchDate)
throws MyTimeException {
Boolean result = userService.fetchEmployeesData(searchDate,false);
return new ResponseEntity<>(result, HttpStatus.OK);
}
@RequestMapping(value = "copyRemoteMdbFileToLocal", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Boolean> copyRemoteMdbFileToLocal() throws MyTimeException {
Boolean result = attendanceService.copyRemoteMdbFileToLocal();
return new ResponseEntity<>(result, HttpStatus.OK);
}
@RequestMapping(value = "resyncMonthData/{fromDate}", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Boolean> resyncMonthData(@PathVariable("fromDate") String fromDate) throws MyTimeException {
Boolean result = userService.fetchEmployeesData(fromDate,true);
return new ResponseEntity<>(result, HttpStatus.OK);
}
}
\ No newline at end of file
package com.nisum.mytime.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.nisum.mytime.model.EmailDomain;
import com.nisum.mytime.service.MailService;
@RestController
public class EmailController {
@Autowired
private MailService mailService;
@RequestMapping(value = "/sendEmail", method = RequestMethod.POST, produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<String> sendAttachmentMail(@RequestBody EmailDomain emailObj) {
String response = mailService.sendEmailWithAttachment(emailObj);
if ("Success".equals(response))
return new ResponseEntity<>(response, HttpStatus.OK);
else
return new ResponseEntity<>(response, HttpStatus.INTERNAL_SERVER_ERROR);
}
@RequestMapping(value = "/deleteReport/{fileName}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<String> deletePdfReport(@PathVariable("fileName") String fileName) {
String response = mailService.deletePdfReport(fileName);
return new ResponseEntity<>(response, HttpStatus.OK);
}
}
package com.nisum.mytime.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.nisum.mytime.exception.handler.MyTimeException;
import com.nisum.mytime.model.Account;
import com.nisum.mytime.model.EmployeeRoles;
import com.nisum.mytime.model.Project;
import com.nisum.mytime.repository.AccountRepo;
import com.nisum.mytime.service.ProjectService;
import com.nisum.mytime.service.UserService;
@RestController
@RequestMapping("/project")
public class ProjectController {
@Autowired
private UserService userService;
@Autowired
private ProjectService projectService;
@Autowired
private AccountRepo accountRepo;
@RequestMapping(value = "/employee", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<EmployeeRoles> getEmployeeRole(@RequestParam("emailId") String emailId)
throws MyTimeException {
EmployeeRoles employeesRole = userService.getEmployeesRole(emailId);
return new ResponseEntity<>(employeesRole, HttpStatus.OK);
}
@RequestMapping(value = "/addProject", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Project> addProject(@RequestBody Project projectAdded) throws MyTimeException {
String accountName=projectAdded.getAccount();
Account account= accountRepo.findByAccountName(accountName);
int sequenceNumber= account.getAccountProjectSequence();
account.setAccountProjectSequence(sequenceNumber+1);
accountRepo.save(account);
String projectId= accountName+String.format("%04d", sequenceNumber+1);
projectAdded.setProjectId(projectId);
Project project = projectService.addProject(projectAdded);
return new ResponseEntity<>(project, HttpStatus.OK);
}
@RequestMapping(value = "/updateProject", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Project> updateEmployeeRole(@RequestBody Project project) throws MyTimeException {
Project updatedProject = projectService.updateProject(project);
return new ResponseEntity<>(updatedProject, HttpStatus.OK);
}
@RequestMapping(value = "/deleteProject", method = RequestMethod.DELETE, produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<String> deleteProject(@RequestParam("projectId") String projectId) throws MyTimeException {
projectService.deleteProject(projectId);
return new ResponseEntity<>("Success", HttpStatus.OK);
}
@RequestMapping(value = "/getProjects", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Project>> getProjects() throws MyTimeException {
List<Project> projects = projectService.getProjects();
return new ResponseEntity<>(projects, HttpStatus.OK);
}
@RequestMapping(value = "/getEmployeeRoleData", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<EmployeeRoles> getEmployeeRoleData(@RequestParam("empId") String empId)
throws MyTimeException {
EmployeeRoles employeesRole = userService.getEmployeesRoleData(empId);
return new ResponseEntity<>(employeesRole, HttpStatus.OK);
}
}
\ No newline at end of file
package com.nisum.mytime.controller;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.nisum.mytime.exception.handler.MyTimeException;
import com.nisum.mytime.model.Account;
import com.nisum.mytime.model.Designation;
import com.nisum.mytime.model.EmployeeRoles;
import com.nisum.mytime.model.Shift;
import com.nisum.mytime.model.Skill;
import com.nisum.mytime.service.UserService;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/employee", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<EmployeeRoles> getEmployeeRole(@RequestParam("emailId") String emailId)
throws MyTimeException {
EmployeeRoles employeesRole = userService.getEmployeesRole(emailId);
return new ResponseEntity<>(employeesRole, HttpStatus.OK);
}
@RequestMapping(value = "/assignEmployeeRole", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<EmployeeRoles> assigingEmployeeRole(@RequestBody EmployeeRoles employeeRoles)
throws MyTimeException {
EmployeeRoles employeeRole = userService.assigingEmployeeRole(employeeRoles);
return new ResponseEntity<>(employeeRole, HttpStatus.OK);
}
@RequestMapping(value = "/updateEmployeeRole", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<EmployeeRoles> updateEmployeeRole(@RequestBody EmployeeRoles employeeRoles)
throws MyTimeException {
EmployeeRoles employeeRole = userService.updateEmployeeRole(employeeRoles);
return new ResponseEntity<>(employeeRole, HttpStatus.OK);
}
@RequestMapping(value = "/deleteEmployee", method = RequestMethod.DELETE, produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<String> deleteEmployee(@RequestParam("empId") String empId) throws MyTimeException {
userService.deleteEmployee(empId);
return new ResponseEntity<>("Success", HttpStatus.OK);
}
@RequestMapping(value = "/getUserRoles", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<EmployeeRoles>> getUserRoles() throws MyTimeException {
List<EmployeeRoles> employeesRoles = userService.getEmployeeRoles();
return new ResponseEntity<>(employeesRoles, HttpStatus.OK);
}
@RequestMapping(value = "/getEmployeeRoleData", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<EmployeeRoles> getEmployeeRoleData(@RequestParam("empId") String empId)
throws MyTimeException {
EmployeeRoles employeesRole = userService.getEmployeesRoleData(empId);
return new ResponseEntity<>(employeesRole, HttpStatus.OK);
}
@RequestMapping(value = "/getManagers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<EmployeeRoles>> getManagers() throws MyTimeException {
List<EmployeeRoles> employeesRoles = userService.getEmployeeRoles();
List<EmployeeRoles> managers = employeesRoles.stream()
.filter(e -> ("Director".equalsIgnoreCase(e.getRole())
|| "Delivery Manager".equalsIgnoreCase(e.getRole()) || "Manager".equalsIgnoreCase(e.getRole())
|| "HR Manager".equalsIgnoreCase(e.getRole()) || "Lead".equalsIgnoreCase(e.getRole())))
.sorted(Comparator.comparing(EmployeeRoles::getEmployeeName)).collect(Collectors.toList());
return new ResponseEntity<>(managers, HttpStatus.OK);
}
@RequestMapping(value = "/getAllShifts", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<String>> getAllShifts() throws MyTimeException {
List<String> shifts = userService.getAllShifts().stream().filter(e -> "Y".equalsIgnoreCase(e.getActiveStatus()))
.map(Shift::getShiftName).sorted().collect(Collectors.toList());
return new ResponseEntity<>(shifts, HttpStatus.OK);
}
@RequestMapping(value = "/getAllDesignations", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<String>> getAllDesignations() throws MyTimeException {
List<String> designations = userService.getAllDesignations().stream()
.filter(e -> "Y".equalsIgnoreCase(e.getActiveStatus())).map(Designation::getDesignationName).sorted()
.collect(Collectors.toList());
return new ResponseEntity<>(designations, HttpStatus.OK);
}
@RequestMapping(value = "/getSkills", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<String>> getTechnologies() throws MyTimeException {
List<String> technologies = userService.getTechnologies().stream()
.filter(e -> "Y".equalsIgnoreCase(e.getActiveStatus())).map(Skill::getSkillName).sorted()
.collect(Collectors.toList());
return new ResponseEntity<>(technologies, HttpStatus.OK);
}
@RequestMapping(value = "/updateProfile", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<EmployeeRoles> updateProfile(@RequestBody EmployeeRoles employeeRoles)
throws MyTimeException {
EmployeeRoles employeeRole = userService.updateProfile(employeeRoles);
return new ResponseEntity<>(employeeRole, HttpStatus.OK);
}
@RequestMapping(value = "/getAccounts", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<String>> getAccounts() throws MyTimeException {
List<String> technologies = userService.getAccounts().stream().filter(e -> "Y".equalsIgnoreCase(e.getStatus()))
.map(Account::getAccountName).sorted().collect(Collectors.toList());
return new ResponseEntity<>(technologies, HttpStatus.OK);
}
}
\ No newline at end of file
package com.nisum.mytime.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.nisum.mytime.exception.handler.MyTimeException;
import com.nisum.mytime.model.EmployeeVisa;
import com.nisum.mytime.model.TravelRequest;
import com.nisum.mytime.model.Visa;
import com.nisum.mytime.service.VisaService;
@RestController
@RequestMapping("/visa")
public class VisaController {
@Autowired
private VisaService visaService;
@RequestMapping(value = "/getAllVisas", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Visa>> getAllVisas() throws MyTimeException {
List<Visa> visas = visaService.getAllVisas();
return new ResponseEntity<>(visas, HttpStatus.OK);
}
@RequestMapping(value = "/getAllEmployeeVisas", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<EmployeeVisa>> getAllEmployeeVisas() throws MyTimeException {
List<EmployeeVisa> employeeVisas = visaService.getAllEmployeeVisas();
return new ResponseEntity<>(employeeVisas, HttpStatus.OK);
}
@RequestMapping(value = "/addEemployeeVisa", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<EmployeeVisa> addEemployeeVisa(@RequestBody EmployeeVisa employeeVisa)
throws MyTimeException {
EmployeeVisa visa = visaService.addEmployeeVisas(employeeVisa);
return new ResponseEntity<>(visa, HttpStatus.OK);
}
@RequestMapping(value = "/updateEemployeeVisa", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<EmployeeVisa> updateEemployeeVisa(@RequestBody EmployeeVisa eVisa) throws MyTimeException {
EmployeeVisa visa = visaService.updateEmployeeVisas(eVisa);
return new ResponseEntity<>(visa, HttpStatus.OK);
}
@RequestMapping(value = "/deleteEemployeeVisa", method = RequestMethod.DELETE, produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<String> deleteEemployeeVisa(@RequestBody EmployeeVisa eVisa) throws MyTimeException {
visaService.deleteEmployeeVisas(eVisa);
return new ResponseEntity<>("Success", HttpStatus.OK);
}
@RequestMapping(value = "/getAllTravelRequests", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<TravelRequest>> getAllTravelRequests() throws MyTimeException {
List<TravelRequest> employeeVisas = visaService.getAllTravels();
return new ResponseEntity<>(employeeVisas, HttpStatus.OK);
}
@RequestMapping(value = "/addTravelRequest", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<TravelRequest> addTravelRequest(@RequestBody TravelRequest employeeVisa)
throws MyTimeException {
TravelRequest visa = visaService.addTravelRequest(employeeVisa);
return new ResponseEntity<>(visa, HttpStatus.OK);
}
@RequestMapping(value = "/updateTravelRequest", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<TravelRequest> updateTravelRequest(@RequestBody TravelRequest eVisa) throws MyTimeException {
TravelRequest visa = visaService.updateTravelRequest(eVisa);
return new ResponseEntity<>(visa, HttpStatus.OK);
}
@RequestMapping(value = "/deleteTravelRequest", method = RequestMethod.DELETE, produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<String> deleteTravelRequest(@RequestBody TravelRequest eVisa) throws MyTimeException {
visaService.deleteEmployeeVisas(eVisa);
return new ResponseEntity<>("Success", HttpStatus.OK);
}
}
\ No newline at end of file
package com.nisum.mytime.exception.handler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler{
private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(DataAccessException.class)
public String handleDataAccessExceptions(DataAccessException ex){
log.error("DataAccessException occured due to: ",ex);
return "DataAccessException occured due to: "+ex.toString();
}
@ExceptionHandler(Exception.class)
public String handleOtherExceptions(Exception ex){
log.error("Exception occured due to: ",ex);
return "Exception occured due to: "+ex.toString();
}
}
\ No newline at end of file
package com.nisum.mytime.exception.handler;
public class MyTimeException extends Exception {
/**
*
*/
private static final long serialVersionUID = 3489301441198508177L;
public MyTimeException() {
}
public MyTimeException(String arg0) {
super(arg0);
}
public MyTimeException(Throwable arg0) {
super(arg0);
}
public MyTimeException(String arg0, Throwable arg1) {
super(arg0, arg1);
}
public MyTimeException(String arg0, Throwable arg1, boolean arg2, boolean arg3) {
super(arg0, arg1, arg2, arg3);
}
}
package com.nisum.mytime.model;
import java.io.Serializable;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(collection = "Accounts")
public class Account implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private ObjectId id;
private String accountId;
private String accountName;
private int accountProjectSequence;
private String status;
}
package com.nisum.mytime.model;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class AttendenceData implements Serializable {
/**
*
*/
private static final long serialVersionUID = -7656364713943754178L;
private String employeeId;
private String employeeName;
private String ifPresent;
private int totalPresent;
private int totalAbsent;
}
package com.nisum.mytime.model;
import java.text.ParseException;
import java.util.Comparator;
import java.util.Date;
import com.nisum.mytime.utils.MyTimeLogger;
import com.nisum.mytime.utils.MyTimeUtils;
public class DateCompare implements Comparator<EmpLoginData> {
public int compare(EmpLoginData o1, EmpLoginData o2) {
Date first = null;
Date second = null;
try {
first = MyTimeUtils.df.parse(o1.getFirstLogin());
second = MyTimeUtils.df.parse(o2.getFirstLogin());
int result = (first.after(second) ? 1 : 0);
return (first.before(second) ? -1 : result);
} catch (ParseException e) {
MyTimeLogger.getInstance().info(e.getMessage());
}
return -1;
}
}
\ No newline at end of file
package com.nisum.mytime.model;
import java.io.Serializable;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(collection = "Designations")
public class Designation implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private ObjectId id;
private String designationId;
private String designationName;
private String activeStatus;
}
package com.nisum.mytime.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@AllArgsConstructor
@Setter
@Getter
public class EmailDomain {
private String empId;
private String fromDate;
private String toDate;
private String[] toEmail;
private String[] ccEmail;
private String[] bccEmail;
}
package com.nisum.mytime.model;
import java.io.Serializable;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(collection = "EmployeesLoginData")
public class EmpLoginData implements Serializable {
/**
*
*/
private static final long serialVersionUID = 8448056441155775579L;
@Id
private String id;
private String employeeId;
private String employeeName;
private String dateOfLogin;
private String firstLogin;
private String lastLogout;
private String totalLoginTime;
private String direction;
private String totalAvgTime;
}
package com.nisum.mytime.model;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class Employee {
private String email;
private String name;
private String givenName;
private String familyName;
}
package com.nisum.mytime.model;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class EmployeeDashboardVO {
private String employeeId;
private String employeeName;
private String emailId;
private String baseTechnology;
private String technologyKnown;
private String alternateMobileNumber;
private String personalEmailId;
private Date createdOn;
private Date lastModifiedOn;
private String role;
private String shift;
private String projectId;
private String projectName;
private String account;
private String managerId;
private String managerName;
private String experience;
private String designation;
private String billableStatus;
private String mobileNumber;
@DateTimeFormat(iso = ISO.DATE)
private Date startDate;
@DateTimeFormat(iso = ISO.DATE)
private Date endDate;
private boolean active;
private boolean projectAssigned;
private boolean hasB1Visa;
private boolean hasH1Visa;
private boolean hasPassport;
}
package com.nisum.mytime.model;
import java.io.Serializable;
import java.util.Date;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(collection = "EmployeeRoles")
public class EmployeeRoles implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private String id;
private String employeeId;
private String employeeName;
private String emailId;
private String role;
private String designation;
private String shift;
private String baseTechnology;
private String technologyKnown;
private String mobileNumber;
private String alternateMobileNumber;
private String personalEmailId;
private Date createdOn;
private Date lastModifiedOn;
}
package com.nisum.mytime.model;
import java.util.Date;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(collection = "EmployeeVisa")
public class EmployeeVisa {
@Id
private ObjectId id;
private String employeeId;
private String employeeName;
private String visaNo;
private String visaName;
private String visaCountry;
private Date visaIntiatedDate;
private Date approvedDate;
private Date visaExpiryDate;
private String status;
private String comments;
}
package com.nisum.mytime.model;
import java.io.Serializable;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(collection = "Projects")
public class Project implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private ObjectId id;
private String projectId;
private String projectName;
private String managerId;
private String managerName;
private String account;
private String status;
private List<String> employeeIds;
}
package com.nisum.mytime.model;
import java.io.Serializable;
import java.util.Date;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(collection = "ProjectTeamMate")
public class ProjectTeamMate implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private ObjectId id;
private String employeeId;
private String employeeName;
private String emailId;
private String role;
private String shift;
private String projectId;
private String projectName;
private String account;
private String managerId;
private String managerName;
private String experience;
private String designation;
private String billableStatus;
private String mobileNumber;
@DateTimeFormat(iso = ISO.DATE)
private Date startDate;
@DateTimeFormat(iso = ISO.DATE)
private Date endDate;
private boolean active;
}
package com.nisum.mytime.model;
import java.io.Serializable;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(collection = "Shifts")
public class Shift implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private ObjectId id;
private String shiftId;
private String shiftName;
private String activeStatus;
}
package com.nisum.mytime.model;
import java.io.Serializable;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(collection = "Skills")
public class Skill implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private ObjectId id;
private String skillId;
private String skillName;
private String activeStatus;
}
package com.nisum.mytime.model;
import java.io.Serializable;
import java.util.Date;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(collection = "TeamMateBilling")
public class TeamMateBilling implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private ObjectId id;
private String employeeId;
private String employeeName;
private String projectId;
private String projectName;
@DateTimeFormat(iso = ISO.DATE)
private Date billingStartDate;
@DateTimeFormat(iso = ISO.DATE)
private Date billingEndDate;
private String comments;
private boolean active;
@DateTimeFormat(iso = ISO.DATE)
private Date createDate;
}
package com.nisum.mytime.model;
import java.util.Date;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(collection = "TravelRequests")
public class TravelRequest {
@Id
private ObjectId id;
private String employeeId;
private String employeeName;
private String visaNo;
private String visaName;
private String visaCountry;
private Date visaExpiryDate;
private String status;
private String comments;
private String fromLocation;
private String toLocation;
private String buddy;
private String account;
private String project;
private Date travelDate;
private Date returnDate;
}
package com.nisum.mytime.model;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document(collection = "Visa")
public class Visa {
private String visaName;
private String visaCountry;
}
package com.nisum.mytime.repository;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.nisum.mytime.model.Account;
public interface AccountRepo extends MongoRepository<Account, String> {
Account findByAccountName(String accontName);
}
\ No newline at end of file
package com.nisum.mytime.repository;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.nisum.mytime.model.Designation;
public interface DesignationRepo extends MongoRepository<Designation, String> {
}
\ No newline at end of file
package com.nisum.mytime.repository;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.nisum.mytime.model.EmpLoginData;
public interface EmployeeAttendanceRepo extends MongoRepository<EmpLoginData, Long> {
}
package com.nisum.mytime.repository;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.nisum.mytime.model.EmployeeRoles;
public interface EmployeeRolesRepo extends MongoRepository<EmployeeRoles, String> {
EmployeeRoles findByEmailId(String emailId);
EmployeeRoles findByEmployeeId(String employeeId);
}
package com.nisum.mytime.repository;
import java.util.List;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.nisum.mytime.model.EmployeeVisa;
public interface EmployeeVisaRepo extends MongoRepository<EmployeeVisa, String> {
List<EmployeeVisa> findByVisaName(String visaName);
}
\ No newline at end of file
package com.nisum.mytime.repository;
import java.util.List;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.nisum.mytime.model.Project;
public interface ProjectRepo extends MongoRepository<Project, String> {
Project findByProjectId(String projectId);
List<Project> findByManagerId(String managerId);
}
\ No newline at end of file
package com.nisum.mytime.repository;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.nisum.mytime.model.ProjectTeamMate;
public interface ProjectTeamMatesRepo extends MongoRepository<ProjectTeamMate, String> {
List<ProjectTeamMate> findByProjectId(String projectId);
List<ProjectTeamMate> findByManagerId(String projectId);
List<ProjectTeamMate> findByEmployeeId(String employeeId);
ProjectTeamMate findById(ObjectId id);
ProjectTeamMate findByEmployeeIdAndManagerId(String employeeId, String managerId);
ProjectTeamMate findByEmployeeIdAndProjectId(String employeeId, String projectId);
}
package com.nisum.mytime.repository;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.nisum.mytime.model.Shift;
public interface ShiftRepo extends MongoRepository<Shift, String> {
}
\ No newline at end of file
package com.nisum.mytime.repository;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.nisum.mytime.model.TeamMateBilling;
public interface TeamMatesBillingRepo extends MongoRepository<TeamMateBilling, String> {
List<TeamMateBilling> findByProjectId(String projectId);
List<TeamMateBilling> findByEmployeeId(String employeeId);
TeamMateBilling findById(ObjectId id);
List<TeamMateBilling> findByEmployeeIdAndProjectId(String employeeId, String projectId);
}
package com.nisum.mytime.repository;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.nisum.mytime.model.Skill;
public interface TechnologyRepo extends MongoRepository<Skill, String> {
}
\ No newline at end of file
package com.nisum.mytime.repository;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.nisum.mytime.model.TravelRequest;
public interface TravelRepo extends MongoRepository<TravelRequest, String> {
}
\ No newline at end of file
package com.nisum.mytime.repository;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.nisum.mytime.model.Visa;
public interface VisaRepo extends MongoRepository<Visa, String> {
}
\ No newline at end of file
package com.nisum.mytime.schedular;
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.scheduling.quartz.SpringBeanJobFactory;
public final class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware {
private transient AutowireCapableBeanFactory beanFactory;
public void setApplicationContext(final ApplicationContext context) {
beanFactory = context.getAutowireCapableBeanFactory();
}
@Override
protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception {
final Object job = super.createJobInstance(bundle);
beanFactory.autowireBean(job);
return job;
}
}
package com.nisum.mytime.schedular;
import java.sql.SQLException;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.springframework.beans.factory.annotation.Autowired;
import com.nisum.mytime.exception.handler.MyTimeException;
import com.nisum.mytime.service.EmployeeDataService;
import com.nisum.mytime.utils.MyTimeLogger;
@DisallowConcurrentExecution
public class MyTimeCronSchedularJob implements Job {
@Autowired
private EmployeeDataService employeeDataService;
@Override
public void execute(JobExecutionContext jobExecutionContext) {
try {
if (employeeDataService.fetchEmployeesDataOnDayBasis()) {
MyTimeLogger.getInstance().info("Shedular Executed Successfully Records Saved in DB");
}
} catch (MyTimeException | SQLException e) {
MyTimeLogger.getInstance().error("Shedular failed to Executed ::: " , e);
}
}
}
package com.nisum.mytime.service;
import java.sql.SQLException;
import java.util.List;
import com.nisum.mytime.exception.handler.MyTimeException;
import com.nisum.mytime.model.AttendenceData;
public interface AttendanceService {
List<AttendenceData> getAttendanciesReport(String reportDate) throws MyTimeException, SQLException;
Boolean copyRemoteMdbFileToLocal() throws MyTimeException;
void triggerMailToAbsentees() throws MyTimeException;
}
package com.nisum.mytime.service;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.lang.time.DateUtils;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;
import com.mongodb.BasicDBObject;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.nisum.mytime.configuration.DbConnection;
import com.nisum.mytime.exception.handler.MyTimeException;
import com.nisum.mytime.model.AttendenceData;
import com.nisum.mytime.utils.MyTimeLogger;
import com.nisum.mytime.utils.MyTimeUtils;
import jcifs.smb.SmbFile;
@Service
public class AttendanceServiceImpl implements AttendanceService {
@Value("${mytime.attendance.fileName}")
private String mdbFile;
@Value("${mytime.localFile.directory}")
private String localFileDirectory;
@Value("${mytime.remote.directory}")
private String remoteFilesDirectory;
@Value("${mytime.remote.connection}")
private String remotePath;
@Autowired
private MongoTemplate mongoTemplate;
private Connection connection = null;
private Statement statement = null;
private ResultSet resultSet = null;
private File finalfile = null;
private Calendar calendar = new GregorianCalendar();
private int month = (calendar.get(Calendar.MONTH)) + 1;
private int year = calendar.get(Calendar.YEAR);
private Date toDay = calendar.getTime();
private String queryMonthDecider = null;
@Override
public List<AttendenceData> getAttendanciesReport(String reportDate) throws MyTimeException, SQLException {
long start_ms = System.currentTimeMillis();
List<AttendenceData> listOfAbsentEmployees = null;
try {
File dir = new File(localFileDirectory);
for (File file : dir.listFiles()) {
if (file.getCanonicalPath().contains(mdbFile)) {
finalfile = new File(file.getCanonicalPath());
}
}
if (null != finalfile) {
int dayOftoDay = calendar.get(Calendar.DAY_OF_MONTH);
Date selectedDate = MyTimeUtils.dfmt.parse(reportDate);
calendar.setTime(MyTimeUtils.dfmt.parse(reportDate));
int dayOfSelectedDate = calendar.get(Calendar.DAY_OF_MONTH);
if (dayOfSelectedDate == dayOftoDay && month == (calendar.get(Calendar.MONTH)) + 1
&& year == calendar.get(Calendar.YEAR)) {
listOfAbsentEmployees = fecthRecordsFromMDb();
} else if (selectedDate.before(toDay)) {
calendar.setTime(selectedDate);
listOfAbsentEmployees = fecthRecordsFromMongoDb(reportDate);
}
MyTimeLogger.getInstance().info("Time Taken for " + (System.currentTimeMillis() - start_ms));
}
} catch (Exception e) {
MyTimeLogger.getInstance().error("Exception occured due to : ", e);
throw new MyTimeException(e.getMessage());
} finally {
if (null != connection) {
connection.close();
statement.close();
resultSet.close();
}
}
return listOfAbsentEmployees;
}
private String createDbStatementWithFile() throws MyTimeException {
StringBuilder queryMonthDecider = null;
try {
queryMonthDecider = new StringBuilder();
String dbURL = MyTimeUtils.driverUrl + finalfile.getCanonicalPath();
MyTimeLogger.getInstance().info(dbURL);
connection = DbConnection.getDBConnection(dbURL);
statement = connection.createStatement();
Calendar calendar1 = Calendar.getInstance();
calendar1.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH), 6, 00, 00);
Date dayStartsTime = calendar1.getTime();
Date maxTimeToLogin = DateUtils.addHours(dayStartsTime, 12);
queryMonthDecider.append(MyTimeUtils.USERID_QUERY);
queryMonthDecider.append(calendar.get(Calendar.MONTH) + 1);
queryMonthDecider.append(MyTimeUtils.UNDER_SCORE);
queryMonthDecider.append(calendar.get(Calendar.YEAR));
queryMonthDecider.append(MyTimeUtils.WHERE_COND);
queryMonthDecider.append(MyTimeUtils.df.format(dayStartsTime) + MyTimeUtils.SINGLE_QUOTE);
queryMonthDecider.append(MyTimeUtils.AND_COND);
queryMonthDecider.append(MyTimeUtils.df.format(maxTimeToLogin) + MyTimeUtils.SINGLE_QUOTE);
MyTimeLogger.getInstance().info(queryMonthDecider.toString());
} catch (Exception e) {
MyTimeLogger.getInstance().error("Exception occured due to: ", e);
throw new MyTimeException(e.getMessage());
}
return queryMonthDecider.toString();
}
private List<AttendenceData> fecthRecordsFromMDb() throws MyTimeException {
List<String> presentiesList = null;
List<String> listOfPresentEmployees = new ArrayList<>();
List<AttendenceData> listOfAbsentEmployees = null;
try {
queryMonthDecider = createDbStatementWithFile();
resultSet = statement.executeQuery(queryMonthDecider);
while (resultSet.next()) {
if (resultSet.getString(1).length() >= 5) {
listOfPresentEmployees.add(resultSet.getString(1));
}
}
presentiesList = listOfPresentEmployees.stream().distinct().collect(Collectors.toList());
listOfAbsentEmployees = fetchAbsenteesListFromDb(presentiesList);
} catch (Exception e) {
MyTimeLogger.getInstance().error("Exception occured due to: ", e);
throw new MyTimeException(e.getMessage());
}
return listOfAbsentEmployees;
}
private List<AttendenceData> fecthRecordsFromMongoDb(String reportDate) throws MyTimeException {
List<String> presentiesList = null;
List<String> listOfPresentEmployees = new ArrayList<>();
List<AttendenceData> listOfAbsentEmployees = null;
DBCursor cursor = null;
queryMonthDecider = createDbStatementWithFile();
BasicDBObject gtQuery = new BasicDBObject();
gtQuery.put(MyTimeUtils.DATE_OF_LOGIN, reportDate);
listOfPresentEmployees.clear();
cursor = mongoTemplate.getCollection(MyTimeUtils.EMPLOYEE_COLLECTION).find(gtQuery)
.sort(new BasicDBObject(MyTimeUtils.EMPLOYEE_ID, 1));
while (cursor.hasNext()) {
DBObject dbObject = cursor.next();
listOfPresentEmployees.add(dbObject.get(MyTimeUtils.EMPLOYEE_ID).toString());
}
presentiesList = listOfPresentEmployees.stream().distinct().collect(Collectors.toList());
listOfAbsentEmployees = fetchAbsenteesListFromDb(presentiesList);
return listOfAbsentEmployees;
}
private List<AttendenceData> fetchAbsenteesListFromDb(List<String> presentiesList) throws MyTimeException {
List<AttendenceData> listOfAbsentEmployees = new ArrayList<>();
try {
if (!presentiesList.isEmpty()) {
StringBuilder absentiesQuery = new StringBuilder();
absentiesQuery.append(MyTimeUtils.ABESENT_QUERY);
absentiesQuery.append(queryMonthDecider);
absentiesQuery.append(MyTimeUtils.ABESENT_QUERY1);
MyTimeLogger.getInstance().info(absentiesQuery.toString());
resultSet = statement.executeQuery(absentiesQuery.toString());
listOfAbsentEmployees.clear();
while (resultSet.next()) {
if (resultSet.getString(3).length() >= 5) {
AttendenceData attendenceData = new AttendenceData();
attendenceData.setEmployeeName(resultSet.getString(2));
attendenceData.setEmployeeId(resultSet.getString(3));
attendenceData.setIfPresent(MyTimeUtils.ABESENT);
listOfAbsentEmployees.add(attendenceData);
}
}
if (!listOfAbsentEmployees.isEmpty()) {
listOfAbsentEmployees.get(0).setTotalPresent(presentiesList.size());
listOfAbsentEmployees.get(0).setTotalAbsent(listOfAbsentEmployees.size());
}
}
} catch (Exception e) {
MyTimeLogger.getInstance().error("Exception occured due to: ", e);
throw new MyTimeException(e.getMessage());
}
return listOfAbsentEmployees;
}
public Boolean copyRemoteMdbFileToLocal() throws MyTimeException {
File Finalfile = null;
boolean result = false;
try {
SmbFile[] smbFiles = new SmbFile(remotePath).listFiles();
for (SmbFile file : smbFiles) {
if (file.getCanonicalPath().contains(mdbFile)) {
Finalfile = new File(localFileDirectory + file.getName());
try (InputStream in = file.getInputStream();
FileOutputStream out = new FileOutputStream(Finalfile)) {
IOUtils.copy(in, out);
result = true;
}
}
}
} catch (Exception e) {
MyTimeLogger.getInstance().error(e.getMessage());
throw new MyTimeException(e.getMessage());
}
return result;
}
@Override
public void triggerMailToAbsentees() throws MyTimeException {
}
}
/**
*
*/
package com.nisum.mytime.service;
import com.nisum.mytime.model.EmailDomain;
/**
* @author nisum
*
*/
public interface MailService {
public String sendEmailWithAttachment(EmailDomain emailObj);
public String deletePdfReport(String fileName);
}
/**
*
*/
package com.nisum.mytime.service;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import com.nisum.mytime.model.EmailDomain;
/**
* @author nisum
*
*/
@Service
public class MailServiceImpl implements MailService {
private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);
@Autowired
JavaMailSender emailSender;
@Autowired
ResourceLoader resourceLoader;
@Override
public String sendEmailWithAttachment(EmailDomain emailObj) {
String response = "Success";
MimeMessage msg = emailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(msg, true);
helper.setTo(emailObj.getToEmail());
helper.setCc(emailObj.getCcEmail());
String fromDate = emailObj.getFromDate();
String toDate = emailObj.getToDate();
String subject = "";
String mailContent = "";
String empId = emailObj.getEmpId();
if("".equals(empId)){
empId = "0";
subject = "All employees - Login hours Report for the period: "+fromDate+" to "+toDate;
mailContent = "Hi,\n PFA for All employees login hours report for the period: " + fromDate + " to "+ toDate;
}else{
subject = empId+ " - Login hours Report for the period: "+fromDate+" to "+toDate;
mailContent = "Hi,\n PFA for Employee ID: "+empId+" login hours report for the period: " + fromDate + " to "+ toDate;
}
helper.setSubject(subject);
helper.setText(mailContent);
String fileName = empId + "_" + fromDate + "_" + toDate+".pdf";
File file = resourceLoader.getResource("/WEB-INF/reports/" + fileName).getFile();
FileSystemResource fileSystem = new FileSystemResource(file);
helper.addAttachment(fileSystem.getFilename(), fileSystem);
helper.setSentDate(new Date());
emailSender.send(msg);
} catch (MessagingException e) {
response = "Mail sending failed due to " + e.getMessage();
logger.error("Mail sending failed due to: ", e);
} catch (IOException e) {
response = "Mail sending failed due to " + e.getMessage();
logger.error("Mail sending failed due to: ", e);
}
return response;
}
@Override
public String deletePdfReport(String fileName) {
String response = "";
try {
File file = resourceLoader.getResource("/WEB-INF/reports/" + fileName+".pdf").getFile();
if(null != file && file.exists()){
boolean status = file.delete();
if(status){
response = "Success";
}
}
} catch (IOException e) {
response = "Report deletion failed due to: " + e.getMessage();
logger.error("Report deletion failed due to: ", e);
}
return response;
}
}
package com.nisum.mytime.service;
import java.util.List;
import org.bson.types.ObjectId;
import com.nisum.mytime.exception.handler.MyTimeException;
import com.nisum.mytime.model.EmpLoginData;
import com.nisum.mytime.model.EmployeeDashboardVO;
import com.nisum.mytime.model.EmployeeRoles;
import com.nisum.mytime.model.Project;
import com.nisum.mytime.model.ProjectTeamMate;
import com.nisum.mytime.model.TeamMateBilling;
public interface ProjectService {
List<EmpLoginData> employeeLoginsBasedOnDate(long id, String fromDate, String toDate) throws MyTimeException;
List<Project> getProjects() throws MyTimeException;
Project addProject(Project project) throws MyTimeException;
String generatePdfReport(long id, String fromDate, String toDate) throws MyTimeException;
EmployeeRoles getEmployeesRole(String emailId);
void deleteProject(String projectId);
Project updateProject(Project project);
EmployeeRoles getEmployeesRoleData(String empId);
List<ProjectTeamMate> getTeamDetails(String empId);
public ProjectTeamMate addProjectTeamMate(ProjectTeamMate projectTeamMate) throws MyTimeException;
ProjectTeamMate updateTeammate(ProjectTeamMate projectTeamMate);
void deleteTeammate(String empId, String projectId,ObjectId id);
List<Project> getProjects(String managerId) throws MyTimeException;
List<ProjectTeamMate> getMyTeamDetails(String empId);
List<EmployeeRoles> getUnAssignedEmployees();
List<ProjectTeamMate> getShiftDetails(String shift);
List<ProjectTeamMate> getAllProjectDetails();
List<ProjectTeamMate> getProjectDetails(String projectId);
public List<ProjectTeamMate> getMyProjectAllocations(String empId);
List<TeamMateBilling> getEmployeeBillingDetails(String empId,String projectId);
TeamMateBilling addEmployeeBillingDetails(TeamMateBilling teamMate);
TeamMateBilling updateEmployeeBilling(TeamMateBilling teamMate);
public List<EmployeeDashboardVO> getEmployeesDashBoard();
}
This diff is collapsed.
package com.nisum.mytime.service;
import java.util.List;
import com.nisum.mytime.exception.handler.MyTimeException;
import com.nisum.mytime.model.Account;
import com.nisum.mytime.model.Designation;
import com.nisum.mytime.model.EmpLoginData;
import com.nisum.mytime.model.EmployeeRoles;
import com.nisum.mytime.model.Shift;
import com.nisum.mytime.model.Skill;
public interface UserService {
Boolean fetchEmployeesData(String perticularDate,boolean resynchFlag) throws MyTimeException;
List<EmpLoginData> employeeLoginsBasedOnDate(long id, String fromDate, String toDate) throws MyTimeException;
List<EmployeeRoles> getEmployeeRoles() throws MyTimeException;
EmployeeRoles assigingEmployeeRole(EmployeeRoles employeeRoles) throws MyTimeException;
String generatePdfReport(long id, String fromDate, String toDate) throws MyTimeException;
EmployeeRoles getEmployeesRole(String emailId);
void deleteEmployee(String empId);
EmployeeRoles updateEmployeeRole(EmployeeRoles employeeRoles);
EmployeeRoles getEmployeesRoleData(String empId);
List<Shift> getAllShifts() throws MyTimeException;
List<Designation> getAllDesignations() throws MyTimeException;
List<Skill> getTechnologies() throws MyTimeException;
public EmployeeRoles updateProfile(EmployeeRoles employeeRoles) throws MyTimeException;
public List<Account> getAccounts() throws MyTimeException;
}
package com.nisum.mytime.service;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.FindAndModifyOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import com.nisum.mytime.exception.handler.MyTimeException;
import com.nisum.mytime.model.Account;
import com.nisum.mytime.model.Designation;
import com.nisum.mytime.model.EmpLoginData;
import com.nisum.mytime.model.EmployeeRoles;
import com.nisum.mytime.model.ProjectTeamMate;
import com.nisum.mytime.model.Shift;
import com.nisum.mytime.model.Skill;
import com.nisum.mytime.repository.AccountRepo;
import com.nisum.mytime.repository.DesignationRepo;
import com.nisum.mytime.repository.EmployeeRolesRepo;
import com.nisum.mytime.repository.ProjectTeamMatesRepo;
import com.nisum.mytime.repository.ShiftRepo;
import com.nisum.mytime.repository.TechnologyRepo;
import com.nisum.mytime.utils.PdfReportGenerator;
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private EmployeeRolesRepo employeeRolesRepo;
@Autowired
private ProjectTeamMatesRepo projectTeamMatesRepo;
@Autowired
private ShiftRepo shiftRepo;
@Autowired
private DesignationRepo designationRepo;
@Autowired
private AccountRepo accountRepo;
@Autowired
private TechnologyRepo technologyRepo;
@Autowired
private EmployeeDataService employeeDataBaseService;
@Autowired
private PdfReportGenerator pdfReportGenerator;
@Autowired
private MongoTemplate mongoTemplate;
@Override
public Boolean fetchEmployeesData(String perticularDate,boolean resynchFlag) throws MyTimeException {
return employeeDataBaseService.fetchEmployeesData(perticularDate,resynchFlag);
}
@Override
public List<EmpLoginData> employeeLoginsBasedOnDate(long id, String fromDate, String toDate)
throws MyTimeException {
return employeeDataBaseService.fetchEmployeeLoginsBasedOnDates(id, fromDate, toDate);
}
@Override
public String generatePdfReport(long id, String fromDate, String toDate) throws MyTimeException {
return pdfReportGenerator.generateEmployeeReport(id, fromDate, toDate);
}
@Override
public List<EmployeeRoles> getEmployeeRoles() throws MyTimeException {
return employeeRolesRepo.findAll();
}
@Override
public EmployeeRoles assigingEmployeeRole(EmployeeRoles employeeRoles) throws MyTimeException {
employeeRoles.setCreatedOn(new Date());
return employeeRolesRepo.save(employeeRoles);
}
@Override
public EmployeeRoles getEmployeesRole(String emailId) {
return employeeRolesRepo.findByEmailId(emailId);
}
@Override
public void deleteEmployee(String employeeId) {
EmployeeRoles role = employeeRolesRepo.findByEmployeeId(employeeId);
employeeRolesRepo.delete(role);
}
@Override
public EmployeeRoles updateEmployeeRole(EmployeeRoles employeeRoles) {
Query query = new Query(Criteria.where("employeeId").is(employeeRoles.getEmployeeId()));
Update update = new Update();
update.set("employeeName", employeeRoles.getEmployeeName());
update.set("emailId", employeeRoles.getEmailId());
update.set("role", employeeRoles.getRole());
update.set("lastModifiedOn", new Date());
FindAndModifyOptions options = new FindAndModifyOptions();
options.returnNew(true);
options.upsert(true);
EmployeeRoles emp= mongoTemplate.findAndModify(query, update, options, EmployeeRoles.class);
try {
List<ProjectTeamMate> employeeProfiles= projectTeamMatesRepo.findByEmployeeId(emp.getEmployeeId());
if(employeeProfiles!=null&&!employeeProfiles.isEmpty()) {
for(ProjectTeamMate profile:employeeProfiles){
profile.setRole(emp.getRole());;
projectTeamMatesRepo.save(profile);
}
}}catch(Exception e) {}
return emp;
}
@Override
public EmployeeRoles getEmployeesRoleData(String employeeId) {
return employeeRolesRepo.findByEmployeeId(employeeId);
}
@Override
public List<Shift> getAllShifts() throws MyTimeException {
return shiftRepo.findAll();
}
@Override
public List<Designation> getAllDesignations() throws MyTimeException {
return designationRepo.findAll();
}
@Override
public List<Account> getAccounts() throws MyTimeException {
return accountRepo.findAll();
}
@Override
public List<Skill> getTechnologies() throws MyTimeException {
return technologyRepo.findAll();
}
@Override
public EmployeeRoles updateProfile(EmployeeRoles employeeRoles) throws MyTimeException {
boolean mobileNumberChnaged=false;
boolean designationChnaged=false;
employeeRoles.setLastModifiedOn(new Date());
EmployeeRoles existingEmployee=employeeRolesRepo.findByEmployeeId(employeeRoles.getEmployeeId());
String newMobileNumber=employeeRoles.getMobileNumber();
String designation=employeeRoles.getDesignation();
if(newMobileNumber!=null&&!newMobileNumber.equalsIgnoreCase("")) {
if((existingEmployee!=null&&existingEmployee.getMobileNumber()!=null&&!existingEmployee.getMobileNumber().equalsIgnoreCase(newMobileNumber) )|| (existingEmployee.getMobileNumber()==null )){
mobileNumberChnaged=true;
}
}
if(designation!=null&&!designation.equalsIgnoreCase("")) {
if((existingEmployee!=null&&existingEmployee.getDesignation()!=null&&!existingEmployee.getDesignation().equalsIgnoreCase(newMobileNumber) )|| (existingEmployee.getDesignation()==null )){
designationChnaged=true;
}
}
existingEmployee.setDesignation(employeeRoles.getDesignation());
existingEmployee.setMobileNumber(employeeRoles.getMobileNumber());
existingEmployee.setAlternateMobileNumber(employeeRoles.getAlternateMobileNumber());
existingEmployee.setPersonalEmailId(employeeRoles.getPersonalEmailId());
existingEmployee.setBaseTechnology(employeeRoles.getBaseTechnology());
existingEmployee.setTechnologyKnown(employeeRoles.getTechnologyKnown());
EmployeeRoles employeeRolesDB= employeeRolesRepo.save(existingEmployee);
if(mobileNumberChnaged || designationChnaged) {
try {
List<ProjectTeamMate> employeeProfiles= projectTeamMatesRepo.findByEmployeeId(employeeRoles.getEmployeeId());
if(employeeProfiles!=null&&!employeeProfiles.isEmpty()) {
for(ProjectTeamMate profile:employeeProfiles){
profile.setDesignation(employeeRolesDB.getDesignation());
profile.setMobileNumber(employeeRolesDB.getMobileNumber());
projectTeamMatesRepo.save(profile);
}
}}catch(Exception e) {}
}
return employeeRolesDB;
}
}
/**
*
*/
package com.nisum.mytime.service;
import java.util.List;
import com.nisum.mytime.model.EmployeeVisa;
import com.nisum.mytime.model.TravelRequest;
import com.nisum.mytime.model.Visa;
/**
* @author nisum
*
*/
public interface VisaService {
List<Visa> getAllVisas();
List<EmployeeVisa> getAllEmployeeVisas();
EmployeeVisa addEmployeeVisas(EmployeeVisa e);
EmployeeVisa updateEmployeeVisas(EmployeeVisa e);
void deleteEmployeeVisas(EmployeeVisa e);
List<TravelRequest> getAllTravels();
TravelRequest addTravelRequest(TravelRequest e);
TravelRequest updateTravelRequest(TravelRequest e);
void deleteEmployeeVisas(TravelRequest e);
}
/**
*
*/
package com.nisum.mytime.service;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import com.nisum.mytime.model.EmailDomain;
import com.nisum.mytime.model.EmployeeVisa;
import com.nisum.mytime.model.TravelRequest;
import com.nisum.mytime.model.Visa;
import com.nisum.mytime.repository.EmployeeRolesRepo;
import com.nisum.mytime.repository.EmployeeVisaRepo;
import com.nisum.mytime.repository.TravelRepo;
import com.nisum.mytime.repository.VisaRepo;
/**
* @author nisum
*
*/
@Service
public class VisaServiceImpl implements VisaService {
private static final Logger logger = LoggerFactory.getLogger(VisaServiceImpl.class);
@Autowired
private VisaRepo visaRepo;
@Autowired
private TravelRepo travelRepo;
@Autowired
private EmployeeVisaRepo employeeVisaRepo;
@Override
public List<Visa> getAllVisas() {
return visaRepo.findAll();
}
@Override
public List<EmployeeVisa> getAllEmployeeVisas() {
return employeeVisaRepo.findAll();
}
@Override
public EmployeeVisa addEmployeeVisas(EmployeeVisa e) {
// TODO Auto-generated method stub
return employeeVisaRepo.save(e);
}
@Override
public EmployeeVisa updateEmployeeVisas(EmployeeVisa e) {
// TODO Auto-generated method stub
return employeeVisaRepo.save(e);
}
@Override
public void deleteEmployeeVisas(EmployeeVisa e) {
// TODO Auto-generated method stub
employeeVisaRepo.delete(e);
}
@Override
public List<TravelRequest> getAllTravels() {
return travelRepo.findAll();
}
@Override
public TravelRequest addTravelRequest(TravelRequest e) {
// TODO Auto-generated method stub
return travelRepo.save(e);
}
@Override
public TravelRequest updateTravelRequest(TravelRequest e) {
// TODO Auto-generated method stub
return travelRepo.save(e);
}
@Override
public void deleteEmployeeVisas(TravelRequest e) {
// TODO Auto-generated method stub
travelRepo.delete(e);
}
}
package com.nisum.mytime.utils;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
public class MyTimeLogger {
/** The logging instance. */
private static MyTimeLogger loggingInstance = null;
/** The logger. */
private Logger logger = null;
private MyTimeLogger() {
logger = LogManager.getLogger("com.nisum.mytime.utils.MyTimeLogger");
}
public synchronized static MyTimeLogger getInstance() {
if (loggingInstance == null) {
loggingInstance = new MyTimeLogger();
return loggingInstance;
} else {
return loggingInstance;
}
}
private String getClassName() {
String className = "";
try {
className = Thread.currentThread().getStackTrace()[3].getClassName();
} catch (Exception e) {
logger.error("Exception occured due to: ", e);
}
return className;
}
private String getMethodName() {
String methodName = "";
try {
methodName = Thread.currentThread().getStackTrace()[3].getMethodName();
} catch (Exception e) {
logger.error("Exception occured due to: ", e);
}
return methodName;
}
public void entry() {
String message = "Entry";
String logMsg = "TID :" + Thread.currentThread().getId() + " : " + getClassName() + " : " + getMethodName()
+ " - " + message;
logger.log(Level.INFO, logMsg);
}
public void info(String message) {
String logMsg = "TID: " + Thread.currentThread().getId() + " : " + getClassName() + " : " + getMethodName()
+ " - " + message;
logger.log(Level.INFO, logMsg);
}
public void warn(String message) {
String logMsg = " TID : " + Thread.currentThread().getId() + " : " + getClassName() + " : " + getMethodName()
+ " - " + message;
logger.log(Level.WARN, logMsg);
}
public void warn(String message, Throwable t) {
String logMsg = getClassName() + " : " + getMethodName() + " - " + message;
logger.log(Level.WARN, logMsg, t);
}
public void debug(String message) {
String logMsg = " TID: " + Thread.currentThread().getId() + " : " + getClassName() + " : " + getMethodName()
+ " - " + message;
logger.log(Level.DEBUG, logMsg);
}
public void debug(String message, Throwable t) {
String logMsg = " TID:" + Thread.currentThread().getId() + " : " + getClassName() + " : " + getMethodName()
+ " - " + message;
logger.log(Level.DEBUG, logMsg, t);
}
public void error(String message) {
String logMsg = "TID : " + Thread.currentThread().getId() + " : " + getClassName() + " : " + getMethodName()
+ " - " + message;
logger.log(Level.ERROR, logMsg);
}
public void error(String message, Throwable t) {
String logMsg = getClassName() + " : " + getMethodName() + " - " + message;
logger.log(Level.ERROR, logMsg, t);
}
public void fatal(String message) {
String logMsg = "TID: " + Thread.currentThread().getId() + " : " + getClassName() + " : " + getMethodName()
+ " - " + message;
logger.log(Level.FATAL, logMsg);
}
public void trace(String message) {
String logMsg = "TID : " + Thread.currentThread().getId() + " : " + getClassName() + " : " + getMethodName()
+ " - " + message;
logger.log(Level.TRACE, logMsg);
}
public void log(String msg) {
logger.log(Level.INFO, msg);
}
public void exit() {
String message = "Exit";
String logMsg = "TID : " + Thread.currentThread().getId() + " : " + getClassName() + " : " + getMethodName()
+ " - " + message;
logger.log(Level.INFO, logMsg);
}
}
package com.nisum.mytime.utils;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class MyTimeUtils {
private MyTimeUtils() {
}
public final static String driverUrl = "jdbc:ucanaccess://";
public final static DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public final static DateFormat tdf = new SimpleDateFormat("HH:mm");
public final static DateFormat dfmt = new SimpleDateFormat("yyyy-MM-dd");
public final static String UNDER_SCORE = "_";
public final static String DATE_OF_LOGIN = "dateOfLogin";
public final static String EMPLOYEE_ID = "employeeId";
public final static String EMPLOYEE_NAME = "employeeName";
public final static String FIRST_LOGIN = "firstLogin";
public final static String LAST_LOGOUT = "lastLogout";
public final static String TOTAL_LOGIN_TIME = "totalLoginTime";
public final static String EMPLOYEE_COLLECTION = "EmployeesLoginData";
public final static String ID = "_id";
public final static String HYPHEN = "-";
public final static String ZERO = "0";
public final static String COLON = ":";
public final static String EMP_NAME_QUERY = "SELECT * FROM EMPLOYEES Where EMPLOYEECODE=?";
public final static String WORKING_EMPLOYEES = "SELECT * FROM EMPLOYEES WHERE EMPLOYEECODE NOT IN(SELECT UserId FROM DeviceLogs_12_2017 WHERE LogDate BETWEEN '2017-12-27 06:00:00' AND '2017-12-27 11:00:00') AND STATUS='Working'";
public final static String QUERY = "SELECT * FROM DeviceLogs_";
public final static String USERID_QUERY = "SELECT USERID FROM DeviceLogs_";
public final static String WHERE_COND = " WHERE LogDate between '";
public final static String AND_COND = " AND '";
public final static String SINGLE_QUOTE = "'";
public final static String ABESENT_QUERY = "SELECT * FROM EMPLOYEES WHERE EMPLOYEECODE NOT IN(";
public final static String ABESENT_QUERY1 = ") AND STATUS='Working' AND EMPLOYEECODE NOT LIKE 'del%' ";
public final static String ABESENT ="Absent";
}
package com.nisum.mytime.utils;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Component;
import com.itextpdf.text.Anchor;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.nisum.mytime.exception.handler.MyTimeException;
import com.nisum.mytime.model.EmpLoginData;
import com.nisum.mytime.service.EmployeeDataService;
@Component
public class PdfReportGenerator {
@Autowired
ResourceLoader resourceLoader;
@Autowired
private EmployeeDataService employeeDataBaseService;
public String generateEmployeeReport(long employeeId, String startDate, String endDate) throws MyTimeException {
String fileName = employeeId + "_" + startDate + "_" + endDate + ".pdf";
List<EmpLoginData> empLoginDetails = getEmployeeData(employeeId, startDate, endDate);
if (empLoginDetails.isEmpty()) {
return "No data available";
} else {
return createPDF(fileName, empLoginDetails, employeeId);
}
}
private List<EmpLoginData> getEmployeeData(long employeeId, String fromDate, String toDate) throws MyTimeException {
return employeeDataBaseService.fetchEmployeeLoginsBasedOnDates(employeeId, fromDate, toDate);
}
private String createPDF(String pdfFilename, List<EmpLoginData> empLoginDatas, long employeeId)
throws MyTimeException {
Document doc = null;
PdfWriter docWriter = null;
try {
doc = new Document();
File file = resourceLoader.getResource("/WEB-INF/reports/" + pdfFilename).getFile();
docWriter = PdfWriter.getInstance(doc, new FileOutputStream(file.getPath()));
setPdfDocumentProperties(doc);
doc.open();
preparePdfDocument(doc, empLoginDatas, employeeId);
} catch (Exception dex) {
MyTimeLogger.getInstance()
.error("DocumentException while generating {} " + pdfFilename + "" , dex);
throw new MyTimeException(dex.getMessage());
} finally {
if (doc != null) {
doc.close();
}
if (docWriter != null) {
docWriter.close();
}
}
return pdfFilename;
}
private void setPdfDocumentProperties(Document doc) {
doc.addAuthor("Nisum Consulting Pvt. Ltd.");
doc.addCreationDate();
doc.addProducer();
doc.addCreator("MyTime");
doc.addTitle("Nisum MyTime Employee Report");
doc.setPageSize(PageSize.A4);
}
private void preparePdfDocument(Document doc, List<EmpLoginData> empLoginDatas, long employeeId) throws DocumentException {
boolean isFirst = true;
Paragraph paragraph = new Paragraph();
Paragraph paragraph1 = new Paragraph();
float[] columnWidths = null;
PdfPTable table = null;
if(employeeId == 0){
columnWidths = new float[]{ 1f, 1f, 1f, 1f, 1f, 1f };
table = new PdfPTable(columnWidths);
table.setWidthPercentage(100f);
prepareTableHeader(table, "All");
}else{
columnWidths = new float[]{ 1f, 1f, 1f, 1f};
table = new PdfPTable(columnWidths);
table.setWidthPercentage(100f);
prepareTableHeader(table, "Single");
}
for (EmpLoginData data : empLoginDatas) {
if (isFirst && employeeId != 0) {
Anchor anchorTarget = new Anchor(
"Employee Id : " + data.getEmployeeId() + "\nEmployee Name : " + data.getEmployeeName());
isFirst = false;
paragraph1.add(anchorTarget);
}
if(employeeId == 0) prepareTableRow(table, data, "All");
else prepareTableRow(table, data, "Single");
}
paragraph.add(table);
doc.add(paragraph1);
paragraph.setSpacingBefore(1);
doc.add(paragraph);
}
private void prepareTableHeader(PdfPTable table, String tableFor) {
Font bfBold12 = new Font(FontFamily.TIMES_ROMAN, 12, Font.BOLD, new BaseColor(0, 0, 0));
if ("All".equals(tableFor)) {
insertCell(table, "ID ", Element.ALIGN_CENTER, 1, bfBold12);
insertCell(table, "Name ", Element.ALIGN_CENTER, 1, bfBold12);
}
insertCell(table, "Date ", Element.ALIGN_CENTER, 1, bfBold12);
insertCell(table, "Login Time", Element.ALIGN_CENTER, 1, bfBold12);
insertCell(table, "Logout Time", Element.ALIGN_CENTER, 1, bfBold12);
insertCell(table, "Total Hours", Element.ALIGN_CENTER, 1, bfBold12);
table.setHeaderRows(1);
}
private void prepareTableRow(PdfPTable table, EmpLoginData data, String tableFor) {
Font bf12 = new Font(FontFamily.TIMES_ROMAN, 12);
if ("All".equals(tableFor)) {
insertCell(table, (data.getEmployeeId() == null? "" : data.getEmployeeId()), Element.ALIGN_CENTER, 1, bf12);
insertCell(table, (data.getEmployeeName() == null? "" : data.getEmployeeName()), Element.ALIGN_CENTER, 1, bf12);
}
insertCell(table, (data.getDateOfLogin() == null? "" : data.getDateOfLogin()), Element.ALIGN_CENTER, 1, bf12);
insertCell(table, (data.getFirstLogin() == null? "" : data.getFirstLogin()), Element.ALIGN_CENTER, 1, bf12);
insertCell(table, (data.getLastLogout() == null? "" : data.getLastLogout()), Element.ALIGN_CENTER, 1, bf12);
insertCell(table, (data.getTotalLoginTime() == null? "" : data.getTotalLoginTime()), Element.ALIGN_CENTER, 1, bf12);
}
private void insertCell(PdfPTable table, String text, int align, int colspan, Font font) {
PdfPCell cell = new PdfPCell(new Phrase(text.trim(), font));
cell.setHorizontalAlignment(align);
cell.setColspan(colspan);
if ("".equalsIgnoreCase(text.trim())) {
cell.setMinimumHeight(10f);
}
table.addCell(cell);
}
}
server.port=8080
server.context-path=/myTime/
#Mongo DB configuration
spring.data.mongodb.host=192.168.10.177
#192.168.15.17
spring.data.mongodb.port=27017
spring.data.mongodb.database=mytimedb
spring.data.mongodb.username=mytime
spring.data.mongodb.password=nisum@123
#Local configuration
#spring.data.mongodb.host=localhost
#spring.data.mongodb.port=27017
#spring.data.mongodb.database=mytime
quartz.enabled=true
cron.expression=0 45 10/3 1/1 * ? *
myTimejob.frequency=10000
mytime.remoteFileTransfer.required=true
mytime.remote.directory=\\\C:\\Program Files (x86)\\eSSL\\eTimeTrackLite
mytime.attendance.fileName=eTimeTrackLite1.mdb
#Local configuration purpose
mytime.remote.connection=smb://MyTime:nisum@192.168.15.67/eTimeTrackLite/
mytime.localFile.directory=/home/nisum/Documents/
#Mail configuration
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=mytime.nisum@gmail.com
spring.mail.password=nisum@123
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
#Spring boot favicon related
spring.mvc.favicon.enabled = false
,--. ,--. ,--. ,--. ,--------. ,--. ,--. ,--. ,------.
| `.' | \ `.' / '--. .--' | | | `.' | | .---'
| |'.'| | '. / | | | | | |'.'| | | `--,
| | | | | | | | | | | | | | | `---.
`--' `--' `--' `--' `--' `--' `--' `------'
\ No newline at end of file
org.quartz.scheduler.instanceName=NisumTime
org.quartz.scheduler.instanceId=AUTO
org.quartz.threadPool.threadCount=5
org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore
\ No newline at end of file
This diff is collapsed.
myApp.controller("attendanceReportController", function($scope, $http, myFactory,exportUiGridService, $mdDialog, appConfig,$timeout) {
$scope.records = [];
$scope.empId = myFactory.getEmpId();
$scope.empName = myFactory.getEmpName();
$scope.empEmailId = myFactory.getEmpEmailId();
// Date picker related code
var today = new Date();
$scope.maxDate = today;
$scope.reportDate = today;
$scope.gridOptions = {
paginationPageSizes : [ 10, 20, 30, 40, 50, 100],
paginationPageSize : 10,
pageNumber: 1,
pageSize:10,
columnDefs : [
{field : 'employeeId',displayName: 'Employee Id', enableColumnMenu: false, enableSorting: true},
{field : 'employeeName',displayName: 'Employee Name', enableColumnMenu: false, enableSorting: false},
{field : 'ifPresent',displayName: 'Status', enableColumnMenu: false, enableSorting: false}
],
enableGridMenu: true,
enableSelectAll: true,
exporterMenuExcel:false,
exporterMenuCsv:false,
exporterCsvFilename: 'AbsentDetails.csv',
exporterExcelFilename:'AbsentDetails',
exporterPdfDefaultStyle: {fontSize: 9},
exporterPdfTableStyle: {margin: [30, 30, 30, 30]},
exporterPdfTableHeaderStyle: {fontSize: 10, bold: true, italics: true, color: 'red'},
exporterPdfHeader: { text: "Absent Details", style: 'headerStyle' },
exporterPdfFooter: function ( currentPage, pageCount ) {
return { text: currentPage.toString() + ' of ' + pageCount.toString(), style: 'footerStyle' };
},
exporterPdfCustomFormatter: function ( docDefinition ) {
docDefinition.styles.headerStyle = { fontSize: 22, bold: true };
docDefinition.styles.footerStyle = { fontSize: 10, bold: true };
return docDefinition;
},
exporterPdfOrientation: 'portrait',
exporterPdfPageSize: 'LETTER',
exporterPdfMaxGridWidth: 500,
exporterCsvLinkElement: angular.element(document.querySelectorAll(".custom-csv-link-location")),
onRegisterApi: function(gridApi){
$scope.gridApi = gridApi;
},
gridMenuCustomItems: [{
title: 'Export all data as EXCEL',
action: function ($event) {
exportUiGridService.exportToExcel('sheet 1', $scope.gridApi, 'all', 'all');
},
order: 110
},
{
title: 'Export visible data as EXCEL',
action: function ($event) {
exportUiGridService.exportToExcel('sheet 1', $scope.gridApi, 'visible', 'visible');
},
order: 111
}
]
};
$scope.gridOptions.data = [];
$scope.getEmployeePresent = function(type){
$mdDialog.hide();
if(type == "onload"){
showProgressDialog("Fetching data please wait...");
}
else if(type == "onclick" && $scope.reportDate < today){
showProgressDialog("Fetching data please wait...");
}else{
console.log("");
}
var reportDate = getFormattedDate($scope.reportDate);
$http({
method : "GET",
url : appConfig.appUri + "attendance/attendanciesReport/" + reportDate
}).then(function mySuccess(response) {
$mdDialog.hide();
if(response.data.length == 0){
$timeout(function(){showAlert('No data available');},600);
$scope.refreshPage();
}else{
$scope.gridOptions.data = response.data;
$scope.totalPresent = response.data[0].totalPresent;
$scope.totalAbsent = response.data[0].totalAbsent;
}
}, function myError(response) {
showAlert("Something went wrong while fetching data!!!");
$scope.refreshPage();
});
};
$scope.setSearchDate = function(dateValue){
$scope.reportDate = dateValue;
};
$scope.refreshPage = function(){
$scope.gridOptions.data = [];
$scope.reportDate = today;
$scope.totalPresent = "";
$scope.totalAbsent = "";
$scope.totalEmployees = "";
};
function getFormattedDate(date){
var day = date.getDate();
var month = date.getMonth() + 1;
var year = date.getFullYear();
return year + '-' + (month < 10 ? "0" + month : month) + '-'
+ (day < 10 ? "0" + day : day);
}
function showAlert(message) {
$mdDialog.show($mdDialog.alert().parent(
angular.element(document.querySelector('#popupContainer')))
.clickOutsideToClose(true).textContent(message).ariaLabel(
'Alert Dialog').ok('Ok'));
}
function showProgressDialog(msg){
$('#home').addClass('md-scroll-mask');
$mdDialog.show({
templateUrl: 'templates/progressDialog.html',
controller: ProgressController,
parent: angular.element(document.body),
clickOutsideToClose:false,
locals: {dataToPass:msg}
});
}
function ProgressController($scope, dataToPass) {
$scope.progressText = dataToPass;
}
});
This diff is collapsed.
myApp.controller("headerController",function($scope, myFactory, $compile, $mdDialog, $timeout){
$scope.empId = myFactory.getEmpId();
$scope.empName = myFactory.getEmpName();
$scope.empEmailId = myFactory.getEmpEmailId();
$scope.profilePicUrl = myFactory.getProfileUrl();
$scope.logout = function() {
showProgressDialog();
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
console.log("User signed out.");
});
auth2.disconnect();
//Clear if any values set to factory
var menuItems = [], designations = [], accounts = [], technologies = [], shifts = [];
myFactory.setEmpId("");
myFactory.setEmpName("");
myFactory.setEmpEmailId("");
myFactory.setEmpRole("");
myFactory.setMenuItems(menuItems);
myFactory.setTemplateUrl("");
myFactory.setProfileUrl("");
myFactory.setDesignations(designations);
myFactory.setAccounts(accounts);
myFactory.setTechnologies(technologies);
myFactory.setShifts(shifts);
$timeout(function(){redirectToLoginPage();},2000);
}
function redirectToLoginPage(){
var element = document.getElementById('home');
var path = "'templates/login.html'";
element.setAttribute("src", path);
var newTemplate = angular.element(element);
$('#home').html(newTemplate);
$compile($('#home'))($scope);
$mdDialog.hide();
}
function showProgressDialog(){
$('#home').addClass('md-scroll-mask');
$mdDialog.show({
templateUrl: 'templates/progressDialog.html',
controller: ProgressController,
parent: angular.element(document.body),
clickOutsideToClose:false
});
}
function ProgressController($scope) {
$scope.progressText = "Please wait!!! Logging out from My Time.";
}
});
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment