Ejemplo n.º 1
0
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',})
Ejemplo n.º 2
0
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',})