def view_activity(request,from_d,to_d,template='board/view_activity.html'): try: f_d=datetime.strptime(from_d,'%m%d%Y') t_d=datetime.strptime(to_d,'%m%d%Y') except ValueError: return HttpResponse(status=400) if (t_d-f_d).days<0: return HttpResponse(status=400) try: auser=User.objects.get(id=request.user.id) except ObjectDoesNotExist: raise Http404 if auser.is_superuser: acts=Activity.objects.all().order_by('user') else: acts=auser.activities.all().order_by('user') capsule=dict() ty=None aform=ActivityTypeForm() if request.method=='POST' and 'choice' in request.POST: aform=ActivityTypeForm(request.POST) if aform.is_valid(): ty=aform.cleaned_data['choice'] elif request.method=='GET' and 'ty' in request.GET: ty=request.GET.get('ty',None) aform.fields['choice'].initial=ty for dt in rrule.rrule(rrule.MONTHLY,dtstart=f_d, until=t_d): tod=dt+relativedelta(months=1) d=capsule.setdefault(dt,{}) d['tod']=[dt.strftime('%m%d%Y'),tod.strftime('%m%d%Y')] d['acts']=[] tmp=acts.filter(fdate__gte=dt,fdate__lt=tod) if ty: tmp=tmp.filter(activity_ty=ty) for ac in tmp: center=ac.user.username a=dict(Activity.A_TYPE)[ac.activity_ty] obj={} for i in WEEK_CHOICES: t=ac.description.get(week=i[0]) for ii in Beneficiary.B_TYPE: obj[i[0]+ii[0]]=t.beneficiaries.filter(ty=ii[0]).count() d['acts'].append({'center':center,'id':ac.id,'a':a,'obj':obj}) capsule=sorted(capsule.items()) #form=ActivityDateForm(extra={'from_date':(f_d.month,f_d.year,f_d.day),'to_date':(t_d.month,t_d.year,t_d.day),'editable':False,},) ty=None aform=ActivityTypeForm() if request.method=='POST' and 'choice' in request.POST: aform=ActivityTypeForm(request.POST) if aform.is_valid(): ty=aform.cleaned_data['choice'] elif request.method=='GET' and 'ty' in request.GET: ty=request.GET.get('ty',None) aform.fields['choice'].initial=ty renders={'from_date':f_d,'to_date':t_d,'aform':aform} paginator=Paginator(capsule,3) page=request.GET.get('page') try: contents=paginator.page(page) except PageNotAnInteger: contents=paginator.page(1) except EmptyPage: contents=paginator.page(paginator.num_pages) adjacent_pages=3 startPage = max(contents.number - adjacent_pages, 1) endPage = contents.number + adjacent_pages if endPage >= contents.paginator.num_pages : endPage = contents.paginator.num_pages page_numbers = [n for n in range(startPage, endPage+1) if n > 0 and n <= contents.paginator.num_pages] json_data={} for c in contents: if c[1]["acts"]: for cc in c[1]["acts"]: dic={} aws=ActivityWeeklyDescription.objects.filter(activity__id=cc['id']).prefetch_related('beneficiaries') for aw in aws: w=aw.week dic[w]={} d=aw.description dic[w]['d']=d dicc=dict() for a in aw.beneficiaries.all().values_list('ty','lname','fname',): diccc=dicc.setdefault(a[0],[]) diccc.append(a[1]+' '+a[2]) dicc[a[0]]=diccc dic[w]['b']=dicc json_data[u'%s'%cc['id']]=dic json_data=json.dumps(json_data) return render(request,template,{'conf':conf,'page_numbers':page_numbers,'renders':renders,'contents':contents, 'ty':ty,'from_d':from_d,'to_d':to_d,'json_data':json_data,'title':'view activity',})
def view_beneficiary_history(request,from_d,to_d,ben_id,template='board/view_beneficiary_history.html'): try: f_d=datetime.strptime(from_d,'%m%d%Y') t_d=datetime.strptime(to_d,'%m%d%Y') except ValueError: return HttpResponse(status=400) if (t_d-f_d).days<0: return HttpResponse(status=400) try: auser=User.objects.get(id=request.user.id) if auser.is_superuser: bens=Beneficiary.objects.get(id=ben_id) else: bens=auser.beneficiaries.get(id=ben_id) except ObjectDoesNotExist: raise Http404 bens_contents={'ty':dict(Beneficiary.B_TYPE)[bens.ty], 'fname':bens.fname, 'lname':bens.lname, 'group':bens.group.all() } ty=None aform=ActivityTypeForm() if request.method=='POST' and 'choice' in request.POST: aform=ActivityTypeForm(request.POST) if aform.is_valid(): ty=aform.cleaned_data['choice'] elif request.method=='GET' and 'ty' in request.GET: ty=request.GET.get('ty',None) aform.fields['choice'].initial=ty fset=modelformset_factory(Activity,formset=MyModelFormsetBase,form=BeneficiaryAttendanceForm,extra=0) fset.form = staticmethod(curry(BeneficiaryAttendanceForm,extra_args=MyModelFormsetBase.extra_args)) contents=[] q=bens.user.activities.filter(fdate__gte=f_d,fdate__lte=t_d).order_by('fdate') if ty: q=q.filter(activity_ty=ty) paginator=Paginator(q,10) page=request.GET.get('page') try: contents=paginator.page(page) except PageNotAnInteger: contents=paginator.page(1) except EmptyPage: contents=paginator.page(paginator.num_pages) adjacent_pages=3 startPage = max(contents.number - adjacent_pages, 1) endPage = contents.number + adjacent_pages if endPage >= contents.paginator.num_pages : endPage = contents.paginator.num_pages page_numbers = [n for n in range(startPage, endPage+1) if n > 0 and n <= contents.paginator.num_pages] page_query = q.filter(id__in=[c.id for c in contents]) if request.method=='POST': if 'save' in request.POST: forms=fset(request.POST,queryset=page_query,extra_args=bens) if forms.is_valid(): for f in forms: f.save() messages.add_message(request,messages.SUCCESS,'The data have been successfully edited.') return HttpResponseRedirect(reverse('view_beneficiary_history', kwargs={'from_d':from_d, 'to_d':to_d, 'ben_id':bens.id})) else: forms=fset(queryset=page_query,extra_args=bens) else : forms=fset(queryset=page_query,extra_args=bens) renders={} renders['aform']=aform renders['bform']=[] json_data={} for f in forms: renders['bform'].append({'center':f.activity.user.username,'activity_ty':dict(Activity.A_TYPE)[f.activity.activity_ty], 'fdate':f.activity.fdate,'tdate':f.activity.tdate,'form':f}) dic={} for aw in f.activity.description.all(): dic[aw.week]=aw.description json_data[f.activity.id]=dic json_data=json.dumps(json_data) return render(request,template,{'conf':conf,'page_numbers':page_numbers,'bens_contents':bens_contents,'contents':contents,'renders':renders, 'ty':ty,'from_d':from_d,'to_d':to_d,'ben_id':ben_id,'forms':forms,'json_data':json_data,'title':'view activity',})