Skip to content

Instantly share code, notes, and snippets.

@ren23
Last active December 12, 2015 01:19
Show Gist options
  • Save ren23/4690307 to your computer and use it in GitHub Desktop.
Save ren23/4690307 to your computer and use it in GitHub Desktop.
@login_required
def report(request):
end = get_week_dates(datetime.now())[1]
begin = get_week_dates(datetime.now()-timedelta(days=7))[0]
if request.method == 'GET':
data = request.GET.copy()
if data:
form = AgendaForm(data, auto_id = True, initial={'begin':begin, 'end':end})
if form.is_valid():
if 'begin' in form.data and 'end' in form.data:
begin = form.cleaned_data['begin']
end = form.cleaned_data['end']
else:
form = AgendaForm(auto_id = True, initial={'begin':begin, 'end':end})
else:
form = AgendaForm(auto_id = True, initial={'begin':begin, 'end':end})
comments = RequestComment.objects.filter(date__range = (begin, end))\
.exclude(modification_request__progress_status__in = ('refused', 'request_pending', 'pending'))\
.select_related()\
.order_by('modification_request__request_type',
'modification_request__request_number',
'date')
template_name = 'om_templates/report.html'
if 'printable' in form.data and form.data['printable']:
template_name = 'om_templates/print_report.html'
return render_to_response(template_name,
{'form':form,
'comments':comments
},
context_instance=RequestContext(request))
class ModificationRequest(models.Model):
'''ModificationRequest model:
title = char(200); #summary
description = text;
reporter = UserProfile;
approver = UserProfile;
approver_comment = Text;
closing_comment = Text;
progress_status = (pending, refused, order_pending, request_pending, on_progress, stand_by, finished);
priority_status = (min, maj);
ticket_id = integer; trac ticket
request_closing_date = date;
expected_request_closing_date = date;
instrument_type = concerned products
approved_date = date;
request_type = (OM, AFF);
progress = [0,1];% of progress
order = Order; for AFF
person_in_charge;
update_date= date; auto_now
creation_date= date; auto_now_add'''
#modification request
request_number = models.IntegerField(default = 0, verbose_name = _('Request number'))
request_code = models.CharField(max_length = 200, verbose_name = _('Request code'))
title = models.CharField(max_length = 200, verbose_name = _('Title'))
cotation = models.CharField(max_length = 200, blank = True, null = True, verbose_name = _('Cotation'))
reporter = models.ForeignKey(UserProfile, related_name = 'modification_requests', verbose_name = _('Reporter'))
working_users = models.ManyToManyField(UserProfile, blank = True, null = True, related_name = 'working_modification_requests', verbose_name = _('Working Users'))
date = models.DateField(verbose_name = _('Date'))
instrument_type = models.TextField(blank = True, null = True, verbose_name = _('Instrument Type'))# ou text
request_type = models.CharField(max_length=3, choices=REQUEST_CHOICES, verbose_name = _('Request Type')) #request type model? or integer or char or boolean?
description = models.TextField(blank = True, null = True, verbose_name = _('Description'))
progress_status = models.CharField(max_length=16, choices=PROGRESS_STATUS_CHOICES, default='pending', verbose_name = _('Progress status'))
offering_price = models.FloatField(blank = True, null = True, verbose_name = _('Offering price'))
cost_price = models.FloatField(blank = True, null = True, verbose_name = _('Cost price'))
delay = models.IntegerField(blank = True, null = True, verbose_name = _('Delay'))
is_reeditable = models.NullBooleanField(blank = True, null = True, verbose_name = _('Is reeditable'))
has_start_meeting = models.NullBooleanField(blank = True, null = True, default = False, verbose_name = _('Has start meeting'))
has_closing_meeting = models.NullBooleanField(blank = True, null = True, default = False, verbose_name = _('Has closing meeting'))
#modification order
approver_comment = models.TextField(blank = True, verbose_name = _('Approver comment'))
approver = models.ForeignKey(UserProfile, related_name = 'approved_modification_requests', null = True, blank = True, verbose_name = _('Approver')) #manytomany?
approved_date = models.DateField(blank = True, null = True, verbose_name = _('Approved date'))
beginning_date = models.DateField(null = True, blank = True, verbose_name = _('Beginning date'))
closing_comment = models.TextField(blank = True, null = True, verbose_name = _('Closing comment'))
person_in_charge = models.ForeignKey(UserProfile, related_name = 'charged_modification_requests', null = True, blank = True, verbose_name = _('Person in charge')) #manytomany?
progress = models.FloatField(default = 0.0, verbose_name = _('Progress'))
request_closing_date = models.DateField(null = True, blank = True, verbose_name = _('Request closing date'))
expected_request_validation_date = models.DateField(null = True, blank = True, verbose_name = _('Expected request validation date'))
expected_request_closing_date = models.DateField(null = True, blank = True, verbose_name = _('Expected request closing date'))
last_reminder_date = models.DateField(null = True, blank = True, verbose_name = _('Last reminder date'))
priority = models.CharField(max_length=3, choices=PRIORITY_CHOICES, null = True, blank = True, verbose_name = _('Priority'))
order = models.ForeignKey(Order, null = True, blank = True, verbose_name = _('Order'))
ticket_id = models.CharField(max_length = 10, blank = True, null = True, verbose_name = _('Ticket ID'))
validating_comment = models.TextField(blank = True, null = True, verbose_name = _('Validatiion comment'))
request_validating_date = models.DateField(null = True, blank = True, verbose_name = _('Request validation date'))
#infos
update_date = models.DateTimeField(auto_now = True)
creation_date = models.DateTimeField(auto_now_add = True)
#managers
objects = models.Manager()
AFF_objects = AFFManager()
OM_objects = OMManager()
NP_objects = NPManager()
class RequestComment(models.Model):
modification_request = models.ForeignKey(ModificationRequest, blank = True, null = True)
user_profile = models.ForeignKey(UserProfile)
text = models.TextField()
date = models.DateField()
update_date = models.DateTimeField(auto_now = True)
creation_date = models.DateTimeField(auto_now_add = True)
{% regroup comments by modification_request__request_type as group_list %}
{%for group in group_list%}
<h3>{{group.grouper}}</h3>
{% regroup group.list by modification_request_id as request_list %}
<table>
{%for request in request_list%}
{%for comment in request.list%}
{%if forloop.first%}
<tr><td><b><a href='{{comment.modification_request.get_order_url}}'>{{comment.modification_request.get_order_unicode}}</a>
:&nbsp;
{{comment.modification_request.title}}&nbsp;{%if comment.modification_request.person_in_charge%}({{comment.modification_request.person_in_charge}}){%endif%}
</b>
</td></tr>
<tr><td>
<ul>
<li>
<b>{{comment.date}}&nbsp;{%trans 'by'%}&nbsp;{{comment.user_profile.user.username}}:&nbsp;</b>
{{comment.text|textareatohmtl }}
</li>
{%else%}
<li>
<b>{{comment.date}}&nbsp;{%trans 'by'%}&nbsp;{{comment.user_profile.user.username}}:&nbsp;</b>
{{comment.text|textareatohmtl }}
</li>
{%endif%}
{%if forloop.last%}
</ul>
</td></tr>
{%endif%}
{%endfor%}
{%endfor%}
</table>
{%endfor%}
{% regroup comments by modification_request__request_type as group_list %}
{%for group in group_list%}
<h3>{{group.grouper}}</h3>
{% regroup group.list by modification_request as request_list %}
<table>
{%for request in request_list%}
<tr><td><a href='{{request.grouper.get_order_url}}'>{{request.grouper.get_order_unicode}}</a>
:&nbsp;
{{request.grouper.title}}&nbsp;{%if request.grouper.person_in_charge%}({{request.grouper.person_in_charge}}){%endif%}
</td></tr>
<tr><td>
<ul>
{%for comment in request.list%}
<li>
<b>{{comment.date}}&nbsp;{%trans 'by'%}&nbsp;{{comment.user_profile.user.username}}:&nbsp;</b>
{{comment.text|textareatohmtl }}
</li>
{%endfor%}
</ul>
</td></tr>
{%endfor%}
</table>
{%endfor%}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment