1+ import datetime
2+ from pytz import UTC
3+ from odoo import http , _
4+ from odoo .http import request
5+ from werkzeug .exceptions import Forbidden , NotFound
6+ from .common import check_access_permission
7+
8+
9+ class PortalBadgeRelease (http .Controller ):
10+
11+ @http .route ('/badge_release' , auth = 'user' , type = 'http' , website = True )
12+ def badge_release_form (self , ** post ):
13+ user = request .env .user
14+ if not check_access_permission (user ):
15+ raise NotFound ()
16+
17+ if post and request .httprequest .method == 'POST' :
18+ return self ._handle_badge_release_post (post )
19+
20+ vals = {k : v for k , v in post .items ()} if post else {}
21+
22+ return request .render ('controllo_accessi_portale.badge_release_view' , {
23+ "errors" : {}, "error_message" : "" , "values" : vals
24+ })
25+
26+ @http .route ('/badge_release/submit' , auth = 'user' , type = 'http' , website = True , methods = ['POST' ], csrf = False )
27+ def badge_release_submit (self , ** kwargs ):
28+ return self ._handle_badge_release_post (kwargs )
29+
30+ def _handle_badge_release_post (self , post ):
31+ vals = {
32+ 'vat' : post ['vat' ], 'ca_ente_name' : post ['ca_ente_name' ], 'fiscalcode' : post ['fiscalcode' ],
33+ 'lastname' : post ['lastname' ], 'name' : post ['name' ], 'freshman' : post ['freshman' ],
34+ 'email' : post ['email' ], 'mobile' : post ['mobile' ], 'ref_domain' : post .get ('ref_domain' ),
35+ }
36+
37+ if post .get ('date_start' ):
38+ vals ['date_start' ] = datetime .datetime .fromisoformat (post ['date_start' ]).astimezone (UTC ).replace (tzinfo = None )
39+ if post .get ('date_end' ):
40+ vals ['date_end' ] = datetime .datetime .fromisoformat (post ['date_end' ]).astimezone (UTC ).replace (tzinfo = None )
41+
42+ for key in ['persona_id' , 'tipo_ente_azienda_id' , 'azienda' , 'ca_work_info_type_id' , 'ca_title_id' , 'ca_tag_id' , 'parent_id' ]:
43+ if post .get (key ) and post [key ] != "" :
44+ clean_key = 'ente_azienda' if key == 'azienda' else key
45+ vals [clean_key ] = int (post [key ])
46+
47+ REQ_FIELDS = ["lastname" , "name" , "fiscalcode" , "tipo_ente_azienda_id" , "ca_ente_name" ,
48+ "ca_work_info_type_id" , "ca_title_id" , "date_start" , "date_end" , "ca_tag_id" ]
49+
50+ is_internal = False
51+ if vals .get ('persona_id' ):
52+ p = request .env ['ca.persona' ].browse (vals ['persona_id' ])
53+ if p .exists () and p .is_internal : is_internal = True
54+
55+ if not is_internal :
56+ REQ_FIELDS .extend (["ref_domain" , "parent_id" ])
57+
58+ errors = {f : 'missing' for f in REQ_FIELDS if not post .get (f )}
59+ if errors :
60+ return request .render ('controllo_accessi_portale.badge_release_view' , {
61+ "errors" : errors , "error_message" : _ ('Some required fields are empty.' ), "values" : post
62+ })
63+
64+ add_doc = not vals .get ("persona_id" )
65+ wiz = request .env ['ca.registra_persona' ].with_context (no_compute_tag_id_number = True ).create (vals )
66+ wiz .action_confirm ()
67+ if add_doc :
68+ return request .redirect (f"/badge_release_docs/{ wiz .persona_id .id } " )
69+ return request .redirect ('/anagrafiche' )
70+
71+ @http .route ('/get/badge_release/init_data' , auth = 'user' , type = 'json' , website = True )
72+ def get_badge_release_init_data (self , ** kwargs ):
73+ user = request .env .user
74+ if not check_access_permission (user ):
75+ raise Forbidden ()
76+
77+ Env = request .env
78+
79+ tags = Env ['ca.tag' ].search_read (
80+ [('in_use' , '=' , False ), ('revoked' , '=' , False )],
81+ fields = ['id' , 'name' , 'display_name' , 'tag_code' , 'temp' , 'ca_proprieta_tag_ids' ]
82+ )
83+
84+ tag_domains = {
85+ 'visitor' : [Env .ref ('inrim_anagrafiche.proprieta_tag_visitatore' ).id , Env .ref ('inrim_anagrafiche.proprieta_tag_servizio' ).id ],
86+ 'internal' : [Env .ref ('inrim_anagrafiche.proprieta_tag_jolly' ).id , Env .ref ('inrim_anagrafiche.proprieta_tag_definitivo' ).id ],
87+ 'temp' : [Env .ref ('inrim_anagrafiche.proprieta_tag_jolly' ).id ]
88+ }
89+
90+ work_infos = Env ['ca.work_info' ].search_read (
91+ [('state' , '=' , 'active' )],
92+ fields = ['ca_persona_id' , 'date_start' , 'date_end' , 'ca_work_info_type_id' , 'ca_title_id' ]
93+ )
94+
95+ ids_hidden = [
96+ Env .ref ('inrim_anagrafiche.tipo_ente_azienda_sede' ).id ,
97+ Env .ref ('inrim_anagrafiche.tipo_ente_azienda_sede_distaccata' ).id
98+ ]
99+
100+ tipo_enti_hidden = Env ['ca.tipo_ente_azienda' ].search_read ([('id' , 'in' , ids_hidden )], ['id' , 'display_name' ])
101+
102+ tipo_enti = Env ['ca.tipo_ente_azienda' ].search_read (
103+ [('id' , 'not in' , ids_hidden )],
104+ ['id' , 'name' , 'display_name' ]
105+ )
106+
107+ return {
108+ 'tags' : tags ,
109+ 'tag_domains' : tag_domains ,
110+ 'work_infos' : work_infos ,
111+ 'titoli' : Env ['ca.titolo_persona' ].search_read ([], ['id' , 'name' , 'display_name' , 'structured' ]),
112+ 'work_info_types' : Env ['ca.work_info_type' ].search_read ([], ['id' , 'name' , 'display_name' ]),
113+ 'enti_aziende' : Env ['ca.ente_azienda' ].search_read ([], ['id' , 'name' , 'display_name' , 'vat' , 'tipo_ente_azienda_id' ]),
114+ 'tipo_enti_hidden_ids' : [t ['id' ] for t in tipo_enti_hidden ],
115+ 'tipo_enti' : tipo_enti ,
116+ 'persona_parent' : Env ['ca.persona' ].search_read ([('is_internal' , '=' , True )], ['id' , 'display_name' , 'present' ])
117+ }
118+
119+ @http .route ('/get/badge_release/ca_persona' , auth = 'user' , type = 'json' , website = True )
120+ def badge_release_ca_persona (self , ** kwargs ):
121+ user = request .env .user
122+ if not check_access_permission (user ):
123+ raise Forbidden ()
124+
125+ fields = [
126+ 'id' , 'display_name' , 'name' , 'lastname' , 'fiscalcode' , 'email' , 'mobile' ,
127+ 'is_internal' , 'freshman' , 'ca_ente_azienda_ids' , 'current_tag' ,
128+ 'present'
129+ ]
130+ return request .env ['ca.persona' ].search_read ([], fields = fields )
0 commit comments