massal.py
4.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
from datetime import datetime
import colander
from tangsel.base.views import BaseView
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from deform import widget
from .my_nop import btn_close
from ..models.es_log import LogEspptMassal
class MassalSchema(colander.Schema):
id = colander.SchemaNode(
colander.Integer(),
widget=widget.HiddenWidget(),
missing=colander.drop,
title="ACT",)
tahun = colander.SchemaNode(
colander.String(),
title="Tahun Pajak",
default=datetime.now().year)
jenis = colander.SchemaNode(
colander.String(),
widget=widget.RadioChoiceWidget(
values=(("1", "NOP yang terdaftar"),
("2", "Semua NOP"))),
title="Jenis Proses",
default="1")
class ListSchema(MassalSchema):
jml_sppt = colander.SchemaNode(
colander.Integer(),
missing=colander.drop
)
jml_proses = colander.SchemaNode(
colander.Integer(),
missing=colander.drop
)
partner_id = colander.SchemaNode(
colander.String(),
missing=colander.drop,
title="ID WP/Halaman"
)
nop = colander.SchemaNode(
colander.String(),
missing=colander.drop,
title="Nop Terakhir"
)
status_text = colander.SchemaNode(
colander.String(),
missing=colander.drop,
title="Status"
)
class AddSchema(MassalSchema):
force = colander.SchemaNode(
colander.Integer(),
widget=widget.RadioChoiceWidget(values=((0, "Tidak"), (1, "Ya"))),
default=0,
title="Proses jika sudah ditetapkan",
oid="force")
def after_bind(self, schema, kw):
del schema["id"]
# passphrase = colander.SchemaNode(
# colander.String(),
# widget=widget.PasswordWidget(),
# oid="passphrase")
class EditSchema(MassalSchema):
jml_proses = colander.SchemaNode(
colander.Integer(),
missing=colander.drop
)
partner_id = colander.SchemaNode(
colander.String(),
missing=colander.drop,
title="ID WP/Halaman"
)
nop = colander.SchemaNode(
colander.String(),
missing=colander.drop,
title="Nop Terakhir"
)
jml_sppt = colander.SchemaNode(
colander.Integer(),
missing=colander.drop
)
status_text = colander.SchemaNode(
colander.String(),
missing=colander.drop
)
def after_bind(self, schema, kw):
req = kw.get("request")
self["tahun"].default = req.session.get("tahun")
self["tahun"].missing = colander.drop
self["jenis"].missing = colander.drop
jenis = kw.get("jenis")
if jenis and jenis == "1":
self["partner_id"].title = "ID WP"
else:
self["partner_id"].title = "Halaman"
class Views(BaseView):
def __init__(self, request):
super().__init__(request)
self.list_schema = ListSchema
self.list_route = "esppt-massal"
self.add_schema = AddSchema
self.edit_schema = EditSchema
self.table = LogEspptMassal
self.allow_edit = False
def form_validator(self, form, value):
exc = colander.Invalid(form, "")
found = self.table.query().filter_by(tahun=value.get("tahun")).first()
if found and not value.get("force"):
exc["tahun"] = "Sudah terdapat penetapan tahun berjalan"
raise exc
if not self.req.matchdict.get("id") or value.get("force"):
value["status"] = 0
value["jml_sppt"] = 0
value["jml_proses"] = 0
value["row"] = found
def save_request(self, values, row=None):
if "row" in values:
row = values["row"]
del values["row"]
values['status'] = 0
row = super().save_request(values, row)
self.ses.flash("E-SPPT berhasil dimasukan kedalam antrian")
return row
def get_values(self, row, istime=False):
values = super().get_values(row, istime)
values["jml_proses"] = row.jml_proses
values["jml_sppt"] = row.jml_sppt
values["status_text"] = row.status_text
return values
def id_not_found(self):
msg = f"Tidak ada data penetapan massal"
self.req.session.flash(msg, 'error')
return self.route_list()
def before_delete(self, row):
if row.status and row.status > 0:
msg = f"Data penetapan massal tidak bisa dihapus"
raise Exception(msg)