/// <summary>
 /// Creates a RealEstate object.
 /// </summary>
 /// <param name="re">The RealEstate object.</param>
 public async Task CreateAsync(RealEstate re)
 {
     var req = Connection.CreateRequest("realestate", Method.POST);
     req.AddBody(re);
     var resp = await Connection.ExecuteAsync<messages>(req);
     var id = resp.ExtractCreatedResourceId();
     if (!id.HasValue)
     {
         throw new IS24Exception(string.Format("Error creating RealEstate {0}: {1}", re.externalId, resp.message.ToMessage())) { Messages = resp };
     }
     re.id = id.Value;
     re.idSpecified = true;
 }
        /// <summary>
        /// Depublishes a RealEstate object.
        /// </summary>
        /// <param name="realEstate">The RealEstate object.</param>
        public async Task UnpublishAsync(RealEstate realEstate)
        {
            var req = Connection.CreateRequest("publish");
            req.AddParameter("realestate", realEstate.id);
            req.AddParameter("publishchannel", ImportExportClient.ImmobilienscoutPublishChannelId);
            var pos = await Connection.ExecuteAsync<publishObjects>(req, "");

            if (pos.publishObject != null && pos.publishObject.Any())
            {
                req = Connection.CreateRequest("publish/{id}", Method.DELETE);
                req.AddParameter("id", pos.publishObject[0].id, ParameterType.UrlSegment);
                var pres = await Connection.ExecuteAsync<messages>(req, "");
                if (!pres.IsSuccessful(MessageCode.MESSAGE_RESOURCE_DELETED))
                {
                    throw new IS24Exception(string.Format("Error depublishing RealEstate {0}: {1}", realEstate.externalId, pres.message.ToMessage())) { Messages = pres };
                }
            }
        }
        /// <summary>
        /// Publishes a RealEstate object.
        /// </summary>
        /// <param name="realEstate">The RealEstate object.</param>
        public async Task PublishAsync(RealEstate realEstate)
        {
            var req = Connection.CreateRequest("publish");
            req.AddParameter("realestate", realEstate.id);
            req.AddParameter("publishchannel", ImportExportClient.ImmobilienscoutPublishChannelId);
            var pos = await Connection.ExecuteAsync<publishObjects>(req, "");

            if (pos.publishObject == null || !pos.publishObject.Any())
            {
                req = Connection.CreateRequest("publish", Method.POST);
                var p = new PublishObject
                        {
                            publishChannel = new PublishChannel { id = ImportExportClient.ImmobilienscoutPublishChannelId, idSpecified = true },
                            realEstate = new PublishObjectRealEstate { id = realEstate.id, idSpecified = true }
                        };
                req.AddBody(p);
                var pres = await Connection.ExecuteAsync<messages>(req, "");
                if (!pres.IsSuccessful(MessageCode.MESSAGE_RESOURCE_CREATED)) throw new IS24Exception(string.Format("Error publishing RealEstate {0}: {1}", realEstate.externalId, pres.message.ToMessage())) { Messages = pres };
            }
        }
 /// <summary>
 /// Creates a new <see cref="AttachmentResource"/> instance
 /// </summary>
 /// <param name="realEstate"></param>
 /// <param name="connection"></param>
 public AttachmentResource(RealEstate realEstate, IIS24Connection connection)
 {
     RealEstate = realEstate;
     Connection = connection;
     AttachmentsOrder = new AttachmentsOrderResource(realEstate, connection);
 }
 /// <summary>
 /// Updates a RealEstate object.
 /// </summary>
 /// <param name="re">The RealEstate object.</param>
 public async Task UpdateAsync(RealEstate re)
 {
     var req = Connection.CreateRequest("realestate/{id}", Method.PUT);
     req.AddParameter("id", re.id, ParameterType.UrlSegment);
     req.AddBody(re);
     var messages = await Connection.ExecuteAsync<messages>(req);
     if (!messages.IsSuccessful())
     {
         throw new IS24Exception(string.Format("Error updating RealEstate {0}: {1}", re.externalId, messages.message.ToMessage())) { Messages = messages };
     }
 }