Project

General

Profile

« Previous | Next » 

Revision 84fd22a0

Added by Benjamin Dauvergne over 11 years ago

[domino] finish family update workflow

- when creating or updating a family, store the family.code_interne value into
the user object for later retrieval,
- add web service API to retrieve person to contact for children

View differences:

extra/modules/abelium_domino_ws.py
1 1
# -*- coding: utf-8 -*-
2 2
from decimal import Decimal
3
import time
3 4
import datetime
4 5
from xml.etree import ElementTree as etree
5 6
import logging
......
20 21
    return unicode(x).strip()
21 22

  
22 23
def strip_and_int(x):
23
    return int(x.strip())
24
    try:
25
        return int(x.strip())
26
    except ValueError:
27
        return None
28

  
29
def strip_and_date(x):
30
    try:
31
        return datetime.datetime.strptime(x.strip(), '%Y%m%d').date()
32
    except ValueError:
33
        return None
24 34

  
25 35
def parse_date(date_string):
26 36
    if date_string:
......
38 48
    def decorated_function(self, *args, **kwargs):
39 49
        cache_name = '__%s_cache' % function.__name__
40 50
        if not hasattr(self, cache_name):
41
            setattr(self, cache_name, {})
42
        d = getattr(self, cache_name)
51
            setattr(self, cache_name, (time.time(), {}))
52
        t, d = getattr(self, cache_name)
53
        if time.time() - t > 30:
54
            setattr(self, cache_name, (time.time(), {}))
55
            t, d = getattr(self, cache_name)
43 56
        k = tuple(*args) + tuple(sorted(kwargs.items()))
44 57
        if not k in d:
45 58
            d[k] = function(self, *args, **kwargs)
......
73 86
            v = getattr(self, local_name, None)
74 87
            if v is None:
75 88
                continue
76
            v = unicode(v).encode('utf-8')
77
            l.append('{0}: "{1}"'.format(remote_name, v))
78
        return ','.join(l)
89
            l.append(u'{0}: "{1}"'.format(remote_name, v))
90
        return u','.join(l)
79 91

  
80 92
    def debug(self):
81 93
        '''Output a debugging view of this object'''
94
        res = ''
82 95
        for remote_name, name, converter, desc in self.MORE_COLUMNS or self.COLUMNS:
83 96
            if hasattr(self, name):
84
                print name, ':', getattr(self, name)
97
                res += name + ':' + repr(getattr(self, name)) + '\n'
98
        return res
85 99

  
86 100
    def __int__(self):
87 101
        '''Return the object id'''
88 102
        return self.id
89 103

  
104
class UrgentContact(SimpleObject):
105
    COLUMNS = (
106
            ('IDENFANTS', 'id_enfant', strip_and_int, 'IDENFANTS'),
107
            ('IDCONTACT_AUTORISE', 'id', strip_and_int, 'IDCONTACT_AUTORISE'),
108
            ('LIENFAMILLE_CH', 'lien_de_famille', unicode_and_strip, 'LIENFAMILLE_CH'),
109
            ('PERE_MERE_CH', 'lien_pere_ou_pere', unicode_and_strip, 'PERE_MERE_CH'),
110
            ('IDFAMILLES', 'id_famille', unicode_and_strip, 'IDFAMILLES'),
111
            ('TYPE_CH', 'type', unicode_and_strip, 'TYPE_CH'),
112
            ('NOM_CH', 'nom', unicode_and_strip, 'NOM_CH'),
113
            ('PRENOM_CH', 'prenom', unicode_and_strip, 'PRENOM_CH'),
114
            ('RUE_CH', 'rue', unicode_and_strip, 'RUE_CH'),
115
            ('RUE2_CH', 'rue2', unicode_and_strip, 'RUE2_CH'),
116
            ('RUE3_CH', 'rue3', unicode_and_strip, 'RUE3_CH'),
117
            ('CODEPOSTAL_CH', 'code_postal', unicode_and_strip, 'CODEPOSTAL_CH'),
118
            ('VILLE_CH', 'ville', unicode_and_strip, 'VILLE_CH'),
119
            ('TELEPHONE_CH', 'telephone', unicode_and_strip, 'TELEPHONE_CH'),
120
            ('TELEPHONE2_CH', 'telephone2', unicode_and_strip, 'TELEPHONE2_CH'),
121
            ('ADRESSEINT_CH', 'adresse_internet', unicode_and_strip, 'ADRESSEINT_CH'),
122
    )
