protected override void OnSave() { using (var transaction = SmartTransaction.BeginTransaction()) { try { var actualizarSub = EditObject.Empresa != null && EditObject.Empresa.Id != cbEmpresa.Selected; EditObject.Empresa = cbEmpresa.Selected > 0 ? DAOFactory.EmpresaDAO.FindById(cbEmpresa.Selected) : null; EditObject.Linea = cbLinea.Selected > 0 ? DAOFactory.LineaDAO.FindById(cbLinea.Selected) : null; EditObject.Dispositivo = cbDispositivo.Selected > 0 ? DAOFactory.DispositivoDAO.FindById(cbDispositivo.Selected) : null; EditObject.TipoEntidad = cbTipoEntidad.Selected > 0 ? DAOFactory.TipoEntidadDAO.FindById(cbTipoEntidad.Selected) : null; EditObject.Descripcion = txtDescripcion.Text; EditObject.Codigo = txtCodigo.Text; if (chkExistente.Checked) { EditObject.ReferenciaGeografica = SelectGeoRef1.Selected > 0 ? DAOFactory.ReferenciaGeograficaDAO.FindById(SelectGeoRef1.Selected) : null; } else { var geoRef = EditObject.ReferenciaGeografica ?? EditEntityGeoRef1.GetNewGeoRefference(); geoRef.Empresa = EditObject.Empresa; geoRef.Linea = EditObject.Linea; geoRef.TipoReferenciaGeografica = DAOFactory.TipoReferenciaGeograficaDAO.FindById(EditEntityGeoRef1.TipoReferenciaGeograficaId); geoRef.Icono = DAOFactory.IconoDAO.FindById(EditEntityGeoRef1.IconId); geoRef.Descripcion = EditObject.Descripcion; geoRef.Codigo = EditObject.Codigo; DAOFactory.ReferenciaGeograficaDAO.SingleSaveOrUpdate(geoRef); STrace.Trace("QtreeReset", "EntidadAlta"); EditObject.ReferenciaGeografica = geoRef; } if (flImagen.HasFile) { if (!Directory.Exists(Config.Directory.AttachDir)) { Directory.CreateDirectory(Config.Directory.AttachDir); } var filename = GetFileName(flImagen.FileName); var path = Server.MapPath(Config.Directory.AttachDir) + filename; flImagen.SaveAs(path); EditObject.Url = filename; } foreach (var valor in ctrlDetalles.GetValores()) { var detalle = DAOFactory.DetalleDAO.FindByIdAndTipoEntidad(valor.Key, cbTipoEntidad.Selected); if (detalle != null) // EXISTE ESTE DETALLE PARA ESTE TIPO DE ENTIDAD ? { var detalleValor = EditObject.GetDetalle(detalle.Id); if (detalleValor != null) // EXISTE UN DETALLE VALOR PARA LA ENTIDAD ? { detalleValor.ValorDt = valor.Value.ValorDt; detalleValor.ValorNum = valor.Value.ValorNum; detalleValor.ValorStr = valor.Value.ValorStr; } else { detalleValor = valor.Value; detalleValor.Entidad = EditObject; EditObject.Detalles.Add(detalleValor); } if (detalle.Obligatorio) { switch (detalle.Tipo) { case 1: if (detalle.Representacion == 2) { if (detalleValor.ValorNum == 0) { ThrowError("MUST_ENTER_VALUE", detalle.Nombre); } } else if (detalleValor.ValorStr.Trim().Equals(string.Empty)) { ThrowError("MUST_ENTER_VALUE", detalle.Nombre); } break; case 2: if (detalleValor.ValorNum == 0) { ThrowError("MUST_ENTER_VALUE", detalle.Nombre); } break; case 3: if (detalleValor.ValorDt == null || detalleValor.ValorDt == DateTime.MinValue) { ThrowError("MUST_ENTER_VALUE", detalle.Nombre); } break; } } } } if (actualizarSub) { DAOFactory.EntidadDAO.SaveAndUpdateSubEntidades(EditObject); } else { DAOFactory.EntidadDAO.SaveOrUpdate(EditObject); } transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); throw ex; } } }