package cn.wisenergy.service;

import cn.wisenergy.model.app.WorkTimeOrder;
import cn.wisenergy.model.dto.*;
import com.github.pagehelper.PageInfo;

import java.util.Date;
import java.util.List;


/**
 *
 * @author chenqi
 * @since 2021-01-19
 */
public interface WorkTimeOrderService {



    /**
     * 功能; 获取某日被驳回说明
     *
     * @param userId  用户id
     * @param workDay 某日
     * @return 工单集合
     */
    List<WorkTimeOrder> getByDay(Integer userId, Date workDay);

    /**
     * 功能：获取某日填报小计
     *
     * @param userId  用户id
     * @param workDay 某日
     * @return 填报小计
     */
    SubtotalDto getSubtotalReport(Integer userId, Date workDay);

    /**
     * 功能; 获取某日填报信息
     *
     * @param userId  用户id
     * @param workDay 工作日
     * @return dto
     */
    List<WorkTimeOrder> getByDayToDto(Integer userId, Date workDay);

    /**
     * 功能：工时填报
     *
     * @param dto 自定义填报类
     * @return dto
     */
    List<WorkTimeOrderDto> add(CreateWorkOrderDto dto);


    /**
     * 功能： 驳回重新填报
     *
     * @param dto 自定义DTO
     * @return 填报信息
     */
    List<WorkTimeOrderDto> update(CreateWorkOrderDto dto);


    /**
     * 功能：获取待审批数据
     *
     * @param userId    用户id
     * @param projectId 项目id
     * @param type      项目类型
     * @param status    状态
     * @return 自定义dto
     */
    PageInfo<WorkTimeOrderDto> getExamine(Integer userId, Integer projectId, Integer type, Integer page, Integer size, Integer status);

    /**
     *  功能：获取小程序待审批
     * @param userId 用户id
     * @param projectId 项目Id
     * @param type 类型
     * @return
     */
    List<AppletsPendApprovalDto> getExamineApplets(Integer userId, Integer projectId, Integer type);

    /**
     * 功能：批量审批
     *
     * @param reviewerId 审批人
     * @param ids        工单
     * @return 是否成功
     */
    Boolean examineByIds(Integer reviewerId, List<Integer> ids);

    /**
     * 功能： 驳回
     *
     * @param reviewerId 审核人id
     * @param id         工单id
     * @param reason     驳回理由
     * @return 是否成功
     */
    Boolean rejectById(Integer reviewerId, Integer id, String reason);

    /**
     * 功能：查询驳回未提交的
     *
     * @param userId 用户id
     * @return dto
     */
    List<WorkTimeOrderDto> rejectNotSubmit(Integer userId);

    /**
     * 功能：获取用户参与的项目
     * @param userId
     * @return
     */
    ProjectsDto getProjectDto(Integer userId);

    List<WorkTimeOrderDto> wtoToWtod(List<WorkTimeOrder> workTimeOrders);


    /**
     * 功能：测试添加
     * @param createWorkOrderDto
     * @return
     */
    List<WorkTimeOrderDto> addTest(CreateWorkOrderDto createWorkOrderDto);


    /**
     * 功能：获取当天填报总状态
     * @param userId
     * @param workDay
     * @return
     */
    int statusYes(Integer userId, Date workDay);
}
