package company_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 CompanyInfoUpdateRequest struct {
	CompanyRequest *common.CompanyRequest `json:"companyRequest"`
	// <ext>core:true</ext> 【新法人单位名称】新法人单位名称 【传参】 1、传入新的单位名称，不传则不做修改。 2、已认证单位不支持修改，请通过重新认证变更。
	Name string `json:"name,omitempty"`
	// <ext>core:true</ext> 【新第三方业务系统法人单位id】新第三方业务系统法人单位id 【传参】 1、不传则不做修改。 2、若传入的id已被其他单位绑定，将会报错。
	OpenCompanyId string `json:"openCompanyId,omitempty"`
	// <ext>core:true</ext> 【新法人单位代码】新法人单位代码 【传参】 1、支持传入新的统一社会信用代码或工商注册号，不传则不做修改。 2、已认证单位不支持修改。
	RegisterNo string `json:"registerNo,omitempty"`
	// <ext>core:true</ext> 【新法定代表人/负责人】新法定代表人/负责人 【传参】 1、营业执照上的法定代表人或负责人，不传则不做修改。 2、已认证单位不支持修改，请通过重新认证变更。
	LegalPerson      string                                           `json:"legalPerson,omitempty"`
	ParentDepartment *common.CompanyInfoUpdateParentDepartmentRequest `json:"parentDepartment,omitempty"`
	// <ext>core:true</ext> 【是否开启计费】是否开启计费 【作用】 1：电子签章管理后台可在费用分摊功能中设置计费规则，对开启计费的外部单位收取相应的签署、证书、认证等费用，可通过此参数设置外部法人单位是否需要计费。 2：费用分摊功能为付费功能，由lisence控制，需开通功能才可使用。 【传参】 取值范围：true（开启计费），false（不开启计费）；不传则不做修改。
	Customer *bool `json:"customer,omitempty"`
	// <ext>core:true</ext> 【法人单位自定义字段】法人单位自定义字段 【作用】 1、除法人单位名称、法定代表人姓名等基础信息，需要补充填写的法人单位的额外信息，用于后续区分。例如法人单位类型是供应商或经销商 2、自定义字段可在电子签章管理后台统一定义或电子签章前台设置组织内法人单位的自定义属性，定义好后可通过该参数传入字段值 【传参】 新的自定义字段后将会全量覆盖旧数据，历史字段有值但本次未传，则会清空；不传则不做修改。
	CompanyCustomFields []*common.CompanyCustomField `json:"companyCustomFields,omitempty"`
	// <ext>core:true</ext> 【新法人单位印章管理员】新法人单位印章管理员 【作用】 指定用户管理当前法人单位所有印章，拥有法人单位印章的制作、管理以及审批权限。指定后将会通过姓名和证件号关联对应用户，并赋予相关权限 【传参说明】 1、管理员姓名，若需要修改则需要将管理员名称与管理员证件号一起填写，仅传其中一项则忽略该参数；不传则不做修改。 2、已认证单位不支持修改，请通过重新认证变更。 3、若电子签章系统设置了不允许直接配置印章权限，则接口传入的单位印章管理员不生效。
	Authorizer string `json:"authorizer,omitempty"`
	// <ext>core:true</ext> 【法人单位印章管理员证件号】法人单位印章管理员证件号 【作用】 传入姓名和证件号后，系统里相同信息的用户会被关联为单位印章管理员，管理当前法人单位所有印章，拥有印章制作、管理以及审批权限。 【传参】 1、管理员证件号，若需要指定则需要将管理员名称与管理员证件号一起填写，仅传其中一项则忽略该参数；不传则不做修改。 2、证件号请填写准确，否则将无法自动匹配用户。 3、已认证单位不支持修改，请通过重新认证变更。 4、若电子签章系统设置了不允许直接配置印章权限，则接口传入的单位印章管理员证件号不生效。
	AuthorizerCardNo string `json:"authorizerCardNo,omitempty"`
	// <ext>core:true</ext> 【新系统管理员姓名】新系统管理员姓名 【作用】 用于指定外部法人单位的系统管理员，指定后，该用户可进行法人单位认证、组织架构管理、权限分配以及系统设置 【传参】 1、需修改系统管理员时需要同时传入姓名与联系方式（手机号、邮箱任选其一），仅传其中一项则忽略该参数；不传则不做修改。 2、管理员姓名，若管理员不存在时，将以该姓名创建用户；若管理员未实名时，将以该姓名进行变更；若管理员已认证时，则忽略该姓名。 3、仅可修改外部单位的系统管理员，若管理员完成登录将无法修改。 4、传入新系统管理员后，若联系方式未发生变化，则仅做用户信息修改；若联系方式发生变化，则将新系统管理员将会替换旧系统管理员，旧系统管理员将成为普通成员。
	Charger string `json:"charger,omitempty"`
	// <ext>core:true</ext> 【新系统管理手机号】新系统管理手机号 【作用】 用于系统管理员账号登录 【传参】 1、需修改系统管理员时需要同时传入姓名与联系方式（手机号、邮箱任选其一），仅传其中一项则忽略该参数；不传则不做修改。 2、同时传入手机号及邮箱时，按手机号>邮箱的优先级进行查询，若手机号查询到用户，则对应用户关联至系统管理员角色，此时邮箱会忽略；若手机号未查询到用户，此时会根据邮箱查询，若邮箱查询到用户，则对应用户关联至系统管理员角色，此时手机号会忽略；若手机号与邮箱均未查询到用户，则会将姓名、手机号、邮箱创建新用户并关联至系统管理员角色。 3、手机号允许使用大陆、港澳台、国际手机号，手机号格式为：区号+空格+手机号，例：852 9xxxxxxx ，大陆手机号可以不传区号。 4、仅可修改外部单位的系统管理员，若管理员完成登录将无法修改。 5、传入新系统管理员后，若联系方式未发生变化，则仅做用户信息修改；若联系方式发生变化，则将新系统管理员将会替换旧系统管理员，旧系统管理员将成为普通成员。
	Mobile string `json:"mobile,omitempty"`
	// <ext>core:true</ext> 【新系统管理员邮箱】新系统管理员邮箱 【作用】 用于系统管理员账号登录 【传参】 1、需修改系统管理员时需要同时传入姓名与联系方式（手机号、邮箱任选其一），仅传其中一项则忽略该参数；不传则不做修改。 2、同时传入手机号及邮箱时，按手机号>邮箱的优先级进行查询。若手机号查询到用户，则对应用户关联至系统管理员角色，此时邮箱会忽略；若手机号未查询到用户，此时会根据邮箱查询，若邮箱查询到用户，则对应用户关联至系统管理员角色，此时手机号会忽略；若手机号与邮箱均未查询到用户，则会将姓名、手机号、邮箱创建新用户并关联至系统管理员角色。 3、邮箱需传入符合格式的字符串，例：xxxxxxxx@163.com。 4、仅可修改外部单位的系统管理员，若管理员完成登录将无法修改。 5、传入新系统管理员后，若联系方式未发生变化，则仅做用户信息修改；若联系方式发生变化，则将新系统管理员将会替换旧系统管理员，旧系统管理员将成为普通成员。
	Email string `json:"email,omitempty"`
}

func (obj CompanyInfoUpdateRequest) GetUrl() string {
	return "/company/info/update"
}

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