in ForgeTracker/forgetracker/model/ticket.py [0:0]
def move_tickets(self, ticket_ids, destination_tracker_id):
tracker = AppConfig.query.get(_id=destination_tracker_id)
tickets = Ticket.query.find(dict(
_id={'$in': [ObjectId(id) for id in ticket_ids]},
app_config_id=self.app_config_id)).sort('ticket_num').all()
filtered = self.filtered_by_subscription({t._id: t for t in tickets})
original_ticket_nums = {t._id: t.ticket_num for t in tickets}
users = User.query.find({'_id': {'$in': list(filtered.keys())}}).all()
moved_tickets = {}
for ticket in tickets:
moved = ticket.move(tracker, notify=False)
moved_tickets[moved._id] = moved
mail = dict(
sender=c.project.app_instance(self.app_config).email_address,
fromaddr=str(c.user.email_address_header()),
reply_to=str(c.user.email_address_header()),
subject='[{}:{}] Mass ticket moving by {}'.format(c.project.shortname,
self.app_config.options.mount_point,
c.user.display_name))
tmpl = g.jinja2_env.get_template(
'forgetracker:data/mass_move_report.html')
tmpl_context = {
'original_tracker': '{}:{}'.format(c.project.shortname,
self.app_config.options.mount_point),
'destination_tracker': '{}:{}'.format(tracker.project.shortname,
tracker.options.mount_point),
'tickets': [],
}
for user in users:
tmpl_context['tickets'] = ({
'original_num': original_ticket_nums[_id],
'destination_num': moved_tickets[_id].ticket_num,
'summary': moved_tickets[_id].summary
} for _id in filtered.get(user._id, []))
mail.update(dict(
message_id=h.gen_message_id(),
text=tmpl.render(tmpl_context),
destinations=[str(user._id)]))
mail_tasks.sendmail.post(**mail)
if self.app_config.options.get('TicketMonitoringType') in (
'AllTicketChanges', 'AllPublicTicketChanges'):
monitoring_email = self.app_config.options.get(
'TicketMonitoringEmail')
tmpl_context['tickets'] = [{
'original_num': original_ticket_nums[_id],
'destination_num': moved_tickets[_id].ticket_num,
'summary': moved_tickets[_id].summary
} for _id, t in moved_tickets.items()
if (not t.private or
self.app_config.options.get('TicketMonitoringType') ==
'AllTicketChanges')]
if len(tmpl_context['tickets']) > 0:
mail.update(dict(
message_id=h.gen_message_id(),
text=tmpl.render(tmpl_context),
destinations=[monitoring_email]))
mail_tasks.sendmail.post(**mail)
moved_from = '{}/{}'.format(c.project.shortname,
self.app_config.options.mount_point)
moved_to = '{}/{}'.format(tracker.project.shortname,
tracker.options.mount_point)
text = f'Tickets moved from {moved_from} to {moved_to}'
Notification.post_user(c.user, None, 'flash', text=text)