public DocumentBrowserViewModel(Type modelType, Object entityModel) { this.ModelType = modelType; this.EntityModel = entityModel ; this.DataService = ServiceLocator.Current.GetInstance<IDataService>(); this.Codes = new ObservableCollection<DocumentCodeViewModel>(); this.EntityTableInfo = this.DataService.GetEntityTableInfo(this.ModelType); PropertyInfo propModelId = modelType.GetProperty("Id"); Int64 modelId = (Int64)propModelId.GetValue(entityModel); String entityTableName = EntityTableInfo.TableName.ToLower(); String camelSchemaName = EntityTableInfo.SchemaInfo.SchemaName.Substring(0, 1).ToUpper() + EntityTableInfo.SchemaInfo.SchemaName.Substring(1).ToLower(); DbSet setCodeDoc = this.DataService.GetDbSet(camelSchemaName + "CodeDoc"); DbSet<PrfParam> parameters = this.DataService.GetDbSet<PrfParam>(); PrfParam paramPathDoc = (from p in parameters where p.PrfSchema.Name.Equals(camelSchemaName.ToUpper()) && p.Code.Equals("DIRECTORY_DOC") select p).FirstOrDefault(); PropertyInfo propCode = setCodeDoc.ElementType.GetProperty("Code"); PropertyInfo propPath = setCodeDoc.ElementType.GetProperty("Path"); PropertyInfo propLibelle = setCodeDoc.ElementType.GetProperty("Libelle"); PropertyInfo propId = setCodeDoc.ElementType.GetProperty("Id"); foreach (Object item in setCodeDoc) { DocumentCodeViewModel vm = new DocumentCodeViewModel(paramPathDoc.Valeur); vm.Code = propCode.GetValue(item).ToString(); vm.Libelle = propLibelle.GetValue(item).ToString(); vm.Path = propPath.GetValue(item).ToString(); vm.Id = (Int64)propId.GetValue(item); if (!Directory.Exists(vm.AbsolutePath)) {Directory.CreateDirectory(vm.AbsolutePath);} this.Codes.Add(vm); } DbSet setCls = this.DataService.GetDbSet(camelSchemaName + "Cls"); ParameterExpression expressionBase = System.Linq.Expressions.Expression.Parameter(setCls.ElementType, "item"); List<Expression> expressions = new List<Expression>(); expressions.Add(Expression.Equal(Expression.Property(expressionBase, "TableName"), Expression.Constant(EntityTableInfo.TableName))); if (this.EntityModel == null) { expressions.Add(Expression.Equal(Expression.Property(expressionBase, "RowId"), Expression.Constant(null))); } else { expressions.Add(Expression.Equal(Expression.Property(expressionBase, "RowId"), Expression.Constant(modelId,typeof(Nullable<Int64>)))); } IQueryable queryable = setCls.AsQueryable(); Expression ex = Expression.And(expressions[0], expressions[1]); System.Linq.Expressions.Expression whereCallExpression = System.Linq.Expressions.Expression.Call( typeof(Queryable), "Where", new Type[] { queryable.ElementType }, queryable.Expression, System.Linq.Expressions.Expression.Lambda(ex, expressionBase)); queryable = queryable.Provider.CreateQuery(whereCallExpression); bool hasCls = false; PropertyInfo propClsId = setCls.ElementType.GetProperty("Id"); foreach (Object item in queryable) { this.ClsId = (Int64)propClsId.GetValue(item); hasCls = true; break; } if (!hasCls) { Object cls = Activator.CreateInstance(setCls.ElementType); PropertyInfo propClsTableName = setCls.ElementType.GetProperty("TableName"); PropertyInfo propRowId = setCls.ElementType.GetProperty("RowId"); propClsTableName.SetValue(cls, EntityTableInfo.TableName); if (entityModel != null) { propRowId.SetValue(cls, modelId); } else { propRowId.SetValue(cls, null); } setCls.Add(cls); this.DataService.DataContext.SaveChanges(); this.ClsId = (Int64)propClsId.GetValue(cls); } Console.WriteLine("Identifiant vclasseur " + this.ClsId); foreach (DocumentCodeViewModel codeVm in this.Codes) { this.LoadDocument(codeVm); } if (this.Codes.Count > 0) { this.SelectedCode = this.Codes.First(); } this.DropCommand = new DelegateCommand<System.Windows.DragEventArgs>(DropExecute); this.RemoveDocumentCommand = new DelegateCommand<DocumentViewModel>(RemoveDocumentExecute); this.SetDefaultDocumentCommand = new DelegateCommand<DocumentViewModel>(SetDefaultDocumentExecute); this.OpenDocumentCommand = new DelegateCommand<Object>(OpenDocumentExecute); }
private void LoadDocument(DocumentCodeViewModel codeVm) { codeVm.Documents.Clear(); String camelSchemaName = EntityTableInfo.SchemaInfo.SchemaName.Substring(0, 1).ToUpper() + EntityTableInfo.SchemaInfo.SchemaName.Substring(1).ToLower(); DbSet setDocCls = this.DataService.GetDbSet(camelSchemaName + "DocCls"); ParameterExpression expressionBase = System.Linq.Expressions.Expression.Parameter(setDocCls.ElementType, "item"); Expression exp = Expression.And( Expression.Equal(Expression.Property(expressionBase, "InfClsId"), Expression.Constant(this.ClsId)), Expression.Equal(Expression.Property(Expression.Property(expressionBase, "InfDoc"), "InfCodeDocId"), Expression.Constant(codeVm.Id)) ); IQueryable queryable = setDocCls.AsQueryable(); System.Linq.Expressions.Expression whereCallExpression = System.Linq.Expressions.Expression.Call( typeof(Queryable), "Where", new Type[] { queryable.ElementType }, queryable.Expression, System.Linq.Expressions.Expression.Lambda(exp, expressionBase)); queryable = queryable.Provider.CreateQuery(whereCallExpression); PropertyInfo propDefaut = setDocCls.ElementType.GetProperty("Defaut"); PropertyInfo propDoc = setDocCls.ElementType.GetProperty("InfDoc"); PropertyInfo propDocId = propDoc.PropertyType.GetProperty("Id"); PropertyInfo propDocFileName = propDoc.PropertyType.GetProperty("Filename"); PropertyInfo propDocLibelle = propDoc.PropertyType.GetProperty("Libelle"); foreach (Object item in queryable) { Object objDoc = propDoc.GetValue(item); DocumentViewModel documentViewModel = new DocumentViewModel(); Boolean isDefault =(Boolean ) propDefaut.GetValue(item); String fileName = propDocFileName.GetValue (objDoc).ToString (); string libelle = propDocLibelle.GetValue (objDoc ).ToString (); String path = Path.Combine(codeVm.AbsolutePath, fileName); documentViewModel.Code = codeVm; documentViewModel.IsDefault = isDefault; documentViewModel.AbsoluteFileName = path; documentViewModel.Id = (Int64)propDocId.GetValue(objDoc); documentViewModel.Libelle = libelle; codeVm.Documents.Add(documentViewModel); } }