Commit cf9430e3 by Owo Sugiana

Tambah kolaborasi

1 parent 6e903196
...@@ -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:
......
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
...@@ -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_ids', '=', 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)]
......
...@@ -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"
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!