package cn.superdesk.uniorder.service.accounting.unified.supplier;

import cn.superdesk.uniorder.common.security.dto.LoginSysUser;
import cn.superdesk.uniorder.dao.entity.accounting.unified.supplier.AccountingUnifiedSupplier;

/**
 * @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 AccountingUnifiedSupplierFieldAccountingStatusService {


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

	// 状态流转为 待提交(3, "待提交")
	void opInitOrResetByStateMachine(AccountingUnifiedSupplier entity, LoginSysUser loginSysUser);

	// 状态流转为 未确认(0, "未确认")
	void opSubmitByStateMachine(AccountingUnifiedSupplier entity, LoginSysUser loginSysUser);

	// 状态流转为 已确认(1, "已确认")
	void opConfirmByStateMachine(AccountingUnifiedSupplier entity, LoginSysUser loginSysUser);

	// 状态流转为 已拒绝(2, "已拒绝")
	void opRejectByStateMachine(AccountingUnifiedSupplier entity, LoginSysUser loginSysUser);

	// 状态流转为 已取消(-1, "已取消")
	void opCancelByStateMachine(AccountingUnifiedSupplier entity, LoginSysUser loginSysUser);

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


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

	// 状态流转为 待提交(3, "待提交")
	void opInitOrReset(AccountingUnifiedSupplier entity, LoginSysUser loginSysUser);

	// 状态流转为 未确认(0, "未确认")
	void opSubmit(AccountingUnifiedSupplier entity, LoginSysUser loginSysUser);

	// 状态流转为 已确认(1, "已确认")
	void opConfirm(AccountingUnifiedSupplier entity, LoginSysUser loginSysUser);

	// 状态流转为 已拒绝(2, "已拒绝")
	void opReject(AccountingUnifiedSupplier entity, LoginSysUser loginSysUser);

	// 状态流转为 已取消(-1, "已取消")
	void opCancel(AccountingUnifiedSupplier entity, LoginSysUser loginSysUser);

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

	int opDelete(AccountingUnifiedSupplier statementOfAccount, LoginSysUser loginSysUser);
}
