11from typing import Annotated
22
33from odoo import api , models
4+ from odoo .fields import Command
45
56from odoo .addons .base .models .res_users import Users as ResUsers
67from odoo .addons .fastapi .dependencies import (
1011
1112from fastapi import APIRouter , Depends
1213
13- from ..schemas .schemas import UserSc , UserScUpdate
14+ from ..schemas .schemas import UserSc , UserScDel , UserScUpdate
1415
1516# create a router
1617user_router = APIRouter (tags = ["user" ])
1718
1819
19- @user_router .post ("/user" )
20+ @user_router .post ("/user/create" )
21+ def create_user_data (
22+ data : list [UserSc ],
23+ env : Annotated [api .Environment , Depends (odoo_env )],
24+ partner : Annotated [api .Environment , Depends (authenticated_partner_env )],
25+ ) -> dict :
26+ """
27+ create user personal data of authenticated user
28+ """
29+
30+ result = {}
31+ for d in data :
32+ user = env ["res.users" ].search (
33+ ["|" , ("login" , "=" , d .login ), ("login" , "=" , d .email )]
34+ )
35+ if user :
36+ result [f"{ user .name } " ] = "No_modif"
37+ else :
38+ user = env ["api.user.router" ].create_user (d )
39+ result [f"{ user .name } " ] = "New ok"
40+
41+ return result
42+
43+
44+ @user_router .post ("/user/update" )
2045def update_user_data (
21- data : UserSc ,
46+ data : UserScUpdate ,
2247 env : Annotated [api .Environment , Depends (odoo_env )],
2348 partner : Annotated [api .Environment , Depends (authenticated_partner_env )],
24- # user: Annotated[ResUsers, Depends(odoo_env)],
25- ) -> UserSc :
49+ ):
2650 """
2751 update user personal data of authenticated user
2852 """
29- user = env ["res.users" ].search (
30- [("name" , "=" , data .name ), ("email" , "=" , data .email )]
53+ # UserScUpdate.to_user_vals(data)
54+ # helper = env["api.user.router"].new({"user": user})
55+ updated_user = env ["api.user.router" ]._update_user (data )
56+ if updated_user :
57+ return "Update OK"
58+ else :
59+ return "No update, no user found"
60+ #
61+
62+
63+ @user_router .post ("/user/archive" )
64+ def archive_user_data (
65+ data : UserScDel ,
66+ env : Annotated [api .Environment , Depends (odoo_env )],
67+ partner : Annotated [api .Environment , Depends (authenticated_partner_env )],
68+ ):
69+ """ """
70+ user_to_del = env ["res.users" ].search (
71+ [
72+ ("login" , "=" , data .login ),
73+ ]
3174 )
32- if user :
33- return UserSc .from_res_user (user )
75+ if user_to_del :
76+ user_to_del .active = False
77+ return "Archived user ok"
3478 else :
35- vals = {
36- "name" : data .name ,
37- "login" : data .email ,
38- "phone" : data .phone ,
39- "mobile" : data .mobile ,
40- }
41- user = env ["res.users" ].create (vals )
42- return UserSc .from_res_user (user )
43- # helper = env["api.user.router"].new()
44- # user = helper.create(data)
45- # return UserSc.from_res_user(user)
46-
47-
48- # def update_user_data(
49- # data: UserScUpdate,
50- # env: Annotated[api.Environment, Depends(odoo_env)],
51- # # env: Annotated[api.Environment, Depends(authenticated_partner_env)],
52- # # user: Annotated[ResUsers, Depends(odoo_env)],
53- # ) -> ResUsers:
54- # """
55- # update user personal data of authenticated user
56- # """
57- # UserScUpdate.to_user_vals(data)
58- # helper = env["api.user.router"].new({"user": user})
59- # updated_user = helper._update_user(data)
60- # return UserSc.from_res_user(updated_user)
79+ return "Error"
6180
6281
6382class ApiUserRouter (models .AbstractModel ):
@@ -67,68 +86,38 @@ class ApiUserRouter(models.AbstractModel):
6786 # user = fields.Many2one(comodel_name="res.users")
6887
6988 def _update_user (self , data : UserScUpdate ) -> ResUsers :
70- self .ensure_one ( )
89+ user = self .env [ "res.users" ]. search ([( "login" , "=" , data . login )] )
7190 values = self ._get_user_values (data )
72- user = self .user
7391 user .write (values )
7492 # self._handle_shopinvader_customer_opt_in(data)
7593 return user
7694
77- def _create_user (self , data : UserSc ) -> ResUsers :
78- self .ensure_one ()
79- user = self .env ["res.users" ].search (
80- [("name" , "=" , data .name ), ("email" , "=" , data .email )]
81- )
82- if user :
83- return user
84- else :
85- vals = {
86- "name" : data .name ,
87- "email" : data .email ,
88- "phone" : data .phone ,
89- "mobile" : data .mobile ,
90- }
91- user = self .env ["res.users" ].create (vals )
92- return user
93-
94- # def _get_user_values(self, data: CustomerUpdate) -> dict:
95- # values = data.to_user_vals()
96- # lang_id = data.lang_id
97- # if bool(lang_id):
98- # values["lang"] = self.env["res.lang"].browse(lang_id).code
99- # return values
100-
101-
102- # @user_router.get("/users", response_model=list[UserInfo])
103- # def get_users(env: Annotated[Environment, Depends(odoo_env)]) -> list[UserInfo]:
104- # return [
105- # UserInfo(name=user.name, email=user.email or "")
106- # for user in env["res.users"].search([])
107- # ]
108-
109-
110- # @customer_router.get("/customer")
111- # def get_customer_data(
112- # partner: Annotated[ResPartner, Depends(authenticated_partner)],
113- # ) -> Customer:
114- # """
115- # Get customer personal data of authenticated user
116- # """
117- # return Customer.from_res_partner(partner)
118-
119-
120- # @customer_router.post(
121- # "/customer",
122- # )
123- # def update_customer_data(
124- # data: CustomerUpdate,
125- # env: Annotated[api.Environment, Depends(authenticated_partner_env)],
126- # partner: Annotated[ResPartner, Depends(authenticated_partner)],
127- # ) -> Customer:
128- # """
129- # update customer personal data of authenticated user
130- # """
131- # CustomerUpdate.to_res_partner_vals(data)
132- # helper = env["shopinvader_api_customer.router.helper"].new({"partner": partner})
133- # updated_partner = helper._update_shopinvader_customer(data)
134- # return Customer.from_res_partner(updated_partner)
95+ def create_user (self , data : UserSc ):
96+ vals = {
97+ "name" : data .name ,
98+ "login" : data .login ,
99+ "email" : data .email ,
100+ "phone" : data .phone ,
101+ "mobile" : data .mobile ,
102+ }
103+ company_id = self .env ["res.company" ].search ([("name" , "=" , data .company )])
104+ vals ["company_id" ] = company_id .id
105+ if hasattr (self .env ["res.users" ], "role_ids" ):
106+ roles = self .env ["res.users.role" ].search ([("name" , "in" , data .role )])
107+ vals ["role_line_ids" ] = [
108+ Command .create ({"role_id" : rol_id }) for rol_id in roles .ids
109+ ]
110+ user = self .env ["res.users" ].create (vals )
111+ user = self ._post_process_user_creation (user , data .misc )
112+ return user
113+
114+ def _post_process_user_creation (self , user , misc ):
115+ """inherit it to adapt to your needs"""
116+ if misc :
117+ user = user .write (misc )
118+ return user
119+
120+ def _get_user_values (self , data : UserScUpdate ):
121+ """inherit it to adapt to your needs"""
122+ values = data .misc
123+ return values
0 commit comments