package others_request

import (
	"encoding/json"
	"git.sxidc.com/student-physical-examination/contract_lock_sdk/http"
	"git.sxidc.com/student-physical-examination/contract_lock_sdk/model/common"
)

type PermissionsTransferRequest struct {
	DisEmployee          *common.UserInfoRequest   `json:"disEmployee"`
	ReceiveEmployee      *common.UserInfoRequest   `json:"receiveEmployee"`
	DisCompany           *common.DepartmentRequest `json:"disCompany,omitempty"`
	DisDepartmentRequest *common.DepartmentRequest `json:"disDepartmentRequest,omitempty"`
	DisCompanyRequest    *common.CompanyRequest    `json:"disCompanyRequest,omitempty"`
	// <ext>core:true</ext> 【交接范围交接的任务范围】交接范围交接的任务范围 【传参说明】 1、默认全部 2、可以传多个，用英文逗号间隔。 3、当系统配置【流程管理员不可使用可管理的流程发起文件】、【模板管理员不可使用可管理的模板生成签署文件】等权限互斥规则时，若交接给被交接人的权限存在互斥情况时，系统将忽略无法交接的权限，交接剩余权限 【传参】 取值范围：ALL（\"全部权限\"），CONTRACT_TODO_PERMISSIONS（\"电子签约处理中任务\"）， SEAL_APPLY_TODO_PERMISSIONS（\"物理用印处理中任务\"）， CONTRACT_FINISHED_PERMISSIONS（\"电子签约已处理任务\"） ， SEAL_APPLY_FINISHED_PERMISSIONS（\"物理用印已处理任务\"）， ROLE_MEMBER_PERMISSIONS（\"角色管理权限\"）， SEAL_PERMISSIONS（\"印章权限\"）， CATEGORY_PERMISSIONS（\"用印流程权限\"）， TEMPLATE_PERMISSIONS（\"模板权限\"）， DEPARTMENT_SUPERVISORS（\"部门主管\"）， CONTACT_PERMISSION（\"联系人权限\"）；可选多项；不传值默认为：ALL（\"全部权限\"）。
	PermissionsTypes []string `json:"permissionsTypes,omitempty"`
	// <ext>core:true</ext> 【是否离职交接人】是否离职交接人 【传参】 取值范围：true（离职），false（不离职）；不传值默认为：true（离职）。
	Dimmission *bool `json:"dimmission,omitempty"`
	// <ext>core:true</ext> 【离职后选择要释放的账号】离职后选择要释放的账号 【作用】 离职员工后，可将手机号、邮箱、员工编号或自定义账号进行释放，方便后续其他员工入职后绑定  【传参说明】 支持传入手机号、邮箱、员工编号以及自定账号任意项，不填则不释放账号。若传入的参数对应用户并未关联，则直接忽略处理 注：该参数仅在自定义配置【内部员工离职成外部用户是否释放指定账号】开启且dimmission（是否离职交接人）为true时生效
	BindTypeList     []string                `json:"bindTypeList,omitempty"`
	OperatorEmployee *common.UserInfoRequest `json:"operatorEmployee,omitempty"`
	// <ext>core:true</ext> 【回调地址】回调地址 【作用】 接口页面完成后，向回调地址回调相关信息
	CallBackUrl string `json:"callBackUrl,omitempty"`
}

func (obj PermissionsTransferRequest) GetUrl() string {
	return "/permissions/transfer"
}

func (obj PermissionsTransferRequest) GetHttpParameter() *http.HttpParameter {
	parameter := http.NewPostHttpParameter()
	jsonBytes, _ := json.Marshal(obj)
	parameter.SetJsonParamer(string(jsonBytes))
	return parameter
}
