From a769dd08bf8ff3717e48c852606cdd56a1d4c84e Mon Sep 17 00:00:00 2001 From: jhc <9316338+wangyitao309@user.noreply.gitee.com> Date: Mon, 24 Apr 2023 16:17:01 +0800 Subject: [PATCH 1/4] =?UTF-8?q?oa=20=E5=AE=A1=E6=89=B9=20=E6=9C=AA?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/approval/approval.pb.go | 2087 +++++++++++++++++++++---- api/approval/approval.proto | 125 ++ api/approval/approval.validator.pb.go | 140 ++ pkg/model/approval.go | 18 +- pkg/model/approval_oa.go | 274 ++++ pkg/model/approval_type.go | 80 +- 6 files changed, 2353 insertions(+), 371 deletions(-) create mode 100644 pkg/model/approval_oa.go 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 @@ -3550,23 +3558,1012 @@ type SettingRequest struct { IsCustom uint64 `protobuf:"varint,12,opt,name=IsCustom,json=isCustom,proto3" json:"IsCustom,omitempty"` } -func (x *SettingRequest) Reset() { - *x = SettingRequest{} +func (x *SettingRequest) Reset() { + *x = SettingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingRequest) ProtoMessage() {} + +func (x *SettingRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[45] + 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 SettingRequest.ProtoReflect.Descriptor instead. +func (*SettingRequest) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{45} +} + +func (x *SettingRequest) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *SettingRequest) GetDeletedAt() uint64 { + if x != nil { + return x.DeletedAt + } + return 0 +} + +func (x *SettingRequest) GetCreatedAt() string { + if x != nil { + return x.CreatedAt + } + return "" +} + +func (x *SettingRequest) GetUpdatedAt() string { + if x != nil { + return x.UpdatedAt + } + return "" +} + +func (x *SettingRequest) GetKeyWord() string { + if x != nil { + return x.KeyWord + } + return "" +} + +func (x *SettingRequest) GetCopyUsers() []*CopyUser { + if x != nil { + return x.CopyUsers + } + return nil +} + +func (x *SettingRequest) GetApprovalUsers() []*ApprovalUser { + if x != nil { + return x.ApprovalUsers + } + return nil +} + +func (x *SettingRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *SettingRequest) GetCustomizeInfo() []*KeyInfo { + if x != nil { + return x.CustomizeInfo + } + return nil +} + +func (x *SettingRequest) GetIsCustom() uint64 { + if x != nil { + return x.IsCustom + } + return 0 +} + +type DetailSettingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + KeyWord string `protobuf:"bytes,1,opt,name=KeyWord,json=keyWord,proto3" json:"KeyWord,omitempty"` + Domain string `protobuf:"bytes,2,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` +} + +func (x *DetailSettingRequest) Reset() { + *x = DetailSettingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DetailSettingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DetailSettingRequest) ProtoMessage() {} + +func (x *DetailSettingRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[46] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DetailSettingRequest.ProtoReflect.Descriptor instead. +func (*DetailSettingRequest) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{46} +} + +func (x *DetailSettingRequest) GetKeyWord() string { + if x != nil { + return x.KeyWord + } + return "" +} + +func (x *DetailSettingRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +type SettingResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + Success bool `protobuf:"varint,2,opt,name=Success,json=success,proto3" json:"Success,omitempty"` +} + +func (x *SettingResponse) Reset() { + *x = SettingResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SettingResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingResponse) ProtoMessage() {} + +func (x *SettingResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[47] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingResponse.ProtoReflect.Descriptor instead. +func (*SettingResponse) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{47} +} + +func (x *SettingResponse) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *SettingResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +type 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[45] + mi := &file_api_approval_approval_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SettingRequest) String() string { +func (x *OverTimeApply) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SettingRequest) ProtoMessage() {} +func (*OverTimeApply) ProtoMessage() {} -func (x *SettingRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[45] +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 { @@ -3577,107 +4574,156 @@ func (x *SettingRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SettingRequest.ProtoReflect.Descriptor instead. -func (*SettingRequest) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{45} +// Deprecated: Use OverTimeApply.ProtoReflect.Descriptor instead. +func (*OverTimeApply) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{53} } -func (x *SettingRequest) GetID() uint64 { +func (x *OverTimeApply) GetUUID() string { if x != nil { - return x.ID + return x.UUID } - return 0 + return "" } -func (x *SettingRequest) GetDeletedAt() uint64 { +func (x *OverTimeApply) GetStaffUID() string { if x != nil { - return x.DeletedAt + return x.StaffUID } - return 0 + return "" } -func (x *SettingRequest) GetCreatedAt() string { +func (x *OverTimeApply) GetStaffNum() string { if x != nil { - return x.CreatedAt + return x.StaffNum } return "" } -func (x *SettingRequest) GetUpdatedAt() string { +func (x *OverTimeApply) GetStaffName() string { if x != nil { - return x.UpdatedAt + return x.StaffName } return "" } -func (x *SettingRequest) GetKeyWord() string { +func (x *OverTimeApply) GetDepartmentUID() string { if x != nil { - return x.KeyWord + return x.DepartmentUID } return "" } -func (x *SettingRequest) GetCopyUsers() []*CopyUser { +func (x *OverTimeApply) GetApplyType() string { if x != nil { - return x.CopyUsers + return x.ApplyType } - return nil + return "" } -func (x *SettingRequest) GetApprovalUsers() []*ApprovalUser { +func (x *OverTimeApply) GetActionTime() string { if x != nil { - return x.ApprovalUsers + return x.ActionTime } - return nil + return "" } -func (x *SettingRequest) GetDomain() string { +func (x *OverTimeApply) GetApprovalID() string { if x != nil { - return x.Domain + return x.ApprovalID } return "" } -func (x *SettingRequest) GetCustomizeInfo() []*KeyInfo { +func (x *OverTimeApply) GetStatus() int32 { if x != nil { - return x.CustomizeInfo + return x.Status } - return nil + return 0 } -func (x *SettingRequest) GetIsCustom() uint64 { +func (x *OverTimeApply) GetBeginTime() string { if x != nil { - return x.IsCustom + 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 } -type DetailSettingRequest struct { +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 - KeyWord string `protobuf:"bytes,1,opt,name=KeyWord,json=keyWord,proto3" json:"KeyWord,omitempty"` - Domain string `protobuf:"bytes,2,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` -} - -func (x *DetailSettingRequest) Reset() { - *x = DetailSettingRequest{} + UUID string `protobuf:"bytes,1,opt,name=UUID,proto3" json:"UUID,omitempty"` + StaffUID string `protobuf:"bytes,2,opt,name=StaffUID,json=staffUID,proto3" json:"StaffUID,omitempty"` + StaffNum string `protobuf:"bytes,3,opt,name=StaffNum,json=staffNum,proto3" json:"StaffNum,omitempty"` + StaffName string `protobuf:"bytes,4,opt,name=StaffName,json=staffName,proto3" json:"StaffName,omitempty"` + DepartmentUID string `protobuf:"bytes,5,opt,name=DepartmentUID,json=departmentUID,proto3" json:"DepartmentUID,omitempty"` + ApplyType string `protobuf:"bytes,6,opt,name=ApplyType,json=applyType,proto3" json:"ApplyType,omitempty"` + ActionTime string `protobuf:"bytes,7,opt,name=ActionTime,json=actionTime,proto3" json:"ActionTime,omitempty"` + ApprovalID string `protobuf:"bytes,8,opt,name=ApprovalID,json=approvalID,proto3" json:"ApprovalID,omitempty"` + Status int32 `protobuf:"varint,9,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + 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[46] + mi := &file_api_approval_approval_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *DetailSettingRequest) String() string { +func (x *Leave) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DetailSettingRequest) ProtoMessage() {} +func (*Leave) ProtoMessage() {} -func (x *DetailSettingRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[46] +func (x *Leave) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3688,78 +4734,121 @@ func (x *DetailSettingRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DetailSettingRequest.ProtoReflect.Descriptor instead. -func (*DetailSettingRequest) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{46} +// Deprecated: Use Leave.ProtoReflect.Descriptor instead. +func (*Leave) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{54} } -func (x *DetailSettingRequest) GetKeyWord() string { +func (x *Leave) GetUUID() string { if x != nil { - return x.KeyWord + return x.UUID } return "" } -func (x *DetailSettingRequest) GetDomain() string { +func (x *Leave) GetStaffUID() string { if x != nil { - return x.Domain + return x.StaffUID } return "" } -type SettingResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *Leave) GetStaffNum() string { + if x != nil { + return x.StaffNum + } + return "" +} - ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` - Success bool `protobuf:"varint,2,opt,name=Success,json=success,proto3" json:"Success,omitempty"` +func (x *Leave) GetStaffName() string { + if x != nil { + return x.StaffName + } + return "" } -func (x *SettingResponse) Reset() { - *x = SettingResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[47] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *Leave) GetDepartmentUID() string { + if x != nil { + return x.DepartmentUID } + return "" } -func (x *SettingResponse) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *Leave) GetApplyType() string { + if x != nil { + return x.ApplyType + } + return "" } -func (*SettingResponse) ProtoMessage() {} +func (x *Leave) GetActionTime() string { + if x != nil { + return x.ActionTime + } + return "" +} -func (x *SettingResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[47] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *Leave) GetApprovalID() string { + if x != nil { + return x.ApprovalID } - return mi.MessageOf(x) + return "" } -// Deprecated: Use SettingResponse.ProtoReflect.Descriptor instead. -func (*SettingResponse) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{47} +func (x *Leave) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 } -func (x *SettingResponse) GetID() uint64 { +func (x *Leave) GetBeginTime() string { if x != nil { - return x.ID + 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 *SettingResponse) GetSuccess() bool { +func (x *Leave) GetDays() float32 { if x != nil { - return x.Success + return x.Days } - return false + return 0 +} + +func (x *Leave) GetCopyUsers() []*CopyUser { + if x != nil { + return x.CopyUsers + } + return nil +} + +func (x *Leave) GetApprovalUsers() []*ApprovalUser { + if x != nil { + return x.ApprovalUsers + } + return nil } var File_api_approval_approval_proto protoreflect.FileDescriptor @@ -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 { From 05cc84845d8bf1bc9d136939d5870d381ebaab4b Mon Sep 17 00:00:00 2001 From: jhc <9316338+wangyitao309@user.noreply.gitee.com> Date: Thu, 4 May 2023 10:15:50 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/model/approval.go | 32 +++++++++++++++++++++++++++----- pkg/model/approval_type.go | 24 ++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/pkg/model/approval.go b/pkg/model/approval.go index 6521b80..b1851e8 100644 --- a/pkg/model/approval.go +++ b/pkg/model/approval.go @@ -51,7 +51,11 @@ 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"` +<<<<<<< Updated upstream ApprovalOA *ApprovalOA `gorm:"foreignKey:ApprovalID" json:"OA"` +======= + ApprovalOA *ApprovalOA `gorm:"foreignKey:ApprovalID" json:"oa"` +>>>>>>> Stashed changes } func (j *KeyInfos) Scan(src interface{}) error { @@ -73,6 +77,24 @@ const ( TypeBundle = "bundle" TypeBundlePayPrice = "bundlePayPrice" TypeArtExhibitionReward = "artExhibitionReward" + TypeOa = "oa" // oa 父类 + /* 子类 */ + TypeOaLeave = "oa_leave" // 事假 + TypeOaSick = "oa_sick" // 病假 + TypeOaAnnualLeave = "oa_annualLeave" // 年假 + TypeOaDayOff = "oa_dayOff" // 调休 + TypeOaMaritalLeave = "oa_maritalLeave" // 婚假 + TypeOaMatingCheckLeave = "oa_matingCheckLeave" // 孕检假 + TypeOaMaternityLeave = "oa_maternityLeave" // 产假 + TypeOaPaternityLeave = "oa_paternityLeave" // 陪产假 + TypeOaParentalLeave = "oa_parentalLeave" // 育儿假 + TypeOaNursingLeave = "oa_nursingLeave" // 独生子女护理假 + TypeOaFuneralLeave = "oa_funeralLeave" // 丧假 + TypeOaMakeUp = "oa_makeUp" // 补卡 + TypeOaOvertime = "oa_overtime" // 加班 + TypeOaOutwork = "oa_outwork" // 外勤 + TypeOaTurnover = "oa_turnover" // 离职 + /* */ ) const ( StatusDoing = 1 @@ -542,7 +564,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排序 @@ -587,8 +609,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))) //抄送人(完成抄送) } @@ -644,8 +666,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))) //抄送人(完成抄送) } diff --git a/pkg/model/approval_type.go b/pkg/model/approval_type.go index 296d5b9..edd192b 100644 --- a/pkg/model/approval_type.go +++ b/pkg/model/approval_type.go @@ -39,6 +39,7 @@ var TypeMap = map[string]string{ "show": "", TypeBundlePayPrice: "", TypeArtExhibitionReward: "", +<<<<<<< Updated upstream "leave": "oa", // 事假 "sick": "oa", // 病假 @@ -65,6 +66,25 @@ var TypeMap = map[string]string{ "parentalLeaveApply": "oa", // 育儿假申请 "nursingLeaveApply": "oa", // 独生子女护理假申请 + + /*=================================*/ + // TODO 育儿假 等 额度 审批 + TypeOaLeave: "oa", // 事假 + TypeOaSick: "oa", // 病假 + TypeOaAnnualLeave: "oa", // 年假 + TypeOaDayOff: "oa", // 调休 + TypeOaMaritalLeave: "oa", // 婚假 + TypeOaMatingCheckLeave: "oa", // 孕检假 + TypeOaMaternityLeave: "oa", // 产假 + TypeOaPaternityLeave: "oa", // 陪产假 + TypeOaParentalLeave: "oa", // 育儿假 + TypeOaNursingLeave: "oa", // 独生子女护理假 + TypeOaFuneralLeave: "oa", // 丧假 + TypeOaMakeUp: "oa", // 补卡 + TypeOaOvertime: "oa", // 加班 + TypeOaOutwork: "oa", // 外勤 + TypeOaTurnover: "oa", // 离职 + } var keyWordMap = map[string]string{ @@ -158,6 +178,10 @@ func IsSystemKeyWork(title string) bool { return isOk } +// TODO +// 增加 逻辑 取出 value值 判断是否为 "" +// 为 "" 则为 系统 +// 不为 "" 则为 自定义中特殊类型 func IsSystemType(title string) bool { _, isOk := TypeMap[title] return isOk From 844730ad0bec0dc4dfa405cf1262f4eba8bb6b99 Mon Sep 17 00:00:00 2001 From: jhc <9316338+wangyitao309@user.noreply.gitee.com> Date: Thu, 4 May 2023 10:17:33 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/model/approval.go | 4 ---- pkg/model/approval_type.go | 20 -------------------- 2 files changed, 24 deletions(-) diff --git a/pkg/model/approval.go b/pkg/model/approval.go index b1851e8..17429eb 100644 --- a/pkg/model/approval.go +++ b/pkg/model/approval.go @@ -51,11 +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"` -<<<<<<< Updated upstream - ApprovalOA *ApprovalOA `gorm:"foreignKey:ApprovalID" json:"OA"` -======= ApprovalOA *ApprovalOA `gorm:"foreignKey:ApprovalID" json:"oa"` ->>>>>>> Stashed changes } func (j *KeyInfos) Scan(src interface{}) error { diff --git a/pkg/model/approval_type.go b/pkg/model/approval_type.go index edd192b..fbc91ad 100644 --- a/pkg/model/approval_type.go +++ b/pkg/model/approval_type.go @@ -39,7 +39,6 @@ var TypeMap = map[string]string{ "show": "", TypeBundlePayPrice: "", TypeArtExhibitionReward: "", -<<<<<<< Updated upstream "leave": "oa", // 事假 "sick": "oa", // 病假 @@ -66,25 +65,6 @@ var TypeMap = map[string]string{ "parentalLeaveApply": "oa", // 育儿假申请 "nursingLeaveApply": "oa", // 独生子女护理假申请 - - /*=================================*/ - // TODO 育儿假 等 额度 审批 - TypeOaLeave: "oa", // 事假 - TypeOaSick: "oa", // 病假 - TypeOaAnnualLeave: "oa", // 年假 - TypeOaDayOff: "oa", // 调休 - TypeOaMaritalLeave: "oa", // 婚假 - TypeOaMatingCheckLeave: "oa", // 孕检假 - TypeOaMaternityLeave: "oa", // 产假 - TypeOaPaternityLeave: "oa", // 陪产假 - TypeOaParentalLeave: "oa", // 育儿假 - TypeOaNursingLeave: "oa", // 独生子女护理假 - TypeOaFuneralLeave: "oa", // 丧假 - TypeOaMakeUp: "oa", // 补卡 - TypeOaOvertime: "oa", // 加班 - TypeOaOutwork: "oa", // 外勤 - TypeOaTurnover: "oa", // 离职 - } var keyWordMap = map[string]string{ From 874c6d377ad554b24bcabdd0fab273e2b7e03441 Mon Sep 17 00:00:00 2001 From: jhc <9316338+wangyitao309@user.noreply.gitee.com> Date: Mon, 8 May 2023 10:52:00 +0800 Subject: [PATCH 4/4] =?UTF-8?q?oa=E5=AE=A1=E6=89=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/approval/approval.pb.go | 1243 +++++++++++++------------ api/approval/approval.proto | 65 +- api/approval/approval.validator.pb.go | 50 +- pkg/model/approval.go | 37 +- pkg/model/approval_oa.go | 138 ++- pkg/model/migration.go | 4 +- 6 files changed, 861 insertions(+), 676 deletions(-) diff --git a/api/approval/approval.pb.go b/api/approval/approval.pb.go index 593b584..29dd7ed 100644 --- a/api/approval/approval.pb.go +++ b/api/approval/approval.pb.go @@ -3786,6 +3786,69 @@ func (x *SettingResponse) GetSuccess() bool { return false } +type ApplyTime struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Date string `protobuf:"bytes,1,opt,name=Date,json=date,proto3" json:"Date,omitempty"` + Hour string `protobuf:"bytes,2,opt,name=Hour,json=hour,proto3" json:"Hour,omitempty"` + M string `protobuf:"bytes,3,opt,name=M,json=m,proto3" json:"M,omitempty"` +} + +func (x *ApplyTime) Reset() { + *x = ApplyTime{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplyTime) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplyTime) ProtoMessage() {} + +func (x *ApplyTime) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[48] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplyTime.ProtoReflect.Descriptor instead. +func (*ApplyTime) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{48} +} + +func (x *ApplyTime) GetDate() string { + if x != nil { + return x.Date + } + return "" +} + +func (x *ApplyTime) GetHour() string { + if x != nil { + return x.Hour + } + return "" +} + +func (x *ApplyTime) GetM() string { + if x != nil { + return x.M + } + return "" +} + type ApprovalOA struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3807,7 +3870,7 @@ type ApprovalOA struct { func (x *ApprovalOA) Reset() { *x = ApprovalOA{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[48] + mi := &file_api_approval_approval_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3820,7 +3883,7 @@ func (x *ApprovalOA) String() string { func (*ApprovalOA) ProtoMessage() {} func (x *ApprovalOA) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[48] + mi := &file_api_approval_approval_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3833,7 +3896,7 @@ func (x *ApprovalOA) ProtoReflect() protoreflect.Message { // Deprecated: Use ApprovalOA.ProtoReflect.Descriptor instead. func (*ApprovalOA) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{48} + return file_api_approval_approval_proto_rawDescGZIP(), []int{49} } func (x *ApprovalOA) GetID() uint64 { @@ -3936,7 +3999,7 @@ type LeaveApply struct { func (x *LeaveApply) Reset() { *x = LeaveApply{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[49] + mi := &file_api_approval_approval_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3949,7 +4012,7 @@ func (x *LeaveApply) String() string { func (*LeaveApply) ProtoMessage() {} func (x *LeaveApply) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[49] + mi := &file_api_approval_approval_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3962,7 +4025,7 @@ func (x *LeaveApply) ProtoReflect() protoreflect.Message { // Deprecated: Use LeaveApply.ProtoReflect.Descriptor instead. func (*LeaveApply) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{49} + return file_api_approval_approval_proto_rawDescGZIP(), []int{50} } func (x *LeaveApply) GetUUID() string { @@ -4070,8 +4133,7 @@ type OutWorkApply struct { 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"` + ApplyTimes []*ApplyTime `protobuf:"bytes,10,rep,name=ApplyTimes,json=applyTimes,proto3" json:"ApplyTimes,omitempty"` Reason string `protobuf:"bytes,12,opt,name=Reason,json=reason,proto3" json:"Reason,omitempty"` Hours float32 `protobuf:"fixed32,13,opt,name=Hours,json=hours,proto3" json:"Hours,omitempty"` OutWorkAddress string `protobuf:"bytes,14,opt,name=OutWorkAddress,json=outWorkAddress,proto3" json:"OutWorkAddress,omitempty"` @@ -4083,7 +4145,7 @@ type OutWorkApply struct { func (x *OutWorkApply) Reset() { *x = OutWorkApply{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[50] + mi := &file_api_approval_approval_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4096,7 +4158,7 @@ func (x *OutWorkApply) String() string { func (*OutWorkApply) ProtoMessage() {} func (x *OutWorkApply) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[50] + mi := &file_api_approval_approval_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4109,7 +4171,7 @@ func (x *OutWorkApply) ProtoReflect() protoreflect.Message { // Deprecated: Use OutWorkApply.ProtoReflect.Descriptor instead. func (*OutWorkApply) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{50} + return file_api_approval_approval_proto_rawDescGZIP(), []int{51} } func (x *OutWorkApply) GetUUID() string { @@ -4175,18 +4237,11 @@ func (x *OutWorkApply) GetStatus() int32 { return 0 } -func (x *OutWorkApply) GetBeginTime() string { +func (x *OutWorkApply) GetApplyTimes() []*ApplyTime { if x != nil { - return x.BeginTime + return x.ApplyTimes } - return "" -} - -func (x *OutWorkApply) GetEndTime() string { - if x != nil { - return x.EndTime - } - return "" + return nil } func (x *OutWorkApply) GetReason() string { @@ -4245,8 +4300,7 @@ type MakeUpApply struct { 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"` + ApplyTimes []*ApplyTime `protobuf:"bytes,10,rep,name=ApplyTimes,json=applyTimes,proto3" json:"ApplyTimes,omitempty"` Reason string `protobuf:"bytes,12,opt,name=Reason,json=reason,proto3" json:"Reason,omitempty"` CopyUsers []*CopyUser `protobuf:"bytes,13,rep,name=CopyUsers,json=copyUsers,proto3" json:"CopyUsers,omitempty"` ApprovalUsers []*ApprovalUser `protobuf:"bytes,14,rep,name=ApprovalUsers,json=approvalUsers,proto3" json:"ApprovalUsers,omitempty"` @@ -4255,7 +4309,7 @@ type MakeUpApply struct { func (x *MakeUpApply) Reset() { *x = MakeUpApply{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[51] + mi := &file_api_approval_approval_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4268,7 +4322,7 @@ func (x *MakeUpApply) String() string { func (*MakeUpApply) ProtoMessage() {} func (x *MakeUpApply) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[51] + mi := &file_api_approval_approval_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4281,7 +4335,7 @@ func (x *MakeUpApply) ProtoReflect() protoreflect.Message { // Deprecated: Use MakeUpApply.ProtoReflect.Descriptor instead. func (*MakeUpApply) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{51} + return file_api_approval_approval_proto_rawDescGZIP(), []int{52} } func (x *MakeUpApply) GetUUID() string { @@ -4347,18 +4401,11 @@ func (x *MakeUpApply) GetStatus() int32 { return 0 } -func (x *MakeUpApply) GetMakeUpDate() string { - if x != nil { - return x.MakeUpDate - } - return "" -} - -func (x *MakeUpApply) GetMakeUpTime() string { +func (x *MakeUpApply) GetApplyTimes() []*ApplyTime { if x != nil { - return x.MakeUpTime + return x.ApplyTimes } - return "" + return nil } func (x *MakeUpApply) GetReason() string { @@ -4398,7 +4445,7 @@ type TurnoverApply struct { 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"` + ApplyTimes []*ApplyTime `protobuf:"bytes,12,rep,name=ApplyTimes,json=applyTimes,proto3" json:"ApplyTimes,omitempty"` Reason string `protobuf:"bytes,13,opt,name=Reason,json=reason,proto3" json:"Reason,omitempty"` CopyUsers []*CopyUser `protobuf:"bytes,14,rep,name=CopyUsers,json=copyUsers,proto3" json:"CopyUsers,omitempty"` ApprovalUsers []*ApprovalUser `protobuf:"bytes,15,rep,name=ApprovalUsers,json=approvalUsers,proto3" json:"ApprovalUsers,omitempty"` @@ -4407,7 +4454,7 @@ type TurnoverApply struct { func (x *TurnoverApply) Reset() { *x = TurnoverApply{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[52] + mi := &file_api_approval_approval_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4420,7 +4467,7 @@ func (x *TurnoverApply) String() string { func (*TurnoverApply) ProtoMessage() {} func (x *TurnoverApply) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[52] + mi := &file_api_approval_approval_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4433,7 +4480,7 @@ func (x *TurnoverApply) ProtoReflect() protoreflect.Message { // Deprecated: Use TurnoverApply.ProtoReflect.Descriptor instead. func (*TurnoverApply) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{52} + return file_api_approval_approval_proto_rawDescGZIP(), []int{53} } func (x *TurnoverApply) GetUUID() string { @@ -4513,11 +4560,11 @@ func (x *TurnoverApply) GetHandoverName() string { return "" } -func (x *TurnoverApply) GetTurnoverTime() string { +func (x *TurnoverApply) GetApplyTimes() []*ApplyTime { if x != nil { - return x.TurnoverTime + return x.ApplyTimes } - return "" + return nil } func (x *TurnoverApply) GetReason() string { @@ -4555,8 +4602,7 @@ type OverTimeApply struct { 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"` + ApplyTimes []*ApplyTime `protobuf:"bytes,10,rep,name=ApplyTimes,json=applyTimes,proto3" json:"ApplyTimes,omitempty"` Reason string `protobuf:"bytes,12,opt,name=Reason,json=reason,proto3" json:"Reason,omitempty"` Hours float32 `protobuf:"fixed32,13,opt,name=Hours,json=hours,proto3" json:"Hours,omitempty"` CopyUsers []*CopyUser `protobuf:"bytes,14,rep,name=CopyUsers,json=copyUsers,proto3" json:"CopyUsers,omitempty"` @@ -4566,7 +4612,7 @@ type OverTimeApply struct { func (x *OverTimeApply) Reset() { *x = OverTimeApply{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[53] + mi := &file_api_approval_approval_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4579,7 +4625,7 @@ func (x *OverTimeApply) String() string { func (*OverTimeApply) ProtoMessage() {} func (x *OverTimeApply) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[53] + mi := &file_api_approval_approval_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4592,7 +4638,7 @@ func (x *OverTimeApply) ProtoReflect() protoreflect.Message { // Deprecated: Use OverTimeApply.ProtoReflect.Descriptor instead. func (*OverTimeApply) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{53} + return file_api_approval_approval_proto_rawDescGZIP(), []int{54} } func (x *OverTimeApply) GetUUID() string { @@ -4658,18 +4704,11 @@ func (x *OverTimeApply) GetStatus() int32 { return 0 } -func (x *OverTimeApply) GetBeginTime() string { +func (x *OverTimeApply) GetApplyTimes() []*ApplyTime { if x != nil { - return x.BeginTime + return x.ApplyTimes } - return "" -} - -func (x *OverTimeApply) GetEndTime() string { - if x != nil { - return x.EndTime - } - return "" + return nil } func (x *OverTimeApply) GetReason() string { @@ -4714,8 +4753,7 @@ type Leave struct { 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"` + ApplyTimes []*ApplyTime `protobuf:"bytes,10,rep,name=ApplyTimes,json=applyTimes,proto3" json:"ApplyTimes,omitempty"` Reason string `protobuf:"bytes,12,opt,name=Reason,json=reason,proto3" json:"Reason,omitempty"` Hours float32 `protobuf:"fixed32,13,opt,name=Hours,json=hours,proto3" json:"Hours,omitempty"` Days float32 `protobuf:"fixed32,14,opt,name=Days,json=days,proto3" json:"Days,omitempty"` @@ -4726,7 +4764,7 @@ type Leave struct { func (x *Leave) Reset() { *x = Leave{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[54] + mi := &file_api_approval_approval_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4739,7 +4777,7 @@ func (x *Leave) String() string { func (*Leave) ProtoMessage() {} func (x *Leave) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[54] + mi := &file_api_approval_approval_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4752,7 +4790,7 @@ func (x *Leave) ProtoReflect() protoreflect.Message { // Deprecated: Use Leave.ProtoReflect.Descriptor instead. func (*Leave) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{54} + return file_api_approval_approval_proto_rawDescGZIP(), []int{55} } func (x *Leave) GetUUID() string { @@ -4818,18 +4856,11 @@ func (x *Leave) GetStatus() int32 { return 0 } -func (x *Leave) GetBeginTime() string { +func (x *Leave) GetApplyTimes() []*ApplyTime { if x != nil { - return x.BeginTime + return x.ApplyTimes } - return "" -} - -func (x *Leave) GetEndTime() string { - if x != nil { - return x.EndTime - } - return "" + return nil } func (x *Leave) GetReason() string { @@ -4867,36 +4898,32 @@ func (x *Leave) GetApprovalUsers() []*ApprovalUser { return nil } -type CostInfo struct { +// 财务报表审批 +type GetNameRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Description string `protobuf:"bytes,1,opt,name=Description,json=description,proto3" json:"Description,omitempty"` - UnitPrice string `protobuf:"bytes,2,opt,name=UnitPrice,json=unitPrice,proto3" json:"UnitPrice,omitempty"` - CostUnit string `protobuf:"bytes,3,opt,name=CostUnit,json=costUnit,proto3" json:"CostUnit,omitempty"` - CostNum int64 `protobuf:"varint,4,opt,name=CostNum,json=costNum,proto3" json:"CostNum,omitempty"` - TotalPrice string `protobuf:"bytes,5,opt,name=TotalPrice,json=totalPrice,proto3" json:"TotalPrice,omitempty"` - UsedDepartment string `protobuf:"bytes,6,opt,name=UsedDepartment,json=usedDepartment,proto3" json:"UsedDepartment,omitempty"` + SettingType string `protobuf:"bytes,1,opt,name=SettingType,json=settingType,proto3" json:"SettingType,omitempty"` } -func (x *CostInfo) Reset() { - *x = CostInfo{} +func (x *GetNameRequest) Reset() { + *x = GetNameRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[55] + mi := &file_api_approval_approval_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CostInfo) String() string { +func (x *GetNameRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CostInfo) ProtoMessage() {} +func (*GetNameRequest) ProtoMessage() {} -func (x *CostInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[55] +func (x *GetNameRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4907,87 +4934,102 @@ func (x *CostInfo) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CostInfo.ProtoReflect.Descriptor instead. -func (*CostInfo) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{55} +// Deprecated: Use GetNameRequest.ProtoReflect.Descriptor instead. +func (*GetNameRequest) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{56} } -func (x *CostInfo) GetDescription() string { +func (x *GetNameRequest) GetSettingType() string { if x != nil { - return x.Description + return x.SettingType } return "" } -func (x *CostInfo) GetUnitPrice() string { - if x != nil { - return x.UnitPrice - } - return "" +type GetNameResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name []string `protobuf:"bytes,1,rep,name=Name,json=name,proto3" json:"Name,omitempty"` } -func (x *CostInfo) GetCostUnit() string { - if x != nil { - return x.CostUnit +func (x *GetNameResponse) Reset() { + *x = GetNameResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_approval_approval_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (x *CostInfo) GetCostNum() int64 { - if x != nil { - return x.CostNum - } - return 0 +func (x *GetNameResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *CostInfo) GetTotalPrice() string { - if x != nil { - return x.TotalPrice +func (*GetNameResponse) ProtoMessage() {} + +func (x *GetNameResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[57] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *CostInfo) GetUsedDepartment() string { +// Deprecated: Use GetNameResponse.ProtoReflect.Descriptor instead. +func (*GetNameResponse) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{57} +} + +func (x *GetNameResponse) GetName() []string { if x != nil { - return x.UsedDepartment + return x.Name } - return "" + return nil } -type InvoiceInfo struct { +type FinancialForm struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - InvoiceDate string `protobuf:"bytes,1,opt,name=InvoiceDate,json=invoiceDate,proto3" json:"InvoiceDate,omitempty"` - InvoiceNo string `protobuf:"bytes,2,opt,name=InvoiceNo,json=invoiceNo,proto3" json:"InvoiceNo,omitempty"` - InvoiceProvider string `protobuf:"bytes,3,opt,name=InvoiceProvider,json=invoiceProvider,proto3" json:"InvoiceProvider,omitempty"` - Amount string `protobuf:"bytes,4,opt,name=Amount,json=amount,proto3" json:"Amount,omitempty"` - UseTo string `protobuf:"bytes,5,opt,name=UseTo,json=useTo,proto3" json:"UseTo,omitempty"` - Applicant string `protobuf:"bytes,6,opt,name=Applicant,json=applicant,proto3" json:"Applicant,omitempty"` - PaymentMethod string `protobuf:"bytes,7,opt,name=PaymentMethod,json=paymentMethod,proto3" json:"PaymentMethod,omitempty"` - PaymentObj string `protobuf:"bytes,8,opt,name=PaymentObj,json=paymentObj,proto3" json:"PaymentObj,omitempty"` - InvoiceType string `protobuf:"bytes,9,opt,name=InvoiceType,json=invoiceType,proto3" json:"InvoiceType,omitempty"` - Notes string `protobuf:"bytes,10,opt,name=Notes,json=notes,proto3" json:"Notes,omitempty"` + 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"` + PaymentCompany string `protobuf:"bytes,6,opt,name=PaymentCompany,json=paymentCompany,proto3" json:"PaymentCompany,omitempty"` + TransactionDepartment string `protobuf:"bytes,7,opt,name=TransactionDepartment,json=transactionDepartment,proto3" json:"TransactionDepartment,omitempty"` + Payee string `protobuf:"bytes,8,opt,name=Payee,json=payee,proto3" json:"Payee,omitempty"` + BeneficiaryBank string `protobuf:"bytes,9,opt,name=BeneficiaryBank,json=beneficiaryBank,proto3" json:"BeneficiaryBank,omitempty"` + BankNo string `protobuf:"bytes,10,opt,name=BankNo,json=bankNo,proto3" json:"BankNo,omitempty"` + CostInfo []*CostInfo `protobuf:"bytes,11,rep,name=CostInfo,json=costInfo,proto3" json:"CostInfo,omitempty"` + PaymentMethod string `protobuf:"bytes,12,opt,name=PaymentMethod,json=paymentMethod,proto3" json:"PaymentMethod,omitempty"` + InvoiceInfo []*InvoiceInfo `protobuf:"bytes,13,rep,name=InvoiceInfo,json=invoiceInfo,proto3" json:"InvoiceInfo,omitempty"` } -func (x *InvoiceInfo) Reset() { - *x = InvoiceInfo{} +func (x *FinancialForm) Reset() { + *x = FinancialForm{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[56] + mi := &file_api_approval_approval_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *InvoiceInfo) String() string { +func (x *FinancialForm) String() string { return protoimpl.X.MessageStringOf(x) } -func (*InvoiceInfo) ProtoMessage() {} +func (*FinancialForm) ProtoMessage() {} -func (x *InvoiceInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[56] +func (x *FinancialForm) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4998,107 +5040,132 @@ func (x *InvoiceInfo) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use InvoiceInfo.ProtoReflect.Descriptor instead. -func (*InvoiceInfo) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{56} +// Deprecated: Use FinancialForm.ProtoReflect.Descriptor instead. +func (*FinancialForm) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{58} } -func (x *InvoiceInfo) GetInvoiceDate() string { +func (x *FinancialForm) GetID() uint64 { if x != nil { - return x.InvoiceDate + return x.ID } - return "" + return 0 } -func (x *InvoiceInfo) GetInvoiceNo() string { +func (x *FinancialForm) GetDeletedAt() uint64 { if x != nil { - return x.InvoiceNo + return x.DeletedAt } - return "" + return 0 } -func (x *InvoiceInfo) GetInvoiceProvider() string { +func (x *FinancialForm) GetCreatedAt() string { if x != nil { - return x.InvoiceProvider + return x.CreatedAt } return "" } -func (x *InvoiceInfo) GetAmount() string { +func (x *FinancialForm) GetUpdatedAt() string { if x != nil { - return x.Amount + return x.UpdatedAt } return "" } -func (x *InvoiceInfo) GetUseTo() string { +func (x *FinancialForm) GetApprovalID() uint64 { if x != nil { - return x.UseTo + return x.ApprovalID + } + return 0 +} + +func (x *FinancialForm) GetPaymentCompany() string { + if x != nil { + return x.PaymentCompany } return "" } -func (x *InvoiceInfo) GetApplicant() string { +func (x *FinancialForm) GetTransactionDepartment() string { if x != nil { - return x.Applicant + return x.TransactionDepartment } return "" } -func (x *InvoiceInfo) GetPaymentMethod() string { +func (x *FinancialForm) GetPayee() string { if x != nil { - return x.PaymentMethod + return x.Payee } return "" } -func (x *InvoiceInfo) GetPaymentObj() string { +func (x *FinancialForm) GetBeneficiaryBank() string { if x != nil { - return x.PaymentObj + return x.BeneficiaryBank } return "" } -func (x *InvoiceInfo) GetInvoiceType() string { +func (x *FinancialForm) GetBankNo() string { if x != nil { - return x.InvoiceType + return x.BankNo } return "" } -func (x *InvoiceInfo) GetNotes() string { +func (x *FinancialForm) GetCostInfo() []*CostInfo { if x != nil { - return x.Notes + return x.CostInfo + } + return nil +} + +func (x *FinancialForm) GetPaymentMethod() string { + if x != nil { + return x.PaymentMethod } return "" } -// 财务报表审批 -type GetNameRequest struct { +func (x *FinancialForm) GetInvoiceInfo() []*InvoiceInfo { + if x != nil { + return x.InvoiceInfo + } + return nil +} + +type CostInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SettingType string `protobuf:"bytes,1,opt,name=SettingType,json=settingType,proto3" json:"SettingType,omitempty"` + Description string `protobuf:"bytes,1,opt,name=Description,json=description,proto3" json:"Description,omitempty"` + UnitPrice string `protobuf:"bytes,2,opt,name=UnitPrice,json=unitPrice,proto3" json:"UnitPrice,omitempty"` + CostUnit string `protobuf:"bytes,3,opt,name=CostUnit,json=costUnit,proto3" json:"CostUnit,omitempty"` + CostNum int64 `protobuf:"varint,4,opt,name=CostNum,json=costNum,proto3" json:"CostNum,omitempty"` + TotalPrice string `protobuf:"bytes,5,opt,name=TotalPrice,json=totalPrice,proto3" json:"TotalPrice,omitempty"` + UsedDepartment string `protobuf:"bytes,6,opt,name=UsedDepartment,json=usedDepartment,proto3" json:"UsedDepartment,omitempty"` } -func (x *GetNameRequest) Reset() { - *x = GetNameRequest{} +func (x *CostInfo) Reset() { + *x = CostInfo{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[57] + mi := &file_api_approval_approval_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetNameRequest) String() string { +func (x *CostInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetNameRequest) ProtoMessage() {} +func (*CostInfo) ProtoMessage() {} -func (x *GetNameRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[57] +func (x *CostInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5109,102 +5176,87 @@ func (x *GetNameRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetNameRequest.ProtoReflect.Descriptor instead. -func (*GetNameRequest) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{57} +// Deprecated: Use CostInfo.ProtoReflect.Descriptor instead. +func (*CostInfo) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{59} } -func (x *GetNameRequest) GetSettingType() string { +func (x *CostInfo) GetDescription() string { if x != nil { - return x.SettingType + return x.Description } return "" } -type GetNameResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name []string `protobuf:"bytes,1,rep,name=Name,json=name,proto3" json:"Name,omitempty"` -} - -func (x *GetNameResponse) Reset() { - *x = GetNameResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[58] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *CostInfo) GetUnitPrice() string { + if x != nil { + return x.UnitPrice } + return "" } -func (x *GetNameResponse) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *CostInfo) GetCostUnit() string { + if x != nil { + return x.CostUnit + } + return "" } -func (*GetNameResponse) ProtoMessage() {} - -func (x *GetNameResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[58] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *CostInfo) GetCostNum() int64 { + if x != nil { + return x.CostNum } - return mi.MessageOf(x) + return 0 } -// Deprecated: Use GetNameResponse.ProtoReflect.Descriptor instead. -func (*GetNameResponse) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{58} +func (x *CostInfo) GetTotalPrice() string { + if x != nil { + return x.TotalPrice + } + return "" } -func (x *GetNameResponse) GetName() []string { +func (x *CostInfo) GetUsedDepartment() string { if x != nil { - return x.Name + return x.UsedDepartment } - return nil + return "" } -type FinancialForm struct { +type InvoiceInfo 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"` - PaymentCompany string `protobuf:"bytes,6,opt,name=PaymentCompany,json=paymentCompany,proto3" json:"PaymentCompany,omitempty"` - TransactionDepartment string `protobuf:"bytes,7,opt,name=TransactionDepartment,json=transactionDepartment,proto3" json:"TransactionDepartment,omitempty"` - Payee string `protobuf:"bytes,8,opt,name=Payee,json=payee,proto3" json:"Payee,omitempty"` - BeneficiaryBank string `protobuf:"bytes,9,opt,name=BeneficiaryBank,json=beneficiaryBank,proto3" json:"BeneficiaryBank,omitempty"` - BankNo string `protobuf:"bytes,10,opt,name=BankNo,json=bankNo,proto3" json:"BankNo,omitempty"` - CostInfo []*CostInfo `protobuf:"bytes,11,rep,name=CostInfo,json=costInfo,proto3" json:"CostInfo,omitempty"` - PaymentMethod string `protobuf:"bytes,12,opt,name=PaymentMethod,json=paymentMethod,proto3" json:"PaymentMethod,omitempty"` - InvoiceInfo []*InvoiceInfo `protobuf:"bytes,13,rep,name=InvoiceInfo,json=invoiceInfo,proto3" json:"InvoiceInfo,omitempty"` + InvoiceDate string `protobuf:"bytes,1,opt,name=InvoiceDate,json=invoiceDate,proto3" json:"InvoiceDate,omitempty"` + InvoiceNo string `protobuf:"bytes,2,opt,name=InvoiceNo,json=invoiceNo,proto3" json:"InvoiceNo,omitempty"` + InvoiceProvider string `protobuf:"bytes,3,opt,name=InvoiceProvider,json=invoiceProvider,proto3" json:"InvoiceProvider,omitempty"` + Amount string `protobuf:"bytes,4,opt,name=Amount,json=amount,proto3" json:"Amount,omitempty"` + UseTo string `protobuf:"bytes,5,opt,name=UseTo,json=useTo,proto3" json:"UseTo,omitempty"` + Applicant string `protobuf:"bytes,6,opt,name=Applicant,json=applicant,proto3" json:"Applicant,omitempty"` + PaymentMethod string `protobuf:"bytes,7,opt,name=PaymentMethod,json=paymentMethod,proto3" json:"PaymentMethod,omitempty"` + PaymentObj string `protobuf:"bytes,8,opt,name=PaymentObj,json=paymentObj,proto3" json:"PaymentObj,omitempty"` + InvoiceType string `protobuf:"bytes,9,opt,name=InvoiceType,json=invoiceType,proto3" json:"InvoiceType,omitempty"` + Notes string `protobuf:"bytes,10,opt,name=Notes,json=notes,proto3" json:"Notes,omitempty"` } -func (x *FinancialForm) Reset() { - *x = FinancialForm{} +func (x *InvoiceInfo) Reset() { + *x = InvoiceInfo{} if protoimpl.UnsafeEnabled { - mi := &file_api_approval_approval_proto_msgTypes[59] + mi := &file_api_approval_approval_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *FinancialForm) String() string { +func (x *InvoiceInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FinancialForm) ProtoMessage() {} +func (*InvoiceInfo) ProtoMessage() {} -func (x *FinancialForm) ProtoReflect() protoreflect.Message { - mi := &file_api_approval_approval_proto_msgTypes[59] +func (x *InvoiceInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_approval_approval_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5215,100 +5267,79 @@ func (x *FinancialForm) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use FinancialForm.ProtoReflect.Descriptor instead. -func (*FinancialForm) Descriptor() ([]byte, []int) { - return file_api_approval_approval_proto_rawDescGZIP(), []int{59} -} - -func (x *FinancialForm) GetID() uint64 { - if x != nil { - return x.ID - } - return 0 -} - -func (x *FinancialForm) GetDeletedAt() uint64 { - if x != nil { - return x.DeletedAt - } - return 0 +// Deprecated: Use InvoiceInfo.ProtoReflect.Descriptor instead. +func (*InvoiceInfo) Descriptor() ([]byte, []int) { + return file_api_approval_approval_proto_rawDescGZIP(), []int{60} } -func (x *FinancialForm) GetCreatedAt() string { +func (x *InvoiceInfo) GetInvoiceDate() string { if x != nil { - return x.CreatedAt + return x.InvoiceDate } return "" } -func (x *FinancialForm) GetUpdatedAt() string { +func (x *InvoiceInfo) GetInvoiceNo() string { if x != nil { - return x.UpdatedAt + return x.InvoiceNo } return "" } -func (x *FinancialForm) GetApprovalID() uint64 { - if x != nil { - return x.ApprovalID - } - return 0 -} - -func (x *FinancialForm) GetPaymentCompany() string { +func (x *InvoiceInfo) GetInvoiceProvider() string { if x != nil { - return x.PaymentCompany + return x.InvoiceProvider } return "" } -func (x *FinancialForm) GetTransactionDepartment() string { +func (x *InvoiceInfo) GetAmount() string { if x != nil { - return x.TransactionDepartment + return x.Amount } return "" } -func (x *FinancialForm) GetPayee() string { +func (x *InvoiceInfo) GetUseTo() string { if x != nil { - return x.Payee + return x.UseTo } return "" } -func (x *FinancialForm) GetBeneficiaryBank() string { +func (x *InvoiceInfo) GetApplicant() string { if x != nil { - return x.BeneficiaryBank + return x.Applicant } return "" } -func (x *FinancialForm) GetBankNo() string { +func (x *InvoiceInfo) GetPaymentMethod() string { if x != nil { - return x.BankNo + return x.PaymentMethod } return "" } -func (x *FinancialForm) GetCostInfo() []*CostInfo { +func (x *InvoiceInfo) GetPaymentObj() string { if x != nil { - return x.CostInfo + return x.PaymentObj } - return nil + return "" } -func (x *FinancialForm) GetPaymentMethod() string { +func (x *InvoiceInfo) GetInvoiceType() string { if x != nil { - return x.PaymentMethod + return x.InvoiceType } return "" } -func (x *FinancialForm) GetInvoiceInfo() []*InvoiceInfo { +func (x *InvoiceInfo) GetNotes() string { if x != nil { - return x.InvoiceInfo + return x.Notes } - return nil + return "" } var File_api_approval_approval_proto protoreflect.FileDescriptor @@ -5821,84 +5852,88 @@ var file_api_approval_approval_proto_rawDesc = []byte{ 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, + 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x41, 0x0a, 0x09, 0x41, 0x70, 0x70, + 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x6f, + 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x12, 0x0c, + 0x0a, 0x01, 0x4d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x6d, 0x22, 0xbe, 0x03, 0x0a, + 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x4f, 0x41, 0x12, 0x0e, 0x0a, 0x02, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, + 0x6c, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x34, 0x0a, 0x0a, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x41, 0x70, + 0x70, 0x6c, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, + 0x0a, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x30, 0x0a, 0x07, 0x4f, + 0x75, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4f, 0x75, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x41, + 0x70, 0x70, 0x6c, 0x79, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x12, 0x2d, 0x0a, + 0x06, 0x4d, 0x61, 0x6b, 0x65, 0x55, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4d, 0x61, 0x6b, 0x65, 0x55, 0x70, 0x41, + 0x70, 0x70, 0x6c, 0x79, 0x52, 0x06, 0x6d, 0x61, 0x6b, 0x65, 0x55, 0x70, 0x12, 0x33, 0x0a, 0x08, + 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x54, 0x75, 0x72, 0x6e, 0x6f, 0x76, + 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x08, 0x74, 0x75, 0x72, 0x6e, 0x6f, 0x76, 0x65, + 0x72, 0x12, 0x33, 0x0a, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x4f, + 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x08, 0x6f, 0x76, + 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x2e, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x52, 0x05, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x22, 0xba, 0x03, + 0x0a, 0x0a, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, + 0x55, 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, + 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, + 0x53, 0x74, 0x61, 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x73, 0x74, 0x61, 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x66, + 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, + 0x66, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, + 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, + 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, + 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x43, 0x6f, + 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x09, 0x63, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x0d, + 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x0d, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0d, 0x61, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x22, 0xa9, 0x04, 0x0a, 0x0c, 0x4f, + 0x75, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x55, + 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, 0x12, + 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x53, + 0x74, 0x61, 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, + 0x74, 0x61, 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x66, 0x66, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x66, + 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, + 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x41, + 0x70, 0x70, 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x33, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, + 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, + 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x48, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x4f, 0x75, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x41, @@ -5912,7 +5947,7 @@ var file_api_approval_approval_proto_rawDesc = []byte{ 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, + 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x22, 0xd0, 0x03, 0x0a, 0x0b, 0x4d, 0x61, 0x6b, 0x65, 0x55, 0x70, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, @@ -5929,84 +5964,54 @@ var file_api_approval_approval_proto_rawDesc = []byte{ 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, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x33, 0x0a, 0x0a, + 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x6c, + 0x79, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x09, 0x43, 0x6f, 0x70, + 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, + 0x52, 0x09, 0x63, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x0d, 0x41, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x0e, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x22, 0x98, 0x04, 0x0a, 0x0d, 0x54, 0x75, + 0x72, 0x6e, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x55, + 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, 0x12, + 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x53, + 0x74, 0x61, 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, + 0x74, 0x61, 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x66, 0x66, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x66, + 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, + 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x41, + 0x70, 0x70, 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x48, 0x61, 0x6e, 0x64, 0x6f, 0x76, 0x65, 0x72, 0x55, 0x49, 0x44, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x68, 0x61, 0x6e, 0x64, 0x6f, 0x76, 0x65, 0x72, + 0x55, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x48, 0x61, 0x6e, 0x64, 0x6f, 0x76, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x68, 0x61, 0x6e, 0x64, 0x6f, + 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x6c, 0x79, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, + 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, - 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, + 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, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 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, 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, + 0x73, 0x65, 0x72, 0x73, 0x22, 0xe8, 0x03, 0x0a, 0x0d, 0x4f, 0x76, 0x65, 0x72, 0x54, 0x69, 0x6d, + 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x66, 0x66, 0x4e, @@ -6022,11 +6027,41 @@ var file_api_approval_approval_proto_rawDesc = []byte{ 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, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x33, 0x0a, 0x0a, + 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x6c, + 0x79, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x48, 0x6f, 0x75, + 0x72, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x12, + 0x30, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x0e, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x6f, + 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x70, 0x79, 0x55, 0x73, 0x65, 0x72, + 0x73, 0x12, 0x3c, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, + 0x72, 0x73, 0x18, 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, + 0xf4, 0x03, 0x0a, 0x05, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x55, 0x55, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x55, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, + 0x08, 0x53, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x73, 0x74, 0x61, 0x66, 0x66, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x61, + 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, + 0x66, 0x66, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x66, 0x66, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x66, 0x66, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, + 0x74, 0x55, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x61, + 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x70, 0x70, + 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, + 0x70, 0x6c, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x33, 0x0a, 0x0a, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, + 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x48, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x79, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x02, @@ -6037,76 +6072,76 @@ var file_api_approval_approval_proto_rawDesc = []byte{ 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, - 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x22, 0xc8, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x50, 0x72, - 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x12, - 0x18, 0x0a, 0x07, 0x43, 0x6f, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x07, 0x63, 0x6f, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, - 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x55, 0x73, 0x65, - 0x64, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x64, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x22, 0xc1, 0x02, 0x0a, 0x0b, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x44, - 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x4e, 0x6f, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x4e, - 0x6f, 0x12, 0x28, 0x0a, 0x0f, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x6e, 0x76, 0x6f, - 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x41, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x55, 0x73, 0x65, 0x54, 0x6f, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x75, 0x73, 0x65, 0x54, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1e, 0x0a, - 0x0a, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x62, 0x6a, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x62, 0x6a, 0x12, 0x20, 0x0a, - 0x0b, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x22, 0x32, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x22, 0x25, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0xde, 0x03, 0x0a, 0x0d, 0x46, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x46, 0x6f, - 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, - 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a, - 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, - 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x12, 0x34, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, - 0x79, 0x65, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x79, 0x65, 0x65, - 0x12, 0x28, 0x0a, 0x0f, 0x42, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x63, 0x69, 0x61, 0x72, 0x79, 0x42, - 0x61, 0x6e, 0x6b, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x65, 0x6e, 0x65, 0x66, - 0x69, 0x63, 0x69, 0x61, 0x72, 0x79, 0x42, 0x61, 0x6e, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x61, - 0x6e, 0x6b, 0x4e, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x61, 0x6e, 0x6b, - 0x4e, 0x6f, 0x12, 0x2e, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0b, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, - 0x43, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x63, 0x6f, 0x73, 0x74, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x37, 0x0a, 0x0b, 0x49, 0x6e, 0x76, 0x6f, - 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x32, 0xf1, 0x0c, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x3f, + 0x6c, 0x55, 0x73, 0x65, 0x72, 0x73, 0x22, 0x32, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x22, 0x25, 0x0a, 0x0f, 0x47, 0x65, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0xde, 0x03, 0x0a, 0x0d, 0x46, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x46, + 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x02, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x1c, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1e, 0x0a, + 0x0a, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x26, 0x0a, + 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x12, 0x34, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, + 0x61, 0x79, 0x65, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x79, 0x65, + 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x42, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x63, 0x69, 0x61, 0x72, 0x79, + 0x42, 0x61, 0x6e, 0x6b, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x65, 0x6e, 0x65, + 0x66, 0x69, 0x63, 0x69, 0x61, 0x72, 0x79, 0x42, 0x61, 0x6e, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x42, + 0x61, 0x6e, 0x6b, 0x4e, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x61, 0x6e, + 0x6b, 0x4e, 0x6f, 0x12, 0x2e, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x18, + 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x2e, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x63, 0x6f, 0x73, 0x74, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x37, 0x0a, 0x0b, 0x49, 0x6e, 0x76, + 0x6f, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x22, 0xc8, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x20, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x55, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x63, 0x6f, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x43, + 0x6f, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, 0x6f, + 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, + 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x64, 0x44, 0x65, 0x70, + 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x75, + 0x73, 0x65, 0x64, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xc1, 0x02, + 0x0a, 0x0b, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x20, 0x0a, + 0x0b, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x12, 0x28, 0x0a, + 0x0f, 0x49, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x55, 0x73, 0x65, 0x54, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x75, 0x73, 0x65, 0x54, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x62, 0x6a, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, + 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x62, 0x6a, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x6e, 0x76, + 0x6f, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x69, 0x6e, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4e, + 0x6f, 0x74, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, + 0x73, 0x32, 0xf1, 0x0c, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x3f, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x2e, 0x41, 0x70, 0x70, @@ -6225,7 +6260,7 @@ func file_api_approval_approval_proto_rawDescGZIP() []byte { return file_api_approval_approval_proto_rawDescData } -var file_api_approval_approval_proto_msgTypes = make([]protoimpl.MessageInfo, 60) +var file_api_approval_approval_proto_msgTypes = make([]protoimpl.MessageInfo, 61) var file_api_approval_approval_proto_goTypes = []interface{}{ (*CommonResponse)(nil), // 0: approval.CommonResponse (*ChangeBundlePayRequest)(nil), // 1: approval.ChangeBundlePayRequest @@ -6275,18 +6310,19 @@ var file_api_approval_approval_proto_goTypes = []interface{}{ (*SettingRequest)(nil), // 45: approval.SettingRequest (*DetailSettingRequest)(nil), // 46: approval.DetailSettingRequest (*SettingResponse)(nil), // 47: approval.SettingResponse - (*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 - (*CostInfo)(nil), // 55: approval.CostInfo - (*InvoiceInfo)(nil), // 56: approval.InvoiceInfo - (*GetNameRequest)(nil), // 57: approval.GetNameRequest - (*GetNameResponse)(nil), // 58: approval.GetNameResponse - (*FinancialForm)(nil), // 59: approval.FinancialForm + (*ApplyTime)(nil), // 48: approval.ApplyTime + (*ApprovalOA)(nil), // 49: approval.ApprovalOA + (*LeaveApply)(nil), // 50: approval.LeaveApply + (*OutWorkApply)(nil), // 51: approval.OutWorkApply + (*MakeUpApply)(nil), // 52: approval.MakeUpApply + (*TurnoverApply)(nil), // 53: approval.TurnoverApply + (*OverTimeApply)(nil), // 54: approval.OverTimeApply + (*Leave)(nil), // 55: approval.Leave + (*GetNameRequest)(nil), // 56: approval.GetNameRequest + (*GetNameResponse)(nil), // 57: approval.GetNameResponse + (*FinancialForm)(nil), // 58: approval.FinancialForm + (*CostInfo)(nil), // 59: approval.CostInfo + (*InvoiceInfo)(nil), // 60: approval.InvoiceInfo } var file_api_approval_approval_proto_depIdxs = []int32{ 4, // 0: approval.CreateTypeRequest.KeyInfos:type_name -> approval.KeyInfo @@ -6310,82 +6346,87 @@ var file_api_approval_approval_proto_depIdxs = []int32{ 35, // 18: approval.CreateRequest.WorkFlows:type_name -> approval.WorkFlow 4, // 19: approval.CreateRequest.CustomizeInfo:type_name -> approval.KeyInfo 33, // 20: approval.CreateRequest.BundlePayPrice:type_name -> approval.BundlePayPrice - 48, // 21: approval.CreateRequest.ApprovalOA:type_name -> approval.ApprovalOA - 59, // 22: approval.CreateRequest.FinancialForm:type_name -> approval.FinancialForm + 49, // 21: approval.CreateRequest.ApprovalOA:type_name -> approval.ApprovalOA + 58, // 22: approval.CreateRequest.FinancialForm:type_name -> approval.FinancialForm 43, // 23: approval.SettingRequest.CopyUsers:type_name -> approval.CopyUser 44, // 24: approval.SettingRequest.ApprovalUsers:type_name -> approval.ApprovalUser 4, // 25: approval.SettingRequest.CustomizeInfo:type_name -> approval.KeyInfo - 49, // 26: approval.ApprovalOA.LeaveApply:type_name -> approval.LeaveApply - 50, // 27: approval.ApprovalOA.OutWork:type_name -> approval.OutWorkApply - 51, // 28: approval.ApprovalOA.MakeUp:type_name -> approval.MakeUpApply - 52, // 29: approval.ApprovalOA.Turnover:type_name -> approval.TurnoverApply - 53, // 30: approval.ApprovalOA.OverTime:type_name -> approval.OverTimeApply - 54, // 31: approval.ApprovalOA.Leave:type_name -> approval.Leave + 50, // 26: approval.ApprovalOA.LeaveApply:type_name -> approval.LeaveApply + 51, // 27: approval.ApprovalOA.OutWork:type_name -> approval.OutWorkApply + 52, // 28: approval.ApprovalOA.MakeUp:type_name -> approval.MakeUpApply + 53, // 29: approval.ApprovalOA.Turnover:type_name -> approval.TurnoverApply + 54, // 30: approval.ApprovalOA.OverTime:type_name -> approval.OverTimeApply + 55, // 31: approval.ApprovalOA.Leave:type_name -> approval.Leave 43, // 32: approval.LeaveApply.CopyUsers:type_name -> approval.CopyUser 44, // 33: approval.LeaveApply.ApprovalUsers:type_name -> approval.ApprovalUser - 43, // 34: approval.OutWorkApply.CopyUsers:type_name -> approval.CopyUser - 44, // 35: approval.OutWorkApply.ApprovalUsers:type_name -> approval.ApprovalUser - 43, // 36: approval.MakeUpApply.CopyUsers:type_name -> approval.CopyUser - 44, // 37: approval.MakeUpApply.ApprovalUsers:type_name -> approval.ApprovalUser - 43, // 38: approval.TurnoverApply.CopyUsers:type_name -> approval.CopyUser - 44, // 39: approval.TurnoverApply.ApprovalUsers:type_name -> approval.ApprovalUser - 43, // 40: approval.OverTimeApply.CopyUsers:type_name -> approval.CopyUser - 44, // 41: approval.OverTimeApply.ApprovalUsers:type_name -> approval.ApprovalUser - 43, // 42: approval.Leave.CopyUsers:type_name -> approval.CopyUser - 44, // 43: approval.Leave.ApprovalUsers:type_name -> approval.ApprovalUser - 55, // 44: approval.FinancialForm.CostInfo:type_name -> approval.CostInfo - 56, // 45: approval.FinancialForm.InvoiceInfo:type_name -> approval.InvoiceInfo - 34, // 46: approval.Approval.Create:input_type -> approval.CreateRequest - 7, // 47: approval.Approval.UsedNumByUser:input_type -> approval.UsedNumByUserRequest - 5, // 48: approval.Approval.UpdateExhibitionApplyID:input_type -> approval.UpdateEhApplyIDRequest - 36, // 49: approval.Approval.Detail:input_type -> approval.DetailRequest - 34, // 50: approval.Approval.Update:input_type -> approval.CreateRequest - 37, // 51: approval.Approval.Remove:input_type -> approval.RemoveRequest - 19, // 52: approval.Approval.MyWork:input_type -> approval.ListRequest - 19, // 53: approval.Approval.MySubmit:input_type -> approval.ListRequest - 9, // 54: approval.Approval.NowLevelByInfo:input_type -> approval.NowLevelByInfoRequest - 22, // 55: approval.Approval.Information:input_type -> approval.InformationRequest - 21, // 56: approval.Approval.Viewed:input_type -> approval.ViewedRequest - 17, // 57: approval.Approval.SetStatus:input_type -> approval.StatusRequest - 46, // 58: approval.Approval.DetailSetting:input_type -> approval.DetailSettingRequest - 45, // 59: approval.Approval.UpdateSetting:input_type -> approval.SettingRequest - 2, // 60: approval.Approval.IsExistPayRight:input_type -> approval.IsExistPayRightRequest - 1, // 61: approval.Approval.ChangeBundlePay:input_type -> approval.ChangeBundlePayRequest - 12, // 62: approval.Approval.CreateType:input_type -> approval.CreateTypeRequest - 13, // 63: approval.Approval.DetailType:input_type -> approval.TypeResponse - 12, // 64: approval.Approval.UpdateType:input_type -> approval.CreateTypeRequest - 11, // 65: approval.Approval.AllType:input_type -> approval.CommonRequest - 37, // 66: approval.Approval.RemoveType:input_type -> approval.RemoveRequest - 11, // 67: approval.Approval.AllGroup:input_type -> approval.CommonRequest - 57, // 68: approval.Approval.GetName:input_type -> approval.GetNameRequest - 38, // 69: approval.Approval.Create:output_type -> approval.ApprovalResponse - 8, // 70: approval.Approval.UsedNumByUser:output_type -> approval.UsedNumByUserResponse - 6, // 71: approval.Approval.UpdateExhibitionApplyID:output_type -> approval.UpdateEhApplyIDResponse - 34, // 72: approval.Approval.Detail:output_type -> approval.CreateRequest - 38, // 73: approval.Approval.Update:output_type -> approval.ApprovalResponse - 39, // 74: approval.Approval.Remove:output_type -> approval.RemoveResponse - 20, // 75: approval.Approval.MyWork:output_type -> approval.ListResponse - 20, // 76: approval.Approval.MySubmit:output_type -> approval.ListResponse - 10, // 77: approval.Approval.NowLevelByInfo:output_type -> approval.WorkFlowResponse - 24, // 78: approval.Approval.Information:output_type -> approval.InformationResponse - 38, // 79: approval.Approval.Viewed:output_type -> approval.ApprovalResponse - 18, // 80: approval.Approval.SetStatus:output_type -> approval.StatusResponse - 45, // 81: approval.Approval.DetailSetting:output_type -> approval.SettingRequest - 47, // 82: approval.Approval.UpdateSetting:output_type -> approval.SettingResponse - 3, // 83: approval.Approval.IsExistPayRight:output_type -> approval.IsExistPayRightResponse - 0, // 84: approval.Approval.ChangeBundlePay:output_type -> approval.CommonResponse - 13, // 85: approval.Approval.CreateType:output_type -> approval.TypeResponse - 12, // 86: approval.Approval.DetailType:output_type -> approval.CreateTypeRequest - 13, // 87: approval.Approval.UpdateType:output_type -> approval.TypeResponse - 14, // 88: approval.Approval.AllType:output_type -> approval.AllTypeResponse - 18, // 89: approval.Approval.RemoveType:output_type -> approval.StatusResponse - 16, // 90: approval.Approval.AllGroup:output_type -> approval.AllGroupResponse - 58, // 91: approval.Approval.GetName:output_type -> approval.GetNameResponse - 69, // [69:92] is the sub-list for method output_type - 46, // [46:69] is the sub-list for method input_type - 46, // [46:46] is the sub-list for extension type_name - 46, // [46:46] is the sub-list for extension extendee - 0, // [0:46] is the sub-list for field type_name + 48, // 34: approval.OutWorkApply.ApplyTimes:type_name -> approval.ApplyTime + 43, // 35: approval.OutWorkApply.CopyUsers:type_name -> approval.CopyUser + 44, // 36: approval.OutWorkApply.ApprovalUsers:type_name -> approval.ApprovalUser + 48, // 37: approval.MakeUpApply.ApplyTimes:type_name -> approval.ApplyTime + 43, // 38: approval.MakeUpApply.CopyUsers:type_name -> approval.CopyUser + 44, // 39: approval.MakeUpApply.ApprovalUsers:type_name -> approval.ApprovalUser + 48, // 40: approval.TurnoverApply.ApplyTimes:type_name -> approval.ApplyTime + 43, // 41: approval.TurnoverApply.CopyUsers:type_name -> approval.CopyUser + 44, // 42: approval.TurnoverApply.ApprovalUsers:type_name -> approval.ApprovalUser + 48, // 43: approval.OverTimeApply.ApplyTimes:type_name -> approval.ApplyTime + 43, // 44: approval.OverTimeApply.CopyUsers:type_name -> approval.CopyUser + 44, // 45: approval.OverTimeApply.ApprovalUsers:type_name -> approval.ApprovalUser + 48, // 46: approval.Leave.ApplyTimes:type_name -> approval.ApplyTime + 43, // 47: approval.Leave.CopyUsers:type_name -> approval.CopyUser + 44, // 48: approval.Leave.ApprovalUsers:type_name -> approval.ApprovalUser + 59, // 49: approval.FinancialForm.CostInfo:type_name -> approval.CostInfo + 60, // 50: approval.FinancialForm.InvoiceInfo:type_name -> approval.InvoiceInfo + 34, // 51: approval.Approval.Create:input_type -> approval.CreateRequest + 7, // 52: approval.Approval.UsedNumByUser:input_type -> approval.UsedNumByUserRequest + 5, // 53: approval.Approval.UpdateExhibitionApplyID:input_type -> approval.UpdateEhApplyIDRequest + 36, // 54: approval.Approval.Detail:input_type -> approval.DetailRequest + 34, // 55: approval.Approval.Update:input_type -> approval.CreateRequest + 37, // 56: approval.Approval.Remove:input_type -> approval.RemoveRequest + 19, // 57: approval.Approval.MyWork:input_type -> approval.ListRequest + 19, // 58: approval.Approval.MySubmit:input_type -> approval.ListRequest + 9, // 59: approval.Approval.NowLevelByInfo:input_type -> approval.NowLevelByInfoRequest + 22, // 60: approval.Approval.Information:input_type -> approval.InformationRequest + 21, // 61: approval.Approval.Viewed:input_type -> approval.ViewedRequest + 17, // 62: approval.Approval.SetStatus:input_type -> approval.StatusRequest + 46, // 63: approval.Approval.DetailSetting:input_type -> approval.DetailSettingRequest + 45, // 64: approval.Approval.UpdateSetting:input_type -> approval.SettingRequest + 2, // 65: approval.Approval.IsExistPayRight:input_type -> approval.IsExistPayRightRequest + 1, // 66: approval.Approval.ChangeBundlePay:input_type -> approval.ChangeBundlePayRequest + 12, // 67: approval.Approval.CreateType:input_type -> approval.CreateTypeRequest + 13, // 68: approval.Approval.DetailType:input_type -> approval.TypeResponse + 12, // 69: approval.Approval.UpdateType:input_type -> approval.CreateTypeRequest + 11, // 70: approval.Approval.AllType:input_type -> approval.CommonRequest + 37, // 71: approval.Approval.RemoveType:input_type -> approval.RemoveRequest + 11, // 72: approval.Approval.AllGroup:input_type -> approval.CommonRequest + 56, // 73: approval.Approval.GetName:input_type -> approval.GetNameRequest + 38, // 74: approval.Approval.Create:output_type -> approval.ApprovalResponse + 8, // 75: approval.Approval.UsedNumByUser:output_type -> approval.UsedNumByUserResponse + 6, // 76: approval.Approval.UpdateExhibitionApplyID:output_type -> approval.UpdateEhApplyIDResponse + 34, // 77: approval.Approval.Detail:output_type -> approval.CreateRequest + 38, // 78: approval.Approval.Update:output_type -> approval.ApprovalResponse + 39, // 79: approval.Approval.Remove:output_type -> approval.RemoveResponse + 20, // 80: approval.Approval.MyWork:output_type -> approval.ListResponse + 20, // 81: approval.Approval.MySubmit:output_type -> approval.ListResponse + 10, // 82: approval.Approval.NowLevelByInfo:output_type -> approval.WorkFlowResponse + 24, // 83: approval.Approval.Information:output_type -> approval.InformationResponse + 38, // 84: approval.Approval.Viewed:output_type -> approval.ApprovalResponse + 18, // 85: approval.Approval.SetStatus:output_type -> approval.StatusResponse + 45, // 86: approval.Approval.DetailSetting:output_type -> approval.SettingRequest + 47, // 87: approval.Approval.UpdateSetting:output_type -> approval.SettingResponse + 3, // 88: approval.Approval.IsExistPayRight:output_type -> approval.IsExistPayRightResponse + 0, // 89: approval.Approval.ChangeBundlePay:output_type -> approval.CommonResponse + 13, // 90: approval.Approval.CreateType:output_type -> approval.TypeResponse + 12, // 91: approval.Approval.DetailType:output_type -> approval.CreateTypeRequest + 13, // 92: approval.Approval.UpdateType:output_type -> approval.TypeResponse + 14, // 93: approval.Approval.AllType:output_type -> approval.AllTypeResponse + 18, // 94: approval.Approval.RemoveType:output_type -> approval.StatusResponse + 16, // 95: approval.Approval.AllGroup:output_type -> approval.AllGroupResponse + 57, // 96: approval.Approval.GetName:output_type -> approval.GetNameResponse + 74, // [74:97] is the sub-list for method output_type + 51, // [51:74] is the sub-list for method input_type + 51, // [51:51] is the sub-list for extension type_name + 51, // [51:51] is the sub-list for extension extendee + 0, // [0:51] is the sub-list for field type_name } func init() { file_api_approval_approval_proto_init() } @@ -6971,7 +7012,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApprovalOA); i { + switch v := v.(*ApplyTime); i { case 0: return &v.state case 1: @@ -6983,7 +7024,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LeaveApply); i { + switch v := v.(*ApprovalOA); i { case 0: return &v.state case 1: @@ -6995,7 +7036,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OutWorkApply); i { + switch v := v.(*LeaveApply); i { case 0: return &v.state case 1: @@ -7007,7 +7048,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MakeUpApply); i { + switch v := v.(*OutWorkApply); i { case 0: return &v.state case 1: @@ -7019,7 +7060,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TurnoverApply); i { + switch v := v.(*MakeUpApply); i { case 0: return &v.state case 1: @@ -7031,7 +7072,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OverTimeApply); i { + switch v := v.(*TurnoverApply); i { case 0: return &v.state case 1: @@ -7043,7 +7084,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Leave); i { + switch v := v.(*OverTimeApply); i { case 0: return &v.state case 1: @@ -7055,7 +7096,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CostInfo); i { + switch v := v.(*Leave); i { case 0: return &v.state case 1: @@ -7067,7 +7108,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InvoiceInfo); i { + switch v := v.(*GetNameRequest); i { case 0: return &v.state case 1: @@ -7079,7 +7120,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetNameRequest); i { + switch v := v.(*GetNameResponse); i { case 0: return &v.state case 1: @@ -7091,7 +7132,7 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetNameResponse); i { + switch v := v.(*FinancialForm); i { case 0: return &v.state case 1: @@ -7103,7 +7144,19 @@ func file_api_approval_approval_proto_init() { } } file_api_approval_approval_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FinancialForm); i { + switch v := v.(*CostInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_approval_approval_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InvoiceInfo); i { case 0: return &v.state case 1: @@ -7121,7 +7174,7 @@ func file_api_approval_approval_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_approval_approval_proto_rawDesc, NumEnums: 0, - NumMessages: 60, + NumMessages: 61, NumExtensions: 0, NumServices: 1, }, diff --git a/api/approval/approval.proto b/api/approval/approval.proto index c237426..74e10fb 100644 --- a/api/approval/approval.proto +++ b/api/approval/approval.proto @@ -425,6 +425,12 @@ message SettingResponse { // oa审批 +message ApplyTime { + string Date = 1 [json_name = "date"]; + string Hour = 2 [json_name = "hour"]; + string M = 3 [json_name = "m"]; +} + message ApprovalOA { uint64 ID=1 [json_name = "ID"]; uint64 DeletedAt=2 [json_name = "deletedAt"]; @@ -465,8 +471,7 @@ message OutWorkApply { 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"]; + repeated ApplyTime ApplyTimes = 10 [json_name = "applyTimes"]; string Reason = 12 [json_name = "reason"]; float Hours = 13 [json_name = "hours"]; string OutWorkAddress = 14 [json_name = "outWorkAddress"]; @@ -485,8 +490,7 @@ message MakeUpApply { 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"]; + repeated ApplyTime ApplyTimes = 10 [json_name = "applyTimes"]; string Reason = 12 [json_name = "reason"]; repeated CopyUser CopyUsers = 13 [json_name = "copyUsers"]; repeated ApprovalUser ApprovalUsers = 14 [json_name = "approvalUsers"]; @@ -504,7 +508,7 @@ message TurnoverApply { int32 Status = 9 [json_name = "status"]; string HandoverUID = 10 [json_name = "handoverUID"]; string HandoverName = 11 [json_name = "handoverName"]; - string TurnoverTime = 12 [json_name = "turnoverTime"]; + repeated ApplyTime ApplyTimes = 12 [json_name = "applyTimes"]; string Reason = 13 [json_name = "reason"]; repeated CopyUser CopyUsers = 14 [json_name = "copyUsers"]; repeated ApprovalUser ApprovalUsers = 15 [json_name = "approvalUsers"]; @@ -520,8 +524,7 @@ message OverTimeApply { 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"]; + repeated ApplyTime ApplyTimes = 10 [json_name = "applyTimes"]; string Reason = 12 [json_name = "reason"]; float Hours = 13 [json_name = "hours"]; repeated CopyUser CopyUsers = 14 [json_name = "copyUsers"]; @@ -538,8 +541,7 @@ message Leave { 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"]; + repeated ApplyTime ApplyTimes = 10 [json_name = "applyTimes"]; string Reason = 12 [json_name = "reason"]; float Hours = 13 [json_name = "hours"]; float Days = 14 [json_name = "days"]; @@ -547,28 +549,6 @@ message Leave { repeated ApprovalUser ApprovalUsers = 16 [json_name = "approvalUsers"]; } -message CostInfo { - string Description = 1 [json_name = "description"]; - string UnitPrice = 2 [json_name = "unitPrice"]; - string CostUnit = 3 [json_name = "costUnit"]; - int64 CostNum = 4 [json_name = "costNum"]; - string TotalPrice = 5 [json_name = "totalPrice"]; - string UsedDepartment = 6 [json_name = "usedDepartment"]; -} - -message InvoiceInfo { - string InvoiceDate = 1 [json_name = "invoiceDate"]; - string InvoiceNo = 2 [json_name = "invoiceNo"]; - string InvoiceProvider = 3 [json_name = "invoiceProvider"]; - string Amount = 4 [json_name = "amount"]; - string UseTo = 5 [json_name = "useTo"]; - string Applicant = 6 [json_name = "applicant"]; - string PaymentMethod = 7 [json_name = "paymentMethod"]; - string PaymentObj = 8 [json_name = "paymentObj"]; - string InvoiceType = 9 [json_name = "invoiceType"]; - string Notes = 10 [json_name = "notes"]; -} - // 财务报表审批 message GetNameRequest { @@ -593,4 +573,27 @@ message FinancialForm { repeated CostInfo CostInfo = 11 [json_name = "costInfo"]; string PaymentMethod = 12 [json_name = "paymentMethod"]; repeated InvoiceInfo InvoiceInfo = 13 [json_name = "invoiceInfo"]; +} + + +message CostInfo { + string Description = 1 [json_name = "description"]; + string UnitPrice = 2 [json_name = "unitPrice"]; + string CostUnit = 3 [json_name = "costUnit"]; + int64 CostNum = 4 [json_name = "costNum"]; + string TotalPrice = 5 [json_name = "totalPrice"]; + string UsedDepartment = 6 [json_name = "usedDepartment"]; +} + +message InvoiceInfo { + string InvoiceDate = 1 [json_name = "invoiceDate"]; + string InvoiceNo = 2 [json_name = "invoiceNo"]; + string InvoiceProvider = 3 [json_name = "invoiceProvider"]; + string Amount = 4 [json_name = "amount"]; + string UseTo = 5 [json_name = "useTo"]; + string Applicant = 6 [json_name = "applicant"]; + string PaymentMethod = 7 [json_name = "paymentMethod"]; + string PaymentObj = 8 [json_name = "paymentObj"]; + string InvoiceType = 9 [json_name = "invoiceType"]; + string Notes = 10 [json_name = "notes"]; } \ No newline at end of file diff --git a/api/approval/approval.validator.pb.go b/api/approval/approval.validator.pb.go index 9bb2e57..1b84048 100644 --- a/api/approval/approval.validator.pb.go +++ b/api/approval/approval.validator.pb.go @@ -335,6 +335,9 @@ func (this *DetailSettingRequest) Validate() error { func (this *SettingResponse) Validate() error { return nil } +func (this *ApplyTime) Validate() error { + return nil +} func (this *ApprovalOA) Validate() error { if this.LeaveApply != nil { if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.LeaveApply); err != nil { @@ -386,6 +389,13 @@ func (this *LeaveApply) Validate() error { return nil } func (this *OutWorkApply) Validate() error { + for _, item := range this.ApplyTimes { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApplyTimes", err) + } + } + } for _, item := range this.CopyUsers { if item != nil { if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { @@ -403,6 +413,13 @@ func (this *OutWorkApply) Validate() error { return nil } func (this *MakeUpApply) Validate() error { + for _, item := range this.ApplyTimes { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApplyTimes", err) + } + } + } for _, item := range this.CopyUsers { if item != nil { if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { @@ -420,6 +437,13 @@ func (this *MakeUpApply) Validate() error { return nil } func (this *TurnoverApply) Validate() error { + for _, item := range this.ApplyTimes { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApplyTimes", err) + } + } + } for _, item := range this.CopyUsers { if item != nil { if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { @@ -437,6 +461,13 @@ func (this *TurnoverApply) Validate() error { return nil } func (this *OverTimeApply) Validate() error { + for _, item := range this.ApplyTimes { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApplyTimes", err) + } + } + } for _, item := range this.CopyUsers { if item != nil { if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { @@ -454,6 +485,13 @@ func (this *OverTimeApply) Validate() error { return nil } func (this *Leave) Validate() error { + for _, item := range this.ApplyTimes { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("ApplyTimes", err) + } + } + } for _, item := range this.CopyUsers { if item != nil { if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { @@ -470,12 +508,6 @@ func (this *Leave) Validate() error { } return nil } -func (this *CostInfo) Validate() error { - return nil -} -func (this *InvoiceInfo) Validate() error { - return nil -} func (this *GetNameRequest) Validate() error { return nil } @@ -499,3 +531,9 @@ func (this *FinancialForm) Validate() error { } return nil } +func (this *CostInfo) Validate() error { + return nil +} +func (this *InvoiceInfo) Validate() error { + return nil +} diff --git a/pkg/model/approval.go b/pkg/model/approval.go index cd78f51..7a193e7 100644 --- a/pkg/model/approval.go +++ b/pkg/model/approval.go @@ -76,23 +76,6 @@ const ( TypeArtExhibitionReward = "artExhibitionReward" TypeOa = "oa" // oa 父类 - /* 子类 */ - TypeOaLeave = "oa_leave" // 事假 - TypeOaSick = "oa_sick" // 病假 - TypeOaAnnualLeave = "oa_annualLeave" // 年假 - TypeOaDayOff = "oa_dayOff" // 调休 - TypeOaMaritalLeave = "oa_maritalLeave" // 婚假 - TypeOaMatingCheckLeave = "oa_matingCheckLeave" // 孕检假 - TypeOaMaternityLeave = "oa_maternityLeave" // 产假 - TypeOaPaternityLeave = "oa_paternityLeave" // 陪产假 - TypeOaParentalLeave = "oa_parentalLeave" // 育儿假 - TypeOaNursingLeave = "oa_nursingLeave" // 独生子女护理假 - TypeOaFuneralLeave = "oa_funeralLeave" // 丧假 - TypeOaMakeUp = "oa_makeUp" // 补卡 - TypeOaOvertime = "oa_overtime" // 加班 - TypeOaOutwork = "oa_outwork" // 外勤 - TypeOaTurnover = "oa_turnover" // 离职 - /* */ TypeFinancialForm = "financialFormApply" ) @@ -557,7 +540,8 @@ func MyAllWorkApprovals(in *approval.ListRequest) ([]*Approval, int64) { Preload("ExhibitionReward.ApprovalExhibitions"). Preload("ApprovalWorkFlows"). Preload("Exhibition.ApprovalExhibitions"). - Preload("FinancialForm") + Preload("FinancialForm"). + Preload("ApprovalOA") //我未阅读的和我未操作的 DB.Model(&Approval{}).Where(&Approval{Type: in.Type}).Where(&Approval{NowUserId: in.UserID, Status: StatusDoing}).Order("id desc").Select("id").Find(&ids) @@ -595,7 +579,8 @@ func MyApprovalWorkApprovals(in *approval.ListRequest) ([]*Approval, int64) { Preload("ApprovalType.ApprovalTypeGroup"). Preload("ApprovalWorkFlows"). Preload("Exhibition.ApprovalExhibitions"). - Preload("FinancialForm") + Preload("FinancialForm"). + Preload("ApprovalOA") if in.Type != "" { modelObj = modelObj.Where(&Approval{Type: in.Type}) @@ -653,7 +638,8 @@ func MyWorkApprovals(in *approval.ListRequest) ([]*Approval, int64) { Preload("ExhibitionReward.ApprovalExhibitions"). Preload("ApprovalWorkFlows"). Preload("Exhibition.ApprovalExhibitions"). - Preload("FinancialForm") + Preload("FinancialForm"). + Preload("ApprovalOA") if in.Type != "" { modelObj = modelObj.Where(&Approval{Type: in.Type}) @@ -710,7 +696,8 @@ func MySubmitApprovals(in *approval.ListRequest) ([]*Approval, int64) { Preload("ExhibitionReward.ApprovalExhibitions"). Preload("ApprovalType.ApprovalTypeGroup"). Preload("Exhibition.ApprovalExhibitions"). - Preload("FinancialForm") + Preload("FinancialForm"). + Preload("ApprovalOA") if in.Status != 0 { modelObj = modelObj.Where(&Approval{Status: int8(in.Status)}) @@ -743,7 +730,8 @@ func MyReadApprovals(in *approval.ListRequest) ([]*Approval, int64) { Preload("ExhibitionReward.ApprovalExhibitions"). Preload("ApprovalType.ApprovalTypeGroup"). Preload("Exhibition.ApprovalExhibitions"). - Preload("FinancialForm") + Preload("FinancialForm"). + Preload("ApprovalOA") if in.Type != "" { modelObj = modelObj.Where(&Approval{Type: in.Type}) @@ -834,11 +822,10 @@ func getApprovalContentFactory(typeFiled string) (ApprovalContentInterface, erro case TypeFinancialForm: return &FinancialForm{}, nil default: - v, _ := TypeMap[typeFiled] - if v == "oa" { + if TypeMap[typeFiled] == TypeOa { return &ApprovalOA{}, nil } else { - return &Approval{}, nil + return nil, errors.New("无法识别的审批类型") } } } diff --git a/pkg/model/approval_oa.go b/pkg/model/approval_oa.go index 57b1ebb..5f93c0c 100644 --- a/pkg/model/approval_oa.go +++ b/pkg/model/approval_oa.go @@ -16,12 +16,12 @@ type ApprovalOA struct { 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 *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 @@ -52,8 +52,7 @@ type OutWorkApply struct { 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:结束时间"` + ApplyTimes ApplyTimes `json:"applyTimes" gorm:"column:apply_times;type:json;comment:时间"` Hours float32 `json:"hours" gorm:"column:hours;type:decimal(10,2);comment:时长(小时)"` OutWorkAddress string `json:"outWorkAddress" gorm:"column:out_work_address;type:varchar(255);comment:外勤地址"` Vehicle string `json:"vehicle" gorm:"column:vehicle;type:varchar(255);comment:交通工具"` @@ -74,8 +73,7 @@ type MakeUpApply struct { 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:补卡时间"` + ApplyTimes ApplyTimes `json:"applyTimes" gorm:"column:apply_times;type:json;comment:时间"` Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:理由"` ApprovalID string `json:"approvalID" gorm:"column:approval_id;type:varchar(255);comment:审批系统中的approvalID"` Status int32 `json:"status" gorm:"column:status;type:int;comment:状态(目前和审批系统状态同步)"` @@ -96,7 +94,7 @@ type TurnoverApply struct { 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:离职时间"` + ApplyTimes ApplyTimes `json:"applyTimes" gorm:"column:apply_times;type:json;comment:时间"` ApprovalID string `json:"approvalID" gorm:"column:approval_id;type:varchar(255);comment:审批系统中的approvalID"` Status int32 `json:"status" gorm:"column:status;type:int;comment:状态(目前和审批系统状态同步)"` ApprovalUsers ApprovalUsers `json:"approvalUsers" gorm:"column:approval_users;type:json;comment:审批人"` @@ -114,8 +112,7 @@ type OverTimeApply struct { 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:结束时间"` + ApplyTimes ApplyTimes `json:"applyTimes" gorm:"column:apply_times;type:json;comment:时间"` Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:理由"` Hours float32 `json:"hours" gorm:"column:hours;type:decimal(10,2);comment:时长(小时)"` Status int32 `json:"status" gorm:"column:status;type:int;comment:状态(目前和审批系统状态同步)"` @@ -134,8 +131,7 @@ type Leave struct { 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:结束时间"` + ApplyTimes ApplyTimes `json:"applyTimes" gorm:"column:apply_times;type:json;comment:时间"` Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:理由"` Hours float32 `json:"hours" gorm:"column:hours;type:decimal(10,2);comment:时长(小时)"` Days float32 `json:"days" gorm:"column:days;type:decimal(10,2);comment:时长(天)"` @@ -146,6 +142,14 @@ type Leave struct { type VerifyFiles []string +type ApplyTime struct { + Date string `json:"date"` // 日期 2023-05-08 + Hour string `json:"hour"` // 时间 09:00 + M string `json:"m"` // 上午|下午 +} + +type ApplyTimes []ApplyTime + var sonMap = map[string]string{ "leave": "leave", // 事假 "sick": "leave", // 病假 @@ -194,17 +198,25 @@ func (oa *ApprovalOA) GetApproval(id uint64) (*Approval, error) { func (oa *ApprovalOA) SaveApprovalContent(in *approval.CreateRequest, a *Approval) error { + if err := oa.copyOAToModel(in, a); err != nil { + return err + } + + return DB.Create(&oa).Error +} + +func (oa *ApprovalOA) copyOAToModel(in *approval.CreateRequest, a *Approval) error { copier.CopyWithOption(&oa, in.ApprovalOA, copier.Option{DeepCopy: true}) oa.ApprovalID = a.ID - if err := oa.addOtherInfo(a); err != nil { + if err := oa.addOtherInfoToModel(in, a); err != nil { return err } - return DB.Create(&oa).Error + return nil } -func (oa *ApprovalOA) addOtherInfo(a *Approval) error { +func (oa *ApprovalOA) addOtherInfoToModel(in *approval.CreateRequest, a *Approval) error { if v, ok := sonMap[a.ApprovalType.KeyWord]; ok { switch v { case "leave": @@ -215,30 +227,80 @@ func (oa *ApprovalOA) addOtherInfo(a *Approval) error { } oa.Leave.ApprovalID = strconv.FormatUint(a.ID, 10) oa.Leave.Status = int32(a.Status) + + applyTimes := make([]ApplyTime, 0) + for i := 0; i < len(in.ApprovalOA.Leave.ApplyTimes); i++ { + applyTimes = append(applyTimes, ApplyTime{ + Date: in.ApprovalOA.Leave.ApplyTimes[i].Date, + Hour: in.ApprovalOA.Leave.ApplyTimes[i].Hour, + M: in.ApprovalOA.Leave.ApplyTimes[i].M, + }) + } + oa.Leave.ApplyTimes = applyTimes case "makeUp": oa.MakeUp.ApprovalUsers = a.ApprovalUsers oa.MakeUp.CopyUsers = a.CopyUsers oa.MakeUp.ApplyType = a.ApprovalType.KeyWord oa.MakeUp.ApprovalID = strconv.FormatUint(a.ID, 10) oa.MakeUp.Status = int32(a.Status) + + applyTimes := make([]ApplyTime, 0) + for i := 0; i < len(in.ApprovalOA.MakeUp.ApplyTimes); i++ { + applyTimes = append(applyTimes, ApplyTime{ + Date: in.ApprovalOA.MakeUp.ApplyTimes[i].Date, + Hour: in.ApprovalOA.MakeUp.ApplyTimes[i].Hour, + M: in.ApprovalOA.MakeUp.ApplyTimes[i].M, + }) + } + oa.MakeUp.ApplyTimes = applyTimes case "overTime": oa.OverTime.ApprovalUsers = a.ApprovalUsers oa.OverTime.CopyUsers = a.CopyUsers oa.OverTime.ApplyType = a.ApprovalType.KeyWord oa.OverTime.ApprovalID = strconv.FormatUint(a.ID, 10) oa.OverTime.Status = int32(a.Status) + + applyTimes := make([]ApplyTime, 0) + for i := 0; i < len(in.ApprovalOA.OverTime.ApplyTimes); i++ { + applyTimes = append(applyTimes, ApplyTime{ + Date: in.ApprovalOA.OverTime.ApplyTimes[i].Date, + Hour: in.ApprovalOA.OverTime.ApplyTimes[i].Hour, + M: in.ApprovalOA.OverTime.ApplyTimes[i].M, + }) + } + oa.OverTime.ApplyTimes = applyTimes case "outWork": oa.OutWork.ApprovalUsers = a.ApprovalUsers oa.OutWork.CopyUsers = a.CopyUsers oa.OutWork.ApplyType = a.ApprovalType.KeyWord oa.OutWork.ApprovalID = strconv.FormatUint(a.ID, 10) oa.OutWork.Status = int32(a.Status) + + applyTimes := make([]ApplyTime, 0) + for i := 0; i < len(in.ApprovalOA.OutWork.ApplyTimes); i++ { + applyTimes = append(applyTimes, ApplyTime{ + Date: in.ApprovalOA.OutWork.ApplyTimes[i].Date, + Hour: in.ApprovalOA.OutWork.ApplyTimes[i].Hour, + M: in.ApprovalOA.OutWork.ApplyTimes[i].M, + }) + } + oa.OutWork.ApplyTimes = applyTimes case "turnover": oa.Turnover.ApprovalUsers = a.ApprovalUsers oa.Turnover.CopyUsers = a.CopyUsers oa.Turnover.ApplyType = a.ApprovalType.KeyWord oa.Turnover.ApprovalID = strconv.FormatUint(a.ID, 10) oa.Turnover.Status = int32(a.Status) + + applyTimes := make([]ApplyTime, 0) + for i := 0; i < len(in.ApprovalOA.Turnover.ApplyTimes); i++ { + applyTimes = append(applyTimes, ApplyTime{ + Date: in.ApprovalOA.Turnover.ApplyTimes[i].Date, + Hour: in.ApprovalOA.Turnover.ApplyTimes[i].Hour, + M: in.ApprovalOA.Turnover.ApplyTimes[i].M, + }) + } + oa.Turnover.ApplyTimes = applyTimes case "leaveApply": oa.LeaveApply.ApprovalUsers = a.ApprovalUsers oa.LeaveApply.CopyUsers = a.CopyUsers @@ -262,11 +324,51 @@ func (oa *ApprovalOA) UpdateApprovalContent(in *approval.CreateRequest, a *Appro oa.ID = entity.ID + if err := oa.copyOAToModel(in, a); err != nil { + return err + } + return DB.Model(&oa).Updates(oa).Error } func (oa *ApprovalOA) BuildResContent(a *Approval, request *approval.CreateRequest) { + if err := oa.copyOAToRpc(a, request); err != nil { + return + } +} + +func (oa *ApprovalOA) copyOAToRpc(a *Approval, in *approval.CreateRequest) error { + copier.CopyWithOption(&in.ApprovalOA, a, copier.Option{DeepCopy: true}) + + if err := oa.addOtherInfoToRpc(a, in); err != nil { + return err + } + + return nil +} +func (oa *ApprovalOA) addOtherInfoToRpc(a *Approval, in *approval.CreateRequest) error { + if oa.Leave != nil { + copier.CopyWithOption(&a.ApprovalOA.Leave.ApplyTimes, in.ApprovalOA.Leave.ApplyTimes, copier.Option{DeepCopy: true}) + } + + if oa.MakeUp != nil { + copier.CopyWithOption(&a.ApprovalOA.MakeUp.ApplyTimes, in.ApprovalOA.MakeUp.ApplyTimes, copier.Option{DeepCopy: true}) + } + + if oa.Turnover != nil { + copier.CopyWithOption(&a.ApprovalOA.Turnover.ApplyTimes, in.ApprovalOA.Turnover.ApplyTimes, copier.Option{DeepCopy: true}) + } + + if oa.OverTime != nil { + copier.CopyWithOption(&a.ApprovalOA.OverTime.ApplyTimes, in.ApprovalOA.OverTime.ApplyTimes, copier.Option{DeepCopy: true}) + } + + if oa.OutWork != nil { + copier.CopyWithOption(&a.ApprovalOA.OutWork.ApplyTimes, in.ApprovalOA.OutWork.ApplyTimes, copier.Option{DeepCopy: true}) + } + + return nil } func (oa *ApprovalOA) DeleteApproval(p *Approval) error { diff --git a/pkg/model/migration.go b/pkg/model/migration.go index 5c3abe9..e7bfcc1 100644 --- a/pkg/model/migration.go +++ b/pkg/model/migration.go @@ -14,7 +14,9 @@ func migration() { addTable(&ApprovalReward{}) addTable(&FinancialFormSetting{}) // 财务报表审批 设置信息 - addTable(&FinancialForm{}) // 财务报表审批 设置信息 + addTable(&FinancialForm{}) // 财务报表审批 + + addTable(&ApprovalOA{}) // OA //增加字段 addColumn(&ApprovalType{}, "is_normal")