Add new models and views for Eselon, Jabatan, Pangkat, and PartnerDepartemen

- Created migration script to add new columns (rpc_url, rpc_user, rpc_callback, rpc_password) to the partner table.
- Implemented new models: Eselon, Jabatan, Pangkat, and PartnerDepartemen with appropriate relationships.
- Developed views for Eselon, Jabatan, Pangkat, and PartnerDepartemen including schemas for listing, adding, and editing.
- Enhanced the environment setup for Alembic migrations.
- Added functionality for handling partner positions with validation and data retrieval methods.
1 parent c7cf6363
"""empty message
Revision ID: 10a68b1510a6
Revises:
Create Date: 2026-01-19 18:41:11.619834
"""
# revision identifiers, used by Alembic.
revision = '10a68b1510a6'
down_revision = None
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('groups',
sa.Column('member_count', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('group_name', sa.Unicode(length=128), nullable=False),
sa.Column('description', sa.Text(), nullable=True),
sa.PrimaryKeyConstraint('id', name=op.f('pk_groups')),
sa.UniqueConstraint('group_name', name=op.f('uq_groups_group_name')),
mysql_charset='utf8',
mysql_engine='InnoDB'
)
op.create_table('holiday',
sa.Column('tanggal', sa.DateTime(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint('id', name=op.f('pk_holiday'))
)
op.create_table('logs',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('line_id', sa.String(length=32), nullable=False),
sa.Column('logger', sa.String(), nullable=True),
sa.Column('level', sa.String(), nullable=True),
sa.Column('trace', sa.String(), nullable=True),
sa.Column('msg', sa.String(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=False),
sa.PrimaryKeyConstraint('id', name=op.f('pk_logs')),
sa.UniqueConstraint('line_id', name=op.f('uq_logs_line_id'))
)
op.create_table('parameters',
sa.Column('value', sa.String(length=256), nullable=False),
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('kode', sa.String(length=32), nullable=False),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint('id', name=op.f('pk_parameters'))
)
op.create_table('departemen',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('parent_id', sa.Integer(), nullable=True),
sa.Column('kategori', sa.String(length=32), nullable=True),
sa.Column('alamat', sa.String(length=255), nullable=True),
sa.Column('singkat', sa.String(length=32), nullable=True),
sa.Column('level_id', sa.SmallInteger(), nullable=True),
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('kode', sa.String(length=32), nullable=False),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(['parent_id'], ['public.departemen.id'], name=op.f('fk_departemen_parent_id_departemen')),
sa.PrimaryKeyConstraint('id', name=op.f('pk_departemen')),
schema='public'
)
op.create_table('eselon',
sa.Column('pangkat', sa.String(length=32), nullable=True),
sa.Column('ruang', sa.String(length=1), nullable=True),
sa.Column('tunjangan', sa.BigInteger(), nullable=True),
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('kode', sa.String(length=32), nullable=False),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint('id', name=op.f('pk_eselon')),
schema='public'
)
op.create_table('pangkat',
sa.Column('pangkat', sa.String(length=32), nullable=True),
sa.Column('ruang', sa.String(length=1), nullable=True),
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('kode', sa.String(length=32), nullable=False),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint('id', name=op.f('pk_pangkat')),
schema='public'
)
op.create_table('permissions',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('perm_name', sa.String(length=64), nullable=False),
sa.Column('description', sa.String(length=64), nullable=False),
sa.PrimaryKeyConstraint('id', name=op.f('pk_permissions')),
sa.UniqueConstraint('description', name=op.f('uq_permissions_description')),
sa.UniqueConstraint('perm_name', name=op.f('uq_permissions_perm_name')),
schema='public'
)
op.create_table('res_provinsi',
sa.Column('kategori', sa.String(length=32), nullable=True),
sa.Column('ibu_kota', sa.String(length=64), nullable=True),
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('kode', sa.String(length=32), nullable=False),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint('id', name=op.f('pk_res_provinsi')),
schema='public'
)
op.create_table('routes',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('kode', sa.String(length=128), nullable=True),
sa.Column('path', sa.String(length=256), nullable=False),
sa.Column('status', sa.Integer(), server_default='1', nullable=False),
sa.Column('type', sa.SmallInteger(), server_default='0', nullable=False),
sa.Column('app_id', sa.SmallInteger(), server_default='0', nullable=False),
sa.Column('module', sa.String(length=256), nullable=True),
sa.Column('is_menu', sa.SmallInteger(), nullable=True),
sa.Column('parent_id', sa.Integer(), nullable=True),
sa.Column('order_id', sa.Integer(), nullable=True),
sa.Column('permission', sa.String(length=256), nullable=True),
sa.Column('class_view', sa.String(length=256), nullable=True),
sa.Column('def_func', sa.String(length=256), nullable=True),
sa.Column('template', sa.String(length=256), nullable=True),
sa.Column('icon', sa.String(length=256), nullable=True),
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(['parent_id'], ['routes.id'], name=op.f('fk_routes_parent_id_routes')),
sa.PrimaryKeyConstraint('id', name=op.f('pk_routes')),
sa.UniqueConstraint('kode', name=op.f('uq_routes_kode')),
sa.UniqueConstraint('path', name=op.f('uq_routes_path'))
)
op.create_table('target_jenis',
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('kode', sa.String(length=32), nullable=False),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint('id', name=op.f('pk_target_jenis'))
)
op.create_table('targets',
sa.Column('tahun', sa.Integer(), nullable=False),
sa.Column('jenis', sa.Integer(), nullable=False),
sa.Column('m01', sa.BigInteger(), nullable=False),
sa.Column('m02', sa.BigInteger(), nullable=False),
sa.Column('m03', sa.BigInteger(), nullable=False),
sa.Column('m04', sa.BigInteger(), nullable=False),
sa.Column('m05', sa.BigInteger(), nullable=False),
sa.Column('m06', sa.BigInteger(), nullable=False),
sa.Column('m07', sa.BigInteger(), nullable=False),
sa.Column('m08', sa.BigInteger(), nullable=False),
sa.Column('m09', sa.BigInteger(), nullable=False),
sa.Column('m10', sa.BigInteger(), nullable=False),
sa.Column('m11', sa.BigInteger(), nullable=False),
sa.Column('m12', sa.BigInteger(), nullable=False),
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('kode', sa.String(length=32), nullable=False),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint('id', name=op.f('pk_targets'))
)
op.create_table('users',
sa.Column('last_login_date', sa.DateTime(timezone=True), nullable=True),
sa.Column('registered_date', sa.DateTime(timezone=True), nullable=False),
sa.Column('security_code_date', sa.DateTime(timezone=True), server_default='2000-01-01 01:01+7', nullable=True),
sa.Column('api_key', sa.String(length=256), nullable=True),
sa.Column('partner_id', sa.Integer(), nullable=True),
sa.Column('company_id', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
sa.Column('user_name', sa.Unicode(length=128), nullable=True),
sa.Column('user_password', sa.Unicode(length=256), nullable=True),
sa.Column('email', sa.Unicode(length=100), nullable=False),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('security_code', sa.Unicode(length=256), nullable=True),
sa.PrimaryKeyConstraint('id', name=op.f('pk_users')),
sa.UniqueConstraint('email', name=op.f('uq_users_email')),
sa.UniqueConstraint('user_name', name=op.f('uq_users_user_name')),
mysql_charset='utf8',
mysql_engine='InnoDB'
)
op.create_table('external_identities',
sa.Column('external_id', sa.Unicode(length=255), nullable=False),
sa.Column('external_user_name', sa.Unicode(length=255), nullable=True),
sa.Column('local_user_id', sa.Integer(), nullable=False),
sa.Column('provider_name', sa.Unicode(length=50), nullable=False),
sa.Column('access_token', sa.Unicode(length=512), nullable=True),
sa.Column('alt_token', sa.Unicode(length=512), nullable=True),
sa.Column('token_secret', sa.Unicode(length=512), nullable=True),
sa.ForeignKeyConstraint(['local_user_id'], ['users.id'], name=op.f('fk_external_identities_local_user_id_users'), onupdate='CASCADE', ondelete='CASCADE'),
sa.PrimaryKeyConstraint('external_id', 'local_user_id', 'provider_name', name='pk_external_identities'),
mysql_charset='utf8',
mysql_engine='InnoDB'
)
op.create_table('groups_permissions',
sa.Column('group_id', sa.Integer(), nullable=False),
sa.Column('perm_name', sa.Unicode(length=64), nullable=False),
sa.ForeignKeyConstraint(['group_id'], ['groups.id'], name=op.f('fk_groups_permissions_group_id_groups'), onupdate='CASCADE', ondelete='CASCADE'),
sa.PrimaryKeyConstraint('group_id', 'perm_name', name='pk_groups_permissions'),
mysql_charset='utf8',
mysql_engine='InnoDB'
)
op.create_table('jabatan',
sa.Column('jenis', sa.SmallInteger(), nullable=True),
sa.Column('nama_lain', sa.String(length=128), nullable=True),
sa.Column('nama_pendek', sa.String(length=128), nullable=True),
sa.Column('eselon_id', sa.SmallInteger(), nullable=True),
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('kode', sa.String(length=32), nullable=False),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['eselon_id'], ['public.eselon.id'], name=op.f('fk_jabatan_eselon_id_eselon')),
sa.PrimaryKeyConstraint('id', name=op.f('pk_jabatan')),
schema='public'
)
op.create_table('res_dati2',
sa.Column('kategori', sa.String(length=32), nullable=True),
sa.Column('ibu_kota', sa.String(length=64), nullable=True),
sa.Column('provinsi_id', sa.SmallInteger(), nullable=True),
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('kode', sa.String(length=32), nullable=False),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['provinsi_id'], ['public.res_provinsi.id'], name=op.f('fk_res_dati2_provinsi_id_res_provinsi')),
sa.PrimaryKeyConstraint('id', name=op.f('pk_res_dati2')),
schema='public'
)
op.create_table('resources',
sa.Column('resource_id', sa.Integer(), autoincrement=True, nullable=False),
sa.Column('parent_id', sa.Integer(), nullable=True),
sa.Column('ordering', sa.Integer(), nullable=False),
sa.Column('resource_name', sa.Unicode(length=100), nullable=False),
sa.Column('resource_type', sa.Unicode(length=30), nullable=False),
sa.Column('owner_group_id', sa.Integer(), nullable=True),
sa.Column('owner_user_id', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(['owner_group_id'], ['groups.id'], name=op.f('fk_resources_owner_group_id_groups'), onupdate='CASCADE', ondelete='SET NULL'),
sa.ForeignKeyConstraint(['owner_user_id'], ['users.id'], name=op.f('fk_resources_owner_user_id_users'), onupdate='CASCADE', ondelete='SET NULL'),
sa.ForeignKeyConstraint(['parent_id'], ['resources.resource_id'], name=op.f('fk_resources_parent_id_resources'), onupdate='CASCADE', ondelete='SET NULL'),
sa.PrimaryKeyConstraint('resource_id', name=op.f('pk_resources')),
mysql_charset='utf8',
mysql_engine='InnoDB'
)
op.create_index(op.f('ix_resources_owner_group_id'), 'resources', ['owner_group_id'], unique=False)
op.create_index(op.f('ix_resources_owner_user_id'), 'resources', ['owner_user_id'], unique=False)
op.create_table('user_device',
sa.Column('user_id', sa.Integer(), nullable=True),
sa.Column('kode', sa.String(length=256), nullable=True),
sa.Column('token', sa.String(length=256), nullable=True),
sa.Column('logged_in', sa.Integer(), nullable=True),
sa.Column('las_login_date', sa.DateTime(timezone=True), nullable=True),
sa.Column('expired', sa.DateTime(timezone=True), nullable=True),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], name=op.f('fk_user_device_user_id_users')),
sa.PrimaryKeyConstraint('id', name=op.f('pk_user_device'))
)
op.create_table('users_groups',
sa.Column('group_id', sa.Integer(), nullable=False),
sa.Column('user_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['group_id'], ['groups.id'], name=op.f('fk_users_groups_group_id_groups'), onupdate='CASCADE', ondelete='CASCADE'),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], name=op.f('fk_users_groups_user_id_users'), onupdate='CASCADE', ondelete='CASCADE'),
sa.PrimaryKeyConstraint('group_id', 'user_id', name=op.f('pk_users_groups')),
mysql_charset='utf8',
mysql_engine='InnoDB'
)
op.create_table('users_permissions',
sa.Column('user_id', sa.Integer(), nullable=False),
sa.Column('perm_name', sa.Unicode(length=64), nullable=False),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], name=op.f('fk_users_permissions_user_id_users'), onupdate='CASCADE', ondelete='CASCADE'),
sa.PrimaryKeyConstraint('user_id', 'perm_name', name='pk_users_permissions'),
mysql_charset='utf8',
mysql_engine='InnoDB'
)
op.create_table('groups_resources_permissions',
sa.Column('group_id', sa.Integer(), nullable=False),
sa.Column('resource_id', sa.Integer(), autoincrement=False, nullable=False),
sa.Column('perm_name', sa.Unicode(length=50), nullable=False),
sa.ForeignKeyConstraint(['group_id'], ['groups.id'], name=op.f('fk_groups_resources_permissions_group_id_groups'), onupdate='CASCADE', ondelete='CASCADE'),
sa.ForeignKeyConstraint(['resource_id'], ['resources.resource_id'], name=op.f('fk_groups_resources_permissions_resource_id_resources'), onupdate='CASCADE', ondelete='CASCADE'),
sa.PrimaryKeyConstraint('group_id', 'resource_id', 'perm_name', name='pk_group_resources_permissions '),
mysql_charset='utf8',
mysql_engine='InnoDB'
)
op.create_table('res_kecamatan',
sa.Column('ibu_kota', sa.String(length=64), nullable=True),
sa.Column('dati2_id', sa.SmallInteger(), nullable=True),
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('kode', sa.String(length=32), nullable=False),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['dati2_id'], ['public.res_dati2.id'], name=op.f('fk_res_kecamatan_dati2_id_res_dati2')),
sa.PrimaryKeyConstraint('id', name=op.f('pk_res_kecamatan')),
schema='public'
)
op.create_table('users_resources_permissions',
sa.Column('user_id', sa.Integer(), nullable=False),
sa.Column('resource_id', sa.Integer(), autoincrement=False, nullable=False),
sa.Column('perm_name', sa.Unicode(length=64), nullable=False),
sa.ForeignKeyConstraint(['resource_id'], ['resources.resource_id'], name=op.f('fk_users_resources_permissions_resource_id_resources'), onupdate='CASCADE', ondelete='CASCADE'),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], name=op.f('fk_users_resources_permissions_user_id_users'), onupdate='CASCADE', ondelete='CASCADE'),
sa.PrimaryKeyConstraint('user_id', 'resource_id', 'perm_name', name='pk_users_resources_permissions '),
mysql_charset='utf8',
mysql_engine='InnoDB'
)
op.create_table('res_desa',
sa.Column('kategori', sa.String(length=32), nullable=True),
sa.Column('kecamatan_id', sa.SmallInteger(), nullable=True),
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('kode', sa.String(length=32), nullable=False),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['kecamatan_id'], ['public.res_kecamatan.id'], name=op.f('fk_res_desa_kecamatan_id_res_kecamatan')),
sa.PrimaryKeyConstraint('id', name=op.f('pk_res_desa')),
schema='public'
)
op.create_table('partner',
sa.Column('kelurahan', sa.String(length=128), nullable=True),
sa.Column('kecamatan', sa.String(length=128), nullable=True),
sa.Column('kota', sa.String(length=128), nullable=True),
sa.Column('provinsi', sa.String(length=128), nullable=True),
sa.Column('rt', sa.String(length=3), nullable=True),
sa.Column('rw', sa.String(length=3), nullable=True),
sa.Column('tempat_lahir', sa.String(length=128), nullable=True),
sa.Column('tgl_lahir', sa.DateTime(), nullable=True),
sa.Column('jenis_kelamin', sa.String(length=1), nullable=True),
sa.Column('gol_darah', sa.String(length=2), nullable=True),
sa.Column('agama', sa.String(length=32), nullable=True),
sa.Column('perkawinan', sa.String(length=2), nullable=True),
sa.Column('pekerjaan', sa.String(length=32), nullable=True),
sa.Column('kewarganegaraan', sa.String(length=10), nullable=True),
sa.Column('provinsi_id', sa.Integer(), nullable=True),
sa.Column('dati2_id', sa.Integer(), nullable=True),
sa.Column('kecamatan_id', sa.Integer(), nullable=True),
sa.Column('desa_id', sa.Integer(), nullable=True),
sa.Column('company_id', sa.Integer(), nullable=True),
sa.Column('nip', sa.String(length=32), nullable=True),
sa.Column('idcard', sa.String(length=256), nullable=True),
sa.Column('status', sa.Integer(), nullable=True),
sa.Column('alamat_1', sa.String(length=128), nullable=True),
sa.Column('alamat_2', sa.String(length=128), nullable=True),
sa.Column('email', sa.String(length=40), nullable=True),
sa.Column('phone', sa.String(length=16), nullable=True),
sa.Column('fax', sa.String(length=16), nullable=True),
sa.Column('mobile', sa.String(length=16), nullable=True),
sa.Column('website', sa.String(length=64), nullable=True),
sa.Column('is_vendor', sa.SmallInteger(), nullable=False),
sa.Column('is_customer', sa.SmallInteger(), nullable=False),
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('kode', sa.String(length=32), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['dati2_id'], ['public.res_dati2.id'], name=op.f('fk_partner_dati2_id_res_dati2')),
sa.ForeignKeyConstraint(['desa_id'], ['public.res_desa.id'], name=op.f('fk_partner_desa_id_res_desa')),
sa.ForeignKeyConstraint(['kecamatan_id'], ['public.res_kecamatan.id'], name=op.f('fk_partner_kecamatan_id_res_kecamatan')),
sa.ForeignKeyConstraint(['provinsi_id'], ['public.res_provinsi.id'], name=op.f('fk_partner_provinsi_id_res_provinsi')),
sa.PrimaryKeyConstraint('id', name=op.f('pk_partner'))
)
op.create_table('user_area',
sa.Column('user_id', sa.Integer(), nullable=True),
sa.Column('desa_id', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['desa_id'], ['public.res_desa.id'], name=op.f('fk_user_area_desa_id_res_desa')),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], name=op.f('fk_user_area_user_id_users')),
sa.PrimaryKeyConstraint('id', name=op.f('pk_user_area'))
)
op.create_table('partner_files',
sa.Column('partner_id', sa.Integer(), nullable=False),
sa.Column('file_name', sa.String(length=256), nullable=False),
sa.Column('description', sa.String(length=256), nullable=True),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['partner_id'], ['partner.id'], name=op.f('fk_partner_files_partner_id_partner')),
sa.PrimaryKeyConstraint('id', name=op.f('pk_partner_files'))
)
op.create_table('partner_departemen',
sa.Column('partner_id', sa.Integer(), nullable=True),
sa.Column('departemen_id', sa.Integer(), nullable=True),
sa.Column('jabatan_id', sa.SmallInteger(), nullable=True),
sa.Column('mulai', sa.DateTime(), nullable=True),
sa.Column('selesai', sa.DateTime(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['departemen_id'], ['public.departemen.id'], name=op.f('fk_partner_departemen_departemen_id_departemen')),
sa.ForeignKeyConstraint(['jabatan_id'], ['public.jabatan.id'], name=op.f('fk_partner_departemen_jabatan_id_jabatan')),
sa.ForeignKeyConstraint(['partner_id'], ['partner.id'], name=op.f('fk_partner_departemen_partner_id_partner')),
sa.PrimaryKeyConstraint('id', name=op.f('pk_partner_departemen')),
sa.UniqueConstraint('partner_id', 'departemen_id', 'jabatan_id', 'mulai', name='partner_dept_uq'),
schema='public'
)
op.drop_table('lkpj_comment')
op.drop_table('alembic_lkpj')
op.drop_table('lkpj')
op.drop_table('lkpj_file')
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('lkpj_file',
sa.Column('lkpjd_id', sa.INTEGER(), autoincrement=False, nullable=True),
sa.Column('file_name', sa.VARCHAR(length=255), autoincrement=False, nullable=True),
sa.Column('tahun', sa.INTEGER(), autoincrement=False, nullable=True),
sa.Column('description', sa.VARCHAR(length=255), autoincrement=False, nullable=True),
sa.Column('status', sa.SMALLINT(), autoincrement=False, nullable=False),
sa.Column('created', postgresql.TIMESTAMP(), autoincrement=False, nullable=True),
sa.Column('updated', postgresql.TIMESTAMP(), autoincrement=False, nullable=True),
sa.Column('create_uid', sa.INTEGER(), autoincrement=False, nullable=True),
sa.Column('update_uid', sa.INTEGER(), autoincrement=False, nullable=True),
sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False),
sa.ForeignKeyConstraint(['lkpjd_id'], ['lkpj.id'], name='fk_lkpj_file_lkpjd_id_lkpj'),
sa.PrimaryKeyConstraint('id', name='pk_lkpj_file')
)
op.create_table('lkpj',
sa.Column('id', sa.INTEGER(), server_default=sa.text("nextval('lkpj_id_seq'::regclass)"), autoincrement=True, nullable=False),
sa.Column('order_id', sa.INTEGER(), autoincrement=False, nullable=True),
sa.Column('departemen_id', sa.INTEGER(), autoincrement=False, nullable=True),
sa.Column('typ', sa.VARCHAR(length=16), autoincrement=False, nullable=True),
sa.Column('name', sa.VARCHAR(length=255), autoincrement=False, nullable=True),
sa.Column('description', sa.TEXT(), autoincrement=False, nullable=True),
sa.Column('parent_id', sa.INTEGER(), autoincrement=False, nullable=True),
sa.Column('status', sa.SMALLINT(), autoincrement=False, nullable=False),
sa.Column('created', postgresql.TIMESTAMP(), autoincrement=False, nullable=True),
sa.Column('updated', postgresql.TIMESTAMP(), autoincrement=False, nullable=True),
sa.Column('create_uid', sa.INTEGER(), autoincrement=False, nullable=True),
sa.Column('update_uid', sa.INTEGER(), autoincrement=False, nullable=True),
sa.Column('tahun', sa.INTEGER(), autoincrement=False, nullable=True),
sa.ForeignKeyConstraint(['parent_id'], ['lkpj.id'], name='fk_lkpj_parent_id_lkpj'),
sa.PrimaryKeyConstraint('id', name='pk_lkpj'),
postgresql_ignore_search_path=False
)
op.create_table('alembic_lkpj',
sa.Column('version_num', sa.VARCHAR(length=32), autoincrement=False, nullable=False),
sa.PrimaryKeyConstraint('version_num', name='alembic_lkpj_pkc')
)
op.create_table('lkpj_comment',
sa.Column('lkpjd_id', sa.INTEGER(), autoincrement=False, nullable=True),
sa.Column('comment', sa.TEXT(), autoincrement=False, nullable=True),
sa.Column('status', sa.SMALLINT(), autoincrement=False, nullable=False),
sa.Column('created', postgresql.TIMESTAMP(), autoincrement=False, nullable=True),
sa.Column('updated', postgresql.TIMESTAMP(), autoincrement=False, nullable=True),
sa.Column('create_uid', sa.INTEGER(), autoincrement=False, nullable=True),
sa.Column('update_uid', sa.INTEGER(), autoincrement=False, nullable=True),
sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False),
sa.ForeignKeyConstraint(['lkpjd_id'], ['lkpj.id'], name='fk_lkpj_comment_lkpjd_id_lkpj'),
sa.PrimaryKeyConstraint('id', name='pk_lkpj_comment')
)
op.drop_table('partner_departemen', schema='public')
op.drop_table('partner_files')
op.drop_table('user_area')
op.drop_table('partner')
op.drop_table('res_desa', schema='public')
op.drop_table('users_resources_permissions')
op.drop_table('res_kecamatan', schema='public')
op.drop_table('groups_resources_permissions')
op.drop_table('users_permissions')
op.drop_table('users_groups')
op.drop_table('user_device')
op.drop_index(op.f('ix_resources_owner_user_id'), table_name='resources')
op.drop_index(op.f('ix_resources_owner_group_id'), table_name='resources')
op.drop_table('resources')
op.drop_table('res_dati2', schema='public')
op.drop_table('jabatan', schema='public')
op.drop_table('groups_permissions')
op.drop_table('external_identities')
op.drop_table('users')
op.drop_table('targets')
op.drop_table('target_jenis')
op.drop_table('routes')
op.drop_table('res_provinsi', schema='public')
op.drop_table('permissions', schema='public')
op.drop_table('pangkat', schema='public')
op.drop_table('eselon', schema='public')
op.drop_table('departemen', schema='public')
op.drop_table('parameters')
op.drop_table('logs')
op.drop_table('holiday')
op.drop_table('groups')
# ### end Alembic commands ###
"""Pyramid bootstrap environment. """ from logging.config import fileConfig
import logging
import os
import importlib.machinery
from alembic import context
from pyramid.paster import (
get_appsettings,
setup_logging,
)
from sqlalchemy import engine_from_config
from opensipkd.base.models.meta import Base
config = context.config from sqlalchemy import engine_from_config
from sqlalchemy import pool
setup_logging(config.config_file_name) from alembic import context
from opensipkd.models import Base
settings = get_appsettings(config.config_file_name) # this is the Alembic Config object, which provides
logging.info(settings) # access to the values within the .ini file in use.
config = context.config
# Interpret the config file for Python logging.
# This line sets up loggers basically.
if config.config_file_name is not None:
fileConfig(config.config_file_name)
# add your model's MetaData object here
# for 'autogenerate' support
# from myapp import mymodel
# target_metadata = mymodel.Base.metadata
target_metadata = Base.metadata target_metadata = Base.metadata
current_dir = os.path.split(__file__)[0] # other values from the config, defined by the needs of env.py,
helper_file = os.path.join(current_dir, 'helpers.py') # can be acquired:
loader = importlib.machinery.SourceFileLoader('alembic_helpers', helper_file) # my_important_option = config.get_main_option("my_important_option")
helpers = loader.load_module() # ... etc.
version_table = 'alembic_models'
version_table_schema = 'public'
def run_migrations_offline() -> None:
def run_migrations_offline():
"""Run migrations in 'offline' mode. """Run migrations in 'offline' mode.
This configures the context with just a URL This configures the context with just a URL
...@@ -39,37 +38,44 @@ def run_migrations_offline(): ...@@ -39,37 +38,44 @@ def run_migrations_offline():
script output. script output.
""" """
context.configure(url=settings['sqlalchemy.url'], url = config.get_main_option("sqlalchemy.url")
version_table=version_table) context.configure(
url=url,
target_metadata=target_metadata,
literal_binds=True,
dialect_opts={"paramstyle": "named"},
version_table='alembic_models'
)
with context.begin_transaction(): with context.begin_transaction():
context.run_migrations() context.run_migrations()
def run_migrations_online(): def run_migrations_online() -> None:
"""Run migrations in 'online' mode. """Run migrations in 'online' mode.
In this scenario we need to create an Engine In this scenario we need to create an Engine
and associate a connection with the context. and associate a connection with the context.
""" """
engine = engine_from_config(settings, prefix='sqlalchemy.') connectable = engine_from_config(
config.get_section(config.config_ini_section, {}),
connection = engine.connect() prefix="sqlalchemy.",
context.configure( poolclass=pool.NullPool,
connection=connection,
target_metadata=target_metadata,
helpers=helpers,
version_table=version_table,
version_table_schema=version_table_schema
) )
try:
with connectable.connect() as connection:
context.configure(
connection=connection, target_metadata=target_metadata,
version_table='alembic_models'
)
with context.begin_transaction(): with context.begin_transaction():
context.run_migrations() context.run_migrations()
finally:
connection.close()
if context.is_offline_mode(): if context.is_offline_mode():
run_migrations_offline() run_migrations_offline()
else: else:
run_migrations_online()
\ No newline at end of file \ No newline at end of file
run_migrations_online()
"""Pyramid bootstrap environment. """
import logging
import os
import importlib.machinery
from alembic import context
from pyramid.paster import (
get_appsettings,
setup_logging,
)
from sqlalchemy import engine_from_config
from opensipkd.base.models.meta import Base
config = context.config
setup_logging(config.config_file_name)
settings = get_appsettings(config.config_file_name)
logging.info(settings)
target_metadata = Base.metadata
current_dir = os.path.split(__file__)[0]
helper_file = os.path.join(current_dir, 'helpers.py')
loader = importlib.machinery.SourceFileLoader('alembic_helpers', helper_file)
helpers = loader.load_module()
version_table = 'alembic_models'
version_table_schema = 'public'
def run_migrations_offline():
"""Run migrations in 'offline' mode.
This configures the context with just a URL
and not an Engine, though an Engine is acceptable
here as well. By skipping the Engine creation
we don't even need a DBAPI to be available.
Calls to context.execute() here emit the given string to the
script output.
"""
context.configure(url=settings['sqlalchemy.url'],
version_table=version_table)
with context.begin_transaction():
context.run_migrations()
def run_migrations_online():
"""Run migrations in 'online' mode.
In this scenario we need to create an Engine
and associate a connection with the context.
"""
engine = engine_from_config(settings, prefix='sqlalchemy.')
connection = engine.connect()
context.configure(
connection=connection,
target_metadata=target_metadata,
helpers=helpers,
version_table=version_table,
version_table_schema=version_table_schema
)
try:
with context.begin_transaction():
context.run_migrations()
finally:
connection.close()
if context.is_offline_mode():
run_migrations_offline()
else:
run_migrations_online()
\ No newline at end of file \ No newline at end of file
"""empty message
Revision ID: 10a68b1510a6
Revises:
Create Date: 2026-01-19 18:41:11.619834
"""
# revision identifiers, used by Alembic.
from sqlalchemy.dialects import postgresql
import sqlalchemy as sa
from alembic import op
revision = '10a68b1510a6'
down_revision = None
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('eselon',
sa.Column('pangkat', sa.String(length=32), nullable=True),
sa.Column('ruang', sa.String(length=1), nullable=True),
sa.Column('tunjangan', sa.BigInteger(), nullable=True),
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('kode', sa.String(length=32), nullable=False),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint('id', name=op.f('pk_eselon')),
schema='public'
)
op.create_table('pangkat',
sa.Column('pangkat', sa.String(length=32), nullable=True),
sa.Column('ruang', sa.String(length=1), nullable=True),
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('kode', sa.String(length=32), nullable=False),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.PrimaryKeyConstraint('id', name=op.f('pk_pangkat')),
schema='public'
)
op.create_table('jabatan',
sa.Column('jenis', sa.SmallInteger(), nullable=True),
sa.Column('nama_lain', sa.String(
length=128), nullable=True),
sa.Column('nama_pendek', sa.String(
length=128), nullable=True),
sa.Column('eselon_id', sa.SmallInteger(), nullable=True),
sa.Column('nama', sa.String(length=128), nullable=False),
sa.Column('kode', sa.String(length=32), nullable=False),
sa.Column('status', sa.SmallInteger(), nullable=False),
sa.Column('created', sa.DateTime(), nullable=True),
sa.Column('updated', sa.DateTime(), nullable=True),
sa.Column('create_uid', sa.Integer(), nullable=True),
sa.Column('update_uid', sa.Integer(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['eselon_id'], ['public.eselon.id'], name=op.f(
'fk_jabatan_eselon_id_eselon')),
sa.PrimaryKeyConstraint('id', name=op.f('pk_jabatan')),
schema='public'
)
op.create_table('partner_departemen',
sa.Column('partner_id', sa.Integer(), nullable=True),
sa.Column('departemen_id', sa.Integer(), nullable=True),
sa.Column('jabatan_id', sa.SmallInteger(), nullable=True),
sa.Column('mulai', sa.DateTime(), nullable=True),
sa.Column('selesai', sa.DateTime(), nullable=True),
sa.Column('id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['departemen_id'], ['public.departemen.id'], name=op.f(
'fk_partner_departemen_departemen_id_departemen')),
sa.ForeignKeyConstraint(['jabatan_id'], ['public.jabatan.id'], name=op.f(
'fk_partner_departemen_jabatan_id_jabatan')),
sa.ForeignKeyConstraint(['partner_id'], ['partner.id'], name=op.f(
'fk_partner_departemen_partner_id_partner')),
sa.PrimaryKeyConstraint(
'id', name=op.f('pk_partner_departemen')),
sa.UniqueConstraint('partner_id', 'departemen_id',
'jabatan_id', 'mulai', name='partner_dept_uq'),
schema='public'
)
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table('partner_departemen', schema='public')
op.drop_table('jabatan', schema='public')
op.drop_table('pangkat', schema='public')
op.drop_table('eselon', schema='public')
# ### end Alembic commands ###
...@@ -8,3 +8,4 @@ from .partner import * ...@@ -8,3 +8,4 @@ from .partner import *
from .targets import * from .targets import *
from .user_area import * from .user_area import *
from .departmen import _Departemen, Departemen from .departmen import _Departemen, Departemen
from .pegawai import *
\ No newline at end of file \ No newline at end of file
from sqlalchemy import (
Column,
Integer,
BigInteger,
DateTime,
ForeignKey,
UniqueConstraint,
String,
SmallInteger
)
from sqlalchemy.orm import (
relationship,
backref
)
from opensipkd.models import Partner
from ..models import DBSession, Base
from ..models import (DefaultModel, NamaModel, TABLE_ARGS,
Departemen)
class Eselon(Base, NamaModel):
__tablename__ = 'eselon'
pangkat = Column(String(32))
ruang = Column(String(1))
tunjangan = Column(BigInteger)
__table_args__ = TABLE_ARGS
class Jabatan(Base, NamaModel):
__tablename__ = 'jabatan'
jenis = Column(SmallInteger)
nama_lain = Column(String(128))
nama_pendek = Column(String(128))
eselon_id = Column(SmallInteger, ForeignKey(Eselon.id))
__table_args__ = TABLE_ARGS
class Pangkat(Base, NamaModel):
__tablename__ = 'pangkat'
pangkat = Column(String(32))
ruang = Column(String(1))
__table_args__ = TABLE_ARGS
class PartnerDepartemen(Base, DefaultModel):
__tablename__ = 'partner_departemen'
partner_id = Column(Integer, ForeignKey(Partner.id))
departemen_id = Column(Integer, ForeignKey(Departemen.id))
# fungsional_id = Column(Integer, ForeignKey(Jabatan.id))
jabatan_id = Column(SmallInteger, ForeignKey(Jabatan.id))
mulai = Column(DateTime(timezone=False))
selesai = Column(DateTime(timezone=False))
partner = relationship(Partner, backref=backref("partner_departemen"))
departemen = relationship(Departemen, foreign_keys=[
departemen_id], backref=backref("partner_departemen"))
# fungsional = relationship(Jabatan, foreign_keys=[fungsional_id], backref=backref("partner_funsional"), )
jabatan = relationship(Jabatan, foreign_keys=[
jabatan_id], backref=backref("partner_jabatan", ))
__table_args__ = (UniqueConstraint('partner_id', 'departemen_id', 'jabatan_id',
'mulai', name='partner_dept_uq'),
TABLE_ARGS)
@classmethod
def query_jabatan(cls, partner_id, tanggal):
query = DBSession.query(cls). \
filter(cls.partner_id == partner_id,
tanggal >= cls.mulai,
tanggal <= cls.selesai)
return query
...@@ -59,7 +59,7 @@ base-dati2,/dati2,base,dati2,,view_list,,admin,base-admin,Dati2,1,0,,1,form.pt, ...@@ -59,7 +59,7 @@ base-dati2,/dati2,base,dati2,,view_list,,admin,base-admin,Dati2,1,0,,1,form.pt,
base-dati2-act,/dati2/{act}/act,base,dati2,,,,admin,base-dati2,Dati2 Action,1,0,,,json, base-dati2-act,/dati2/{act}/act,base,dati2,,,,admin,base-dati2,Dati2 Action,1,0,,,json,
base-dati2-add,/dati2/add,base,dati2,,,,admin,base-dati2,Dati2 Add,1,0,,,form6.pt, base-dati2-add,/dati2/add,base,dati2,,,,admin,base-dati2,Dati2 Add,1,0,,,form6.pt,
base-dati2-edit,/dati2/{id}/edit,base,dati2,,,,admin,base-dati2,Dati2 Edit,1,0,,,form6.pt, base-dati2-edit,/dati2/{id}/edit,base,dati2,,,,admin,base-dati2,Dati2 Edit,1,0,,,form6.pt,
base-dati2-view,/dati2/{id}/view,base,dati2,,,,admin,base-dati2,Dati2 View,1,0,,,form6.pt, base-dati2-view,/dati2/{id}/view,base,dati2,,,,admin,base-dati2,Da/user/areati2 View,1,0,,,form6.pt,
base-dati2-delete,/dati2/{id}/delete,base,dati2,,,,admin,base-dati2,Dati2 Delete,1,0,,,form6.pt, base-dati2-delete,/dati2/{id}/delete,base,dati2,,,,admin,base-dati2,Dati2 Delete,1,0,,,form6.pt,
base-dati2-upload,/dati2/upload,base,dati2,,,,admin,base-dati2,Dati2 Uload,1,0,,,form6.pt, base-dati2-upload,/dati2/upload,base,dati2,,,,admin,base-dati2,Dati2 Uload,1,0,,,form6.pt,
base-kecamatan,/kecamatan,base,kecamatan,,view_list,,admin,base-admin,Kecamatan,1,0,,1,form.pt, base-kecamatan,/kecamatan,base,kecamatan,,view_list,,admin,base-admin,Kecamatan,1,0,,1,form.pt,
...@@ -83,4 +83,27 @@ base-user-area-edit,/user/area/{id}/edit,base,user_area,,,,admin,base-user-area, ...@@ -83,4 +83,27 @@ base-user-area-edit,/user/area/{id}/edit,base,user_area,,,,admin,base-user-area,
base-user-area-view,/user/area/{id}/view,base,user_area,,,,admin,base-user-area,User-area View,1,0,,,form6.pt, base-user-area-view,/user/area/{id}/view,base,user_area,,,,admin,base-user-area,User-area View,1,0,,,form6.pt,
base-user-area-delete,/user/area/{id}/delete,base,user_area,,,,admin,base-user-area,User-area Delete,1,0,,,form6.pt, base-user-area-delete,/user/area/{id}/delete,base,user_area,,,,admin,base-user-area,User-area Delete,1,0,,,form6.pt,
base-test,/test,base,web_test_http,,view_add,,,,Test HTTP,1,0,,,test.pt base-test,/test,base,web_test_http,,view_add,,,,Test HTTP,1,0,,,test.pt
base-partner-departemen,/partner/departemen,base,posisi,,view_list,,admin,base-admin,Partner-departemen,1,0,,1,form.pt,
base-partner-departemen-act,/partner/departemen/{act}/act,base,posisi,,,,admin,base-partner-departemen,Partner-departemen Action,1,0,,,json,
base-partner-departemen-add,/partner/departemen/add,base,posisi,,,,admin,base-partner-departemen,Partner-departemen Add,1,0,,,form6.pt,
base-partner-departemen-edit,/partner/departemen/{id}/edit,base,posisi,,,,admin,base-partner-departemen,Partner-departemen Edit,1,0,,,form6.pt,
base-partner-departemen-view,/partner/departemen/{id}/view,base,posisi,,,,admin,base-partner-departemen,Partner-departemen View,1,0,,,form6.pt,
base-partner-departemen-delete,/partner/departemen/{id}/delete,base,posisi,,,,admin,base-partner-departemen,Partner-departemen Delete,1,0,,,form6.pt,
base-jabatan,/jabatan,base,jabatan,,view_list,,admin,base-admin,Jabatan,1,0,,1,form.pt,
base-jabatan-act,/jabatan/{act}/act,base,jabatan,,,,admin,base-jabatan,Jabatan Action,1,0,,,json,
base-jabatan-add,/jabatan/add,base,jabatan,,,,admin,base-jabatan,Jabatan Add,1,0,,,form6.pt,
base-jabatan-edit,/jabatan/{id}/edit,base,jabatan,,,,admin,base-jabatan,Jabatan Edit,1,0,,,form6.pt,
base-jabatan-view,/jabatan/{id}/view,base,jabatan,,,,admin,base-jabatan,Jabatan View,1,0,,,form6.pt,
base-jabatan-delete,/jabatan/{id}/delete,base,jabatan,,,,admin,base-jabatan,Jabatan Delete,1,0,,,form6.pt,
base-pangkat,/pangkat,base,pangkat,,view_list,,admin,base-admin,Pangkat,1,0,,1,form.pt,
base-pangkat-act,/pangkat/{act}/act,base,pangkat,,,,admin,base-pangkat,Pangkat Action,1,0,,,json,
base-pangkat-add,/pangkat/add,base,pangkat,,,,admin,base-pangkat,Pangkat Add,1,0,,,form6.pt,
base-pangkat-edit,/pangkat/{id}/edit,base,pangkat,,,,admin,base-pangkat,Pangkat Edit,1,0,,,form6.pt,
base-pangkat-view,/pangkat/{id}/view,base,pangkat,,,,admin,base-pangkat,Pangkat View,1,0,,,form6.pt,
base-pangkat-delete,/pangkat/{id}/delete,base,pangkat,,,,admin,base-pangkat,Pangkat Delete,1,0,,,form6.pt,
base-eselon,/eselon,base,eselon,,view_list,,admin,base-admin,Eselon,1,0,,1,form.pt,
base-eselon-act,/eselon/{act}/act,base,eselon,,,,admin,base-eselon,Eselon Action,1,0,,,json,
base-eselon-add,/eselon/add,base,eselon,,,,admin,base-eselon,Eselon Add,1,0,,,form6.pt,
base-eselon-edit,/eselon/{id}/edit,base,eselon,,,,admin,base-eselon,Eselon Edit,1,0,,,form6.pt,
base-eselon-view,/eselon/{id}/view,base,eselon,,,,admin,base-eselon,Eselon View,1,0,,,form6.pt,
base-eselon-delete,/eselon/{id}/delete,base,eselon,,,,admin,base-eselon,Eselon Delete,1,0,,,form6.pt,
from datetime import datetime
import colander import colander
from deform import (widget, ) from deform import (widget, )
from opensipkd.models import DBSession, Departemen, Partner from opensipkd.models import DBSession, Departemen
# , PartnerDepartemen
# , ResCompany
from opensipkd.tools import (get_settings)
from opensipkd.tools.buttons import btn_upload from opensipkd.tools.buttons import btn_upload
from pyramid.view import (view_config, ) from ..views import BaseView
from sqlalchemy import func
from sqlalchemy.orm import aliased
# from .company import company_widget
from .. import get_params
from ..views import ColumnDT, DataTables, BaseView
# , get_urls # , get_urls
SESS_ADD_FAILED = 'Tambah departemen gagal' SESS_ADD_FAILED = 'Tambah departemen gagal'
SESS_EDIT_FAILED = 'Edit departemen gagal' SESS_EDIT_FAILED = 'Edit departemen gagal'
...@@ -71,7 +62,9 @@ class AddSchema(colander.Schema): ...@@ -71,7 +62,9 @@ class AddSchema(colander.Schema):
# widget=company_widget, # widget=company_widget,
# missing=colander.drop, # missing=colander.drop,
# oid="company_id") # oid="company_id")
status = colander.SchemaNode(colander.Boolean(), oid="status") status = colander.SchemaNode(colander.Integer(),
widget=widget.CheckboxWidget(true_val="1", false_val="0"),
oid="status")
def after_bind(self, schema, kwargs): def after_bind(self, schema, kwargs):
request = kwargs["request"] request = kwargs["request"]
...@@ -99,9 +92,12 @@ class ListSchema(colander.Schema): ...@@ -99,9 +92,12 @@ class ListSchema(colander.Schema):
widget=widget.CheckboxWidget()) widget=widget.CheckboxWidget())
level_id = colander.SchemaNode( level_id = colander.SchemaNode(
colander.Integer(), title="Level", width='40pt') colander.Integer(), title="Level", width='40pt')
parent = colander.SchemaNode(colander.String(), title="Induk") parent_id = colander.SchemaNode(colander.String(), title="Induk")
# company_nm = colander.SchemaNode(colander.String(), title="Company") # company_nm = colander.SchemaNode(colander.String(), title="Company")
def after_bind(self, schema, kw):
request = kw.get('request')
schema["parent_id"].widget = widget.Select2Widget(
values=get_departemen_list())
class Views(BaseView): class Views(BaseView):
def __init__(self, request): def __init__(self, request):
...@@ -188,11 +184,25 @@ class Views(BaseView): ...@@ -188,11 +184,25 @@ class Views(BaseView):
# @view_config(route_name='departemen-act', renderer='json', # @view_config(route_name='departemen-act', renderer='json',
# permission='view') # permission='view')
# def view_act(self): def next_act(self):
# request = self.req request = self.req
# ses = request.session params = request.params
# params = request.params url_dict = request.matchdict
# url_dict = request.matchdict if url_dict['act'] == 'hon':
term = params.get('term', '')
q = DBSession.query(Departemen). \
filter(Departemen.status == 1,
Departemen.nama.ilike(f'%{term}%')) \
.order_by(Departemen.nama)
rows = q.all()
r = []
for k in rows:
d = dict(id=k.id, value=k.nama, kode=k.kode, nama=k.nama,
level_id=k.level_id)
r.append(d)
return r
# dep_alias = aliased(Departemen) # dep_alias = aliased(Departemen)
# if url_dict['act'] == 'grid': # if url_dict['act'] == 'grid':
# columns = [ColumnDT(Departemen.id, mData='id'), # columns = [ColumnDT(Departemen.id, mData='id'),
...@@ -209,22 +219,7 @@ class Views(BaseView): ...@@ -209,22 +219,7 @@ class Views(BaseView):
# query = self.filter_company(query) # query = self.filter_company(query)
# row_table = DataTables(request.GET, query, columns) # row_table = DataTables(request.GET, query, columns)
# return row_table.output_result() # return row_table.output_result()
# elif url_dict['act'] == 'hon': # el
# term = 'term' in params and params['term'] or ''
# q = DBSession.query(Departemen). \
# filter(Departemen.status == 1,
# Departemen.nama.ilike('%%%s%%' % term)) \
# .order_by(
# Departemen.nama)
# if self.req.user.company_id:
# q = q.filter(Departemen.company_id == self.req.user.company_id)
# rows = q.all()
# r = []
# for k in rows:
# d = dict(id=k.id, value=k.nama, kode=k.kode, nama=k.nama,
# level_id=k.level_id)
# r.append(d)
# return r
# elif url_dict['act'] == 'honk': # elif url_dict['act'] == 'honk':
# term = 'term' in params and params['term'] or '' # term = 'term' in params and params['term'] or ''
# q = DBSession.query(Departemen) \ # q = DBSession.query(Departemen) \
......
import colander
from deform import widget
from opensipkd.base.models import Eselon
from opensipkd.base.views import base_views
class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.String(), title="Action")
kode = colander.SchemaNode(
colander.String(),)
nama = colander.SchemaNode(
colander.String(),)
pangkat = colander.SchemaNode(
colander.String(),)
ruang = colander.SchemaNode(
colander.String(),)
tunjangan = colander.SchemaNode(
colander.Integer(),)
status = colander.SchemaNode(
colander.Integer(), widget=widget.CheckboxWidget(),)
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32),
oid="kode")
nama = colander.SchemaNode(
colander.String(),
oid="nama")
pangkat = colander.SchemaNode(
colander.String(),
oid="pangkat")
ruang = colander.SchemaNode(
colander.String(),
oid="ruang")
tunjangan = colander.SchemaNode(
colander.Integer(),
oid="tunjangan")
status = colander.SchemaNode(
colander.Integer(),
widget = widget.CheckboxWidget(true_val="1", false_val="0"),
oid="status")
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget())
class Views(base_views.BaseView):
def __init__(self, request):
super().__init__(request)
self.list_route = 'base-eselon'
self.table = Eselon
self.list_schema = ListSchema
self.add_schema = AddSchema
self.edit_schema = EditSchema
# import os
# import colander
# from deform import widget
# from opensipkd.base.models import (DBSession, Eselon)
# from opensipkd.tools.report import (
# csv_response, open_rml_pdf, open_rml_row, pdf_response)
# from pyramid.i18n import TranslationStringFactory
# from ..views import BaseView
# from ..models import Pangkat
# _ = TranslationStringFactory("opensipkd")
# JENIS = ((1, _('structural', default='Structural')),
# (2, _('functional', default='Functional')),
# (3, _('finance', default='Finance')),
# )
# def daftar_eselon():
# return DBSession.query(Eselon.id, Eselon.nama).order_by(Eselon.kode).all()
# @colander.deferred
# def deferred_eselon(node, kw):
# values = kw.get('daftar_eselon', [])
# return widget.SelectWidget(values=values)
# class AddSchema(colander.Schema):
# kode = colander.SchemaNode(
# colander.String(),
# validator=colander.Length(max=32),
# oid="kode")
# nama = colander.SchemaNode(
# colander.String(),
# oid="nama")
# nama_pendek = colander.SchemaNode(
# colander.String(),
# oid="nama_pendek",
# missing=colander.drop)
# nama_lain = colander.SchemaNode(
# colander.String(),
# oid="nama_lain",
# missing=colander.drop)
# jenis = colander.SchemaNode(
# colander.Integer(),
# oid="jenis",
# widget=widget.SelectWidget(values=JENIS),
# title=_("type", default="Jenis"))
# eselon_id = colander.SchemaNode(
# colander.Integer(),
# oid="eselon_id",
# widget=deferred_eselon,
# title=_("eselon", default="Eselon"))
# status = colander.SchemaNode(
# colander.Boolean(),
# oid="status")
# class EditSchema(AddSchema):
# id = colander.SchemaNode(colander.String(),
# missing=colander.drop,
# widget=widget.HiddenWidget())
# class ListSchema(colander.Schema):
# id = colander.SchemaNode(colander.String(), title="Action")
# kode = colander.SchemaNode(
# colander.String(),
# validator=colander.Length(max=32),
# oid="kode",
# title="Kode",
# width="100pt")
# nama = colander.SchemaNode(
# colander.String(),
# validator=colander.Length(max=64),
# oid="nama")
# status = colander.SchemaNode(
# colander.Integer(),
# widget=widget.CheckboxWidget(),
# oid="status")
# class Views(BaseView):
# def __init__(self, request):
# super().__init__(request)
# self.form_params = dict(scripts="")
# self.list_url = 'jabatan'
# self.list_route = 'jabatan'
# self.add_schema = AddSchema
# self.edit_schema = EditSchema
# self.table = Pangkat
# self.list_schema = ListSchema
# # self.list_buttons = (btn_view, btn_add, btn_edit, btn_delete, btn_close)
# def get_bindings(self, row=None):
# return dict(daftar_jenis=JENIS,
# daftar_eselon=daftar_eselon())
# def next_act(self):
# request = self.req
# params = request.params
# url_dict = request.matchdict
# if url_dict['act'] == 'hok':
# term = 'term' in params and params['term'] or ''
# qry = DBSession.query(Jabatan). \
# filter(Jabatan.status == 1). \
# filter(Jabatan.kode.ilike('%%%s%%' % term)). \
# order_by(Jabatan.kode)
# r = []
# for row in qry.all():
# d = dict(
# id=row.id,
# value=row.nama,
# # value = row.nama,
# # kode = row.kode,
# nama=row.kode
# )
# r.append(d)
# return r
# elif url_dict['act'] == 'hon':
# term = 'term' in params and params['term'] or ''
# q = DBSession.query(Jabatan.id, Jabatan.kode, Jabatan.nama,
# Jabatan.jenis). \
# filter(Jabatan.nama.ilike('%%%s%%' % term)). \
# order_by(Jabatan.nama)
# rows = q.all()
# r = []
# for k in rows:
# if k[3] == 1:
# nama_jenis = 'Struktural'
# elif k[3] == 2:
# nama_jenis = 'Fungsional'
# else:
# nama_jenis = 'Keuangan'
# d = {}
# d['id'] = k[0]
# d['value'] = k[2] + ' (' + nama_jenis + ')'
# d['kode'] = k[1]
# d['nama'] = k[2]
# r.append(d)
# return r
# elif url_dict['act'] == 'headofnama':
# term = 'term' in params and params['term'] or ''
# q = DBSession.query(Jabatan.id, Jabatan.kode, Jabatan.nama,
# Jabatan.jenis). \
# filter(Jabatan.nama.ilike('%%%s%%' % term)). \
# order_by(Jabatan.nama)
# rows = q.all()
# r = []
# for k in rows:
# if k[3] == 1:
# nama_jenis = 'Keuangan'
# elif k[3] == 2:
# nama_jenis = 'Struktural'
# else:
# nama_jenis = 'Fungsional'
# d = {'id': k[0], 'value': k[2] + ' (' + nama_jenis + ')',
# 'kode': k[1], 'nama': k[2]}
# r.append(d)
# return r
# elif url_dict['act'] == 'csv':
# query = query_reg(request)
# row = query.first()
# header = row.keys()
# rows = []
# for item in query.all():
# rows.append(list(item))
# filename = 'jabatan.csv'
# value = {
# 'header': header,
# 'rows': rows,
# }
# return csv_response(request, value, filename)
# elif url_dict['act'] == 'pdf':
# query = query_reg(request)
# _here = os.path.dirname(__file__) # get current folder -> views
# path = os.path.dirname(_here) # mundur 1 level
# path = os.path.join(path, 'reports')
# rml_row = open_rml_row(path + '/jabatan.row.rml')
# rows = []
# for r in query.all():
# s = rml_row.format(kode=r.kode, nama=r.nama,
# status=r.status and "Aktif" or "Pasif")
# rows.append(s)
# pdf, filename = open_rml_pdf(path + '/jabatan.rml', rows=rows,
# company=request.company,
# departement=request.session[
# 'departemen_nm'],
# address=request.address,
# alamat=Departemen.query_id(
# request.session[
# 'departemen_id']).first(),
# periode='01-01-2017 s.d 31-12-2017')
# return pdf_response(request, pdf, filename)
# def form_validator(self, form, value):
# def err_kode():
# raise colander.Invalid(form,
# 'Kode %s sudah digunakan oleh %s' % (
# value['kode'], found.nama))
# def err_nama():
# raise colander.Invalid(form,
# 'Uraian %s sudah digunakan oleh kode %s' % (
# value['nama'], found.kode))
# if 'id' in form.request.matchdict:
# uid = form.request.matchdict['id']
# q = DBSession.query(Jabatan).filter_by(id=uid)
# jabatan = q.first()
# else:
# jabatan = None
# q = Jabatan.query_kode(value['kode'])
# # DBSession.query(Jabatan).filter_by(kode=value['kode'])
# found = q.first()
# if jabatan:
# if found and found.id != jabatan.id:
# err_kode()
# elif found:
# err_kode()
# found = Jabatan.query_nama(value['nama']).first()
# if jabatan:
# if found and found.id != jabatan.id:
# err_nama()
# elif found:
# err_nama()
# def query_reg(request):
# return DBSession.query(Jabatan.kode,
# Jabatan.nama,
# Jabatan.status, ). \
# filter(Jabatan.status == 1). \
# order_by(Jabatan.id)
import os
import colander
from deform import (widget, )
from opensipkd.base.models import (
DBSession, Jabatan, Eselon, Departemen)
from opensipkd.tools.report import (
csv_response, open_rml_pdf, open_rml_row, pdf_response)
from pyramid.i18n import TranslationStringFactory
from ..views import BaseView
_ = TranslationStringFactory("opensipkd")
SESS_ADD_FAILED = 'Tambah jabatan gagal'
SESS_EDIT_FAILED = 'Edit jabatan gagal'
JENIS = ((1, _('structural', default='Structural')),
(2, _('functional', default='Functional')),
(3, _('finance', default='Finance')),
)
def daftar_eselon():
return DBSession.query(Eselon.id, Eselon.nama).order_by(Eselon.kode).all()
@colander.deferred
def deferred_eselon(node, kw):
values = kw.get('daftar_eselon', [])
return widget.SelectWidget(values=values)
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32),
oid="kode")
nama = colander.SchemaNode(
colander.String(),
oid="nama")
nama_pendek = colander.SchemaNode(
colander.String(),
oid="nama_pendek",
missing=colander.drop)
nama_lain = colander.SchemaNode(
colander.String(),
oid="nama_lain",
missing=colander.drop)
jenis = colander.SchemaNode(
colander.Integer(),
oid="jenis",
widget = widget.SelectWidget(values=JENIS),
title=_("type", default="Jenis"))
eselon_id = colander.SchemaNode(
colander.Integer(),
oid="eselon_id",
widget=deferred_eselon,
title=_("eselon", default="Eselon"))
status = colander.SchemaNode(
colander.Integer(),
widget=widget.CheckboxWidget(true_val="1", false_val="0"),
oid="status")
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget())
class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.String(), title="Action")
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32),
oid="kode",
title="Kode",
width="100pt")
nama = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=64),
oid="nama")
status = colander.SchemaNode(
colander.Integer(),
widget=widget.CheckboxWidget(),
oid="status")
class Views(BaseView):
def __init__(self, request):
super().__init__(request)
self.form_params = dict(scripts="")
self.list_url = 'jabatan'
self.list_route = 'jabatan'
self.add_schema = AddSchema
self.edit_schema = EditSchema
self.table = Jabatan
self.list_schema = ListSchema
# self.list_buttons = (btn_view, btn_add, btn_edit, btn_delete, btn_close)
def get_bindings(self, row=None):
return dict(daftar_jenis=JENIS,
daftar_eselon=daftar_eselon())
def next_act(self):
request = self.req
params = request.params
url_dict = request.matchdict
if url_dict['act'] == 'hok':
term = 'term' in params and params['term'] or ''
qry = DBSession.query(Jabatan). \
filter(Jabatan.status == 1). \
filter(Jabatan.kode.ilike('%%%s%%' % term)). \
order_by(Jabatan.kode)
r = []
for row in qry.all():
d = dict(
id=row.id,
value=row.nama,
# value = row.nama,
# kode = row.kode,
nama=row.kode
)
r.append(d)
return r
elif url_dict['act'] == 'hon':
term = 'term' in params and params['term'] or ''
q = DBSession.query(Jabatan.id, Jabatan.kode, Jabatan.nama,
Jabatan.jenis). \
filter(Jabatan.nama.ilike('%%%s%%' % term)). \
order_by(Jabatan.nama)
rows = q.all()
r = []
for k in rows:
if k[3] == 1:
nama_jenis = 'Struktural'
elif k[3] == 2:
nama_jenis = 'Fungsional'
else:
nama_jenis = 'Keuangan'
d = {}
d['id'] = k[0]
d['value'] = k[2] + ' (' + nama_jenis + ')'
d['kode'] = k[1]
d['nama'] = k[2]
r.append(d)
return r
elif url_dict['act'] == 'headofnama':
term = 'term' in params and params['term'] or ''
q = DBSession.query(Jabatan.id, Jabatan.kode, Jabatan.nama,
Jabatan.jenis). \
filter(Jabatan.nama.ilike('%%%s%%' % term)). \
order_by(Jabatan.nama)
rows = q.all()
r = []
for k in rows:
if k[3] == 1:
nama_jenis = 'Keuangan'
elif k[3] == 2:
nama_jenis = 'Struktural'
else:
nama_jenis = 'Fungsional'
d = {'id': k[0], 'value': k[2] + ' (' + nama_jenis + ')',
'kode': k[1], 'nama': k[2]}
r.append(d)
return r
elif url_dict['act'] == 'csv':
query = query_reg(request)
row = query.first()
header = row.keys()
rows = []
for item in query.all():
rows.append(list(item))
filename = 'jabatan.csv'
value = {
'header': header,
'rows': rows,
}
return csv_response(request, value, filename)
elif url_dict['act'] == 'pdf':
query = query_reg(request)
_here = os.path.dirname(__file__) # get current folder -> views
path = os.path.dirname(_here) # mundur 1 level
path = os.path.join(path, 'reports')
rml_row = open_rml_row(path + '/jabatan.row.rml')
rows = []
for r in query.all():
s = rml_row.format(kode=r.kode, nama=r.nama,
status=r.status and "Aktif" or "Pasif")
rows.append(s)
pdf, filename = open_rml_pdf(path + '/jabatan.rml', rows=rows,
company=request.company,
departement=request.session[
'departemen_nm'],
address=request.address,
alamat=Departemen.query_id(
request.session[
'departemen_id']).first(),
periode='01-01-2017 s.d 31-12-2017')
return pdf_response(request, pdf, filename)
def form_validator(self, form, value):
def err_kode():
raise colander.Invalid(form,
'Kode %s sudah digunakan oleh %s' % (
value['kode'], found.nama))
def err_nama():
raise colander.Invalid(form,
'Uraian %s sudah digunakan oleh kode %s' % (
value['nama'], found.kode))
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q = DBSession.query(Jabatan).filter_by(id=uid)
jabatan = q.first()
else:
jabatan = None
q = Jabatan.query_kode(value['kode'])
# DBSession.query(Jabatan).filter_by(kode=value['kode'])
found = q.first()
if jabatan:
if found and found.id != jabatan.id:
err_kode()
elif found:
err_kode()
found = Jabatan.query_nama(value['nama']).first()
if jabatan:
if found and found.id != jabatan.id:
err_nama()
elif found:
err_nama()
def query_reg(request):
return DBSession.query(Jabatan.kode,
Jabatan.nama,
Jabatan.status, ). \
filter(Jabatan.status == 1). \
order_by(Jabatan.id)
import colander
from deform import widget
from opensipkd.base.models import Pangkat
from opensipkd.base.views import base_views
class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.String(), title="Action")
kode = colander.SchemaNode(
colander.String(),)
nama = colander.SchemaNode(
colander.String(),)
pangkat = colander.SchemaNode(
colander.String(),)
ruang = colander.SchemaNode(
colander.String(),)
status = colander.SchemaNode(
colander.Integer(), widget=widget.CheckboxWidget(),)
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32),
oid="kode")
nama = colander.SchemaNode(
colander.String(),
oid="nama")
pangkat = colander.SchemaNode(
colander.String(),
oid="pangkat")
ruang = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=1),
oid="ruang")
status = colander.SchemaNode(
colander.Integer(),
widget=widget.CheckboxWidget(true_val="1", false_val="0"),
oid="status")
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget())
class Views(base_views.BaseView):
def __init__(self, request):
super().__init__(request)
self.list_route = 'base-pangkat'
self.table = Pangkat
self.list_schema = ListSchema
self.add_schema = AddSchema
self.edit_schema = EditSchema
import colander
from deform import (widget, )
from sqlalchemy import Boolean, or_
from sqlalchemy.orm import aliased
from opensipkd.base.models import DBSession as PartnerDBSession, DBSession
from opensipkd.base.models import Departemen, Jabatan
from opensipkd.base.models import Partner, PartnerDepartemen
from opensipkd.base.widgets import widget_os
from opensipkd.tools import dmy, date_from_str
from ..views import ColumnDT, DataTables, BaseView
class AddSchema(colander.Schema):
nama_widget = widget.AutocompleteInputWidget(
size=60,
min_length=2,
style="z-index: 100000 !important;")
departemen_widget = widget.AutocompleteInputWidget(
size=60,
min_length=2,
style="z-index: 100001 !important;")
jabatan_widget = widget.AutocompleteInputWidget(
size=60,
min_length=2,
style="z-index: 99999 !important;")
partner_id = colander.SchemaNode(
colander.Integer(),
oid="partner_id",
widget=widget.HiddenWidget(),
)
nama = colander.SchemaNode(
colander.String(),
widget=nama_widget,
oid="partner_nm")
departemen_id = colander.SchemaNode(
colander.Integer(),
oid="departemen_id",
widget=widget.HiddenWidget(),
)
departemen = colander.SchemaNode(
colander.String(),
widget=departemen_widget,
oid="departemen_nm")
jabatan_id = colander.SchemaNode(
colander.Integer(),
oid="jabatan_id",
)
mulai = colander.SchemaNode(
colander.String(),
oid="mulai",
widget=widget_os.BootStrapDateInputWidget()
)
selesai = colander.SchemaNode(
colander.String(),
oid="selesai",
widget=widget_os.BootStrapDateInputWidget()
)
def after_bind(self, schema, kw):
request = kw.get('request')
schema["nama"].widget.values = request.route_url(
'base-partner-departemen-act', act="partner")
schema["departemen"].widget.values = request.route_url(
'base-departemen-act', act="hon")
schema["jabatan_id"].widget = widget.Select2Widget(
values = [(r.id, r.nama) for r in Jabatan.query().order_by(Jabatan.nama)]
)
# if request:
# ses = request.session
# if 'departemen_id' in ses:
# self.departemen_id.default = ses['departemen_id']
# if 'departemen_nm' in ses:
# self.departemen.default = ses['departemen_nm']
# if 'departemen_kd' in ses:
# self.departemen_kd = ses['departemen_kd']
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget())
class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.Integer(), title="Action")
nama = colander.SchemaNode(
colander.String(), field=Partner.nama)
mulai = colander.SchemaNode(
colander.String())
selesai = colander.SchemaNode(
colander.String())
class Views(BaseView):
def __init__(self, request):
super().__init__(request)
self.list_schema = ListSchema
self.table = PartnerDepartemen
self.add_schema = AddSchema
self.edit_schema = EditSchema
self.list_route = 'base-partner-departemen'
def form_validator(self, form, value):
def err_partner():
raise colander.Invalid(form,
'Partner Belum Dipilih')
def err_departemen():
raise colander.Invalid(form,
'Departemen Kerja Belum Dipilih')
def err_jabatan():
raise colander.Invalid(form,
'Partner Belum Dipilih')
if not value['jabatan_id']:
err_jabatan()
elif not value['departemen_id']:
err_departemen()
elif not value['partner_id']:
err_partner()
def save_request(self, values, row=None):
request = self.req
if 'id' in request.matchdict:
values['id'] = request.matchdict['id']
if 'mulai' in values:
if values['mulai']:
values['mulai'] = date_from_str(values['mulai'])
else:
values['mulai'] = None
if 'selesai' in values:
if values['selesai']:
values['selesai'] = date_from_str(values['selesai'])
else:
values['selesai'] = None
query_struktural = DBSession.query(Jabatan.jenis). \
filter(Jabatan.id == values['jabatan_id']).scalar()
values['jabatan_id'] = query_struktural
row = self.save(values, request.user, row)
request.session.flash('Posisi Partner sudah disimpan.')
return row
# def view_act(self):
# request = self.req
# ses = request.session
# params = request.params
# url_dict = request.matchdict
# struktural = aliased(Jabatan)
# if url_dict['act'] == 'grid':
# columns = [
# ColumnDT(PartnerDepartemen.id, mData='id'),
# ColumnDT(Partner.kode, mData='nik'),
# ColumnDT(Partner.nama, mData='nama'),
# ColumnDT(Departemen.nama, mData='departemen'),
# ColumnDT(Jabatan.nama, mData='jabatan'),
# ColumnDT(struktural.nama, mData='struktural_nm'),
# ColumnDT(PartnerDepartemen.mulai, mData='mulai'),
# ColumnDT(PartnerDepartemen.selesai, mData='selesai'),
# ]
# q = PartnerDBSession.query().select_from(PartnerDepartemen) \
# .join(Departemen,
# PartnerDepartemen.departemen_id == Departemen.id) \
# .outerjoin(Partner, Partner.id == PartnerDepartemen.partner_id) \
# .outerjoin(Jabatan,
# (PartnerDepartemen.jabatan_id == Jabatan.id)) \
# .outerjoin(struktural,
# (PartnerDepartemen.jabatan_id == struktural.id)) \
# .order_by(Partner.nama)
# if self.req.user.company_id:
# q = q.filter(Departemen.company_id == self.req.user.company_id)
# row_table = DataTables(request.GET, q, columns)
# return row_table.output_result()
# elif url_dict['act'] == 'hon_departemen':
# term = 'term' in params and params['term'] or ''
# prefix = 'prefix' in params and params['prefix'] or ''
# q = PartnerDBSession.query(Partner.id, Partner.nik, Partner.nama,
# PartnerDepartemen.jabatan_id,
# Jabatan.nama.label('jabatan_nm'),
# ). \
# join(PartnerDepartemen). \
# join(Jabatan, (PartnerDepartemen.jabatan_id == Jabatan.id)). \
# filter(Partner.nama.ilike('%%%s%%' % term)). \
# filter(PartnerDepartemen.departemen_id == ses['departemen_id']). \
# filter(or_(Jabatan.kode == '101', Jabatan.kode == '102')). \
# order_by(Partner.nama)
# if self.req.user.company_id:
# q = q.filter(Departemen.company_id == self.req.user.company_id)
# rows = q.all()
# r = []
# keys = ('id', 'value', 'nik', 'nama', 'jabatan_id', 'jabatan_nm')
# for k in rows:
# values = (k[0], k[2] + (" - ") + k[4], k[1], k[2], k[3], k[4])
# r.append(dict(zip(keys, values)))
# return r
# elif url_dict['act'] == 'hon_jabatan':
# term = 'term' in params and params['term'] or ''
# prefix = 'prefix' in params and params['prefix'] or ''
# partner_id = 'partner_id' in params and params['partner_id'] or 0
# # filter(or_(Jabatan.kode == '103', Jabatan.kode == '104')) dilepas sementara
# q = PartnerDBSession.query(Partner.id, Partner.nik, Partner.nama,
# PartnerDepartemen.jabatan_id,
# Jabatan.nama.label('jabatan_nm'),
# ). \
# join(PartnerDepartemen). \
# join(Jabatan, (PartnerDepartemen.jabatan_id == Jabatan.id)). \
# filter(Partner.nama.ilike('%%%s%%' % term)). \
# filter(PartnerDepartemen.departemen_id == ses['departemen_id']). \
# order_by(Partner.nama)
# if self.req.user.company_id:
# q = q.filter(Departemen.company_id == self.req.user.company_id)
# rows = q.all()
# r = []
# keys = ('id', 'value', 'nik', 'nama', 'jabatan_id', 'jabatan_nm')
# for k in rows:
# values = (k[0], k[2] + (" - ") + k[4], k[1], k[2], k[3], k[4])
# r.append(dict(zip(keys, values)))
# return r
# elif url_dict['act'] == 'hon_skpkd':
# term = 'term' in params and params['term'] or ''
# prefix = 'prefix' in params and params['prefix'] or ''
# q = PartnerDBSession.query(Partner.id, Partner.nik, Partner.nama,
# PartnerDepartemen.jabatan_id,
# Jabatan.nama.label('jabatan_nm'),
# ). \
# join(PartnerDepartemen). \
# join(Jabatan, (PartnerDepartemen.jabatan_id == Jabatan.id)). \
# filter(Partner.nama.ilike('%%%s%%' % term)). \
# filter(PartnerDepartemen.departemen_id == ses['departemen_id']). \
# filter(or_(Jabatan.kode == '101', Jabatan.kode == '102',
# Jabatan.kode == '103', Jabatan.kode ==
# '104')). \
# order_by(Partner.nama)
# if self.req.user.company_id:
# q = q.filter(Departemen.company_id == self.req.user.company_id)
# rows = q.all()
# r = []
# keys = ('id', 'value', 'nik', 'nama', 'jabatan_id', 'jabatan_nm')
# for k in rows:
# values = (k[0], k[2] + (" - ") + k[4], k[1], k[2], k[3], k[4])
# r.append(dict(zip(keys, values)))
# return r
# elif url_dict['act'] == 'hon_jabatannm':
# term = 'term' in params and params['term'] or ''
# q = DBSession.query(Jabatan.id, Jabatan.kode, Jabatan.nama,
# Jabatan.jenis). \
# filter(Jabatan.nama.ilike('%%%s%%' % term)). \
# order_by(Jabatan.nama)
# if self.req.user.company_id:
# q = q.filter(Departemen.company_id == self.req.user.company_id)
# rows = q.all()
# r = []
# for k in rows:
# if k[3] == 1:
# nama_jenis = 'Struktural'
# elif k[3] == 2:
# nama_jenis = 'Fungsional'
# else:
# nama_jenis = 'Keuangan'
# d = {}
# d['id'] = k[0]
# d['value'] = k[2] + ' (' + nama_jenis + ')'
# d['kode'] = k[1]
# d['nama'] = k[2]
# r.append(d)
# return r
def next_act(self):
act = self.req.matchdict['act']
if act == 'partner':
term = self.params.get('term', '')
q = DBSession.query(Partner.id, Partner.nama.label('value'),
Partner.kode, Partner.nama). \
filter(Partner.nama.ilike('%%%s%%' % term)). \
order_by(Partner.nama)
return [{"id":k[0], "value":k[1], "kode":k[2], "nama":k[3]} for k in q.all()]
def get_values(self, row, istime=False):
values = super().get_values(row, istime)
values['nama'] = row.partner.nama
values['jabatan'] = row.jabatan.nama
values['departemen'] = row.departemen.nama
values['mulai'] = dmy(row.mulai)
values['selesai'] = dmy(row.selesai)
if not row.jabatan_id:
values['jabatan_id'] = 0
else:
jb = Jabatan.query_id(row.jabatan_id).first()
if jb:
values['struktural_nm'] = jb.nama
return values
def before_add(self):
values = {'departemen_id': self.ses.get('departemen_id', None),
'departemen_nm': self.ses.get('departemen_nm', ""),
'departemen_kd': self.ses.get('departemen_kd', "")}
return values
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!