private void Save(ConvertServiceRequest request)
        {
            var originalImageUrl = _viewModel.ImageUrl;

            _orgUnitId = int.Parse(GetFieldValue(_viewModel.Fields, _idField), CultureInfo.InvariantCulture);

            if (_orgUnitId == 0)
            {
                // Create main org unit record
                var addRequest = new AddOrgUnitRequest();
                PopulateRequestFieldValues(addRequest);

                _orgUnitId = ProcessRequest<AddOrgUnitResponse>(addRequest).Id;

                // Associate new org unit to tree root
                var addAssocRequest = new AddOrgUnitAssociationRequest
                {
                    PrimaryId = -1,
                    SecondaryId = _orgUnitId
                };

                ProcessRequest<AddOrgUnitAssociationResponse>(addAssocRequest);

                // Refresh model
                var detailResponse = QueryData(request);

                _viewModel.PageHeader = "Location - " + detailResponse.Location.Name;
                _viewModel.SubHeader = "Edit Location Information";
                _viewModel.SubEntities = BuildSubEntities(detailResponse.Location);
                _viewModel.Fields = BuildFields(detailResponse.Location, false);
            }
            else
            {
                //Main Location Record

                var updateRequest = new UpdateOrgUnitRequest { Id = _orgUnitId };
                PopulateRequestFieldValues(updateRequest);

                ProcessRequest<UpdateOrgUnitResponse>(updateRequest);

                var detailResponse = QueryData(request);
                _viewModel.PageHeader = "Location - " + detailResponse.Location.Name;
                _viewModel.SubHeader = "Edit Location Information";

                //Subentities
                foreach (var subentity in _viewModel.SubEntities)
                {
                    if (subentity.EntityName == _locationTypeSubEntity)
                        LocationTypesHelper.Save(this, subentity, _orgUnitId);
                    if (subentity.EntityName == _locationInsuranceSubEntity)
                        LocationInsurancesHelper.Save(this, subentity, _orgUnitId);
                    if (subentity.EntityName == _locationServiceSubEntity)
                        LocationServicesHelper.Save(this, subentity, _orgUnitId);
                    if (subentity.EntityName == _locationHourSubEntity)
                        LocationHoursHelper.Save(this, subentity, _orgUnitId);
                }
            }

            //Update SearchG2 record in index
            ProcessOneWayRequest(new UpdateLocationG2RecordRequest() { LocationId = _orgUnitId });

            // Upload location image if needed
            if (DigitalAssetManager.IsRawImageData(originalImageUrl))
                DigitalAssetManager.UploadImageAsset(Constants.Locations.LocationProfileImagePath + "/" + CalculateLocationImageName(originalImageUrl, _orgUnitId), originalImageUrl);
        }
        private string AddTreeNode(ConvertServiceRequest request)
        {
            try
            {
                if (!string.IsNullOrEmpty(request.Parameters["NodeTitle"]))
                {
                    var addRequest = new AddOrgUnitRequest
                    {
                        Name = request.Parameters["NodeTitle"],
                        IsEnabled = true,
                        IsBulkUpdateMode = true  //Org unit will be published when association is published below.
                    };

                    var addResponse = ProcessRequest<AddOrgUnitResponse>(addRequest);

                    var addAssocRequest = new AddOrgUnitAssociationRequest
                    {
                        PrimaryId = Convert.ToInt32(request.Parameters["ParentNodeId"]),
                        SecondaryId = addResponse.Id
                    };

                    ProcessRequest<AddOrgUnitAssociationResponse>(addAssocRequest);

                    _viewModel.Records.Add(new RecordBase() { Id = addResponse.Id });
                }
                else
                {
                    _viewModel.SetErrorMessage("Location Name is required");
                }
            }
            catch (Exception ex)
            {
                _viewModel.SetErrorMessage(ex.Message);
            }
            return CommonUtils.JsonSerialize(_viewModel);
        }