massal.py 4.49 KB
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)