private void Save()
        {
            _locationTypeId = int.Parse(CommonUtils.GetFieldValue(_viewModel.Fields, _idField), CultureInfo.InvariantCulture);

            var nameValue = CommonUtils.GetFieldValue(_viewModel.Fields, _nameField);
            var isEnabledValue = bool.Parse(CommonUtils.GetFieldValue(_viewModel.Fields, _isEnabledField));
            var isExternalValue = bool.Parse(CommonUtils.GetFieldValue(_viewModel.Fields, _isExternalField));
            var siteIndicatorValue = bool.Parse(CommonUtils.GetFieldValue(_viewModel.Fields, _siteIndicatorField));
            var imageUrlValue = CommonUtils.GetFieldValue(_viewModel.Fields, _imageUrlField);

            if (string.IsNullOrEmpty(nameValue))
                throw new Exception("Location Type name is required.");

            if (_locationTypeId == 0)
            {
                var request = new AddOrgUnitTypeRequest
                {
                    Name = nameValue,
                    IsEnabled = isEnabledValue,
                    IsOutsideOfOrganization = isExternalValue,
                    SiteIndicator = siteIndicatorValue,
                    ImageUrl = imageUrlValue
                };

                _locationTypeId = ProcessRequest<AddOrgUnitTypeResponse>(request).Id;
            }
            else
            {
                if (_viewModel.Action == RecordActions.Edited)
                {
                    var updateRequest = new UpdateOrgUnitTypeRequest
                    {
                        Id = _locationTypeId,
                        Name = nameValue,
                        IsEnabled = isEnabledValue,
                        IsOutsideOfOrganization = isExternalValue,
                        SiteIndicator = siteIndicatorValue,
                        ImageUrl = imageUrlValue
                    };

                    ProcessRequest<UpdateOrgUnitTypeResponse>(updateRequest);
                }
            }
        }
예제 #2
0
        public static void Save(LocationAdminDetailView parent, SubEntity orgUnitTypes, int orgUnitId)
        {
            var partiallySaved = false;

            try
            {
                orgUnitTypes.ErrorMessage = string.Empty;

                if (orgUnitTypes.Records.Count(s => s.Fields.Any(f => f.FieldName == _isPrimaryOrgUnitTypeField) && bool.Parse(parent.GetFieldValue(s.Fields, _isPrimaryOrgUnitTypeField))) > 1)
                    throw new BusinessException("Only one Location Type can be set as the primary location");

                //Edits
                foreach (var record in orgUnitTypes.Records.Where(r => r.Action == RecordActions.Edited))
                {
                    var request = new UpdateOrgUnitOrgUnitTypeRequest
                    {
                        Id = int.Parse(parent.GetFieldValue(record.Fields, _idField)),
                        OrgUnitId = orgUnitId,
                        OrgUnitTypeId = int.Parse(parent.GetFieldValue(record.Fields, _orgUnitTypeIdField)),
                        IsPrimaryOrgUnitType = bool.Parse(parent.GetFieldValue(record.Fields, _isPrimaryOrgUnitTypeField))
                    };

                    parent.ProcessRequest<UpdateOrgUnitOrgUnitTypeResponse>(request);
                    partiallySaved = true;
                }

                //Existing Records Added
                foreach (var record in orgUnitTypes.Records.Where(r => r.Action == RecordActions.Added))
                {
                    var request = new AddOrgUnitOrgUnitTypeRequest()
                    {
                        OrgUnitId = orgUnitId,
                        OrgUnitTypeId = int.Parse(parent.GetFieldValue(record.Fields, _orgUnitTypeIdField)),
                        IsPrimaryOrgUnitType = bool.Parse(parent.GetFieldValue(record.Fields, _isPrimaryOrgUnitTypeField)),
                    };

                    parent.ProcessRequest<AddOrgUnitOrgUnitTypeResponse>(request);
                    partiallySaved = true;
                }

                //New Records Created
                foreach (var record in orgUnitTypes.Records.Where(r => r.Action == RecordActions.New))
                {
                    //Add New OrgUnit Type
                    var addTypeRequest = new AddOrgUnitTypeRequest()
                    {
                        Name = parent.GetFieldValue(record.Fields, _nameField),
                        IsEnabled = bool.Parse(parent.GetFieldValue(record.Fields, _isEnabledField)),
                        IsOutsideOfOrganization = bool.Parse(parent.GetFieldValue(record.Fields, _isExternalField)),
                        SiteIndicator = bool.Parse(parent.GetFieldValue(record.Fields, _siteIndicatorField)),
                        ImageUrl = parent.GetFieldValue(record.Fields, _imageUrlField)
                    };

                    var addedTypeId = parent.ProcessRequest<AddOrgUnitTypeResponse>(addTypeRequest).Id;
                    partiallySaved = true;

                    //Add newly created type to OrgUnit
                    var request = new AddOrgUnitOrgUnitTypeRequest()
                    {
                        OrgUnitId = orgUnitId,
                        OrgUnitTypeId = addedTypeId,
                        IsPrimaryOrgUnitType = bool.Parse(parent.GetFieldValue(record.Fields, _isPrimaryOrgUnitTypeField))
                    };

                    parent.ProcessRequest<AddOrgUnitOrgUnitTypeResponse>(request);
                    partiallySaved = true;
                }

                //Deletes
                foreach (var record in orgUnitTypes.Records.Where(r => r.Action == RecordActions.Deleted))
                {
                    var request = new RemoveOrgUnitOrgUnitTypeRequest()
                    {
                        Id = int.Parse(parent.GetFieldValue(record.Fields, _idField))
                    };
                    parent.ProcessRequest<RemoveOrgUnitOrgUnitTypeResponse>(request);
                    partiallySaved = true;
                }
            }
            catch (Exception ex)
            {
                orgUnitTypes.ErrorMessage = ex.Message;

                if (!partiallySaved)
                    throw;
            }

            orgUnitTypes = BuildLocationTypesSubEntity(parent, orgUnitId);
        }