package production import ( "shylinux.com/x/ice" kit "shylinux.com/x/toolkits" "shylinux.com/x/operation/src/production/model" ) type Issue struct { Table order string `data:"2"` fields string `data:"updated_at,title,content,issue_type,level,status,price,score,link,design_count,task_count,begin_time,end_time,process_time,finish_time,plan_uid,story_uid,user_uid"` create string `name:"create plan_uid*:select title* content* issue_type:select level:selelt price=1000 begin_time:select@date end_time:select@date" role:"worker"` modify string `name:"modify title* content* price* link begin_time:select@date end_time:select@date" role:"worker"` designCreate string `name:"designCreate title* content* price=1000 begin_time:select@date end_time:select@date" role:"worker"` taskCreate string `name:"taskCreate title* content* space path begin_time:select@date end_time:select@date" role:"worker"` bindPlan string `name:"bindPlan plan_uid*:select"` } func (s Issue) Create(m *ice.Message, arg ...string) { s.ValueCreate(m, kit.ArgDef(arg, kit.Simple(model.ISSUE_TYPE, IssueFeature, model.LEVEL, Level3, model.PRICE, "1000", model.BEGIN_TIME, m.Time(), model.END_TIME, m.Time("72h"))...)...) s.SendMessage(s.GetCommandUID(m), "", "") s.planCount(m).DashboardUpdate(m) } func (s Issue) Remove(m *ice.Message, arg ...string) { s.ValueRemove(m, arg...) s.planCount(m).DashboardUpdate(m) } func (s Issue) Reject(m *ice.Message, arg ...string) { s.changeStatus(m, IssueCreate, IssueRejected) s.planCount(m).DashboardUpdate(m) } func (s Issue) Cancel(m *ice.Message, arg ...string) { s.ChangeStatus(m, int(IssueSubmit), int(IssueCancel)) s.planCount(m).DashboardUpdate(m) } func (s Table) BindPlan(m *ice.Message, arg ...string) { s.Update(m, arg, m.OptionSimple(model.UID, model.STORY_UID)...) } func (s Issue) List(m *ice.Message, arg ...string) { if !s.IsWorker(m) { s.ApplyCheck(m, arg...) return } user_uid, isCreator, isWorker := m.Option(model.USER_UID), s.IsCreator(m), s.IsWorker(m) s.Orders(m, model.STATUS, model.DESIGN_COUNT, model.TASK_COUNT, s.Desc(model.UPDATED_AT)).Limit(m, 300) s.ValueList(m, arg) s.SelectJoinPlan(m) m.Table(func(value ice.Maps) { button := []ice.Any{} if PlanStatus(kit.Int(value[model.PLAN_STATUS])) != PlanFinish { if isWorker && kit.Int(value[model.DESIGN_COUNT]) == 0 { button = append(button, s.DesignCreate) } } if isCreator { button = append(button, s.TaskCreate) } s.PushIssueButton(m, value, user_uid, button...) }).Display("") kit.If(len(arg) == 1, func() { m.Sort("plan_status,status,design_count,task_count,updated_at", ice.STR, ice.STR, ice.STR, ice.STR, ice.STR_R) }) s.OtherListCmd(m, s.DesignList, s.TaskList, s.CaseList, s.MeetList, s.DealList) } func (s Issue) Finish(m *ice.Message, arg ...string) { if s.finishCheck(m, Design{}, "设计") { return } if s.finishCheck(m, Task{}, "任务") { return } s.changeStatus(m, IssueSubmit, IssueFinish) } func (s Issue) DesignCreate(m *ice.Message, arg ...string) { s.commonOtherCreate(m, Design{}, arg...) } func (s Issue) TaskCreate(m *ice.Message, arg ...string) { s.commonOtherCreate(m, Task{}, arg...) } func init() { ice.TeamCtxCmd(Issue{}) } type IssueType int const ( IssueFeature IssueType = iota IssueBugfix ) var IssueTypeList = map[IssueType]string{ IssueFeature: "feature", IssueBugfix: "bugfix", } func (s IssueType) String() string { return IssueTypeList[s] } type Level int const ( Level1 Level = iota Level2 Level3 Level4 Level5 ) var LevelList = map[Level]string{ Level1: "level-1", Level2: "level-2", Level3: "level-3", Level4: "level-4", Level5: "level-5", } func (s Level) String() string { return LevelList[s] } type IssueStatus int const ( IssueCreate IssueStatus = iota IssueRejected IssueApproved IssueProcess IssueSubmit IssueReback IssueFinish IssueCancel ) var IssueStatusList = map[IssueStatus]string{ IssueCreate: "create", IssueRejected: "rejected", IssueApproved: "approved", IssueProcess: "process", IssueSubmit: "submit", IssueReback: "reback", IssueFinish: "finish", IssueCancel: "cancel", } func (s IssueStatus) String() string { return IssueStatusList[s] }