Commit 4bbdfdc3 authored by phùng văn dung's avatar phùng văn dung

dung pv

parent d7f1e514
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
<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>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version> <java.version>1.8</java.version>
</properties> </properties>
...@@ -23,10 +25,12 @@ ...@@ -23,10 +25,12 @@
<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>
<groupId>org.springframework.boot</groupId> <!-- <dependency>-->
<artifactId>spring-boot-starter-security</artifactId> <!-- <groupId>org.springframework.boot</groupId>-->
</dependency> <!-- <artifactId>spring-boot-starter-security</artifactId>-->
<!-- </dependency>-->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
...@@ -37,23 +41,44 @@ ...@@ -37,23 +41,44 @@
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope> <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> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-security</artifactId>-->
<!-- </dependency>-->
<!-- &lt;!&ndash; https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>io.jsonwebtoken</groupId>-->
<!-- <artifactId>jjwt</artifactId>-->
<!-- <version>0.9.1</version>-->
<!-- </dependency>-->
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency> <dependency>
<groupId>org.springframework.security</groupId> <groupId>log4j</groupId>
<artifactId>spring-security-test</artifactId> <artifactId>log4j</artifactId>
<scope>test</scope> <version>1.2.17</version>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
......
package com.itsol.quantrivanphong.access.login.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class EmployeeDTO {
private Integer id;
// tên đăng nhập
private String username;
// mật khẩu truy cập
private String password;
// ảnh đại diện
private String picture;
// họ
private String firstName;
// tên
private String lastName;
// email
private String email;
// số điện thoại
private String phoneNumber;
// tài khoản skype
private String skype;
// tài khoản facebook
private String facebookProfile;
// đối tượng
private String position;
// quê quán
private String homeTown;
// học vấn
private String education;
// trường
private String school;
// khoa
private String department;
// năm tốt nghiệp
private String graduationYear;
// kiểm tra tài khoản
private boolean checked;
// trạng thái kích hoạt
private int status;
}
package com.itsol.quantrivanphong.access.login.dto;
public class EmployeeRoleDTO {
}
package com.itsol.quantrivanphong.access.login.dto;
public class RoleDTO {
}
package com.itsol.quantrivanphong.manage.leaveform; package com.itsol.quantrivanphong.manager.employee;
public class test { public class test {
} }
package com.itsol.quantrivanphong.manage.issue; package com.itsol.quantrivanphong.manager.news;
public class test { public class test {
} }
package com.itsol.quantrivanphong.manager.project.project.bussiness;
import com.itsol.quantrivanphong.manager.project.project.dto.ProjectDTO;
import java.util.List;
public interface ProjectBussiness {
// Danh sách dự án tất cả các dự án
List<ProjectDTO> findAllProject();
// upload thông tin dự án
String updateProject(ProjectDTO dto);
// thêm dự án mới
String saveProject(ProjectDTO dto);
// tìm kiếm dự án theo id
ProjectDTO findByProjectId(Integer id);
// xóa dự án
String deleteProject(Integer[] ids);
}
package com.itsol.quantrivanphong.manager.project.project.bussiness;
import com.itsol.quantrivanphong.manager.project.project.dto.ProjectDTO;
import com.itsol.quantrivanphong.model.Project;
import com.itsol.quantrivanphong.manager.project.project.repository.ProjectRepository;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class ProjectBussinessImpl implements ProjectBussiness {
private Logger logger = Logger.getLogger(ProjectBussinessImpl.class);
private String views = "";
@Autowired
private ProjectRepository projectRepository;
@Override
public List<ProjectDTO> findAllProject() {
try {
return lstDTO(projectRepository.finAllEntity());
} catch (Exception e) {
logger.info("Lỗi findAll " + e.getMessage());
}
return null;
}
@Override
public String updateProject(ProjectDTO dto) {
try {
ProjectDTO projectDTO = findByProjectId(dto.getId());
if (dto.getStartDate() == null) {
views = "ngày bắt đầu dự án không được null";
} else if (dto.getEndDate() == null) {
views = "ngày dự kiếm kết thúc dự án không được null";
} else if (projectDTO != null) {
ProjectDTO updateProject = modelparseDto(projectRepository.updateEntity(dtoParseModels(dto)));
if (updateProject != null) {
views = "sửa thành công project";
}
} else {
views = "không tìm thấy project phù hợp";
}
} catch (Exception e) {
logger.info("Lỗi update" + e.getMessage());
views = "lỗi update project";
}
return views;
}
@Override
public String saveProject(ProjectDTO dto) {
try {
if (dto.getStartDate() == null) {
views = "ngày bắt đầu dự án không được null";
} else if (dto.getEndDate() == null) {
views = "ngày dự kiếm kết thúc dự án không được null";
} else {
dto.setStatusPost(0);
projectRepository.saveEntity(dtoParseModels(dto));
views = "thêm thành công project !";
}
} catch (Exception e) {
logger.info("Lỗi insert " + e.getMessage());
views = "thêm project không thành công!";
}
return views;
}
@Override
public ProjectDTO findByProjectId(Integer id) {
try {
ProjectDTO projectDTO = modelparseDto(projectRepository.findByEmtityId(id));
if (projectDTO != null) {
return projectDTO;
}
} catch (Exception e) {
logger.info("( Lỗi tìm kiếm ) " + e.getMessage());
}
return null;
}
@Override
public String deleteProject(Integer[] ids) {
int count = 0;
count = projectRepository.deleteEntity(ids);
if (count != 0) {
views = "xóa thành công " + count + " project";
} else {
views = "project không tồn tại";
}
return views;
}
public List<ProjectDTO> lstDTO(List<Project> lstModels) {
List<ProjectDTO> lstDTO = new ArrayList<>();
for (Project project : lstModels) {
lstDTO.add(modelparseDto(project));
}
return lstDTO;
}
public ProjectDTO modelparseDto(Project model) {
ProjectDTO dto = new ProjectDTO();
dto.setId(model.getId());
dto.setName(model.getName());
dto.setDescriptions(model.getDescriptions());
dto.setStartDate(model.getStartDate());
dto.setEndDate(model.getEndDate());
if(model.getStatus()==0){
dto.setStatusGet("Dự Kiến");
}else if(model.getStatus()==1){
dto.setStatusGet("Đang Tiến Hành");
}else{
dto.setStatusGet("Đã Hoàn Thành");
}
return dto;
}
public Project dtoParseModels(ProjectDTO projectDTO) {
Project project = new Project();
project.setId(projectDTO.getId());
project.setName(projectDTO.getName());
project.setDescriptions(projectDTO.getDescriptions());
project.setStartDate(projectDTO.getStartDate());
project.setEndDate(projectDTO.getEndDate());
project.setStatus(projectDTO.getStatusPost());
return project;
}
}
package com.itsol.quantrivanphong.manager.project.project.controller;
import com.itsol.quantrivanphong.report.issue.common.SystemConstants;
import com.itsol.quantrivanphong.manager.project.project.bussiness.ProjectBussiness;
import com.itsol.quantrivanphong.manager.project.project.dto.ProjectDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping(value = "/quan-tri")
public class ProjectController {
@Autowired
private ProjectBussiness projectBussiness;
@GetMapping(value = "/danh-sach-du-an")
public ResponseEntity<List<ProjectDTO>> getAllProject(){
return ResponseEntity.ok(projectBussiness.findAllProject());
}
@GetMapping(value = "/chi-tiet-du-an/{id}",produces = SystemConstants.TYPE_JSON)
public ResponseEntity<ProjectDTO> findProjectId(@PathVariable Integer id){
ProjectDTO projectDTO = projectBussiness.findByProjectId(id);
return ResponseEntity.ok(projectDTO);
}
@PostMapping(value = "/them-du-an",consumes = SystemConstants.TYPE_JSON)
public ResponseEntity saveProject(@RequestBody ProjectDTO projectDTO){
String views = projectBussiness.saveProject(projectDTO);
return ResponseEntity.ok(views);
}
@PutMapping(value = "/sua-du-an",consumes = SystemConstants.TYPE_JSON)
public ResponseEntity updateProject(@RequestBody ProjectDTO projectDTO){
String views = projectBussiness.updateProject(projectDTO);
return ResponseEntity.ok(views);
}
@DeleteMapping(value = "/xoa-du-an",consumes = SystemConstants.TYPE_JSON)
public ResponseEntity deleteProject(@RequestBody ProjectDTO projectDTO){
String views = projectBussiness.deleteProject(projectDTO.getIds());
return ResponseEntity.ok(views);
}
}
package com.itsol.quantrivanphong.manager.project.project.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.sql.Timestamp;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProjectDTO {
private int id;
// tên project
private String name;
//mô tả ngắn
private String descriptions;
//ngày bắt đầu của dự án
private Timestamp startDate;
//ngày kết thúc dự án
private Timestamp endDate;
//trạng thái thêm vào dataBase
private Integer statusPost;
//trạng thái lấy dữ liệu lên cline
private String statusGet;
// danh sách id
private Integer[] ids;
}
package com.itsol.quantrivanphong.manager.project.project.repository;
import com.itsol.quantrivanphong.report.issue.common.GennericeEntityManagerDao;
import com.itsol.quantrivanphong.model.Project;
public interface ProjectRepository extends GennericeEntityManagerDao<Integer, Project> {
}
package com.itsol.quantrivanphong.manager.project.project.repository;
import com.itsol.quantrivanphong.report.issue.common.AbstractEntityManagerDao;
import com.itsol.quantrivanphong.model.Project;
import org.springframework.stereotype.Repository;
@Repository
public class ProjectRepositoryImpl extends AbstractEntityManagerDao<Integer, Project> implements ProjectRepository{
}
package com.itsol.quantrivanphong.manager.project.projectgroup.bussiness;
import com.itsol.quantrivanphong.manager.project.projectgroup.dto.ProjectGroupDTO;
import java.util.List;
public interface ProjectGroupBussiness {
// chi tiết nhóm dự án
List<ProjectGroupDTO> getGroupByProjectId(Integer projectId);
// thêm thành viên vào nhóm dự án
String saveEmployeeProject(ProjectGroupDTO dto);
// sửa thông tin nhóm dự án, các thành viên out nhóm
String updateEmployeeProject(ProjectGroupDTO dto);
// Tìm kiếm thành viên trong nhóm theo tên đăng nhập
ProjectGroupDTO findEmployeeProject(String username);
// thành viên out dự án
String outProjectGroup(Integer[]ids);
}
package com.itsol.quantrivanphong.manager.project.projectgroup.bussiness;
import com.itsol.quantrivanphong.model.Project;
import com.itsol.quantrivanphong.manager.project.project.repository.ProjectRepository;
import com.itsol.quantrivanphong.manager.project.projectgroup.common.EmployeeRepositoryImpl;
import com.itsol.quantrivanphong.manager.project.projectgroup.common.ProjectGroupUtils;
import com.itsol.quantrivanphong.manager.project.projectgroup.dto.ProjectGroupDTO;
import com.itsol.quantrivanphong.model.Eproject;
import com.itsol.quantrivanphong.manager.project.projectgroup.repository.ProjectGroupRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ProjectGroupBussinessImpl implements ProjectGroupBussiness {
@Autowired
private ProjectGroupRepository projectGroupRepository;
@Autowired
private ProjectRepository projectRepository;
@Autowired
private EmployeeRepositoryImpl employeeRepository;
@Autowired
private ProjectGroupUtils utils;
@Override
public List<ProjectGroupDTO> getGroupByProjectId(Integer projectId) {
Project project = projectRepository.findByEmtityId(projectId);
if (project != null) {
List<Eproject> lstModels = projectGroupRepository.finByProperty("project", project, "joinDate", "DESC");
List<ProjectGroupDTO> lstDTO = utils.getListDTO(lstModels);
return lstDTO;
}
return null;
}
@Override
public String saveEmployeeProject(ProjectGroupDTO dto) {
String views = "";
try{
projectGroupRepository.saveEntity(utils.Model(dto));
views="thêm thành công nhân viên vào nhóm dự án";
}catch (Exception e){
views="thêm không thành công!";
}
return views;
}
@Override
public String updateEmployeeProject(ProjectGroupDTO dto) {
String views="";
Eproject eproject = projectGroupRepository.findByEmtityId(dto.getId());
if(eproject!=null){
Eproject updateProjectGroup = projectGroupRepository.updateEntity(utils.Model(dto));
if(updateProjectGroup!=null){
views = "Sửa thành công";
}
}else{
views = "đối tượng không tồn tại";
}
return null;
}
@Override
public ProjectGroupDTO findEmployeeProject(String username) {
return null;
}
@Override
public String outProjectGroup(Integer[] ids) {
String views = "";
int count=0;
count = projectGroupRepository.deleteEntity(ids);
if(count!=0){
views="Bạn đã cho "+count+" thoát ra khỏi nhóm";
}else{
views=" thành viên không tồn tại";
}
return views;
}
}
package com.itsol.quantrivanphong.manager.project.projectgroup.common;
import com.itsol.quantrivanphong.model.Employee;
import com.itsol.quantrivanphong.report.issue.common.AbstractEntityManagerDao;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
@Service
public class EmployeeRepositoryImpl extends AbstractEntityManagerDao<Integer, Employee> {
private Logger logger = Logger.getLogger(EmployeeRepositoryImpl.class);
public Employee getEmployeeById(Integer employeeId) {
try {
Employee employee = findByEmtityId(employeeId);
if (employee != null) {
return employee;
}
} catch (Exception e) {
logger.info("( Lỗi tìm employee theo ID: )" + e.getMessage());
}
return null;
}
}
package com.itsol.quantrivanphong.manager.project.projectgroup.common;
import com.itsol.quantrivanphong.access.login.dto.EmployeeDTO;
import com.itsol.quantrivanphong.model.Employee;
import com.itsol.quantrivanphong.manager.project.project.dto.ProjectDTO;
import com.itsol.quantrivanphong.model.Project;
import com.itsol.quantrivanphong.manager.project.project.repository.ProjectRepository;
import com.itsol.quantrivanphong.manager.project.projectgroup.dto.ProjectGroupDTO;
import com.itsol.quantrivanphong.model.Eproject;
import org.apache.log4j.Logger;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class ProjectGroupUtils {
private static Logger logger = Logger.getLogger(ProjectGroupUtils.class);
@Autowired
private EmployeeRepositoryImpl employeeRepository;
@Autowired
private ProjectRepository projectRepository;
public Eproject Model(ProjectGroupDTO dto){
Eproject model = new Eproject();
model.setId(dto.getId());
model.setJoinDate(dto.getJoinDate());
model.setOutDate(dto.getOutDate());
model.setPosition(dto.getPosition());
try{
Employee findEmployee = employeeRepository.getEmployeeById(dto.getUserId());
if(findEmployee!=null){
model.setEmployee(findEmployee);
}
}catch (Exception e){
logger.info("(Lỗi không tìm thấy Employee) "+e.getMessage());
}
try{
Project project = projectRepository.findByEmtityId(dto.getProjectId());
if(project!=null){
model.setProject(project);
}
}catch (Exception e){
logger.info("(Lỗi không tìm thấy Project) "+e.getMessage());
}
return model;
}
public ProjectGroupDTO DTO(Eproject models) {
ProjectGroupDTO dto = new ProjectGroupDTO();
dto.setId(models.getId());
// set project
ProjectDTO projectDTO = new ProjectDTO();
BeanUtils.copyProperties(models.getProject(),projectDTO);
dto.setProjectDTO(projectDTO);
// set employee
EmployeeDTO employeeDTO = new EmployeeDTO();
employeeDTO.setId(models.getEmployee().getId());
employeeDTO.setUsername(models.getEmployee().getUsername());
employeeDTO.setLastName(models.getEmployee().getLastName());
employeeDTO.setEmail(models.getEmployee().getEmailAddress());
employeeDTO.setFacebookProfile(models.getEmployee().getFacebookProfile());
employeeDTO.setSkype(models.getEmployee().getSkype());
dto.setEmployeeDTO(employeeDTO);
dto.setJoinDate(models.getJoinDate());
dto.setOutDate(models.getOutDate());
dto.setPosition(models.getPosition());
return dto;
}
public List<ProjectGroupDTO> getListDTO(List<Eproject> lstModel){
if(!lstModel.isEmpty()||lstModel.size()!=0){
List<ProjectGroupDTO> lstDTO = new ArrayList<ProjectGroupDTO>();
for (Eproject eproject:lstModel) {
lstDTO.add(DTO(eproject));
}
return lstDTO;
}
return null;
}
}
package com.itsol.quantrivanphong.manager.project.projectgroup.controller;
import com.itsol.quantrivanphong.report.issue.common.SystemConstants;
import com.itsol.quantrivanphong.manager.project.projectgroup.bussiness.ProjectGroupBussiness;
import com.itsol.quantrivanphong.manager.project.projectgroup.dto.ProjectGroupDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class ProjectGroupController {
@Autowired
private ProjectGroupBussiness projectGroupBussiness;
// thông tin của 1 nhóm dư án theo id của dự án
// Team lead,Hr
@GetMapping(value = "/thong-tin-du-an/{id}", produces = SystemConstants.TYPE_JSON)
public ResponseEntity<List<ProjectGroupDTO>> getOneProjectGroup(@PathVariable("id") Integer projectId) {
return ResponseEntity.ok(projectGroupBussiness.getGroupByProjectId(projectId));
}
// thêm thành viên vào dự án
// hr,manager, teamlead thêm thành viên
@PostMapping(value = "/them-thanh-vien", consumes = SystemConstants.TYPE_JSON, produces = SystemConstants.TYPE_JSON)
public ResponseEntity addMemberProject(@RequestBody ProjectGroupDTO projectGroupDTO) {
String views = projectGroupBussiness.saveEmployeeProject(projectGroupDTO);
return ResponseEntity.ok(views);
}
// cập nhật thông tin thành viên
// manager cập nhật chức vụ cho nhân viên vào xét duyệt vào dự án
@PutMapping(value = "/cap-nhat-thong-tin-thanh-vien",consumes = SystemConstants.TYPE_JSON, produces = SystemConstants.TYPE_JSON)
public ResponseEntity updateMemberProject(@RequestBody ProjectGroupDTO projectGroupDTO) {
String views = projectGroupBussiness.updateEmployeeProject(projectGroupDTO);
return ResponseEntity.ok(views);
}
// xóa thành viên ra khỏi dự án
@DeleteMapping(value = "/thanh-vien-out-du-an")
public ResponseEntity deleteMemberProject(@RequestBody ProjectGroupDTO projectGroupDTO){
String views = projectGroupBussiness.outProjectGroup(projectGroupDTO.getIds());
return ResponseEntity.ok(views);
}
}
package com.itsol.quantrivanphong.manager.project.projectgroup.dto;
import com.itsol.quantrivanphong.access.login.dto.EmployeeDTO;
import com.itsol.quantrivanphong.manager.project.project.dto.ProjectDTO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.sql.Timestamp;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ProjectGroupDTO {
private int id;
// chức vụ trong project
private String position;
//ngày vào dự án
private Timestamp joinDate;
// ngày ra dự án
private Timestamp outDate;
private Integer userId;
private Integer projectId;
private EmployeeDTO employeeDTO;
private ProjectDTO projectDTO;
private Integer[]ids;
}
package com.itsol.quantrivanphong.manager.project.projectgroup.repository;
import com.itsol.quantrivanphong.report.issue.common.GennericeEntityManagerDao;
import com.itsol.quantrivanphong.model.Eproject;
public interface ProjectGroupRepository extends GennericeEntityManagerDao<Integer, Eproject> {
}
package com.itsol.quantrivanphong.manager.project.projectgroup.repository;
import com.itsol.quantrivanphong.report.issue.common.AbstractEntityManagerDao;
import com.itsol.quantrivanphong.model.Eproject;
import org.springframework.stereotype.Repository;
@Repository
public class ProjectGroupRepositoryImpl extends AbstractEntityManagerDao<Integer, Eproject> implements ProjectGroupRepository {
}
package com.itsol.quantrivanphong.manager.reportdetail;
public class test {
}
package com.itsol.quantrivanphong.model; package com.itsol.quantrivanphong.model;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.itsol.quantrivanphong.model.Employee;
import com.itsol.quantrivanphong.model.TimeSheet;
import com.itsol.quantrivanphong.model.Project;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import java.sql.Timestamp;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -20,21 +24,19 @@ public class Eproject { ...@@ -20,21 +24,19 @@ public class Eproject {
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, unique = true) @Column(name = "id", nullable = false, unique = true)
private int id; private int id;
// chức vụ trong project
@Column(name = "position", nullable = false) @Column(name = "position", nullable = false)
private String position; private String position;
//ngày vào dự án
@Column(name = "join_date",nullable =false)
private Timestamp joinDate;
// ngày ra dự án
@Column(name = "out_date",nullable = true)
private Timestamp outDate;
@Column(name = "join_date")
private String joinDate;
@Column(name = "out_date")
private String outDate;
// @JsonIgnore
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.EAGER)
private Employee employee; private Employee employee;
// @JsonIgnore
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.EAGER)
private Project project; private Project project;
......
package com.itsol.quantrivanphong.model; package com.itsol.quantrivanphong.model;
import com.itsol.quantrivanphong.model.Project;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
...@@ -17,17 +18,16 @@ public class Issues { ...@@ -17,17 +18,16 @@ public class Issues {
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, unique = true) @Column(name = "id", nullable = false, unique = true)
private int id; private int id;
// tiêu đề liên quan
@Column(name = "title") @Column(name = "title")
private String title; private String title;
//nội dung
@Column(name = "content") @Column(name = "content")
private String actionCode; private String actionCode;
// trạng thái vấn đề đó trong project
@Column(name = "status") @Column(name = "status")
private boolean status; private boolean status;
// @JsonIgnore
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.EAGER)
private Project project; private Project project;
} }
...@@ -7,6 +7,7 @@ import lombok.Data; ...@@ -7,6 +7,7 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import java.sql.Timestamp;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -22,20 +23,22 @@ public class Project { ...@@ -22,20 +23,22 @@ public class Project {
@Column(name = "id", nullable = false, unique = true) @Column(name = "id", nullable = false, unique = true)
private int id; private int id;
// tên project
@Column(name = "name", nullable = false) @Column(name = "name", nullable = false)
private String name; private String name;
//mô tả ngắn
@Column(name = "descriptions") @Column(name = "descriptions")
private String descriptions; private String descriptions;
//ngày bắt đầu của dự án
@Column(name = "start_date", nullable = false) @Column(name = "start_date", nullable = false)
private String startDate; private Timestamp startDate;
//ngày kết thúc dự án
@Column(name = "end_date", nullable = false) @Column(name = "end_date")
private String endDate; private Timestamp endDate;
//trạng thái
@Column(name = "status") @Column(name = "status",nullable = false)
private boolean status; private Integer status;
@JsonIgnore @JsonIgnore
@OneToMany(mappedBy = "project", fetch = FetchType.LAZY, cascade = CascadeType.ALL) @OneToMany(mappedBy = "project", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
......
...@@ -24,9 +24,8 @@ public class Role { ...@@ -24,9 +24,8 @@ public class Role {
@Column(name = "role_name", nullable = false, unique = true) @Column(name = "role_name", nullable = false, unique = true)
private String roleName; private String roleName;
@JsonIgnore @Column(name = "role_code", nullable = false, unique = true)
@OneToMany(mappedBy = "role", fetch = FetchType.LAZY, cascade = CascadeType.ALL) private String roleCode;
private List<RoleDetail> roleDetails = new ArrayList<>();
@JsonIgnore @JsonIgnore
@OneToMany(mappedBy = "role", fetch = FetchType.LAZY, cascade = CascadeType.ALL) @OneToMany(mappedBy = "role", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
......
package com.itsol.quantrivanphong.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "role_detail")
public class RoleDetail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, unique = true)
private int id;
@Column(name = "action_name", length = 50)
private String actionName;
@Column(name = "action_code", length = 50)
private String actionCode;
@Column(name = "status")
private boolean status;
// @JsonIgnore
@ManyToOne(fetch = FetchType.EAGER)
private Role role;
}
...@@ -17,19 +17,19 @@ public class TimeSheet { ...@@ -17,19 +17,19 @@ public class TimeSheet {
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false, unique = true) @Column(name = "id", nullable = false, unique = true)
private int id; private int id;
// tiêu đề
@Column(name = "title") @Column(name = "title")
private String title; private String title;
// nội dung
@Column(name = "content") @Column(name = "content")
private String content; private String content;
// ghi chú
@Column(name = "note") @Column(name = "note")
private String note; private String note;
// Duyệt, Chưa duyệt, Từ chối
@Column(name = "checked") @Column(name = "checked")
private String checked; private String checked;
// trạng thái
@Column(name = "status") @Column(name = "status")
private boolean status; private boolean status;
......
package com.itsol.quantrivanphong.report.issue.common;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.springframework.beans.factory.annotation.Autowired;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.TypedQuery;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;
public class AbstractEntityManagerDao<ID extends Serializable, T> implements GennericeEntityManagerDao<ID, T> {
@Autowired
EntityManager entityManager;
@Autowired
EntityManagerFactory entityManagerFactory;
private final static Logger log = Logger.getLogger(AbstractEntityManagerDao.class);
private Class<T> persistenceClass;
// Lấy Entity T trong Generic
public AbstractEntityManagerDao() {
this.persistenceClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1];
}
// get persistenceClass
public String getPersistenceClass() {
return persistenceClass.getSimpleName();
}
public List<T> finAllEntity() {
log.info("find All record from db");
List<T> list = new ArrayList<T>();
try {
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
StringBuilder sql = new StringBuilder(" from ");
sql.append(this.getPersistenceClass());
list = entityManager.createQuery(sql.toString(), persistenceClass).getResultList();
} catch (HibernateException e) {
log.info(e.getMessage());
} finally {
if (entityManager != null) {
entityManager.close();
}
}
return list;
}
public void saveEntity(T t) {
log.info("save object");
try {
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.persist(t);
entityManager.getTransaction().commit();
} catch (HibernateException e) {
entityManager.getTransaction().rollback();
log.info(e.getMessage());
} finally {
if (entityManager != null) {
entityManager.close();
}
}
}
public T updateEntity(T t) {
log.info("update object");
T entity = null;
try {
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entity = entityManager.merge(t);
entityManager.getTransaction().commit();
return entity;
} catch (HibernateException e) {
entityManager.getTransaction().rollback();
log.info(e.getMessage());
} finally {
if (entityManager != null) {
entityManager.close();
}
}
return entity;
}
public Integer deleteEntity(ID[] ids) {
log.info("delete by id ");
Integer count = 0;
try {
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
for (ID id : ids) {
T entity = entityManager.find(persistenceClass, id);
if (entity != null) {
entityManager.remove(entity);
count++;
}
}
entityManager.getTransaction().commit();
} catch (HibernateException e) {
entityManager.getTransaction().rollback();
log.info(e.getMessage());
} finally {
if (entityManager != null) {
entityManager.close();
}
}
return count;
}
@Override
public T findByEmtityId(ID id) {
log.info("find by id");
T entity = null;
try {
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entity = entityManager.find(persistenceClass,id);
entityManager.getTransaction().commit();
} catch (Exception e) {
entityManager.getTransaction().rollback();
log.info(e.getMessage());
} finally {
if (entityManager != null) {
entityManager.close();
}
}
return entity;
}
// Tìm kiếm 1 list danh sách theo value sắp xếp theo ASC or DESC size của list
@Override
public List<T> finByProperty(String property, Object value, String sortExperssion, String sortDirection) {
log.info("find by value");
List<T> list = new ArrayList<T>();
try {
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
StringBuilder sql = new StringBuilder(" from ");
sql.append(getPersistenceClass());
if(property!=null && value !=null) {
sql.append(" where ").append(property).append(" = ?1");
}
if(sortExperssion!=null && sortDirection!=null) {
sql.append(" order by ").append(sortExperssion);
sql.append(" "+(sortDirection.equals("ASC")?"asc":"desc"));
}
TypedQuery<T> query1 = entityManager.createQuery(sql.toString(),persistenceClass);
list = query1.setParameter(1,value).getResultList();
} catch (HibernateException e) {
entityManager.getTransaction().rollback();
log.info(e.getMessage());
}finally {
entityManager.close();
}
return list;
}
}
package com.itsol.quantrivanphong.report.issue.common;
import java.io.Serializable;
import java.util.List;
public interface GennericeEntityManagerDao<ID extends Serializable,T> {
List<T> finAllEntity();
void saveEntity(T entity);
T updateEntity(T entity);
Integer deleteEntity(ID[] ids);
T findByEmtityId(ID id);
List<T> finByProperty(String property, Object value, String sortExperssion, String sortDirection);
}
package com.itsol.quantrivanphong.report.issue.common;
public class SystemConstants {
public static final String TYPE_JSON = "application/json";
}
package com.itsol.quantrivanphong.report.issue.repository;
import com.itsol.quantrivanphong.report.issue.common.GennericeEntityManagerDao;
import com.itsol.quantrivanphong.model.Issues;
public interface IssueRepository extends GennericeEntityManagerDao<Integer, Issues> {
}
package com.itsol.quantrivanphong.report.issue.repository;
import com.itsol.quantrivanphong.report.issue.common.AbstractEntityManagerDao;
import com.itsol.quantrivanphong.model.Issues;
import org.springframework.stereotype.Repository;
@Repository
public class IssueRepositoryImpl extends AbstractEntityManagerDao<Integer, Issues> implements IssueRepository{
}
package com.itsol.quantrivanphong.report.news; package com.itsol.quantrivanphong.report.issue;
public class test { public class test {
} }
package com.itsol.quantrivanphong.manage.timesheet; package com.itsol.quantrivanphong.report.leaveform;
public class test { public class test {
} }
package com.itsol.quantrivanphong.report.project;
public class test {
}
package com.itsol.quantrivanphong.report.reportdetail;
public class test {
}
package com.itsol.quantrivanphong.report.employee; package com.itsol.quantrivanphong.report.timesheet;
public class test { public class test {
} }
...@@ -3,26 +3,15 @@ server.port=8081 ...@@ -3,26 +3,15 @@ server.port=8081
# DATABASE CONNECTION # DATABASE CONNECTION
# =============================== # ===============================
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/quantrivanphong spring.datasource.url=jdbc:mysql://localhost:3306/qtvp_01
spring.datasource.username=root spring.datasource.username=root
spring.datasource.password= spring.datasource.password=12345678
# ===============================
# JPA / HIBERNATE
# ===============================
spring.jpa.show-sql=true spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
#spring.jpa.properties.hibernate.default_schema=qlns_itsol
## Fix Postgres JPA Error:
## Method org.postgresql.jdbc.PgConnection.createClob() is not yet implemented.
#spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
# ===============================
# SEND EMAIL
# ==============================
spring.mail.host=smtp.gmail.com spring.mail.host=smtp.gmail.com
spring.mail.port=587 spring.mail.port=587
spring.mail.username= spring.mail.username=
......
# Root logger option
log4j.rootLogger=DEBUG, stdout, file
# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=D:\\application1.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
\ No newline at end of file
<!-- Sticky Footer -->
<footer class="sticky-footer">
<div class="container my-auto">
<div class="copyright text-center my-auto">
<span>PS: Phung Van Dung</span>
</div>
</div>
</footer>
\ No newline at end of file
<nav class="navbar navbar-expand navbar-dark bg-dark static-top">
<a class="navbar-brand mr-1" href="index.html">Trang Quản Trị</a>
<!-- Navbar Search -->
<form class="d-none d-md-inline-block form-inline ml-auto mr-0 mr-md-3 my-2 my-md-0">
</form>
<!-- Navbar -->
<ul class="navbar-nav ml-auto ml-md-0">
<li class="nav-item dropdown no-arrow">
<a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
<i class="fas fa-user-circle fa-fw"></i>Admin
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="userDropdown">
<a class="dropdown-item" href="#">Profile</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#logoutModal">Logout</a>
</div>
</li>
</ul>
</nav>
\ No newline at end of file
<div id="wrapper">
<!-- Sidebar -->
<ul class="sidebar navbar-nav">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="pagesDropdown" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
<i class="fas fa-fw fa-folder"></i>
<span>Quản Trị Văn Phòng</span>
</a>
<div class="dropdown-menu" aria-labelledby="pagesDropdown">
<h6 class="dropdown-header">Quản Trị</h6>
<a class="dropdown-item" data-ng-href="/project/danh-sach-tat-ca-du-an.html">Dự Án</a>
<a class="dropdown-item" href="#">Nhân Viên</a>
<a class="dropdown-item" href="#">Báo Cáo</a>
<a class="dropdown-item" href="#">Tin Tức</a>
<div class="dropdown-divider">aaa</div>
<h6 class="dropdown-header">Báo Cáo</h6>
<a class="dropdown-item" href="#">Xin Phép</a>
<a class="dropdown-item" href="#">Time Sheet</a>
<a class="dropdown-item" href="#">Quản lý Issuses</a>
</div>
</li>
</ul>
</div>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Quản Trị Văn Phòng</title>
<!-- angular -->
<script src="angularjs/angular.js"></script>
<!-- Custom fonts for this template-->
<link href="https://use.fontawesome.com/releases/v5.6.3/css/all.css"
rel="stylesheet" type="text/css">
<link href="admin/css/all.min.css" rel="stylesheet"
type="text/css">
<!-- Page level plugin CSS-->
<link href="admin/css/dataTables.bootstrap4.css"
rel="stylesheet">
<!-- Custom styles for this template-->
<link href="admin/css/sb-admin.css" rel="stylesheet">
</head>
<body ng-app="">
<!-- header -->
<div ng-include=" 'common/admin/header.html' "></div>
<!--end header -->
<div id="wrapper">
<!-- menu -->
<div ng-include=" 'common/admin/menu.html' "></div>
<!-- end menu -->
<div class="container-fluid">
<!-- Content -->
<div class="card mb-3">
<div class="card-header">
<i class="fas fa-table"></i> Danh Sách Dự Án
</div>
<div class="card-body" ng-app="ProjectApiModule">
<div class="table-responsive" ng-controller="showProject">
<a href="#" class="btn btn-primary btn-circle btn-sm" style="margin-bottom: 10px;"> Thêm </a>
<table class="table table-bordered" id="dataTable" width="100%"
cellspacing="0">
<thead>
<tr>
<th>Tên Dự Án</th>
<th>Mô tả ngắn</th>
<th>Ngày bắt đầu</th>
<th>Hạn giao</th>
<th>Trạng Thái</th>
<th>Thao Tác</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="project in listProject">
<td>{{ project.name }}</td>
<td>{{ project.descriptions }}</td>
<td>{{ project.startDate | date:"dd/MM/yyyy" }}</td>
<td>{{ project.endDate | date:"dd/MM/yyyy" }}</td>
<td>{{ project.statusGet }}</td>
<td><a data-ng-href="#" class="btn btn-info btn-circle btn-sm">
Xem </a> <a data-ng-href="#" class="btn btn-warning btn-circle btn-sm">
Sửa </a> <a data-ng-href="#" class="btn btn-danger btn-circle btn-sm">Xóa</a>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!--End Content -->
</div>
<!-- footer -->
<div ng-include=" 'common/admin/footer.html' "></div>
</div>
<!--end footer -->
<!-- Js -->
<!-- Bootstrap core JavaScript-->
<script src="admin/js/jquery.min.js"></script>
<script src="admin/js/bootstrap.bundle.min.js"></script>
<!-- Core plugin JavaScript-->
<script src="admin/js/jquery.easing.min.js"></script>
<!-- Page level plugin JavaScript-->
<script src="admin/js/Chart.min.js"></script>
<script src="admin/js/jquery.dataTables.js"></script>
<script src="admin/js/dataTables.bootstrap4.js"></script>
<!-- Custom scripts for all pages-->
<script src="admin/js/sb-admin.min.js"></script>
<!--angular js-->
<script src="components/project/projectController.js"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Nhóm Dự Án</title>
</head>
<body>
</body>
</html>
\ No newline at end of file
<div class="card-header">
<i class="fas fa-table"></i> Thêm mới dự án
</div>
<div class="card-body" ng-app="insertProjectModule">
<form ng-controller="insertProject">
<div class="form-group">
<div class="form-row">
<div class="col-md-6">
<div class="form-label-group">
<input type="text" ng-model="lstProject.name" id="name" class="form-control"
placeholder="Tên Dự Án"
required="required" autofocus="autofocus">
<label for="name">Tên Dự Án</label>
<span>{{lstProject.name}}</span>
</div>
</div>
<div class="col-md-6">
<div class="form-label-group">
<input type="text" ng-model="lstProject.descriptions" id="descriptions"
class="form-control"
placeholder="Mô tả ngắn"
required="required">
<label for="descriptions">Mô tả ngắn</label>
</div>
</div>
</div>
</div>
<div class="form-group">
<div class="form-row">
<div class="col-md-6">
<div class="form-label-group">
<input type="text" ng-model="lstProject.startDate" id="startDate" class="form-control"
placeholder="Ngày Bắt Đầu" required="required">
<label for="startDate">Ngày Bắt Đầu</label>
</div>
</div>
<div class="col-md-6">
<div class="form-label-group">
<input type="text" ng-model="lstProject.endDate" id="endDate" class="form-control"
placeholder="nick skype" required="required">
<label for="endDate">Ngày Kết Thuc</label>
</div>
</div>
</div>
</div>
<div>
<input ng-click="insert_project()" type="submit" value="Lưu">
<input type="reset" value="Reset">
</div>
</form>
</div>
<script src="components/project/projectAddController.js"></script>
\ No newline at end of file
<div class="card mb-3">
<div class="card-header">
<i class="fas fa-table"></i> Danh Sách Dự Án
</div>
<div class="card-body" ng-app="GetAPI">
<div class="table-responsive" ng-controller="showProject">
<a href="#" class="btn btn-primary btn-circle btn-sm" style="margin-bottom: 10px;"> Thêm </a>
<table class="table table-bordered" id="dataTable" width="100%"
cellspacing="0">
<thead>
<tr>
<th>Tên Dự Án</th>
<th>Mô tả ngắn</th>
<th>Ngày bắt đầu</th>
<th>Hạn giao</th>
<th>Trạng Thái</th>
<th>Thao Tác</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="project in listProject">
<td>{{ project.name }}</td>
<td>{{ project.descriptions }}</td>
<td>{{ project.startDate | date:"dd/MM/yyyy" }}</td>
<td>{{ project.endDate | date:"dd/MM/yyyy" }}</td>
<td>{{ project.statusGet }}</td>
<td><a data-ng-href="#" class="btn btn-info btn-circle btn-sm">
Xem </a> <a data-ng-href="#" class="btn btn-warning btn-circle btn-sm">
Sửa </a> <a data-ng-href="#" class="btn btn-danger btn-circle btn-sm">Xóa</a>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!--angular js-->
<script src="components/project/projectController.js"></script>
\ No newline at end of file
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 diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
/*! 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( ['static/admin/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(["static/admin/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});
This diff is collapsed.
This diff is collapsed.
/*
* 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(['static/admin/js/jquery'], function ($) {
return factory($);
});
} else if (typeof module === "object" && typeof module.exports === "object") {
exports = factory(require('static/admin/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(["static/admin/js/jquery"],function($){return factory($)})}else if(typeof module==="object"&&typeof module.exports==="object"){exports=factory(require("static/admin/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.
This source diff could not be displayed because it is too large. You can view the blob instead.
/Router
angular.module('ProjectApiModule', ['ui.router', 'ngResource', 'ProjectApiModule.controllers', 'ProjectApiModule.services']).config(function($stateProvider) {
$stateProvider.state('project.State', {
url: '/list-project',
templateUrl: 'project/projectListViews.html',
controller: 'carCtrlr'
}).state('showCar', {
url: '/:Id1',
templateUrl: 'car-detail.html',
controller: 'carDetailCtrl'
}).state('newCar', {
url: '/new',
templateUrl: 'car-create.html',
controller: 'carCreateController'
}).state('editCar', {
url: '/edit/:Id2',
templateUrl: 'car-edit.html',
controller: 'carEditCtrl'
});
}).run(function($state) {
$state.go('project.State');
});
\ No newline at end of file
var app = angular.module('ProjectApiModule', []);
app.controller('showProject',showProject);
app.controller('insertProject',insertProject);
// controlers tạo Get API
function showProject($scope, $http){
$http.get("http://localhost:8081/quan-tri/danh-sach-du-an").then(successCallback, errorCallback);
function successCallback(response){
//success code
console.log(response.data);
{$scope.listProject = response.data}
}
function errorCallback(error){
//error code
console.log("can't get data!!");
}
};
// tạo controllers insert APT
function insertProject($scope, $http) {
$scope.insert_project = function () {
$http({
//khai báo type
method: 'POST',
//đường dẫn API
url: 'http://localhost:8081/quan-tri/them-du-an',
//truyền dữ liệu nhập trên cline vào data
data: angular.toJson($scope.lstProject),
//kiểu dữ liệu API
headers: {
'Content-Type': 'application/json'
}
// kết quả trả về (THEN)
}).then(successCallback,errorCallback);
//tạo funtion nếu thành công!
function successCallback(response){
$window.location.href = 'http://localhost:8081/#!/';
}
//tạo funtion kiểm tra nếu thất bại
function errorCallback(error){
//error code
console.log("can't insert data!!");
}
}
};
//tạo service lấy id của đường dẫn
angular.module('ProjectApiModule.Services', []).factory('Car', function($resource) {
return $resource('http://localhost/car-management/api-web-car/get/:id', { id: '@myCarId' }, {
update: {
method: 'PUT'
}
});
});
\ No newline at end of file
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