package com.uas.platform.b2b.service;

import java.util.List;

import org.springframework.data.domain.Page;

import com.uas.platform.b2b.model.Attach;
import com.uas.platform.b2b.model.PurchaseProofingApproval;
import com.uas.platform.b2b.model.PurchaseProofingItem;
import com.uas.platform.b2b.model.PurchaseProofingItemDone;
import com.uas.platform.b2b.model.PurchaseProofingItemTodo;
import com.uas.platform.b2b.model.PurchaseProofingSend;
import com.uas.platform.b2b.model.SearchFilter;
import com.uas.platform.core.model.PageInfo;
import com.uas.search.b2b.model.SPage;

public interface PurchaseProofingService {

	/**
	 * 批量保存、修改客户打样申请单
	 * 
	 * @param changeItems
	 * @return
	 */
	public void save(List<PurchaseProofingItem> proofingItems);

	/**
	 * 保存客户打样申请单附件
	 * 
	 * @param attachs
	 */
	public void saveAttach(List<Attach> attachs);

	/**
	 * 获取没有上传到卖家ERP的打样申请单
	 * 
	 * @return
	 */
	public List<PurchaseProofingItem> findNotUploadProofing();

	/**
	 * 成功将平台上的客户打样申请单上传到卖家ERP后修改状态为已上传
	 * 
	 * @param idArray
	 */
	public void uploadProofingSuccess(String[] idArray);

	/**
	 * 分页查找客户打样申请（全部）
	 * 
	 * @param pageInfo
	 * @param keyword
	 *            查找关键词
	 * @return
	 */
	public Page<PurchaseProofingItem> findAllByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter);
	
	/**
	 * 分页查找客户打样申请（全部）
	 * 
	 * @param pageInfo
	 * @param keyword
	 * @param filter
	 * @return
	 */
	public SPage<PurchaseProofingItem> findByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter);

	/**
	 * 分页查找客户打样申请（待处理）
	 * 
	 * @param pageInfo
	 * @param keyword
	 *            查找关键词
	 * @return
	 */
	public Page<PurchaseProofingItemTodo> findTodoByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter);
	
	/**
	 * 分页查找客户打样申请（已处理）
	 * 
	 * @param pageInfo
	 * @param keyword
	 *            查找关键词
	 * @return
	 */
	public Page<PurchaseProofingItemDone> findDoneByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter);

	/**
	 * 用客户打样申请单ID查找客户打样申请单
	 * 
	 * @param id
	 * @return
	 */
	public PurchaseProofingItem findById(Long id);

	/**
	 * 送样（只供b2b平台上操作调用，因为平台上只能一个一个进行回复）
	 * 
	 * @param proofingSend
	 * @return
	 */
	public PurchaseProofingSend send(PurchaseProofingSend proofingSend);

	/**
	 * 送样（只供从卖方ERP上传到平台时操作调用，因为平台上只能一个一个进行回复）
	 * 
	 * @param proofingSend
	 */
	public void send(List<PurchaseProofingSend> proofingSend);

	/**
	 * 获取没有传输到卖家ERP的送样单
	 * 
	 * @return
	 */
	public List<PurchaseProofingSend> findNotBackSampleSend();

	/**
	 * 
	 * @param idArray
	 */
	public void backSampleSendSuccess(String[] idArray);

	/**
	 * 获取没有传输到买方ERP的送样单
	 * 
	 * @return
	 */
	public List<PurchaseProofingSend> findNotSendSampleSend();

	/**
	 * 
	 * @param idArray
	 */
	public void sendSampleSendSuccess(String[] idArray);

	/**
	 * 保存送样认定单
	 * 
	 * @param proofingApprovals
	 */
	public void saveSampleApproval(List<PurchaseProofingApproval> proofingApprovals);

	/**
	 * 获取未上传(到卖方)的认定单
	 * 
	 * @return
	 */
	public List<PurchaseProofingApproval> findNotUploadApprovals();
	
	public void uploadApprovalsSuccess(String[] idArray);

	/**
	 * 保存认定单附件
	 * 
	 * @param attachs
	 */
	public void saveApprovalAttach(List<Attach> attachs);

	/**
	 * 保存认定单prd附件
	 * 
	 * @param attachs
	 */
	public void saveApprovalPrdattach(List<Attach> attachs);

	/**
	 * 保存认定单pad附件
	 */
	public void saveApprovalPadattach(List<Attach> attachs);

	/**
	 * 保存认定单ppd附件
	 * 
	 * @param attachs
	 */
	public void saveApprovalPpdattach(List<Attach> attachs);

	/**
	 * 保存从ERP传输过来的送样单的附件
	 * 
	 * @param attachs
	 */
	public void saveSendAttach(List<Attach> attachs);
	
	/**
	 * 记录打打样申请印次数
	 * @param id
	 */
	public void print(Long id);

	/**
	 * 作废单据状态修改
	 * @param ids
	 */
    void invalidateProductSample(String[] ids);

}
