Example #1
0
        public IHttpActionResult SaveDatasetInstanceSubValues(DatasetInstanceSubValuesSaveModel model)
        {
            if (model.Values.All(v => v.Value == null) && model.SubValueContext == default(Guid))
            {
                // Nothing to do
                return(Ok <string>("{ result: \"Ok\" }"));
            }

            var errors = new Dictionary <string, string>();

            var datasetInstance = _unitOfWork.Repository <DatasetInstance>()
                                  .Queryable()
                                  .Include(i => i.Dataset)
                                  .Include(i => i.DatasetInstanceValues.Select(i2 => i2.DatasetInstanceSubValues))
                                  .SingleOrDefault(di => di.Id == model.DatasetInstanceId);
            var datasetElement = _unitOfWork.Repository <DatasetElement>().Queryable().Single(u => u.Id == model.DatasetElementId);

            if (datasetInstance == null)
            {
                return(NotFound());
            }

            var datasetElementSubIds = model.Values.Select(v => v.DatasetElementSubId).ToArray();

            var datasetElementSubs = _unitOfWork.Repository <DatasetElementSub>()
                                     .Queryable()
                                     .Where(des => datasetElementSubIds.Contains(des.Id))
                                     .ToList();

            var context = model.SubValueContext;
            DatasetInstanceSubValue datasetInstanceSubValue = null;
            int fieldValueId = 0;

            foreach (var datasetElementSub in datasetElementSubs)
            {
                var instanceSubValueModel = model.Values.SingleOrDefault(v => v.DatasetElementSubId == datasetElementSub.Id);

                if (instanceSubValueModel != null)
                {
                    switch ((FieldTypes)datasetElementSub.Field.FieldType.Id)
                    {
                    case FieldTypes.DropDownList:
                    case FieldTypes.Listbox:
                        if (int.TryParse(instanceSubValueModel.Value.ToString(), out fieldValueId))
                        {
                            var instanceSubValue = datasetElementSub.Field.FieldValues.SingleOrDefault(fv => fv.Id == fieldValueId);

                            if (instanceSubValue != null)
                            {
                                try
                                {
                                    datasetInstanceSubValue = datasetInstance.SetInstanceSubValue(datasetElementSub, instanceSubValue.Value, context);
                                }
                                catch (DatasetFieldSetException ex)
                                {
                                    errors.Add(ex.Key, ex.Message);
                                    continue;
                                }
                            }
                            else
                            {
                                if (datasetElementSub.Field.Mandatory)
                                {
                                    errors.Add(datasetElementSub.Id.ToString(), string.Format("{0} is required.", datasetElementSub.ElementName));
                                    continue;
                                }
                            }
                        }
                        else
                        {
                            if (datasetElementSub.Field.Mandatory)
                            {
                                errors.Add(datasetElementSub.Id.ToString(), string.Format("{0} is required.", datasetElementSub.ElementName));
                                continue;
                            }
                        }
                        break;

                    case FieldTypes.YesNo:
                    default:
                        try
                        {
                            datasetInstanceSubValue = datasetInstance.SetInstanceSubValue(datasetElementSub, instanceSubValueModel.Value.ToString(), context);
                        }
                        catch (DatasetFieldSetException ex)
                        {
                            errors.Add(ex.Key, ex.Message);
                            continue;
                        }
                        break;
                    }

                    if (datasetInstanceSubValue != null)
                    {
                        context = datasetInstanceSubValue.ContextValue;
                    }
                }
            }

            if (errors.Any())
            {
                return(new ValidationErrorsResult(errors.Select(e => new ValidationError(e.Key.ToString(), e.Value)).ToArray()));
            }

            _unitOfWork.Repository <DatasetInstance>().Update(datasetInstance);
            _unitOfWork.Complete();

            // Prepare response
            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("<table class='table table-bordered table-striped table-responsive' style='width: 100 %;' id='{0}'>", model.DatasetElementId.ToString());
            sb.Append("<tr>");
            // Populate tablet headers
            foreach (DatasetElementSub elementSub in datasetElementSubs
                     .Where(es1 => es1.System == false)
                     .Take(6)
                     .OrderBy(es2 => es2.FieldOrder))
            {
                sb.AppendFormat("<th>{0}</th>", elementSub.ElementName);
            }
            sb.Append("<th></th>");
            sb.Append("</tr>");
            // Now populate data
            var instanceSubValueGroups = _unitOfWork.Repository <DatasetInstanceValue>().Queryable()
                                         .Single(div => div.DatasetInstance.Id == datasetInstance.Id && div.DatasetElement.Id == model.DatasetElementId)
                                         .DatasetInstanceSubValues.GroupBy(g => g.ContextValue)
                                         .Select(disv => new DatasetInstanceSubValueGroupingModel
            {
                Context = disv.Key,
                Values  = disv.Select(v => new DatasetInstanceSubValueModel
                {
                    DatasetElementSubId   = v.DatasetElementSub.Id,
                    InstanceSubValueId    = v.Id,
                    InstanceValue         = v.InstanceValue,
                    InstanceValueType     = (FieldTypes)v.DatasetElementSub.Field.FieldType.Id,
                    InstanceValueRequired = v.DatasetElementSub.Field.Mandatory
                }).ToArray()
            }).ToArray();

            foreach (DatasetInstanceSubValueGroupingModel group in instanceSubValueGroups)
            {
                sb.Append("<tr>");
                foreach (DatasetElementSub elementSub in datasetElementSubs
                         .Where(es1 => es1.System == false)
                         .Take(6)
                         .OrderBy(es2 => es2.FieldOrder))
                {
                    var value = group.Values.SingleOrDefault(gv => gv.DatasetElementSubId == elementSub.Id);
                    sb.AppendFormat("<td>{0}</td>", value != null ? value.InstanceValue : "");
                }
                // Action button
                sb.Append("<td><div class='btn-group'><button data-toggle='dropdown' class='btn btn-default btn-sm dropdown-toggle'>Action<span class='caret'></span></button><ul class='dropdown-menu pull-right'>");
                sb.AppendFormat("<li><a data-toggle='modal' data-target='#editDatasetElementSubModal' data-id='{0}' data-context='{1}' data-datasetinstance='{2}' data-original-title='Edit {3} item'> Edit {3} item </a></li>", model.DatasetElementId, group.Context.ToString(), model.DatasetInstanceId, datasetElement.ElementName);
                sb.AppendFormat("<li><a data-toggle='modal' data-target='#deleteDatasetElementSubModal' data-id='{0}' data-context='{1}' data-datasetinstance='{2}' data-original-title='Delete {3} item'> Delete {3} item </a></li>", model.DatasetElementId, group.Context.ToString(), model.DatasetInstanceId, datasetElement.ElementName);
                sb.Append("</ul></div></td>");

                sb.Append("</tr>");
            }
            sb.Append("</table>");

            return(Ok <string>(sb.ToString()));
        }
