[#5698] Moved calls to invalidate_bin_counts to bottom of methods to ensure they don't happen until update is successful

Signed-off-by: Cory Johns <johnsca@geek.net>
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 3460c24..796eb19 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -699,7 +699,6 @@
     @expose()
     @require_post()
     def update_tickets(self, **post_data):
-        c.app.globals.invalidate_bin_counts()
         tickets = TM.Ticket.query.find(dict(
                 _id={'$in':[ObjectId(id) for id in post_data['selected'].split(',')]},
                 app_config_id=c.app.config._id)).all()
@@ -751,6 +750,7 @@
             if message != '':
                 ticket.discussion_thread.post(message)
                 ticket.commit()
+        c.app.globals.invalidate_bin_counts()
         ThreadLocalORMSession.flush_all()
 
 # tickets
@@ -1148,7 +1148,6 @@
         if not post_data.get('summary'):
             flash('You must provide a Name','error')
             redirect('.')
-        c.app.globals.invalidate_bin_counts()
         if 'labels' in post_data:
             post_data['labels'] = post_data['labels'].split(',')
         else:
@@ -1160,7 +1159,6 @@
     @h.vardec
     @validate(W.ticket_form, error_handler=index)
     def update_ticket_from_widget(self, **post_data):
-        c.app.globals.invalidate_bin_counts()
         data = post_data['ticket_form']
         # icky: handle custom fields like the non-widget form does
         if 'custom_fields' in data:
@@ -1238,6 +1236,7 @@
             self.ticket.discussion_thread.post(text=comment)
         g.director.create_activity(c.user, 'modified', self.ticket,
                 related_nodes=[c.project])
+        c.app.globals.invalidate_bin_counts()
         redirect('.')
 
     @expose()
@@ -1491,7 +1490,6 @@
     @validate(W.ticket_form, error_handler=h.json_validation_error)
     def new(self, ticket_form=None, **post_data):
         require_access(c.app, 'create')
-        c.app.globals.invalidate_bin_counts()
         if c.app.globals.milestone_names is None:
             c.app.globals.milestone_names = ''
         ticket = TM.Ticket(
@@ -1499,6 +1497,7 @@
             custom_fields=dict(),
             ticket_num=c.app.globals.next_ticket_num())
         ticket.update(ticket_form)
+        c.app.globals.invalidate_bin_counts()
         redirect(str(ticket.ticket_num)+'/')
 
     @expose('json:')
@@ -1561,10 +1560,10 @@
     @validate(W.ticket_form, error_handler=h.json_validation_error)
     def save(self, ticket_form=None, **post_data):
         require_access(self.ticket, 'update')
-        c.app.globals.invalidate_bin_counts()
         # if c.app.globals.milestone_names is None:
         #     c.app.globals.milestone_names = ''
         self.ticket.update(ticket_form)
+        c.app.globals.invalidate_bin_counts()
         redirect('.')
 
 class MilestoneController(BaseController):
@@ -1645,7 +1644,6 @@
     @expose()
     @require_post()
     def update_tickets(self, **post_data):
-        c.app.globals.invalidate_bin_counts()
         tickets = TM.Ticket.query.find(dict(
                 _id={'$in':[ObjectId(id) for id in post_data['selected'].split(',')]},
                 app_config_id=c.app.config._id)).all()
@@ -1677,4 +1675,5 @@
             for k, v in custom_values.iteritems():
                 ticket.custom_fields[k] = v
 
+        c.app.globals.invalidate_bin_counts()
         ThreadLocalORMSession.flush_all()