123

  
90 124
class Child(SimpleObject):
91 125
    COLUMNS = (
92 126
            ('IDENFANTS', 'id', strip_and_int, 'Identifiant de ENFANTS'),
93
            ('NOM_CH', 'nom',unicode_and_strip, 'Nom'),
94
            ('PRENOM_CH', 'prenom',unicode_and_strip, 'Prénom'),
95
            ('NAISSANCE_DA', 'naissance',unicode_and_strip, 'Date de Naissance'),
96
            ('COMMENTAIRE_ME', 'commentaire',unicode_and_strip, 'Commentaires / Notes'),
97
            ('IDFAMILLES', 'id_famille',unicode_and_strip, 'IDFAMILLES'),
98
            ('CODEPOSTAL_CH', 'code_postal',unicode_and_strip, 'Code Postal'),
99
            ('VILLE_CH', 'ville',unicode_and_strip, 'Ville'),
100
            ('CODEINTERNE_CH', 'code_interne',unicode_and_strip, 'Code Interne'),
101
            ('LIEUNAISSANCE_CH', 'lieu_naissance',unicode_and_strip, 'Lieu de Naissance'),
102
            ('DEPNAISSANCE_CH', 'departement_naissance',unicode_and_strip, 'Département Naissance'),
103
            ('NUMSECU_CH', 'num_securite_sociale',unicode_and_strip, 'N° de SECU'),
104
            ('NATIONALITE_CH', 'nationalite',unicode_and_strip, 'Nationalité'),
105
            ('PRENOM2_CH', 'prenom2',unicode_and_strip, 'Prénom 2'),
106
            ('SEXE_CH', 'sexe',unicode_and_strip, 'Sexe'),
107
            ('IDTABLELIBRE1', 'IDTABLELIBRE1',unicode_and_strip, 'IDTABLELIBRE1'),
108
            ('IDTABLELIBRE2', 'IDTABLELIBRE2',unicode_and_strip, 'IDTABLELIBRE2'),
109
            ('IDTABLELIBRE3', 'IDTABLELIBRE3',unicode_and_strip, 'IDTABLELIBRE3'),
110
            ('IDTABLELIBRE4', 'IDTABLELIBRE4',unicode_and_strip, 'IDTABLELIBRE4'),
111
            ('CHAMPLIBRE1_CH', 'CHAMPLIBRE1_CH',unicode_and_strip, 'Valeur Champ Libre 1'),
112
            ('CHAMPLIBRE2_CH', 'CHAMPLIBRE2_CH',unicode_and_strip, 'Valeur Champ Libre 2'),
113
            ('CHAMPCALCULE1_CH', 'CHAMPCALCULE1_CH',unicode_and_strip, 'Valeur Champ Calculé 1'),
114
            ('CHAMPCALCULE2_CH', 'CHAMPCALCULE2_CH',unicode_and_strip, 'Valeur Champ Calculé 2'),
115
            ('SOMMEIL_ME', 'sommeil',unicode_and_strip, 'Sommeil'),
116
            ('ACTIVITE_ME', 'activite',unicode_and_strip, 'Activités'),
117
            ('HABITUDE_ME', 'habitude',unicode_and_strip, 'Habitudes'),
118
            ('PHOTO_CH', 'photographie',unicode_and_strip, 'Photographie'),
119
            ('NUMCOMPTE_CH', 'numcompte',unicode_and_strip, 'N° Compte Comptable'),
120
            ('TELEPHONE_CH', 'telephone',unicode_and_strip, 'Téléphone'),
121
            ('IDFAMILLES2', 'id_famille2',unicode_and_strip, 'Identifiant famille 2'),
122
            ('PERE_CH', 'pere',unicode_and_strip, 'Nom du père'),
123
            ('MERE_CH', 'mere',unicode_and_strip, 'Nom de la mère'),
124
            ('AUTOPARENTALEMERE_IN', 'autorisation_parentale_mere',unicode_and_strip, 'Autorisation Parentale Mère'),
125
            ('AUTOPARENTALEPERE_IN', 'autorisation_parentale_pere',unicode_and_strip, 'Autorisation Parentale de Père'),
126
            ('IDPORTAIL_ENFANTS', 'id_portail_enfants',unicode_and_strip, 'Identifiant de PORTAIL_ENFANTS'),
127
            ('ADRESSEINT_CH', 'adresse_internet',unicode_and_strip, 'Adresse Internet'),
127
            ('NOM_CH', 'nom', unicode_and_strip, 'Nom'),
128
            ('PRENOM_CH', 'prenom', unicode_and_strip, 'Prénom'),
129
            ('NAISSANCE_DA', 'date_naissance', strip_and_date, 'Date de Naissance'),
130
            ('COMMENTAIRE_ME', 'commentaire', unicode_and_strip, 'Commentaires / Notes'),
131
            ('IDFAMILLES', 'id_famille', unicode_and_strip, 'IDFAMILLES'),
132
            ('CODEPOSTAL_CH', 'code_postal', unicode_and_strip, 'Code Postal'),
133
            ('VILLE_CH', 'ville', unicode_and_strip, 'Ville'),
134
            ('CODEINTERNE_CH', 'code_interne', unicode_and_strip, 'Code Interne'),
135
            ('LIEUNAISSANCE_CH', 'lieu_naissance', unicode_and_strip, 'Lieu de Naissance'),
136
            ('DEPNAISSANCE_CH', 'departement_naissance', unicode_and_strip, 'Département Naissance'),
137
            ('NUMSECU_CH', 'num_securite_sociale', unicode_and_strip, 'N° de SECU'),
138
            ('NATIONALITE_CH', 'nationalite', unicode_and_strip, 'Nationalité'),
139
            ('PRENOM2_CH', 'prenom2', unicode_and_strip, 'Prénom 2'),
140
            ('SEXE_CH', 'sexe', unicode_and_strip, 'Sexe'),
141
            ('IDTABLELIBRE1', 'IDTABLELIBRE1', unicode_and_strip, 'IDTABLELIBRE1'),
142
            ('IDTABLELIBRE2', 'IDTABLELIBRE2', unicode_and_strip, 'IDTABLELIBRE2'),
143
            ('IDTABLELIBRE3', 'IDTABLELIBRE3', unicode_and_strip, 'IDTABLELIBRE3'),
144
            ('IDTABLELIBRE4', 'IDTABLELIBRE4', unicode_and_strip, 'IDTABLELIBRE4'),
145
            ('CHAMPLIBRE1_CH', 'CHAMPLIBRE1_CH', unicode_and_strip, 'Valeur Champ Libre 1'),
146
            ('CHAMPLIBRE2_CH', 'CHAMPLIBRE2_CH', unicode_and_strip, 'Valeur Champ Libre 2'),
147
            ('CHAMPCALCULE1_CH', 'CHAMPCALCULE1_CH', unicode_and_strip, 'Valeur Champ Calculé 1'),
148
            ('CHAMPCALCULE2_CH', 'CHAMPCALCULE2_CH', unicode_and_strip, 'Valeur Champ Calculé 2'),
149
            ('SOMMEIL_ME', 'sommeil', unicode_and_strip, 'Sommeil'),
150
            ('ACTIVITE_ME', 'activite', unicode_and_strip, 'Activités'),
151
            ('HABITUDE_ME', 'habitude', unicode_and_strip, 'Habitudes'),
152
            ('PHOTO_CH', 'photographie', unicode_and_strip, 'Photographie'),
153
            ('NUMCOMPTE_CH', 'numcompte', unicode_and_strip, 'N° Compte Comptable'),
154
            ('TELEPHONE_CH', 'telephone', unicode_and_strip, 'Téléphone'),
155
            ('IDFAMILLES2', 'id_famille2', unicode_and_strip, 'Identifiant famille 2'),
156
            ('PERE_CH', 'pere', unicode_and_strip, 'Nom du père'),
157
            ('MERE_CH', 'mere', unicode_and_strip, 'Nom de la mère'),
158
            ('AUTOPARENTALEMERE_IN', 'autorisation_parentale_mere', unicode_and_strip, 'Autorisation Parentale Mère'),
159
            ('AUTOPARENTALEPERE_IN', 'autorisation_parentale_pere', unicode_and_strip, 'Autorisation Parentale de Père'),
160
            ('IDPORTAIL_ENFANTS', 'id_portail_enfants', unicode_and_strip, 'Identifiant de PORTAIL_ENFANTS'),
161
            ('ADRESSEINT_CH', 'adresse_internet', unicode_and_strip, 'Adresse Internet'),
128 162
    )
