private void RefreshInternal() { IsBusy = true; var filterList = new MobileObservableCollection<IFilterDescriptor>(); filterList.AddRange(Filters); var filterText = (FilterString ?? string.Empty).Trim(); if (!string.IsNullOrEmpty(filterText)) { var quickSearchFilters = new MobileObservableCollection<IFilterDescriptor>(); foreach (var column in Columns) { quickSearchFilters.Add(new FilterDescriptor(column.Property.Name, FilterOperator.Contains, filterText)); } filterList.Add(new FilterDescriptor(LogicalOperators.Or, quickSearchFilters)); } if (ColumnFilter != null) filterList.Add(ColumnFilter); DynamicTypeManager.BeginGetCrossReferenceList( ProcessName, FieldName, OnItemsLoaded, SortDescriptors, string.Empty, PageSize, CurrentPageNumber, FilterDescriptor.GetFilterExpression(filterList)); }
public IHttpActionResult GetSingleCrossRefValues(CrossRefLoadModel requestModel) { if (requestModel == null) { throw new ArgumentNullException("requestModel"); } try { DetailsModelContainer detailModel = ExtractModelFromRequest(requestModel); if (detailModel.Model == null) { return Json(new DetailsSaveResult { Success = false, Message = "Item not found. Was it deleted while you were editing it?" }); } string fullName = string.Join(".", detailModel.Model.GetFullPropertyPath(requestModel.FieldName)); PropertyInfo property = detailModel.Model.GetPropertyByFullName(fullName); IEditableRoot entity = detailModel.Model.GetAncestor(property); var filterList = new MobileObservableCollection<IFilterDescriptor>(); var crossRefFilters = DynamicTypeManager.GetCrossRefFilter(entity, requestModel.FieldName); if (crossRefFilters != null) { filterList.AddRange(crossRefFilters); } var items = DynamicTypeManager.GetCrossReferenceListPage(entity.ProcessName, requestModel.FieldName, entity.Id, null, 1000, filterExpression: FilterDescriptor.GetFilterExpression(filterList)); CrossRefFieldAttribute customAttribute = property.GetCustomAttribute<CrossRefFieldAttribute>(); IList<IdValues> values = new List<IdValues>(); foreach (var item in items) { var id = (int)item.GetType().GetProperty(Constants.IdColumnName).GetValue(item); var value = SafeTypeConverter.Convert<string>(item.GetType().GetProperty(customAttribute.RefFieldName).GetValue(item)); values.Add(new IdValues(id, value)); } return Ok(values); } catch (Exception ex) { Logger.Log(LogSeverity.Error, "ProcessController", ex); throw; } }
public IHttpActionResult GetMultiCrossRefValues(CrossRefLoadModel requestModel) { if (requestModel == null) { throw new ArgumentNullException("requestModel"); } try { DetailsModelContainer detailsModel = ExtractModelFromRequest(requestModel); if (detailsModel.Model == null) { return this.Json(new DetailsSaveResult { Success = false, Message = "Item not found. Was it deleted while you were editing it?" }); } string fullName = string.Join(".", detailsModel.Model.GetFullPropertyPath(requestModel.FieldName)); PropertyInfo property = detailsModel.Model.GetPropertyByFullName(fullName); IEditableRoot model = detailsModel.Model.GetAncestor(property); MobileObservableCollection<IFilterDescriptor> filterList = new MobileObservableCollection<IFilterDescriptor>(); IEnumerable<IFilterDescriptor> crossRefFilters = DynamicTypeManager.GetCrossRefFilter(model, requestModel.FieldName); if (crossRefFilters != null) { filterList.AddRange(crossRefFilters); } //string filterText = string.Empty; // (FilterString ?? string.Empty).Trim(); //if (!string.IsNullOrEmpty(filterText)) //{ // var quickSearchFilters = new MobileObservableCollection<IFilterDescriptor>(); // //foreach (var column in Columns) // //{ // // quickSearchFilters.Add(new FilterDescriptor(column.Property.Name, FilterOperator.Contains, filterText)); // //} // filterList.Add(new FilterDescriptor(LogicalOperators.Or, quickSearchFilters)); //} var items = DynamicTypeManager.GetCrossReferenceList( model.ProcessName, requestModel.FieldName, null, // SortDescriptors, string.Empty, 1000, // PageSize 0, //CurrentPageNumber, FilterDescriptor.GetFilterExpression(filterList) ); CrossRefFieldAttribute mcrAttribute = property.GetCustomAttribute<CrossRefFieldAttribute>(); IList<IdValues> values = new List<IdValues>(); foreach (var l in items) { var id = (int)l.GetType().GetProperty(Constants.IdColumnName).GetValue(l); var value = SafeTypeConverter.Convert<string>(l.GetType().GetProperty(mcrAttribute.RefFieldName).GetValue(l)); values.Add(new IdValues(id, value)); } return this.Ok(values); } catch (Exception ex) { Logger.Log(LogSeverity.Error, "ProcessController", ex); throw; } }
public IHttpActionResult GetCrossReferenceList(string process, int id, string field, int pageIndex, string filterString) { if (string.IsNullOrEmpty(process)) { return BadRequest("Process name is required."); } if (filterString.Contains(CReffFilterTemplate)) { filterString = filterString.Replace(CReffFilterTemplate, ""); } var totalRowCount = 0; int pageNumber = 0; try { var details = DynamicTypeManager.GetEditableRoot<IEditableRoot>(process, id); string fullName = string.Join(".", details.GetFullPropertyPath(field)); var property = details.GetPropertyByFullName(fullName); var entity = details.GetAncestor(property); var filterList = new MobileObservableCollection<IFilterDescriptor>(); var crossRefFilters = DynamicTypeManager.GetCrossRefFilter(entity, field); if (crossRefFilters != null) { filterList.AddRange(crossRefFilters); } var itemList = SearchUtils.GetCrossReferenceList(process, field, id, filterList, pageIndex, filterString); totalRowCount = (int)itemList.GetType().GetProperty("TotalRowCount").GetValue(itemList); pageNumber = (int)itemList.GetType().GetProperty("PageNumber").GetValue(itemList); var result = SingleCrossRefResult.Create(totalRowCount, pageNumber, itemList, property); return Ok(result); } catch (ProcessNotFoundException) { return NotFound(); } catch (Exception ex) { Logger.Log(LogSeverity.Error, LoggerSource, ex); return InternalServerError(); } }
public IHttpActionResult GetMultiCrossRefValues(string process, int id, string field, int pageIndex, bool isSkipFilter, string filterString, Filter filter) { if (string.IsNullOrEmpty(process)) { return BadRequest("Process name is required."); } if (filterString.Contains(CReffFilterTemplate)) { filterString = filterString.Replace(CReffFilterTemplate, ""); } var totalRowCount = 0; int pageNumber = 0; try { var details = DynamicTypeManager.GetEditableRoot<IEditableRoot>(process, id); string fullName = string.Join(".", details.GetFullPropertyPath(field)); PropertyInfo property = details.GetPropertyByFullName(fullName); var model = details.GetAncestor(property); MobileObservableCollection<IFilterDescriptor> filterList = new MobileObservableCollection<IFilterDescriptor>(); //if (!string.IsNullOrWhiteSpace(skipItemList) && skipItemList != "0") //{ // var skipItemFilter = new FilterDescriptor(Constants.IdColumnName, FilterOperator.NotIn, skipItemList.Split('|')); // filterList.Add(skipItemFilter); //} if (filter != null && !string.IsNullOrWhiteSpace(filter.FilterDefinition)) { filterList.Add(FilterDescriptor.FromJSON(filter.FilterDefinition)); } if (!isSkipFilter) { IEnumerable<IFilterDescriptor> crossRefFilters = DynamicTypeManager.GetCrossRefFilter(model, field); if (crossRefFilters != null) { filterList.AddRange(crossRefFilters); } } var itemList = DynamicTypeManager.GetCrossReferenceList(process, field, null, filterString, 10, pageIndex, FilterDescriptor.GetFilterExpression(filterList) ); totalRowCount = (int)itemList.GetType().GetProperty("TotalRowCount").GetValue(itemList); pageNumber = (int)itemList.GetType().GetProperty("PageNumber").GetValue(itemList); var result = MultiCrossRefResult.Create(itemList, property, totalRowCount, pageNumber); return this.Ok(result); } catch (Exception ex) { Logger.Log(LogSeverity.Error, "ProcessController", ex); throw; } }
private ISet<int> GetAllOutOfOfficePersonsThatDelegateTo(int originalPersonId) { var allPersonIds = new HashSet<int>(); var personIds = new HashSet<int> { originalPersonId }; while (personIds.Count > 0) { var deleteApproverFilters = new MobileObservableCollection<IFilterDescriptor>(); deleteApproverFilters.AddRange(personIds.Select(FilterOutOfOfficePersonsWithDelegateApprover)); var filterList = new FilterList { new FilterDescriptor(LogicalOperators.Or, deleteApproverFilters) }; var personList = DynamicTypeManager.GetInfoList<IPersonInfo>(Constants.BasePersonProcessName, string.Empty, 0, int.MaxValue, null, filterList); personIds.Clear(); foreach (var person in personList.Where(person => !allPersonIds.Contains(person.Id))) { personIds.Add(person.Id); allPersonIds.Add(person.Id); } } return allPersonIds; }
/// <summary> /// Gets the approval member result from delegate. /// </summary> /// <param name="person">The person.</param> private void GetApprovalMemberResultFromDelegate(PersonInfo person) { var personIds = GetAllOutOfOfficePersonsThatDelegateTo(person.Id); personIds.Add(person.Id); var filtDescriptors = new MobileObservableCollection<IFilterDescriptor>(); filtDescriptors.AddRange(personIds.Select(id => new FilterDescriptor("OriginalApproverId", FilterOperator.IsEqualTo, id))); var filterList = new FilterList { new FilterDescriptor(LogicalOperators.Or, filtDescriptors) }; var amrList = DynamicTypeManager.GetInfoList<IApprovalMemberResultInfo>( Constants.ApprovalMemberResultProcessName, string.Empty, 0, int.MaxValue, null, filterList); foreach (var amrInfo in amrList) { var amrEdit = DynamicTypeManager.GetEditableRoot<IApprovalMemberResultEdit>(Constants.ApprovalMemberResultProcessName, amrInfo.Id); if (amrEdit == null || amrEdit.Id != amrInfo.Id) continue; amrEdit.Person = person.Id; amrEdit.Save(); } }
/// <summary> /// Gets the actions from delegate. /// </summary> /// <param name="person">The person.</param> /// <param name="sendEmail">If set to <c>true</c> [send email].</param> private void GetActionsFromDelegate(PersonInfo person, bool sendEmail = true) { var personIds = GetAllOutOfOfficePersonsThatDelegateTo(person.Id); personIds.Add(person.Id); var filtDescriptors = new MobileObservableCollection<IFilterDescriptor>(); filtDescriptors.AddRange(personIds.Select(id => new FilterDescriptor("BasePersonId", FilterOperator.IsEqualTo, id))); var filterList = new FilterList { new FilterDescriptor(LogicalOperators.Or, filtDescriptors) }; var actions = DynamicTypeManager.GetInfoList<IActionItemInfo>(Constants.ActionItemsProcessName, string.Empty, 0, int.MaxValue, null, filterList); var actionsChanged = false; foreach (var actionInfo in actions) { var action = DynamicTypeManager.GetEditableRoot<IActionItemEdit>(Constants.ActionItemsProcessName, actionInfo.Id); if (action == null || action.Id != actionInfo.Id) continue; var item = GetSourceItem(action); if (item == null) continue; var actionDefinition = item.ActionManager.ActionDefinitions.FirstOrDefault(ad => ad.Guid.ToString() == action.ActionGuid); if (actionDefinition == null) continue; action.PersonId = person.Id; action.IsActionNew = true; action.Save(); actionsChanged = true; if (!sendEmail || !actionDefinition.SendEmail) continue; if (!string.IsNullOrWhiteSpace(person.Email)) { actionDefinition.SendMessage(item, person); } } if (actionsChanged && sendEmail) { CommunicationService.NotifyActionsChanged(person.Id); } }