func (r bot) myStories(p *robots.Payload, cmd utils.Command) error { name := cmd.Arg(0) var pr *db.Project var err error if name == "" { pr, err = db.GetProjectByChannel(p.ChannelName) } else { pr, err = db.GetProjectByName(name) } if err != nil { return err } if pr == nil { r.handler.Send(p, "Missing project name.") return nil } pvt, err := pivotal.NewFor(p.UserName) if err != nil { return err } user, err := db.GetUserByName(p.UserName) if err != nil { return err } filter := map[string]string{ "owned_by": user.StrPivotalId(), "state": "started,finished", } stories, err := pvt.FilteredStories(pr.StrPivotalId(), filter) if err != nil { return err } if len(stories) < 1 { r.handler.Send(p, "No open stories in project *"+pr.Name+"* for *"+p.UserName+"*") return nil } str := "Current stories in project *" + pr.Name + "* for *" + p.UserName + "*:\n" atts := []robots.Attachment{} for _, s := range stories { fallback := fmt.Sprintf("%d - %s - %s\n", s.Id, s.Name, s.State) title := fmt.Sprintf("%d - %s\n", s.Id, s.Name) a := utils.FmtAttachment(fallback, title, s.Url, s.State) atts = append(atts, a) } r.handler.SendWithAttachments(p, str, atts) return nil }
func (r bot) stories(p *robots.Payload, cmd utils.Command) error { name := cmd.Arg(0) var ps *db.Project var err error if name != "" { ps, err = db.GetProjectByName(name) if err != nil { return err } if ps == nil { r.handler.Send(p, "Project *"+name+"* not found") return nil } } if ps == nil { ps, err = db.GetProjectByChannel(p.ChannelName) if err != nil { return err } if ps == nil { r.handler.Send(p, "Missing project name") return nil } } mvn, err := mavenlink.NewFor(p.UserName) if err != nil { return err } sprint, err := mvn.GetStory(ps.MvnSprintStoryId) if err != nil { return err } stories, err := mvn.GetChildStories(ps.MvnSprintStoryId) if err != nil { return err } r.handler.Send(p, "Mavenlink stories for *"+ps.Name+"*, sprint *"+sprint.Title+"*:") atts := mavenlink.FormatStories(stories) for _, a := range atts { r.handler.SendWithAttachments(p, "", []robots.Attachment{a}) } var totalEstimated int64 var totalLogged int64 for _, s := range stories { totalEstimated += s.TimeEstimateInMinutes totalLogged += s.LoggedBillableTimeInMinutes } s := "" if totalEstimated > 0 { s += fmt.Sprintf("Total estimated: %s", utils.FormatHour(totalEstimated)) } if totalLogged > 0 { if totalEstimated > 0 { s += " - " } s += fmt.Sprintf("Total logged: %s", utils.FormatHour(totalLogged)) } if s != "" { r.handler.Send(p, s) } return nil }