Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
        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;
            }
        }
Ejemplo n.º 4
0
        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();
            }
        }
Ejemplo n.º 5
0
        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;
            }
        }
Ejemplo n.º 6
0
        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;
        }
Ejemplo n.º 7
0
        /// <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();
            }
        }
Ejemplo n.º 8
0
        /// <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);
            }
        }