129 163

  
130 164
    def save(self):
......
132 166
            self.client.update_child(self)
133 167
        else:
134 168
            self.id = self.client.add_child(self)
169
        self.client.clear_cache()
135 170

  
136 171
class Family(SimpleObject):
137 172
    COLUMNS = (
......
140 175
            ('EMAILPERE_CH', 'email_pere', unicode_and_strip, 'email du père'),
141 176
            ('EMAILMERE_CH', 'email_mere', unicode_and_strip, 'email de la mère'),
142 177
            ('ADRESSEINT_CH', 'adresse_internet', unicode_and_strip, 'adresse internet'),
178
            ('CODEINTERNE_CH', 'code_interne', unicode_and_strip, 'code interne'),
143 179
    )
144 180

  
145 181
    MORE_COLUMNS = (
......
158 194
            ('TELECOPIE2_CH', 'telecopie2', unicode_and_strip, 'télécopie 2'),
159 195
            ('ADRESSEINT_CH', 'adresse_internet', unicode_and_strip, 'adresse internet'),
160 196
            ('SITUATION_CH', 'situation', unicode_and_strip, 'situation familiale'),
161
            ('REVENUMENSUEL_MO', 'revenu_mensuel_mo', unicode_and_strip, 'revenu mensuel de la famille'),
162
            ('REVENUANNUEL_MO', 'revenu_annuel_mo', unicode_and_strip, 'revenu annuel de la famille'),
163
            ('QUOTIENTFAMILIAL_MO', 'quotient_familial_mo', unicode_and_strip, 'quotient familial'),
164
            ('NBTOTALENFANTS_EN', 'nb_total_enfants_en', unicode_and_strip, 'nombre total d\'enfants'),
165
            ('NBENFANTSACHARGE_EN', 'nb_enfants_a_charge_en', unicode_and_strip, 'nombre d\'enfants à charge'),
197
            ('REVENUMENSUEL_MO', 'revenu_mensuel', unicode_and_strip, 'revenu mensuel de la famille'),
198
            ('REVENUANNUEL_MO', 'revenu_annuel', unicode_and_strip, 'revenu annuel de la famille'),
199
            ('QUOTIENTFAMILIAL_MO', 'quotient_familial', unicode_and_strip, 'quotient familial'),
200
            ('NBTOTALENFANTS_EN', 'nb_total_enfants', unicode_and_strip, 'nombre total d\'enfants'),
201
            ('NBENFANTSACHARGE_EN', 'nb_enfants_a_charge', unicode_and_strip, 'nombre d\'enfants à charge'),
166 202
            ('NOMPERE_CH', 'nom_pere', unicode_and_strip, 'monsieur'),
167 203
            ('PRENOMPERE_CH', 'prenom_pere', unicode_and_strip, 'prénom monsieur'),
168
            ('AUTOPARENTALEPERE_IN', 'autoparentale_pere_in', unicode_and_strip, 'autorisation parentale de père'),
169
            ('DATENAISPERE_DA', 'date_naissance_pere', unicode_and_strip, 'date de naisance du père'),
204
            ('AUTOPARENTALEPERE_IN', 'autoparentale_pere', unicode_and_strip, 'autorisation parentale de père'),
205
            ('DATENAISPERE_DA', 'date_naissance_pere', strip_and_date, 'date de naisance du père'),
170 206
            ('DEPNAISPERE_EN', 'departement_naissance_pere', unicode_and_strip, 'département de naissance du père'),
171 207
            ('LIEUNAISPERE_CH', 'lieu_naissance_pere', unicode_and_strip, 'lieu de naissance du père'),
172 208
            ('RUEPERE_CH', 'rue_pere', unicode_and_strip, 'rue père'),
......
176 212
            ('VILLEPERE_CH', 'ville_pere', unicode_and_strip, 'ville père'),
177 213
            ('TELEPHONEPERE_CH', 'telephone_pere', unicode_and_strip, 'téléphone père'),
178 214
            ('TELEPHONE2PERE_CH', 'telephone2_pere', unicode_and_strip, 'téléphone 2 père'),
179
            ('TELPERE_LR_IN', 'tel_pere_liste_rouge_in', unicode_and_strip, 'téléphone liste rouge père'),
180
            ('TEL2PERE_LR_IN', 'tel2_pere_liste_rouge_in', unicode_and_strip, 'téléphone 2 liste rouge père'),
181
            ('TEL_LR_IN', 'tel_liste_rourge_in', unicode_and_strip, 'téléphone liste rouge'),
182
            ('TEL2_LR_IN', 'tel2_liste_rouge_in', unicode_and_strip, 'téléphone 2 liste rouge'),
215
            ('TELPERE_LR_IN', 'tel_pere_liste_rouge', unicode_and_strip, 'téléphone liste rouge père'),
216
            ('TEL2PERE_LR_IN', 'tel2_pere_liste_rouge', unicode_and_strip, 'téléphone 2 liste rouge père'),
217
            ('TEL_LR_IN', 'tel_liste_rourge', unicode_and_strip, 'téléphone liste rouge'),
218
            ('TEL2_LR_IN', 'tel2_liste_rouge', unicode_and_strip, 'téléphone 2 liste rouge'),
183 219
            ('NOMMERE_CH', 'nom_mere', unicode_and_strip, 'madame'),
184 220
            ('PRENOMMERE_CH', 'prenom_mere', unicode_and_strip, 'prénom madame'),
185
            ('AUTOPARENTALEMERE_IN', 'autoparentale_mere_in', unicode_and_strip, 'autorisation parentale mère'),
186
            ('DATENAISMERE_DA', 'date_naissance_mere_da', unicode_and_strip, 'date de naissance de la mère'),
187
            ('DEPNAISMERE_EN', 'departement_naissance_mere_en', unicode_and_strip, 'département de naissance de la mère'),
221
            ('AUTOPARENTALEMERE_IN', 'autoparentale_mere', unicode_and_strip, 'autorisation parentale mère'),
222
            ('DATENAISMERE_DA', 'date_naissance_mere', strip_and_date, 'date de naissance de la mère'),
223
            ('DEPNAISMERE_EN', 'departement_naissance_mere', unicode_and_strip, 'département de naissance de la mère'),
188 224
            ('LIEUNAISMERE_CH', 'lieu_naissance_mere', unicode_and_strip, 'lieu de naissance de la mère'),
189 225
            ('RUEMERE_CH', 'rue_mere', unicode_and_strip, 'rue mère'),
190
            ('REVMENSUELPERE_MO', 'revenu_mensuel_pere_mo', unicode_and_strip, 'revenu mensuel du père'),
226
            ('REVMENSUELPERE_MO', 'revenu_mensuel_pere', unicode_and_strip, 'revenu mensuel du père'),
191 227
            ('RUE2MERE_CH', 'rue2_mere', unicode_and_strip, 'rue 2 mère'),
192 228
            ('RUE3MERE_CH', 'rue3_mere', unicode_and_strip, 'rue 3 mère'),
193 229
            ('CODEPOSTALMERE_CH', 'code_postal_mere', unicode_and_strip, 'code postal de la mère'),
194 230
            ('VILLEMERE_CH', 'ville_mere', unicode_and_strip, 'ville de la mère'),
195
            ('REVMENSUELMERE_MO', 'revenu_mensuel_mere_mo', unicode_and_strip, 'revenu mensuel mère'),
196
            ('REVANNUELPERE_MO', 'revenu_annuel_pere_mo', unicode_and_strip, 'revenu annuel père'),
197
            ('REVANNUELMERE_MO', 'revenu_annuel_mere_mo', unicode_and_strip, 'revenu annuel mère'),
231
            ('REVMENSUELMERE_MO', 'revenu_mensuel_mere', unicode_and_strip, 'revenu mensuel mère'),
232
            ('REVANNUELPERE_MO', 'revenu_annuel_pere', unicode_and_strip, 'revenu annuel père'),
233
            ('REVANNUELMERE_MO', 'revenu_annuel_mere', unicode_and_strip, 'revenu annuel mère'),
198 234
            ('TELEPHONEMERE_CH', 'telephone_mere', unicode_and_strip, 'téléphone mère'),
199 235
            ('TELEPHONE2MERE_CH', 'telephone2_mere', unicode_and_strip, 'téléphone 2 mère'),
200
            ('TELMERE_LR_IN', 'telephone_mere_liste_rouge_in', unicode_and_strip, 'téléphone liste rouge mère'),
201
            ('TEL2MERE_LR_IN', 'telephone2_mere_liste_rouge_in', unicode_and_strip, 'téléphone 2 liste rouge mère'),
236
            ('TELMERE_LR_IN', 'telephone_mere_liste_rouge', unicode_and_strip, 'téléphone liste rouge mère'),
237
            ('TEL2MERE_LR_IN', 'telephone2_mere_liste_rouge', unicode_and_strip, 'téléphone 2 liste rouge mère'),
202 238
            ('TELECOPIEPERE_CH', 'telecopie_pere', unicode_and_strip, 'télécopie du père'),
203 239
            ('TELECOPIE2PERE_CH', 'telecopie2_pere', unicode_and_strip, 'télécopie 2 du père'),
204 240
            ('TELECOPIEMERE_CH', 'telecopie_mere', unicode_and_strip, 'télécopie de la mère'),
......
223 259
            ('TELPROFMERE_CH', 'telephone_travail_mere', unicode_and_strip, 'téléphone travail mère'),
224 260
            ('TEL2PROFMERE_CH', 'telephone2_travail_mere', unicode_and_strip, 'téléphone 2 travail mère'),
225 261
            ('TELMOBILMERE_CH', 'telephone_mobile_mere', unicode_and_strip, 'téléphone mobile mère'),
226
            ('TOTALDU_MO', 'total_du_mo', unicode_and_strip, 'total dû'),
227
            ('TOTALREGLE_MO', 'total_regle_mo', unicode_and_strip, 'total réglé'),
262
            ('TOTALDU_MO', 'total_du', unicode_and_strip, 'total dû'),
263
            ('TOTALREGLE_MO', 'total_regle', unicode_and_strip, 'total réglé'),
228 264
            ('NUMCENTRESS_CH', 'num_centre_securite_sociale', unicode_and_strip, 'n° centre sécurité sociale'),
229 265
            ('NOMCENTRESS_CH', 'nom_centre_securite_sociale', unicode_and_strip, 'nom centre sécurité sociale'),
230 266
            ('NUMASSURANCE_CH', 'num_assurance', unicode_and_strip, 'n° assurance'),
231 267
            ('NOMASSURANCE_CH', 'nom_assurance', unicode_and_strip, 'nom assurance'),
232
            ('RIVOLI_EN', 'code_rivoli_en', unicode_and_strip, 'identifiant code rivoli'),
268
            ('RIVOLI_EN', 'code_rivoli', unicode_and_strip, 'identifiant code rivoli'),
233 269
            ('NUMCOMPTE_CH', 'numero_compte_comptable', unicode_and_strip, 'n° compte comptable'),
234 270
            ('EMAILPERE_CH', 'email_pere', unicode_and_strip, 'email du père'),
235 271
            ('EMAILMERE_CH', 'email_mere', unicode_and_strip, 'email de la mère'),
236 272
            ('NUMALLOCATAIRE_CH', 'numero_allocataire', unicode_and_strip, 'n° allocataire'),
237
            ('COMMENTAIRE_ME', 'commentaire_me', unicode_and_strip, 'commentaires / notes'),
273
            ('COMMENTAIRE_ME', 'commentaire', unicode_and_strip, 'commentaires / notes'),
238 274
            ('IDCSPPERE', 'identifiant_csp_pere', unicode_and_strip, 'référence identifiant csp'),
239 275
            ('IDCSPMERE', 'identifiant_csp_mere', unicode_and_strip, 'référence identifiant csp'),
240 276
            ('IDSECTEURS', 'identifiant_secteurs', unicode_and_strip, 'référence identifiant secteurs'),
......
268 304
            ('NUMRUEPERE_CH', 'numero_rue_pere', unicode_and_strip, 'numéro de rue père'),
269 305
            ('NUMRUEMERE_CH', 'numero_rue_mere', unicode_and_strip, 'numéro de rue mère'),
270 306
            ('IDPORTAIL_FAMILLES', 'identifiant_portail_familles', unicode_and_strip, 'identifiant de portail_familles'),
271
            ('ECHEANCEASSURANCE_DA', 'echeance_assurance_da', unicode_and_strip, 'date echéance assurance'),
272
            ('RM_MIKADO_MO', 'rm_mikado_mo', unicode_and_strip, 'revenus mensuels mikado'),
273
            ('RA_MIKADO_MO', 'ra_mikado_mo', unicode_and_strip, 'revenus annuels mikado'),
274
            ('QF_MIKADO_MO', 'qf_mikado_mo', unicode_and_strip, 'quotient familial mikado'),
275
            ('RM_DIABOLO_MO', 'rm_diabolo_mo', unicode_and_strip, 'revenus mensuels diabolo'),
276
            ('RA_DIABOLO_MO', 'ra_diabolo_mo', unicode_and_strip, 'revenus annuels diabolo'),
277
            ('QF_DIABOLO_MO', 'qf_diabolo_mo', unicode_and_strip, 'quotient familial diabolo'),
278
            ('RM_OLIGO_MO', 'rm_oligo_mo', unicode_and_strip, 'revenus mensuels oligo'),
279
            ('RA_OLIGO_MO', 'ra_oligo_mo', unicode_and_strip, 'revenus annuels oligo'),
280
            ('QF_OLIGO_MO', 'qf_oligo_mo', unicode_and_strip, 'quotient familial oligo'),
281
            ('APPLICATION_REV_MIKADO_DA', 'application_rev_mikado_da', unicode_and_strip, 'date d\'application des revenus de mikado'),
282
            ('APPLICATION_REV_DIABOLO_DA', 'application_rev_diabolo_da', unicode_and_strip, 'date d\'application des revenus de diabolo'),
283
            ('APPLICATION_REV_OLIGO_DA', 'application_rev_oligo_da', unicode_and_strip, 'date d\'application des revenus de oligo'),
307
            ('ECHEANCEASSURANCE_DA', 'echeance_assurance', unicode_and_strip, 'date echéance assurance'),
308
            ('RM_MIKADO_MO', 'rm_mikado', unicode_and_strip, 'revenus mensuels mikado'),
309
            ('RA_MIKADO_MO', 'ra_mikado', unicode_and_strip, 'revenus annuels mikado'),
310
            ('QF_MIKADO_MO', 'qf_mikado', unicode_and_strip, 'quotient familial mikado'),
311
            ('RM_DIABOLO_MO', 'rm_diabolo', unicode_and_strip, 'revenus mensuels diabolo'),
312
            ('RA_DIABOLO_MO', 'ra_diabolo', unicode_and_strip, 'revenus annuels diabolo'),
313
            ('QF_DIABOLO_MO', 'qf_diabolo', unicode_and_strip, 'quotient familial diabolo'),
314
            ('RM_OLIGO_MO', 'rm_oligo', unicode_and_strip, 'revenus mensuels oligo'),
315
            ('RA_OLIGO_MO', 'ra_oligo', unicode_and_strip, 'revenus annuels oligo'),
316
            ('QF_OLIGO_MO', 'qf_oligo', unicode_and_strip, 'quotient familial oligo'),
317
            ('APPLICATION_REV_MIKADO_DA', 'application_rev_mikado', unicode_and_strip, 'date d\'application des revenus de mikado'),
318
            ('APPLICATION_REV_DIABOLO_DA', 'application_rev_diabolo', unicode_and_strip, 'date d\'application des revenus de diabolo'),
319
            ('APPLICATION_REV_OLIGO_DA', 'application_rev_oligo', unicode_and_strip, 'date d\'application des revenus de oligo'),
284 320
    )
