package com.njcn.rdms.module.project.service.overtime;

import com.njcn.rdms.framework.common.pojo.PageResult;
import com.njcn.rdms.module.project.controller.admin.overtime.vo.OvertimeApplicationApprovalRecordRespVO;
import com.njcn.rdms.module.project.controller.admin.overtime.vo.OvertimeApplicationBatchActionReqVO;
import com.njcn.rdms.module.project.controller.admin.overtime.vo.OvertimeApplicationBatchResultRespVO;
import com.njcn.rdms.module.project.controller.admin.overtime.vo.OvertimeApplicationExportVO;
import com.njcn.rdms.module.project.controller.admin.overtime.vo.OvertimeApplicationPageReqVO;
import com.njcn.rdms.module.project.controller.admin.overtime.vo.OvertimeApplicationRespVO;
import com.njcn.rdms.module.project.controller.admin.overtime.vo.OvertimeApplicationSaveReqVO;
import com.njcn.rdms.module.project.controller.admin.overtime.vo.OvertimeApplicationStatusActionReqVO;
import com.njcn.rdms.module.project.controller.admin.overtime.vo.OvertimeApplicationStatusDictRespVO;
import com.njcn.rdms.module.project.controller.admin.overtime.vo.OvertimeApplicationStatusLogRespVO;

import java.util.List;

public interface OvertimeApplicationService {

    Long createApplication(OvertimeApplicationSaveReqVO reqVO);

    void resubmitApplication(Long id, OvertimeApplicationSaveReqVO reqVO);

    void approve(Long id, OvertimeApplicationStatusActionReqVO reqVO);

    void reject(Long id, OvertimeApplicationStatusActionReqVO reqVO);

    OvertimeApplicationBatchResultRespVO batchApprove(OvertimeApplicationBatchActionReqVO reqVO);

    OvertimeApplicationBatchResultRespVO batchReject(OvertimeApplicationBatchActionReqVO reqVO);

    void deleteApplication(Long id);

    OvertimeApplicationRespVO getApplication(Long id);

    List<OvertimeApplicationStatusDictRespVO> getStatusDict();

    PageResult<OvertimeApplicationRespVO> getMyPage(OvertimeApplicationPageReqVO reqVO);

    PageResult<OvertimeApplicationRespVO> getApprovalPage(OvertimeApplicationPageReqVO reqVO);

    List<OvertimeApplicationStatusLogRespVO> getStatusLogs(Long id);

    List<OvertimeApplicationApprovalRecordRespVO> getApprovalRecords(Long id);

    List<OvertimeApplicationExportVO> getExportList(OvertimeApplicationPageReqVO reqVO);
}
