ability to log spent time on an issue
This commit is contained in:
parent
4336da6224
commit
b9bba5924a
4 changed files with 26 additions and 4 deletions
|
|
@ -234,7 +234,10 @@ class RedmineBackend(BaseBackend, ICapContent, ICapBugTracker, ICapCollection):
|
|||
issue = issue.id
|
||||
|
||||
with self.browser:
|
||||
return self.browser.update_issue(issue, update.message)
|
||||
if update.hours:
|
||||
return self.browser.logtime_issue(issue, update.hours, update.message)
|
||||
else:
|
||||
return self.browser.comment_issue(issue, update.message)
|
||||
|
||||
def remove_issue(self, issue):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ from weboob.tools.browser import BaseBrowser, BrowserIncorrectPassword
|
|||
|
||||
from .pages.index import LoginPage, IndexPage, MyPage, ProjectsPage
|
||||
from .pages.wiki import WikiPage, WikiEditPage
|
||||
from .pages.issues import IssuesPage, IssuePage, NewIssuePage
|
||||
from .pages.issues import IssuesPage, IssuePage, NewIssuePage, IssueLogTimePage, \
|
||||
IssueTimeEntriesPage
|
||||
|
||||
|
||||
__all__ = ['RedmineBrowser']
|
||||
|
|
@ -47,6 +48,8 @@ class RedmineBrowser(BaseBrowser):
|
|||
'https?://[^/]+/projects/[\w-]+/issues': IssuesPage,
|
||||
'https?://[^/]+/issues(|/?\?.*)': IssuesPage,
|
||||
'https?://[^/]+/issues/(\d+)': IssuePage,
|
||||
'https?://[^/]+/issues/(\d+)/time_entries/new': IssueLogTimePage,
|
||||
'https?://[^/]+/projects/[\w-]+/time_entries': IssueTimeEntriesPage,
|
||||
}
|
||||
|
||||
def __init__(self, url, *args, **kwargs):
|
||||
|
|
@ -146,7 +149,13 @@ class RedmineBrowser(BaseBrowser):
|
|||
assert self.is_on_page(IssuePage)
|
||||
return self.page.get_params()
|
||||
|
||||
def update_issue(self, id, message):
|
||||
def logtime_issue(self, id, hours, message):
|
||||
self.location('/issues/%s/time_entries/new' % id)
|
||||
|
||||
assert self.is_on_page(IssueLogTimePage)
|
||||
self.page.logtime(hours.seconds/3600, message)
|
||||
|
||||
def comment_issue(self, id, message):
|
||||
self.location('/issues/%s' % id)
|
||||
|
||||
assert self.is_on_page(IssuePage)
|
||||
|
|
|
|||
|
|
@ -262,4 +262,13 @@ class IssuePage(NewIssuePage):
|
|||
|
||||
return params
|
||||
|
||||
class IssueLogTimePage(BasePage):
|
||||
def logtime(self, hours, message):
|
||||
self.browser.select_form(predicate=lambda form: form.attrs.get('action', '').endswith('/edit'))
|
||||
self.browser['time_entry[hours]'] = '%.2f' % hours
|
||||
self.browser['time_entry[comments]'] = message.encode('utf-8')
|
||||
self.browser['time_entry[activity_id]'] = ['8']
|
||||
self.browser.submit()
|
||||
|
||||
class IssueTimeEntriesPage(BasePage):
|
||||
pass
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from .base import IBaseCap, CapBaseObject
|
||||
|
||||
|
|
@ -106,6 +106,7 @@ class Update(CapBaseObject):
|
|||
CapBaseObject.__init__(self, id)
|
||||
self.add_field('author', User)
|
||||
self.add_field('date', datetime)
|
||||
self.add_field('hours', timedelta)
|
||||
self.add_field('message', unicode)
|
||||
self.add_field('attachments', (list,tuple))
|
||||
self.add_field('changes', (list,tuple))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue