diff --git a/api/approval/approval.pb.go b/api/approval/approval.pb.go index cb21a89..29dd7ed 100644 --- a/api/approval/approval.pb.go +++ b/api/approval/approval.pb.go @@ -2649,7 +2649,8 @@ type CreateRequest struct { TypeName string `protobuf:"bytes,28,opt,name=TypeName,json=typeName,proto3" json:"TypeName,omitempty"` GroupName string `protobuf:"bytes,29,opt,name=GroupName,json=groupName,proto3" json:"GroupName,omitempty"` BundlePayPrice *BundlePayPrice `protobuf:"bytes,30,opt,name=BundlePayPrice,json=bundlePayPrice,proto3" json:"BundlePayPrice,omitempty"` - FinancialForm *FinancialForm `protobuf:"bytes,31,opt,name=FinancialForm,json=financialForm,proto3" json:"FinancialForm,omitempty"` + ApprovalOA *ApprovalOA `protobuf:"bytes,31,opt,name=ApprovalOA,json=approvalOA,proto3" json:"ApprovalOA,omitempty"` + FinancialForm *FinancialForm `protobuf:"bytes,32,opt,name=FinancialForm,json=financialForm,proto3" json:"FinancialForm,omitempty"` } func (x *CreateRequest) Reset() { @@ -2880,6 +2881,13 @@ func (x *CreateRequest) GetBundlePayPrice() *BundlePayPrice { return nil } +func (x *CreateRequest) GetApprovalOA() *ApprovalOA { + if x != nil { + return x.ApprovalOA + } + return nil +} + func (x *CreateRequest) GetFinancialForm() *FinancialForm { if x != nil { return x.FinancialForm @@ -3607,93 +3615,1169 @@ func (x *SettingRequest) GetID() uint64 { func (x *SettingRequest) GetDeletedAt() uint64 { if x != nil { - return x.DeletedAt + return x.DeletedAt + } + return 0 +} + +func (x *SettingRequest) GetCreatedAt() string { + if x != nil { + return x.CreatedAt + } + return "" +} + +func (x *SettingRequest) GetUpdatedAt() string { + if x != nil { + return x.UpdatedAt + } + return "" +} + +func (x *SettingRequest) GetKeyWord() string { + if x != nil { + return x.KeyWord + } + return "" +} + +func (x *SettingRequest) GetCopyUsers() []*CopyUser { + if x != nil { + return x.CopyUsers + } + return nil +} + +func (x *SettingRequest) GetApprovalUsers() []*ApprovalUser { + if x != nil { + return x.ApprovalUsers + } + return nil +} + +func (x *SettingRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *SettingRequest) GetCustomizeInfo() []*KeyInfo { + if x != nil { + return x.CustomizeInfo + } + return nil +} + +func (x *SettingRequest) GetIsCustom() uint64 { + if x != nil { + return x.IsCustom + } + return 0 +} + +type DetailSettingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + KeyWord string `protobuf:"bytes,1,opt,name=KeyWord,json=keyWord,proto3" json:"KeyWord,omitempty"` + Domain string `protobuf:"bytes,2,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` +} + +func (x *DetailSettingRequest) Reset() { + *x = DetailSettingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DetailSettingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DetailSettingRequest) ProtoMessage() {} + +func (x *DetailSettingRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[46] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DetailSettingRequest.ProtoReflect.Descriptor instead. +func (*DetailSettingRequest) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{46} +} + +func (x *DetailSettingRequest) GetKeyWord() string { + if x != nil { + return x.KeyWord + } + return "" +} + +func (x *DetailSettingRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +type SettingResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + Success bool `protobuf:"varint,2,opt,name=Success,json=success,proto3" json:"Success,omitempty"` +} + +func (x *SettingResponse) Reset() { + *x = SettingResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingResponse) ProtoMessage() {} + +func (x *SettingResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[47] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingResponse.ProtoReflect.Descriptor instead. +func (*SettingResponse) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{47} +} + +func (x *SettingResponse) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *SettingResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +type ApplyTime struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Date string `protobuf:"bytes,1,opt,name=Date,json=date,proto3" json:"Date,omitempty"` + Hour string `protobuf:"bytes,2,opt,name=Hour,json=hour,proto3" json:"Hour,omitempty"` + M string `protobuf:"bytes,3,opt,name=M,json=m,proto3" json:"M,omitempty"` +} + +func (x *ApplyTime) Reset() { + *x = ApplyTime{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplyTime) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplyTime) ProtoMessage() {} + +func (x *ApplyTime) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[48] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplyTime.ProtoReflect.Descriptor instead. +func (*ApplyTime) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{48} +} + +func (x *ApplyTime) GetDate() string { + if x != nil { + return x.Date + } + return "" +} + +func (x *ApplyTime) GetHour() string { + if x != nil { + return x.Hour + } + return "" +} + +func (x *ApplyTime) GetM() string { + if x != nil { + return x.M + } + return "" +} + +type ApprovalOA struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + DeletedAt uint64 `protobuf:"varint,2,opt,name=DeletedAt,json=deletedAt,proto3" json:"DeletedAt,omitempty"` + CreatedAt string `protobuf:"bytes,3,opt,name=CreatedAt,json=createdAt,proto3" json:"CreatedAt,omitempty"` + UpdatedAt string `protobuf:"bytes,4,opt,name=UpdatedAt,json=updatedAt,proto3" json:"UpdatedAt,omitempty"` + ApprovalID uint64 `protobuf:"varint,5,opt,name=ApprovalID,json=approvalID,proto3" json:"ApprovalID,omitempty"` + LeaveApply *LeaveApply `protobuf:"bytes,6,opt,name=LeaveApply,json=leaveApply,proto3" json:"LeaveApply,omitempty"` + OutWork *OutWorkApply `protobuf:"bytes,7,opt,name=OutWork,json=outWork,proto3" json:"OutWork,omitempty"` + MakeUp *MakeUpApply `protobuf:"bytes,8,opt,name=MakeUp,json=makeUp,proto3" json:"MakeUp,omitempty"` + Turnover *TurnoverApply `protobuf:"bytes,9,opt,name=Turnover,json=turnover,proto3" json:"Turnover,omitempty"` + OverTime *OverTimeApply `protobuf:"bytes,10,opt,name=OverTime,json=overTime,proto3" json:"OverTime,omitempty"` + Leave *Leave `protobuf:"bytes,11,opt,name=Leave,json=leave,proto3" json:"Leave,omitempty"` +} + +func (x *ApprovalOA) Reset() { + *x = ApprovalOA{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApprovalOA) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApprovalOA) ProtoMessage() {} + +func (x *ApprovalOA) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[49] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApprovalOA.ProtoReflect.Descriptor instead. +func (*ApprovalOA) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{49} +} + +func (x *ApprovalOA) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *ApprovalOA) GetDeletedAt() uint64 { + if x != nil { + return x.DeletedAt + } + return 0 +} + +func (x *ApprovalOA) GetCreatedAt() string { + if x != nil { + return x.CreatedAt + } + return "" +} + +func (x *ApprovalOA) GetUpdatedAt() string { + if x != nil { + return x.UpdatedAt + } + return "" +} + +func (x *ApprovalOA) GetApprovalID() uint64 { + if x != nil { + return x.ApprovalID + } + return 0 +} + +func (x *ApprovalOA) GetLeaveApply() *LeaveApply { + if x != nil { + return x.LeaveApply + } + return nil +} + +func (x *ApprovalOA) GetOutWork() *OutWorkApply { + if x != nil { + return x.OutWork + } + return nil +} + +func (x *ApprovalOA) GetMakeUp() *MakeUpApply { + if x != nil { + return x.MakeUp + } + return nil +} + +func (x *ApprovalOA) GetTurnover() *TurnoverApply { + if x != nil { + return x.Turnover + } + return nil +} + +func (x *ApprovalOA) GetOverTime() *OverTimeApply { + if x != nil { + return x.OverTime + } + return nil +} + +func (x *ApprovalOA) GetLeave() *Leave { + if x != nil { + return x.Leave + } + return nil +} + +type LeaveApply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UUID string `protobuf:"bytes,1,opt,name=UUID,proto3" json:"UUID,omitempty"` + StaffUID string `protobuf:"bytes,2,opt,name=StaffUID,json=staffUID,proto3" json:"StaffUID,omitempty"` + StaffNum string `protobuf:"bytes,3,opt,name=StaffNum,json=staffNum,proto3" json:"StaffNum,omitempty"` + StaffName string `protobuf:"bytes,4,opt,name=StaffName,json=staffName,proto3" json:"StaffName,omitempty"` + DepartmentUID string `protobuf:"bytes,5,opt,name=DepartmentUID,json=departmentUID,proto3" json:"DepartmentUID,omitempty"` + ApplyType string `protobuf:"bytes,6,opt,name=ApplyType,json=applyType,proto3" json:"ApplyType,omitempty"` + ActionTime string `protobuf:"bytes,7,opt,name=ActionTime,json=actionTime,proto3" json:"ActionTime,omitempty"` + ApprovalID string `protobuf:"bytes,8,opt,name=ApprovalID,json=approvalID,proto3" json:"ApprovalID,omitempty"` + Status int32 `protobuf:"varint,9,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + Reason string `protobuf:"bytes,10,opt,name=Reason,json=reason,proto3" json:"Reason,omitempty"` + VerifyFile []string `protobuf:"bytes,11,rep,name=VerifyFile,json=verifyFile,proto3" json:"VerifyFile,omitempty"` + CopyUsers []*CopyUser `protobuf:"bytes,12,rep,name=CopyUsers,json=copyUsers,proto3" json:"CopyUsers,omitempty"` + ApprovalUsers []*ApprovalUser `protobuf:"bytes,13,rep,name=ApprovalUsers,json=approvalUsers,proto3" json:"ApprovalUsers,omitempty"` +} + +func (x *LeaveApply) Reset() { + *x = LeaveApply{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LeaveApply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LeaveApply) ProtoMessage() {} + +func (x *LeaveApply) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[50] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LeaveApply.ProtoReflect.Descriptor instead. +func (*LeaveApply) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{50} +} + +func (x *LeaveApply) GetUUID() string { + if x != nil { + return x.UUID + } + return "" +} + +func (x *LeaveApply) GetStaffUID() string { + if x != nil { + return x.StaffUID + } + return "" +} + +func (x *LeaveApply) GetStaffNum() string { + if x != nil { + return x.StaffNum + } + return "" +} + +func (x *LeaveApply) GetStaffName() string { + if x != nil { + return x.StaffName + } + return "" +} + +func (x *LeaveApply) GetDepartmentUID() string { + if x != nil { + return x.DepartmentUID + } + return "" +} + +func (x *LeaveApply) GetApplyType() string { + if x != nil { + return x.ApplyType + } + return "" +} + +func (x *LeaveApply) GetActionTime() string { + if x != nil { + return x.ActionTime + } + return "" +} + +func (x *LeaveApply) GetApprovalID() string { + if x != nil { + return x.ApprovalID + } + return "" +} + +func (x *LeaveApply) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *LeaveApply) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *LeaveApply) GetVerifyFile() []string { + if x != nil { + return x.VerifyFile + } + return nil +} + +func (x *LeaveApply) GetCopyUsers() []*CopyUser { + if x != nil { + return x.CopyUsers + } + return nil +} + +func (x *LeaveApply) GetApprovalUsers() []*ApprovalUser { + if x != nil { + return x.ApprovalUsers + } + return nil +} + +type OutWorkApply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UUID string `protobuf:"bytes,1,opt,name=UUID,proto3" json:"UUID,omitempty"` + StaffUID string `protobuf:"bytes,2,opt,name=StaffUID,json=staffUID,proto3" json:"StaffUID,omitempty"` + StaffNum string `protobuf:"bytes,3,opt,name=StaffNum,json=staffNum,proto3" json:"StaffNum,omitempty"` + StaffName string `protobuf:"bytes,4,opt,name=StaffName,json=staffName,proto3" json:"StaffName,omitempty"` + DepartmentUID string `protobuf:"bytes,5,opt,name=DepartmentUID,json=departmentUID,proto3" json:"DepartmentUID,omitempty"` + ApplyType string `protobuf:"bytes,6,opt,name=ApplyType,json=applyType,proto3" json:"ApplyType,omitempty"` + ActionTime string `protobuf:"bytes,7,opt,name=ActionTime,json=actionTime,proto3" json:"ActionTime,omitempty"` + ApprovalID string `protobuf:"bytes,8,opt,name=ApprovalID,json=approvalID,proto3" json:"ApprovalID,omitempty"` + Status int32 `protobuf:"varint,9,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + ApplyTimes []*ApplyTime `protobuf:"bytes,10,rep,name=ApplyTimes,json=applyTimes,proto3" json:"ApplyTimes,omitempty"` + Reason string `protobuf:"bytes,12,opt,name=Reason,json=reason,proto3" json:"Reason,omitempty"` + Hours float32 `protobuf:"fixed32,13,opt,name=Hours,json=hours,proto3" json:"Hours,omitempty"` + OutWorkAddress string `protobuf:"bytes,14,opt,name=OutWorkAddress,json=outWorkAddress,proto3" json:"OutWorkAddress,omitempty"` + Vehicle string `protobuf:"bytes,15,opt,name=Vehicle,json=vehicle,proto3" json:"Vehicle,omitempty"` + CopyUsers []*CopyUser `protobuf:"bytes,16,rep,name=CopyUsers,json=copyUsers,proto3" json:"CopyUsers,omitempty"` + ApprovalUsers []*ApprovalUser `protobuf:"bytes,17,rep,name=ApprovalUsers,json=approvalUsers,proto3" json:"ApprovalUsers,omitempty"` +} + +func (x *OutWorkApply) Reset() { + *x = OutWorkApply{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OutWorkApply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OutWorkApply) ProtoMessage() {} + +func (x *OutWorkApply) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[51] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OutWorkApply.ProtoReflect.Descriptor instead. +func (*OutWorkApply) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{51} +} + +func (x *OutWorkApply) GetUUID() string { + if x != nil { + return x.UUID + } + return "" +} + +func (x *OutWorkApply) GetStaffUID() string { + if x != nil { + return x.StaffUID + } + return "" +} + +func (x *OutWorkApply) GetStaffNum() string { + if x != nil { + return x.StaffNum + } + return "" +} + +func (x *OutWorkApply) GetStaffName() string { + if x != nil { + return x.StaffName + } + return "" +} + +func (x *OutWorkApply) GetDepartmentUID() string { + if x != nil { + return x.DepartmentUID + } + return "" +} + +func (x *OutWorkApply) GetApplyType() string { + if x != nil { + return x.ApplyType + } + return "" +} + +func (x *OutWorkApply) GetActionTime() string { + if x != nil { + return x.ActionTime + } + return "" +} + +func (x *OutWorkApply) GetApprovalID() string { + if x != nil { + return x.ApprovalID + } + return "" +} + +func (x *OutWorkApply) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *OutWorkApply) GetApplyTimes() []*ApplyTime { + if x != nil { + return x.ApplyTimes + } + return nil +} + +func (x *OutWorkApply) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *OutWorkApply) GetHours() float32 { + if x != nil { + return x.Hours + } + return 0 +} + +func (x *OutWorkApply) GetOutWorkAddress() string { + if x != nil { + return x.OutWorkAddress + } + return "" +} + +func (x *OutWorkApply) GetVehicle() string { + if x != nil { + return x.Vehicle + } + return "" +} + +func (x *OutWorkApply) GetCopyUsers() []*CopyUser { + if x != nil { + return x.CopyUsers + } + return nil +} + +func (x *OutWorkApply) GetApprovalUsers() []*ApprovalUser { + if x != nil { + return x.ApprovalUsers + } + return nil +} + +type MakeUpApply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UUID string `protobuf:"bytes,1,opt,name=UUID,proto3" json:"UUID,omitempty"` + StaffUID string `protobuf:"bytes,2,opt,name=StaffUID,json=staffUID,proto3" json:"StaffUID,omitempty"` + StaffNum string `protobuf:"bytes,3,opt,name=StaffNum,json=staffNum,proto3" json:"StaffNum,omitempty"` + StaffName string `protobuf:"bytes,4,opt,name=StaffName,json=staffName,proto3" json:"StaffName,omitempty"` + DepartmentUID string `protobuf:"bytes,5,opt,name=DepartmentUID,json=departmentUID,proto3" json:"DepartmentUID,omitempty"` + ApplyType string `protobuf:"bytes,6,opt,name=ApplyType,json=applyType,proto3" json:"ApplyType,omitempty"` + ActionTime string `protobuf:"bytes,7,opt,name=ActionTime,json=actionTime,proto3" json:"ActionTime,omitempty"` + ApprovalID string `protobuf:"bytes,8,opt,name=ApprovalID,json=approvalID,proto3" json:"ApprovalID,omitempty"` + Status int32 `protobuf:"varint,9,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + ApplyTimes []*ApplyTime `protobuf:"bytes,10,rep,name=ApplyTimes,json=applyTimes,proto3" json:"ApplyTimes,omitempty"` + Reason string `protobuf:"bytes,12,opt,name=Reason,json=reason,proto3" json:"Reason,omitempty"` + CopyUsers []*CopyUser `protobuf:"bytes,13,rep,name=CopyUsers,json=copyUsers,proto3" json:"CopyUsers,omitempty"` + ApprovalUsers []*ApprovalUser `protobuf:"bytes,14,rep,name=ApprovalUsers,json=approvalUsers,proto3" json:"ApprovalUsers,omitempty"` +} + +func (x *MakeUpApply) Reset() { + *x = MakeUpApply{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MakeUpApply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MakeUpApply) ProtoMessage() {} + +func (x *MakeUpApply) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[52] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MakeUpApply.ProtoReflect.Descriptor instead. +func (*MakeUpApply) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{52} +} + +func (x *MakeUpApply) GetUUID() string { + if x != nil { + return x.UUID + } + return "" +} + +func (x *MakeUpApply) GetStaffUID() string { + if x != nil { + return x.StaffUID + } + return "" +} + +func (x *MakeUpApply) GetStaffNum() string { + if x != nil { + return x.StaffNum + } + return "" +} + +func (x *MakeUpApply) GetStaffName() string { + if x != nil { + return x.StaffName + } + return "" +} + +func (x *MakeUpApply) GetDepartmentUID() string { + if x != nil { + return x.DepartmentUID + } + return "" +} + +func (x *MakeUpApply) GetApplyType() string { + if x != nil { + return x.ApplyType + } + return "" +} + +func (x *MakeUpApply) GetActionTime() string { + if x != nil { + return x.ActionTime + } + return "" +} + +func (x *MakeUpApply) GetApprovalID() string { + if x != nil { + return x.ApprovalID + } + return "" +} + +func (x *MakeUpApply) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *MakeUpApply) GetApplyTimes() []*ApplyTime { + if x != nil { + return x.ApplyTimes + } + return nil +} + +func (x *MakeUpApply) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *MakeUpApply) GetCopyUsers() []*CopyUser { + if x != nil { + return x.CopyUsers + } + return nil +} + +func (x *MakeUpApply) GetApprovalUsers() []*ApprovalUser { + if x != nil { + return x.ApprovalUsers + } + return nil +} + +type TurnoverApply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UUID string `protobuf:"bytes,1,opt,name=UUID,proto3" json:"UUID,omitempty"` + StaffUID string `protobuf:"bytes,2,opt,name=StaffUID,json=staffUID,proto3" json:"StaffUID,omitempty"` + StaffNum string `protobuf:"bytes,3,opt,name=StaffNum,json=staffNum,proto3" json:"StaffNum,omitempty"` + StaffName string `protobuf:"bytes,4,opt,name=StaffName,json=staffName,proto3" json:"StaffName,omitempty"` + DepartmentUID string `protobuf:"bytes,5,opt,name=DepartmentUID,json=departmentUID,proto3" json:"DepartmentUID,omitempty"` + ApplyType string `protobuf:"bytes,6,opt,name=ApplyType,json=applyType,proto3" json:"ApplyType,omitempty"` + ActionTime string `protobuf:"bytes,7,opt,name=ActionTime,json=actionTime,proto3" json:"ActionTime,omitempty"` + ApprovalID string `protobuf:"bytes,8,opt,name=ApprovalID,json=approvalID,proto3" json:"ApprovalID,omitempty"` + Status int32 `protobuf:"varint,9,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + HandoverUID string `protobuf:"bytes,10,opt,name=HandoverUID,json=handoverUID,proto3" json:"HandoverUID,omitempty"` + HandoverName string `protobuf:"bytes,11,opt,name=HandoverName,json=handoverName,proto3" json:"HandoverName,omitempty"` + ApplyTimes []*ApplyTime `protobuf:"bytes,12,rep,name=ApplyTimes,json=applyTimes,proto3" json:"ApplyTimes,omitempty"` + Reason string `protobuf:"bytes,13,opt,name=Reason,json=reason,proto3" json:"Reason,omitempty"` + CopyUsers []*CopyUser `protobuf:"bytes,14,rep,name=CopyUsers,json=copyUsers,proto3" json:"CopyUsers,omitempty"` + ApprovalUsers []*ApprovalUser `protobuf:"bytes,15,rep,name=ApprovalUsers,json=approvalUsers,proto3" json:"ApprovalUsers,omitempty"` +} + +func (x *TurnoverApply) Reset() { + *x = TurnoverApply{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TurnoverApply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TurnoverApply) ProtoMessage() {} + +func (x *TurnoverApply) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[53] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TurnoverApply.ProtoReflect.Descriptor instead. +func (*TurnoverApply) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{53} +} + +func (x *TurnoverApply) GetUUID() string { + if x != nil { + return x.UUID + } + return "" +} + +func (x *TurnoverApply) GetStaffUID() string { + if x != nil { + return x.StaffUID + } + return "" +} + +func (x *TurnoverApply) GetStaffNum() string { + if x != nil { + return x.StaffNum + } + return "" +} + +func (x *TurnoverApply) GetStaffName() string { + if x != nil { + return x.StaffName + } + return "" +} + +func (x *TurnoverApply) GetDepartmentUID() string { + if x != nil { + return x.DepartmentUID + } + return "" +} + +func (x *TurnoverApply) GetApplyType() string { + if x != nil { + return x.ApplyType + } + return "" +} + +func (x *TurnoverApply) GetActionTime() string { + if x != nil { + return x.ActionTime + } + return "" +} + +func (x *TurnoverApply) GetApprovalID() string { + if x != nil { + return x.ApprovalID + } + return "" +} + +func (x *TurnoverApply) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *TurnoverApply) GetHandoverUID() string { + if x != nil { + return x.HandoverUID + } + return "" +} + +func (x *TurnoverApply) GetHandoverName() string { + if x != nil { + return x.HandoverName + } + return "" +} + +func (x *TurnoverApply) GetApplyTimes() []*ApplyTime { + if x != nil { + return x.ApplyTimes + } + return nil +} + +func (x *TurnoverApply) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *TurnoverApply) GetCopyUsers() []*CopyUser { + if x != nil { + return x.CopyUsers + } + return nil +} + +func (x *TurnoverApply) GetApprovalUsers() []*ApprovalUser { + if x != nil { + return x.ApprovalUsers + } + return nil +} + +type OverTimeApply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UUID string `protobuf:"bytes,1,opt,name=UUID,proto3" json:"UUID,omitempty"` + StaffUID string `protobuf:"bytes,2,opt,name=StaffUID,json=staffUID,proto3" json:"StaffUID,omitempty"` + StaffNum string `protobuf:"bytes,3,opt,name=StaffNum,json=staffNum,proto3" json:"StaffNum,omitempty"` + StaffName string `protobuf:"bytes,4,opt,name=StaffName,json=staffName,proto3" json:"StaffName,omitempty"` + DepartmentUID string `protobuf:"bytes,5,opt,name=DepartmentUID,json=departmentUID,proto3" json:"DepartmentUID,omitempty"` + ApplyType string `protobuf:"bytes,6,opt,name=ApplyType,json=applyType,proto3" json:"ApplyType,omitempty"` + ActionTime string `protobuf:"bytes,7,opt,name=ActionTime,json=actionTime,proto3" json:"ActionTime,omitempty"` + ApprovalID string `protobuf:"bytes,8,opt,name=ApprovalID,json=approvalID,proto3" json:"ApprovalID,omitempty"` + Status int32 `protobuf:"varint,9,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + ApplyTimes []*ApplyTime `protobuf:"bytes,10,rep,name=ApplyTimes,json=applyTimes,proto3" json:"ApplyTimes,omitempty"` + Reason string `protobuf:"bytes,12,opt,name=Reason,json=reason,proto3" json:"Reason,omitempty"` + Hours float32 `protobuf:"fixed32,13,opt,name=Hours,json=hours,proto3" json:"Hours,omitempty"` + CopyUsers []*CopyUser `protobuf:"bytes,14,rep,name=CopyUsers,json=copyUsers,proto3" json:"CopyUsers,omitempty"` + ApprovalUsers []*ApprovalUser `protobuf:"bytes,15,rep,name=ApprovalUsers,json=approvalUsers,proto3" json:"ApprovalUsers,omitempty"` +} + +func (x *OverTimeApply) Reset() { + *x = OverTimeApply{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OverTimeApply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OverTimeApply) ProtoMessage() {} + +func (x *OverTimeApply) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[54] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OverTimeApply.ProtoReflect.Descriptor instead. +func (*OverTimeApply) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{54} +} + +func (x *OverTimeApply) GetUUID() string { + if x != nil { + return x.UUID + } + return "" +} + +func (x *OverTimeApply) GetStaffUID() string { + if x != nil { + return x.StaffUID + } + return "" +} + +func (x *OverTimeApply) GetStaffNum() string { + if x != nil { + return x.StaffNum + } + return "" +} + +func (x *OverTimeApply) GetStaffName() string { + if x != nil { + return x.StaffName + } + return "" +} + +func (x *OverTimeApply) GetDepartmentUID() string { + if x != nil { + return x.DepartmentUID } - return 0 + return "" } -func (x *SettingRequest) GetCreatedAt() string { +func (x *OverTimeApply) GetApplyType() string { if x != nil { - return x.CreatedAt + return x.ApplyType } return "" } -func (x *SettingRequest) GetUpdatedAt() string { +func (x *OverTimeApply) GetActionTime() string { if x != nil { - return x.UpdatedAt + return x.ActionTime } return "" } -func (x *SettingRequest) GetKeyWord() string { +func (x *OverTimeApply) GetApprovalID() string { if x != nil { - return x.KeyWord + return x.ApprovalID } return "" } -func (x *SettingRequest) GetCopyUsers() []*CopyUser { +func (x *OverTimeApply) GetStatus() int32 { if x != nil { - return x.CopyUsers + return x.Status } - return nil + return 0 } -func (x *SettingRequest) GetApprovalUsers() []*ApprovalUser { +func (x *OverTimeApply) GetApplyTimes() []*ApplyTime { if x != nil { - return x.ApprovalUsers + return x.ApplyTimes } return nil } -func (x *SettingRequest) GetDomain() string { +func (x *OverTimeApply) GetReason() string { if x != nil { - return x.Domain + return x.Reason } return "" } -func (x *SettingRequest) GetCustomizeInfo() []*KeyInfo { +func (x *OverTimeApply) GetHours() float32 { if x != nil { - return x.CustomizeInfo + return x.Hours + } + return 0 +} + +func (x *OverTimeApply) GetCopyUsers() []*CopyUser { + if x != nil { + return x.CopyUsers } return nil } -func (x *SettingRequest) GetIsCustom() uint64 { +func (x *OverTimeApply) GetApprovalUsers() []*ApprovalUser { if x != nil { - return x.IsCustom + return x.ApprovalUsers } - return 0 + return nil } -type DetailSettingRequest struct { +type Leave struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - KeyWord string `protobuf:"bytes,1,opt,name=KeyWord,json=keyWord,proto3" json:"KeyWord,omitempty"` - Domain string `protobuf:"bytes,2,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` -} - -func (x *DetailSettingRequest) Reset() { - *x = DetailSettingRequest{} + UUID string `protobuf:"bytes,1,opt,name=UUID,proto3" json:"UUID,omitempty"` + StaffUID string `protobuf:"bytes,2,opt,name=StaffUID,json=staffUID,proto3" json:"StaffUID,omitempty"` + StaffNum string `protobuf:"bytes,3,opt,name=StaffNum,json=staffNum,proto3" json:"StaffNum,omitempty"` + StaffName string `protobuf:"bytes,4,opt,name=StaffName,json=staffName,proto3" json:"StaffName,omitempty"` + DepartmentUID string `protobuf:"bytes,5,opt,name=DepartmentUID,json=departmentUID,proto3" json:"DepartmentUID,omitempty"` + ApplyType string `protobuf:"bytes,6,opt,name=ApplyType,json=applyType,proto3" json:"ApplyType,omitempty"` + ActionTime string `protobuf:"bytes,7,opt,name=ActionTime,json=actionTime,proto3" json:"ActionTime,omitempty"` + ApprovalID string `protobuf:"bytes,8,opt,name=ApprovalID,json=approvalID,proto3" json:"ApprovalID,omitempty"` + Status int32 `protobuf:"varint,9,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + ApplyTimes []*ApplyTime `protobuf:"bytes,10,rep,name=ApplyTimes,json=applyTimes,proto3" json:"ApplyTimes,omitempty"` + Reason string `protobuf:"bytes,12,opt,name=Reason,json=reason,proto3" json:"Reason,omitempty"` + Hours float32 `protobuf:"fixed32,13,opt,name=Hours,json=hours,proto3" json:"Hours,omitempty"` + Days float32 `protobuf:"fixed32,14,opt,name=Days,json=days,proto3" json:"Days,omitempty"` + CopyUsers []*CopyUser `protobuf:"bytes,15,rep,name=CopyUsers,json=copyUsers,proto3" json:"CopyUsers,omitempty"` + ApprovalUsers []*ApprovalUser `protobuf:"bytes,16,rep,name=ApprovalUsers,json=approvalUsers,proto3" json:"ApprovalUsers,omitempty"` +} + +func (x *Leave) Reset() { + *x = Leave{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[46] + mi := &file_api_approval_approval_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *DetailSettingRequest) String() string { +func (x *Leave) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DetailSettingRequest) ProtoMessage() {} +func (*Leave) ProtoMessage() {} -func (x *DetailSettingRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[46] +func (x *Leave) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3704,78 +4788,114 @@ func (x *DetailSettingRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DetailSettingRequest.ProtoReflect.Descriptor instead. -func (*DetailSettingRequest) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{46} +// Deprecated: Use Leave.ProtoReflect.Descriptor instead. +func (*Leave) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{55} } -func (x *DetailSettingRequest) GetKeyWord() string { +func (x *Leave) GetUUID() string { if x != nil { - return x.KeyWord + return x.UUID } return "" } -func (x *DetailSettingRequest) GetDomain() string { +func (x *Leave) GetStaffUID() string { if x != nil { - return x.Domain + return x.StaffUID } return "" } -type SettingResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *Leave) GetStaffNum() string { + if x != nil { + return x.StaffNum + } + return "" +} - ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` - Success bool `protobuf:"varint,2,opt,name=Success,json=success,proto3" json:"Success,omitempty"` +func (x *Leave) GetStaffName() string { + if x != nil { + return x.StaffName + } + return "" } -func (x *SettingResponse) Reset() { - *x = SettingResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[47] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *Leave) GetDepartmentUID() string { + if x != nil { + return x.DepartmentUID } + return "" } -func (x *SettingResponse) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *Leave) GetApplyType() string { + if x != nil { + return x.ApplyType + } + return "" } -func (*SettingResponse) ProtoMessage() {} +func (x *Leave) GetActionTime() string { + if x != nil { + return x.ActionTime + } + return "" +} -func (x *SettingResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[47] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *Leave) GetApprovalID() string { + if x != nil { + return x.ApprovalID } - return mi.MessageOf(x) + return "" } -// Deprecated: Use SettingResponse.ProtoReflect.Descriptor instead. -func (*SettingResponse) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{47} +func (x *Leave) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 } -func (x *SettingResponse) GetID() uint64 { +func (x *Leave) GetApplyTimes() []*ApplyTime { if x != nil { - return x.ID + return x.ApplyTimes + } + return nil +} + +func (x *Leave) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *Leave) GetHours() float32 { + if x != nil { + return x.Hours } return 0 } -func (x *SettingResponse) GetSuccess() bool { +func (x *Leave) GetDays() float32 { if x != nil { - return x.Success + return x.Days } - return false + return 0 +} + +func (x *Leave) GetCopyUsers() []*CopyUser { + if x != nil { + return x.CopyUsers + } + return nil +} + +func (x *Leave) GetApprovalUsers() []*ApprovalUser { + if x != nil { + return x.ApprovalUsers + } + return nil } // 财务报表审批 @@ -3790,7 +4910,7 @@ type GetNameRequest struct { func (x *GetNameRequest) Reset() { *x = GetNameRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[48] + mi := &file_api_approval_approval_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3803,7 +4923,7 @@ func (x *GetNameRequest) String() string { func (*GetNameRequest) ProtoMessage() {} func (x *GetNameRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[48] + mi := &file_api_approval_approval_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3816,7 +4936,7 @@ func (x *GetNameRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetNameRequest.ProtoReflect.Descriptor instead. func (*GetNameRequest) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{48} + return file_api_approval_approval_proto_rawDescGZIP(), []int{56} } func (x *GetNameRequest) GetSettingType() string { @@ -3837,7 +4957,7 @@ type GetNameResponse struct { func (x *GetNameResponse) Reset() { *x = GetNameResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[49] + mi := &file_api_approval_approval_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3850,7 +4970,7 @@ func (x *GetNameResponse) String() string { func (*GetNameResponse) ProtoMessage() {} func (x *GetNameResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[49] + mi := &file_api_approval_approval_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3863,7 +4983,7 @@ func (x *GetNameResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetNameResponse.ProtoReflect.Descriptor instead. func (*GetNameResponse) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{49} + return file_api_approval_approval_proto_rawDescGZIP(), []int{57} } func (x *GetNameResponse) GetName() []string { @@ -3896,7 +5016,7 @@ type FinancialForm struct { func (x *FinancialForm) Reset() { *x = FinancialForm{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[50] + mi := &file_api_approval_approval_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3909,7 +5029,7 @@ func (x *FinancialForm) String() string { func (*FinancialForm) ProtoMessage() {} func (x *FinancialForm) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[50] + mi := &file_api_approval_approval_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3922,7 +5042,7 @@ func (x *FinancialForm) ProtoReflect() protoreflect.Message { // Deprecated: Use FinancialForm.ProtoReflect.Descriptor instead. func (*FinancialForm) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{50} + return file_api_approval_approval_proto_rawDescGZIP(), []int{58} } func (x *FinancialForm) GetID() uint64 { @@ -4032,7 +5152,7 @@ type CostInfo struct { func (x *CostInfo) Reset() { *x = CostInfo{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[51] + mi := &file_api_approval_approval_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4045,7 +5165,7 @@ func (x *CostInfo) String() string { func (*CostInfo) ProtoMessage() {} func (x *CostInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[51] + mi := &file_api_approval_approval_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4058,7 +5178,7 @@ func (x *CostInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use CostInfo.ProtoReflect.Descriptor instead. func (*CostInfo) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{51} + return file_api_approval_approval_proto_rawDescGZIP(), []int{59} } func (x *CostInfo) GetDescription() string { @@ -4123,7 +5243,7 @@ type InvoiceInfo struct { func (x *InvoiceInfo) Reset() { *x = InvoiceInfo{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[52] + mi := &file_api_approval_approval_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4136,7 +5256,7 @@ func (x *InvoiceInfo) String() string { func (*InvoiceInfo) ProtoMessage() {} func (x *InvoiceInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[52] + mi := &file_api_approval_approval_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4149,7 +5269,7 @@ func (x *InvoiceInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use InvoiceInfo.ProtoReflect.Descriptor instead. func (*InvoiceInfo) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{52} + return file_api_approval_approval_proto_rawDescGZIP(), []int{60} } func (x *InvoiceInfo) GetInvoiceDate() string { @@ -4564,7 +5684,7 @@ var file_api_approval_approval_proto_rawDesc = []byte{ 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0xbc, 0x08, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x22, 0xf2, 0x08, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x25, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xe2, 0xdf, 0x1f, 0x09, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x31, 0x58, @@ -4628,281 +5748,504 @@ var file_api_approval_approval_proto_rawDesc = []byte{ 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x61, 0x79, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x0e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x61, 0x79, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x12, 0x3d, 0x0a, 0x0d, 0x46, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x46, 0x6f, 0x72, - 0x6d, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, - 0x61, 0x6c, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x46, 0x6f, 0x72, 0x6d, - 0x52, 0x0d, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x46, 0x6f, 0x72, 0x6d, 0x22, - 0xaa, 0x01, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, - 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1e, 0x0a, 0x0a, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x4f, 0x0a, 0x0d, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x16, 0x0a, - 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x39, 0x0a, - 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, - 0x0a, 0x03, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x04, 0x52, 0x03, 0x49, 0x44, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3c, 0x0a, 0x10, 0x41, 0x70, 0x70, 0x72, - 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, - 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, - 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x2a, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x22, 0x34, 0x0a, 0x18, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x45, 0x78, - 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x18, + 0x12, 0x34, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x4f, 0x41, 0x18, 0x1f, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, + 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x4f, 0x41, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x4f, 0x41, 0x12, 0x3d, 0x0a, 0x0d, 0x46, 0x69, 0x6e, 0x61, 0x6e, 0x63, + 0x69, 0x61, 0x6c, 0x46, 0x6f, 0x72, 0x6d, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, + 0x61, 0x6c, 0x46, 0x6f, 0x72, 0x6d, 0x52, 0x0d, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, + 0x6c, 0x46, 0x6f, 0x72, 0x6d, 0x22, 0xaa, 0x01, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x46, 0x6c, + 0x6f, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, + 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x65, 0x70, + 0x6c, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x41, 0x74, 0x22, 0x4f, 0x0a, 0x0d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x02, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x55, + 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x22, 0x39, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x04, 0x52, 0x03, 0x49, 0x44, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3c, + 0x0a, 0x10, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, + 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x2a, 0x0a, 0x0e, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0xe3, 0x02, 0x0a, 0x19, 0x41, 0x70, 0x70, - 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, - 0x12, 0x22, 0x0a, 0x0c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, - 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x09, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x45, 0x78, - 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x65, 0x78, - 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x42, - 0x0a, 0x18, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x22, 0x4a, 0x0a, 0x08, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, - 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, - 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x64, 0x22, 0x48, - 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, - 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, - 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0xf1, 0x02, 0x0a, 0x0e, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, + 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x34, 0x0a, 0x18, 0x41, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0xe3, + 0x02, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x45, 0x78, 0x68, 0x69, 0x62, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x61, 0x6c, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, + 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x45, 0x78, + 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x44, + 0x12, 0x26, 0x0a, 0x0e, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, + 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x45, 0x78, 0x68, 0x69, + 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x10, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x22, 0x42, 0x0a, 0x18, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, + 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x4a, 0x0a, 0x08, 0x43, 0x6f, 0x70, 0x79, + 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x56, 0x69, + 0x65, 0x77, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x56, 0x69, + 0x65, 0x77, 0x65, 0x64, 0x22, 0x48, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0xf1, + 0x02, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, + 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x1c, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4b, + 0x65, 0x79, 0x57, 0x6f, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, + 0x79, 0x57, 0x6f, 0x72, 0x64, 0x12, 0x30, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, + 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, + 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x37, 0x0a, + 0x0d, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0b, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, + 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, + 0x7a, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x43, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x69, 0x73, 0x43, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x22, 0x48, 0x0a, 0x14, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4b, 0x65, + 0x79, 0x57, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, + 0x57, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3b, 0x0a, 0x0f, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, + 0x18, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x41, 0x0a, 0x09, 0x41, 0x70, 0x70, + 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x6f, + 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x12, 0x0c, + 0x0a, 0x01, 0x4d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x6d, 0x22, 0xbe, 0x03, 0x0a, + 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x4f, 0x41, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x57, 0x6f, 0x72, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x57, 0x6f, 0x72, 0x64, 0x12, - 0x30, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, + 0x6c, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x34, 0x0a, 0x0a, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x41, 0x70, + 0x70, 0x6c, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, + 0x0a, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x30, 0x0a, 0x07, 0x4f, + 0x75, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4f, 0x75, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x41, + 0x70, 0x70, 0x6c, 0x79, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x12, 0x2d, 0x0a, + 0x06, 0x4d, 0x61, 0x6b, 0x65, 0x55, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4d, 0x61, 0x6b, 0x65, 0x55, 0x70, 0x41, + 0x70, 0x70, 0x6c, 0x79, 0x52, 0x06, 0x6d, 0x61, 0x6b, 0x65, 0x55, 0x70, 0x12, 0x33, 0x0a, 0x08, + 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, + 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x08, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, + 0x72, 0x12, 0x33, 0x0a, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4f, + 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x08, 0x6f, 0x76, + 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x2e, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x52, 0x05, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x22, 0xba, 0x03, + 0x0a, 0x0a, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, + 0x55, 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, + 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, + 0x53, 0x74, 0x61, 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x73, 0x74, 0x61, 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x66, + 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, + 0x66, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, + 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, + 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, + 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x43, 0x6f, + 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x09, 0x63, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x0d, + 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x0d, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0d, 0x61, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x22, 0xa9, 0x04, 0x0a, 0x0c, 0x4f, + 0x75, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x55, + 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, 0x12, + 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x53, + 0x74, 0x61, 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, + 0x74, 0x61, 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x66, 0x66, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x66, + 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, + 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x41, + 0x70, 0x70, 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x33, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, + 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, + 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x14, + 0x0a, 0x05, 0x48, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x68, + 0x6f, 0x75, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x75, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x75, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x56, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, + 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, + 0x65, 0x72, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x09, 0x63, + 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, + 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x22, 0xd0, 0x03, 0x0a, 0x0b, 0x4d, 0x61, 0x6b, 0x65, 0x55, + 0x70, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x55, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, + 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, + 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x66, 0x66, 0x4e, + 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x66, 0x66, 0x4e, + 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x66, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x66, 0x66, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x49, + 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x79, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x61, 0x6c, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x33, 0x0a, 0x0a, + 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x6c, + 0x79, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x09, 0x43, 0x6f, 0x70, + 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, + 0x52, 0x09, 0x63, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x0d, 0x41, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x0e, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x22, 0x98, 0x04, 0x0a, 0x0d, 0x54, 0x75, + 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x55, + 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, 0x12, + 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x53, + 0x74, 0x61, 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, + 0x74, 0x61, 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x66, 0x66, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x66, + 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, + 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x41, + 0x70, 0x70, 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x48, 0x61, 0x6e, 0x64, 0x6f, 0x76, 0x65, 0x72, 0x55, 0x49, 0x44, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x68, 0x61, 0x6e, 0x64, 0x6f, 0x76, 0x65, 0x72, + 0x55, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x48, 0x61, 0x6e, 0x64, 0x6f, 0x76, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x68, 0x61, 0x6e, 0x64, 0x6f, + 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x6c, 0x79, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, + 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, + 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x70, + 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, + 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, + 0x73, 0x65, 0x72, 0x73, 0x22, 0xe8, 0x03, 0x0a, 0x0d, 0x4f, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, + 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x55, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, + 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, + 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x66, 0x66, 0x4e, + 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x66, 0x66, 0x4e, + 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x66, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x66, 0x66, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x49, + 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x79, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x61, 0x6c, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x33, 0x0a, 0x0a, + 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x6c, + 0x79, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x48, 0x6f, 0x75, + 0x72, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x12, + 0x30, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, - 0x72, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x72, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x0d, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x37, 0x0a, 0x0d, 0x43, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x69, 0x7a, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x0d, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x73, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x69, 0x73, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x22, 0x48, 0x0a, 0x14, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x57, 0x6f, 0x72, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x57, 0x6f, 0x72, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3b, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x22, 0x32, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x22, 0x25, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xde, - 0x03, 0x0a, 0x0d, 0x46, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x46, 0x6f, 0x72, 0x6d, - 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, - 0x12, 0x1c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x50, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x12, 0x34, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, - 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, 0x79, 0x65, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x79, 0x65, 0x65, 0x12, 0x28, - 0x0a, 0x0f, 0x42, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x63, 0x69, 0x61, 0x72, 0x79, 0x42, 0x61, 0x6e, - 0x6b, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x63, - 0x69, 0x61, 0x72, 0x79, 0x42, 0x61, 0x6e, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x61, 0x6e, 0x6b, - 0x4e, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x61, 0x6e, 0x6b, 0x4e, 0x6f, - 0x12, 0x2e, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0b, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, - 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x63, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x37, 0x0a, 0x0b, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, - 0xc8, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, - 0x0a, 0x09, 0x55, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x43, 0x6f, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x63, 0x6f, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x73, 0x74, - 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, 0x6f, 0x73, 0x74, 0x4e, - 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x69, - 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x64, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x64, - 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xc1, 0x02, 0x0a, 0x0b, 0x49, - 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x6e, - 0x76, 0x6f, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x12, 0x28, 0x0a, 0x0f, 0x49, 0x6e, - 0x76, 0x6f, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x55, 0x73, 0x65, 0x54, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x75, 0x73, 0x65, - 0x54, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, - 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x4f, 0x62, 0x6a, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x4f, 0x62, 0x6a, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, - 0x6f, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x6f, 0x74, 0x65, - 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x32, 0xf1, - 0x0c, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x3f, 0x0a, 0x06, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, - 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, - 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0d, - 0x55, 0x73, 0x65, 0x64, 0x4e, 0x75, 0x6d, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x2e, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x64, 0x4e, 0x75, 0x6d, - 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x64, 0x4e, 0x75, 0x6d, - 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x60, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x78, 0x68, 0x69, 0x62, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x44, 0x12, 0x20, 0x2e, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x68, 0x41, - 0x70, 0x70, 0x6c, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, - 0x68, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x17, 0x2e, 0x61, - 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x00, - 0x12, 0x3f, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, - 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, - 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x3d, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x39, 0x0a, 0x06, 0x4d, 0x79, 0x57, 0x6f, 0x72, 0x6b, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x70, + 0x52, 0x0d, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x22, + 0xf4, 0x03, 0x0a, 0x05, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x55, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, + 0x08, 0x53, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x73, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, + 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, + 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x66, 0x66, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x66, 0x66, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, + 0x74, 0x55, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x61, + 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x70, 0x70, + 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, + 0x70, 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x33, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, + 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x48, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x68, 0x6f, 0x75, + 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x79, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x04, 0x64, 0x61, 0x79, 0x73, 0x12, 0x30, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, + 0x65, 0x72, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x09, 0x63, + 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, + 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x22, 0x32, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x22, 0x25, 0x0a, 0x0f, 0x47, 0x65, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0xde, 0x03, 0x0a, 0x0d, 0x46, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x46, + 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x02, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x1c, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1e, 0x0a, + 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x26, 0x0a, + 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x12, 0x34, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, + 0x61, 0x79, 0x65, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x79, 0x65, + 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x42, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x63, 0x69, 0x61, 0x72, 0x79, + 0x42, 0x61, 0x6e, 0x6b, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x65, 0x6e, 0x65, + 0x66, 0x69, 0x63, 0x69, 0x61, 0x72, 0x79, 0x42, 0x61, 0x6e, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x42, + 0x61, 0x6e, 0x6b, 0x4e, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x61, 0x6e, + 0x6b, 0x4e, 0x6f, 0x12, 0x2e, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x18, + 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x2e, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x63, 0x6f, 0x73, 0x74, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x37, 0x0a, 0x0b, 0x49, 0x6e, 0x76, + 0x6f, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x22, 0xc8, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x20, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x63, 0x6f, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x43, + 0x6f, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, 0x6f, + 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, + 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x64, 0x44, 0x65, 0x70, + 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x75, + 0x73, 0x65, 0x64, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xc1, 0x02, + 0x0a, 0x0b, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, + 0x0b, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x12, 0x28, 0x0a, + 0x0f, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x55, 0x73, 0x65, 0x54, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x75, 0x73, 0x65, 0x54, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x62, 0x6a, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, + 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x62, 0x6a, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x6e, 0x76, + 0x6f, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4e, + 0x6f, 0x74, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, + 0x73, 0x32, 0xf1, 0x0c, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x3f, + 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x52, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x64, 0x4e, 0x75, 0x6d, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, + 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x64, + 0x4e, 0x75, 0x6d, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x64, + 0x4e, 0x75, 0x6d, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x78, 0x68, + 0x69, 0x62, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x44, 0x12, 0x20, + 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x45, 0x68, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x45, 0x68, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x06, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, + 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, + 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x17, + 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x06, 0x4d, 0x79, 0x57, 0x6f, 0x72, 0x6b, 0x12, 0x15, 0x2e, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3b, + 0x0a, 0x08, 0x4d, 0x79, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x08, 0x4d, - 0x79, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, - 0x61, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x4e, 0x6f, 0x77, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x42, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x70, - 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4e, 0x6f, 0x77, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x79, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x46, 0x6c, 0x6f, 0x77, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, 0x49, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x61, 0x6c, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, - 0x6c, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x06, 0x56, 0x69, 0x65, 0x77, 0x65, - 0x64, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x56, 0x69, 0x65, - 0x77, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x70, - 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, - 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0d, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x2e, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x4e, + 0x6f, 0x77, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x42, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, 0x2e, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4e, 0x6f, 0x77, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x42, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, + 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x46, 0x6c, + 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0b, + 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x61, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x06, 0x56, 0x69, + 0x65, 0x77, 0x65, 0x64, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, + 0x56, 0x69, 0x65, 0x77, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, + 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x09, 0x53, + 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, 0x0a, + 0x0d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1e, + 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, + 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0d, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x58, 0x0a, 0x0f, 0x49, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x52, 0x69, 0x67, - 0x68, 0x74, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x49, 0x73, - 0x45, 0x78, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x52, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, - 0x49, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x52, 0x69, 0x67, 0x68, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0f, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x61, 0x79, 0x12, 0x20, 0x2e, 0x61, - 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x75, - 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, - 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0f, 0x49, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, + 0x52, 0x69, 0x67, 0x68, 0x74, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x2e, 0x49, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x52, 0x69, 0x67, 0x68, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x61, 0x6c, 0x2e, 0x49, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x52, 0x69, 0x67, + 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0f, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x61, 0x79, 0x12, + 0x20, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, + 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x2e, 0x61, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x43, 0x0a, 0x0a, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x07, 0x41, 0x6c, 0x6c, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x0a, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, - 0x08, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, - 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x6c, - 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x40, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x2e, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x3b, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, - 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x07, + 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x6c, 0x6c, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, + 0x0a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x41, 0x0a, 0x08, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x17, 0x2e, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x2e, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, + 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x3b, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4917,7 +6260,7 @@ func file_api_approval_approval_proto_rawDescGZIP() []byte { return file_api_approval_approval_proto_rawDescData } -var file_api_approval_approval_proto_msgTypes = make([]protoimpl.MessageInfo, 53) +var file_api_approval_approval_proto_msgTypes = make([]protoimpl.MessageInfo, 61) var file_api_approval_approval_proto_goTypes = []interface{}{ (*CommonResponse)(nil), // 0: approval.CommonResponse (*ChangeBundlePayRequest)(nil), // 1: approval.ChangeBundlePayRequest @@ -4967,11 +6310,19 @@ var file_api_approval_approval_proto_goTypes = []interface{}{ (*SettingRequest)(nil), // 45: approval.SettingRequest (*DetailSettingRequest)(nil), // 46: approval.DetailSettingRequest (*SettingResponse)(nil), // 47: approval.SettingResponse - (*GetNameRequest)(nil), // 48: approval.GetNameRequest - (*GetNameResponse)(nil), // 49: approval.GetNameResponse - (*FinancialForm)(nil), // 50: approval.FinancialForm - (*CostInfo)(nil), // 51: approval.CostInfo - (*InvoiceInfo)(nil), // 52: approval.InvoiceInfo + (*ApplyTime)(nil), // 48: approval.ApplyTime + (*ApprovalOA)(nil), // 49: approval.ApprovalOA + (*LeaveApply)(nil), // 50: approval.LeaveApply + (*OutWorkApply)(nil), // 51: approval.OutWorkApply + (*MakeUpApply)(nil), // 52: approval.MakeUpApply + (*TurnoverApply)(nil), // 53: approval.TurnoverApply + (*OverTimeApply)(nil), // 54: approval.OverTimeApply + (*Leave)(nil), // 55: approval.Leave + (*GetNameRequest)(nil), // 56: approval.GetNameRequest + (*GetNameResponse)(nil), // 57: approval.GetNameResponse + (*FinancialForm)(nil), // 58: approval.FinancialForm + (*CostInfo)(nil), // 59: approval.CostInfo + (*InvoiceInfo)(nil), // 60: approval.InvoiceInfo } var file_api_approval_approval_proto_depIdxs = []int32{ 4, // 0: approval.CreateTypeRequest.KeyInfos:type_name -> approval.KeyInfo @@ -4995,63 +6346,87 @@ var file_api_approval_approval_proto_depIdxs = []int32{ 35, // 18: approval.CreateRequest.WorkFlows:type_name -> approval.WorkFlow 4, // 19: approval.CreateRequest.CustomizeInfo:type_name -> approval.KeyInfo 33, // 20: approval.CreateRequest.BundlePayPrice:type_name -> approval.BundlePayPrice - 50, // 21: approval.CreateRequest.FinancialForm:type_name -> approval.FinancialForm - 43, // 22: approval.SettingRequest.CopyUsers:type_name -> approval.CopyUser - 44, // 23: approval.SettingRequest.ApprovalUsers:type_name -> approval.ApprovalUser - 4, // 24: approval.SettingRequest.CustomizeInfo:type_name -> approval.KeyInfo - 51, // 25: approval.FinancialForm.CostInfo:type_name -> approval.CostInfo - 52, // 26: approval.FinancialForm.InvoiceInfo:type_name -> approval.InvoiceInfo - 34, // 27: approval.Approval.Create:input_type -> approval.CreateRequest - 7, // 28: approval.Approval.UsedNumByUser:input_type -> approval.UsedNumByUserRequest - 5, // 29: approval.Approval.UpdateExhibitionApplyID:input_type -> approval.UpdateEhApplyIDRequest - 36, // 30: approval.Approval.Detail:input_type -> approval.DetailRequest - 34, // 31: approval.Approval.Update:input_type -> approval.CreateRequest - 37, // 32: approval.Approval.Remove:input_type -> approval.RemoveRequest - 19, // 33: approval.Approval.MyWork:input_type -> approval.ListRequest - 19, // 34: approval.Approval.MySubmit:input_type -> approval.ListRequest - 9, // 35: approval.Approval.NowLevelByInfo:input_type -> approval.NowLevelByInfoRequest - 22, // 36: approval.Approval.Information:input_type -> approval.InformationRequest - 21, // 37: approval.Approval.Viewed:input_type -> approval.ViewedRequest - 17, // 38: approval.Approval.SetStatus:input_type -> approval.StatusRequest - 46, // 39: approval.Approval.DetailSetting:input_type -> approval.DetailSettingRequest - 45, // 40: approval.Approval.UpdateSetting:input_type -> approval.SettingRequest - 2, // 41: approval.Approval.IsExistPayRight:input_type -> approval.IsExistPayRightRequest - 1, // 42: approval.Approval.ChangeBundlePay:input_type -> approval.ChangeBundlePayRequest - 12, // 43: approval.Approval.CreateType:input_type -> approval.CreateTypeRequest - 13, // 44: approval.Approval.DetailType:input_type -> approval.TypeResponse - 12, // 45: approval.Approval.UpdateType:input_type -> approval.CreateTypeRequest - 11, // 46: approval.Approval.AllType:input_type -> approval.CommonRequest - 37, // 47: approval.Approval.RemoveType:input_type -> approval.RemoveRequest - 11, // 48: approval.Approval.AllGroup:input_type -> approval.CommonRequest - 48, // 49: approval.Approval.GetName:input_type -> approval.GetNameRequest - 38, // 50: approval.Approval.Create:output_type -> approval.ApprovalResponse - 8, // 51: approval.Approval.UsedNumByUser:output_type -> approval.UsedNumByUserResponse - 6, // 52: approval.Approval.UpdateExhibitionApplyID:output_type -> approval.UpdateEhApplyIDResponse - 34, // 53: approval.Approval.Detail:output_type -> approval.CreateRequest - 38, // 54: approval.Approval.Update:output_type -> approval.ApprovalResponse - 39, // 55: approval.Approval.Remove:output_type -> approval.RemoveResponse - 20, // 56: approval.Approval.MyWork:output_type -> approval.ListResponse - 20, // 57: approval.Approval.MySubmit:output_type -> approval.ListResponse - 10, // 58: approval.Approval.NowLevelByInfo:output_type -> approval.WorkFlowResponse - 24, // 59: approval.Approval.Information:output_type -> approval.InformationResponse - 38, // 60: approval.Approval.Viewed:output_type -> approval.ApprovalResponse - 18, // 61: approval.Approval.SetStatus:output_type -> approval.StatusResponse - 45, // 62: approval.Approval.DetailSetting:output_type -> approval.SettingRequest - 47, // 63: approval.Approval.UpdateSetting:output_type -> approval.SettingResponse - 3, // 64: approval.Approval.IsExistPayRight:output_type -> approval.IsExistPayRightResponse - 0, // 65: approval.Approval.ChangeBundlePay:output_type -> approval.CommonResponse - 13, // 66: approval.Approval.CreateType:output_type -> approval.TypeResponse - 12, // 67: approval.Approval.DetailType:output_type -> approval.CreateTypeRequest - 13, // 68: approval.Approval.UpdateType:output_type -> approval.TypeResponse - 14, // 69: approval.Approval.AllType:output_type -> approval.AllTypeResponse - 18, // 70: approval.Approval.RemoveType:output_type -> approval.StatusResponse - 16, // 71: approval.Approval.AllGroup:output_type -> approval.AllGroupResponse - 49, // 72: approval.Approval.GetName:output_type -> approval.GetNameResponse - 50, // [50:73] is the sub-list for method output_type - 27, // [27:50] is the sub-list for method input_type - 27, // [27:27] is the sub-list for extension type_name - 27, // [27:27] is the sub-list for extension extendee - 0, // [0:27] is the sub-list for field type_name + 49, // 21: approval.CreateRequest.ApprovalOA:type_name -> approval.ApprovalOA + 58, // 22: approval.CreateRequest.FinancialForm:type_name -> approval.FinancialForm + 43, // 23: approval.SettingRequest.CopyUsers:type_name -> approval.CopyUser + 44, // 24: approval.SettingRequest.ApprovalUsers:type_name -> approval.ApprovalUser + 4, // 25: approval.SettingRequest.CustomizeInfo:type_name -> approval.KeyInfo + 50, // 26: approval.ApprovalOA.LeaveApply:type_name -> approval.LeaveApply + 51, // 27: approval.ApprovalOA.OutWork:type_name -> approval.OutWorkApply + 52, // 28: approval.ApprovalOA.MakeUp:type_name -> approval.MakeUpApply + 53, // 29: approval.ApprovalOA.Turnover:type_name -> approval.TurnoverApply + 54, // 30: approval.ApprovalOA.OverTime:type_name -> approval.OverTimeApply + 55, // 31: approval.ApprovalOA.Leave:type_name -> approval.Leave + 43, // 32: approval.LeaveApply.CopyUsers:type_name -> approval.CopyUser + 44, // 33: approval.LeaveApply.ApprovalUsers:type_name -> approval.ApprovalUser + 48, // 34: approval.OutWorkApply.ApplyTimes:type_name -> approval.ApplyTime + 43, // 35: approval.OutWorkApply.CopyUsers:type_name -> approval.CopyUser + 44, // 36: approval.OutWorkApply.ApprovalUsers:type_name -> approval.ApprovalUser + 48, // 37: approval.MakeUpApply.ApplyTimes:type_name -> approval.ApplyTime + 43, // 38: approval.MakeUpApply.CopyUsers:type_name -> approval.CopyUser + 44, // 39: approval.MakeUpApply.ApprovalUsers:type_name -> approval.ApprovalUser + 48, // 40: approval.TurnoverApply.ApplyTimes:type_name -> approval.ApplyTime + 43, // 41: approval.TurnoverApply.CopyUsers:type_name -> approval.CopyUser + 44, // 42: approval.TurnoverApply.ApprovalUsers:type_name -> approval.ApprovalUser + 48, // 43: approval.OverTimeApply.ApplyTimes:type_name -> approval.ApplyTime + 43, // 44: approval.OverTimeApply.CopyUsers:type_name -> approval.CopyUser + 44, // 45: approval.OverTimeApply.ApprovalUsers:type_name -> approval.ApprovalUser + 48, // 46: approval.Leave.ApplyTimes:type_name -> approval.ApplyTime + 43, // 47: approval.Leave.CopyUsers:type_name -> approval.CopyUser + 44, // 48: approval.Leave.ApprovalUsers:type_name -> approval.ApprovalUser + 59, // 49: approval.FinancialForm.CostInfo:type_name -> approval.CostInfo + 60, // 50: approval.FinancialForm.InvoiceInfo:type_name -> approval.InvoiceInfo + 34, // 51: approval.Approval.Create:input_type -> approval.CreateRequest + 7, // 52: approval.Approval.UsedNumByUser:input_type -> approval.UsedNumByUserRequest + 5, // 53: approval.Approval.UpdateExhibitionApplyID:input_type -> approval.UpdateEhApplyIDRequest + 36, // 54: approval.Approval.Detail:input_type -> approval.DetailRequest + 34, // 55: approval.Approval.Update:input_type -> approval.CreateRequest + 37, // 56: approval.Approval.Remove:input_type -> approval.RemoveRequest + 19, // 57: approval.Approval.MyWork:input_type -> approval.ListRequest + 19, // 58: approval.Approval.MySubmit:input_type -> approval.ListRequest + 9, // 59: approval.Approval.NowLevelByInfo:input_type -> approval.NowLevelByInfoRequest + 22, // 60: approval.Approval.Information:input_type -> approval.InformationRequest + 21, // 61: approval.Approval.Viewed:input_type -> approval.ViewedRequest + 17, // 62: approval.Approval.SetStatus:input_type -> approval.StatusRequest + 46, // 63: approval.Approval.DetailSetting:input_type -> approval.DetailSettingRequest + 45, // 64: approval.Approval.UpdateSetting:input_type -> approval.SettingRequest + 2, // 65: approval.Approval.IsExistPayRight:input_type -> approval.IsExistPayRightRequest + 1, // 66: approval.Approval.ChangeBundlePay:input_type -> approval.ChangeBundlePayRequest + 12, // 67: approval.Approval.CreateType:input_type -> approval.CreateTypeRequest + 13, // 68: approval.Approval.DetailType:input_type -> approval.TypeResponse + 12, // 69: approval.Approval.UpdateType:input_type -> approval.CreateTypeRequest + 11, // 70: approval.Approval.AllType:input_type -> approval.CommonRequest + 37, // 71: approval.Approval.RemoveType:input_type -> approval.RemoveRequest + 11, // 72: approval.Approval.AllGroup:input_type -> approval.CommonRequest + 56, // 73: approval.Approval.GetName:input_type -> approval.GetNameRequest + 38, // 74: approval.Approval.Create:output_type -> approval.ApprovalResponse + 8, // 75: approval.Approval.UsedNumByUser:output_type -> approval.UsedNumByUserResponse + 6, // 76: approval.Approval.UpdateExhibitionApplyID:output_type -> approval.UpdateEhApplyIDResponse + 34, // 77: approval.Approval.Detail:output_type -> approval.CreateRequest + 38, // 78: approval.Approval.Update:output_type -> approval.ApprovalResponse + 39, // 79: approval.Approval.Remove:output_type -> approval.RemoveResponse + 20, // 80: approval.Approval.MyWork:output_type -> approval.ListResponse + 20, // 81: approval.Approval.MySubmit:output_type -> approval.ListResponse + 10, // 82: approval.Approval.NowLevelByInfo:output_type -> approval.WorkFlowResponse + 24, // 83: approval.Approval.Information:output_type -> approval.InformationResponse + 38, // 84: approval.Approval.Viewed:output_type -> approval.ApprovalResponse + 18, // 85: approval.Approval.SetStatus:output_type -> approval.StatusResponse + 45, // 86: approval.Approval.DetailSetting:output_type -> approval.SettingRequest + 47, // 87: approval.Approval.UpdateSetting:output_type -> approval.SettingResponse + 3, // 88: approval.Approval.IsExistPayRight:output_type -> approval.IsExistPayRightResponse + 0, // 89: approval.Approval.ChangeBundlePay:output_type -> approval.CommonResponse + 13, // 90: approval.Approval.CreateType:output_type -> approval.TypeResponse + 12, // 91: approval.Approval.DetailType:output_type -> approval.CreateTypeRequest + 13, // 92: approval.Approval.UpdateType:output_type -> approval.TypeResponse + 14, // 93: approval.Approval.AllType:output_type -> approval.AllTypeResponse + 18, // 94: approval.Approval.RemoveType:output_type -> approval.StatusResponse + 16, // 95: approval.Approval.AllGroup:output_type -> approval.AllGroupResponse + 57, // 96: approval.Approval.GetName:output_type -> approval.GetNameResponse + 74, // [74:97] is the sub-list for method output_type + 51, // [51:74] is the sub-list for method input_type + 51, // [51:51] is the sub-list for extension type_name + 51, // [51:51] is the sub-list for extension extendee + 0, // [0:51] is the sub-list for field type_name } func init() { file_api_approval_approval_proto_init() } @@ -5637,7 +7012,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetNameRequest); i { + switch v := v.(*ApplyTime); i { case 0: return &v.state case 1: @@ -5649,7 +7024,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetNameResponse); i { + switch v := v.(*ApprovalOA); i { case 0: return &v.state case 1: @@ -5661,7 +7036,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FinancialForm); i { + switch v := v.(*LeaveApply); i { case 0: return &v.state case 1: @@ -5673,7 +7048,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CostInfo); i { + switch v := v.(*OutWorkApply); i { case 0: return &v.state case 1: @@ -5685,6 +7060,102 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MakeUpApply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TurnoverApply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OverTimeApply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Leave); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetNameRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetNameResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FinancialForm); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CostInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*InvoiceInfo); i { case 0: return &v.state @@ -5703,7 +7174,7 @@ func file_api_approval_approval_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_approval_approval_proto_rawDesc, NumEnums: 0, - NumMessages: 53, + NumMessages: 61, NumExtensions: 0, NumServices: 1, }, diff --git a/api/approval/approval.proto b/api/approval/approval.proto index e54d051..74e10fb 100644 --- a/api/approval/approval.proto +++ b/api/approval/approval.proto @@ -330,7 +330,8 @@ message CreateRequest { string TypeName = 28 [json_name = "typeName"]; string GroupName = 29 [json_name = "groupName"]; BundlePayPrice BundlePayPrice = 30 [json_name = "bundlePayPrice"]; - FinancialForm FinancialForm = 31 [json_name = "financialForm"]; + ApprovalOA ApprovalOA = 31 [json_name = "approvalOA"]; + FinancialForm FinancialForm = 32 [json_name = "financialForm"]; } message WorkFlow { @@ -422,6 +423,132 @@ message SettingResponse { bool Success=2 [json_name = "success"]; } +// oa审批 + +message ApplyTime { + string Date = 1 [json_name = "date"]; + string Hour = 2 [json_name = "hour"]; + string M = 3 [json_name = "m"]; +} + +message ApprovalOA { + uint64 ID=1 [json_name = "ID"]; + uint64 DeletedAt=2 [json_name = "deletedAt"]; + string CreatedAt=3 [json_name = "createdAt"]; + string UpdatedAt=4 [json_name = "updatedAt"]; + uint64 ApprovalID=5 [json_name = "approvalID"]; + LeaveApply LeaveApply = 6 [json_name = "leaveApply"]; + OutWorkApply OutWork = 7 [json_name = "outWork"]; + MakeUpApply MakeUp = 8 [json_name = "makeUp"]; + TurnoverApply Turnover = 9 [json_name = "turnover"]; + OverTimeApply OverTime = 10 [json_name = "overTime"]; + Leave Leave = 11 [json_name = "leave"]; +} + +message LeaveApply { + string UUID = 1 [json_name = "UUID"]; + string StaffUID = 2 [json_name = "staffUID"]; + string StaffNum = 3 [json_name = "staffNum"]; + string StaffName = 4 [json_name = "staffName"]; + string DepartmentUID = 5 [json_name = "departmentUID"]; + string ApplyType = 6 [json_name = "applyType"]; + string ActionTime = 7 [json_name = "actionTime"]; + string ApprovalID = 8 [json_name = "approvalID"]; + int32 Status = 9 [json_name = "status"]; + string Reason = 10 [json_name = "reason"]; + repeated string VerifyFile = 11 [json_name = "verifyFile"]; + repeated CopyUser CopyUsers = 12 [json_name = "copyUsers"]; + repeated ApprovalUser ApprovalUsers = 13 [json_name = "approvalUsers"]; +} + +message OutWorkApply { + string UUID = 1 [json_name = "UUID"]; + string StaffUID = 2 [json_name = "staffUID"]; + string StaffNum = 3 [json_name = "staffNum"]; + string StaffName = 4 [json_name = "staffName"]; + string DepartmentUID = 5 [json_name = "departmentUID"]; + string ApplyType = 6 [json_name = "applyType"]; + string ActionTime = 7 [json_name = "actionTime"]; + string ApprovalID = 8 [json_name = "approvalID"]; + int32 Status = 9 [json_name = "status"]; + repeated ApplyTime ApplyTimes = 10 [json_name = "applyTimes"]; + string Reason = 12 [json_name = "reason"]; + float Hours = 13 [json_name = "hours"]; + string OutWorkAddress = 14 [json_name = "outWorkAddress"]; + string Vehicle = 15 [json_name = "vehicle"]; + repeated CopyUser CopyUsers = 16 [json_name = "copyUsers"]; + repeated ApprovalUser ApprovalUsers = 17 [json_name = "approvalUsers"]; +} + +message MakeUpApply { + string UUID = 1 [json_name = "UUID"]; + string StaffUID = 2 [json_name = "staffUID"]; + string StaffNum = 3 [json_name = "staffNum"]; + string StaffName = 4 [json_name = "staffName"]; + string DepartmentUID = 5 [json_name = "departmentUID"]; + string ApplyType = 6 [json_name = "applyType"]; + string ActionTime = 7 [json_name = "actionTime"]; + string ApprovalID = 8 [json_name = "approvalID"]; + int32 Status = 9 [json_name = "status"]; + repeated ApplyTime ApplyTimes = 10 [json_name = "applyTimes"]; + string Reason = 12 [json_name = "reason"]; + repeated CopyUser CopyUsers = 13 [json_name = "copyUsers"]; + repeated ApprovalUser ApprovalUsers = 14 [json_name = "approvalUsers"]; +} + +message TurnoverApply { + string UUID = 1 [json_name = "UUID"]; + string StaffUID = 2 [json_name = "staffUID"]; + string StaffNum = 3 [json_name = "staffNum"]; + string StaffName = 4 [json_name = "staffName"]; + string DepartmentUID = 5 [json_name = "departmentUID"]; + string ApplyType = 6 [json_name = "applyType"]; + string ActionTime = 7 [json_name = "actionTime"]; + string ApprovalID = 8 [json_name = "approvalID"]; + int32 Status = 9 [json_name = "status"]; + string HandoverUID = 10 [json_name = "handoverUID"]; + string HandoverName = 11 [json_name = "handoverName"]; + repeated ApplyTime ApplyTimes = 12 [json_name = "applyTimes"]; + string Reason = 13 [json_name = "reason"]; + repeated CopyUser CopyUsers = 14 [json_name = "copyUsers"]; + repeated ApprovalUser ApprovalUsers = 15 [json_name = "approvalUsers"]; +} + +message OverTimeApply { + string UUID = 1 [json_name = "UUID"]; + string StaffUID = 2 [json_name = "staffUID"]; + string StaffNum = 3 [json_name = "staffNum"]; + string StaffName = 4 [json_name = "staffName"]; + string DepartmentUID = 5 [json_name = "departmentUID"]; + string ApplyType = 6 [json_name = "applyType"]; + string ActionTime = 7 [json_name = "actionTime"]; + string ApprovalID = 8 [json_name = "approvalID"]; + int32 Status = 9 [json_name = "status"]; + repeated ApplyTime ApplyTimes = 10 [json_name = "applyTimes"]; + string Reason = 12 [json_name = "reason"]; + float Hours = 13 [json_name = "hours"]; + repeated CopyUser CopyUsers = 14 [json_name = "copyUsers"]; + repeated ApprovalUser ApprovalUsers = 15 [json_name = "approvalUsers"]; +} + +message Leave { + string UUID = 1 [json_name = "UUID"]; + string StaffUID = 2 [json_name = "staffUID"]; + string StaffNum = 3 [json_name = "staffNum"]; + string StaffName = 4 [json_name = "staffName"]; + string DepartmentUID = 5 [json_name = "departmentUID"]; + string ApplyType = 6 [json_name = "applyType"]; + string ActionTime = 7 [json_name = "actionTime"]; + string ApprovalID = 8 [json_name = "approvalID"]; + int32 Status = 9 [json_name = "status"]; + repeated ApplyTime ApplyTimes = 10 [json_name = "applyTimes"]; + string Reason = 12 [json_name = "reason"]; + float Hours = 13 [json_name = "hours"]; + float Days = 14 [json_name = "days"]; + repeated CopyUser CopyUsers = 15 [json_name = "copyUsers"]; + repeated ApprovalUser ApprovalUsers = 16 [json_name = "approvalUsers"]; +} + // 财务报表审批 message GetNameRequest { @@ -448,6 +575,7 @@ message FinancialForm { repeated InvoiceInfo InvoiceInfo = 13 [json_name = "invoiceInfo"]; } + message CostInfo { string Description = 1 [json_name = "description"]; string UnitPrice = 2 [json_name = "unitPrice"]; diff --git a/api/approval/approval.validator.pb.go b/api/approval/approval.validator.pb.go index 0bb55c7..1b84048 100644 --- a/api/approval/approval.validator.pb.go +++ b/api/approval/approval.validator.pb.go @@ -263,6 +263,11 @@ func (this *CreateRequest) Validate() error { return github_com_mwitkow_go_proto_validators.FieldError("BundlePayPrice", err) } } + if this.ApprovalOA != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.ApprovalOA); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApprovalOA", err) + } + } if this.FinancialForm != nil { if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.FinancialForm); err != nil { return github_com_mwitkow_go_proto_validators.FieldError("FinancialForm", err) @@ -330,6 +335,179 @@ func (this *DetailSettingRequest) Validate() error { func (this *SettingResponse) Validate() error { return nil } +func (this *ApplyTime) Validate() error { + return nil +} +func (this *ApprovalOA) Validate() error { + if this.LeaveApply != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.LeaveApply); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("LeaveApply", err) + } + } + if this.OutWork != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.OutWork); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("OutWork", err) + } + } + if this.MakeUp != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.MakeUp); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("MakeUp", err) + } + } + if this.Turnover != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Turnover); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Turnover", err) + } + } + if this.OverTime != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.OverTime); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("OverTime", err) + } + } + if this.Leave != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Leave); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Leave", err) + } + } + return nil +} +func (this *LeaveApply) Validate() error { + for _, item := range this.CopyUsers { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("CopyUsers", err) + } + } + } + for _, item := range this.ApprovalUsers { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApprovalUsers", err) + } + } + } + return nil +} +func (this *OutWorkApply) Validate() error { + for _, item := range this.ApplyTimes { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApplyTimes", err) + } + } + } + for _, item := range this.CopyUsers { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("CopyUsers", err) + } + } + } + for _, item := range this.ApprovalUsers { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApprovalUsers", err) + } + } + } + return nil +} +func (this *MakeUpApply) Validate() error { + for _, item := range this.ApplyTimes { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApplyTimes", err) + } + } + } + for _, item := range this.CopyUsers { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("CopyUsers", err) + } + } + } + for _, item := range this.ApprovalUsers { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApprovalUsers", err) + } + } + } + return nil +} +func (this *TurnoverApply) Validate() error { + for _, item := range this.ApplyTimes { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApplyTimes", err) + } + } + } + for _, item := range this.CopyUsers { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("CopyUsers", err) + } + } + } + for _, item := range this.ApprovalUsers { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApprovalUsers", err) + } + } + } + return nil +} +func (this *OverTimeApply) Validate() error { + for _, item := range this.ApplyTimes { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApplyTimes", err) + } + } + } + for _, item := range this.CopyUsers { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("CopyUsers", err) + } + } + } + for _, item := range this.ApprovalUsers { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApprovalUsers", err) + } + } + } + return nil +} +func (this *Leave) Validate() error { + for _, item := range this.ApplyTimes { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApplyTimes", err) + } + } + } + for _, item := range this.CopyUsers { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("CopyUsers", err) + } + } + } + for _, item := range this.ApprovalUsers { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApprovalUsers", err) + } + } + } + return nil +} func (this *GetNameRequest) Validate() error { return nil } diff --git a/pkg/model/approval.go b/pkg/model/approval.go index 3e7fe73..7a193e7 100644 --- a/pkg/model/approval.go +++ b/pkg/model/approval.go @@ -51,6 +51,7 @@ type Approval struct { BundlePayPrice *BundlePayPrice `gorm:"foreignKey:ApprovalID" json:"BundlePayPrice"` //关联的type ExhibitionReward *ExhibitionReward `gorm:"foreignKey:ApprovalID" json:"ExhibitionReward"` //关联的type ApprovalWorkFlows []*ApprovalWorkFlow `gorm:"foreignKey:ApprovalID" json:"ApprovalWorkFlows"` + ApprovalOA *ApprovalOA `gorm:"foreignKey:ApprovalID" json:"oa"` FinancialForm *FinancialForm `gorm:"foreignKey:ApprovalID" json:"financialForm"` } @@ -73,7 +74,10 @@ const ( TypeBundle = "bundle" TypeBundlePayPrice = "bundlePayPrice" TypeArtExhibitionReward = "artExhibitionReward" - TypeFinancialForm = "financialFormApply" + + TypeOa = "oa" // oa 父类 + + TypeFinancialForm = "financialFormApply" ) const ( StatusDoing = 1 @@ -536,7 +540,8 @@ func MyAllWorkApprovals(in *approval.ListRequest) ([]*Approval, int64) { Preload("ExhibitionReward.ApprovalExhibitions"). Preload("ApprovalWorkFlows"). Preload("Exhibition.ApprovalExhibitions"). - Preload("FinancialForm") + Preload("FinancialForm"). + Preload("ApprovalOA") //我未阅读的和我未操作的 DB.Model(&Approval{}).Where(&Approval{Type: in.Type}).Where(&Approval{NowUserId: in.UserID, Status: StatusDoing}).Order("id desc").Select("id").Find(&ids) @@ -574,7 +579,8 @@ func MyApprovalWorkApprovals(in *approval.ListRequest) ([]*Approval, int64) { Preload("ApprovalType.ApprovalTypeGroup"). Preload("ApprovalWorkFlows"). Preload("Exhibition.ApprovalExhibitions"). - Preload("FinancialForm") + Preload("FinancialForm"). + Preload("ApprovalOA") if in.Type != "" { modelObj = modelObj.Where(&Approval{Type: in.Type}) @@ -632,7 +638,8 @@ func MyWorkApprovals(in *approval.ListRequest) ([]*Approval, int64) { Preload("ExhibitionReward.ApprovalExhibitions"). Preload("ApprovalWorkFlows"). Preload("Exhibition.ApprovalExhibitions"). - Preload("FinancialForm") + Preload("FinancialForm"). + Preload("ApprovalOA") if in.Type != "" { modelObj = modelObj.Where(&Approval{Type: in.Type}) @@ -689,7 +696,8 @@ func MySubmitApprovals(in *approval.ListRequest) ([]*Approval, int64) { Preload("ExhibitionReward.ApprovalExhibitions"). Preload("ApprovalType.ApprovalTypeGroup"). Preload("Exhibition.ApprovalExhibitions"). - Preload("FinancialForm") + Preload("FinancialForm"). + Preload("ApprovalOA") if in.Status != 0 { modelObj = modelObj.Where(&Approval{Status: int8(in.Status)}) @@ -722,7 +730,8 @@ func MyReadApprovals(in *approval.ListRequest) ([]*Approval, int64) { Preload("ExhibitionReward.ApprovalExhibitions"). Preload("ApprovalType.ApprovalTypeGroup"). Preload("Exhibition.ApprovalExhibitions"). - Preload("FinancialForm") + Preload("FinancialForm"). + Preload("ApprovalOA") if in.Type != "" { modelObj = modelObj.Where(&Approval{Type: in.Type}) @@ -813,6 +822,10 @@ func getApprovalContentFactory(typeFiled string) (ApprovalContentInterface, erro case TypeFinancialForm: return &FinancialForm{}, nil default: - return &Approval{}, nil + if TypeMap[typeFiled] == TypeOa { + return &ApprovalOA{}, nil + } else { + return nil, errors.New("无法识别的审批类型") + } } } diff --git a/pkg/model/approval_oa.go b/pkg/model/approval_oa.go new file mode 100644 index 0000000..5f93c0c --- /dev/null +++ b/pkg/model/approval_oa.go @@ -0,0 +1,376 @@ +package model + +import ( + "errors" + "github.com/fonchain_enterprise/fonchain-approval/api/approval" + m2 "github.com/fonchain_enterprise/fonchain-approval/pkg/m" + "github.com/jinzhu/copier" + "gorm.io/plugin/soft_delete" + "strconv" + "time" +) + +type ApprovalOA struct { + ID uint64 `gorm:"primaryKey;column:id" json:"id"` // ID + DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at" json:"deletedAt"` // 删除时间 + CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"` // 创建时间 + UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"` // 更新时间 + ApprovalID uint64 `gorm:"column:approval_id" json:"approvalID"` // 申请的id + LeaveApply *LeaveApply `json:"leaveApply" gorm:"column:leave_apply;type:json;comment:假期余额申请"` + OutWork *OutWorkApply `json:"outWork" gorm:"column:out_work;type:json;comment:外勤"` + MakeUp *MakeUpApply `json:"makeUp" gorm:"column:make_up;type:json;comment:加班"` + Turnover *TurnoverApply `json:"turnover" gorm:"column:turnover;type:json;comment:离职"` + OverTime *OverTimeApply `json:"overTime" gorm:"column:over_time;type:json;comment:加班"` + Leave *Leave `json:"leave" gorm:"column:leave;type:json;comment:请假"` +} + +// LeaveApply +// 假期额度申请 +type LeaveApply struct { + UUID string `json:"UUID" gorm:"column:uuid,type:varchar(255),primaryKey"` + StaffUID string `json:"staffUID" gorm:"column:staff_uid;type:varchar(255);comment:员工UID"` // 员工UID + StaffNum string `json:"staffNum" gorm:"column:staff_num;type:varchar(255);comment:员工编号"` // 员工编号 + StaffName string `json:"staffName" gorm:"column:staff_name;type:varchar(255);comment:员工姓名"` // 员工姓名 + DepartmentUID string `json:"departmentUID" gorm:"column:department_uid;type:text;comment:部门UID"` // 部门UID + ApplyType string `json:"applyType" gorm:"column:apply_type;type:varchar(255);comment:审批|请假类型"` + ActionTime string `json:"actionTime" gorm:"column:action_time;type:varchar(255);comment:操作|申请时间"` + ApprovalID string `json:"approvalID" gorm:"column:approval_id;type:varchar(255);comment:审批系统中的approvalID"` + Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:理由"` + Status int32 `json:"status" gorm:"column:status;type:int;comment:状态(目前和审批系统状态同步)"` + VerifyFile VerifyFiles `json:"verifyFile" gorm:"column:verify_file;type:json;comment:证明文件(图片|pdf)"` + ApprovalUsers ApprovalUsers `json:"approvalUsers" gorm:"column:approval_users;type:json;comment:审批人"` + CopyUsers CopyUsers `json:"copyUsers" gorm:"column:copy_users;type:json;comment:抄送人"` +} + +// OutWorkApply +// 外勤申请 +type OutWorkApply struct { + UUID string `json:"UUID" gorm:"column:uuid,type:varchar(255),primaryKey"` + StaffUID string `json:"staffUID" gorm:"column:staff_uid;type:varchar(255);comment:员工UID"` // 员工UID + StaffNum string `json:"staffNum" gorm:"column:staff_num;type:varchar(255);comment:员工编号"` // 员工编号 + StaffName string `json:"staffName" gorm:"column:staff_name;type:varchar(255);comment:员工姓名"` // 员工姓名 + DepartmentUID string `json:"departmentUID" gorm:"column:department_uid;type:text;comment:部门UID"` // 部门UID + ApplyType string `json:"applyType" gorm:"column:apply_type;type:varchar(255);comment:审批|请假类型"` + ActionTime string `json:"actionTime" gorm:"column:action_time;type:varchar(255);comment:操作|申请时间"` + ApplyTimes ApplyTimes `json:"applyTimes" gorm:"column:apply_times;type:json;comment:时间"` + Hours float32 `json:"hours" gorm:"column:hours;type:decimal(10,2);comment:时长(小时)"` + OutWorkAddress string `json:"outWorkAddress" gorm:"column:out_work_address;type:varchar(255);comment:外勤地址"` + Vehicle string `json:"vehicle" gorm:"column:vehicle;type:varchar(255);comment:交通工具"` + Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:理由"` + ApprovalID string `json:"approvalID" gorm:"column:approval_id;type:varchar(255);comment:审批系统中的approvalID"` + Status int32 `json:"status" gorm:"column:status;type:int;comment:状态(目前和审批系统状态同步)"` + ApprovalUsers ApprovalUsers `json:"approvalUsers" gorm:"column:approval_users;type:json;comment:审批人"` + CopyUsers CopyUsers `json:"copyUsers" gorm:"column:copy_users;type:json;comment:抄送人"` +} + +// MakeUpApply +// 补卡申请 +type MakeUpApply struct { + UUID string `json:"UUID" gorm:"column:uuid,type:varchar(255),primaryKey"` + StaffUID string `json:"staffUID" gorm:"column:staff_uid;type:varchar(255);comment:员工UID"` // 员工UID + StaffNum string `json:"staffNum" gorm:"column:staff_num;type:varchar(255);comment:员工编号"` // 员工编号 + StaffName string `json:"staffName" gorm:"column:staff_name;type:varchar(255);comment:员工姓名"` // 员工姓名 + DepartmentUID string `json:"departmentUID" gorm:"column:department_uid;type:text;comment:部门UID"` // 部门UID + ApplyType string `json:"applyType" gorm:"column:apply_type;type:varchar(255);comment:审批|请假类型"` + ActionTime string `json:"actionTime" gorm:"column:action_time;type:varchar(255);comment:操作|申请时间"` + ApplyTimes ApplyTimes `json:"applyTimes" gorm:"column:apply_times;type:json;comment:时间"` + Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:理由"` + ApprovalID string `json:"approvalID" gorm:"column:approval_id;type:varchar(255);comment:审批系统中的approvalID"` + Status int32 `json:"status" gorm:"column:status;type:int;comment:状态(目前和审批系统状态同步)"` + ApprovalUsers ApprovalUsers `json:"approvalUsers" gorm:"column:approval_users;type:json;comment:审批人"` + CopyUsers CopyUsers `json:"copyUsers" gorm:"column:copy_users;type:json;comment:抄送人"` +} + +// TurnoverApply +// 离职申请 +type TurnoverApply struct { + UUID string `json:"UUID" gorm:"column:uuid,type:varchar(255),primaryKey"` + StaffUID string `json:"staffUID" gorm:"column:staff_uid;type:varchar(255);comment:员工UID"` // 员工UID + StaffNum string `json:"staffNum" gorm:"column:staff_num;type:varchar(255);comment:员工编号"` // 员工编号 + StaffName string `json:"staffName" gorm:"column:staff_name;type:varchar(255);comment:员工姓名"` // 员工姓名 + DepartmentUID string `json:"departmentUID" gorm:"column:department_uid;type:text;comment:部门UID"` // 部门UID + ApplyType string `json:"applyType" gorm:"column:apply_type;type:varchar(255);comment:审批|请假类型"` + ActionTime string `json:"actionTime" gorm:"column:action_time;type:varchar(255);comment:操作|申请时间"` + Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:理由"` + HandoverUID string `json:"handoverUID" gorm:"column:handover_uid;type:varchar(255);comment:交接人"` + HandoverName string `json:"handoverName" gorm:"column:handover_name;type:varchar(255);comment:交接人姓名"` + ApplyTimes ApplyTimes `json:"applyTimes" gorm:"column:apply_times;type:json;comment:时间"` + ApprovalID string `json:"approvalID" gorm:"column:approval_id;type:varchar(255);comment:审批系统中的approvalID"` + Status int32 `json:"status" gorm:"column:status;type:int;comment:状态(目前和审批系统状态同步)"` + ApprovalUsers ApprovalUsers `json:"approvalUsers" gorm:"column:approval_users;type:json;comment:审批人"` + CopyUsers CopyUsers `json:"copyUsers" gorm:"column:copy_users;type:json;comment:抄送人"` +} + +// OverTimeApply +// 加班申请 +type OverTimeApply struct { + UUID string `json:"UUID" gorm:"column:uuid,type:varchar(255),primaryKey"` + StaffUID string `json:"staffUID" gorm:"column:staff_uid;type:varchar(255);comment:员工UID"` // 员工UID + StaffNum string `json:"staffNum" gorm:"column:staff_num;type:varchar(255);comment:员工编号"` // 员工编号 + StaffName string `json:"staffName" gorm:"column:staff_name;type:varchar(255);comment:员工姓名"` // 员工姓名 + DepartmentUID string `json:"departmentUID" gorm:"column:department_uid;type:text;comment:部门UID"` // 部门UID + ApplyType string `json:"applyType" gorm:"column:apply_type;type:varchar(255);comment:审批|请假类型"` + ApprovalID string `json:"approvalID" gorm:"column:approval_id;type:varchar(255);comment:审批系统中的approvalID"` + ActionTime string `json:"actionTime" gorm:"column:action_time;type:varchar(255);comment:操作|申请时间"` + ApplyTimes ApplyTimes `json:"applyTimes" gorm:"column:apply_times;type:json;comment:时间"` + Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:理由"` + Hours float32 `json:"hours" gorm:"column:hours;type:decimal(10,2);comment:时长(小时)"` + Status int32 `json:"status" gorm:"column:status;type:int;comment:状态(目前和审批系统状态同步)"` + ApprovalUsers ApprovalUsers `json:"approvalUsers" gorm:"column:approval_users;type:json;comment:审批人"` + CopyUsers CopyUsers `json:"copyUsers" gorm:"column:copy_users;type:json;comment:抄送人"` +} + +// Leave +// 请假 +type Leave struct { + UUID string `json:"UUID" gorm:"column:uuid,type:varchar(255),primaryKey"` + StaffUID string `json:"staffUID" gorm:"column:staff_uid;type:varchar(255);comment:员工UID"` // 员工UID + StaffNum string `json:"staffNum" gorm:"column:staff_num;type:varchar(255);comment:员工编号"` // 员工编号 + StaffName string `json:"staffName" gorm:"column:staff_name;type:varchar(255);comment:员工姓名"` // 员工姓名 + DepartmentUID string `json:"departmentUID" gorm:"column:department_uid;type:text;comment:部门UID"` // 部门UID + ApplyType string `json:"applyType" gorm:"column:apply_type;type:varchar(255);comment:审批|请假类型"` + ActionTime string `json:"actionTime" gorm:"column:action_time;type:varchar(255);comment:操作|申请时间"` + ApprovalID string `json:"approvalID" gorm:"column:approval_id;type:varchar(255);comment:审批系统中的approvalID"` + ApplyTimes ApplyTimes `json:"applyTimes" gorm:"column:apply_times;type:json;comment:时间"` + Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:理由"` + Hours float32 `json:"hours" gorm:"column:hours;type:decimal(10,2);comment:时长(小时)"` + Days float32 `json:"days" gorm:"column:days;type:decimal(10,2);comment:时长(天)"` + Status int32 `json:"status" gorm:"column:status;type:int;comment:状态(目前和审批系统状态同步)"` + ApprovalUsers ApprovalUsers `json:"approvalUsers" gorm:"column:approval_users;type:json;comment:审批人"` + CopyUsers CopyUsers `json:"copyUsers" gorm:"column:copy_users;type:json;comment:抄送人"` +} + +type VerifyFiles []string + +type ApplyTime struct { + Date string `json:"date"` // 日期 2023-05-08 + Hour string `json:"hour"` // 时间 09:00 + M string `json:"m"` // 上午|下午 +} + +type ApplyTimes []ApplyTime + +var sonMap = map[string]string{ + "leave": "leave", // 事假 + "sick": "leave", // 病假 + "annualLeave": "leave", // 年假 + "dayOff": "leave", // 调休 + "maritalLeave": "leave", // 婚假 + "matingCheckLeave": "leave", // 孕检假 + "maternityLeave": "leave", // 产假 + "paternityLeave": "leave", // 陪产假 + "parentalLeave": "leave", // 育儿假 + "nursingLeave": "leave", // 独生子女护理假 + "funeralLeave": "leave", // 丧假 + + "makeUp": "makeUp", // 补卡 + "overTime": "overTime", // 加班 + "outWork": "outWork", // 外勤 + "turnover": "turnover", // 离职 + + "annualLeaveApply": "leaveApply", // 年假申请 + "maritalLeaveApply": "leaveApply", // 婚假申请 + "matingCheckLeaveApply": "leaveApply", // 孕检假申请 + "maternityLeaveApply": "leaveApply", // 产假申请 + "paternityLeaveApply": "leaveApply", // 陪产假申请 + "parentalLeaveApply": "leaveApply", // 育儿假申请 + "nursingLeaveApply": "leaveApply", // 独生子女护理假申请 +} + +// TableName get sql table name.获取数据库表名 +func (oa *ApprovalOA) TableName() string { + return "approval_oa" +} + +func (oa *ApprovalOA) GetApproval(id uint64) (*Approval, error) { + + var entity *Approval + if err := DB. + Preload("ApprovalWorkFlows"). + Preload("ApprovalType"). + Preload("ApprovalOA"). + First(&entity, id).Error; err != nil { + return entity, err + } + + return entity, nil +} + +func (oa *ApprovalOA) SaveApprovalContent(in *approval.CreateRequest, a *Approval) error { + + if err := oa.copyOAToModel(in, a); err != nil { + return err + } + + return DB.Create(&oa).Error +} + +func (oa *ApprovalOA) copyOAToModel(in *approval.CreateRequest, a *Approval) error { + copier.CopyWithOption(&oa, in.ApprovalOA, copier.Option{DeepCopy: true}) + oa.ApprovalID = a.ID + + if err := oa.addOtherInfoToModel(in, a); err != nil { + return err + } + + return nil +} + +func (oa *ApprovalOA) addOtherInfoToModel(in *approval.CreateRequest, a *Approval) error { + if v, ok := sonMap[a.ApprovalType.KeyWord]; ok { + switch v { + case "leave": + oa.Leave.ApprovalUsers = a.ApprovalUsers + oa.Leave.CopyUsers = a.CopyUsers + if oa.Leave.ApplyType != "" { + oa.Leave.ApplyType = a.ApprovalType.KeyWord + } + oa.Leave.ApprovalID = strconv.FormatUint(a.ID, 10) + oa.Leave.Status = int32(a.Status) + + applyTimes := make([]ApplyTime, 0) + for i := 0; i < len(in.ApprovalOA.Leave.ApplyTimes); i++ { + applyTimes = append(applyTimes, ApplyTime{ + Date: in.ApprovalOA.Leave.ApplyTimes[i].Date, + Hour: in.ApprovalOA.Leave.ApplyTimes[i].Hour, + M: in.ApprovalOA.Leave.ApplyTimes[i].M, + }) + } + oa.Leave.ApplyTimes = applyTimes + case "makeUp": + oa.MakeUp.ApprovalUsers = a.ApprovalUsers + oa.MakeUp.CopyUsers = a.CopyUsers + oa.MakeUp.ApplyType = a.ApprovalType.KeyWord + oa.MakeUp.ApprovalID = strconv.FormatUint(a.ID, 10) + oa.MakeUp.Status = int32(a.Status) + + applyTimes := make([]ApplyTime, 0) + for i := 0; i < len(in.ApprovalOA.MakeUp.ApplyTimes); i++ { + applyTimes = append(applyTimes, ApplyTime{ + Date: in.ApprovalOA.MakeUp.ApplyTimes[i].Date, + Hour: in.ApprovalOA.MakeUp.ApplyTimes[i].Hour, + M: in.ApprovalOA.MakeUp.ApplyTimes[i].M, + }) + } + oa.MakeUp.ApplyTimes = applyTimes + case "overTime": + oa.OverTime.ApprovalUsers = a.ApprovalUsers + oa.OverTime.CopyUsers = a.CopyUsers + oa.OverTime.ApplyType = a.ApprovalType.KeyWord + oa.OverTime.ApprovalID = strconv.FormatUint(a.ID, 10) + oa.OverTime.Status = int32(a.Status) + + applyTimes := make([]ApplyTime, 0) + for i := 0; i < len(in.ApprovalOA.OverTime.ApplyTimes); i++ { + applyTimes = append(applyTimes, ApplyTime{ + Date: in.ApprovalOA.OverTime.ApplyTimes[i].Date, + Hour: in.ApprovalOA.OverTime.ApplyTimes[i].Hour, + M: in.ApprovalOA.OverTime.ApplyTimes[i].M, + }) + } + oa.OverTime.ApplyTimes = applyTimes + case "outWork": + oa.OutWork.ApprovalUsers = a.ApprovalUsers + oa.OutWork.CopyUsers = a.CopyUsers + oa.OutWork.ApplyType = a.ApprovalType.KeyWord + oa.OutWork.ApprovalID = strconv.FormatUint(a.ID, 10) + oa.OutWork.Status = int32(a.Status) + + applyTimes := make([]ApplyTime, 0) + for i := 0; i < len(in.ApprovalOA.OutWork.ApplyTimes); i++ { + applyTimes = append(applyTimes, ApplyTime{ + Date: in.ApprovalOA.OutWork.ApplyTimes[i].Date, + Hour: in.ApprovalOA.OutWork.ApplyTimes[i].Hour, + M: in.ApprovalOA.OutWork.ApplyTimes[i].M, + }) + } + oa.OutWork.ApplyTimes = applyTimes + case "turnover": + oa.Turnover.ApprovalUsers = a.ApprovalUsers + oa.Turnover.CopyUsers = a.CopyUsers + oa.Turnover.ApplyType = a.ApprovalType.KeyWord + oa.Turnover.ApprovalID = strconv.FormatUint(a.ID, 10) + oa.Turnover.Status = int32(a.Status) + + applyTimes := make([]ApplyTime, 0) + for i := 0; i < len(in.ApprovalOA.Turnover.ApplyTimes); i++ { + applyTimes = append(applyTimes, ApplyTime{ + Date: in.ApprovalOA.Turnover.ApplyTimes[i].Date, + Hour: in.ApprovalOA.Turnover.ApplyTimes[i].Hour, + M: in.ApprovalOA.Turnover.ApplyTimes[i].M, + }) + } + oa.Turnover.ApplyTimes = applyTimes + case "leaveApply": + oa.LeaveApply.ApprovalUsers = a.ApprovalUsers + oa.LeaveApply.CopyUsers = a.CopyUsers + oa.LeaveApply.ApplyType = a.ApprovalType.KeyWord + oa.LeaveApply.ApprovalID = strconv.FormatUint(a.ID, 10) + oa.LeaveApply.Status = int32(a.Status) + default: + return errors.New("未找到相关审批类型") + } + } + return nil +} + +func (oa *ApprovalOA) UpdateApprovalContent(in *approval.CreateRequest, a *Approval) error { + + var entity *ApprovalOA + + if err := DB.Where(&ApprovalOA{ApprovalID: a.ID}).First(&entity).Error; err != nil { + return errors.New(m2.ErrorNotFound) + } + + oa.ID = entity.ID + + if err := oa.copyOAToModel(in, a); err != nil { + return err + } + + return DB.Model(&oa).Updates(oa).Error +} + +func (oa *ApprovalOA) BuildResContent(a *Approval, request *approval.CreateRequest) { + if err := oa.copyOAToRpc(a, request); err != nil { + return + } +} + +func (oa *ApprovalOA) copyOAToRpc(a *Approval, in *approval.CreateRequest) error { + copier.CopyWithOption(&in.ApprovalOA, a, copier.Option{DeepCopy: true}) + + if err := oa.addOtherInfoToRpc(a, in); err != nil { + return err + } + + return nil +} + +func (oa *ApprovalOA) addOtherInfoToRpc(a *Approval, in *approval.CreateRequest) error { + if oa.Leave != nil { + copier.CopyWithOption(&a.ApprovalOA.Leave.ApplyTimes, in.ApprovalOA.Leave.ApplyTimes, copier.Option{DeepCopy: true}) + } + + if oa.MakeUp != nil { + copier.CopyWithOption(&a.ApprovalOA.MakeUp.ApplyTimes, in.ApprovalOA.MakeUp.ApplyTimes, copier.Option{DeepCopy: true}) + } + + if oa.Turnover != nil { + copier.CopyWithOption(&a.ApprovalOA.Turnover.ApplyTimes, in.ApprovalOA.Turnover.ApplyTimes, copier.Option{DeepCopy: true}) + } + + if oa.OverTime != nil { + copier.CopyWithOption(&a.ApprovalOA.OverTime.ApplyTimes, in.ApprovalOA.OverTime.ApplyTimes, copier.Option{DeepCopy: true}) + } + + if oa.OutWork != nil { + copier.CopyWithOption(&a.ApprovalOA.OutWork.ApplyTimes, in.ApprovalOA.OutWork.ApplyTimes, copier.Option{DeepCopy: true}) + } + + return nil +} + +func (oa *ApprovalOA) DeleteApproval(p *Approval) error { + return DB.Where(&ApprovalOA{ApprovalID: p.ID}).Delete(&ApprovalOA{}).Error +} diff --git a/pkg/model/approval_type.go b/pkg/model/approval_type.go index 089e8d9..1cec001 100644 --- a/pkg/model/approval_type.go +++ b/pkg/model/approval_type.go @@ -40,23 +40,33 @@ var TypeMap = map[string]string{ TypeBundlePayPrice: "", TypeArtExhibitionReward: "", - "leave": "", // 事假 - "sick": "", // 病假 - "annualLeave": "", // 年假 - "dayOff": "", // 调休 - "maritalLeave": "", // 婚假 - "matingCheckLeave": "", // 孕检假 - "maternityLeave": "", // 产假 - "paternityLeave": "", // 陪产假 - "parentalLeave": "", // 育儿假 - "nursingLeave": "", // 独生子女护理假 - "funeralLeave": "", // 丧假 - "makeUp": "", // 补卡 - "overTime": "", // 加班 - "outWork": "", // 外勤 - "turnover": "", // 离职 + "leave": "oa", // 事假 + "sick": "oa", // 病假 + "annualLeave": "oa", // 年假 + "dayOff": "oa", // 调休 + "maritalLeave": "oa", // 婚假 + "matingCheckLeave": "oa", // 孕检假 + "maternityLeave": "oa", // 产假 + "paternityLeave": "oa", // 陪产假 + "parentalLeave": "oa", // 育儿假 + "nursingLeave": "oa", // 独生子女护理假 + "funeralLeave": "oa", // 丧假 + + "makeUp": "oa", // 补卡 + "overTime": "oa", // 加班 + "outWork": "oa", // 外勤 + "turnover": "oa", // 离职 + + "annualLeaveApply": "oa", // 年假申请 + "maritalLeaveApply": "oa", // 婚假申请 + "matingCheckLeaveApply": "oa", // 孕检假申请 + "maternityLeaveApply": "oa", // 产假申请 + "paternityLeaveApply": "oa", // 陪产假申请 + "parentalLeaveApply": "oa", // 育儿假申请 + "nursingLeaveApply": "oa", // 独生子女护理假申请 "financialFormApply": "", // 财务表单审批 + } var keyWordMap = map[string]string{ @@ -67,22 +77,34 @@ var keyWordMap = map[string]string{ "画展审批": "show", "画展包付款单申请": TypeBundlePayPrice, "画作润格审批": TypeArtExhibitionReward, - "事假": "leave", // 事假 - "病假": "sick", // 病假 - "年假": "annualLeave", // 年假 - "调休": "dayOff", // 调休 - "婚假": "maritalLeave", // 婚假 - "孕检假": "matingCheckLeave", // 孕检假 - "产假": "maternityLeave", // 产假 - "陪产假": "paternityLeave", // 陪产假 - "育儿假": "parentalLeave", // 育儿假 - "独生子女护理假": "nursingLeave", // 独生子女护理假 - "丧假": "funeralLeave", // 丧假 - "补卡": "makeUp", // 补卡 - "加班": "overTime", // 加班 - "外勤": "outWork", // 外勤 - "离职": "turnover", // 离职 - "财务表单审批": "financialFormApply", // 财务表单审批 + + "事假": "leave", // 事假 + "病假": "sick", // 病假 + "年假": "annualLeave", // 年假 + "调休": "dayOff", // 调休 + "婚假": "maritalLeave", // 婚假 + "孕检假": "matingCheckLeave", // 孕检假 + "产假": "maternityLeave", // 产假 + "陪产假": "paternityLeave", // 陪产假 + "育儿假": "parentalLeave", // 育儿假 + "独生子女护理假": "nursingLeave", // 独生子女护理假 + "丧假": "funeralLeave", // 丧假 + + "补卡": "makeUp", // 补卡 + "加班": "overtime", // 加班 + "外勤": "outwork", // 外勤 + "离职": "turnover", // 离职 + + "年假申请": "annualLeaveApply", // 年假申请 + "婚假申请": "maritalLeaveApply", // 婚假申请 + "孕检假申请": "matingCheckLeaveApply", // 孕检假申请 + "产假申请": "maternityLeaveApply", // 产假申请 + "陪产假申请": "paternityLeaveApply", // 陪产假申请 + "育儿假申请": "parentalLeaveApply", // 育儿假申请 + "独生子女护理假申请": "nursingLeaveApply", // 独生子女护理假申请 + + "财务表单审批": "financialFormApply", // 财务表单审批 + } func DataExist(domain, keyWork, title string) bool { @@ -141,6 +163,10 @@ func IsSystemKeyWork(title string) bool { return isOk } +// TODO +// 增加 逻辑 取出 value值 判断是否为 "" +// 为 "" 则为 系统 +// 不为 "" 则为 自定义中特殊类型 func IsSystemType(title string) bool { _, isOk := TypeMap[title] return isOk diff --git a/pkg/model/migration.go b/pkg/model/migration.go index 5c3abe9..e7bfcc1 100644 --- a/pkg/model/migration.go +++ b/pkg/model/migration.go @@ -14,7 +14,9 @@ func migration() { addTable(&ApprovalReward{}) addTable(&FinancialFormSetting{}) // 财务报表审批 设置信息 - addTable(&FinancialForm{}) // 财务报表审批 设置信息 + addTable(&FinancialForm{}) // 财务报表审批 + + addTable(&ApprovalOA{}) // OA //增加字段 addColumn(&ApprovalType{}, "is_normal")