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

import cn.superdesk.uniorder.common.security.dto.LoginSysUser;
import cn.superdesk.uniorder.dao.entity.invoice.customer.InvoiceApply;
import cn.superdesk.uniorder.dao.entity.sys.notify.SysNotify;
import cn.superdesk.uniorder.dto.param.thirdpart.szhtxx.common.singleBilling.SzhtxxInvoiceFptxxOpSingleBillingForm;

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


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

    // 状态流转为 待开票(0, "待开票")
    SysNotify opInitByStateMachine(InvoiceApply entity, LoginSysUser loginSysUser);

    // 状态流转为 已作废(2, "已作废")
    SysNotify opBecomeInvalidByStateMachine(InvoiceApply entity, LoginSysUser loginSysUser);

    // 状态流转为 开票中(10, "开票中")
    SysNotify opOngoingByStateMachine(SzhtxxInvoiceFptxxOpSingleBillingForm form, InvoiceApply entity, LoginSysUser loginSysUser);

    // 状态流转为 已开票(11, "已开票")
    SysNotify opCompleteByStateMachine(InvoiceApply entity, LoginSysUser loginSysUser);

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


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

    // 状态流转为 待开票(0, "待开票")
    SysNotify opInit(InvoiceApply entity, LoginSysUser loginSysUser);

    // 状态流转为 已作废(2, "已作废")
    SysNotify opBecomeInvalid(InvoiceApply entity, LoginSysUser loginSysUser);

    // 状态流转为 开票中(10, "开票中")
    SysNotify opOngoing(SzhtxxInvoiceFptxxOpSingleBillingForm form, InvoiceApply entity, LoginSysUser loginSysUser);

    // 状态流转为 已开票(11, "已开票")
    SysNotify opComplete(InvoiceApply entity, LoginSysUser loginSysUser);

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