예제 #1
0
        private async Task <DtoPersona> GuardarPersonaAsync(Entidades.Persona personaAGuardar)
        {
            await ValidarDatosObligatoriosPersona(personaAGuardar);

            using (var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                Entidades.Persona persona = new Entidades.Persona();

                if (personaAGuardar.Id == 0)
                {
                    persona = await PersonaRepositorio.InsertarAsync(personaAGuardar);
                }
                else
                {
                    persona = await ObtenerPersonaPrivadoAsync(personaAGuardar.Id);

                    persona.Apellido        = personaAGuardar.Apellido;
                    persona.FechaNacimiento = personaAGuardar.FechaNacimiento;
                    persona.IdPais          = personaAGuardar.IdPais;
                    persona.IdSexo          = personaAGuardar.IdSexo;
                    persona.IdTipoDocumento = personaAGuardar.IdTipoDocumento;
                    persona.Nombre          = personaAGuardar.Nombre;
                    persona.NumeroDocumento = personaAGuardar.NumeroDocumento;

                    foreach (PersonaContacto contacto in personaAGuardar.PersonaContacto)
                    {
                        string          valorContacto   = contacto.Valor.Trim();
                        PersonaContacto personaContacto = await PersonaContactoRepositorio.ObtenerUnoAsync(c => c.Valor == valorContacto);

                        if (personaContacto == null)
                        {
                            await PersonaContactoRepositorio.InsertarAsync(new PersonaContacto { IdPersona = persona.Id, Valor = valorContacto });
                        }
                        else
                        {
                            personaContacto.Valor = valorContacto;
                            await PersonaContactoRepositorio.ActualizarAsync(personaContacto);
                        }
                    }

                    for (int i = 0; i < persona.PersonaContacto.Count; i++)
                    {
                        if (!personaAGuardar.PersonaContacto.Exists(p => p.Valor.Trim() == persona.PersonaContacto[i].Valor))
                        {
                            await PersonaContactoRepositorio.EliminarAsync(persona.PersonaContacto[i]);
                        }
                    }

                    await PersonaRepositorio.ActualizarAsync(persona);
                }

                DtoPersona dtoPersona = await ObtenerPersonaAsync(persona.Id);

                transaction.Complete();

                return(dtoPersona);
            }
        }