Commit 1d7bfc48 authored by ='s avatar =

Merge branch 'master' into hieunv

# Conflicts:
#	src/main/resources/application.properties
#	src/main/resources/public/index.html
#	src/main/resources/public/js/app.js
#	src/main/resources/public/layout/layout3.html
parents 8647db25 fcb3554c
...@@ -15,9 +15,9 @@ ...@@ -15,9 +15,9 @@
<description>Quản trị văn phòng sử dụng springboot API</description> <description>Quản trị văn phòng sử dụng springboot API</description>
<properties> <properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> </properties>
<dependencies> <dependencies>
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId> <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId> <artifactId>spring-boot-starter-mail</artifactId>
...@@ -35,23 +36,33 @@ ...@@ -35,23 +36,33 @@
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version> <scope>runtime</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>log4j</groupId> <groupId>log4j</groupId>
<artifactId>log4j</artifactId> <artifactId>log4j</artifactId>
<version>1.2.17</version> <version>1.2.17</version>
</dependency> </dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.security</groupId>-->
<!-- <artifactId>spring-security-config</artifactId>-->
<!-- <version>${spring-security.version}</version>-->
<!-- <scope>runtime</scope>-->
<!-- </dependency>-->
</dependencies> </dependencies>
<build> <build>
......
...@@ -2,7 +2,9 @@ package com.itsol.quantrivanphong; ...@@ -2,7 +2,9 @@ package com.itsol.quantrivanphong;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.web.filter.ShallowEtagHeaderFilter;
@SpringBootApplication @SpringBootApplication
@EnableJpaAuditing @EnableJpaAuditing
...@@ -11,5 +13,9 @@ public class QuantrivanphongApplication { ...@@ -11,5 +13,9 @@ public class QuantrivanphongApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(QuantrivanphongApplication.class, args); SpringApplication.run(QuantrivanphongApplication.class, args);
} }
@Bean
public ShallowEtagHeaderFilter shallowEtagHeaderFilter() {
return new ShallowEtagHeaderFilter();
}
} }
...@@ -13,12 +13,15 @@ public class CatalogiBusiness { ...@@ -13,12 +13,15 @@ public class CatalogiBusiness {
@Autowired @Autowired
private CatalogiRepository catalogiRepository; private CatalogiRepository catalogiRepository;
public Optional<Catalogi> findById(int id){ public Catalogi findCatalogiById(int id){
return catalogiRepository.findById(id); return catalogiRepository.findCatalogiById(id);
} }
public List<Catalogi> findAllCatalogi(){ public List<Catalogi> findAllCatalogi(){
return catalogiRepository.findAllCatalogi(); return catalogiRepository.findAllCatalogi();
} }
public Catalogi save(Catalogi catalogi){
return catalogiRepository.save(catalogi);
}
} }
...@@ -18,24 +18,32 @@ public class NewsBusiness { ...@@ -18,24 +18,32 @@ public class NewsBusiness {
return newsRepository.findAllNews(); return newsRepository.findAllNews();
} }
// Find News By News Id // Find News By News Id
public Optional<News> findById(int newsId){ public News findNewsById(int newsId){
return newsRepository.findById(newsId); return newsRepository.findNewsById(newsId);
} }
//Find news By Employee Id //Find news By Employee Id
public List<News> findByEmployeeId(int employeeId){ public List<News> findByEmployeeId(int employeeId){
return newsRepository.findByEmployeeId(employeeId); return newsRepository.findByEmployeeId(employeeId);
} }
// FInd 4 latest news by câtlogiId
public List<News> findLatestNews(int catalogiId){
return newsRepository.getLatestNews(catalogiId);
}
// Find 4 latest news
public List<News> findAllLatestNews(){
return newsRepository.getAllLatestNews();
}
// Find news By Catalogi // Find news By Catalogi
public List<News> findByCatalogiId(int catalogiId){ public List<News> findByCatalogiId(int catalogiId){
return newsRepository.findByCatalogiId(catalogiId); return newsRepository.findByCatalogiId(catalogiId);
} }
public Optional<News> findByIdAndEmployeeId(int id, int employeeId){ public News findNewsByIdAndEmployeeId(int id, int employeeId){
return newsRepository.findByIdAndEmployeeId(id,employeeId); return newsRepository.findByIdAndEmployeeId(id,employeeId);
} }
public Optional<News> findByIdAndAndCatalogiId(int id, int catalogiId){ public News findNewsByIdAndAndCatalogiId(int id, int catalogiId){
return newsRepository.findByIdAndAndCatalogiId(id,catalogiId); return newsRepository.findByIdAndAndCatalogiId(id,catalogiId);
} }
...@@ -53,12 +61,15 @@ public class NewsBusiness { ...@@ -53,12 +61,15 @@ public class NewsBusiness {
return updateNews; return updateNews;
} }
public String deleteNews(int employeeId,int newsId){ //
newsRepository.findByIdAndEmployeeId(employeeId,newsId).map(news ->{ public String deleteNews(int newsId,int employeeId){
newsRepository.delete(news); News news = newsRepository.findByIdAndEmployeeId(newsId,employeeId);
return "ok"; if(news == null){
}).orElseThrow(() -> new ResourceNotFoundException("News" ,"newsId",newsId)); throw new ResourceNotFoundException("News" ,"newsId",newsId);
return "Ok"; }
newsRepository.delete(news);
return "ok";
} }
} }
...@@ -5,12 +5,13 @@ import com.itsol.quantrivanphong.exception.ResourceNotFoundException; ...@@ -5,12 +5,13 @@ import com.itsol.quantrivanphong.exception.ResourceNotFoundException;
import com.itsol.quantrivanphong.model.Catalogi; import com.itsol.quantrivanphong.model.Catalogi;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PathVariable;
import javax.validation.Valid;
import java.util.List; import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/api")
public class CatalogiController { public class CatalogiController {
@Autowired @Autowired
private CatalogiBusiness catalogiBusiness; private CatalogiBusiness catalogiBusiness;
...@@ -22,7 +23,16 @@ public class CatalogiController { ...@@ -22,7 +23,16 @@ public class CatalogiController {
@GetMapping("/catalogies/{catalogiId}") @GetMapping("/catalogies/{catalogiId}")
public Catalogi getCatalogiById(@PathVariable(value = "catalogiId") int catalogiId){ public Catalogi getCatalogiById(@PathVariable(value = "catalogiId") int catalogiId){
return catalogiBusiness.findById(catalogiId).orElseThrow(()-> new ResourceNotFoundException("Catalogi","catalogiId",catalogiId)); Catalogi catalogi = catalogiBusiness.findCatalogiById(catalogiId);
if(catalogi == null) {
throw new ResourceNotFoundException("Catalogi", "catalogiId", catalogiId);
}
return catalogi;
}
@PostMapping("/catalogi")
public Catalogi createCatalogi(@Valid@RequestBody Catalogi catalogi) {
return catalogiBusiness.save(catalogi);
} }
} }
...@@ -5,15 +5,19 @@ import com.itsol.quantrivanphong.access.homepage.business.CatalogiBusiness; ...@@ -5,15 +5,19 @@ import com.itsol.quantrivanphong.access.homepage.business.CatalogiBusiness;
import com.itsol.quantrivanphong.access.homepage.business.NewsBusiness; import com.itsol.quantrivanphong.access.homepage.business.NewsBusiness;
import com.itsol.quantrivanphong.exception.ResourceNotFoundException; import com.itsol.quantrivanphong.exception.ResourceNotFoundException;
import com.itsol.quantrivanphong.manager.employee.business.EmployeeBusiness; import com.itsol.quantrivanphong.manager.employee.business.EmployeeBusiness;
import com.itsol.quantrivanphong.model.Catalogi;
import com.itsol.quantrivanphong.model.Employee; import com.itsol.quantrivanphong.model.Employee;
import com.itsol.quantrivanphong.model.News; import com.itsol.quantrivanphong.model.News;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List; import java.util.List;
@RestController @RestController
@RequestMapping("/api") @RequestMapping("/api")
public class NewsController { public class NewsController {
...@@ -31,24 +35,56 @@ public class NewsController { ...@@ -31,24 +35,56 @@ public class NewsController {
return ResponseEntity.ok(newsBusiness.findAllNews()); return ResponseEntity.ok(newsBusiness.findAllNews());
} }
@GetMapping("/news/{newsId}")
public News getNewsById(@PathVariable(value = "newsId") int newsId){
return newsBusiness.findNewsById(newsId);
}
// get news by employeeId // get news by employeeId
@GetMapping("/news/employees/{employeeId}") @GetMapping("/employees/{employeeId}/news")
public List<News> getAllNewsByEmployeeId(@PathVariable(value = "employeeId") int employeeId) { public List<News> getAllNewsByEmployeeId(@PathVariable(value = "employeeId") int employeeId) {
return newsBusiness.findByEmployeeId(employeeId); return newsBusiness.findByEmployeeId(employeeId);
} }
// get News by catalogiId // get News by catalogiId
@GetMapping("/news/catalogi/{catalogiId}") @GetMapping("/catalogi/{catalogiId}/news")
public List<News> getAllNewsByCatalogiId(@PathVariable(value="catalogiId") int catalogiId){ public List<News> getAllNewsByCatalogiId(@PathVariable(value="catalogiId") int catalogiId){
return newsBusiness.findByCatalogiId(catalogiId); return newsBusiness.findByCatalogiId(catalogiId);
} }
// get LatestNews by catalogiId
@GetMapping("/catalogi/{catalogiId}/latestNews")
public List<News> getLatestNews(@PathVariable(value="catalogiId") int catalogiId){
return newsBusiness.findLatestNews(catalogiId);
}
// create news by employeesId //get Latest news
@PostMapping("/news/employees/{employeeId}") @GetMapping("/catalogi/latestNews")
public List<News> getAllLatestNews(){
return newsBusiness.findAllLatestNews();
}
@GetMapping("/employees/{employeeId}/news/{newsId}")
public News getAllNewsByEmployeeId(@PathVariable(value = "employeeId") int employeeId,
@PathVariable (value = "newsId") int newsId) {
return newsBusiness.findNewsByIdAndEmployeeId(newsId,employeeId);
}
// create news by employeesId, categoriId
@PostMapping("/employees/{employeeId}/catalogies/{catalogiId}/news")
public News createNews(@PathVariable (value = "employeeId") int employeeId, public News createNews(@PathVariable (value = "employeeId") int employeeId,
@PathVariable (value = "catalogiId") int catalogiId,
@Valid @RequestBody News news) { @Valid @RequestBody News news) {
Employee employee = employeeBusiness.findById(employeeId); Employee employee = employeeBusiness.findById(employeeId);
Catalogi catalogi = catalogiBusiness.findCatalogiById(catalogiId);
if(employee == null){
throw new ResourceNotFoundException("Employee" ,"employeeId",employeeId);
}
if(catalogi==null){
throw new ResourceNotFoundException("Catalogi" ,"catalogiId",catalogiId);
}
news.setEmployee(employee); news.setEmployee(employee);
news.setCatalogi(catalogi);
return newsBusiness.save(news); return newsBusiness.save(news);
} }
...@@ -57,22 +93,22 @@ public class NewsController { ...@@ -57,22 +93,22 @@ public class NewsController {
public News updateNews(@PathVariable (value = "employeeId") int employeeId, public News updateNews(@PathVariable (value = "employeeId") int employeeId,
@PathVariable (value = "newsId") int newsId, @PathVariable (value = "newsId") int newsId,
@Valid @RequestBody News newsRequest) { @Valid @RequestBody News newsRequest) {
if(employeeBusiness.findById(employeeId) == null) { if(employeeBusiness.findById(employeeId)==null) {
throw new ResourceNotFoundException("Employee" ,"employeeId",employeeId); throw new ResourceNotFoundException("Employee" ,"employeeId",employeeId);
} }
if (!newsBusiness.findById(newsId).isPresent()) { if (newsBusiness.findNewsById(newsId)== null) {
throw new ResourceNotFoundException("News", "id", newsId); throw new ResourceNotFoundException("News", "id", newsId);
} }
return newsBusiness.updateNews(newsId,newsRequest); return newsBusiness.updateNews(newsId,newsRequest);
} }
//delete news by employeeId and newsId //delete news by employeeId and newsId
@DeleteMapping("/employees/{employeeId}/news/{newsId}") @DeleteMapping("/HR/catagori/{catagoriId}/news/{newsId}")
public ResponseEntity<?> deleteNews(@PathVariable (value = "employeeId") int employeeId, public ResponseEntity<?> deleteNews(@PathVariable (value = "catagoriId") int catagoriId,
@PathVariable (value = "newsId") int newsId) { @PathVariable (value = "newsId") int newsId) {
if(!newsBusiness.findByIdAndEmployeeId(employeeId,newsId).isPresent()){ if(newsBusiness.findNewsByIdAndAndCatalogiId(newsId,catagoriId)== null){
throw new ResourceNotFoundException("News","newsId",newsId); throw new ResourceNotFoundException("News","newsId",newsId);
} }
return ResponseEntity.ok(newsBusiness.deleteNews(employeeId,newsId)); return ResponseEntity.ok(newsBusiness.deleteNews(newsId,catagoriId));
} }
} }
...@@ -11,7 +11,6 @@ import java.util.List; ...@@ -11,7 +11,6 @@ import java.util.List;
public interface CatalogiRepository extends JpaRepository<Catalogi, Integer> { public interface CatalogiRepository extends JpaRepository<Catalogi, Integer> {
@Query("SELECT u from Catalogi u") @Query("SELECT u from Catalogi u")
List<Catalogi> findAllCatalogi(); List<Catalogi> findAllCatalogi();
@Query("SELECT u FROM Catalogi u where u.id=:id")
// @Query("SELECT u FROM Catalogi u where u.id=:id") Catalogi findCatalogiById(int id);
// Catalogi findCatalogiById(int id);
} }
...@@ -14,8 +14,15 @@ public interface NewsRepository extends JpaRepository<News, Integer> { ...@@ -14,8 +14,15 @@ public interface NewsRepository extends JpaRepository<News, Integer> {
List<News> findAllNews(); List<News> findAllNews();
@Query("SELECT u FROM News u where u.id=:id") @Query("SELECT u FROM News u where u.id=:id")
News findNewsById(int id); News findNewsById(int id);
@Query(value="select * from News c where c.catalogi_id = ? ORDER BY c.created_at DESC limit 4",nativeQuery = true)
List<News> getLatestNews(int catalogiId);
@Query(value="select * from News c ORDER BY c.created_at DESC limit 4",nativeQuery = true)
List<News> getAllLatestNews();
List<News> findByEmployeeId(int employeeId); List<News> findByEmployeeId(int employeeId);
List<News> findByCatalogiId(int catalogiId); List<News> findByCatalogiId(int catalogiId);
Optional<News> findByIdAndEmployeeId(int id,int employeeId); News findByIdAndEmployeeId(int id,int employeeId);
Optional<News> findByIdAndAndCatalogiId(int id,int catalogiId); News findByIdAndAndCatalogiId(int id,int catalogiId);
} }
package com.itsol.quantrivanphong.manager.employee.business; package com.itsol.quantrivanphong.manager.employee.business;
import com.itsol.quantrivanphong.model.Employee; import com.itsol.quantrivanphong.model.Employee;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.validation.Validator; import org.springframework.validation.Validator;
import java.util.List; import java.util.List;
public interface EmployeeBusiness extends Validator { public interface EmployeeBusiness extends Validator {
List<Employee> findAll(); List<Employee> findAll();
...@@ -21,4 +24,8 @@ public interface EmployeeBusiness extends Validator { ...@@ -21,4 +24,8 @@ public interface EmployeeBusiness extends Validator {
void deleteById(int id); void deleteById(int id);
boolean confirmEmployee(Employee employee); boolean confirmEmployee(Employee employee);
public Page<Employee> findAll(Pageable pageable);
} }
...@@ -4,6 +4,8 @@ import com.itsol.quantrivanphong.manager.employee.business.EmployeeBusiness; ...@@ -4,6 +4,8 @@ import com.itsol.quantrivanphong.manager.employee.business.EmployeeBusiness;
import com.itsol.quantrivanphong.manager.employee.repository.EmployeeRepository; import com.itsol.quantrivanphong.manager.employee.repository.EmployeeRepository;
import com.itsol.quantrivanphong.model.Employee; import com.itsol.quantrivanphong.model.Employee;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.Errors; import org.springframework.validation.Errors;
...@@ -15,7 +17,8 @@ public class EmployeeBusinessImpl implements EmployeeBusiness { ...@@ -15,7 +17,8 @@ public class EmployeeBusinessImpl implements EmployeeBusiness {
private EmployeeRepository employeeRepository; private EmployeeRepository employeeRepository;
@Override @Override
public List<Employee> findAll() { public List<Employee> findAll()
{
return employeeRepository.findAll(); return employeeRepository.findAll();
} }
...@@ -41,7 +44,7 @@ public class EmployeeBusinessImpl implements EmployeeBusiness { ...@@ -41,7 +44,7 @@ public class EmployeeBusinessImpl implements EmployeeBusiness {
@Override @Override
public void save(Employee employee) { public void save(Employee employee) {
employeeRepository.save(employee); employeeRepository.save(employee);
} }
@Override @Override
...@@ -54,6 +57,12 @@ public class EmployeeBusinessImpl implements EmployeeBusiness { ...@@ -54,6 +57,12 @@ public class EmployeeBusinessImpl implements EmployeeBusiness {
return true; return true;
} }
@Override
public Page<Employee> findAll(Pageable pageable) {
return employeeRepository.findAll(pageable);
}
@Override @Override
public boolean supports(Class<?> clazz) { public boolean supports(Class<?> clazz) {
return Employee.class.isAssignableFrom(clazz); return Employee.class.isAssignableFrom(clazz);
......
package com.itsol.quantrivanphong.manager.employee.controller; package com.itsol.quantrivanphong.manager.employee.controller;
import com.itsol.quantrivanphong.manager.employee.business.EmployeeBusiness; import com.itsol.quantrivanphong.manager.employee.business.EmployeeBusiness;
import com.itsol.quantrivanphong.manager.employee.util.PaginationUtil;
import com.itsol.quantrivanphong.model.Employee; import com.itsol.quantrivanphong.model.Employee;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
...@@ -11,9 +15,12 @@ import org.springframework.web.util.UriComponentsBuilder; ...@@ -11,9 +15,12 @@ import org.springframework.web.util.UriComponentsBuilder;
import java.util.List; import java.util.List;
@RestController @RestController
public class EmployeeController { public class EmployeeController {
Logger logger = Logger.getLogger(EmployeeController.class);
@Autowired @Autowired
//Retrieve Employee by id //Retrieve Employee by id
private EmployeeBusiness employeeBusiness; private EmployeeBusiness employeeBusiness;
...@@ -26,7 +33,7 @@ public class EmployeeController { ...@@ -26,7 +33,7 @@ public class EmployeeController {
System.out.println("Employee with id : " + id + " not found"); System.out.println("Employee with id : " + id + " not found");
return new ResponseEntity<Employee>(HttpStatus.NOT_FOUND); return new ResponseEntity<Employee>(HttpStatus.NOT_FOUND);
} }
return new ResponseEntity<Employee>( employee ,HttpStatus.OK); return new ResponseEntity<Employee>(employee, HttpStatus.OK);
} }
//Retrieve all employee //Retrieve all employee
...@@ -36,7 +43,7 @@ public class EmployeeController { ...@@ -36,7 +43,7 @@ public class EmployeeController {
if (employees == null) { if (employees == null) {
return new ResponseEntity<List<Employee>>(HttpStatus.NO_CONTENT); return new ResponseEntity<List<Employee>>(HttpStatus.NO_CONTENT);
} }
return new ResponseEntity<List<Employee>>( employees , null ,HttpStatus.OK); return new ResponseEntity<List<Employee>>(employees, null, HttpStatus.OK);
} }
//Update a Employee //Update a Employee
...@@ -64,32 +71,43 @@ public class EmployeeController { ...@@ -64,32 +71,43 @@ public class EmployeeController {
currentEmployee.setGraduationYear(employee.getGraduationYear()); currentEmployee.setGraduationYear(employee.getGraduationYear());
currentEmployee.setPicture(employee.getPicture()); currentEmployee.setPicture(employee.getPicture());
employeeBusiness.save(currentEmployee); employeeBusiness.save(currentEmployee);
return new ResponseEntity<Employee>( currentEmployee ,HttpStatus.OK); return new ResponseEntity<Employee>(currentEmployee, HttpStatus.OK);
} }
//Create a Employee //Create a Employee
@RequestMapping(value = "/list_employee", method = RequestMethod.POST) @RequestMapping(value = "/list_employee", method = RequestMethod.POST)
public ResponseEntity<Void> createEmployee(@RequestBody Employee employee, public ResponseEntity<Void> createEmployee(@RequestBody Employee employee,
UriComponentsBuilder uriComponentsBuilder){ UriComponentsBuilder uriComponentsBuilder) {
System.out.println("Create Employee "+ employee.getUsername()); System.out.println("Create Employee " + employee.getUsername());
employeeBusiness.save(employee); employeeBusiness.save(employee);
HttpHeaders httpHeaders = new HttpHeaders(); HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setLocation(uriComponentsBuilder.path("/employee/{id}").buildAndExpand(employee.getId()).toUri()); httpHeaders.setLocation(uriComponentsBuilder.path("/employee/{id}").buildAndExpand(employee.getId()).toUri());
return new ResponseEntity<Void>( httpHeaders ,HttpStatus.CREATED); return new ResponseEntity<Void>(httpHeaders, HttpStatus.CREATED);
} }
//Delete a Employee //Delete a Employee
@RequestMapping(value = "/employee/{id}" , method = RequestMethod.DELETE) @RequestMapping(value = "/employee/{id}", method = RequestMethod.DELETE)
public ResponseEntity<Employee> deleteEmployee(@PathVariable("id") int id){ public ResponseEntity<Employee> deleteEmployee(@PathVariable("id") int id) {
System.out.println("Fetching and deleting Employee with id :" + id ); System.out.println("Fetching and deleting Employee with id :" + id);
Employee employee = employeeBusiness.findById(id); Employee employee = employeeBusiness.findById(id);
if(employee == null) { if (employee == null) {
System.out.println("Unable to delete. Employee with id :" + id + "not found"); System.out.println("Unable to delete. Employee with id :" + id + "not found");
return new ResponseEntity<Employee>(HttpStatus.NOT_FOUND); return new ResponseEntity<Employee>(HttpStatus.NOT_FOUND);
} }
employeeBusiness.deleteById(id); employeeBusiness.deleteById(id);
return new ResponseEntity<Employee>(HttpStatus.NO_CONTENT); return new ResponseEntity<Employee>(HttpStatus.NO_CONTENT);
}
// paging
@RequestMapping( value ="/paging_employee",params = {"page","size"}, method = RequestMethod.GET)
public ResponseEntity<List<Employee>> getAllEmployee(Pageable pageable) {
logger.info("Rest request to get a page of Employee");
Page<Employee> page = employeeBusiness.findAll(pageable);
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/paging_employee");
return ResponseEntity.ok().headers(headers).body(page.getContent());
} }
......
package com.itsol.quantrivanphong.manager.employee.repository; package com.itsol.quantrivanphong.manager.employee.repository;
import com.itsol.quantrivanphong.model.Employee; import com.itsol.quantrivanphong.model.Employee;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -16,7 +18,7 @@ public interface EmployeeRepository extends JpaRepository<Employee,Integer > { ...@@ -16,7 +18,7 @@ public interface EmployeeRepository extends JpaRepository<Employee,Integer > {
public Employee findEmployeeByUsernameAndPassword(String username, String password); public Employee findEmployeeByUsernameAndPassword(String username, String password);
Employee findByEmailAddress(String emailAddress); Employee findByEmailAddress(String emailAddress);
Page<Employee> findByFirstName(String firstName, Pageable pageable);
//================================================================================================================== //==================================================================================================================
......
package com.itsol.quantrivanphong.manager.employee.util;
import org.springframework.data.domain.Page;
import org.springframework.http.HttpHeaders;
import org.springframework.web.util.UriComponentsBuilder;
public final class PaginationUtil {
private PaginationUtil() {
}
public static HttpHeaders generatePaginationHttpHeaders(Page page, String baseUrl) {
HttpHeaders headers = new HttpHeaders();
headers.add("X-Total-Count", "" + Long.toString(page.getTotalElements()));
String link = "";
if ((page.getNumber() + 1) < page.getTotalPages()) {
link = "<" + generateUri(baseUrl, page.getNumber() + 1, page.getSize()) + ">; rel=\"next\",";
}
// prev link
if ((page.getNumber()) > 0) {
link += "<" + generateUri(baseUrl, page.getNumber() - 1, page.getSize()) + ">; rel=\"prev\",";
}
// last and first link
int lastPage = 0;
if (page.getTotalPages() > 0) {
lastPage = page.getTotalPages() - 1;
}
link += "<" + generateUri(baseUrl, lastPage, page.getSize()) + ">; rel=\"last\",";
link += "<" + generateUri(baseUrl, 0, page.getSize()) + ">; rel=\"first\"";
headers.add(HttpHeaders.LINK, link);
return headers;
}
private static String generateUri(String baseUrl, int page, int size) {
return UriComponentsBuilder.fromUriString(baseUrl).queryParam("page", page).queryParam("size", size).toUriString();
}
}
...@@ -5,6 +5,8 @@ import com.itsol.quantrivanphong.report.issue.common.AbstractEntityManagerDao; ...@@ -5,6 +5,8 @@ import com.itsol.quantrivanphong.report.issue.common.AbstractEntityManagerDao;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
public class EmployeeRepositoryImpl extends AbstractEntityManagerDao<Integer, Employee> { public class EmployeeRepositoryImpl extends AbstractEntityManagerDao<Integer, Employee> {
private Logger logger = Logger.getLogger(EmployeeRepositoryImpl.class); private Logger logger = Logger.getLogger(EmployeeRepositoryImpl.class);
......
package com.itsol.quantrivanphong.model; package com.itsol.quantrivanphong.model;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.itsol.quantrivanphong.audit.DateAudit;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*; import javax.persistence.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
@Entity @Entity
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"},
allowGetters = true)
@Table(name = "catalogi") @Table(name = "catalogi")
public class Catalogi { public class Catalogi extends DateAudit {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
...@@ -30,10 +37,8 @@ public class Catalogi { ...@@ -30,10 +37,8 @@ public class Catalogi {
@Column(name = "descriptions") @Column(name = "descriptions")
private String descriptions; private String descriptions;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "catalogi")
@JsonIgnore private List<News> news = new ArrayList<>();
@OneToMany(mappedBy = "catalogi", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<News> newsList = new ArrayList<>();
} }
...@@ -30,6 +30,7 @@ public class Employee { ...@@ -30,6 +30,7 @@ public class Employee {
@Column(name = "password", length = 128) @Column(name = "password", length = 128)
private String password; private String password;
@Column(name = "confirm_password") @Column(name = "confirm_password")
@Size(min = 5, max = 20) @Size(min = 5, max = 20)
private String confirmPassword; private String confirmPassword;
...@@ -79,10 +80,11 @@ public class Employee { ...@@ -79,10 +80,11 @@ public class Employee {
@Column(name = "status", nullable = false) @Column(name = "status", nullable = false)
private boolean status; private boolean status;
@JsonIgnore // @JsonIgnore
@OneToMany(mappedBy = "employee", fetch = FetchType.LAZY, cascade = CascadeType.ALL) @OneToMany(mappedBy = "employee", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<News> newsList = new ArrayList<>(); private List<News> newsList = new ArrayList<>();
@JsonIgnore @JsonIgnore
@OneToMany(mappedBy = "employee", fetch = FetchType.LAZY, cascade = CascadeType.ALL) @OneToMany(mappedBy = "employee", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<LeaveForm> leaveFormList = new ArrayList<>(); private List<LeaveForm> leaveFormList = new ArrayList<>();
......
package com.itsol.quantrivanphong.model; package com.itsol.quantrivanphong.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.itsol.quantrivanphong.audit.DateAudit; import com.itsol.quantrivanphong.audit.DateAudit;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
import org.springframework.data.jpa.domain.support.AuditingEntityListener; import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*; import javax.persistence.*;
...@@ -37,15 +40,18 @@ public class News extends DateAudit { ...@@ -37,15 +40,18 @@ public class News extends DateAudit {
@Column(name = "status") @Column(name = "status")
private boolean status; private boolean status;
// @JsonIgnore
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.LAZY, optional = false)
// @JoinColumn(name = "catalogid", nullable = false) @JoinColumn(name = "catalogi_id", nullable = false)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private Catalogi catalogi; private Catalogi catalogi;
// @JsonIgnore @ManyToOne(fetch = FetchType.LAZY, optional = false)
@ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "user_id", nullable = false)
// @JoinColumn(name = "employeeid", nullable = false) @OnDelete(action = OnDeleteAction.CASCADE)
private Employee employee; @JsonIgnore
private Employee employee;
......
...@@ -26,11 +26,11 @@ public class LeaveFormBusiness { ...@@ -26,11 +26,11 @@ public class LeaveFormBusiness {
return leaveFormRepository.findAll(); return leaveFormRepository.findAll();
} }
public String insertLeaveForm(int employee_Id, LeaveFormDTO leaveFormDTO, int leavetype_Id) { public String addLeaveForm(LeaveFormDTO leaveFormDTO) {
String message; String message;
Employee employee = employeeRepository.findEmployeeById(employee_Id); Employee employee = employeeRepository.findEmployeeById(leaveFormDTO.getEmployeeId());
LeaveType leaveType = leaveTypeRepository.findLeaveTypeById(leavetype_Id); LeaveType leaveType = leaveTypeRepository.findLeaveTypeById(leaveFormDTO.getLeaveTypeId());
if (employee != null) { if (employee != null) {
if (leaveType != null) { if (leaveType != null) {
...@@ -56,36 +56,32 @@ public class LeaveFormBusiness { ...@@ -56,36 +56,32 @@ public class LeaveFormBusiness {
} }
@Transactional @Transactional
public String deleteLeaveForm(int emloyee_Id, int leaveform_Id) { public String deleteLeaveForm(int leaveFormId) {
String message; String message;
Employee employee = employeeRepository.findEmployeeById(emloyee_Id); LeaveForm leaveForm = leaveFormRepository.findLeaveFormById(leaveFormId);
LeaveForm leaveForm = leaveFormRepository.findLeaveFormByEmployeeAndId(employee, leaveform_Id);
if (employee != null) { if (leaveForm != null) {
if (leaveForm != null) { leaveFormRepository.delete(leaveForm);
leaveFormRepository.delete(leaveForm); if (leaveFormRepository.findLeaveFormById(leaveFormId) != null) {
if (leaveFormRepository.findLeaveFormByEmployeeAndId(employee, leaveform_Id) != null) { message = "Delete failed!";
message = "Delete failed!";
} else {
message = "Delete success!";
}
} else { } else {
message = "Leave Form does not exist"; message = "Delete success!";
} }
} else { } else {
message = "Employee does not exist"; message = "Leave Form does not exist";
} }
return message; return message;
} }
@Transactional @Transactional
public String updateLeaveForm(int employee_Id, int leavetype_Id, int leaveform_Id, LeaveFormDTO leaveFormDTO) { public String updateLeaveForm(LeaveFormDTO leaveFormDTO) {
String message; String message;
Employee employee = employeeRepository.findEmployeeById(employee_Id); Employee employee = employeeRepository.findEmployeeById(leaveFormDTO.getEmployeeId());
LeaveType leaveType = leaveTypeRepository.findLeaveTypeById(leavetype_Id); LeaveType leaveType = leaveTypeRepository.findLeaveTypeById(leaveFormDTO.getLeaveTypeId());
LeaveForm leaveForm = leaveFormRepository.findLeaveFormByEmployeeAndLeaveTypeAndId(employee, leaveType, leaveform_Id); LeaveForm leaveForm = leaveFormRepository.findLeaveFormByEmployeeAndLeaveTypeAndId(employee, leaveType, leaveFormDTO.getId());
if (leaveType != null) { if (leaveType != null) {
if (leaveForm != null) { if (leaveForm != null) {
int i = leaveFormRepository.updateLeaveForm(leaveFormDTO.getTitle(), leaveFormDTO.getContent(), leaveform_Id); int i = leaveFormRepository.updateLeaveForm(leaveFormDTO.getTitle(), leaveFormDTO.getContent(), leaveFormDTO.getId());
if (i == 1) { if (i == 1) {
message = "Update success"; message = "Update success";
} else { } else {
...@@ -102,17 +98,19 @@ public class LeaveFormBusiness { ...@@ -102,17 +98,19 @@ public class LeaveFormBusiness {
} }
@Transactional @Transactional
public String updateLeaveFormStatus(int employee_Id, int leavetype_Id, int leaveform_Id) { public String updateLeaveFormStatus(int leaveformId) {
String message; String message;
Employee employee = employeeRepository.findEmployeeById(employee_Id); LeaveForm leaveForm = leaveFormRepository.findLeaveFormById(leaveformId);
LeaveType leaveType = leaveTypeRepository.findLeaveTypeById(leavetype_Id);
LeaveForm leaveForm = leaveFormRepository.findLeaveFormByEmployeeAndLeaveTypeAndId(employee, leaveType, leaveform_Id);
if (leaveForm != null) { if (leaveForm != null) {
int i = leaveFormRepository.updateLeaveFormStatus(leaveform_Id); if (leaveForm.isStatus()) {
if (i == 1) { message = "Status can not change";
message = "Update status success";
} else { } else {
message = "Update status failed"; int i = leaveFormRepository.updateLeaveFormStatus(leaveformId);
if (i == 1) {
message = "Update status success";
} else {
message = "Update status failed";
}
} }
} else { } else {
message = "Leave Form does not exist"; message = "Leave Form does not exist";
...@@ -121,8 +119,8 @@ public class LeaveFormBusiness { ...@@ -121,8 +119,8 @@ public class LeaveFormBusiness {
return message; return message;
} }
public List<LeaveForm> leaveFormById(int employee_Id) { public List<LeaveForm> showLeaveFormByEmployeeId(int employeeId) {
Employee employee = employeeRepository.findEmployeeById(employee_Id); Employee employee = employeeRepository.findEmployeeById(employeeId);
if (employee != null) { if (employee != null) {
if (leaveFormRepository.showLeaveFormById(employee) != null) { if (leaveFormRepository.showLeaveFormById(employee) != null) {
return leaveFormRepository.showLeaveFormById(employee); return leaveFormRepository.showLeaveFormById(employee);
...@@ -133,4 +131,8 @@ public class LeaveFormBusiness { ...@@ -133,4 +131,8 @@ public class LeaveFormBusiness {
return null; return null;
} }
} }
public LeaveForm showLeaveFormById(int id) {
return leaveFormRepository.findLeaveFormById(id);
}
} }
...@@ -5,10 +5,10 @@ import com.itsol.quantrivanphong.report.leaveform.business.LeaveFormBusiness; ...@@ -5,10 +5,10 @@ import com.itsol.quantrivanphong.report.leaveform.business.LeaveFormBusiness;
import com.itsol.quantrivanphong.report.leaveform.dto.LeaveFormDTO; import com.itsol.quantrivanphong.report.leaveform.dto.LeaveFormDTO;
import com.itsol.quantrivanphong.model.LeaveForm; import com.itsol.quantrivanphong.model.LeaveForm;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List; import java.util.List;
@RestController @RestController
...@@ -17,59 +17,63 @@ public class LeaveFormController { ...@@ -17,59 +17,63 @@ public class LeaveFormController {
@Autowired @Autowired
LeaveFormBusiness leaveFormBusiness; LeaveFormBusiness leaveFormBusiness;
@GetMapping(path = "/leaveform") @GetMapping(path = "/leaveform/show")
public ResponseEntity<List<LeaveForm>> showAllLeaveForm() { public ResponseEntity<List<LeaveForm>> showAllLeaveForm() {
return ResponseEntity.ok(leaveFormBusiness.findAll()); return ResponseEntity.ok(leaveFormBusiness.findAll());
} }
@PostMapping(path = "/{employee_Id}/leavetype/{leavetype_Id}/leaveform", consumes = "application/json", produces = "application/json") @PostMapping(path = "/leaveform/add", consumes = "application/json", produces = "application/json")
public ResponseEntity<String> insertLeaveForm(@PathVariable int employee_Id, @Valid @RequestBody LeaveFormDTO leaveFormDTO, @PathVariable int leavetype_Id) { public ResponseEntity addLeaveForm(@RequestBody LeaveFormDTO leaveFormDTO) {
String message; String message;
try { try {
if (leaveFormDTO.getTitle().trim().equals("")) throw new InputException("Tiêu đề không được để trống"); if (leaveFormDTO.getTitle().trim().equals("")) throw new InputException("Tiêu đề không được để trống");
if (leaveFormDTO.getContent().trim().equals("")) throw new InputException("Nội dung không được để trống"); if (leaveFormDTO.getContent().trim().equals("")) throw new InputException("Nội dung không được để trống");
message = leaveFormBusiness.insertLeaveForm(employee_Id, leaveFormDTO, leavetype_Id); message = leaveFormBusiness.addLeaveForm(leaveFormDTO);
} catch (InputException e) { } catch (InputException e) {
message = e.getMessage(); message = e.getMessage();
} }
return ResponseEntity.ok(message); return ResponseEntity.ok(new Notification(200, message));
} }
@DeleteMapping("/{employee_Id}/leaveform/{leaveform_Id}") @DeleteMapping("/leaveform/delete/{leaveformId}")
public ResponseEntity<String> deleteLeaveForm(@PathVariable int employee_Id, @Valid @PathVariable int leaveform_Id) { public ResponseEntity deleteLeaveForm(@PathVariable int leaveformId) {
return ResponseEntity.ok(leaveFormBusiness.deleteLeaveForm(employee_Id, leaveform_Id)); return ResponseEntity.ok(new Notification(200, leaveFormBusiness.deleteLeaveForm(leaveformId)));
} }
@PostMapping(path = "/{employee_Id}/leavetype/{leavetype_Id}/leaveform/{leaveform_Id}", consumes = "application/json", produces = "application/json") @PostMapping(path = "/leaveform/update", consumes = "application/json", produces = "application/json")
public ResponseEntity<String> updateLeaveForm(@PathVariable int employee_Id, @PathVariable int leavetype_Id, @PathVariable int leaveform_Id, @Valid @RequestBody LeaveFormDTO leaveFormDTO) { public ResponseEntity updateLeaveForm(@RequestBody LeaveFormDTO leaveFormDTO) {
String message; String message;
try { try {
if (leaveFormDTO.getTitle().trim().equals("")) throw new InputException("Tiêu đề không được để trống"); if (leaveFormDTO.getTitle().trim().equals("")) throw new InputException("Tiêu đề không được để trống");
if (leaveFormDTO.getContent().trim().equals("")) throw new InputException("Nội dung không được để trống"); if (leaveFormDTO.getContent().trim().equals("")) throw new InputException("Nội dung không được để trống");
message = leaveFormBusiness.updateLeaveForm(employee_Id, leavetype_Id, leaveform_Id, leaveFormDTO); message = leaveFormBusiness.updateLeaveForm(leaveFormDTO);
} catch (InputException e) { } catch (InputException e) {
message = e.getMessage(); message = e.getMessage();
} }
return ResponseEntity.ok(message); return ResponseEntity.ok(new Notification(200, message));
} }
@PostMapping(path = "/{employee_Id}/leavetype/{leavetype_Id}/leaveform/{leaveform_Id}/status", consumes = "application/json", produces = "application/json") @PostMapping(path = "/leaveform/{leaveformId}/status")
public ResponseEntity<String> updateLeaveFormStatus(@PathVariable int employee_Id, @PathVariable int leavetype_Id, @PathVariable int leaveform_Id) { public ResponseEntity updateLeaveFormStatus(@PathVariable int leaveformId) {
String message; String message;
message = leaveFormBusiness.updateLeaveFormStatus(employee_Id, leavetype_Id, leaveform_Id); message = leaveFormBusiness.updateLeaveFormStatus(leaveformId);
return ResponseEntity.ok(message); return ResponseEntity.ok(new Notification(200, message));
} }
@GetMapping("/{employee_Id}/leaveform") @GetMapping("/leaveform/show/{employeeId}")
public ResponseEntity<List<LeaveForm>> showLeaveFormById(@PathVariable int employee_Id) { public ResponseEntity<List<LeaveForm>> showLeaveFormByEmployeeId(@PathVariable int employeeId) {
if (leaveFormBusiness.leaveFormById(employee_Id) != null) { if (leaveFormBusiness.showLeaveFormByEmployeeId(employeeId) != null) {
return ResponseEntity.ok(leaveFormBusiness.leaveFormById(employee_Id)); return ResponseEntity.ok(leaveFormBusiness.showLeaveFormByEmployeeId(employeeId));
} else { } else {
return null; return null;
} }
} }
@GetMapping("/leaveform/{id}")
public ResponseEntity<LeaveForm> showLeaveFormById(@PathVariable int id) {
return ResponseEntity.ok(leaveFormBusiness.showLeaveFormById(id));
}
} }
package com.itsol.quantrivanphong.report.leaveform.controller;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Notification {
private int status;
private String view;
}
...@@ -12,6 +12,6 @@ public class LeaveFormDTO { ...@@ -12,6 +12,6 @@ public class LeaveFormDTO {
private String title; private String title;
private String content; private String content;
private boolean status; private boolean status;
private int employee_id; private int employeeId;
private int leave_type_id; private int leaveTypeId;
} }
...@@ -15,7 +15,7 @@ public interface LeaveFormRepository extends JpaRepository<LeaveForm, Integer> { ...@@ -15,7 +15,7 @@ public interface LeaveFormRepository extends JpaRepository<LeaveForm, Integer> {
LeaveForm findLeaveFormByEmployeeAndId(Employee employee, int id); LeaveForm findLeaveFormByEmployeeAndId(Employee employee, int id);
// LeaveForm findLeaveFormById(int i); LeaveForm findLeaveFormById(int i);
LeaveForm findLeaveFormByEmployeeAndLeaveTypeAndId(Employee employee, LeaveType leaveType, int id); LeaveForm findLeaveFormByEmployeeAndLeaveTypeAndId(Employee employee, LeaveType leaveType, int id);
......
...@@ -21,9 +21,9 @@ public class TimeSheetBusiness { ...@@ -21,9 +21,9 @@ public class TimeSheetBusiness {
EProjectRepository eProjectRepository; EProjectRepository eProjectRepository;
@Autowired @Autowired
EmployeeRepository employeeRepository; EmployeeRepository employeeRepository;
public String insertTimeSheet(int employee_Id, TimeSheetDTO timeSheetDTO) { public String addTimeSheet(TimeSheetDTO timeSheetDTO) {
String message; String message;
Employee employee = employeeRepository.findEmployeeById(employee_Id); Employee employee = employeeRepository.findEmployeeById(timeSheetDTO.getEmployeeId());
Eproject eproject = eProjectRepository.findEprojectByIdAndEmployee(timeSheetDTO.getEprojectId(), employee); Eproject eproject = eProjectRepository.findEprojectByIdAndEmployee(timeSheetDTO.getEprojectId(), employee);
if (eproject != null) { if (eproject != null) {
// SimpleDateFormat formatter= new SimpleDateFormat("dd-MM-yyyy HH:mm"); // SimpleDateFormat formatter= new SimpleDateFormat("dd-MM-yyyy HH:mm");
...@@ -34,7 +34,7 @@ public class TimeSheetBusiness { ...@@ -34,7 +34,7 @@ public class TimeSheetBusiness {
timeSheet1.setContent(timeSheetDTO.getContent()); timeSheet1.setContent(timeSheetDTO.getContent());
timeSheet1.setNote(timeSheetDTO.getNote()); timeSheet1.setNote(timeSheetDTO.getNote());
timeSheet1.setEproject(eproject); timeSheet1.setEproject(eproject);
timeSheet1.setChecked(""); timeSheet1.setChecked("unapproved");
timeSheet1.setStatus(true); timeSheet1.setStatus(true);
TimeSheet timeSheet = timeSheetRepository.save(timeSheet1); TimeSheet timeSheet = timeSheetRepository.save(timeSheet1);
...@@ -49,14 +49,14 @@ public class TimeSheetBusiness { ...@@ -49,14 +49,14 @@ public class TimeSheetBusiness {
return message; return message;
} }
public String deleteTimeSheet(int employee_Id, int timeSheet_Id) { public String deleteTimeSheet(int timeSheetId) {
String message; String message;
Employee employee = employeeRepository.findEmployeeById(employee_Id); // Employee employee = employeeRepository.findEmployeeById(employee_Id);
Eproject eproject = eProjectRepository.findEprojectByEmployee(employee); // Eproject eproject = eProjectRepository.findEprojectByEmployee(employee);
TimeSheet timeSheet = timeSheetRepository.findTimeSheetByEprojectAndId(eproject, timeSheet_Id); TimeSheet timeSheet = timeSheetRepository.findTimeSheetById(timeSheetId);
if (timeSheet != null) { if (timeSheet != null) {
timeSheetRepository.delete(timeSheet); timeSheetRepository.delete(timeSheet);
if (timeSheetRepository.findTimeSheetByEprojectAndId(eproject, timeSheet_Id) == null) { if (timeSheetRepository.findTimeSheetById(timeSheetId) == null) {
message = "Delete success"; message = "Delete success";
} else { } else {
message = "Delete failed"; message = "Delete failed";
...@@ -72,15 +72,15 @@ public class TimeSheetBusiness { ...@@ -72,15 +72,15 @@ public class TimeSheetBusiness {
} }
@Transactional @Transactional
public String updateTimeSheet(int employee_Id, TimeSheetDTO timeSheetDTO, int timesheet_Id) { public String updateTimeSheet(TimeSheetDTO timeSheetDTO) {
String message; String message;
Employee employee = employeeRepository.findEmployeeById(employee_Id); Employee employee = employeeRepository.findEmployeeById(timeSheetDTO.getEmployeeId());
Eproject eproject = eProjectRepository.findEprojectByEmployee(employee); Eproject eproject = eProjectRepository.findEprojectByEmployee(employee);
TimeSheet timeSheet = timeSheetRepository.findTimeSheetByEprojectAndId(eproject, timesheet_Id); TimeSheet timeSheet = timeSheetRepository.findTimeSheetByEprojectAndId(eproject, timeSheetDTO.getId());
if (eproject != null) { if (eproject != null) {
if (timeSheet != null) { if (timeSheet != null) {
int i = timeSheetRepository.updateTimeSheet(timeSheetDTO.getTitle(), timeSheetDTO.getContent() int i = timeSheetRepository.updateTimeSheet(timeSheetDTO.getTitle(), timeSheetDTO.getContent()
, timeSheetDTO.getNote(), timesheet_Id); , timeSheetDTO.getNote(), timeSheetDTO.getId());
if (i == 1) { if (i == 1) {
message = "Update success"; message = "Update success";
} else { } else {
...@@ -95,10 +95,22 @@ public class TimeSheetBusiness { ...@@ -95,10 +95,22 @@ public class TimeSheetBusiness {
return message; return message;
} }
@Transactional
public String updateCheck(TimeSheetDTO timeSheetDTO) {
String message;
int i = timeSheetRepository.updateCheck(timeSheetDTO.getChecked(), timeSheetDTO.getId());
if (i == 1) {
message = "Success";
} else {
message = "Failed";
}
return message;
}
// @Transactional // @Transactional
// public String updateLeaveFormStatus(TimeSheetDTO timeSheetDTO) { // public String updateLeaveFormStatus(TimeSheetDTO timeSheetDTO) {
// String message; // String message;
// TimeSheet timeSheet = timeSheetRepository.findTimeSheetById(timeSheetDTO.getId()); // TimeSheet timeSheet = timeSheetRepository.findTimeSheetByEmployeeId(timeSheetDTO.getId());
// if (timeSheet != null) { // if (timeSheet != null) {
// int i = timeSheetRepository.updateTimeSheetStatus(timeSheetDTO.isStatus(), timeSheetDTO.getId()); // int i = timeSheetRepository.updateTimeSheetStatus(timeSheetDTO.isStatus(), timeSheetDTO.getId());
// if (i == 1) { // if (i == 1) {
...@@ -113,8 +125,8 @@ public class TimeSheetBusiness { ...@@ -113,8 +125,8 @@ public class TimeSheetBusiness {
// return message; // return message;
// } // }
public List<TimeSheet> findTimeSheetById(int employee_Id) { public List<TimeSheet> findTimeSheetByEmployeeId(int employeeId) {
Employee employee = employeeRepository.findEmployeeById(employee_Id); Employee employee = employeeRepository.findEmployeeById(employeeId);
Eproject eproject = eProjectRepository.findEprojectByEmployee(employee); Eproject eproject = eProjectRepository.findEprojectByEmployee(employee);
if (employee != null && eproject != null && timeSheetRepository.showTimeSheetByEproject(eproject) != null) { if (employee != null && eproject != null && timeSheetRepository.showTimeSheetByEproject(eproject) != null) {
return timeSheetRepository.showTimeSheetByEproject(eproject); return timeSheetRepository.showTimeSheetByEproject(eproject);
...@@ -122,4 +134,7 @@ public class TimeSheetBusiness { ...@@ -122,4 +134,7 @@ public class TimeSheetBusiness {
return null; return null;
} }
} }
public TimeSheet findTimeSheetById(int id) {
return timeSheetRepository.findTimeSheetById(id);
}
} }
...@@ -2,13 +2,13 @@ package com.itsol.quantrivanphong.report.timesheet.controller; ...@@ -2,13 +2,13 @@ package com.itsol.quantrivanphong.report.timesheet.controller;
import com.itsol.quantrivanphong.exception.InputException; import com.itsol.quantrivanphong.exception.InputException;
import com.itsol.quantrivanphong.model.TimeSheet; import com.itsol.quantrivanphong.model.TimeSheet;
import com.itsol.quantrivanphong.report.leaveform.controller.Notification;
import com.itsol.quantrivanphong.report.timesheet.business.TimeSheetBusiness; import com.itsol.quantrivanphong.report.timesheet.business.TimeSheetBusiness;
import com.itsol.quantrivanphong.report.timesheet.dto.TimeSheetDTO; import com.itsol.quantrivanphong.report.timesheet.dto.TimeSheetDTO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List; import java.util.List;
@RestController @RestController
...@@ -16,6 +16,19 @@ import java.util.List; ...@@ -16,6 +16,19 @@ import java.util.List;
public class TimeSheetController { public class TimeSheetController {
@Autowired @Autowired
TimeSheetBusiness timeSheetBusiness; TimeSheetBusiness timeSheetBusiness;
@PostMapping(path = "/timesheet/add", consumes = "application/json", produces = "application/json")
public ResponseEntity addTimeSheet(@RequestBody TimeSheetDTO timeSheetDTO) {
String message;
try {
if (timeSheetDTO.getTitle().trim().equals("")) throw new InputException("Tiêu đề không được để trống");
if (timeSheetDTO.getContent().trim().equals("")) throw new InputException("Nội dung không được để trống");
message = timeSheetBusiness.addTimeSheet(timeSheetDTO);
} catch (InputException e) {
message = e.getMessage();
}
return ResponseEntity.ok(new Notification(200, message));
}
// @PostMapping(path = "/timesheet", consumes = "application/json", produces = "application/json") // @PostMapping(path = "/timesheet", consumes = "application/json", produces = "application/json")
// public ResponseEntity<String> insertTimeSheet(@RequestBody TimeSheetDTO timeSheetDTO) { // public ResponseEntity<String> insertTimeSheet(@RequestBody TimeSheetDTO timeSheetDTO) {
// String message; // String message;
...@@ -30,29 +43,29 @@ public class TimeSheetController { ...@@ -30,29 +43,29 @@ public class TimeSheetController {
// return ResponseEntity.ok(message); // return ResponseEntity.ok(message);
// } // }
@DeleteMapping("/{employee_Id}/timesheet/{timesheet_Id}") @DeleteMapping("/timesheet/delete/{timesheetId}")
public ResponseEntity<String> deleteTimeSheet(@PathVariable int employee_Id, @Valid @PathVariable int timesheet_Id) { public ResponseEntity deleteTimeSheet(@PathVariable int timesheetId) {
return ResponseEntity.ok(timeSheetBusiness.deleteTimeSheet(employee_Id, timesheet_Id)); return ResponseEntity.ok(new Notification(200, timeSheetBusiness.deleteTimeSheet(timesheetId)));
} }
@GetMapping(path = "/timesheet") @GetMapping(path = "/timesheet/show")
public List<TimeSheet> showAllTimeSheet() { public List<TimeSheet> showAllTimeSheet() {
return timeSheetBusiness.findAll(); return timeSheetBusiness.findAll();
} }
@PostMapping(path = "/{employee_Id}/timesheet/{timesheet_Id}", consumes = "application/json", produces = "application/json") @PostMapping(path = "/timesheet/update", consumes = "application/json", produces = "application/json")
public ResponseEntity<String> updateTimeSheet(@PathVariable int employee_Id, @PathVariable int timesheet_Id, @Valid @RequestBody TimeSheetDTO timeSheetDTO) { public ResponseEntity updateTimeSheet(@RequestBody TimeSheetDTO timeSheetDTO) {
String message; String message;
try { try {
if (timeSheetDTO.getTitle().trim().equals("")) throw new InputException("Tiêu đề không được để trống"); if (timeSheetDTO.getTitle().trim().equals("")) throw new InputException("Tiêu đề không được để trống");
if (timeSheetDTO.getContent().trim().equals("")) throw new InputException("Nội dung không được để trống"); if (timeSheetDTO.getContent().trim().equals("")) throw new InputException("Nội dung không được để trống");
message = timeSheetBusiness.updateTimeSheet(employee_Id, timeSheetDTO, timesheet_Id); message = timeSheetBusiness.updateTimeSheet(timeSheetDTO);
} catch (InputException e) { } catch (InputException e) {
message = e.getMessage(); message = e.getMessage();
} }
return ResponseEntity.ok(message); return ResponseEntity.ok(new Notification(200, message));
} }
// @PostMapping(path = "/update-status", consumes = "application/json", produces = "application/json") // @PostMapping(path = "/update-status", consumes = "application/json", produces = "application/json")
...@@ -62,8 +75,19 @@ public class TimeSheetController { ...@@ -62,8 +75,19 @@ public class TimeSheetController {
// return ResponseEntity.ok(message); // return ResponseEntity.ok(message);
// } // }
@GetMapping("/{employee_Id}/timesheet") @GetMapping("/timesheet/show/{employeeId}")
public ResponseEntity<List<TimeSheet>> showTimeSheetById(@PathVariable int employee_Id) { public ResponseEntity<List<TimeSheet>> showTimeSheetByEmployeeId(@PathVariable int employeeId) {
return ResponseEntity.ok(timeSheetBusiness.findTimeSheetById(employee_Id)); return ResponseEntity.ok(timeSheetBusiness.findTimeSheetByEmployeeId(employeeId));
}
@GetMapping("/timesheet/{id}")
public ResponseEntity<TimeSheet> showTimeSheetById(@PathVariable int id) {
return ResponseEntity.ok(timeSheetBusiness.findTimeSheetById(id));
}
@PostMapping(path = "/timesheet/update/check", consumes = "application/json", produces = "application/json")
public ResponseEntity<String> updateCheck(@RequestBody TimeSheetDTO timeSheetDTO) {
return ResponseEntity.ok(timeSheetBusiness.updateCheck(timeSheetDTO));
} }
} }
\ No newline at end of file
...@@ -9,12 +9,11 @@ import lombok.NoArgsConstructor; ...@@ -9,12 +9,11 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
public class TimeSheetDTO { public class TimeSheetDTO {
private int id; private int id;
private int employeeId;
private String title; private String title;
private String content; private String content;
private String note; private String note;
private String checked; private String checked;
private boolean status; private boolean status;
private int eprojectId; private int eprojectId;
private int employeeId;
} }
...@@ -10,14 +10,18 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -10,14 +10,18 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
public interface TimeSheetRepository extends JpaRepository<TimeSheet, Integer> { public interface TimeSheetRepository extends JpaRepository<TimeSheet, Integer> {
// TimeSheet findTimeSheetById(int id); TimeSheet findTimeSheetById(int id);
// @Query("select ts from TimeSheet ts order by ts.createdAt desc") // @Query("select ts from TimeSheet ts order by ts.createdAt desc")
// List<TimeSheet> getAllTimeSheet(); // List<TimeSheet> getAllTimeSheet();
@Modifying @Modifying
@Query("update TimeSheet ts set ts.title = ?1, ts.content = ?2, ts.note = ?3 where ts.id = ?4") @Query("update TimeSheet ts set ts.title = ?1, ts.content = ?2, ts.note = ?3 where ts.id = ?4")
int updateTimeSheet(String title, String content, String note, int timesheet_Id); int updateTimeSheet(String title, String content, String note, int timeSheetId);
@Modifying
@Query("update TimeSheet ts set ts.checked = ?1 where ts.id = ?2")
int updateCheck(String check, int timeSheetId);
// @Modifying // @Modifying
// @Query("update TimeSheet ts set ts.status = ?1 where ts.id = ?2") // @Query("update TimeSheet ts set ts.status = ?1 where ts.id = ?2")
...@@ -26,7 +30,7 @@ public interface TimeSheetRepository extends JpaRepository<TimeSheet, Integer> { ...@@ -26,7 +30,7 @@ public interface TimeSheetRepository extends JpaRepository<TimeSheet, Integer> {
@Query("select ts from TimeSheet ts where ts.eproject = ?1") @Query("select ts from TimeSheet ts where ts.eproject = ?1")
List<TimeSheet> showTimeSheetByEproject(Eproject eproject); List<TimeSheet> showTimeSheetByEproject(Eproject eproject);
TimeSheet findTimeSheetByEprojectAndId(Eproject eproject, int timeSheet_Id); TimeSheet findTimeSheetByEprojectAndId(Eproject eproject, int timeSheetId);
//================================================================================================================== //==================================================================================================================
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
table.dataTable {
clear: both;
margin-top: 6px !important;
margin-bottom: 6px !important;
max-width: none !important;
border-collapse: separate !important;
border-spacing: 0;
}
table.dataTable td,
table.dataTable th {
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
table.dataTable td.dataTables_empty,
table.dataTable th.dataTables_empty {
text-align: center;
}
table.dataTable.nowrap th,
table.dataTable.nowrap td {
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_length label {
font-weight: normal;
text-align: left;
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_length select {
width: auto;
display: inline-block;
}
div.dataTables_wrapper div.dataTables_filter {
text-align: right;
}
div.dataTables_wrapper div.dataTables_filter label {
font-weight: normal;
white-space: nowrap;
text-align: left;
}
div.dataTables_wrapper div.dataTables_filter input {
margin-left: 0.5em;
display: inline-block;
width: auto;
}
div.dataTables_wrapper div.dataTables_info {
padding-top: 0.85em;
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_paginate {
margin: 0;
white-space: nowrap;
text-align: right;
}
div.dataTables_wrapper div.dataTables_paginate ul.pagination {
margin: 2px 0;
white-space: nowrap;
justify-content: flex-end;
}
div.dataTables_wrapper div.dataTables_processing {
position: absolute;
top: 50%;
left: 50%;
width: 200px;
margin-left: -100px;
margin-top: -26px;
text-align: center;
padding: 1em 0;
}
table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
table.dataTable thead > tr > td.sorting_asc,
table.dataTable thead > tr > td.sorting_desc,
table.dataTable thead > tr > td.sorting {
padding-right: 30px;
}
table.dataTable thead > tr > th:active,
table.dataTable thead > tr > td:active {
outline: none;
}
table.dataTable thead .sorting,
table.dataTable thead .sorting_asc,
table.dataTable thead .sorting_desc,
table.dataTable thead .sorting_asc_disabled,
table.dataTable thead .sorting_desc_disabled {
cursor: pointer;
position: relative;
}
table.dataTable thead .sorting:before, table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:before,
table.dataTable thead .sorting_desc:after,
table.dataTable thead .sorting_asc_disabled:before,
table.dataTable thead .sorting_asc_disabled:after,
table.dataTable thead .sorting_desc_disabled:before,
table.dataTable thead .sorting_desc_disabled:after {
position: absolute;
bottom: 0.9em;
display: block;
opacity: 0.3;
}
table.dataTable thead .sorting:before,
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_desc:before,
table.dataTable thead .sorting_asc_disabled:before,
table.dataTable thead .sorting_desc_disabled:before {
right: 1em;
content: "\2191";
}
table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:after,
table.dataTable thead .sorting_asc_disabled:after,
table.dataTable thead .sorting_desc_disabled:after {
right: 0.5em;
content: "\2193";
}
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_desc:after {
opacity: 1;
}
table.dataTable thead .sorting_asc_disabled:before,
table.dataTable thead .sorting_desc_disabled:after {
opacity: 0;
}
div.dataTables_scrollHead table.dataTable {
margin-bottom: 0 !important;
}
div.dataTables_scrollBody table {
border-top: none;
margin-top: 0 !important;
margin-bottom: 0 !important;
}
div.dataTables_scrollBody table thead .sorting:before,
div.dataTables_scrollBody table thead .sorting_asc:before,
div.dataTables_scrollBody table thead .sorting_desc:before,
div.dataTables_scrollBody table thead .sorting:after,
div.dataTables_scrollBody table thead .sorting_asc:after,
div.dataTables_scrollBody table thead .sorting_desc:after {
display: none;
}
div.dataTables_scrollBody table tbody tr:first-child th,
div.dataTables_scrollBody table tbody tr:first-child td {
border-top: none;
}
div.dataTables_scrollFoot > .dataTables_scrollFootInner {
box-sizing: content-box;
}
div.dataTables_scrollFoot > .dataTables_scrollFootInner > table {
margin-top: 0 !important;
border-top: none;
}
@media screen and (max-width: 767px) {
div.dataTables_wrapper div.dataTables_length,
div.dataTables_wrapper div.dataTables_filter,
div.dataTables_wrapper div.dataTables_info,
div.dataTables_wrapper div.dataTables_paginate {
text-align: center;
}
}
table.dataTable.table-sm > thead > tr > th {
padding-right: 20px;
}
table.dataTable.table-sm .sorting:before,
table.dataTable.table-sm .sorting_asc:before,
table.dataTable.table-sm .sorting_desc:before {
top: 5px;
right: 0.85em;
}
table.dataTable.table-sm .sorting:after,
table.dataTable.table-sm .sorting_asc:after,
table.dataTable.table-sm .sorting_desc:after {
top: 5px;
}
table.table-bordered.dataTable th,
table.table-bordered.dataTable td {
border-left-width: 0;
}
table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,
table.table-bordered.dataTable td:last-child,
table.table-bordered.dataTable td:last-child {
border-right-width: 0;
}
table.table-bordered.dataTable tbody th,
table.table-bordered.dataTable tbody td {
border-bottom-width: 0;
}
div.dataTables_scrollHead table.table-bordered {
border-bottom-width: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row {
margin: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child {
padding-left: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child {
padding-right: 0;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
/*! DataTables Bootstrap 4 integration
* ©2011-2017 SpryMedia Ltd - datatables.net/license
*/
/**
* DataTables integration for Bootstrap 4. This requires Bootstrap 4 and
* DataTables 1.10 or newer.
*
* This file sets the defaults and adds options to DataTables to style its
* controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
* for further information.
*/
(function( factory ){
if ( typeof define === 'function' && define.amd ) {
// AMD
define( ['common/common/js/jquery', 'datatables.net'], function ($ ) {
return factory( $, window, document );
} );
}
else if ( typeof exports === 'object' ) {
// CommonJS
module.exports = function (root, $) {
if ( ! root ) {
root = window;
}
if ( ! $ || ! $.fn.dataTable ) {
// Require DataTables, which attaches to jQuery, including
// jQuery if needed and have a $ property so we can access the
// jQuery object that is used
$ = require('datatables.net')(root, $).$;
}
return factory( $, root, root.document );
};
}
else {
// Browser
factory( jQuery, window, document );
}
}(function( $, window, document, undefined ) {
'use strict';
var DataTable = $.fn.dataTable;
/* Set the defaults for DataTables initialisation */
$.extend( true, DataTable.defaults, {
dom:
"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
renderer: 'bootstrap'
} );
/* Default class modification */
$.extend( DataTable.ext.classes, {
sWrapper: "dataTables_wrapper dt-bootstrap4",
sFilterInput: "form-control form-control-sm",
sLengthSelect: "custom-select custom-select-sm form-control form-control-sm",
sProcessing: "dataTables_processing card",
sPageButton: "paginate_button page-item"
} );
/* Bootstrap paging button renderer */
DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {
var api = new DataTable.Api( settings );
var classes = settings.oClasses;
var lang = settings.oLanguage.oPaginate;
var aria = settings.oLanguage.oAria.paginate || {};
var btnDisplay, btnClass, counter=0;
var attach = function( container, buttons ) {
var i, ien, node, button;
var clickHandler = function ( e ) {
e.preventDefault();
if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {
api.page( e.data.action ).draw( 'page' );
}
};
for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
button = buttons[i];
if ( $.isArray( button ) ) {
attach( container, button );
}
else {
btnDisplay = '';
btnClass = '';
switch ( button ) {
case 'ellipsis':
btnDisplay = '&#x2026;';
btnClass = 'disabled';
break;
case 'first':
btnDisplay = lang.sFirst;
btnClass = button + (page > 0 ?
'' : ' disabled');
break;
case 'previous':
btnDisplay = lang.sPrevious;
btnClass = button + (page > 0 ?
'' : ' disabled');
break;
case 'next':
btnDisplay = lang.sNext;
btnClass = button + (page < pages-1 ?
'' : ' disabled');
break;
case 'last':
btnDisplay = lang.sLast;
btnClass = button + (page < pages-1 ?
'' : ' disabled');
break;
default:
btnDisplay = button + 1;
btnClass = page === button ?
'active' : '';
break;
}
if ( btnDisplay ) {
node = $('<li>', {
'class': classes.sPageButton+' '+btnClass,
'id': idx === 0 && typeof button === 'string' ?
settings.sTableId +'_'+ button :
null
} )
.append( $('<a>', {
'href': '#',
'aria-controls': settings.sTableId,
'aria-label': aria[ button ],
'data-dt-idx': counter,
'tabindex': settings.iTabIndex,
'class': 'page-link'
} )
.html( btnDisplay )
)
.appendTo( container );
settings.oApi._fnBindAction(
node, {action: button}, clickHandler
);
counter++;
}
}
}
};
// IE9 throws an 'unknown error' if document.activeElement is used
// inside an iframe or frame.
var activeEl;
try {
// Because this approach is destroying and recreating the paging
// elements, focus is lost on the select button which is bad for
// accessibility. So we want to restore focus once the draw has
// completed
activeEl = $(host).find(document.activeElement).data('dt-idx');
}
catch (e) {}
attach(
$(host).empty().html('<ul class="pagination"/>').children('ul'),
buttons
);
if ( activeEl !== undefined ) {
$(host).find( '[data-dt-idx='+activeEl+']' ).focus();
}
};
return DataTable;
}));
/*!
DataTables Bootstrap 4 integration
©2011-2017 SpryMedia Ltd - datatables.net/license
*/
(function(b){"function"===typeof define&&define.amd?define(["common/common/js/jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a, d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return b(d,a,a.document)}:b(jQuery,window,document)})(function(b, a, d, m){var f=b.fn.dataTable;b.extend(!0,f.defaults,{dom:"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
renderer:"bootstrap"});b.extend(f.ext.classes,{sWrapper:"dataTables_wrapper dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"custom-select custom-select-sm form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"});f.ext.renderer.pageButton.bootstrap=function(a,h,r,s,j,n){var o=new f.Api(a),t=a.oClasses,k=a.oLanguage.oPaginate,u=a.oLanguage.oAria.paginate||{},e,g,p=0,q=function(d,f){var l,h,i,c,m=function(a){a.preventDefault();
!b(a.currentTarget).hasClass("disabled")&&o.page()!=a.data.action&&o.page(a.data.action).draw("page")};l=0;for(h=f.length;l<h;l++)if(c=f[l],b.isArray(c))q(d,c);else{g=e="";switch(c){case "ellipsis":e="&#x2026;";g="disabled";break;case "first":e=k.sFirst;g=c+(0<j?"":" disabled");break;case "previous":e=k.sPrevious;g=c+(0<j?"":" disabled");break;case "next":e=k.sNext;g=c+(j<n-1?"":" disabled");break;case "last":e=k.sLast;g=c+(j<n-1?"":" disabled");break;default:e=c+1,g=j===c?"active":""}e&&(i=b("<li>",
{"class":t.sPageButton+" "+g,id:0===r&&"string"===typeof c?a.sTableId+"_"+c:null}).append(b("<a>",{href:"#","aria-controls":a.sTableId,"aria-label":u[c],"data-dt-idx":p,tabindex:a.iTabIndex,"class":"page-link"}).html(e)).appendTo(d),a.oApi._fnBindAction(i,{action:c},m),p++)}},i;try{i=b(h).find(d.activeElement).data("dt-idx")}catch(v){}q(b(h).empty().html('<ul class="pagination"/>').children("ul"),s);i!==m&&b(h).find("[data-dt-idx="+i+"]").focus()};return f});
/*
* jQuery Easing v1.4.1 - http://gsgd.co.uk/sandbox/jquery/easing/
* Open source under the BSD License.
* Copyright © 2008 George McGinley Smith
* All rights reserved.
* https://raw.github.com/gdsmith/jquery-easing/master/LICENSE
*/
(function (factory) {
if (typeof define === "function" && define.amd) {
define(['common/common/js/jquery'], function ($) {
return factory($);
});
} else if (typeof module === "object" && typeof module.exports === "object") {
exports = factory(require('common/common/js/jquery'));
} else {
factory(jQuery);
}
})(function($){
// Preserve the original jQuery "swing" easing as "jswing"
$.easing.jswing = $.easing.swing;
var pow = Math.pow,
sqrt = Math.sqrt,
sin = Math.sin,
cos = Math.cos,
PI = Math.PI,
c1 = 1.70158,
c2 = c1 * 1.525,
c3 = c1 + 1,
c4 = ( 2 * PI ) / 3,
c5 = ( 2 * PI ) / 4.5;
// x is the fraction of animation progress, in the range 0..1
function bounceOut(x) {
var n1 = 7.5625,
d1 = 2.75;
if ( x < 1/d1 ) {
return n1*x*x;
} else if ( x < 2/d1 ) {
return n1*(x-=(1.5/d1))*x + 0.75;
} else if ( x < 2.5/d1 ) {
return n1*(x-=(2.25/d1))*x + 0.9375;
} else {
return n1*(x-=(2.625/d1))*x + 0.984375;
}
}
$.extend( $.easing,
{
def: 'easeOutQuad',
swing: function (x) {
return $.easing[$.easing.def](x);
},
easeInQuad: function (x) {
return x * x;
},
easeOutQuad: function (x) {
return 1 - ( 1 - x ) * ( 1 - x );
},
easeInOutQuad: function (x) {
return x < 0.5 ?
2 * x * x :
1 - pow( -2 * x + 2, 2 ) / 2;
},
easeInCubic: function (x) {
return x * x * x;
},
easeOutCubic: function (x) {
return 1 - pow( 1 - x, 3 );
},
easeInOutCubic: function (x) {
return x < 0.5 ?
4 * x * x * x :
1 - pow( -2 * x + 2, 3 ) / 2;
},
easeInQuart: function (x) {
return x * x * x * x;
},
easeOutQuart: function (x) {
return 1 - pow( 1 - x, 4 );
},
easeInOutQuart: function (x) {
return x < 0.5 ?
8 * x * x * x * x :
1 - pow( -2 * x + 2, 4 ) / 2;
},
easeInQuint: function (x) {
return x * x * x * x * x;
},
easeOutQuint: function (x) {
return 1 - pow( 1 - x, 5 );
},
easeInOutQuint: function (x) {
return x < 0.5 ?
16 * x * x * x * x * x :
1 - pow( -2 * x + 2, 5 ) / 2;
},
easeInSine: function (x) {
return 1 - cos( x * PI/2 );
},
easeOutSine: function (x) {
return sin( x * PI/2 );
},
easeInOutSine: function (x) {
return -( cos( PI * x ) - 1 ) / 2;
},
easeInExpo: function (x) {
return x === 0 ? 0 : pow( 2, 10 * x - 10 );
},
easeOutExpo: function (x) {
return x === 1 ? 1 : 1 - pow( 2, -10 * x );
},
easeInOutExpo: function (x) {
return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ?
pow( 2, 20 * x - 10 ) / 2 :
( 2 - pow( 2, -20 * x + 10 ) ) / 2;
},
easeInCirc: function (x) {
return 1 - sqrt( 1 - pow( x, 2 ) );
},
easeOutCirc: function (x) {
return sqrt( 1 - pow( x - 1, 2 ) );
},
easeInOutCirc: function (x) {
return x < 0.5 ?
( 1 - sqrt( 1 - pow( 2 * x, 2 ) ) ) / 2 :
( sqrt( 1 - pow( -2 * x + 2, 2 ) ) + 1 ) / 2;
},
easeInElastic: function (x) {
return x === 0 ? 0 : x === 1 ? 1 :
-pow( 2, 10 * x - 10 ) * sin( ( x * 10 - 10.75 ) * c4 );
},
easeOutElastic: function (x) {
return x === 0 ? 0 : x === 1 ? 1 :
pow( 2, -10 * x ) * sin( ( x * 10 - 0.75 ) * c4 ) + 1;
},
easeInOutElastic: function (x) {
return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ?
-( pow( 2, 20 * x - 10 ) * sin( ( 20 * x - 11.125 ) * c5 )) / 2 :
pow( 2, -20 * x + 10 ) * sin( ( 20 * x - 11.125 ) * c5 ) / 2 + 1;
},
easeInBack: function (x) {
return c3 * x * x * x - c1 * x * x;
},
easeOutBack: function (x) {
return 1 + c3 * pow( x - 1, 3 ) + c1 * pow( x - 1, 2 );
},
easeInOutBack: function (x) {
return x < 0.5 ?
( pow( 2 * x, 2 ) * ( ( c2 + 1 ) * 2 * x - c2 ) ) / 2 :
( pow( 2 * x - 2, 2 ) *( ( c2 + 1 ) * ( x * 2 - 2 ) + c2 ) + 2 ) / 2;
},
easeInBounce: function (x) {
return 1 - bounceOut( 1 - x );
},
easeOutBounce: bounceOut,
easeInOutBounce: function (x) {
return x < 0.5 ?
( 1 - bounceOut( 1 - 2 * x ) ) / 2 :
( 1 + bounceOut( 2 * x - 1 ) ) / 2;
}
});
});
(function(factory){if(typeof define==="function"&&define.amd){define(["common/common/js/jquery"],function($){return factory($)})}else if(typeof module==="object"&&typeof module.exports==="object"){exports=factory(require("common/common/js/jquery"))}else{factory(jQuery)}})(function($){$.easing.jswing=$.easing.swing;var pow=Math.pow,sqrt=Math.sqrt,sin=Math.sin,cos=Math.cos,PI=Math.PI,c1=1.70158,c2=c1*1.525,c3=c1+1,c4=2*PI/3,c5=2*PI/4.5;function bounceOut(x){var n1=7.5625,d1=2.75;if(x<1/d1){return n1*x*x}else if(x<2/d1){return n1*(x-=1.5/d1)*x+.75}else if(x<2.5/d1){return n1*(x-=2.25/d1)*x+.9375}else{return n1*(x-=2.625/d1)*x+.984375}}$.extend($.easing,{def:"easeOutQuad",swing:function(x){return $.easing[$.easing.def](x)},easeInQuad:function(x){return x*x},easeOutQuad:function(x){return 1-(1-x)*(1-x)},easeInOutQuad:function(x){return x<.5?2*x*x:1-pow(-2*x+2,2)/2},easeInCubic:function(x){return x*x*x},easeOutCubic:function(x){return 1-pow(1-x,3)},easeInOutCubic:function(x){return x<.5?4*x*x*x:1-pow(-2*x+2,3)/2},easeInQuart:function(x){return x*x*x*x},easeOutQuart:function(x){return 1-pow(1-x,4)},easeInOutQuart:function(x){return x<.5?8*x*x*x*x:1-pow(-2*x+2,4)/2},easeInQuint:function(x){return x*x*x*x*x},easeOutQuint:function(x){return 1-pow(1-x,5)},easeInOutQuint:function(x){return x<.5?16*x*x*x*x*x:1-pow(-2*x+2,5)/2},easeInSine:function(x){return 1-cos(x*PI/2)},easeOutSine:function(x){return sin(x*PI/2)},easeInOutSine:function(x){return-(cos(PI*x)-1)/2},easeInExpo:function(x){return x===0?0:pow(2,10*x-10)},easeOutExpo:function(x){return x===1?1:1-pow(2,-10*x)},easeInOutExpo:function(x){return x===0?0:x===1?1:x<.5?pow(2,20*x-10)/2:(2-pow(2,-20*x+10))/2},easeInCirc:function(x){return 1-sqrt(1-pow(x,2))},easeOutCirc:function(x){return sqrt(1-pow(x-1,2))},easeInOutCirc:function(x){return x<.5?(1-sqrt(1-pow(2*x,2)))/2:(sqrt(1-pow(-2*x+2,2))+1)/2},easeInElastic:function(x){return x===0?0:x===1?1:-pow(2,10*x-10)*sin((x*10-10.75)*c4)},easeOutElastic:function(x){return x===0?0:x===1?1:pow(2,-10*x)*sin((x*10-.75)*c4)+1},easeInOutElastic:function(x){return x===0?0:x===1?1:x<.5?-(pow(2,20*x-10)*sin((20*x-11.125)*c5))/2:pow(2,-20*x+10)*sin((20*x-11.125)*c5)/2+1},easeInBack:function(x){return c3*x*x*x-c1*x*x},easeOutBack:function(x){return 1+c3*pow(x-1,3)+c1*pow(x-1,2)},easeInOutBack:function(x){return x<.5?pow(2*x,2)*((c2+1)*2*x-c2)/2:(pow(2*x-2,2)*((c2+1)*(x*2-2)+c2)+2)/2},easeInBounce:function(x){return 1-bounceOut(1-x)},easeOutBounce:bounceOut,easeInOutBounce:function(x){return x<.5?(1-bounceOut(1-2*x))/2:(1+bounceOut(2*x-1))/2}})});
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
(function($) {
"use strict"; // Start of use strict
// Toggle the side navigation
$("#sidebarToggle").on('click', function(e) {
e.preventDefault();
$("body").toggleClass("sidebar-toggled");
$(".sidebar").toggleClass("toggled");
});
// Prevent the content wrapper from scrolling when the fixed side navigation hovered over
$('body.fixed-nav .sidebar').on('mousewheel DOMMouseScroll wheel', function(e) {
if ($(window).width() > 768) {
var e0 = e.originalEvent,
delta = e0.wheelDelta || -e0.detail;
this.scrollTop += (delta < 0 ? 1 : -1) * 30;
e.preventDefault();
}
});
// Scroll to top button appear
$(document).on('scroll', function() {
var scrollDistance = $(this).scrollTop();
if (scrollDistance > 100) {
$('.scroll-to-top').fadeIn();
} else {
$('.scroll-to-top').fadeOut();
}
});
// Smooth scrolling using jQuery easing
$(document).on('click', 'a.scroll-to-top', function(event) {
var $anchor = $(this);
$('html, body').stop().animate({
scrollTop: ($($anchor.attr('href')).offset().top)
}, 1000, 'easeInOutExpo');
event.preventDefault();
});
})(jQuery); // End of use strict
/*!
* Start Bootstrap - SB Admin v5.0.3 (https://startbootstrap.com/template-overviews/sb-admin)
* Copyright 2013-2019 Start Bootstrap
* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-sb-admin/blob/master/LICENSE)
*/
!function(l){"use strict";l("#sidebarToggle").on("click",function(o){o.preventDefault(),l("body").toggleClass("sidebar-toggled"),l(".sidebar").toggleClass("toggled")}),l("body.fixed-nav .sidebar").on("mousewheel DOMMouseScroll wheel",function(o){if(768<l(window).width()){var e=o.originalEvent,t=e.wheelDelta||-e.detail;this.scrollTop+=30*(t<0?1:-1),o.preventDefault()}}),l(document).on("scroll",function(){100<l(this).scrollTop()?l(".scroll-to-top").fadeIn():l(".scroll-to-top").fadeOut()}),l(document).on("click","a.scroll-to-top",function(o){var e=l(this);l("html, body").stop().animate({scrollTop:l(e.attr("href")).offset().top},1e3,"easeInOutExpo"),o.preventDefault()})}(jQuery);
\ No newline at end of file
This diff is collapsed.
#myFooter {
background-color: #373a48;
color:white;
}
#myFooter .footer-copyright{
background-color: #383737;
padding-top:3px;
padding-bottom:3px;
text-align: center;
}
#myFooter .footer-copyright p{
margin:10px;
color: #ccc;
}
#myFooter ul{
list-style-type: none;
padding-left: 0;
line-height: 1.7;
}
#myFooter h5{
font-size: 18px;
color: white;
font-weight: bold;
margin-top: 30px;
}
#myFooter a{
color:#d2d1d1;
text-decoration: none;
}
#myFooter a:hover, #myFooter a:focus{
text-decoration: none;
color:white;
}
#myFooter .myCols{
text-align: center;
}
#myFooter .social-networks{
text-align: center;
padding-top: 30px;
padding-bottom: 38px;
}
#myFooter .social-networks a{
font-size: 32px;
margin-right: 5px;
margin-left: 5px;
color: #f9f9f9;
padding: 10px;
transition: 0.2s;
}
#myFooter .social-networks a:hover{
text-decoration: none;
}
#myFooter .facebook:hover{
color:#0077e2;
}
#myFooter .google:hover{
color:#ef1a1a;
}
#myFooter .twitter:hover{
color: #00aced;
}
@media screen and (max-width: 767px){
#myFooter {
text-align: center;
}
}
/* CSS used for positioning the footers at the bottom of the page. */
/* You can remove this. */
html{
height: 100% !important;
}
body{
display: flex;
display: -webkit-flex;
flex-direction: column;
-webkit-flex-direction: column;
height: 100%;
}
.content{
flex: 1 0 auto;
-webkit-flex: 1 0 auto;
min-height: 100px;
background-color: #F1F1F1;
}
#myFooter{
flex: 0 0 auto;
-webkit-flex: 0 0 auto;
}
\ No newline at end of file
.wrapper{position:relative}.sidebar-left{background-color:#222d32;margin:0;border:none;border-radius:0}.sidebar-menu{list-style:none;margin:0;padding:0}.sidebar-menu a{color:#b8c7ce;text-decoration:none}.sidebar-menu > li{position:relative;margin:0;padding:0}.sidebar-menu > li > a{padding:12px 5px 12px 15px;display:block;font-size:14px;border-left:3px solid transparent}.sidebar-menu > li > a > .fa{width:20px}.sidebar-menu > li:hover > a,.sidebar-menu > li.active > a{color:#fff;background:#1e282c;border-left-color:#3c8dbc}.sidebar-menu > li > .treeview-menu{margin:0 1px;background:#2c3b41}.sidebar-menu > li .label,.sidebar-menu > li .badge{margin-top:3px;margin-right:5px}.sidebar-menu li.header{padding:10px 25px 10px 15px;font-size:12px;color:#4b646f;background:#1a2226}.sidebar-menu li > a > .fa-angle-left{width:auto;height:auto;padding:0;margin-right:10px;margin-top:3px}.sidebar-menu li.active > a > .fa-angle-left{transform:rotate(-90deg)}.sidebar-menu li.active > .treeview-menu{display:block}.sidebar-menu .treeview-menu{display:none;list-style:none;padding:0;margin:0;padding-left:5px}.sidebar-menu .treeview-menu .treeview-menu{padding-left:20px}.sidebar-menu .treeview-menu > li{margin:0}.sidebar-menu .treeview-menu > li > a{padding:5px 5px 5px 15px;display:block;font-size:14px;color:#8aa4af}.sidebar-menu .treeview-menu > li > a > .fa{width:20px}.sidebar-menu .treeview-menu > li > a > .fa-angle-left,.sidebar-menu .treeview-menu > li > a > .fa-angle-down{width:auto}.sidebar-menu .treeview-menu > li.active > a,.sidebar-menu .treeview-menu > li > a:hover{color:#fff}@media (min-width:768px){.sidebar-left{position:absolute;top:0;left:0;bottom:0;width:230px;height:100%;z-index:2016}.sidebar-left .navbar-header{float:none}.sidebar-left .navbar-collapse{padding:0}.content{position:relative;margin-left:200px;height:100%;min-height:100%}}
@charset "UTF-8";
/*!
Animate.css - http://daneden.me/animate
Licensed under the MIT license - http://opensource.org/licenses/MIT
Copyright (c) 2013 Daniel Eden
*/
@-webkit-keyframes flipInX {
0% {
-webkit-transform: perspective(400px) rotateX(90deg);
transform: perspective(400px) rotateX(90deg);
opacity: 0;
}
40% {
-webkit-transform: perspective(400px) rotateX(-10deg);
transform: perspective(400px) rotateX(-10deg);
}
70% {
-webkit-transform: perspective(400px) rotateX(10deg);
transform: perspective(400px) rotateX(10deg);
}
100% {
-webkit-transform: perspective(400px) rotateX(0deg);
transform: perspective(400px) rotateX(0deg);
opacity: 1;
}
}
@keyframes flipInX {
0% {
-webkit-transform: perspective(400px) rotateX(90deg);
-ms-transform: perspective(400px) rotateX(90deg);
transform: perspective(400px) rotateX(90deg);
opacity: 0;
}
40% {
-webkit-transform: perspective(400px) rotateX(-10deg);
-ms-transform: perspective(400px) rotateX(-10deg);
transform: perspective(400px) rotateX(-10deg);
}
70% {
-webkit-transform: perspective(400px) rotateX(10deg);
-ms-transform: perspective(400px) rotateX(10deg);
transform: perspective(400px) rotateX(10deg);
}
100% {
-webkit-transform: perspective(400px) rotateX(0deg);
-ms-transform: perspective(400px) rotateX(0deg);
transform: perspective(400px) rotateX(0deg);
opacity: 1;
}
}
.flipInX {
-webkit-backface-visibility: visible !important;
-ms-backface-visibility: visible !important;
backface-visibility: visible !important;
-webkit-animation-name: flipInX;
animation-name: flipInX;
}
This diff is collapsed.
#wrapper {
width: 100%;
}
#page-wrapper {
padding:5em 2em 2.5em;
background-color: #F1F1F1;
}
.navbar-top-links {
margin-right: 0;
}
.navbar-top-links li {
display: inline-block;
}
.navbar-top-links li:last-child {
margin-right: 15px;
}
.navbar-top-links li a {
padding: 15px;
min-height: 50px;
}
.navbar-top-links .dropdown-menu li {
display: block;
}
.navbar-top-links .dropdown-menu li:last-child {
margin-right: 0;
}
.navbar-top-links .dropdown-menu li a {
padding: 3px 20px;
min-height: 0;
}
.navbar-top-links .dropdown-menu li a div {
white-space: normal;
}
.navbar-top-links .dropdown-messages,
.navbar-top-links .dropdown-tasks,
.navbar-top-links .dropdown-alerts {
width: 310px;
min-width: 0;
}
.navbar-top-links .dropdown-messages {
margin-left: 5px;
}
.navbar-top-links .dropdown-tasks {
margin-left: -59px;
}
.navbar-top-links .dropdown-alerts {
margin-left: -123px;
}
.navbar-top-links .dropdown-user {
right: 0;
left: auto;
}
.sidebar .sidebar-nav.navbar-collapse {
padding-right: 0;
padding-left: 0;
}
.sidebar .sidebar-search {
padding: 15px;
}
.sidebar .arrow {
float: right;
}
.sidebar .fa.arrow:before {
content: "\f105";
}
.sidebar .active>a>.fa.arrow:before {
content: "\f107";
}
.sidebar .nav-second-level li,
.sidebar .nav-third-level li {
border-bottom: 0!important;
margin-bottom: 0;
}
.sidebar .nav-second-level li a {
padding:10px 0;
padding-left: 65px;
font-size: .9em;
}
.sidebar .nav-third-level li a {
padding-left: 52px;
}
@media(min-width:768px){
.navbar-top-links .dropdown-messages,
.navbar-top-links .dropdown-tasks,
.navbar-top-links .dropdown-alerts {
margin-left: auto;
}
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
/* #######################################################
HOW TO CREATE AN INTERACTIVE GRAPH USING CSS3 & JQUERY [TUTORIAL]
"How to create an Interactive Graph using CSS3 & jQuery [Tutorial]" was specially made for DesignModo by our friend Valeriu Timbuc.
Links:
http://vtimbuc.net
http://designmodo.com
http://vladimirkudinov.com
######################################################## */
/* Resets */
.graph-container,
.graph-container div,
.graph-container a,
.graph-container span {
margin: 0;
padding: 0;
}
/* Gradinet and Rounded Corners */
.graph-container, #tooltip, .graph-info a {
}
/* Graph Container */
.graph-container {
position: relative;
width: 100%;
height: 350px;
}
.graph-container > div {
position: absolute;
width: inherit;
height: inherit;
top: 0px;
left: 2px;
}
.graph-info {
width: 590px;
margin-bottom: 10px;
}
/* Text Styles */
#tooltip, .graph-info a {
height: 25px;
font-size: 12px;
line-height: 13px;
color: #999;
}
.tickLabel {
font-size: 1.2em;
color: #999;
}
/* Tooltip */
#tooltip {
position: absolute;
display: none;
padding: 5px 10px;
border: 1px solid #999;
}
/* Links */
.graph-info a {
position: relative;
display: inline-block;
float: left;
padding: 7px 10px 5px 30px;
margin-right: 10px;
text-decoration: none;
cursor: default;
}
/* Color Circle for Links */
.graph-info a:before {
position: absolute;
display: block;
content: '';
width: 8px;
height: 8px;
top: 13px;
left: 13px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}
/* Colors For each Link */
.graph-info .visitors { border-bottom: 2px solid #67398C; }
.graph-info .returning { border-bottom: 2px solid #77b7c5; }
.graph-info .visitors:before { background: #67398C; }
.graph-info .returning:before { background: #67398C; }
/* Hide the First and Last Y Label */
.yAxis .tickLabel:first-child,
.yAxis .tickLabel:last-child { display: none; }
/* Clear Floats */
.graph-info:before, .graph-info:after,
.graph-container:before, .graph-container:after {
content: '';
display: block;
clear: both;
}
.graph-container h3{
font-size:1.5em;
color:#FFF;
margin-bottom:1em;
}
/*--media Quries for 1024px-laptops-*/
@media(max-width: 1024px) {
.graph-container {
height: 499px;
}
}
/*--media Quries for 768px-laptops-*/
@media (max-width:768px) {
.graph-container {
height: 430px;
margin: 1em;
width: 94%;
}
}
@media (max-width:320px) {
.graph-container {
height: 370px;
margin: 1em;
width: 94%;
}
}
\ No newline at end of file
.jqcandlestick-container {
position: relative;
cursor: none;
}
.jqcandlestick-canvas {
position: absolute;
display: block;
height: 100%;
width: 100%;
}
This diff is collapsed.
This diff is collapsed.
/*
* Owl Carousel Owl Demo Theme
* v1.24
*/
#owl-demo .item{
}
#owl-demo .item img{
display: block;
height: auto;
}
.owl-theme .owl-controls{
margin-top: 10px;
text-align: center;
}
/* Styling Next and Prev buttons */
.owl-theme .owl-controls .owl-buttons div{
color: #FFF;
display: inline-block;
zoom: 1;
margin: 5px;
padding: 3px 10px;
font-size: 12px;
width: 33px;
height: 54px;
}
.owl-next{
background: url(../images/divice-pagenations.png) no-repeat -35px 0px;
position: absolute;
right: -8%;
top: 30%;
}
.owl-prev{
background: url(../images/divice-pagenations.png) no-repeat 0px 0px;
position: absolute;
left: -16.5%;
top: 30%;
}
/* Clickable class fix problem with hover on touch devices */
/* Use it for non-touch hover action */
.owl-theme .owl-controls.clickable .owl-buttons div:hover{
filter: Alpha(Opacity=100);/*IE7 fix*/
opacity: 1;
text-decoration: none;
}
/* Styling Pagination*/
.owl-theme .owl-controls .owl-page{
display: inline-block;
zoom: 1;
*display: inline;/*IE7 life-saver */
}
.owl-theme .owl-controls .owl-page span{
display: block;
width: 12px;
height: 12px;
margin: 5px 3px;
filter: Alpha(Opacity=50);/*IE7 fix*/
opacity: 0.5;
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
border-radius: 20px;
background: #337ab7;
}
.owl-theme .owl-controls .owl-page.active span,
.owl-theme .owl-controls.clickable .owl-page:hover span{
filter: Alpha(Opacity=100);/*IE7 fix*/
opacity: 1;
}
/* If PaginationNumbers is true */
.owl-theme .owl-controls .owl-page span.owl-numbers{
height: auto;
width: auto;
color: #FFF;
padding: 2px 10px;
font-size: 12px;
-webkit-border-radius: 30px;
-moz-border-radius: 30px;
border-radius: 30px;
}
/* preloading images */
.owl-item.loading{
min-height: 150px;
background: url(AjaxLoader.gif) no-repeat center center
}
/*
* Core Owl Carousel CSS File
* v1.24
*/
/* clearfix */
.owl-carousel .owl-wrapper:after {
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
/* display none until init */
.owl-carousel{
display: none;
position: relative;
-ms-touch-action: pan-y;
}
.owl-carousel .owl-wrapper{
display: none;
position: relative;
-webkit-transform: translate3d(0px, 0px, 0px);
}
.owl-carousel .owl-wrapper-outer{
overflow: hidden;
position: relative;
width: 100%;
}
.owl-carousel .owl-wrapper-outer.autoHeight{
-webkit-transition: height 500ms ease-in-out;
-moz-transition: height 500ms ease-in-out;
-ms-transition: height 500ms ease-in-out;
-o-transition: height 500ms ease-in-out;
transition: height 500ms ease-in-out;
}
.owl-carousel .owl-item{
float: left;
padding: 0 10px;
}
.owl-controls .owl-page,
.owl-controls .owl-buttons div{
cursor: pointer;
}
.owl-controls {
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
/* mouse grab icon */
.grabbing {
cursor:url(grabbing.png) 8 8, move;
}
/* fix */
.owl-carousel .owl-wrapper,
.owl-carousel .owl-item{
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
-webkit-transform: translate3d(0,0,0);
-moz-transform: translate3d(0,0,0);
-ms-transform: translate3d(0,0,0);
}
/* CSS3 Transitions */
.owl-origin {
-webkit-perspective: 1200px;
-webkit-perspective-origin-x : 50%;
-webkit-perspective-origin-y : 50%;
-moz-perspective : 1200px;
-moz-perspective-origin-x : 50%;
-moz-perspective-origin-y : 50%;
perspective : 1200px;
}
/* fade */
.owl-fade-out {
z-index: 10;
-webkit-animation: fadeOut .7s both ease;
-moz-animation: fadeOut .7s both ease;
animation: fadeOut .7s both ease;
}
.owl-fade-in {
-webkit-animation: fadeIn .7s both ease;
-moz-animation: fadeIn .7s both ease;
animation: fadeIn .7s both ease;
}
/* backSlide */
.owl-backSlide-out {
-webkit-animation: backSlideOut 1s both ease;
-moz-animation: backSlideOut 1s both ease;
animation: backSlideOut 1s both ease;
}
.owl-backSlide-in {
-webkit-animation: backSlideIn 1s both ease;
-moz-animation: backSlideIn 1s both ease;
animation: backSlideIn 1s both ease;
}
/* goDown */
.owl-goDown-out {
-webkit-animation: scaleToFade .7s ease both;
-moz-animation: scaleToFade .7s ease both;
animation: scaleToFade .7s ease both;
}
.owl-goDown-in {
-webkit-animation: goDown .6s ease both;
-moz-animation: goDown .6s ease both;
animation: goDown .6s ease both;
}
/* scaleUp */
.owl-fadeUp-in {
-webkit-animation: scaleUpFrom .5s ease both;
-moz-animation: scaleUpFrom .5s ease both;
animation: scaleUpFrom .5s ease both;
}
.owl-fadeUp-out {
-webkit-animation: scaleUpTo .5s ease both;
-moz-animation: scaleUpTo .5s ease both;
animation: scaleUpTo .5s ease both;
}
/* Keyframes */
/*empty*/
@-webkit-keyframes empty {
0% {opacity: 1}
}
@-moz-keyframes empty {
0% {opacity: 1}
}
@keyframes empty {
0% {opacity: 1}
}
@-webkit-keyframes fadeIn {
0% { opacity:0; }
100% { opacity:1; }
}
@-moz-keyframes fadeIn {
0% { opacity:0; }
100% { opacity:1; }
}
@keyframes fadeIn {
0% { opacity:0; }
100% { opacity:1; }
}
@-webkit-keyframes fadeOut {
0% { opacity:1; }
100% { opacity:0; }
}
@-moz-keyframes fadeOut {
0% { opacity:1; }
100% { opacity:0; }
}
@keyframes fadeOut {
0% { opacity:1; }
100% { opacity:0; }
}
@-webkit-keyframes backSlideOut {
25% { opacity: .5; -webkit-transform: translateZ(-500px); }
75% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); }
100% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); }
}
@-moz-keyframes backSlideOut {
25% { opacity: .5; -moz-transform: translateZ(-500px); }
75% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); }
100% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); }
}
@keyframes backSlideOut {
25% { opacity: .5; transform: translateZ(-500px); }
75% { opacity: .5; transform: translateZ(-500px) translateX(-200%); }
100% { opacity: .5; transform: translateZ(-500px) translateX(-200%); }
}
@-webkit-keyframes backSlideIn {
0%, 25% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(200%); }
75% { opacity: .5; -webkit-transform: translateZ(-500px); }
100% { opacity: 1; -webkit-transform: translateZ(0) translateX(0); }
}
@-moz-keyframes backSlideIn {
0%, 25% { opacity: .5; -moz-transform: translateZ(-500px) translateX(200%); }
75% { opacity: .5; -moz-transform: translateZ(-500px); }
100% { opacity: 1; -moz-transform: translateZ(0) translateX(0); }
}
@keyframes backSlideIn {
0%, 25% { opacity: .5; transform: translateZ(-500px) translateX(200%); }
75% { opacity: .5; transform: translateZ(-500px); }
100% { opacity: 1; transform: translateZ(0) translateX(0); }
}
@-webkit-keyframes scaleToFade {
to { opacity: 0; -webkit-transform: scale(.8); }
}
@-moz-keyframes scaleToFade {
to { opacity: 0; -moz-transform: scale(.8); }
}
@keyframes scaleToFade {
to { opacity: 0; transform: scale(.8); }
}
@-webkit-keyframes goDown {
from { -webkit-transform: translateY(-100%); }
}
@-moz-keyframes goDown {
from { -moz-transform: translateY(-100%); }
}
@keyframes goDown {
from { transform: translateY(-100%); }
}
@-webkit-keyframes scaleUpFrom {
from { opacity: 0; -webkit-transform: scale(1.5); }
}
@-moz-keyframes scaleUpFrom {
from { opacity: 0; -moz-transform: scale(1.5); }
}
@keyframes scaleUpFrom {
from { opacity: 0; transform: scale(1.5); }
}
@-webkit-keyframes scaleUpTo {
to { opacity: 0; -webkit-transform: scale(1.5); }
}
@-moz-keyframes scaleUpTo {
to { opacity: 0; -moz-transform: scale(1.5); }
}
@keyframes scaleUpTo {
to { opacity: 0; transform: scale(1.5); }
}
/*----responsive-mediaquries-----*/
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.
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.
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.
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