mirror of
https://github.com/django-helpdesk/django-helpdesk.git
synced 2025-06-20 17:47:58 +02:00
fixing views.py (except deprecated api)
This commit is contained in:
parent
0159ca1ffa
commit
3c35473265
@ -37,22 +37,22 @@ class OpenTicketsByUser(Feed):
|
|||||||
return _("Helpdesk: Open Tickets in queue %(queue)s for %(username)s") % {
|
return _("Helpdesk: Open Tickets in queue %(queue)s for %(username)s") % {
|
||||||
'queue': obj['queue'].title,
|
'queue': obj['queue'].title,
|
||||||
'username': obj['user'].get_username(),
|
'username': obj['user'].get_username(),
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
return _("Helpdesk: Open Tickets for %(username)s") % {
|
return _("Helpdesk: Open Tickets for %(username)s") % {
|
||||||
'username': obj['user'].get_username(),
|
'username': obj['user'].get_username(),
|
||||||
}
|
}
|
||||||
|
|
||||||
def description(self, obj):
|
def description(self, obj):
|
||||||
if obj['queue']:
|
if obj['queue']:
|
||||||
return _("Open and Reopened Tickets in queue %(queue)s for %(username)s") % {
|
return _("Open and Reopened Tickets in queue %(queue)s for %(username)s") % {
|
||||||
'queue': obj['queue'].title,
|
'queue': obj['queue'].title,
|
||||||
'username': obj['user'].get_username(),
|
'username': obj['user'].get_username(),
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
return _("Open and Reopened Tickets for %(username)s") % {
|
return _("Open and Reopened Tickets for %(username)s") % {
|
||||||
'username': obj['user'].get_username(),
|
'username': obj['user'].get_username(),
|
||||||
}
|
}
|
||||||
|
|
||||||
def link(self, obj):
|
def link(self, obj):
|
||||||
if obj['queue']:
|
if obj['queue']:
|
||||||
@ -60,28 +60,28 @@ class OpenTicketsByUser(Feed):
|
|||||||
reverse('helpdesk_list'),
|
reverse('helpdesk_list'),
|
||||||
obj['user'].id,
|
obj['user'].id,
|
||||||
obj['queue'].id,
|
obj['queue'].id,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return u'%s?assigned_to=%s' % (
|
return u'%s?assigned_to=%s' % (
|
||||||
reverse('helpdesk_list'),
|
reverse('helpdesk_list'),
|
||||||
obj['user'].id,
|
obj['user'].id,
|
||||||
)
|
)
|
||||||
|
|
||||||
def items(self, obj):
|
def items(self, obj):
|
||||||
if obj['queue']:
|
if obj['queue']:
|
||||||
return Ticket.objects.filter(
|
return Ticket.objects.filter(
|
||||||
assigned_to=obj['user']
|
assigned_to=obj['user']
|
||||||
).filter(
|
).filter(
|
||||||
queue=obj['queue']
|
queue=obj['queue']
|
||||||
).filter(
|
).filter(
|
||||||
Q(status=Ticket.OPEN_STATUS) | Q(status=Ticket.REOPENED_STATUS)
|
Q(status=Ticket.OPEN_STATUS) | Q(status=Ticket.REOPENED_STATUS)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return Ticket.objects.filter(
|
return Ticket.objects.filter(
|
||||||
assigned_to=obj['user']
|
assigned_to=obj['user']
|
||||||
).filter(
|
).filter(
|
||||||
Q(status=Ticket.OPEN_STATUS) | Q(status=Ticket.REOPENED_STATUS)
|
Q(status=Ticket.OPEN_STATUS) | Q(status=Ticket.REOPENED_STATUS)
|
||||||
)
|
)
|
||||||
|
|
||||||
def item_pubdate(self, item):
|
def item_pubdate(self, item):
|
||||||
return item.created
|
return item.created
|
||||||
@ -103,10 +103,10 @@ class UnassignedTickets(Feed):
|
|||||||
|
|
||||||
def items(self, obj):
|
def items(self, obj):
|
||||||
return Ticket.objects.filter(
|
return Ticket.objects.filter(
|
||||||
assigned_to__isnull=True
|
assigned_to__isnull=True
|
||||||
).filter(
|
).filter(
|
||||||
Q(status=Ticket.OPEN_STATUS) | Q(status=Ticket.REOPENED_STATUS)
|
Q(status=Ticket.OPEN_STATUS) | Q(status=Ticket.REOPENED_STATUS)
|
||||||
)
|
)
|
||||||
|
|
||||||
def item_pubdate(self, item):
|
def item_pubdate(self, item):
|
||||||
return item.created
|
return item.created
|
||||||
@ -140,25 +140,25 @@ class OpenTicketsByQueue(Feed):
|
|||||||
def title(self, obj):
|
def title(self, obj):
|
||||||
return _('Helpdesk: Open Tickets in queue %(queue)s') % {
|
return _('Helpdesk: Open Tickets in queue %(queue)s') % {
|
||||||
'queue': obj.title,
|
'queue': obj.title,
|
||||||
}
|
}
|
||||||
|
|
||||||
def description(self, obj):
|
def description(self, obj):
|
||||||
return _('Open and Reopened Tickets in queue %(queue)s') % {
|
return _('Open and Reopened Tickets in queue %(queue)s') % {
|
||||||
'queue': obj.title,
|
'queue': obj.title,
|
||||||
}
|
}
|
||||||
|
|
||||||
def link(self, obj):
|
def link(self, obj):
|
||||||
return '%s?queue=%s' % (
|
return '%s?queue=%s' % (
|
||||||
reverse('helpdesk_list'),
|
reverse('helpdesk_list'),
|
||||||
obj.id,
|
obj.id,
|
||||||
)
|
)
|
||||||
|
|
||||||
def items(self, obj):
|
def items(self, obj):
|
||||||
return Ticket.objects.filter(
|
return Ticket.objects.filter(
|
||||||
queue=obj
|
queue=obj
|
||||||
).filter(
|
).filter(
|
||||||
Q(status=Ticket.OPEN_STATUS) | Q(status=Ticket.REOPENED_STATUS)
|
Q(status=Ticket.OPEN_STATUS) | Q(status=Ticket.REOPENED_STATUS)
|
||||||
)
|
)
|
||||||
|
|
||||||
def item_pubdate(self, item):
|
def item_pubdate(self, item):
|
||||||
return item.created
|
return item.created
|
||||||
@ -168,4 +168,3 @@ class OpenTicketsByQueue(Feed):
|
|||||||
return item.assigned_to.get_username()
|
return item.assigned_to.get_username()
|
||||||
else:
|
else:
|
||||||
return _('Unassigned')
|
return _('Unassigned')
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ def homepage(request):
|
|||||||
reverse('helpdesk_public_view'),
|
reverse('helpdesk_public_view'),
|
||||||
ticket.ticket_for_url,
|
ticket.ticket_for_url,
|
||||||
ticket.submitter_email)
|
ticket.submitter_email)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
queue = Queue.objects.get(slug=request.GET.get('queue', None))
|
queue = Queue.objects.get(slug=request.GET.get('queue', None))
|
||||||
@ -67,9 +67,9 @@ def homepage(request):
|
|||||||
knowledgebase_categories = KBCategory.objects.all()
|
knowledgebase_categories = KBCategory.objects.all()
|
||||||
|
|
||||||
return render(request, 'helpdesk/public_homepage.html', {
|
return render(request, 'helpdesk/public_homepage.html', {
|
||||||
'form': form,
|
'form': form,
|
||||||
'helpdesk_settings': helpdesk_settings,
|
'helpdesk_settings': helpdesk_settings,
|
||||||
'kb_categories': knowledgebase_categories
|
'kb_categories': knowledgebase_categories
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ def view_ticket(request):
|
|||||||
'public': 1,
|
'public': 1,
|
||||||
'title': ticket.title,
|
'title': ticket.title,
|
||||||
'comment': _('Submitter accepted resolution and closed ticket'),
|
'comment': _('Submitter accepted resolution and closed ticket'),
|
||||||
}
|
}
|
||||||
if ticket.assigned_to:
|
if ticket.assigned_to:
|
||||||
request.POST['owner'] = ticket.assigned_to.id
|
request.POST['owner'] = ticket.assigned_to.id
|
||||||
request.GET = {}
|
request.GET = {}
|
||||||
|
@ -98,24 +98,24 @@ def dashboard(request):
|
|||||||
|
|
||||||
# open & reopened tickets, assigned to current user
|
# open & reopened tickets, assigned to current user
|
||||||
tickets = Ticket.objects.select_related('queue').filter(
|
tickets = Ticket.objects.select_related('queue').filter(
|
||||||
assigned_to=request.user,
|
assigned_to=request.user,
|
||||||
).exclude(
|
).exclude(
|
||||||
status__in=[Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS],
|
status__in=[Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS],
|
||||||
)
|
)
|
||||||
|
|
||||||
# closed & resolved tickets, assigned to current user
|
# closed & resolved tickets, assigned to current user
|
||||||
tickets_closed_resolved = Ticket.objects.select_related('queue').filter(
|
tickets_closed_resolved = Ticket.objects.select_related('queue').filter(
|
||||||
assigned_to=request.user,
|
assigned_to=request.user,
|
||||||
status__in=[Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS])
|
status__in=[Ticket.CLOSED_STATUS, Ticket.RESOLVED_STATUS])
|
||||||
|
|
||||||
user_queues = _get_user_queues(request.user)
|
user_queues = _get_user_queues(request.user)
|
||||||
|
|
||||||
unassigned_tickets = Ticket.objects.select_related('queue').filter(
|
unassigned_tickets = Ticket.objects.select_related('queue').filter(
|
||||||
assigned_to__isnull=True,
|
assigned_to__isnull=True,
|
||||||
queue__in=user_queues
|
queue__in=user_queues
|
||||||
).exclude(
|
).exclude(
|
||||||
status=Ticket.CLOSED_STATUS,
|
status=Ticket.CLOSED_STATUS,
|
||||||
)
|
)
|
||||||
|
|
||||||
# all tickets, reported by current user
|
# all tickets, reported by current user
|
||||||
all_tickets_reported_by_current_user = ''
|
all_tickets_reported_by_current_user = ''
|
||||||
@ -126,8 +126,8 @@ def dashboard(request):
|
|||||||
).order_by('status')
|
).order_by('status')
|
||||||
|
|
||||||
tickets_in_queues = Ticket.objects.filter(
|
tickets_in_queues = Ticket.objects.filter(
|
||||||
queue__in=user_queues,
|
queue__in=user_queues,
|
||||||
)
|
)
|
||||||
basic_ticket_stats = calc_basic_ticket_stats(tickets_in_queues)
|
basic_ticket_stats = calc_basic_ticket_stats(tickets_in_queues)
|
||||||
|
|
||||||
# The following query builds a grid of queues & ticket statuses,
|
# The following query builds a grid of queues & ticket statuses,
|
||||||
@ -227,7 +227,7 @@ def followup_edit(request, ticket_id, followup_id):
|
|||||||
new_followup.user = followup.user
|
new_followup.user = followup.user
|
||||||
new_followup.save()
|
new_followup.save()
|
||||||
# get list of old attachments & link them to new_followup
|
# get list of old attachments & link them to new_followup
|
||||||
attachments = Attachment.objects.filter(followup = followup)
|
attachments = Attachment.objects.filter(followup=followup)
|
||||||
for attachment in attachments:
|
for attachment in attachments:
|
||||||
attachment.followup = new_followup
|
attachment.followup = new_followup
|
||||||
attachment.save()
|
attachment.save()
|
||||||
@ -290,7 +290,7 @@ def view_ticket(request, ticket_id):
|
|||||||
'owner': owner,
|
'owner': owner,
|
||||||
'title': ticket.title,
|
'title': ticket.title,
|
||||||
'comment': _('Accepted resolution and closed ticket'),
|
'comment': _('Accepted resolution and closed ticket'),
|
||||||
}
|
}
|
||||||
|
|
||||||
return update_ticket(request, ticket_id)
|
return update_ticket(request, ticket_id)
|
||||||
|
|
||||||
@ -299,7 +299,6 @@ def view_ticket(request, ticket_id):
|
|||||||
else:
|
else:
|
||||||
users = User.objects.filter(is_active=True).order_by(User.USERNAME_FIELD)
|
users = User.objects.filter(is_active=True).order_by(User.USERNAME_FIELD)
|
||||||
|
|
||||||
|
|
||||||
# TODO: shouldn't this template get a form to begin with?
|
# TODO: shouldn't this template get a form to begin with?
|
||||||
form = TicketForm(initial={'due_date': ticket.due_date})
|
form = TicketForm(initial={'due_date': ticket.due_date})
|
||||||
|
|
||||||
@ -447,7 +446,7 @@ def update_ticket(request, ticket_id, public=False):
|
|||||||
new_user = User.objects.get(id=owner)
|
new_user = User.objects.get(id=owner)
|
||||||
f.title = _('Assigned to %(username)s') % {
|
f.title = _('Assigned to %(username)s') % {
|
||||||
'username': new_user.get_username(),
|
'username': new_user.get_username(),
|
||||||
}
|
}
|
||||||
ticket.assigned_to = new_user
|
ticket.assigned_to = new_user
|
||||||
reassigned = True
|
reassigned = True
|
||||||
# user changed owner to 'unassign'
|
# user changed owner to 'unassign'
|
||||||
@ -482,7 +481,7 @@ def update_ticket(request, ticket_id, public=False):
|
|||||||
filename=filename,
|
filename=filename,
|
||||||
mime_type=mimetypes.guess_type(filename)[0] or 'application/octet-stream',
|
mime_type=mimetypes.guess_type(filename)[0] or 'application/octet-stream',
|
||||||
size=file.size,
|
size=file.size,
|
||||||
)
|
)
|
||||||
a.file.save(filename, file, save=False)
|
a.file.save(filename, file, save=False)
|
||||||
a.save()
|
a.save()
|
||||||
|
|
||||||
@ -497,7 +496,7 @@ def update_ticket(request, ticket_id, public=False):
|
|||||||
field=_('Title'),
|
field=_('Title'),
|
||||||
old_value=ticket.title,
|
old_value=ticket.title,
|
||||||
new_value=title,
|
new_value=title,
|
||||||
)
|
)
|
||||||
c.save()
|
c.save()
|
||||||
ticket.title = title
|
ticket.title = title
|
||||||
|
|
||||||
@ -507,7 +506,7 @@ def update_ticket(request, ticket_id, public=False):
|
|||||||
field=_('Priority'),
|
field=_('Priority'),
|
||||||
old_value=ticket.priority,
|
old_value=ticket.priority,
|
||||||
new_value=priority,
|
new_value=priority,
|
||||||
)
|
)
|
||||||
c.save()
|
c.save()
|
||||||
ticket.priority = priority
|
ticket.priority = priority
|
||||||
|
|
||||||
@ -517,11 +516,11 @@ def update_ticket(request, ticket_id, public=False):
|
|||||||
field=_('Due on'),
|
field=_('Due on'),
|
||||||
old_value=ticket.due_date,
|
old_value=ticket.due_date,
|
||||||
new_value=due_date,
|
new_value=due_date,
|
||||||
)
|
)
|
||||||
c.save()
|
c.save()
|
||||||
ticket.due_date = due_date
|
ticket.due_date = due_date
|
||||||
|
|
||||||
if new_status in [ Ticket.RESOLVED_STATUS, Ticket.CLOSED_STATUS ]:
|
if new_status in (Ticket.RESOLVED_STATUS, Ticket.CLOSED_STATUS):
|
||||||
if new_status == Ticket.RESOLVED_STATUS or ticket.resolution is None:
|
if new_status == Ticket.RESOLVED_STATUS or ticket.resolution is None:
|
||||||
ticket.resolution = comment
|
ticket.resolution = comment
|
||||||
|
|
||||||
@ -533,11 +532,11 @@ def update_ticket(request, ticket_id, public=False):
|
|||||||
context.update(
|
context.update(
|
||||||
resolution=ticket.resolution,
|
resolution=ticket.resolution,
|
||||||
comment=f.comment,
|
comment=f.comment,
|
||||||
)
|
)
|
||||||
|
|
||||||
if public and (f.comment or (
|
if public and (f.comment or (
|
||||||
f.new_status in (Ticket.RESOLVED_STATUS,
|
f.new_status in (Ticket.RESOLVED_STATUS,
|
||||||
Ticket.CLOSED_STATUS))):
|
Ticket.CLOSED_STATUS))):
|
||||||
if f.new_status == Ticket.RESOLVED_STATUS:
|
if f.new_status == Ticket.RESOLVED_STATUS:
|
||||||
template = 'resolved_'
|
template = 'resolved_'
|
||||||
elif f.new_status == Ticket.CLOSED_STATUS:
|
elif f.new_status == Ticket.CLOSED_STATUS:
|
||||||
@ -555,7 +554,7 @@ def update_ticket(request, ticket_id, public=False):
|
|||||||
sender=ticket.queue.from_address,
|
sender=ticket.queue.from_address,
|
||||||
fail_silently=True,
|
fail_silently=True,
|
||||||
files=files,
|
files=files,
|
||||||
)
|
)
|
||||||
messages_sent_to.append(ticket.submitter_email)
|
messages_sent_to.append(ticket.submitter_email)
|
||||||
|
|
||||||
template_suffix = 'cc'
|
template_suffix = 'cc'
|
||||||
@ -569,7 +568,7 @@ def update_ticket(request, ticket_id, public=False):
|
|||||||
sender=ticket.queue.from_address,
|
sender=ticket.queue.from_address,
|
||||||
fail_silently=True,
|
fail_silently=True,
|
||||||
files=files,
|
files=files,
|
||||||
)
|
)
|
||||||
messages_sent_to.append(cc.email_address)
|
messages_sent_to.append(cc.email_address)
|
||||||
|
|
||||||
if ticket.assigned_to and \
|
if ticket.assigned_to and \
|
||||||
@ -602,7 +601,7 @@ def update_ticket(request, ticket_id, public=False):
|
|||||||
sender=ticket.queue.from_address,
|
sender=ticket.queue.from_address,
|
||||||
fail_silently=True,
|
fail_silently=True,
|
||||||
files=files,
|
files=files,
|
||||||
)
|
)
|
||||||
messages_sent_to.append(ticket.assigned_to.email)
|
messages_sent_to.append(ticket.assigned_to.email)
|
||||||
|
|
||||||
if ticket.queue.updated_ticket_cc and ticket.queue.updated_ticket_cc not in messages_sent_to:
|
if ticket.queue.updated_ticket_cc and ticket.queue.updated_ticket_cc not in messages_sent_to:
|
||||||
@ -622,7 +621,7 @@ def update_ticket(request, ticket_id, public=False):
|
|||||||
sender=ticket.queue.from_address,
|
sender=ticket.queue.from_address,
|
||||||
fail_silently=True,
|
fail_silently=True,
|
||||||
files=files,
|
files=files,
|
||||||
)
|
)
|
||||||
|
|
||||||
ticket.save()
|
ticket.save()
|
||||||
|
|
||||||
@ -716,7 +715,7 @@ def mass_update(request):
|
|||||||
recipients=t.submitter_email,
|
recipients=t.submitter_email,
|
||||||
sender=t.queue.from_address,
|
sender=t.queue.from_address,
|
||||||
fail_silently=True,
|
fail_silently=True,
|
||||||
)
|
)
|
||||||
messages_sent_to.append(t.submitter_email)
|
messages_sent_to.append(t.submitter_email)
|
||||||
|
|
||||||
for cc in t.ticketcc_set.all():
|
for cc in t.ticketcc_set.all():
|
||||||
@ -727,7 +726,7 @@ def mass_update(request):
|
|||||||
recipients=cc.email_address,
|
recipients=cc.email_address,
|
||||||
sender=t.queue.from_address,
|
sender=t.queue.from_address,
|
||||||
fail_silently=True,
|
fail_silently=True,
|
||||||
)
|
)
|
||||||
messages_sent_to.append(cc.email_address)
|
messages_sent_to.append(cc.email_address)
|
||||||
|
|
||||||
if t.assigned_to and \
|
if t.assigned_to and \
|
||||||
@ -740,7 +739,7 @@ def mass_update(request):
|
|||||||
recipients=t.assigned_to.email,
|
recipients=t.assigned_to.email,
|
||||||
sender=t.queue.from_address,
|
sender=t.queue.from_address,
|
||||||
fail_silently=True,
|
fail_silently=True,
|
||||||
)
|
)
|
||||||
messages_sent_to.append(t.assigned_to.email)
|
messages_sent_to.append(t.assigned_to.email)
|
||||||
|
|
||||||
if t.queue.updated_ticket_cc and \
|
if t.queue.updated_ticket_cc and \
|
||||||
@ -751,7 +750,7 @@ def mass_update(request):
|
|||||||
recipients=t.queue.updated_ticket_cc,
|
recipients=t.queue.updated_ticket_cc,
|
||||||
sender=t.queue.from_address,
|
sender=t.queue.from_address,
|
||||||
fail_silently=True,
|
fail_silently=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
elif action == 'delete':
|
elif action == 'delete':
|
||||||
t.delete()
|
t.delete()
|
||||||
@ -775,7 +774,7 @@ def ticket_list(request):
|
|||||||
'sortreverse': False,
|
'sortreverse': False,
|
||||||
'keyword': None,
|
'keyword': None,
|
||||||
'search_string': None,
|
'search_string': None,
|
||||||
}
|
}
|
||||||
|
|
||||||
from_saved_query = False
|
from_saved_query = False
|
||||||
|
|
||||||
@ -831,13 +830,12 @@ def ticket_list(request):
|
|||||||
# Query deserialization failed. (E.g. was a pickled query)
|
# Query deserialization failed. (E.g. was a pickled query)
|
||||||
return HttpResponseRedirect(reverse('helpdesk_list'))
|
return HttpResponseRedirect(reverse('helpdesk_list'))
|
||||||
|
|
||||||
elif not ('queue' in request.GET
|
elif not ('queue' in request.GET or
|
||||||
or 'assigned_to' in request.GET
|
'assigned_to' in request.GET or
|
||||||
or 'status' in request.GET
|
'status' in request.GET or
|
||||||
or 'q' in request.GET
|
'q' in request.GET or
|
||||||
or 'sort' in request.GET
|
'sort' in request.GET or
|
||||||
or 'sortreverse' in request.GET
|
'sortreverse' in request.GET):
|
||||||
):
|
|
||||||
|
|
||||||
# Fall-back if no querying is being done, force the list to only
|
# Fall-back if no querying is being done, force the list to only
|
||||||
# show open/reopened/resolved (not closed) cases sorted by creation
|
# show open/reopened/resolved (not closed) cases sorted by creation
|
||||||
@ -1113,7 +1111,8 @@ def run_report(request, report):
|
|||||||
# a second table for more complex queries
|
# a second table for more complex queries
|
||||||
summarytable2 = defaultdict(int)
|
summarytable2 = defaultdict(int)
|
||||||
|
|
||||||
month_name = lambda m: MONTHS_3[m].title()
|
def month_name(m):
|
||||||
|
MONTHS_3[m].title()
|
||||||
|
|
||||||
first_ticket = Ticket.objects.all().order_by('created')[0]
|
first_ticket = Ticket.objects.all().order_by('created')[0]
|
||||||
first_month = first_ticket.created.month
|
first_month = first_ticket.created.month
|
||||||
@ -1259,7 +1258,7 @@ run_report = staff_member_required(run_report)
|
|||||||
def save_query(request):
|
def save_query(request):
|
||||||
title = request.POST.get('title', None)
|
title = request.POST.get('title', None)
|
||||||
shared = request.POST.get('shared', False)
|
shared = request.POST.get('shared', False)
|
||||||
if shared == 'on': # django only translates '1', 'true', 't' into True
|
if shared == 'on': # django only translates '1', 'true', 't' into True
|
||||||
shared = True
|
shared = True
|
||||||
query_encoded = request.POST.get('query_encoded', None)
|
query_encoded = request.POST.get('query_encoded', None)
|
||||||
|
|
||||||
@ -1501,7 +1500,7 @@ def days_since_created(today, ticket):
|
|||||||
|
|
||||||
|
|
||||||
def date_rel_to_today(today, offset):
|
def date_rel_to_today(today, offset):
|
||||||
return today - timedelta(days = offset)
|
return today - timedelta(days=offset)
|
||||||
|
|
||||||
|
|
||||||
def sort_string(begin, end):
|
def sort_string(begin, end):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user