diff --git a/sapl/audiencia/migrations/0021_auto_20260916_1709.py b/sapl/audiencia/migrations/0021_auto_20260916_1709.py
new file mode 100644
index 000000000..82e60487d
--- /dev/null
+++ b/sapl/audiencia/migrations/0021_auto_20260916_1709.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.2.28 on 2026-09-16 20:09
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('audiencia', '0020_auto_20251201_1450'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='audienciapublica',
+ name='ano',
+ field=models.PositiveSmallIntegerField(choices=[(2027, 2027), (2026, 2026), (2025, 2025), (2024, 2024), (2023, 2023), (2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'),
+ ),
+ ]
diff --git a/sapl/materia/migrations/0088_auto_20260916_1709.py b/sapl/materia/migrations/0088_auto_20260916_1709.py
new file mode 100644
index 000000000..6bdb3fd1c
--- /dev/null
+++ b/sapl/materia/migrations/0088_auto_20260916_1709.py
@@ -0,0 +1,33 @@
+# Generated by Django 2.2.28 on 2026-09-16 20:09
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('materia', '0087_update_viewdb_materiaemtramitacao'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='materialegislativa',
+ name='ano',
+ field=models.PositiveSmallIntegerField(choices=[(2027, 2027), (2026, 2026), (2025, 2025), (2024, 2024), (2023, 2023), (2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'),
+ ),
+ migrations.AlterField(
+ model_name='materialegislativa',
+ name='ano_origem_externa',
+ field=models.PositiveSmallIntegerField(blank=True, choices=[(2027, 2027), (2026, 2026), (2025, 2025), (2024, 2024), (2023, 2023), (2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], null=True, verbose_name='Ano'),
+ ),
+ migrations.AlterField(
+ model_name='numeracao',
+ name='ano_materia',
+ field=models.PositiveSmallIntegerField(choices=[(2027, 2027), (2026, 2026), (2025, 2025), (2024, 2024), (2023, 2023), (2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'),
+ ),
+ migrations.AlterField(
+ model_name='proposicao',
+ name='ano',
+ field=models.PositiveSmallIntegerField(blank=True, choices=[(2027, 2027), (2026, 2026), (2025, 2025), (2024, 2024), (2023, 2023), (2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], default=None, null=True, verbose_name='Ano'),
+ ),
+ ]
diff --git a/sapl/norma/migrations/0046_auto_20260916_1709.py b/sapl/norma/migrations/0046_auto_20260916_1709.py
new file mode 100644
index 000000000..64a44420b
--- /dev/null
+++ b/sapl/norma/migrations/0046_auto_20260916_1709.py
@@ -0,0 +1,29 @@
+# Generated by Django 2.2.28 on 2026-09-16 20:09
+
+from django.db import migrations, models
+import sapl.norma.models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('norma', '0045_auto_20240711_1405'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='anexonormajuridica',
+ name='ano',
+ field=models.PositiveSmallIntegerField(choices=[(2027, 2027), (2026, 2026), (2025, 2025), (2024, 2024), (2023, 2023), (2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'),
+ ),
+ migrations.AlterField(
+ model_name='normaestatisticas',
+ name='ano',
+ field=models.PositiveSmallIntegerField(choices=[(2027, 2027), (2026, 2026), (2025, 2025), (2024, 2024), (2023, 2023), (2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], default=sapl.norma.models.get_ano_atual, verbose_name='Ano'),
+ ),
+ migrations.AlterField(
+ model_name='normajuridica',
+ name='ano',
+ field=models.PositiveSmallIntegerField(choices=[(2027, 2027), (2026, 2026), (2025, 2025), (2024, 2024), (2023, 2023), (2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'),
+ ),
+ ]
diff --git a/sapl/painel/urls.py b/sapl/painel/urls.py
index 759f6c379..fa8149540 100644
--- a/sapl/painel/urls.py
+++ b/sapl/painel/urls.py
@@ -4,35 +4,27 @@ from django.urls import path
from .apps import AppConfig
from .views import (cronometro_painel, painel_view,
switch_painel, verifica_painel, votante_status, votante_view,
- votante_view_v2, websocket_view, vote_controller,
- cancel_voting, close_voting, votos_status)
+ vote_controller, cancel_voting, close_voting, votos_status)
app_name = AppConfig.name
urlpatterns = [
- url(r'^painel-principal/(?P
\d+)$', painel_view,
- name="painel_principal"),
- url(r'^painel/switch-painel$', switch_painel,
- name="switch_painel"),
- url(r'^painel/verifica-painel$', verifica_painel,
- name="verifica_painel"),
- url(r'^painel/cronometro$', cronometro_painel, name='cronometro_painel'),
- # url(r'^painel/cronometro$', include(CronometroPainelCrud.get_urls())),
- url(r'^voto-individual/$', votante_view,
- name='voto_individual'),
- url(r'^voto-individual/status$', votante_status,
- name='voto_individual_status'),
- url(r'^voto-individual/v2$', votante_view_v2,
- name='voto_individual_v2'),
+ ## Votacao - FRONTEND (Django/VueJS)
+ path("painel/", painel_view, name='painel_principal'),
+ path("painel/voto-individual", votante_view, name='voto_individual'),
- path("v2/painel/", websocket_view, name='painel_websocket'),
- path("v2/painel/controller//vote",
+ ## Votacao - API
+ path("voto-individual/status", votante_status, name='voto_individual_status'),
+ path("painel/switch-painel", switch_painel, name="switch_painel"),
+ path("painel/verifica-painel", verifica_painel, name="verifica_painel"),
+ path("painel/cronometro", cronometro_painel, name='cronometro_painel'),
+ path("painel/controller//vote",
vote_controller, name='vote_controller'),
- path("v2/painel/controller//cancel",
+ path("painel/controller//cancel",
cancel_voting, name='cancel_voting'),
- path("v2/painel/controller//close",
+ path("painel/controller//close",
close_voting, name='close_voting'),
- path("v2/painel/controller//votos-status",
+ path("painel/controller//votos-status",
votos_status, name='votos_status'),
]
diff --git a/sapl/painel/views.py b/sapl/painel/views.py
index 98bca18a5..e9fa3c384 100644
--- a/sapl/painel/views.py
+++ b/sapl/painel/views.py
@@ -133,30 +133,6 @@ def votacao(context, context_vars):
return context, context_vars
-
-@never_cache
-@user_passes_test(check_permission)
-def painel_view(request, pk):
- logger = logging.getLogger(__name__)
-
- utc_now = timezone.now()
- local_now = timezone.localtime(utc_now)
- utc_offset = int(local_now.utcoffset().total_seconds() / 60)
- server_epoch_ms = int(utc_now.timestamp() * 1000)
-
- logger.info(
- "painel_view pk=%s utc_now=%s local_now=%s utc_offset=%s server_epoch_ms=%s",
- pk, utc_now, local_now, utc_offset, server_epoch_ms
- )
-
- context = {'head_title': str(_('Painel Plenário')),
- 'sessao_id': pk,
- 'server_epoch_ms': server_epoch_ms,
- 'utc_offset': utc_offset,
- }
- return render(request, 'painel/index.html', context)
-
-
def sessao_votacao(context, context_vars):
pk = context_vars['sessao'].pk
context.update({'sessao_id': pk})
@@ -314,12 +290,10 @@ def _save_voto_individual(request, context_vars):
broadcast_dados_painel(request, context_vars['sessao'].id)
-
@never_cache
@login_required
@permission_required('parlamentares.can_vote', raise_exception=True)
def votante_view(request):
- template_name = 'painel/voto_individual.html'
context, context_vars = _resolve_votante_context(request)
if request.method == 'POST':
@@ -327,23 +301,11 @@ def votante_view(request):
return HttpResponseRedirect(
reverse('sapl.painel:voto_individual'))
- return render(request, template_name, context)
+ return render(request, 'painel/voto_individual_v2.html', context)
@never_cache
@login_required
-@permission_required('parlamentares.can_vote', raise_exception=True)
-def votante_view_v2(request):
- context, context_vars = _resolve_votante_context(request)
-
- if request.method == 'POST':
- _save_voto_individual(request, context_vars)
- return HttpResponseRedirect(
- reverse('sapl.painel:voto_individual_v2'))
-
- return render(request, 'painel/voto_individual_v2.html', context)
-
-
@user_passes_test(check_permission)
def switch_painel(request):
sessao = SessaoPlenaria.objects.get(id=request.POST['pk_sessao'])
@@ -358,6 +320,8 @@ def switch_painel(request):
return JsonResponse({})
+@never_cache
+@login_required
@user_passes_test(check_permission)
def verifica_painel(request):
sessao = SessaoPlenaria.objects.get(id=request.GET['pk_sessao'])
@@ -698,13 +662,14 @@ def broadcast_dados_painel(request, sessao_id):
@never_cache
@user_passes_test(check_permission)
-def websocket_view(request, controller_id):
+def painel_view(request, sessao_id):
+ ## O controller da sessao WS é o ID da sessao
now = timezone.localtime(timezone.now())
utc_offset = now.utcoffset().total_seconds() / 60
context = {'head_title': str(_('Painel Plenário')),
'utc_offset': utc_offset,
'enable_live_ws': True,
- 'controller_id': controller_id, # aka, sessao_plenaria_id
+ 'controller_id': sessao_id, # aka, sessao_plenaria_id
}
return render(request, "painel/painel_v2.html", context)
diff --git a/sapl/protocoloadm/migrations/0046_auto_20260916_1709.py b/sapl/protocoloadm/migrations/0046_auto_20260916_1709.py
new file mode 100644
index 000000000..d3ac3297d
--- /dev/null
+++ b/sapl/protocoloadm/migrations/0046_auto_20260916_1709.py
@@ -0,0 +1,23 @@
+# Generated by Django 2.2.28 on 2026-09-16 20:09
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('protocoloadm', '0045_auto_20240711_1405'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='documentoadministrativo',
+ name='ano',
+ field=models.PositiveSmallIntegerField(choices=[(2027, 2027), (2026, 2026), (2025, 2025), (2024, 2024), (2023, 2023), (2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'),
+ ),
+ migrations.AlterField(
+ model_name='protocolo',
+ name='ano',
+ field=models.PositiveSmallIntegerField(choices=[(2027, 2027), (2026, 2026), (2025, 2025), (2024, 2024), (2023, 2023), (2022, 2022), (2021, 2021), (2020, 2020), (2019, 2019), (2018, 2018), (2017, 2017), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano do Protocolo'),
+ ),
+ ]
diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py
index dde377ceb..e199d1c22 100755
--- a/sapl/sessao/views.py
+++ b/sapl/sessao/views.py
@@ -1,10 +1,10 @@
-from collections import OrderedDict
-from datetime import datetime
import json
import logging
+from datetime import datetime
+from enum import IntEnum
from re import sub
-from django.conf import settings
+import pytz
from django.contrib import messages
from django.contrib.auth.decorators import permission_required, user_passes_test
from django.contrib.auth.mixins import PermissionRequiredMixin
@@ -14,8 +14,8 @@ from django.db.models import Max, Q
from django.http import JsonResponse, QueryDict
from django.http.response import Http404, HttpResponseRedirect
from django.middleware.csrf import get_token
+from django.shortcuts import render
from django.urls import reverse
-from django.urls.base import reverse_lazy
from django.utils import timezone
from django.utils.datastructures import MultiValueDictKeyError
from django.utils.decorators import method_decorator
@@ -29,10 +29,7 @@ from django.views.generic.base import RedirectView
from django.views.generic.detail import DetailView
from django.views.generic.edit import FormMixin
from django_filters.views import FilterView
-import pytz
-
from ratelimit.decorators import ratelimit
-from django.utils.decorators import method_decorator
from sapl.base.models import AppConfig as AppsAppConfig
from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux,
@@ -40,13 +37,12 @@ from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux,
PermissionRequiredForAppCrudMixin, make_pagination)
from sapl.materia.forms import filtra_tramitacao_status
from sapl.materia.models import (Autoria, TipoMateriaLegislativa,
- Tramitacao, MateriaEmTramitacao, Numeracao)
+ Tramitacao, MateriaEmTramitacao)
from sapl.materia.views import MateriaLegislativaPesquisaView
from sapl.painel.views import broadcast_dados_painel
from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato,
Parlamentar, SessaoLegislativa)
-from sapl.protocoloadm.models import TipoDocumentoAdministrativo, \
- DocumentoAdministrativo
+from sapl.protocoloadm.models import DocumentoAdministrativo
from sapl.sessao.apps import AppConfig
from sapl.sessao.forms import ExpedienteMateriaForm, OrdemDiaForm, OrdemExpedienteLeituraForm, \
CorrespondenciaForm, CorrespondenciaEmLoteFilterSet
@@ -54,7 +50,6 @@ from sapl.sessao.models import Correspondencia
from sapl.settings import TIME_ZONE, RATE_LIMITER_RATE
from sapl.utils import show_results_filter_set, remover_acentos, get_client_ip, \
MultiFormatOutputMixin, PautaMultiFormatOutputMixin, ratelimit_ip
-
from .forms import (AdicionarVariasMateriasFilterSet, AdicionarVariasMateriasForm, BancadaForm,
ExpedienteForm, JustificativaAusenciaForm, OcorrenciaSessaoForm,
MesaForm, OradorExpedienteForm, OradorForm, PautaSessaoFilterSet,
@@ -77,11 +72,17 @@ TipoResultadoVotacaoCrud = CrudAux.build(
TipoResultadoVotacao, 'tipo_resultado_votacao')
TipoRetiradaPautaCrud = CrudAux.build(TipoRetiradaPauta, 'tipo_retirada_pauta')
-# constantes
-SIMBOLICA = 1
-NOMINAL = 2
-SECRETA = 3
-LEITURA = 4
+
+class TipoVotacao(IntEnum):
+ # IntEnum, não Enum puro: obj.tipo_votacao vem do banco como int (o
+ # campo é IntegerField) — um Enum comum nunca é igual a nem convertível
+ # para o int equivalente (TipoVotacao.NOMINAL == 2 é False), o que
+ # quebra toda comparação abaixo e todo filtro do ORM
+ # (tipo_votacao=TipoVotacao.LEITURA). IntEnum resolve os dois.
+ SIMBOLICA = 1
+ NOMINAL = 2
+ SECRETA = 3 # not supported, by design
+ LEITURA = 4
def reordena_materias(request, pk, tipo, ordenacao):
@@ -176,7 +177,7 @@ def verifica_sessao_iniciada(request, spk, is_leitura=False):
aux_text = 'leitura' if is_leitura else 'votação'
logger.info('user=' + username + '. Não é possível abrir matérias para {}. '
'Esta SessaoPlenaria (id={}) não foi iniciada ou está finalizada.'.format(
- aux_text, spk))
+ aux_text, spk))
msg = _('Não é possível abrir matérias para {}. '
'Esta Sessão Plenária não foi iniciada ou está finalizada.'
' Vá em "Abertura"->"Dados Básicos" e altere os valores dos campos necessários.'.format(aux_text))
@@ -247,21 +248,41 @@ def abrir_votacao(request, pk, spk):
# Leitura" (que só aparece depois que a lista recarrega) para
# chegar aonde queria.
registro_view_names_ordem = {
- SIMBOLICA: 'votacaosimbolica', NOMINAL: 'votacaonominal',
- SECRETA: 'votacaosecreta', LEITURA: 'leituraod',
+ # Simbólica e Leitura (Ordem do Dia) vão para as telas de
+ # registro v2 (Vue) — mesmo raciocínio do NOMINAL abaixo.
+ # Secreta fica na legada: não tem tela v2 (VotacaoView/
+ # votacao.html atende Simbólica e Secreta hoje, mas só
+ # Simbólica ganhou uma tela v2 dedicada). NOMINAL aqui não é
+ # usado — tratado à parte logo abaixo (única URL v2 sem
+ # oid/mid).
+ TipoVotacao.SIMBOLICA: 'votacaosimbolica_v2', TipoVotacao.NOMINAL: 'votacaonominal',
+ TipoVotacao.SECRETA: 'votacaosecreta', TipoVotacao.LEITURA: 'leituraod_v2',
}
registro_view_names_expediente = {
- SIMBOLICA: 'votacaosimbolicaexp', NOMINAL: 'votacaonominalexp',
- SECRETA: 'votacaosecretaexp', LEITURA: 'leituraexp',
+ TipoVotacao.SIMBOLICA: 'votacaosimbolicaexp', TipoVotacao.NOMINAL: 'votacaonominalexp',
+ TipoVotacao.SECRETA: 'votacaosecretaexp', TipoVotacao.LEITURA: 'leituraexp',
}
registro_view_names = (registro_view_names_expediente if is_expediente
else registro_view_names_ordem)
- registro_view_name = registro_view_names[materia_votacao.tipo_votacao]
- success_url = reverse('sapl.sessao:' + registro_view_name, kwargs={
- 'pk': spk, 'oid': materia_votacao.pk,
- 'mid': materia_votacao.materia_id})
- if 'page' in request.GET:
- success_url += '?page={}'.format(request.GET['page'])
+
+ if not is_expediente and materia_votacao.tipo_votacao == TipoVotacao.NOMINAL:
+ # Votação Nominal de Ordem do Dia vai para a tela de registro
+ # v2 (Vue) em vez da legada — é a única com submissão por
+ # parlamentar (VotacaoVotos.vue -> vote_controller, salva e
+ # transmite a cada troca de voto, sem esperar o "Encerrar
+ # Votação" em lote). Sem equivalente v2 ainda para
+ # Nominal/Expediente nem para os outros tipos de votação, que
+ # continuam na tela legada abaixo. votacaonominal_v2 não tem
+ # oid/mid na URL — a matéria aberta é resolvida via o broadcast
+ # do WebSocket, não por parâmetro de rota.
+ success_url = reverse('sapl.sessao:votacaonominal_v2', kwargs={'pk': spk})
+ else:
+ registro_view_name = registro_view_names[materia_votacao.tipo_votacao]
+ success_url = reverse('sapl.sessao:' + registro_view_name, kwargs={
+ 'pk': spk, 'oid': materia_votacao.pk,
+ 'mid': materia_votacao.materia_id})
+ if 'page' in request.GET:
+ success_url += '?page={}'.format(request.GET['page'])
else:
query_params = "?"
if 'page' in request.GET:
@@ -338,30 +359,30 @@ def customize_link_materia(context, pk, has_permission, is_expediente, request=N
exist_leitura = obj.registroleitura_set.filter(
materia=obj.materia).exists()
- if (obj.tipo_votacao != LEITURA and not exist_resultado and not exist_retirada) or \
- (obj.tipo_votacao == LEITURA and not exist_leitura):
+ if (obj.tipo_votacao != TipoVotacao.LEITURA and not exist_resultado and not exist_retirada) or \
+ (obj.tipo_votacao == TipoVotacao.LEITURA and not exist_leitura):
if obj.votacao_aberta:
url = ''
if is_expediente:
- if obj.tipo_votacao == SIMBOLICA:
+ if obj.tipo_votacao == TipoVotacao.SIMBOLICA:
url = reverse('sapl.sessao:votacaosimbolicaexp',
kwargs={
'pk': obj.sessao_plenaria_id,
'oid': obj.pk,
'mid': obj.materia_id})
- elif obj.tipo_votacao == NOMINAL:
+ elif obj.tipo_votacao == TipoVotacao.NOMINAL:
url = reverse('sapl.sessao:votacaonominalexp',
kwargs={
'pk': obj.sessao_plenaria_id,
'oid': obj.pk,
'mid': obj.materia_id})
- elif obj.tipo_votacao == SECRETA:
+ elif obj.tipo_votacao == TipoVotacao.SECRETA:
url = reverse('sapl.sessao:votacaosecretaexp',
kwargs={
'pk': obj.sessao_plenaria_id,
'oid': obj.pk,
'mid': obj.materia_id})
- elif obj.tipo_votacao == LEITURA:
+ elif obj.tipo_votacao == TipoVotacao.LEITURA:
url = reverse('sapl.sessao:leituraexp',
kwargs={
'pk': obj.sessao_plenaria_id,
@@ -369,26 +390,29 @@ def customize_link_materia(context, pk, has_permission, is_expediente, request=N
'mid': obj.materia_id})
else:
- if obj.tipo_votacao == SIMBOLICA:
- url = reverse('sapl.sessao:votacaosimbolica',
- kwargs={
- 'pk': obj.sessao_plenaria_id,
- 'oid': obj.pk,
- 'mid': obj.materia_id})
- elif obj.tipo_votacao == NOMINAL:
- url = reverse('sapl.sessao:votacaonominal',
+ # Ordem do Dia: Simbólica/Nominal/Leitura têm tela de
+ # registro v2 (Vue) — mesmo link que abrir_votacao()
+ # usa para redirecionar direto após abrir. Secreta
+ # continua na legada (sem tela v2). votacaonominal_v2
+ # não tem oid/mid na URL (matéria resolvida via o
+ # broadcast do WebSocket).
+ if obj.tipo_votacao == TipoVotacao.SIMBOLICA:
+ url = reverse('sapl.sessao:votacaosimbolica_v2',
kwargs={
'pk': obj.sessao_plenaria_id,
'oid': obj.pk,
'mid': obj.materia_id})
- elif obj.tipo_votacao == SECRETA:
+ elif obj.tipo_votacao == TipoVotacao.NOMINAL:
+ url = reverse('sapl.sessao:votacaonominal_v2',
+ kwargs={'pk': obj.sessao_plenaria_id})
+ elif obj.tipo_votacao == TipoVotacao.SECRETA:
url = reverse('sapl.sessao:votacaosecreta',
kwargs={
'pk': obj.sessao_plenaria_id,
'oid': obj.pk,
'mid': obj.materia_id})
- elif obj.tipo_votacao == LEITURA:
- url = reverse('sapl.sessao:leituraod',
+ elif obj.tipo_votacao == TipoVotacao.LEITURA:
+ url = reverse('sapl.sessao:leituraod_v2',
kwargs={
'pk': obj.sessao_plenaria_id,
'oid': obj.pk,
@@ -400,19 +424,21 @@ def customize_link_materia(context, pk, has_permission, is_expediente, request=N
page_number = "" % context['page']
if has_permission:
- if obj.tipo_votacao != LEITURA:
- # Votação Nominal é a única que envolve votos individuais
- # pelos tablets (VOTACAO_NOMINAL em sapl/painel/views.py), e
- # é a única cuja tela de registro (VotacaoNominalAbstract)
- # sabe tratar POST sem efeito colateral — por isso só ela é
- # convertida para POST aqui; Simbólica/Secreta continuam GET.
+ if obj.tipo_votacao != TipoVotacao.LEITURA:
+ # Votação Nominal de Expediente é a única que ainda
+ # aponta para VotacaoNominalAbstract (sem tela v2) —
+ # é a única cuja tela de registro sabe tratar POST
+ # sem efeito colateral, por isso só ela é convertida
+ # para POST aqui; Simbólica/Secreta continuam GET, e
+ # Nominal de Ordem do Dia também (aponta para
+ # votacaonominal_v2, que só faz GET).
metodo = ''
csrf_input = ''
- if obj.tipo_votacao == NOMINAL:
+ if is_expediente and obj.tipo_votacao == TipoVotacao.NOMINAL:
metodo = ' method="post"'
csrf_input = (
- ''
- % get_token(request))
+ ''
+ % get_token(request))
btn_registrar = '''
-
-
- {% block webpack_loader_js %}
- {% render_chunk_vendors 'js' %}
- {% render_bundle 'global' 'js' %}
- {% render_bundle 'painel' 'js' %}
- {% endblock webpack_loader_js %}
-
- {% block webpack_loader_chunks_js %}
- {% endblock webpack_loader_chunks_js %}
-
-
-
-
diff --git a/sapl/templates/painel/painel_v2.html b/sapl/templates/painel/painel_v2.html
index e32f218a0..2729d3e9d 100644
--- a/sapl/templates/painel/painel_v2.html
+++ b/sapl/templates/painel/painel_v2.html
@@ -23,7 +23,6 @@
{% endblock webpack_loader_css %}
-
{% block vue_content %}
diff --git a/sapl/templates/painel/voto_individual.html b/sapl/templates/painel/voto_individual.html
deleted file mode 100644
index 1b2f3d8f8..000000000
--- a/sapl/templates/painel/voto_individual.html
+++ /dev/null
@@ -1,323 +0,0 @@
-{% load i18n %}
-{% load common_tags %}
-{% load render_bundle from webpack_loader %}
-{% load webpack_static from webpack_loader %}
-
-
-
-
-