package com.jwipc.finance.logic;

import com.jwipc.finance.dto.InvoicedApplyItemDTO;
import com.jwipc.finance.entity.InvoicedApply;
import com.jwipc.finance.entity.InvoicedApplyDetail;
import com.jwipc.page.PageView;

import java.util.List;

/**
 * @author shenyang.ou
 * @date 2024/3/5 12:57
 * @desc
 */
public interface InvoicedApplyDetailLogic {

    /**
     * 获取已经存在开票申请中的对账单明细ID
     *
     * @param supplierCode 供应商编码
     * @param companyCode 公司编码
     * @return 结果
     */
    List<Long> findExistAsdIdByQuery(String supplierCode, String companyCode);

    /**
     * 提供采购确认时获取开票申请明细数据
     *
     * @param iaId 开票申请单ID
     * @param becShare 后端计算分摊 0:否 1:是
     * @param head 开票申请主表数据
     * @return 结果
     */
    List<InvoicedApplyItemDTO> providePurchaseConfirm(Long iaId, Integer becShare, InvoicedApply head);

    /**
     * 获取开票申请单明细数据根据开票申请单ID
     *
     * @param iaId 开票申请单ID
     * @param becShare 后端计算分摊 0:否 1:是
     * @return 结果
     */
    PageView findByApplyId(Long iaId, Integer becShare);

    /**
     * 更新开票申请单明细行号问题
     *
     * @param iaId 开票申请单ID
     */
    void updateDetailItemNo(Long iaId);

    /**
     * 查询贷项凭证数量
     * @param invoiceNo
     * @return
     */
    List<InvoicedApplyDetail> findByInvoiceNo(String invoiceNo);

    /**
     * 创建预制发票
     *
     * @param iaId            开票申请id
     * @param type            1:预制 2:删除
     * @param invoicePostDate 发票过账日期
     * @param statementType   过账类型
     */
    void createPrefabricateInvoice(Long iaId, Integer type, String invoicePostDate, String statementType);
}
