package nc.pubitf.ic.m4d.api;

import nc.itf.annotation.Component;
import nc.itf.annotation.OpenAPI;
import nc.itf.annotation.OpenLevel;
import nc.vo.ic.m4d.entity.MaterialOutVO;
import nc.vo.pub.BusinessException;

/**
 * @description
 * <ul>
 * <li>新增保存材料出库单
 * <li>新增保存材料出库单(自动拣货)
 * <li>根据单据ID删除材料出库单
 * <li>根据来源单据ID删除材料出库单
 * <li>对材料出库单做签字操作
 * <li>对材料出库单做取消签字操作
 * </ul>
 *
 * @functionName 材料出库单持久化服务
 *
 * @since 6.5
 * @version 2015-8-26 下午2:26:33
 * @author jilu
 */
@OpenAPI(value = OpenLevel.SHARED)
@Component("库存出库单")
public interface IMaterialOutMaintainAPI {

    /**
     * <B>新增保存材料出库单</B>
     * <li>会对传入的参数进行数据校验和数据补全</li>
     * <li>不会自动拣货</li>
     * <br></br>
     * 校验内容有：
     * <ol>
     * <li>字段非空校验</li>
     * <li>现存量校验，现存量不足时不可以出库</li>
     * </ol>
     * 补全内容有：
     * <ol>
     * <li>单据号自动生成</li>
     * </ol>
     *
     * @param vos 材料出库单单据VO数组
     * @return 保存后的材料出库单单据VO数组
     * @throws BusinessException 异常
     */
    public MaterialOutVO[] insertBills(MaterialOutVO[] vos)
            throws BusinessException;


    /**
     * 仿照保存作修改，批量保存，返回信息作客开处理
     * @param vos
     * @return
     * @throws BusinessException
     */
    public MaterialOutVO[] batchInsertBills_RequiresNew(MaterialOutVO[] vos)
            throws BusinessException;

    /**
     * <B>新增保存材料出库单</B>
     * <li>自动拣货</li>
     * <li>其他同insertBills方法相同</li>
     *
     * @param vos 材料出库单单据VO数组
     * @return 保存后的材料出库单单据VO数组
     * @throws BusinessException 异常
     */
    public MaterialOutVO[] insertBillsAutoPick(MaterialOutVO[] vos)
            throws BusinessException;

    /**
     * <B>根据单据ID删除材料出库单</B>
     *
     * @param ids 材料出库单主键数组
     * @throws BusinessException 异常
     */
    public void deleteBillsByID(String[] ids) throws BusinessException;

    /**
     * <B>根据来源单据ID删除材料出库单</B>
     *
     * @param sourceIDs 来源单据的主键数组
     * @throws BusinessException 异常
     */
    public void deleteBillsBySourceID(String[] sourceIDs)
            throws BusinessException;

    /**
     * <B>对材料出库单做签字操作</B>
     *
     * @param vos 材料出库单单据VO数组
     * @return 签字后的材料出库单单据VO数组
     * @throws BusinessException 异常
     */
    public MaterialOutVO[] signBills(MaterialOutVO[] vos) throws BusinessException;

    /**
     * <B>对材料出库单做取消签字操作</B>
     *
     * @param vos 材料出库单单据VO数组
     * @return 取消签字后的材料出库单单据VO数组
     * @throws BusinessException 异常
     */
    public MaterialOutVO[] cancelSignBills(String[] ids)
            throws BusinessException;
}
