Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs @ 291:5f1e3d35e113
Patrocinadores: Correcciones en Vistas.
author | juanjose.montesdeocaarbos |
---|---|
date | Thu, 09 Feb 2012 00:12:00 -0300 |
parents | dba5d41bc7bf |
children |
rev | line source |
---|---|
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
1 using System; |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
2 using System.Collections.Generic; |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
3 using System.Linq; |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
4 using AltNetHispano.Agendas.Domain.Repositories; |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
5 |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
6 namespace AltNetHispano.Agendas.Domain.Services |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
7 { |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
8 public class PersonaService |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
9 { |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
10 private readonly IPersonaRepository _personaRepository; |
209
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
11 private readonly IEventoRepository _eventoRepository; |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
12 |
209
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
13 public PersonaService(IPersonaRepository personaRepository, IEventoRepository eventoRepository) |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
14 { |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
15 _personaRepository = personaRepository; |
209
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
16 _eventoRepository = eventoRepository; |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
17 } |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
18 |
115 | 19 public bool CreateIfNotExist(IdentityProviderEnum identityProvider, string username, string nombre) |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
20 { |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
21 var cuenta = _personaRepository.GetCuenta(identityProvider, username); |
143 | 22 if (cuenta == null) |
23 { | |
24 Persona persona = null; | |
25 if (identityProvider == IdentityProviderEnum.Twitter) | |
26 persona = _personaRepository.GetByTwitter(username); | |
27 | |
28 if(persona==null) | |
29 persona = IdentityContext.IsAuthenticated() ? IdentityContext.GetUsuario() : new Persona(nombre); | |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
30 |
143 | 31 persona.AddCuenta(new Cuenta(identityProvider, username)); |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
32 |
143 | 33 if (identityProvider == IdentityProviderEnum.Twitter) |
34 persona.Twitter = username; | |
35 | |
178 | 36 SetDefaultGroups(persona); |
37 | |
143 | 38 _personaRepository.Save(persona); |
39 } | |
40 return true; | |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
41 } |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
42 |
178 | 43 private static void SetDefaultGroups(Persona persona) |
44 { | |
45 #if DEBUG | |
46 var administradores = new[] {"nelopauselli", "alabras", "jjmoa", "jrowies"}; | |
47 #else | |
200
5346c0500594
Pasando a estructura de db fija, ya no se crea automáticamente.
nelopauselli
parents:
183
diff
changeset
|
48 var administradores = new[] {"nelopauselli", "alabras", "jrowies", "jorgegamba"}; |
178 | 49 #endif |
50 if (administradores.Contains(persona.Twitter)) | |
180 | 51 { |
52 persona.Roles.Add(Roles.Usuario); | |
178 | 53 persona.Roles.Add(Roles.Administrador); |
180 | 54 } |
178 | 55 } |
56 | |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
57 public void AddCuenta(IdentityProviderEnum identityProvider, string username) |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
58 { |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
59 var persona = IdentityContext.GetUsuario(); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
60 persona.AddCuenta(new Cuenta(identityProvider, username)); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
61 |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
62 if (identityProvider == IdentityProviderEnum.Twitter) |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
63 persona.Twitter = username; |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
64 } |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
65 |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
66 public void RemoveCuenta(IdentityProviderEnum identityProvider, string username) |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
67 { |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
68 var persona = IdentityContext.GetUsuario(); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
69 var cuenta = persona.Cuentas.FirstOrDefault(c => c.IdentityProvider == identityProvider && c.LogonName == username); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
70 if (cuenta != null) |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
71 persona.RemoveCuenta(cuenta); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
72 } |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
73 |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
74 public IEnumerable<Persona> GetAll() |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
75 { |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
76 return _personaRepository.GetAll(); |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
77 } |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
78 |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
79 public Persona GetById(Guid id) |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
80 { |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
81 return _personaRepository.Get(id); |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
82 } |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
83 |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
209
diff
changeset
|
84 public ResultadoAdd Add(string nombre, string twitter, string mail, string blog, IEnumerable<string> roles) |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
209
diff
changeset
|
85 { |
259
e6c041d8e1bf
Ticket #193.1: Al guardar (nuevo/modificar) una persona, que la cuenta de twitter no comience con @
juanjose.montesdeocaarbos
parents:
219
diff
changeset
|
86 if (twitter.StartsWith("@")) |
e6c041d8e1bf
Ticket #193.1: Al guardar (nuevo/modificar) una persona, que la cuenta de twitter no comience con @
juanjose.montesdeocaarbos
parents:
219
diff
changeset
|
87 return new ResultadoAdd("No debe ingresar el arroba al escribir la cuenta de twitter."); |
e6c041d8e1bf
Ticket #193.1: Al guardar (nuevo/modificar) una persona, que la cuenta de twitter no comience con @
juanjose.montesdeocaarbos
parents:
219
diff
changeset
|
88 |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
209
diff
changeset
|
89 var persona = _personaRepository.GetByNombre(nombre); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
209
diff
changeset
|
90 if (persona!=null) |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
209
diff
changeset
|
91 return new ResultadoAdd("Ya existe una persona con el nombre " + nombre); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
209
diff
changeset
|
92 |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
209
diff
changeset
|
93 persona = _personaRepository.GetByTwitter(twitter); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
209
diff
changeset
|
94 if (persona != null) |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
209
diff
changeset
|
95 return new ResultadoAdd("Ya existe una persona con el twitter " + twitter); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
209
diff
changeset
|
96 |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
209
diff
changeset
|
97 persona = new Persona(nombre) {Twitter = twitter, Mail = mail, Blog = blog}; |
178 | 98 |
99 if (!string.IsNullOrWhiteSpace(twitter)) | |
100 persona.AddCuenta(new Cuenta(IdentityProviderEnum.Twitter, twitter)); | |
101 | |
102 SetDefaultGroups(persona); | |
103 | |
180 | 104 if (roles != null) |
105 { | |
106 persona.Roles.Clear(); | |
107 foreach (var rol in roles) | |
108 { | |
109 persona.Roles.Add(rol); | |
110 } | |
111 } | |
112 | |
178 | 113 _personaRepository.Save(persona); |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
114 |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
209
diff
changeset
|
115 return new ResultadoAdd(true, "Persona Agregada", persona.Id, persona.Nombre); |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
116 } |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
117 |
180 | 118 public Resultado Update(Guid id, string nombre, string twitter, string mail, string blog, IEnumerable<string> roles) |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
119 { |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
120 var persona = _personaRepository.Get(id); |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
121 if (persona == null) |
183
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
180
diff
changeset
|
122 return new Resultado(false, string.Format("No se pudo encontrar la persona cuyo Id sea {0}", id)); |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
123 |
259
e6c041d8e1bf
Ticket #193.1: Al guardar (nuevo/modificar) una persona, que la cuenta de twitter no comience con @
juanjose.montesdeocaarbos
parents:
219
diff
changeset
|
124 if (twitter.StartsWith("@")) |
e6c041d8e1bf
Ticket #193.1: Al guardar (nuevo/modificar) una persona, que la cuenta de twitter no comience con @
juanjose.montesdeocaarbos
parents:
219
diff
changeset
|
125 return new ResultadoAdd("No debe ingresar el arroba al escribir la cuenta de twitter."); |
e6c041d8e1bf
Ticket #193.1: Al guardar (nuevo/modificar) una persona, que la cuenta de twitter no comience con @
juanjose.montesdeocaarbos
parents:
219
diff
changeset
|
126 |
266
dba5d41bc7bf
BUG: Guardar persona con twitter ya existente genera error.
juanjose.montesdeocaarbos
parents:
259
diff
changeset
|
127 persona = _personaRepository.GetByTwitter(twitter); |
dba5d41bc7bf
BUG: Guardar persona con twitter ya existente genera error.
juanjose.montesdeocaarbos
parents:
259
diff
changeset
|
128 if (persona != null && !persona.Id.Equals(id)) |
dba5d41bc7bf
BUG: Guardar persona con twitter ya existente genera error.
juanjose.montesdeocaarbos
parents:
259
diff
changeset
|
129 return new Resultado(false, string.Format("Ya existe una persona con el twitter {0}", twitter)); |
dba5d41bc7bf
BUG: Guardar persona con twitter ya existente genera error.
juanjose.montesdeocaarbos
parents:
259
diff
changeset
|
130 |
dba5d41bc7bf
BUG: Guardar persona con twitter ya existente genera error.
juanjose.montesdeocaarbos
parents:
259
diff
changeset
|
131 persona.Nombre = nombre; |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
132 persona.Twitter = twitter; |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
133 persona.Mail = mail; |
157
f17252543cbf
Agregando la url del blog a los datos de la persona
Nelo@Guinea.neluz.int
parents:
147
diff
changeset
|
134 persona.Blog = blog; |
f17252543cbf
Agregando la url del blog a los datos de la persona
Nelo@Guinea.neluz.int
parents:
147
diff
changeset
|
135 |
f17252543cbf
Agregando la url del blog a los datos de la persona
Nelo@Guinea.neluz.int
parents:
147
diff
changeset
|
136 //TODO: ¿que hacemos con la cuenta de twitter asociada? |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
137 |
180 | 138 if (roles!=null) |
139 { | |
140 persona.Roles.Clear(); | |
141 foreach (var rol in roles) | |
142 { | |
143 persona.Roles.Add(rol); | |
144 } | |
145 } | |
146 | |
183
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
180
diff
changeset
|
147 return new Resultado(true, "Datos actualizados"); |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
148 } |
209
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
149 |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
150 public Resultado Delete(Guid id) |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
151 { |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
152 var persona = _personaRepository.Get(id); |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
153 if (persona == null) |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
154 return new Resultado(false, string.Format("No se pudo encontrar la persona cuyo Id sea {0}", id)); |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
155 |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
156 var existeEnEvento = _eventoRepository.ExistePonente(persona); |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
157 if (existeEnEvento) |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
158 return new Resultado(false, |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
159 string.Format( |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
160 "La persona {0} está asociada a un Evento por lo que es imposible eliminarla.", |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
161 persona.Nombre)); |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
162 |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
163 _personaRepository.Delete(persona); |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
164 return new Resultado(true, ""); |
a36a76bd6ec3
Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents:
200
diff
changeset
|
165 } |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
166 } |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
167 } |