285 321

  
286 322
    def __init__(self, *args, **kwargs):
......
302 338
    def add_child(self, child):
303 339
        if hasattr(self, 'id'):
304 340
            child.id_famille = self.id
341
            child.client = self.client
305 342
        self.children.append(child)
306 343

  
307 344
    def save(self):
308 345
        if hasattr(self, 'id'):
309 346
            self.client.update_family(self)
310 347
        else:
348
            self.code_interne = self.client.new_code_interne()
311 349
            self.id = self.client.add_family(self)
312 350
        for child in self.children:
313 351
            child.id_famille = self.id
314 352
            child.save()
353
        self.client.clear_cache()
315 354

  
316 355
class Invoice(SimpleObject):
317 356
    COLUMNS = (
......
359 398
        self.domain = domain
360 399
        self.login = login
361 400
        self.password = password
362
        self.client = Client(url, location=location, timeout=5)
401
        self.client = Client(url, location=location, timeout=60)
363 402
        self.client.options.cache.setduration(seconds=60)
364 403

  
365 404
    def clear_cache(self):
......
373 412
        '''Call SOAP method named function_name passing args list as parameters.
374 413

  
375 414
           Any error is converted into the DominoException class.'''
415
        print 'call', function_name, args
376 416

  
377 417
        try:
378 418
            logger.debug('soap call to %s%r', function_name, args)
......
381 421
            self.data = data
382 422
        except IOError, e:
383 423
            raise DominoException('Erreur IO', e)
424
        if data is None:
425
           data = ''
384 426
        if data.startswith('ERREUR'):
385 427
            raise DominoException(data[9:].encode('utf8'))
386 428
        return data
......
488 530
                args=(id_famille, (','.join([x[0] for x in columns]))))
