Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Owo Sugiana
/
warga
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit cf9430e3
authored
Jun 23, 2023
by
Owo Sugiana
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Tambah kolaborasi
1 parent
6e903196
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
167 additions
and
12 deletions
warga/models/res_partner.py
warga/security/ir.model.access.csv
warga/security/ir_rule.xml
warga/views/rt.xml
warga/models/res_partner.py
View file @
cf9430e
...
@@ -41,6 +41,9 @@ class HubunganKeluarga(models.Model):
...
@@ -41,6 +41,9 @@ class HubunganKeluarga(models.Model):
name
=
fields
.
Char
(
string
=
'Hubungan Keluarga'
,
required
=
True
)
name
=
fields
.
Char
(
string
=
'Hubungan Keluarga'
,
required
=
True
)
_sql_constraints
=
[
(
'unique_name'
,
'UNIQUE (create_uid, name)'
,
'Nama harus unik'
)]
# https://github.com/open-synergy/opnsynid-partner-contact/tree/8.0/partner_contact_religion/models
# https://github.com/open-synergy/opnsynid-partner-contact/tree/8.0/partner_contact_religion/models
class
PartnerReligion
(
models
.
Model
):
class
PartnerReligion
(
models
.
Model
):
...
@@ -50,6 +53,76 @@ class PartnerReligion(models.Model):
...
@@ -50,6 +53,76 @@ class PartnerReligion(models.Model):
name
=
fields
.
Char
(
string
=
'Religion'
,
required
=
True
)
name
=
fields
.
Char
(
string
=
'Religion'
,
required
=
True
)
_sql_constraints
=
[
(
'unique_name'
,
'UNIQUE (create_uid, name)'
,
'Nama harus unik'
)]
class
Kolaborasi
(
models
.
Model
):
_name
=
'partner.kolaborasi'
_description
=
'Kolaborasi Warga'
partner_id
=
fields
.
Many2one
(
'res.partner'
,
required
=
True
,
ondelete
=
'cascade'
)
user_id
=
fields
.
Many2one
(
'res.users'
,
required
=
True
)
email
=
fields
.
Char
(
compute
=
'_compute_user'
,
store
=
False
)
status
=
fields
.
Selection
([
(
'pemilik'
,
'Pemilik'
),
(
'editor'
,
'Editor'
)])
is_readonly
=
fields
.
Boolean
(
compute
=
'_compute_user'
,
store
=
False
)
_sql_constraints
=
[
(
'unique_user'
,
'UNIQUE (partner_id, user_id)'
,
'User harus unik'
)]
@api.depends
(
'user_id'
,
'status'
)
def
_compute_user
(
self
):
for
res
in
self
:
res
.
email
=
res
.
user_id
.
login
res
.
is_readonly
=
res
.
status
==
'pemilik'
or
\
res
.
user_id
.
id
==
self
.
env
.
user
.
id
def
hapus
(
self
):
# button
# Hapus dulu kolaborasi di seluruh warga RT terkait
partners
=
self
.
env
[
'res.partner'
]
.
search
(
[(
'root_partner_id'
,
'='
,
self
.
partner_id
.
id
)])
for
partner
in
partners
:
k_ids
=
self
.
env
[
'partner.kolaborasi'
]
.
search
([
(
'partner_id'
,
'='
,
partner
.
id
),
(
'user_id'
,
'='
,
self
.
user_id
.
id
)])
for
k
in
k_ids
:
k
.
unlink
()
# Hapus kolaborasi ini
k
=
self
.
env
[
'partner.kolaborasi'
]
.
search
(
[(
'id'
,
'='
,
self
.
id
)],
limit
=
1
)
k
.
sudo
()
.
unlink
()
class
KolaborasiWizard
(
models
.
TransientModel
):
_name
=
'kolaborasi.wizard'
_description
=
'Tambah email kolaborasi'
partner_id
=
fields
.
Many2one
(
'res.partner'
,
required
=
True
)
email
=
fields
.
Char
(
required
=
True
)
def
tambah
(
self
):
# button
u
=
self
.
env
[
'res.users'
]
.
sudo
()
.
search
(
[(
'login'
,
'='
,
self
.
email
)],
limit
=
1
)
if
not
u
:
raise
ValidationError
(
f
'Email {self.email} belum terdaftar'
)
k
=
self
.
env
[
'partner.kolaborasi'
]
.
search
([
(
'partner_id'
,
'='
,
self
.
partner_id
.
id
),
(
'user_id.login'
,
'='
,
self
.
email
)],
limit
=
1
)
if
k
:
raise
ValidationError
(
f
'Email {self.email} sudah terdaftar di kolaborasi'
)
d
=
dict
(
partner_id
=
self
.
partner_id
.
id
,
user_id
=
u
.
id
,
status
=
'editor'
)
self
.
env
[
'partner.kolaborasi'
]
.
sudo
()
.
create
(
d
)
# Berikan akses ke warga RT terkait
partners
=
self
.
env
[
'res.partner'
]
.
search
(
[(
'root_partner_id'
,
'='
,
self
.
partner_id
.
id
)])
for
partner
in
partners
:
d
=
dict
(
partner_id
=
partner
.
id
,
user_id
=
u
.
id
,
status
=
d
[
'status'
])
self
.
env
[
'partner.kolaborasi'
]
.
sudo
()
.
create
(
d
)
class
Partner
(
models
.
Model
):
class
Partner
(
models
.
Model
):
_inherit
=
'res.partner'
_inherit
=
'res.partner'
...
@@ -85,6 +158,19 @@ class Partner(models.Model):
...
@@ -85,6 +158,19 @@ class Partner(models.Model):
# https://github.com/OCA/partner-contact/blob/15.0/partner_contact_nationality
# https://github.com/OCA/partner-contact/blob/15.0/partner_contact_nationality
nationality_id
=
fields
.
Many2one
(
'res.country'
,
'Warga Negara'
)
nationality_id
=
fields
.
Many2one
(
'res.country'
,
'Warga Negara'
)
religion_id
=
fields
.
Many2one
(
'partner.religion'
,
'Agama'
)
religion_id
=
fields
.
Many2one
(
'partner.religion'
,
'Agama'
)
kolaborasi_ids
=
fields
.
One2many
(
'partner.kolaborasi'
,
'partner_id'
)
# RT
root_partner_id
=
fields
.
Many2one
(
'res.partner'
)
def
action_kolaborasi
(
self
):
return
{
'type'
:
'ir.actions.act_window'
,
'target'
:
'new'
,
'res_model'
:
'kolaborasi.wizard'
,
'name'
:
'Kolaborasi'
,
'views'
:
[(
False
,
'form'
)],
'context'
:
{
'default_partner_id'
:
self
.
id
}}
def
_create_hubungan_keluarga
(
self
):
def
_create_hubungan_keluarga
(
self
):
# Buat daftar Hubungan Keluarga
# Buat daftar Hubungan Keluarga
...
@@ -104,22 +190,58 @@ class Partner(models.Model):
...
@@ -104,22 +190,58 @@ class Partner(models.Model):
d
=
dict
(
name
=
name
)
d
=
dict
(
name
=
name
)
self
.
env
[
'partner.religion'
]
.
create
(
d
)
self
.
env
[
'partner.religion'
]
.
create
(
d
)
def
_create_kolaborasi_pemilik
(
self
,
partner
):
d
=
dict
(
partner_id
=
partner
.
id
,
user_id
=
self
.
env
.
user
.
id
,
status
=
'pemilik'
)
self
.
env
[
'partner.kolaborasi'
]
.
sudo
()
.
create
(
d
)
def
_create_kolaborasi_semua
(
self
,
partner
):
k_ids
=
self
.
env
[
'partner.kolaborasi'
]
.
search
(
[(
'partner_id'
,
'='
,
partner
.
root_partner_id
.
id
)])
for
k
in
k_ids
:
d
=
dict
(
partner_id
=
partner
.
id
,
user_id
=
k
.
user_id
.
id
,
status
=
k
.
status
)
self
.
env
[
'partner.kolaborasi'
]
.
sudo
()
.
create
(
d
)
@api.model
@api.model
def
create
(
self
,
vals
):
def
create
(
self
,
vals
):
# Overrride
hk
=
vals
.
get
(
'hubungan_keluarga'
)
hk
=
vals
.
get
(
'hubungan_keluarga'
)
if
hk
:
if
hk
:
res
=
self
.
env
[
'hubungan.keluarga'
]
.
search
(
res
=
self
.
env
[
'hubungan.keluarga'
]
.
search
(
[(
'name'
,
'='
,
hk
)],
limit
=
1
)
[(
'name'
,
'='
,
hk
)],
limit
=
1
)
if
res
:
if
res
:
vals
[
'hubungan_keluarga_id'
]
=
res
.
id
vals
[
'hubungan_keluarga_id'
]
=
res
.
id
parent_id
=
vals
.
get
(
'parent_id'
)
if
parent_id
:
res
=
self
.
env
[
'res.partner'
]
.
search
(
[(
'id'
,
'='
,
parent_id
)],
limit
=
1
)
if
res
:
if
res
.
root_partner_id
:
vals
[
'root_partner_id'
]
=
res
.
root_partner_id
.
id
else
:
vals
[
'root_partner_id'
]
=
res
.
id
res
=
super
()
.
create
(
vals
)
res
=
super
()
.
create
(
vals
)
# RT ?
if
self
.
env
.
ref
(
'warga.res_partner_category_warga_rt'
)
==
\
if
self
.
env
.
ref
(
'warga.res_partner_category_warga_rt'
)
==
\
res
.
category_id
:
res
.
category_id
:
# Sebagai institusi RT
self
.
_create_hubungan_keluarga
()
self
.
_create_hubungan_keluarga
()
self
.
_create_religion
()
self
.
_create_religion
()
self
.
_create_kolaborasi_pemilik
(
res
)
else
:
# Sebagai warga
self
.
_create_kolaborasi_semua
(
res
)
return
res
return
res
def
unlink
(
self
):
# Override
# Hapus dulu anggotanya
partners
=
self
.
env
[
'res.partner'
]
.
search
(
[(
'parent_id'
,
'='
,
self
.
id
)])
for
partner
in
partners
:
partner
.
unlink
()
return
super
()
.
unlink
()
@api.depends
(
"birthdate_date"
)
@api.depends
(
"birthdate_date"
)
def
_compute_age
(
self
):
def
_compute_age
(
self
):
for
record
in
self
:
for
record
in
self
:
...
...
warga/security/ir.model.access.csv
View file @
cf9430e
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_undangan_user,access_undangan_dari_user,model_warga_undangan,base.group_user,1,1,1,0
access_undangan_user,access_undangan_dari_user,model_warga_undangan,base.group_user,1,1,1,0
access_undangan_portal,access_undangan_dari_portal,model_warga_undangan,base.group_portal,1,1,1,0
access_pop_message_user,access_pop_message_user,model_custom_pop_message,base.group_user,1,0,0,0
access_pop_message_user,access_pop_message_user,model_custom_pop_message,base.group_user,1,0,0,0
access_pop_message_portal,access_pop_message_portal,model_custom_pop_message,base.group_portal,1,0,0,0
access_hubungan_keluarga,access_hubungan_keluarga,model_hubungan_keluarga,base.group_user,1,1,1,1
access_hubungan_keluarga,access_hubungan_keluarga,model_hubungan_keluarga,base.group_user,1,1,1,1
access_partner_religion,access_partner_religion,model_partner_religion,base.group_user,1,1,1,1
access_partner_religion,access_partner_religion,model_partner_religion,base.group_user,1,1,1,1
access_partner_kolaborasi,access_partner_kolaborasi,model_partner_kolaborasi,base.group_user,1,0,0,0
access_kolaborasi_wizard,access_kolaborasi_wizard,model_kolaborasi_wizard,base.group_user,1,1,1,0
warga/security/ir_rule.xml
View file @
cf9430e
...
@@ -3,27 +3,27 @@
...
@@ -3,27 +3,27 @@
<record
model=
"res.groups"
id=
"group_warga"
>
<record
model=
"res.groups"
id=
"group_warga"
>
<field
name=
"name"
>
Warga
</field>
<field
name=
"name"
>
Warga
</field>
</record>
</record>
<record
model=
"ir.rule"
id=
"
hak_
akses_warga"
>
<record
model=
"ir.rule"
id=
"akses_warga"
>
<field
name=
"name"
>
Hak
Akses Warga
</field>
<field
name=
"name"
>
Akses Warga
</field>
<field
name=
"model_id"
ref=
"base.model_res_partner"
/>
<field
name=
"model_id"
ref=
"base.model_res_partner"
/>
<field
name=
"domain_force"
>
<field
name=
"domain_force"
>
['|', '|', '|',
['|', '|', '|',
('id', '=', 2),
('id', '=', 2),
('create_uid', '=', user.id),
('create_uid', '=', user.id),
('user_id', '=', user.id),
('user_id
s
', '=', user.id),
('
user_ids','=',user.id
)]
('
kolaborasi_ids.user_id', 'in', [user.id]
)]
</field>
</field>
<field
name=
"groups"
eval=
"[Command.link(ref('warga.group_warga'))]"
/>
<field
name=
"groups"
eval=
"[Command.link(ref('warga.group_warga'))]"
/>
</record>
</record>
<record
model=
"ir.rule"
id=
"akses_hubungan_keluarga"
>
<record
model=
"ir.rule"
id=
"akses_hubungan_keluarga"
>
<field
name=
"name"
>
Hak
Akses Hubungan Keluarga"
</field>
<field
name=
"name"
>
Akses Hubungan Keluarga"
</field>
<field
name=
"model_id"
ref=
"model_hubungan_keluarga"
/>
<field
name=
"model_id"
ref=
"model_hubungan_keluarga"
/>
<field
name=
"domain_force"
>
<field
name=
"domain_force"
>
[('create_uid', '=', user.id)]
[('create_uid', '=', user.id)]
</field>
</field>
</record>
</record>
<record
model=
"ir.rule"
id=
"akses_partner_religion"
>
<record
model=
"ir.rule"
id=
"akses_partner_religion"
>
<field
name=
"name"
>
Hak
Akses Agama
</field>
<field
name=
"name"
>
Akses Agama
</field>
<field
name=
"model_id"
ref=
"model_partner_religion"
/>
<field
name=
"model_id"
ref=
"model_partner_religion"
/>
<field
name=
"domain_force"
>
<field
name=
"domain_force"
>
[('create_uid', '=', user.id)]
[('create_uid', '=', user.id)]
...
...
warga/views/rt.xml
View file @
cf9430e
...
@@ -7,7 +7,6 @@
...
@@ -7,7 +7,6 @@
<field
name=
"domain"
>
<field
name=
"domain"
>
[
[
('category_id.name', '=', 'RT'),
('category_id.name', '=', 'RT'),
('create_uid', '=', uid),
]
]
</field>
</field>
<field
name=
"context"
eval=
"{'default_category_id': [ref('warga.res_partner_category_warga_rt')]}"
/>
<field
name=
"context"
eval=
"{'default_category_id': [ref('warga.res_partner_category_warga_rt')]}"
/>
...
@@ -28,6 +27,7 @@
...
@@ -28,6 +27,7 @@
<h1>
<h1>
<field
name=
"name"
placeholder=
"Contoh: RT 7. Bisa juga nama cluster atau apartemen"
/>
<field
name=
"name"
placeholder=
"Contoh: RT 7. Bisa juga nama cluster atau apartemen"
/>
</h1>
</h1>
<field
name=
"create_uid"
invisible=
"1"
/>
<group>
<group>
<group>
<group>
<field
name=
"street"
/>
<field
name=
"street"
/>
...
@@ -44,7 +44,7 @@
...
@@ -44,7 +44,7 @@
<field
name=
"zip"
/>
<field
name=
"zip"
/>
</group>
</group>
</group>
</group>
<notebook
colspan=
"
2
"
>
<notebook
colspan=
"
3
"
>
<page
string=
"Kepala Keluarga"
>
<page
string=
"Kepala Keluarga"
>
<field
name=
"child_ids"
context=
"{'default_parent_id':
active_id,
<field
name=
"child_ids"
context=
"{'default_parent_id':
active_id,
'default_category_id':
[2],
'default_category_id':
[2],
...
@@ -175,11 +175,44 @@
...
@@ -175,11 +175,44 @@
<page
string=
"Catatan"
>
<page
string=
"Catatan"
>
<field
name=
"comment"
placeholder=
"Tulis hal menarik"
/>
<field
name=
"comment"
placeholder=
"Tulis hal menarik"
/>
</page>
</page>
<page
string=
"Kolaborasi"
attrs=
"{'invisible': [('create_uid', '=', False)]}"
>
<xpath
expr=
"//header"
position=
"inside"
>
<button
string=
"Tambah"
type=
"object"
name=
"action_kolaborasi"
/>
</xpath>
<field
name=
"kolaborasi_ids"
>
<tree
insert=
"false"
>
<field
name=
"user_id"
/>
<field
name=
"email"
/>
<field
name=
"status"
/>
<field
name=
"is_readonly"
invisible=
"1"
/>
<button
name=
"hapus"
string=
"Hapus"
type=
"object"
attrs=
"{'invisible': [('is_readonly', '=', True)]}"
/>
</tree>
</field>
</page>
</notebook>
</notebook>
</form>
</form>
</field>
</field>
</record>
</record>
<record
id=
"view_kolaborasi_wizard"
model=
"ir.ui.view"
>
<field
name=
"name"
>
kolaborasi.wizard.view
</field>
<field
name=
"model"
>
kolaborasi.wizard
</field>
<field
name=
"arch"
type=
"xml"
>
<form
string=
"Daftarkan lainnya untuk kolaborasi"
>
<group>
<field
name=
"partner_id"
string=
"RT"
attrs=
"{'readonly': 1}"
/>
<field
name=
"email"
placeholder=
"Masukkan email terdaftar untuk akses RT ini"
/>
</group>
<footer>
<button
string=
"Tambah"
name=
"tambah"
type=
"object"
class=
"btn-primary"
/>
<button
string=
"Batal"
special=
"cancel"
class=
"btn-secondary"
/>
</footer>
</form>
</field>
</record>
<menuitem
name=
"RT"
<menuitem
name=
"RT"
id=
"menu_root_rt"
id=
"menu_root_rt"
sequence=
"20"
sequence=
"20"
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment