public Empleado_Direcciones CopiarDireccion(Empleado_Direcciones direccion) { Empleado_Direcciones nuevaDireccion = new Empleado_Direcciones(); nuevaDireccion.activo = true; nuevaDireccion.eliminado = false; nuevaDireccion.avenida = direccion.avenida; nuevaDireccion.calle = direccion.calle; nuevaDireccion.colonia_cc_edificio = direccion.colonia_cc_edificio; nuevaDireccion.comentario = direccion.comentario; nuevaDireccion.id_municipio = direccion.id_municipio; nuevaDireccion.id_tipo_direccion = direccion.id_tipo_direccion; nuevaDireccion.id_usuario_creacion = Cache.DiccionarioUsuariosLogueados[User.Identity.Name].usuario.id_usuario; nuevaDireccion.fecha_creacion = DateTime.Now; nuevaDireccion.kilometro = direccion.kilometro; nuevaDireccion.local = direccion.local; nuevaDireccion.no_casa = direccion.no_casa; nuevaDireccion.zona = direccion.zona; nuevaDireccion.direccion = direccion.direccion; return(nuevaDireccion); }
public ActionResult NuevoCodigoEmpleado(Contratacion contrato) { Empleado empleado = db.Empleado.SingleOrDefault(e => e.id_empleado == contrato.id_empleado && !e.eliminado); if (empleado == null) { return(HttpNotFound()); } if (empleado.Contratacion.Where(c => c.activo).Count() > 0) { ContextMessage msg = new ContextMessage(ContextMessage.Info, "No se pudo crear el empleado a partir de la información existente. El empleado seleccionado todavía esta de Alta.."); msg.ReturnUrl = null; TempData[User.Identity.Name] = msg; return(RedirectToAction("Mensaje")); } int id_usuario = Cache.DiccionarioUsuariosLogueados[User.Identity.Name].usuario.id_usuario; using (DbContextTransaction tran = db.Database.BeginTransaction()) { try { Empleado nuevoEmpleado = CopiarEmpleado(empleado); db.Empleado.Add(nuevoEmpleado); db.SaveChanges(); //Copiar Telefonos foreach (var telefono in empleado.Empleado_Telefono.Where(e => e.activo && !e.eliminado)) { Empleado_Telefono nuevoTelefono = new Empleado_Telefono(); nuevoTelefono.telefono = telefono.telefono; nuevoTelefono.extension = telefono.extension; nuevoTelefono.id_tipo_telefono = telefono.id_tipo_telefono; nuevoTelefono.comentario = telefono.comentario; nuevoTelefono.activo = true; nuevoTelefono.eliminado = false; nuevoTelefono.fecha_creacion = DateTime.Now; nuevoTelefono.id_usuario_creacion = id_usuario; nuevoTelefono.id_empleado = nuevoEmpleado.id_empleado; db.Empleado_Telefono.Add(nuevoTelefono); } //Copiar direcciones foreach (var direccion in empleado.Empleado_Direcciones.Where(d => d.activo && !d.eliminado)) { Empleado_Direcciones nuevaDireccion = CopiarDireccion(direccion); nuevaDireccion.id_empleado = nuevoEmpleado.id_empleado; db.Empleado_Direcciones.Add(nuevaDireccion); } //Copiar Archivos foreach (var archivo in empleado.Archivo_Empleado.Where(e => e.activo && !e.eliminado && e.Archivo.id_tipo_archivo == (int)Catalogos.Tipo_Archivo.Foto_Perfil)) { Archivo imagen = new Archivo(); string name = "foto_" + nuevoEmpleado.id_empleado; string extension = ".jpg"; string ruta_vieja = archivo.Archivo.ubicacion; imagen.id_tipo_archivo = (int)Catalogos.Tipo_Archivo.Foto_Perfil; imagen.id_usuario_creacion = id_usuario; imagen.fecha_creacion = DateTime.Now; imagen.activo = true; imagen.eliminado = false; imagen.nombre = name + extension; imagen.ubicacion = "~/Archivos/Foto Perfil/" + name + extension; db.Archivo.Add(imagen); db.SaveChanges(); System.IO.File.Copy(Server.MapPath(ruta_vieja), Server.MapPath(imagen.ubicacion), true); //Relacionar la imagen con el usuario Archivo_Empleado nuevo_archivo_empleado = new Archivo_Empleado(); nuevo_archivo_empleado.id_archivo = imagen.id_archivo; nuevo_archivo_empleado.id_empleado = nuevoEmpleado.id_empleado; nuevo_archivo_empleado.id_usuario_creacion = id_usuario; nuevo_archivo_empleado.fecha_creacion = DateTime.Now; nuevo_archivo_empleado.activo = true; nuevo_archivo_empleado.eliminado = false; db.Archivo_Empleado.Add(nuevo_archivo_empleado); } //Asignar Salario Salario salario = new Salario(); Puesto puesto = db.Puesto.SingleOrDefault(p => p.id_puesto == contrato.id_puesto); salario.bono_decreto = puesto.bono_decreto; salario.bono_extra = puesto.bono_extra; salario.sueldo_base = puesto.sueldo_base; salario.prestaciones = puesto.prestaciones; salario.activo = true; salario.id_empleado = contrato.id_empleado; salario.eliminado = false; salario.fecha_creacion = contrato.fecha_creacion = DateTime.Now; salario.id_usuario_creacion = id_usuario; db.Salario.Add(salario); db.SaveChanges(); //Crear nuevo contrato contrato.id_salario = salario.id_salario; contrato.id_empleado = nuevoEmpleado.id_empleado; contrato.id_ubicacion = contrato.id_ubicacion == 0 ? (int)Catalogos.Ubicacion.Central : contrato.id_ubicacion; contrato.fecha_creacion = DateTime.Now; contrato.id_usuario_creacion = id_usuario; contrato.id_estado_empleado = (int)Catalogos.Estado_Empleado.Alta; contrato.activo = true; contrato.eliminado = false; db.Contratacion.Add(contrato); db.SaveChanges(); //Crear periodo de vacaciones para el nuevo contrato Vacacion_Contrato vacacion_contrato = NuevoVacacion_Contrato(); vacacion_contrato.id_contratacion = contrato.id_contratacion; vacacion_contrato.dias_total = 15; vacacion_contrato.id_empleado = contrato.id_empleado; vacacion_contrato.id_periodo = db.Periodo.Where(p => p.activo && !p.eliminado).FirstOrDefault().id_periodo; db.Vacacion_Contrato.Add(vacacion_contrato); db.SaveChanges(); tran.Commit(); return(RedirectToAction("Details", "Empleado", new { id = nuevoEmpleado.id_empleado })); } catch (Exception ex) { tran.Rollback(); ContextMessage msg = new ContextMessage(ContextMessage.Error, "Ocurrio un error innesperado. " + ex.Message); msg.ReturnUrl = null; TempData[User.Identity.Name] = msg; return(RedirectToAction("Mensaje")); } } }