From 0b4d2ccdb095ce959c59026f1241dffcf5d907cf Mon Sep 17 00:00:00 2001 From: Felipe Vieira Date: Tue, 14 Feb 2012 14:23:18 +0000 Subject: [PATCH] adicionando exportacao para pdf dos diagnostico --- media/images/logo-interlegis-grande.jpg | Bin 0 -> 21902 bytes media/images/logo-interlegis-grande.png | Bin 0 -> 51313 bytes media/images/logo-senado.jpg | Bin 0 -> 7021 bytes sigi/apps/diagnosticos/forms.py | 5 +- sigi/apps/diagnosticos/models.py | 12 +- .../diagnosticos/templatetags/__init__.py | 0 .../diagnosticos/templatetags/smart_if.py | 401 ++++++++++++++++++ sigi/apps/diagnosticos/views.py | 34 +- sigi/shortcuts.py | 9 +- .../diagnosticos/diagnostico_pdf.html | 189 ++++++++- 10 files changed, 610 insertions(+), 40 deletions(-) create mode 100644 media/images/logo-interlegis-grande.jpg create mode 100644 media/images/logo-interlegis-grande.png create mode 100644 media/images/logo-senado.jpg create mode 100644 sigi/apps/diagnosticos/templatetags/__init__.py create mode 100644 sigi/apps/diagnosticos/templatetags/smart_if.py diff --git a/media/images/logo-interlegis-grande.jpg b/media/images/logo-interlegis-grande.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b742a8080ad57752106c101baba4cda1a7e9611d GIT binary patch literal 21902 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 O0000m#R1b literal 0 HcmV?d00001 diff --git a/media/images/logo-senado.jpg b/media/images/logo-senado.jpg new file mode 100644 index 0000000000000000000000000000000000000000..245754b2a6f771f6ea3fbdc55077c4c16fa3223c GIT binary patch literal 7021 zcmbVQ2|QHa+rML96Uj2xlI%+&OGPRBF8i7oj4_rOW1T2FDYAx8mPD4HU5Lt-Ex)W8 z>kzWlphSjw?^JKU-v8&_5BJ>feV*@m&htI@EEm#y(j0J9S5rq5fIuL?b?^ru%~M~} zxpKwP*wjcE9ilP3^-^d`(dCJ4xjw&WjAC;Wgp8H%C03rF{1x?!cmTJ=fOk*7?<2LIU91^ zpE;7_lXLnR-x~mnVqXw67;u6klY6>#&G8km9Rg0k^*jk z@yM#l>it3N2|mGo^!M+*{a2$0a=WoDT>tbnO4VpL%+!tjGaE4Xe^vE!q{*uO9C_zI zcz=#HjEbM?43!R*5|uI_NTo(~iAt5~D)@AsO8<8Yb8xKSKmeFG3e4UK)ZhgKf!=@K z^gm+@{9J3`i~-k?7R(EVf;$V6*S|5!+ZFB!`{DRm{SWRxnExFl?<+t3HW&aXLjwS( z{6DsB(;s^Xgk$g@o1XyyT>J#?2Y>%#69w19@jL)%Jm-u-`Tyz<0vP}RKUg5R<^kY} zw@(lX?&j_%C?_kcD0ms%vS5NbUe3~zf=-^Efg8?vqIS`6SXo0hq%S0KD`h;elHkfpAv{f%7M+Q16T;n$tw5yfwY-XqH2n7kVR zq)FfkKmmb}e}5H9YD#jUp`xOsrlp~!C0}&(jP!JL40N=#49pA+j7(smrDs0E%yfi| z$wA1?DJdvvz=lk8v~*;~|E-W-0<3i46xXAKoCGLXA(X5TQU@RaDx(HZ9P**_t3W6y zsisk1jw;q(j~oLt;c;nO0bV&d`&=MJF$L*w(N*XJX>Y@PO0TnG- z7la}JyeL_zs85`sVY_TX>*Ravq}**fcJ=#@t6tFyoi!yKzkzzkz;Q|*FT6>X_CwkK zPFVQ=OWAK>|LDR2Oq3Atloa%^dECo5^Bm_y7C~)Ag@^8amo!=RanV<^K%n zgbZBeSXy$d$$T;wYsSWvq;h+tgen2OWkh7pJ7i!DBQ(E0wi}{7!V$*5>QgJ*wZfMJ81iq#|AYfC1@)=uu1M@n(uEc3qZ=2fb( zl7P9A9W~lk$z3D-Gi?mxAlsfX3Gm1SD>r&G#+wsrX9B3$v^1&Q9){4ihvCGC5>Hph zf)hvp&SIxBM$N+_#5$Hq2(|n{*gDX8iglcJi+0Cw*U5L^3TrjiBJ#|GQxR7jPgHz5 zhvONUI!Ny( zoRgZEkwoL$xS9K49nta@vB|c5$beX=qz}})ylEF)=++TniPot2xGjPcdbgCk{(xUi zGUhHe`F@E^a&`mr-1rL1I?KNO<$a?-J>BtgnM!FSCia8%Mn&AV{94^!?y)2mfpaXH zJi2q3eJJ-`hOfE&a^HqtwA7Ao?tf8bYmQ4H-ER@rN`E6KT`H$ThZp5Ds;BJ2EtL>Y%vA9F4$7|Lq)(m-@OEZb2%3HOA6A?Ri5BoPIuVGCH2Lpwc!Dhi-fkdZzUhTtioN?j>nNxL(Mmf*6 zL{6m;CNnXEiL+c%7cN((C5q!3o2)XWEa-wE8~~-ByyRR=6x6Ld6{2ni)3H z(5`xxpcz#_R2wLcR=68{-X7hJt4oOU#)OgAn0( z5yJBAQ0kAZ0=q?(fHh zNDM1CM6Uopy_XHI>vP+*>hFfMKPWwh58iqf+jhQONdsl;Qt-JVa(j0b#`a0HaS1+V+<-2r|SJeuK(bJ;N zsJ=elNCRkXJ_0o>Z^^pn*{geWQugJuqiUu_ucs7w&3t8F4i}qFmHNa-?s-i=Pn&vi zs_5Gj>>)*k_kH~86-Zq2HH(KZc$XvNx71|BOgtj3xW6_;ASJKPF_9=yxr_f=$zt#! z%)MvX!RnJsMt*W7Z92d5)!Ppevz>1aT~?SO0k4EwRqU{*4+<)3d4gJ+y*cf(Sw-)c z6APf;b@#0Y)gl$I3!#hQ)-0!egw^niG55K3^Jws%nZ8RxmTMy(;v);DDo;{|ks+LlhDKR;S{zDnnE`T@G z{gtHBti{S@Zp}M?0ofm`35bUk3B)@xtzSSq(estxwzjkFFv{a`UIZS>uH7C~XL%6{ z9we_cq_EVS8}z~TP}LHAkfZ{{w_-rDcSWuvptgsxDwe~vy5N)DhU)b<_H6=Pfy(ou znjWQ**J=zVboT>BZ4GlAx^L$WmEsvjo`ooKPM7<^pR^8ntbHEpKEE#;c-msOU@o(c znPH)$=}19IPw|TfP5ZnlZ_5`MU7I}1Zd`hO>BGS&HnQ?>wQ%TI#GF91q5)?9SsNW9 zI5dqvv+(^yS-^cgjQ6SZt;vhM-6#BXSdUhxE}+A;gtq}U zamZw)uZ+r$-%R6lOMCe7&G4IjCy$0Mw_}GTOTvTrpgp6OB?zL9Xh~zS-%xN*T|UCz zyk$lr4eRoBQ~xn1bi7Ep(>AM?-LCjl*=Ge)0mjoVIFWu^jHmj@Lb{{we3<)Z?v>diME(mGi?a=`IYv*6XeQr$oR2*> z@3c)bQ6$xK37pFq0LXiq%i@y*$ma9C8!>q|aZ!m9uZb?zVkN z$=va8_rWeA#4OgZ~|(qkm9C2hzJM zRCu=&e?a*vRA`ewvuvdavyrnof=uT--_C)gZVBMzkX~oZWRN{FdF#Ft1fU@q~weK%B>gk1lRJUMCNTjY9o?H2CaL>sZHZT7|VX_An0v)8P&W+2?Ve z>iABtso&&Lw?|(?pUx@nR*^S0I86s*=;Ze8%~&;*82m7nx8T;Xp*pmVfTow1;BYpz zV@ikbS{rceup@Lylv_b%_txcnO0|i!9ZdfAIj%FqGVl?*+P(B46YtV$xS>ID`LNe# z^kka8E9c4Au&tbe*wASWhoPmE!spqejUkHcx%XT4OqdeKf-wJt?{2kua}-Z%b0zmoGHp+&K90;^n&2x6X|NknpF zRrlV2J70~X?RPdeSWcR}#LY|1YgubKKIik9J|>D&MA|HE);7%6@BR0O=lGn&G!yLi z%oAq0+@uA2iW9iivs@{zgf^2Y|H|IayW#;vw!wMM4z*asf<1=-vtu`cO4e4= zlC6li_0+SGiGr5Fheo&hZW;Yj>w|+v65wrso=c49Y&QuEvwMeiDq2l%%8Mz!%4wr@ zXT3jM44E?$6PJ0)Mf{DwHfw4_UoOibgV^TRFa!yh$i@%k-ByT`zo=)k=@Vg6+cd&s zl%d~PU)`8f?v<&HX&3)XBB#?NRkmW?h}lT_G1Pp1L|i_#e*48C39waoSJ2&GBS~$8 z`Ku;F{!ztztIVmEnY`24@17mP5qVV&v2AWLaU_7TP9SzXOE@>`*{a3-#=uzjkc-as zT)%ATH;)PfPo5Jkyp9U`s0If=WY2eyfO^jEjcc7YPj9~)#3Z|Iw+KatLSW0YSu z24P3ZSaNwA+jqN*2uNJPS4MoD<-|(ujuZA@L61~zp51rg zwyIy`Ss5WHSyZU;O=7wIDqCK6Wwm4N-LCtjYq(dCBf|AEJW>a>c zAmVkSxe2ycCc{EKA(I&L1hD(8_wV9dFqtDS-_ zL`h%DL*J?r(zbsi;_;|^+Ob-?sxpvvr;{Ml$-*aol_=l_ZN*dB$wzUAl^Au9fw+X!E)Hrs1$Py^C4i_YaClfU7r4=!hzC*fln0 zi)dEXn8_%$y>7pvDDb9C&3g(TaRxTJ8zOF} zNC5Oua1G}cRjaenD(v2XJG}35I>+-0_g8)%>PB?b8cCB=)61HL_g~4eq$%xPs?0o;BhS_r9pvMgD{8OAEG!z5 zxQQaqG|=7w()}`@xVl!Op1-nKcv@LhY$@J91+y+jSR3|K?guqj?qhnsqCEGQ3|SQV zQj87mYZSz-VuS5CzIkd4_m=O1TxgH5!bWbdA z5OVl$^Vvj!sw3HWqX{&gX_oCvB{Y!92IqnEL*m1jCudd_WfX>W_{wqGAK$D|Ij^tl zx%Fdi6pDIV9F&3osCX#A)+&s>N?`3YzOm!9V zIdwmo-7+JhB)sxoI)|SV-IMWJbW`%a4Q^{|Y4*)`eO#^xONvR?wGPADr3?jXgPA;S zc&OFK={;4R^HT(th+H8;%=S#dN91(@XT)YF*}> z%*~6hbC>anG1qtdkvHn2mpik%Y9bK$kn_=vBMR!-(Ff`us5uB)+eijBE-q+>fkRSPdf3DiOk?YmmF!`V&Dc``wg(QM}-FKxDw;hF`V%m-oT?=q7vnD#qFZ z8>jY&4X66IRjqH}*PYz_X62`epGLE$btiEqSz7nOiK7ONXAVwlJ+7d&uC%VTX5odd zT#Ca}DUNJ<<$Z%lO)S({?nEH1ThGcFqp~ literal 0 HcmV?d00001 diff --git a/sigi/apps/diagnosticos/forms.py b/sigi/apps/diagnosticos/forms.py index 3f717d8..b6057e3 100644 --- a/sigi/apps/diagnosticos/forms.py +++ b/sigi/apps/diagnosticos/forms.py @@ -83,10 +83,7 @@ class DiagnosticoMobileForm(BaseDynamicEntityForm): # Se determinada pergunta é da categoria pesquisada, # então, gere o campo no formulário. - for schema in self.instance.get_schemata(): - - if not schema.categoria_id == int(category): - continue + for schema in self.instance.get_schemata(int(category)): defaults = { 'label': schema.title, diff --git a/sigi/apps/diagnosticos/models.py b/sigi/apps/diagnosticos/models.py index 05af7b8..5b592a9 100644 --- a/sigi/apps/diagnosticos/models.py +++ b/sigi/apps/diagnosticos/models.py @@ -113,6 +113,16 @@ class Diagnostico(BaseEntity): 'status': "Alterado", }) + + def get_schemata(self, category=None, *args, **kwargs): + """ Se existir uma categoria retorna apenas as questões dessa. + """ + schemas = super(Diagnostico,self).get_schemata(*args, **kwargs) + if category: + schemas = [s for s in schemas if s.categoria_id == category] + + return schemas + @classmethod def get_schemata_for_model(self): return Pergunta.objects.all() @@ -121,7 +131,7 @@ class Diagnostico(BaseEntity): return str(self.casa_legislativa).decode('utf8') def get_absolute_url(self): - return "/sigi/diagnosticos/diagnostico/%i/" % (self.id, ) + return "/sigi/diagnosticos/diagnostico/%i.pdf" % (self.id, ) class Categoria(models.Model): diff --git a/sigi/apps/diagnosticos/templatetags/__init__.py b/sigi/apps/diagnosticos/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sigi/apps/diagnosticos/templatetags/smart_if.py b/sigi/apps/diagnosticos/templatetags/smart_if.py new file mode 100644 index 0000000..a8fc194 --- /dev/null +++ b/sigi/apps/diagnosticos/templatetags/smart_if.py @@ -0,0 +1,401 @@ +""" +A smarter {% if %} tag for django templates. + +While retaining current Django functionality, it also handles equality, +greater than and less than operators. Some common case examples:: + + {% if articles|length >= 5 %}...{% endif %} + {% if "ifnotequal tag" != "beautiful" %}...{% endif %} +""" +import unittest +from django import template + + +register = template.Library() + + +#============================================================================== +# Calculation objects +#============================================================================== + +class BaseCalc(object): + def __init__(self, var1, var2=None, negate=False): + self.var1 = var1 + self.var2 = var2 + self.negate = negate + + def resolve(self, context): + try: + var1, var2 = self.resolve_vars(context) + outcome = self.calculate(var1, var2) + except: + outcome = False + if self.negate: + return not outcome + return outcome + + def resolve_vars(self, context): + var2 = self.var2 and self.var2.resolve(context) + return self.var1.resolve(context), var2 + + def calculate(self, var1, var2): + raise NotImplementedError() + + +class Or(BaseCalc): + def calculate(self, var1, var2): + return var1 or var2 + + +class And(BaseCalc): + def calculate(self, var1, var2): + return var1 and var2 + + +class Equals(BaseCalc): + def calculate(self, var1, var2): + return var1 == var2 + + +class Greater(BaseCalc): + def calculate(self, var1, var2): + return var1 > var2 + + +class GreaterOrEqual(BaseCalc): + def calculate(self, var1, var2): + return var1 >= var2 + + +class In(BaseCalc): + def calculate(self, var1, var2): + return var1 in var2 + + +#============================================================================== +# Tests +#============================================================================== + +class TestVar(object): + """ + A basic self-resolvable object similar to a Django template variable. Used + to assist with tests. + """ + def __init__(self, value): + self.value = value + + def resolve(self, context): + return self.value + + +class SmartIfTests(unittest.TestCase): + def setUp(self): + self.true = TestVar(True) + self.false = TestVar(False) + self.high = TestVar(9000) + self.low = TestVar(1) + + def assertCalc(self, calc, context=None): + """ + Test a calculation is True, also checking the inverse "negate" case. + """ + context = context or {} + self.assert_(calc.resolve(context)) + calc.negate = not calc.negate + self.assertFalse(calc.resolve(context)) + + def assertCalcFalse(self, calc, context=None): + """ + Test a calculation is False, also checking the inverse "negate" case. + """ + context = context or {} + self.assertFalse(calc.resolve(context)) + calc.negate = not calc.negate + self.assert_(calc.resolve(context)) + + def test_or(self): + self.assertCalc(Or(self.true)) + self.assertCalcFalse(Or(self.false)) + self.assertCalc(Or(self.true, self.true)) + self.assertCalc(Or(self.true, self.false)) + self.assertCalc(Or(self.false, self.true)) + self.assertCalcFalse(Or(self.false, self.false)) + + def test_and(self): + self.assertCalc(And(self.true, self.true)) + self.assertCalcFalse(And(self.true, self.false)) + self.assertCalcFalse(And(self.false, self.true)) + self.assertCalcFalse(And(self.false, self.false)) + + def test_equals(self): + self.assertCalc(Equals(self.low, self.low)) + self.assertCalcFalse(Equals(self.low, self.high)) + + def test_greater(self): + self.assertCalc(Greater(self.high, self.low)) + self.assertCalcFalse(Greater(self.low, self.low)) + self.assertCalcFalse(Greater(self.low, self.high)) + + def test_greater_or_equal(self): + self.assertCalc(GreaterOrEqual(self.high, self.low)) + self.assertCalc(GreaterOrEqual(self.low, self.low)) + self.assertCalcFalse(GreaterOrEqual(self.low, self.high)) + + def test_in(self): + list_ = TestVar([1,2,3]) + invalid_list = TestVar(None) + self.assertCalc(In(self.low, list_)) + self.assertCalcFalse(In(self.low, invalid_list)) + + def test_parse_bits(self): + var = IfParser([True]).parse() + self.assert_(var.resolve({})) + var = IfParser([False]).parse() + self.assertFalse(var.resolve({})) + + var = IfParser([False, 'or', True]).parse() + self.assert_(var.resolve({})) + + var = IfParser([False, 'and', True]).parse() + self.assertFalse(var.resolve({})) + + var = IfParser(['not', False, 'and', 'not', False]).parse() + self.assert_(var.resolve({})) + + var = IfParser(['not', 'not', True]).parse() + self.assert_(var.resolve({})) + + var = IfParser([1, '=', 1]).parse() + self.assert_(var.resolve({})) + + var = IfParser([1, 'not', '=', 1]).parse() + self.assertFalse(var.resolve({})) + + var = IfParser([1, 'not', 'not', '=', 1]).parse() + self.assert_(var.resolve({})) + + var = IfParser([1, '!=', 1]).parse() + self.assertFalse(var.resolve({})) + + var = IfParser([3, '>', 2]).parse() + self.assert_(var.resolve({})) + + var = IfParser([1, '<', 2]).parse() + self.assert_(var.resolve({})) + + var = IfParser([2, 'not', 'in', [2, 3]]).parse() + self.assertFalse(var.resolve({})) + + var = IfParser([1, 'or', 1, '=', 2]).parse() + self.assert_(var.resolve({})) + + def test_boolean(self): + var = IfParser([True, 'and', True, 'and', True]).parse() + self.assert_(var.resolve({})) + var = IfParser([False, 'or', False, 'or', True]).parse() + self.assert_(var.resolve({})) + var = IfParser([True, 'and', False, 'or', True]).parse() + self.assert_(var.resolve({})) + var = IfParser([False, 'or', True, 'and', True]).parse() + self.assert_(var.resolve({})) + + var = IfParser([True, 'and', True, 'and', False]).parse() + self.assertFalse(var.resolve({})) + var = IfParser([False, 'or', False, 'or', False]).parse() + self.assertFalse(var.resolve({})) + var = IfParser([False, 'or', True, 'and', False]).parse() + self.assertFalse(var.resolve({})) + var = IfParser([False, 'and', True, 'or', False]).parse() + self.assertFalse(var.resolve({})) + + def test_invalid(self): + self.assertRaises(ValueError, IfParser(['not']).parse) + self.assertRaises(ValueError, IfParser(['==']).parse) + self.assertRaises(ValueError, IfParser([1, 'in']).parse) + self.assertRaises(ValueError, IfParser([1, '>', 'in']).parse) + self.assertRaises(ValueError, IfParser([1, '==', 'not', 'not']).parse) + self.assertRaises(ValueError, IfParser([1, 2]).parse) + + +OPERATORS = { + '=': (Equals, True), + '==': (Equals, True), + '!=': (Equals, False), + '>': (Greater, True), + '>=': (GreaterOrEqual, True), + '<=': (Greater, False), + '<': (GreaterOrEqual, False), + 'or': (Or, True), + 'and': (And, True), + 'in': (In, True), +} +BOOL_OPERATORS = ('or', 'and') + + +class IfParser(object): + error_class = ValueError + + def __init__(self, tokens): + self.tokens = tokens + + def _get_tokens(self): + return self._tokens + + def _set_tokens(self, tokens): + self._tokens = tokens + self.len = len(tokens) + self.pos = 0 + + tokens = property(_get_tokens, _set_tokens) + + def parse(self): + if self.at_end(): + raise self.error_class('No variables provided.') + var1 = self.get_bool_var() + while not self.at_end(): + op, negate = self.get_operator() + var2 = self.get_bool_var() + var1 = op(var1, var2, negate=negate) + return var1 + + def get_token(self, eof_message=None, lookahead=False): + negate = True + token = None + pos = self.pos + while token is None or token == 'not': + if pos >= self.len: + if eof_message is None: + raise self.error_class() + raise self.error_class(eof_message) + token = self.tokens[pos] + negate = not negate + pos += 1 + if not lookahead: + self.pos = pos + return token, negate + + def at_end(self): + return self.pos >= self.len + + def create_var(self, value): + return TestVar(value) + + def get_bool_var(self): + """ + Returns either a variable by itself or a non-boolean operation (such as + ``x == 0`` or ``x < 0``). + + This is needed to keep correct precedence for boolean operations (i.e. + ``x or x == 0`` should be ``x or (x == 0)``, not ``(x or x) == 0``). + """ + var = self.get_var() + if not self.at_end(): + op_token = self.get_token(lookahead=True)[0] + if isinstance(op_token, basestring) and (op_token not in + BOOL_OPERATORS): + op, negate = self.get_operator() + return op(var, self.get_var(), negate=negate) + return var + + def get_var(self): + token, negate = self.get_token('Reached end of statement, still ' + 'expecting a variable.') + if isinstance(token, basestring) and token in OPERATORS: + raise self.error_class('Expected variable, got operator (%s).' % + token) + var = self.create_var(token) + if negate: + return Or(var, negate=True) + return var + + def get_operator(self): + token, negate = self.get_token('Reached end of statement, still ' + 'expecting an operator.') + if not isinstance(token, basestring) or token not in OPERATORS: + raise self.error_class('%s is not a valid operator.' % token) + if self.at_end(): + raise self.error_class('No variable provided after "%s".' % token) + op, true = OPERATORS[token] + if not true: + negate = not negate + return op, negate + + +#============================================================================== +# Actual templatetag code. +#============================================================================== + +class TemplateIfParser(IfParser): + error_class = template.TemplateSyntaxError + + def __init__(self, parser, *args, **kwargs): + self.template_parser = parser + return super(TemplateIfParser, self).__init__(*args, **kwargs) + + def create_var(self, value): + return self.template_parser.compile_filter(value) + + +class SmartIfNode(template.Node): + def __init__(self, var, nodelist_true, nodelist_false=None): + self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false + self.var = var + + def render(self, context): + if self.var.resolve(context): + return self.nodelist_true.render(context) + if self.nodelist_false: + return self.nodelist_false.render(context) + return '' + + def __repr__(self): + return "" + + def __iter__(self): + for node in self.nodelist_true: + yield node + if self.nodelist_false: + for node in self.nodelist_false: + yield node + + def get_nodes_by_type(self, nodetype): + nodes = [] + if isinstance(self, nodetype): + nodes.append(self) + nodes.extend(self.nodelist_true.get_nodes_by_type(nodetype)) + if self.nodelist_false: + nodes.extend(self.nodelist_false.get_nodes_by_type(nodetype)) + return nodes + + +@register.tag('if') +def smart_if(parser, token): + """ + A smarter {% if %} tag for django templates. + + While retaining current Django functionality, it also handles equality, + greater than and less than operators. Some common case examples:: + + {% if articles|length >= 5 %}...{% endif %} + {% if "ifnotequal tag" != "beautiful" %}...{% endif %} + + Arguments and operators _must_ have a space between them, so + ``{% if 1>2 %}`` is not a valid smart if tag. + + All supported operators are: ``or``, ``and``, ``in``, ``=`` (or ``==``), + ``!=``, ``>``, ``>=``, ``<`` and ``<=``. + """ + bits = token.split_contents()[1:] + var = TemplateIfParser(parser, bits).parse() + nodelist_true = parser.parse(('else', 'endif')) + token = parser.next_token() + if token.contents == 'else': + nodelist_false = parser.parse(('endif',)) + parser.delete_first_token() + else: + nodelist_false = None + return SmartIfNode(var, nodelist_true, nodelist_false) + + +if __name__ == '__main__': + unittest.main() diff --git a/sigi/apps/diagnosticos/views.py b/sigi/apps/diagnosticos/views.py index 23db7a6..c98e92d 100644 --- a/sigi/apps/diagnosticos/views.py +++ b/sigi/apps/diagnosticos/views.py @@ -193,23 +193,33 @@ def diagnostico_pdf(request, id_diagnostico): diagnostico = Diagnostico.objects.get(pk=id_diagnostico) categorias = Categoria.objects.all() - forms = [] + casa_legislativa = diagnostico.casa_legislativa + funcionarios = [casa_legislativa.funcionario_set.get_or_create(setor=n)[0] + for n, l in Funcionario.SETOR_CHOICES] + + schemas_by_categoria = [] for categoria in categorias: - form = DiagnosticoMobileForm( - instance=diagnostico, - category=categoria.id - ) - fields = [] - for field in form: - #field.value = field.data[field.name] - fields.append(field) - forms.append((categoria,fields)) + schemas = [] + for schema in diagnostico.get_schemata(categoria.id): + datatype = schema.datatype + data = getattr(diagnostico, schema.name) + if datatype == schema.TYPE_MANY: + schema.value = [x.pk for x in data] + elif datatype == schema.TYPE_ONE: + schema.value = data.pk if data else None, + else: + schema.value = data + schemas.append(schema) + + schemas_by_categoria.append((categoria,schemas)) context = RequestContext(request, { 'pagesize':'A4', + 'casa_legislativa': casa_legislativa, + 'funcionarios': funcionarios, 'diagnostico': diagnostico, - 'forms': forms, + 'schemas_by_categoria': schemas_by_categoria, }) - return render_to_response('diagnosticos/diagnostico_pdf.html', context) + return render_to_pdf('diagnosticos/diagnostico_pdf.html', context) diff --git a/sigi/shortcuts.py b/sigi/shortcuts.py index 64a5ff5..ddd7a15 100644 --- a/sigi/shortcuts.py +++ b/sigi/shortcuts.py @@ -3,16 +3,23 @@ import ho.pisa as pisa from django.template.loader import get_template from django.template import Context from django.http import HttpResponse +from django.conf import settings from cgi import escape +import os +def fetch_resources(uri, rel): + path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, "")) + return path + def render_to_pdf(template_src, context_dict): template = get_template(template_src) context = Context(context_dict) html = template.render(context) result = StringIO.StringIO() - pdf = pisa.pisaDocument(StringIO.StringIO(html.encode('utf-8')), result) + pdf = pisa.pisaDocument(StringIO.StringIO(html.encode('utf-8')), result, link_callback=fetch_resources) if not pdf.err: return HttpResponse(result.getvalue(), mimetype='application/pdf') return HttpResponse('We had some errors
%s
' % escape(html)) + diff --git a/sigi/templates/diagnosticos/diagnostico_pdf.html b/sigi/templates/diagnosticos/diagnostico_pdf.html index 0b39c43..ad3525e 100644 --- a/sigi/templates/diagnosticos/diagnostico_pdf.html +++ b/sigi/templates/diagnosticos/diagnostico_pdf.html @@ -1,18 +1,75 @@ +{% load smart_if %} My Title