-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathgiscedata_polissa.py
159 lines (127 loc) · 5.4 KB
/
giscedata_polissa.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# -*- coding: utf-8 -*-
from osv import osv
from tools import cache
import netsvc
class GiscedataPolissa(osv.osv):
"""Per gestionar els"""
_name = "giscedata.polissa"
_inherit = "giscedata.polissa"
@cache()
def get_soci_energetica(self, cursor, uid, ids, context=None):
"""
Returns energética soci id
:param cursor:
:param uid:
:param ids:
:param context:
:return: id soci energética
"""
imd_obj = self.pool.get("ir.model.data")
return imd_obj.get_object_reference(
cursor, uid, "som_energetica", "res_partner_energetica"
)[1]
def is_energetica(self, cursor, uid, contract_id, context=None):
"""
Detecta si un contracte és d'energética si el seu soci és d'energética
:param cursor:
:param uid:
:param contract_id: id del contracte
:param context:
:return: True o False si és d'energética o no
"""
soci_id = self.read(cursor, uid, contract_id, ["soci"])["soci"]
if soci_id:
id_soci_energetica = self.get_soci_energetica(cursor, uid, [])
return soci_id[0] == id_soci_energetica
return False
def get_bad_energetica_partners(self, cursor, uid, contract_ids, context=None):
"""
Retorna els ids dels partners amb la categoria incorrecte
:param cursor:
:param uid:
:param contract_ids: id del contracte o llista de contractes
:param context:
:return: llista amb les partners a modificar
"""
imd_obj = self.pool.get("ir.model.data")
if not isinstance(contract_ids, (list, tuple)):
contract_ids = [contract_ids]
cat_energetica_id = imd_obj.get_object_reference(
cursor, uid, "som_energetica", "res_partner_category_energetica"
)[1]
partners_list = []
for contract_id in contract_ids:
if not self.is_energetica(cursor, uid, contract_id):
continue
contract = self.browse(cursor, uid, contract_id, context)
if contract.titular and cat_energetica_id not in [
x.id for x in contract.titular.category_id
]:
partners_list.append(contract.titular.id)
if contract.pagador and cat_energetica_id not in [
x.id for x in contract.pagador.category_id
]:
partners_list.append(contract.pagador.id)
if contract.altre_p and cat_energetica_id not in [
x.id for x in contract.altre_p.category_id
]:
partners_list.append(contract.altre_p.id)
if contract.administradora and cat_energetica_id not in [
x.id for x in contract.administradora.category_id
]:
partners_list.append(contract.administradora.id)
if (
contract.bank
and contract.bank.partner_id
and cat_energetica_id not in [x.id for x in contract.bank.partner_id.category_id]
):
partners_list.append(contract.bank.partner_id.id)
if (
contract.direccio_pagament
and contract.direccio_pagament.partner_id
and cat_energetica_id
not in [x.id for x in contract.direccio_pagament.partner_id.category_id]
):
partners_list.append(contract.direccio_pagament.partner_id.id)
if (
contract.direccio_notificacio
and contract.direccio_notificacio.partner_id
and cat_energetica_id
not in [x.id for x in contract.direccio_notificacio.partner_id.category_id]
):
partners_list.append(contract.direccio_notificacio.partner_id.id)
return list(set(partners_list))
def set_energetica(self, cursor, uid, contract_ids, context=None):
"""
Afegeix tots el partners del contracte a la categoria energética si cal
:param cursor:
:param uid:
:param contract_ids: id de contract or contract ids list
:param context:
:return: retorna True si ha modificat algun partner
"""
logger = netsvc.Logger()
imd_obj = self.pool.get("ir.model.data")
partner_obj = self.pool.get("res.partner")
if not isinstance(contract_ids, (list, tuple)):
contract_ids = [contract_ids]
cat_energetica_id = imd_obj.get_object_reference(
cursor, uid, "som_energetica", "res_partner_category_energetica"
)[1]
bad_partners_ids = self.get_bad_energetica_partners(
cursor, uid, contract_ids, context=context
)
for bad_id in bad_partners_ids:
p_data = partner_obj.read(cursor, uid, bad_id, ["name"])
partner_obj.write(cursor, uid, bad_id, {"category_id": [(6, 0, [cat_energetica_id])]})
logger.notifyChannel(
"energetica",
netsvc.LOG_WARNING,
"Added partner {} to Energética category".format(p_data["name"]),
)
def create(self, cursor, uid, vals, context=None):
res_id = super(GiscedataPolissa, self).create(cursor, uid, vals, context)
if self.is_energetica(cursor, uid, res_id):
self.set_energetica(cursor, uid, [res_id], context)
return res_id
GiscedataPolissa()