489 531
        return dict([(int(x), x) for x in children])
490 532

  
533
    def get_urgent_contacts(self, id_enfant):
534
        columns = UrgentContact.COLUMNS
535
        urgent_contacts = self('LISTER_PERSONNES_URGENCE',
536
                UrgentContact,
537
                
538
                args=((id_enfant, ','.join([x[0] for x in columns]))))
539
        return dict([(int(x), x) for x in urgent_contacts])
491 540

  
492 541
    @property
493 542
    @object_cached
......
502 551
            invoice.famille = self.families[invoice.id_famille]
503 552
        return invoices
504 553

  
554
    def new_code_interne(self):
555
        max_ci = 0
556
        for family in self.families.values():
557
            try:
558
                max_ci = max(max_ci, int(family.code_interne))
559
            except:
560
                pass
561
        return '%05d' % (max_ci+1)
562

  
505 563
    def get_invoices(self, id_famille=0, state='TOUTES'):
506 564
        '''Get invoices informations.
507 565

  
......
551 609
                return famille
552 610
        return None
553 611

  
612
    def get_family_by_code_interne(self, code_interne):
613
        '''Return the first whose one email attribute matches the given email'''
614
        for famille in self.families.values():
615
            if getattr(famille, 'code_interne', None) == code_interne:
616
                return famille
617
        return None
618

  
554 619
    def pay_invoice(self, id_invoices, amount, other_information, date=None):
555 620
        '''Notify Domino of the payment of some invoices.
556 621

  

Also available in: Unified diff