package com.trade.service.trade.purchaseorder.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.trade.service.trade.purchaseorder.domain.PurchaseOrderInvoice;
import com.trade.service.trade.purchaseorder.dto.PurchaseOrderInvoiceDocumentSearchDto;
import com.trade.service.trade.purchaseorder.dto.PurchaseOrderInvoiceSearchDto;
import com.trade.service.trade.purchaseorder.vo.PurchaseOrderInvoiceDetailsVo;
import com.trade.service.trade.purchaseorder.vo.PurchaseOrderInvoiceDocumentVo;
import com.trade.service.trade.purchaseorder.vo.PurchaseOrderInvoiceVo;

import java.util.List;

/**
 * <p>
 * 采购订单-发票信息 服务类
 * </p>
 *
 * @author wl
 * @since 2024-09-14
 */
public interface PurchaseOrderInvoiceService extends IService<PurchaseOrderInvoice> {

    /**
     * 根据订单id获取发票信息
     * 
     * @param orderId 订单id
     * @return 发票信息
     */
    List<PurchaseOrderInvoice> getByOrderId(Long orderId);

    /**
     * 根据订单编码和发票号获取发票信息
     * 
     * @param code 订单编码
     * @param number 发票号
     * @return 发票信息
     */
    PurchaseOrderInvoice getByCodeAndNumber(String code, String number);

    /**
     * 根据发票状态获取发票信息
     * 
     * @param invoiceStatus
     * @param invoiceIds
     * @return 发票信息
     */
    List<PurchaseOrderInvoice> getByInvoiceStatus(String invoiceStatus, List<Long> invoiceIds);

    /**
     * 根据条件查询发票信息
     * 
     * @param invoiceSearchDto
     * @return PurchaseOrderInvoiceVo
     */
    List<PurchaseOrderInvoiceVo> queryByCondition(PurchaseOrderInvoiceSearchDto invoiceSearchDto);

    /**
     * 根据id获取发票详情
     * 
     * @param id 发票id
     * @return 发票详情
     */
    PurchaseOrderInvoiceDetailsVo getDetails(Long id);

    /**
     * 根据进货凭证号获取发票信息
     * 
     * @param purchaseVoucherNo 进货凭证号
     * @return 发票信息
     */
    PurchaseOrderInvoice getByPurchaseVoucherNo(String purchaseVoucherNo);

    /**
     * 根据发票状态获取发票信息
     * 
     * @param invoiceStatus 发票状态
     * @return 发票信息
     */
    List<PurchaseOrderInvoice> selectByInvoiceStatus(String invoiceStatus);

    /**
     * 根据条件查询发票信息
     * @param documentSearchDto
     * @return 发票信息
     */
    List<PurchaseOrderInvoiceDocumentVo> queryPurchaseOrderInvoiceDocument(
            PurchaseOrderInvoiceDocumentSearchDto documentSearchDto);
}
