diff --git a/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java new file mode 100644 index 0000000..02befb2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/projection/DrpApprovalView.java @@ -0,0 +1,38 @@ +package com.iconplus.smartproc.model.projection; + +import java.sql.Date; + +public interface DrpApprovalView { + + Long getId(); + void setId(Long id); + + Long getDrpId(); + void setDrpId(Long drpId); + + Integer getTahun(); + void setTahun(); + + String getApproveStatus(); + void setApproveStatus(String approveStatus); + + Date getApproverVpDate(); + void setApproveVpDate(Date approveVpDate); + + Date getApproverKomite1Date(); + void setApproveKomite1Date(Date approveKomite1Date); + + Date getApproverKomite2Date(); + void setApproveKomite2Date(Date approveKomite2Date); + + Date getApproverKomite3Date(); + void setApproveKomite3Date(Date approveKomite3Date); + + Date getApproverKomite4Date(); + void setApproveKomite4Date(Date approveKomite4Date); + + Date getApproverDirekturDate(); + void setApproveDirekturDate(Date approveDirekturDate); + + +} diff --git a/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java index 820bc70..53df50e 100644 --- a/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java +++ b/src/main/java/com/iconplus/smartproc/model/request/DrpApprovalRequest.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.springframework.data.domain.Pageable; @Data @Builder @@ -19,4 +20,5 @@ public class DrpApprovalRequest extends BaseRequest { private Long approverKomite3Id; private Long approverKomite4Id; private Long approverDirekturId; + private transient Pageable pageable; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java index 6b0c43a..53e2b83 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/DrpApprovalResponse.java @@ -6,6 +6,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.sql.Date; + @Data @Builder @AllArgsConstructor @@ -13,4 +15,13 @@ import lombok.NoArgsConstructor; public class DrpApprovalResponse extends BaseResponse { private Long id; + private Long drpId; + private Integer tahun; + private String approveStatus; + private Date approverVpDate; + private Date approverKomite1Date; + private Date approverKomite2Date; + private Date approverKomite3Date; + private Date approverKomite4Date; + private Date approverDirekturDate; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java index 4fa985c..2f77818 100644 --- a/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java +++ b/src/main/java/com/iconplus/smartproc/model/response/LoginResponse.java @@ -22,6 +22,6 @@ public class LoginResponse extends BaseResponse { private String email; private Long roleId; private String role; - private List menus; + private List menus; } diff --git a/src/main/java/com/iconplus/smartproc/model/response/MenusResponse.java b/src/main/java/com/iconplus/smartproc/model/response/MenusResponse.java new file mode 100644 index 0000000..f804bab --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/MenusResponse.java @@ -0,0 +1,23 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MenusResponse extends BaseResponse { + + private Long id; + private String text; + private String path; + private Boolean canView; + private Boolean canCreate; + private Boolean canRead; + private Boolean canDelete; + private Boolean canUpdate; +} diff --git a/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java b/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java new file mode 100644 index 0000000..b2c78cf --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/model/response/ParentMenusResponse.java @@ -0,0 +1,21 @@ +package com.iconplus.smartproc.model.response; + +import com.iconplus.smartproc.helper.base.BaseResponse; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ParentMenusResponse extends BaseResponse { + + private Long id; + private String text; + private String icon; + private List items; +} diff --git a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java index 3922fa9..6793686 100644 --- a/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/DrpRepository.java @@ -1,6 +1,7 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.Drp; +import com.iconplus.smartproc.model.projection.DrpApprovalView; import com.iconplus.smartproc.model.projection.DrpView; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -31,4 +32,19 @@ public interface DrpRepository extends JpaRepository { "ORDER BY d.id") Page findByIsDeleteFalse(Timestamp approveDate, Pageable pageable); + + + @Query(value = "SELECT d.id as id, " + + "d.tahun as tahun, " + + "d.approveStatus as approveStatus, " + + "da.approverVpDate as approverVpDate, " + + "da.approverKomite1Date as approverKomite1Date, " + + "da.approverKomite2Date as approverKomite2Date, " + + "da.approverKomite3Date as approverKomite3Date, " + + "da.approverKomite4Date as approverKomite4Date, " + + "da.approverDirekturDate as approverDirekturDate " + + "FROM Drp d " + + "JOIN DrpApproval da ON da.drpId = d.id " + + "WHERE d.isDelete = false") + Page getListApprovalDrp(Pageable pageable); } diff --git a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java index 6e50213..5c9b886 100644 --- a/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/MenusRepository.java @@ -2,8 +2,10 @@ package com.iconplus.smartproc.repository; import com.iconplus.smartproc.model.entity.Menus; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.awt.*; import java.util.List; import java.util.Optional; @@ -13,4 +15,17 @@ public interface MenusRepository extends JpaRepository { List findByIsDeleteFalse(); Optional findByIdAndIsDeleteFalse(Long id); + @Query(value = "SELECT m " + + "FROM Menus m " + + "WHERE m.id in (SELECT DISTINCT(s.parentId) from Menus s " + + "order by s.parentId) " + + "AND m.isDelete = false") + List findAllParentMenu(); + + + @Query(value = "SELECT m " + + "FROM Menus m " + + "ORDER BY m.parentId, m.urutan") + List findAllOrderByParentAndUrutan(); + } diff --git a/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java index 2aa8a42..814385b 100644 --- a/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java +++ b/src/main/java/com/iconplus/smartproc/repository/PermissionRepository.java @@ -45,6 +45,7 @@ public interface PermissionRepository extends JpaRepository { "JOIN Menus m ON m.id = p.menuId " + "WHERE m.isDelete = false " + "AND p.isDelete = false " + - "AND p.roleId = :roleId") + "AND p.roleId = :roleId " + + "ORDER BY m.parentId, m.urutan") List getListMenusPermission(Long roleId); } diff --git a/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java b/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java new file mode 100644 index 0000000..112dab2 --- /dev/null +++ b/src/main/java/com/iconplus/smartproc/service/approval/GetListApprovalDrpServie.java @@ -0,0 +1,52 @@ +package com.iconplus.smartproc.service.approval; + +import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.projection.DrpApprovalView; +import com.iconplus.smartproc.model.request.DrpApprovalRequest; +import com.iconplus.smartproc.model.response.DrpApprovalResponse; +import com.iconplus.smartproc.repository.DrpApprovalRepository; +import com.iconplus.smartproc.repository.DrpRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Service +@Slf4j +public class GetListApprovalDrpServie implements BaseService { + + private final DrpRepository drpRepository; + private final DrpApprovalRepository drpApprovalRepository; + + public GetListApprovalDrpServie(DrpRepository drpRepository, + DrpApprovalRepository drpApprovalRepository) { + this.drpApprovalRepository = drpApprovalRepository; + this.drpRepository = drpRepository; + + } + + @Override + public DrpApprovalResponse execute(DrpApprovalRequest input) throws IOException { + + List drpApprovalResponseList = new ArrayList<>(); + var drpApprovalViews = drpRepository.getListApprovalDrp(input.getPageable()); + for (DrpApprovalView drpApprovalView : drpApprovalViews) { + DrpApprovalResponse drpApprovalResponse = DrpApprovalResponse.builder() + .id(drpApprovalView.getId()) + .drpId(drpApprovalView.getDrpId()) + .tahun(drpApprovalView.getTahun()) + .approverVpDate(drpApprovalView.getApproverVpDate()) + .approverKomite1Date(drpApprovalView.getApproverKomite1Date()) + .approverKomite2Date(drpApprovalView.getApproverKomite2Date()) + .approverKomite3Date(drpApprovalView.getApproverKomite3Date()) + .approverKomite4Date(drpApprovalView.getApproverKomite4Date()) + .approverDirekturDate(drpApprovalView.getApproverDirekturDate()) + .build(); + } + return null; + + + } +} diff --git a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java index f24965b..5c5cec3 100644 --- a/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java +++ b/src/main/java/com/iconplus/smartproc/service/authentication/LoginService.java @@ -3,11 +3,14 @@ package com.iconplus.smartproc.service.authentication; import com.iconplus.smartproc.configuration.JwtTokenUtil; import com.iconplus.smartproc.exception.BusinessException; import com.iconplus.smartproc.helper.service.BaseService; +import com.iconplus.smartproc.model.entity.Menus; import com.iconplus.smartproc.model.entity.TokenManagement; import com.iconplus.smartproc.model.projection.MenusPermissionView; import com.iconplus.smartproc.model.request.LoginRequest; import com.iconplus.smartproc.model.response.LoginResponse; import com.iconplus.smartproc.model.response.MenusPermissionResponse; +import com.iconplus.smartproc.model.response.MenusResponse; +import com.iconplus.smartproc.model.response.ParentMenusResponse; import com.iconplus.smartproc.model.token.TokenContent; import com.iconplus.smartproc.repository.MenusRepository; import com.iconplus.smartproc.repository.PermissionRepository; @@ -75,6 +78,20 @@ public class LoginService implements BaseService { } Set accessMenu = new HashSet<>(); List menusPermissionResponseList = new ArrayList<>(); + + + List parentMenusResponseList = new ArrayList<>(); + var parentMenu = menusRepository.findAllParentMenu(); + for (Menus menus : parentMenu) { + ParentMenusResponse parentMenusResponse = ParentMenusResponse.builder() + .id(menus.getId()) + .text(menus.getNama()) + .icon(menus.getIcon()) + .items(new ArrayList<>()) + .build(); + parentMenusResponseList.add(parentMenusResponse); + } + var listMenusPermission = permissionRepository.getListMenusPermission(userRoleView.getRoleId()); for (MenusPermissionView menusPermissionView : listMenusPermission) { if (BooleanUtils.isTrue(menusPermissionView.getCanView()) || @@ -83,24 +100,42 @@ public class LoginService implements BaseService { BooleanUtils.isTrue(menusPermissionView.getCanDelete()) || BooleanUtils.isTrue(menusPermissionView.getCanRead())) { accessMenu.add(menusPermissionView.getNama()); + + MenusPermissionResponse menusPermissionResponse = MenusPermissionResponse.builder() + .id(menusPermissionView.getId()) + .nama(menusPermissionView.getNama()) + .parentId(menusPermissionView.getParentId()) + .urutan(menusPermissionView.getUrutan()) + .icon(menusPermissionView.getIcon()) + .link(menusPermissionView.getLink()) + .canView(menusPermissionView.getCanView()) + .canRead(menusPermissionView.getCanRead()) + .canCreate(menusPermissionView.getCanCreate()) + .canUpdate(menusPermissionView.getCanUpdate()) + .canDelete(menusPermissionView.getCanDelete()) + .build(); + + menusPermissionResponseList.add(menusPermissionResponse); } + } - MenusPermissionResponse menusPermissionResponse = MenusPermissionResponse.builder() - .id(menusPermissionView.getId()) - .nama(menusPermissionView.getNama()) - .parentId(menusPermissionView.getParentId()) - .urutan(menusPermissionView.getUrutan()) - .icon(menusPermissionView.getIcon()) - .link(menusPermissionView.getLink()) - .canView(menusPermissionView.getCanView()) - .canRead(menusPermissionView.getCanRead()) - .canCreate(menusPermissionView.getCanCreate()) - .canUpdate(menusPermissionView.getCanUpdate()) - .canDelete(menusPermissionView.getCanDelete()) - .build(); - - menusPermissionResponseList.add(menusPermissionResponse); + for (ParentMenusResponse parentMenusResponse : parentMenusResponseList) { + for (MenusPermissionResponse menusPermissionResponse : menusPermissionResponseList) { + if (parentMenusResponse.getId().equals(menusPermissionResponse.getParentId())) { + MenusResponse menusResponse = MenusResponse.builder() + .id(menusPermissionResponse.getId()) + .text(menusPermissionResponse.getNama()) + .path(menusPermissionResponse.getLink()) + .canView(menusPermissionResponse.getCanView()) + .canRead(menusPermissionResponse.getCanRead()) + .canCreate(menusPermissionResponse.getCanCreate()) + .canUpdate(menusPermissionResponse.getCanUpdate()) + .canDelete(menusPermissionResponse.getCanDelete()) + .build(); + parentMenusResponse.getItems().add(menusResponse); + } + } } var tokenContent = TokenContent.builder() @@ -146,7 +181,7 @@ public class LoginService implements BaseService { .email(userRoleView.getEmail()) .roleId(userRoleView.getRoleId()) .role(userRoleView.getRole()) - .menus(menusPermissionResponseList) + .menus(parentMenusResponseList) .build(); } }