package com.njcn.rdms.module.project.service.workreport.weekly;

import com.njcn.rdms.framework.common.pojo.PageResult;
import com.njcn.rdms.module.project.controller.admin.workreport.weekly.vo.WeeklyReportExportVO;
import com.njcn.rdms.module.project.controller.admin.workreport.weekly.vo.WeeklyReportDefaultDraftReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.weekly.vo.WeeklyReportPageReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.weekly.vo.WeeklyReportRefreshDraftReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.weekly.vo.WeeklyReportRespVO;
import com.njcn.rdms.module.project.controller.admin.workreport.weekly.vo.WeeklyReportSaveReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.common.vo.WorkReportApprovalRecordRespVO;
import com.njcn.rdms.module.project.controller.admin.workreport.common.vo.WorkReportStatusActionReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.common.vo.WorkReportStatusLogRespVO;

import java.util.List;

public interface WeeklyReportService {

    WeeklyReportRespVO initWeeklyReport();

    WeeklyReportRespVO previewWeeklyDefaultDraft(WeeklyReportDefaultDraftReqVO reqVO);

    WeeklyReportRespVO refreshWeeklyDraft(WeeklyReportRefreshDraftReqVO reqVO);

    Long createWeeklyReport(WeeklyReportSaveReqVO reqVO);

    void updateWeeklyReport(Long id, WeeklyReportSaveReqVO reqVO);

    WeeklyReportRespVO getWeeklyReport(Long id);

    PageResult<WeeklyReportRespVO> getWeeklyReportPage(WeeklyReportPageReqVO reqVO);

    PageResult<WeeklyReportRespVO> getWeeklyApprovalPage(WeeklyReportPageReqVO reqVO);

    void submitWeeklyReport(Long id);

    void approveWeeklyReport(Long id, WorkReportStatusActionReqVO reqVO);

    void rejectWeeklyReport(Long id, WorkReportStatusActionReqVO reqVO);

    void deleteWeeklyReport(Long id);

    List<WorkReportStatusLogRespVO> getWeeklyStatusLogs(Long id);

    List<WorkReportApprovalRecordRespVO> getWeeklyApprovalRecords(Long id);

    List<WeeklyReportExportVO> getWeeklyExportList(WeeklyReportPageReqVO reqVO);
}
