예제 #1
0
        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;
                }
            }
        }