Example #2
0
        public IHttpActionResult SaveDatasetInstanceSubValues(DatasetInstanceSubValuesSaveModel model)
        {
            if (model.Values.All(v => v.Value == null) && model.SubValueContext == default(Guid))
            {
                // Nothing to do
                return(Ok <string>("{ result: \"Ok\" }"));
            }

            var errors = new Dictionary <string, string>();

            var datasetInstance = unitOfWork.Repository <DatasetInstance>()
                                  .Queryable()
                                  .Include(i => i.Dataset)
                                  .Include(i => i.DatasetInstanceValues.Select(i2 => i2.DatasetInstanceSubValues))
                                  .SingleOrDefault(di => di.Id == model.DatasetInstanceId);

            if (datasetInstance == null)
            {
                return(NotFound());
            }

            var datasetElementSubIds = model.Values.Select(v => v.DatasetElementSubId).ToArray();

            var datasetElementSubs = unitOfWork.Repository <DatasetElementSub>()
                                     .Queryable()
                                     .Where(des => datasetElementSubIds.Contains(des.Id))
                                     .ToList();

            var context = model.SubValueContext;
            DatasetInstanceSubValue datasetInstanceSubValue = null;
            int fieldValueId = 0;

            foreach (var datasetElementSub in datasetElementSubs)
            {
                var instanceSubValueModel = model.Values.SingleOrDefault(v => v.DatasetElementSubId == datasetElementSub.Id);

                if (instanceSubValueModel != null)
                {
                    switch ((FieldTypes)datasetElementSub.Field.FieldType.Id)
                    {
                    case FieldTypes.DropDownList:
                    case FieldTypes.Listbox:
                        if (int.TryParse(instanceSubValueModel.Value.ToString(), out fieldValueId))
                        {
                            var instanceSubValue = datasetElementSub.Field.FieldValues.SingleOrDefault(fv => fv.Id == fieldValueId);

                            if (instanceSubValue != null)
                            {
                                try
                                {
                                    datasetInstanceSubValue = datasetInstance.SetInstanceSubValue(datasetElementSub, instanceSubValue.Value, context);
                                }
                                catch (DatasetFieldSetException ex)
                                {
                                    errors.Add(ex.Key, ex.Message);
                                    continue;
                                }
                            }
                            else
                            {
                                if (datasetElementSub.Field.Mandatory)
                                {
                                    errors.Add(datasetElementSub.Id.ToString(), string.Format("{0} is required.", datasetElementSub.ElementName));
                                    continue;
                                }
                            }
                        }
                        else
                        {
                            if (datasetElementSub.Field.Mandatory)
                            {
                                errors.Add(datasetElementSub.Id.ToString(), string.Format("{0} is required.", datasetElementSub.ElementName));
                                continue;
                            }
                        }
                        break;

                    case FieldTypes.YesNo:
                    default:
                        try
                        {
                            datasetInstanceSubValue = datasetInstance.SetInstanceSubValue(datasetElementSub, instanceSubValueModel.Value.ToString(), context);
                        }
                        catch (DatasetFieldSetException ex)
                        {
                            errors.Add(ex.Key, ex.Message);
                            continue;
                        }
                        break;
                    }

                    if (datasetInstanceSubValue != null)
                    {
                        context = datasetInstanceSubValue.ContextValue;
                    }
                }
            }

            if (errors.Any())
            {
                return(new ValidationErrorsResult(errors.Select(e => new ValidationError(e.Key.ToString(), e.Value)).ToArray()));
            }

            unitOfWork.Repository <DatasetInstance>().Update(datasetInstance);
            unitOfWork.Complete();

            return(Ok <string>("{ result: \"Ok\" }"));
        }