diff --git a/api/approval/approval.pb.go b/api/approval/approval.pb.go index 5d47042..48ef5da 100644 --- a/api/approval/approval.pb.go +++ b/api/approval/approval.pb.go @@ -2641,6 +2641,7 @@ 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"` + ApprovalOA *ApprovalOA `protobuf:"bytes,31,opt,name=ApprovalOA,proto3" json:"ApprovalOA,omitempty"` } func (x *CreateRequest) Reset() { @@ -2871,6 +2872,13 @@ func (x *CreateRequest) GetBundlePayPrice() *BundlePayPrice { return nil } +func (x *CreateRequest) GetApprovalOA() *ApprovalOA { + if x != nil { + return x.ApprovalOA + } + return nil +} + type WorkFlow struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3762,6 +3770,1087 @@ func (x *SettingResponse) GetSuccess() bool { return false } +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[48] + 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[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 ApprovalOA.ProtoReflect.Descriptor instead. +func (*ApprovalOA) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{48} +} + +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[49] + 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[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 LeaveApply.ProtoReflect.Descriptor instead. +func (*LeaveApply) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{49} +} + +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"` + BeginTime string `protobuf:"bytes,10,opt,name=BeginTime,json=beginTime,proto3" json:"BeginTime,omitempty"` + EndTime string `protobuf:"bytes,11,opt,name=EndTime,json=endTime,proto3" json:"EndTime,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[50] + 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[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 OutWorkApply.ProtoReflect.Descriptor instead. +func (*OutWorkApply) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{50} +} + +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) GetBeginTime() string { + if x != nil { + return x.BeginTime + } + return "" +} + +func (x *OutWorkApply) GetEndTime() string { + if x != nil { + return x.EndTime + } + return "" +} + +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"` + MakeUpDate string `protobuf:"bytes,10,opt,name=MakeUpDate,json=makeUpDate,proto3" json:"MakeUpDate,omitempty"` + MakeUpTime string `protobuf:"bytes,11,opt,name=MakeUpTime,json=makeUpTime,proto3" json:"MakeUpTime,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[51] + 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[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 MakeUpApply.ProtoReflect.Descriptor instead. +func (*MakeUpApply) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{51} +} + +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) GetMakeUpDate() string { + if x != nil { + return x.MakeUpDate + } + return "" +} + +func (x *MakeUpApply) GetMakeUpTime() string { + if x != nil { + return x.MakeUpTime + } + return "" +} + +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"` + TurnoverTime string `protobuf:"bytes,12,opt,name=TurnoverTime,json=turnoverTime,proto3" json:"TurnoverTime,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[52] + 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[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 TurnoverApply.ProtoReflect.Descriptor instead. +func (*TurnoverApply) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{52} +} + +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) GetTurnoverTime() string { + if x != nil { + return x.TurnoverTime + } + return "" +} + +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"` + BeginTime string `protobuf:"bytes,10,opt,name=BeginTime,json=beginTime,proto3" json:"BeginTime,omitempty"` + EndTime string `protobuf:"bytes,11,opt,name=EndTime,json=endTime,proto3" json:"EndTime,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[53] + 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[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 OverTimeApply.ProtoReflect.Descriptor instead. +func (*OverTimeApply) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{53} +} + +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 "" +} + +func (x *OverTimeApply) GetApplyType() string { + if x != nil { + return x.ApplyType + } + return "" +} + +func (x *OverTimeApply) GetActionTime() string { + if x != nil { + return x.ActionTime + } + return "" +} + +func (x *OverTimeApply) GetApprovalID() string { + if x != nil { + return x.ApprovalID + } + return "" +} + +func (x *OverTimeApply) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *OverTimeApply) GetBeginTime() string { + if x != nil { + return x.BeginTime + } + return "" +} + +func (x *OverTimeApply) GetEndTime() string { + if x != nil { + return x.EndTime + } + return "" +} + +func (x *OverTimeApply) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *OverTimeApply) GetHours() float32 { + if x != nil { + return x.Hours + } + return 0 +} + +func (x *OverTimeApply) GetCopyUsers() []*CopyUser { + if x != nil { + return x.CopyUsers + } + return nil +} + +func (x *OverTimeApply) GetApprovalUsers() []*ApprovalUser { + if x != nil { + return x.ApprovalUsers + } + return nil +} + +type Leave 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"` + BeginTime string `protobuf:"bytes,10,opt,name=BeginTime,json=beginTime,proto3" json:"BeginTime,omitempty"` + EndTime string `protobuf:"bytes,11,opt,name=EndTime,json=endTime,proto3" json:"EndTime,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[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Leave) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Leave) ProtoMessage() {} + +func (x *Leave) 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 Leave.ProtoReflect.Descriptor instead. +func (*Leave) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{54} +} + +func (x *Leave) GetUUID() string { + if x != nil { + return x.UUID + } + return "" +} + +func (x *Leave) GetStaffUID() string { + if x != nil { + return x.StaffUID + } + return "" +} + +func (x *Leave) GetStaffNum() string { + if x != nil { + return x.StaffNum + } + return "" +} + +func (x *Leave) GetStaffName() string { + if x != nil { + return x.StaffName + } + return "" +} + +func (x *Leave) GetDepartmentUID() string { + if x != nil { + return x.DepartmentUID + } + return "" +} + +func (x *Leave) GetApplyType() string { + if x != nil { + return x.ApplyType + } + return "" +} + +func (x *Leave) GetActionTime() string { + if x != nil { + return x.ActionTime + } + return "" +} + +func (x *Leave) GetApprovalID() string { + if x != nil { + return x.ApprovalID + } + return "" +} + +func (x *Leave) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *Leave) GetBeginTime() string { + if x != nil { + return x.BeginTime + } + return "" +} + +func (x *Leave) GetEndTime() string { + if x != nil { + return x.EndTime + } + return "" +} + +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 *Leave) GetDays() float32 { + if x != nil { + return x.Days + } + 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 +} + var File_api_approval_approval_proto protoreflect.FileDescriptor var file_api_approval_approval_proto_rawDesc = []byte{ @@ -4102,7 +5191,7 @@ var file_api_approval_approval_proto_rawDesc = []byte{ 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 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, 0xfd, 0x07, 0x0a, 0x0d, 0x43, + 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa9, 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, @@ -4166,205 +5255,423 @@ var file_api_approval_approval_proto_rawDesc = []byte{ 0x6c, 0x65, 0x50, 0x61, 0x79, 0x50, 0x72, 0x69, 0x63, 0x65, 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, 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, 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, 0x32, 0xaf, - 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, + 0x6c, 0x65, 0x50, 0x61, 0x79, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x2a, 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, 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, + 0x61, 0x6c, 0x4f, 0x41, 0x52, 0x00, 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, 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, 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, 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, 0xac, 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, + 0x1c, 0x0a, 0x09, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 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, 0xdb, 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, 0x1e, 0x0a, + 0x0a, 0x4d, 0x61, 0x6b, 0x65, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x6b, 0x65, 0x55, 0x70, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x4d, 0x61, 0x6b, 0x65, 0x55, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x6b, 0x65, 0x55, 0x70, 0x54, 0x69, 0x6d, 0x65, 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, 0x87, 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, 0x22, 0x0a, 0x0c, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x75, 0x72, 0x6e, 0x6f, + 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 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, + 0xeb, 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, 0x1c, 0x0a, 0x09, 0x42, 0x65, 0x67, 0x69, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x65, 0x67, 0x69, + 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 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, 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, 0xf7, 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, 0x1c, 0x0a, + 0x09, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x45, + 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, + 0x64, 0x54, 0x69, 0x6d, 0x65, 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, 0x32, 0xaf, 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, 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, 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, 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, + 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, 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, + 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, 0x1a, 0x19, 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, - 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, 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, - 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x3b, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 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, 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, 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x3b, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4379,7 +5686,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, 48) +var file_api_approval_approval_proto_msgTypes = make([]protoimpl.MessageInfo, 55) var file_api_approval_approval_proto_goTypes = []interface{}{ (*CommonResponse)(nil), // 0: approval.CommonResponse (*ChangeBundlePayRequest)(nil), // 1: approval.ChangeBundlePayRequest @@ -4429,6 +5736,13 @@ var file_api_approval_approval_proto_goTypes = []interface{}{ (*SettingRequest)(nil), // 45: approval.SettingRequest (*DetailSettingRequest)(nil), // 46: approval.DetailSettingRequest (*SettingResponse)(nil), // 47: approval.SettingResponse + (*ApprovalOA)(nil), // 48: approval.ApprovalOA + (*LeaveApply)(nil), // 49: approval.LeaveApply + (*OutWorkApply)(nil), // 50: approval.OutWorkApply + (*MakeUpApply)(nil), // 51: approval.MakeUpApply + (*TurnoverApply)(nil), // 52: approval.TurnoverApply + (*OverTimeApply)(nil), // 53: approval.OverTimeApply + (*Leave)(nil), // 54: approval.Leave } var file_api_approval_approval_proto_depIdxs = []int32{ 4, // 0: approval.CreateTypeRequest.KeyInfos:type_name -> approval.KeyInfo @@ -4452,58 +5766,77 @@ 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 - 43, // 21: approval.SettingRequest.CopyUsers:type_name -> approval.CopyUser - 44, // 22: approval.SettingRequest.ApprovalUsers:type_name -> approval.ApprovalUser - 4, // 23: approval.SettingRequest.CustomizeInfo:type_name -> approval.KeyInfo - 34, // 24: approval.Approval.Create:input_type -> approval.CreateRequest - 7, // 25: approval.Approval.UsedNumByUser:input_type -> approval.UsedNumByUserRequest - 5, // 26: approval.Approval.UpdateExhibitionApplyID:input_type -> approval.UpdateEhApplyIDRequest - 36, // 27: approval.Approval.Detail:input_type -> approval.DetailRequest - 34, // 28: approval.Approval.Update:input_type -> approval.CreateRequest - 37, // 29: approval.Approval.Remove:input_type -> approval.RemoveRequest - 19, // 30: approval.Approval.MyWork:input_type -> approval.ListRequest - 19, // 31: approval.Approval.MySubmit:input_type -> approval.ListRequest - 9, // 32: approval.Approval.NowLevelByInfo:input_type -> approval.NowLevelByInfoRequest - 22, // 33: approval.Approval.Information:input_type -> approval.InformationRequest - 21, // 34: approval.Approval.Viewed:input_type -> approval.ViewedRequest - 17, // 35: approval.Approval.SetStatus:input_type -> approval.StatusRequest - 46, // 36: approval.Approval.DetailSetting:input_type -> approval.DetailSettingRequest - 45, // 37: approval.Approval.UpdateSetting:input_type -> approval.SettingRequest - 2, // 38: approval.Approval.IsExistPayRight:input_type -> approval.IsExistPayRightRequest - 1, // 39: approval.Approval.ChangeBundlePay:input_type -> approval.ChangeBundlePayRequest - 12, // 40: approval.Approval.CreateType:input_type -> approval.CreateTypeRequest - 13, // 41: approval.Approval.DetailType:input_type -> approval.TypeResponse - 12, // 42: approval.Approval.UpdateType:input_type -> approval.CreateTypeRequest - 11, // 43: approval.Approval.AllType:input_type -> approval.CommonRequest - 37, // 44: approval.Approval.RemoveType:input_type -> approval.RemoveRequest - 11, // 45: approval.Approval.AllGroup:input_type -> approval.CommonRequest - 38, // 46: approval.Approval.Create:output_type -> approval.ApprovalResponse - 8, // 47: approval.Approval.UsedNumByUser:output_type -> approval.UsedNumByUserResponse - 6, // 48: approval.Approval.UpdateExhibitionApplyID:output_type -> approval.UpdateEhApplyIDResponse - 34, // 49: approval.Approval.Detail:output_type -> approval.CreateRequest - 38, // 50: approval.Approval.Update:output_type -> approval.ApprovalResponse - 39, // 51: approval.Approval.Remove:output_type -> approval.RemoveResponse - 20, // 52: approval.Approval.MyWork:output_type -> approval.ListResponse - 20, // 53: approval.Approval.MySubmit:output_type -> approval.ListResponse - 10, // 54: approval.Approval.NowLevelByInfo:output_type -> approval.WorkFlowResponse - 24, // 55: approval.Approval.Information:output_type -> approval.InformationResponse - 38, // 56: approval.Approval.Viewed:output_type -> approval.ApprovalResponse - 18, // 57: approval.Approval.SetStatus:output_type -> approval.StatusResponse - 45, // 58: approval.Approval.DetailSetting:output_type -> approval.SettingRequest - 47, // 59: approval.Approval.UpdateSetting:output_type -> approval.SettingResponse - 3, // 60: approval.Approval.IsExistPayRight:output_type -> approval.IsExistPayRightResponse - 0, // 61: approval.Approval.ChangeBundlePay:output_type -> approval.CommonResponse - 13, // 62: approval.Approval.CreateType:output_type -> approval.TypeResponse - 12, // 63: approval.Approval.DetailType:output_type -> approval.CreateTypeRequest - 13, // 64: approval.Approval.UpdateType:output_type -> approval.TypeResponse - 14, // 65: approval.Approval.AllType:output_type -> approval.AllTypeResponse - 18, // 66: approval.Approval.RemoveType:output_type -> approval.StatusResponse - 16, // 67: approval.Approval.AllGroup:output_type -> approval.AllGroupResponse - 46, // [46:68] is the sub-list for method output_type - 24, // [24:46] is the sub-list for method input_type - 24, // [24:24] is the sub-list for extension type_name - 24, // [24:24] is the sub-list for extension extendee - 0, // [0:24] is the sub-list for field type_name + 48, // 21: approval.CreateRequest.ApprovalOA:type_name -> approval.ApprovalOA + 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 + 49, // 25: approval.ApprovalOA.LeaveApply:type_name -> approval.LeaveApply + 50, // 26: approval.ApprovalOA.OutWork:type_name -> approval.OutWorkApply + 51, // 27: approval.ApprovalOA.MakeUp:type_name -> approval.MakeUpApply + 52, // 28: approval.ApprovalOA.Turnover:type_name -> approval.TurnoverApply + 53, // 29: approval.ApprovalOA.OverTime:type_name -> approval.OverTimeApply + 54, // 30: approval.ApprovalOA.Leave:type_name -> approval.Leave + 43, // 31: approval.LeaveApply.CopyUsers:type_name -> approval.CopyUser + 44, // 32: approval.LeaveApply.ApprovalUsers:type_name -> approval.ApprovalUser + 43, // 33: approval.OutWorkApply.CopyUsers:type_name -> approval.CopyUser + 44, // 34: approval.OutWorkApply.ApprovalUsers:type_name -> approval.ApprovalUser + 43, // 35: approval.MakeUpApply.CopyUsers:type_name -> approval.CopyUser + 44, // 36: approval.MakeUpApply.ApprovalUsers:type_name -> approval.ApprovalUser + 43, // 37: approval.TurnoverApply.CopyUsers:type_name -> approval.CopyUser + 44, // 38: approval.TurnoverApply.ApprovalUsers:type_name -> approval.ApprovalUser + 43, // 39: approval.OverTimeApply.CopyUsers:type_name -> approval.CopyUser + 44, // 40: approval.OverTimeApply.ApprovalUsers:type_name -> approval.ApprovalUser + 43, // 41: approval.Leave.CopyUsers:type_name -> approval.CopyUser + 44, // 42: approval.Leave.ApprovalUsers:type_name -> approval.ApprovalUser + 34, // 43: approval.Approval.Create:input_type -> approval.CreateRequest + 7, // 44: approval.Approval.UsedNumByUser:input_type -> approval.UsedNumByUserRequest + 5, // 45: approval.Approval.UpdateExhibitionApplyID:input_type -> approval.UpdateEhApplyIDRequest + 36, // 46: approval.Approval.Detail:input_type -> approval.DetailRequest + 34, // 47: approval.Approval.Update:input_type -> approval.CreateRequest + 37, // 48: approval.Approval.Remove:input_type -> approval.RemoveRequest + 19, // 49: approval.Approval.MyWork:input_type -> approval.ListRequest + 19, // 50: approval.Approval.MySubmit:input_type -> approval.ListRequest + 9, // 51: approval.Approval.NowLevelByInfo:input_type -> approval.NowLevelByInfoRequest + 22, // 52: approval.Approval.Information:input_type -> approval.InformationRequest + 21, // 53: approval.Approval.Viewed:input_type -> approval.ViewedRequest + 17, // 54: approval.Approval.SetStatus:input_type -> approval.StatusRequest + 46, // 55: approval.Approval.DetailSetting:input_type -> approval.DetailSettingRequest + 45, // 56: approval.Approval.UpdateSetting:input_type -> approval.SettingRequest + 2, // 57: approval.Approval.IsExistPayRight:input_type -> approval.IsExistPayRightRequest + 1, // 58: approval.Approval.ChangeBundlePay:input_type -> approval.ChangeBundlePayRequest + 12, // 59: approval.Approval.CreateType:input_type -> approval.CreateTypeRequest + 13, // 60: approval.Approval.DetailType:input_type -> approval.TypeResponse + 12, // 61: approval.Approval.UpdateType:input_type -> approval.CreateTypeRequest + 11, // 62: approval.Approval.AllType:input_type -> approval.CommonRequest + 37, // 63: approval.Approval.RemoveType:input_type -> approval.RemoveRequest + 11, // 64: approval.Approval.AllGroup:input_type -> approval.CommonRequest + 38, // 65: approval.Approval.Create:output_type -> approval.ApprovalResponse + 8, // 66: approval.Approval.UsedNumByUser:output_type -> approval.UsedNumByUserResponse + 6, // 67: approval.Approval.UpdateExhibitionApplyID:output_type -> approval.UpdateEhApplyIDResponse + 34, // 68: approval.Approval.Detail:output_type -> approval.CreateRequest + 38, // 69: approval.Approval.Update:output_type -> approval.ApprovalResponse + 39, // 70: approval.Approval.Remove:output_type -> approval.RemoveResponse + 20, // 71: approval.Approval.MyWork:output_type -> approval.ListResponse + 20, // 72: approval.Approval.MySubmit:output_type -> approval.ListResponse + 10, // 73: approval.Approval.NowLevelByInfo:output_type -> approval.WorkFlowResponse + 24, // 74: approval.Approval.Information:output_type -> approval.InformationResponse + 38, // 75: approval.Approval.Viewed:output_type -> approval.ApprovalResponse + 18, // 76: approval.Approval.SetStatus:output_type -> approval.StatusResponse + 45, // 77: approval.Approval.DetailSetting:output_type -> approval.SettingRequest + 47, // 78: approval.Approval.UpdateSetting:output_type -> approval.SettingResponse + 3, // 79: approval.Approval.IsExistPayRight:output_type -> approval.IsExistPayRightResponse + 0, // 80: approval.Approval.ChangeBundlePay:output_type -> approval.CommonResponse + 13, // 81: approval.Approval.CreateType:output_type -> approval.TypeResponse + 12, // 82: approval.Approval.DetailType:output_type -> approval.CreateTypeRequest + 13, // 83: approval.Approval.UpdateType:output_type -> approval.TypeResponse + 14, // 84: approval.Approval.AllType:output_type -> approval.AllTypeResponse + 18, // 85: approval.Approval.RemoveType:output_type -> approval.StatusResponse + 16, // 86: approval.Approval.AllGroup:output_type -> approval.AllGroupResponse + 65, // [65:87] is the sub-list for method output_type + 43, // [43:65] is the sub-list for method input_type + 43, // [43:43] is the sub-list for extension type_name + 43, // [43:43] is the sub-list for extension extendee + 0, // [0:43] is the sub-list for field type_name } func init() { file_api_approval_approval_proto_init() } @@ -5088,6 +6421,90 @@ func file_api_approval_approval_proto_init() { return nil } } + file_api_approval_approval_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApprovalOA); 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[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LeaveApply); 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[50].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OutWorkApply); 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[51].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[52].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[53].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[54].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 + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -5095,7 +6512,7 @@ func file_api_approval_approval_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_approval_approval_proto_rawDesc, NumEnums: 0, - NumMessages: 48, + NumMessages: 55, NumExtensions: 0, NumServices: 1, }, diff --git a/api/approval/approval.proto b/api/approval/approval.proto index 5a1b1f0..5563f7c 100644 --- a/api/approval/approval.proto +++ b/api/approval/approval.proto @@ -326,6 +326,7 @@ message CreateRequest { string TypeName = 28 [json_name = "typeName"]; string GroupName = 29 [json_name = "groupName"]; BundlePayPrice BundlePayPrice = 30 [json_name = "bundlePayPrice"]; + ApprovalOA ApprovalOA = 31 [json_name = ""]; } message WorkFlow { @@ -415,4 +416,128 @@ message DetailSettingRequest { message SettingResponse { uint64 ID=1 [json_name = "ID"]; bool Success=2 [json_name = "success"]; +} + +// oa审批 + +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"]; + string BeginTime = 10 [json_name = "beginTime"]; + string EndTime = 11 [json_name = "endTime"]; + 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"]; + string MakeUpDate =10 [json_name = "makeUpDate"]; + string MakeUpTime =11 [json_name = "makeUpTime"]; + 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"]; + string TurnoverTime = 12 [json_name = "turnoverTime"]; + 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"]; + string BeginTime = 10 [json_name = "beginTime"]; + string EndTime = 11 [json_name = "endTime"]; + 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"]; + string BeginTime = 10 [json_name = "beginTime"]; + string EndTime = 11 [json_name = "endTime"]; + 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"]; } \ No newline at end of file diff --git a/api/approval/approval.validator.pb.go b/api/approval/approval.validator.pb.go index e89305d..e876b7b 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) + } + } return nil } func (this *WorkFlow) Validate() error { @@ -325,3 +330,138 @@ func (this *DetailSettingRequest) Validate() error { func (this *SettingResponse) 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.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.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.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.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.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 +} diff --git a/pkg/model/approval.go b/pkg/model/approval.go index 9ab950b..6521b80 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"` } func (j *KeyInfos) Scan(src interface{}) error { @@ -541,7 +542,7 @@ func MyAllWorkApprovals(in *approval.ListRequest) ([]*Approval, int64) { modelObj = modelObj.Where(&Approval{Type: in.Type}).Where( DB.Where(&Approval{NowUserId: in.UserID, Status: StatusDoing}). // 我需要审批的 - Or(DB.Where("status = ?", StatusOk).Where("id in (?)", s1))) // 已完成,抄送给我的 + Or(DB.Where("status = ?", StatusOk).Where("id in (?)", s1))) // 已完成,抄送给我的 modelObj.Count(&count) if len(ids) > 0 { //根据具体id排序 @@ -586,8 +587,8 @@ func MyApprovalWorkApprovals(in *approval.ListRequest) ([]*Approval, int64) { if in.UserID != 0 { modelObj = modelObj.Where( DB.Where("JSON_CONTAINS(approval_users,JSON_OBJECT('ID', ?))", in.UserID). - Where("status != ?", StatusDoing). //完成,我参与审批 - Or(DB.Where("now_user_id", in.UserID).Where("status = ?", StatusDoing)). //进行中,当前审批人是我, + Where("status != ?", StatusDoing). //完成,我参与审批 + Or(DB.Where("now_user_id", in.UserID).Where("status = ?", StatusDoing)). //进行中,当前审批人是我, Or(DB.Where("JSON_CONTAINS(copy_users,JSON_OBJECT('ID', ?))", in.UserID).Where("status = ?", StatusOk))) //抄送人(完成抄送) } @@ -643,8 +644,8 @@ func MyWorkApprovals(in *approval.ListRequest) ([]*Approval, int64) { if in.UserID != 0 { modelObj = modelObj.Where( DB.Where("JSON_CONTAINS(approval_users,JSON_OBJECT('ID', ?))", in.UserID). - Where("status != ?", StatusDoing). //完成,我参与审批 - Or(DB.Where("now_user_id", in.UserID).Where("status = ?", StatusDoing)). //进行中,当前审批人是我, + Where("status != ?", StatusDoing). //完成,我参与审批 + Or(DB.Where("now_user_id", in.UserID).Where("status = ?", StatusDoing)). //进行中,当前审批人是我, Or(DB.Where("JSON_CONTAINS(copy_users,JSON_OBJECT('ID', ?))", in.UserID).Where("status = ?", StatusOk))) //抄送人(完成抄送) } @@ -804,6 +805,11 @@ func getApprovalContentFactory(typeFiled string) (ApprovalContentInterface, erro case TypeArtExhibitionReward: return &ExhibitionReward{}, nil default: - return &Approval{}, nil + v, _ := TypeMap[typeFiled] + if v == "oa" { + return &ApprovalOA{}, nil + } else { + return &Approval{}, nil + } } } diff --git a/pkg/model/approval_oa.go b/pkg/model/approval_oa.go new file mode 100644 index 0000000..57b1ebb --- /dev/null +++ b/pkg/model/approval_oa.go @@ -0,0 +1,274 @@ +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:操作|申请时间"` + BeginTime string `json:"beginTime" gorm:"column:begin_time;type:varchar(255);comment:开始时间"` + EndTime string `json:"endTime" gorm:"column:end_time;type:varchar(255);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:操作|申请时间"` + MakeUpDate string `json:"makeUpDate" gorm:"column:make_up_date;type:varchar(255);comment:补卡日期"` + MakeUpTime string `json:"makeUpTime" gorm:"column:make_up_time;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:抄送人"` +} + +// 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:交接人姓名"` + TurnoverTime string `json:"turnoverTime" gorm:"column:turnover_time;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:抄送人"` +} + +// 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:操作|申请时间"` + BeginTime string `json:"beginTime" gorm:"column:begin_time;type:varchar(255);comment:开始时间"` + EndTime string `json:"endTime" gorm:"column:end_time;type:varchar(255);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"` + BeginTime string `json:"beginTime" gorm:"column:begin_time;type:varchar(255);comment:开始时间"` + EndTime string `json:"endTime" gorm:"column:end_time;type:varchar(255);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 + +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 { + + copier.CopyWithOption(&oa, in.ApprovalOA, copier.Option{DeepCopy: true}) + oa.ApprovalID = a.ID + + if err := oa.addOtherInfo(a); err != nil { + return err + } + + return DB.Create(&oa).Error +} + +func (oa *ApprovalOA) addOtherInfo(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) + 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) + 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) + 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) + 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) + 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 + + return DB.Model(&oa).Updates(oa).Error +} + +func (oa *ApprovalOA) BuildResContent(a *Approval, request *approval.CreateRequest) { + +} + +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 a849a97..296d5b9 100644 --- a/pkg/model/approval_type.go +++ b/pkg/model/approval_type.go @@ -40,21 +40,31 @@ 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", // 独生子女护理假申请 + } var keyWordMap = map[string]string{ @@ -65,21 +75,31 @@ var keyWordMap = map[string]string{ "画展审批": "show", "画展包付款单申请": TypeBundlePayPrice, "画作润格审批": TypeArtExhibitionReward, - "事假": "leave", // 事假 - "病假": "sick", // 病假 - "年假": "annualLeave", // 年假 - "调休": "dayOff", // 调休 - "婚假": "maritalLeave", // 婚假 - "孕检假": "matingCheckLeave", // 孕检假 - "产假": "maternityLeave", // 产假 - "陪产假": "paternityLeave", // 陪产假 - "育儿假": "parentalLeave", // 育儿假 - "独生子女护理假": "nursingLeave", // 独生子女护理假 - "丧假": "funeralLeave", // 丧假 - "补卡": "makeUp", // 补卡 - "加班": "overtime", // 加班 - "外勤": "outwork", // 外勤 - "离职": "turnover", // 离职 + + "事假": "leave", // 事假 + "病假": "sick", // 病假 + "年假": "annualLeave", // 年假 + "调休": "dayOff", // 调休 + "婚假": "maritalLeave", // 婚假 + "孕检假": "matingCheckLeave", // 孕检假 + "产假": "maternityLeave", // 产假 + "陪产假": "paternityLeave", // 陪产假 + "育儿假": "parentalLeave", // 育儿假 + "独生子女护理假": "nursingLeave", // 独生子女护理假 + "丧假": "funeralLeave", // 丧假 + + "补卡": "makeUp", // 补卡 + "加班": "overtime", // 加班 + "外勤": "outwork", // 外勤 + "离职": "turnover", // 离职 + + "年假申请": "annualLeaveApply", // 年假申请 + "婚假申请": "maritalLeaveApply", // 婚假申请 + "孕检假申请": "matingCheckLeaveApply", // 孕检假申请 + "产假申请": "maternityLeaveApply", // 产假申请 + "陪产假申请": "paternityLeaveApply", // 陪产假申请 + "育儿假申请": "parentalLeaveApply", // 育儿假申请 + "独生子女护理假申请": "nursingLeaveApply", // 独生子女护理假申请 } func DataExist(domain, keyWork, title string) bool {