package cn.superdesk.uniorder.service.invoice.customer.invoiced;

import cn.superdesk.uniorder.common.security.dto.LoginSysUser;
import cn.superdesk.uniorder.dao.entity.invoice.customer.invoiced.InvoiceInvoiced;
import cn.superdesk.uniorder.dto.param.invoice.excel.InvoiceInvoicedOpBackCollectionForm;

import java.util.List;

/**
 * @Description: 开票申请 发票管理 产品是真的牛 关于这个红冲的状态 逻辑只活在脑子里 实践就死
 * @Author: linjinyu 重构
 * @CreateDate: 7/28/20 7:52 PM
 * @UpdateUser: linjinyu
 * @UpdateDate: 7/28/20 7:52 PM
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
public interface InvoiceInvoicedFieldIsBackCollectionService {


	/****************************************** 状态机 公共方法 机内使用 实际流转 重用 start ******************************************/

	// 状态流转为 未回款(0, "未回款")
	void opInitOrResetByStateMachine(InvoiceInvoiced entity, InvoiceInvoicedOpBackCollectionForm form, LoginSysUser loginSysUser);

	// 状态流转为 部分回款(1, "部分回款")
	void opPartByStateMachine(InvoiceInvoiced entity, InvoiceInvoicedOpBackCollectionForm form, LoginSysUser loginSysUser);

	// 状态流转为 全部回款(2, "全部回款")
	void opCompleteByStateMachine(InvoiceInvoiced entity, InvoiceInvoicedOpBackCollectionForm form, LoginSysUser loginSysUser);

	// 状态流转为 红冲发票(69, "红冲发票")
	void opRedWriteOffByStateMachine(InvoiceInvoiced entity, InvoiceInvoicedOpBackCollectionForm form, LoginSysUser loginSysUser);

	/****************************************** 状态机 公共方法 机内使用 实际流转 重用   end ******************************************/


	/****************************************** 状态机 外部使用 类门面 start ******************************************/

	// 状态流转为 未回款(0, "未回款")
	void opInitOrReset(InvoiceInvoicedOpBackCollectionForm form, LoginSysUser loginSysUser);

	// 状态流转为 部分回款(1, "部分回款")
	void opPart(InvoiceInvoicedOpBackCollectionForm form, LoginSysUser loginSysUser);

	void opPartBatchByImportExcel(List<InvoiceInvoicedOpBackCollectionForm> formList, LoginSysUser loginSysUser);

	// 状态流转为 全部回款(2, "全部回款")
	void opComplete(InvoiceInvoicedOpBackCollectionForm form, LoginSysUser loginSysUser);

	// 状态流转为 红冲发票(69, "红冲发票")
	void opRedWriteOff(InvoiceInvoicedOpBackCollectionForm form, LoginSysUser loginSysUser);

	/****************************************** 状态机 外部使用 类门面   end ******************************************/

	void opPartBatchByExcelImportLogStep01(List<InvoiceInvoicedOpBackCollectionForm> formList, LoginSysUser loginSysUser);
}
