diff --git a/src/Pipedrive.net/Clients/FilesClient.cs b/src/Pipedrive.net/Clients/FilesClient.cs index 041a6847..fa470c7a 100644 --- a/src/Pipedrive.net/Clients/FilesClient.cs +++ b/src/Pipedrive.net/Clients/FilesClient.cs @@ -81,6 +81,11 @@ public async Task Create(NewFile data) content.Add(new StringContent(data.NoteId.ToString()), "note_id"); } + if (!string.IsNullOrEmpty(data.LeadId)) + { + content.Add(new StringContent(data.LeadId), "lead_id"); + } + return await ApiConnection.Post(ApiUrls.Files(), content, "application/json", "multipart/form-data"); } diff --git a/src/Pipedrive.net/Clients/ILeadsClient.cs b/src/Pipedrive.net/Clients/ILeadsClient.cs index 82d7ba31..51d46b42 100644 --- a/src/Pipedrive.net/Clients/ILeadsClient.cs +++ b/src/Pipedrive.net/Clients/ILeadsClient.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; +using Pipedrive.Models.Response.Leads; namespace Pipedrive { @@ -14,5 +15,7 @@ public interface ILeadsClient Task> GetAll(LeadFilters filters); Task Get(Guid id); + + Task Create(NewLead newLead); } } diff --git a/src/Pipedrive.net/Clients/LeadsClient.cs b/src/Pipedrive.net/Clients/LeadsClient.cs index dd977db4..b5dce943 100644 --- a/src/Pipedrive.net/Clients/LeadsClient.cs +++ b/src/Pipedrive.net/Clients/LeadsClient.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Pipedrive.Helpers; +using Pipedrive.Models.Response.Leads; namespace Pipedrive { @@ -39,5 +40,10 @@ public Task Get(Guid id) { return ApiConnection.Get(ApiUrls.Lead(id)); } + + public Task Create(NewLead newLead) + { + return ApiConnection.Post(ApiUrls.Leads(), newLead); + } } } diff --git a/src/Pipedrive.net/Models/Common/CustomFields/AddressCustomField.cs b/src/Pipedrive.net/Models/Common/CustomFields/AddressCustomField.cs index 5d9ce3dd..26e334f6 100644 --- a/src/Pipedrive.net/Models/Common/CustomFields/AddressCustomField.cs +++ b/src/Pipedrive.net/Models/Common/CustomFields/AddressCustomField.cs @@ -49,5 +49,10 @@ public AddressCustomField( PostalCode = postalCode; FormattedAddress = formattedAddress; } + + public override string ToString() + { + return FormattedAddress; + } } } diff --git a/src/Pipedrive.net/Models/Common/CustomFields/DateCustomField.cs b/src/Pipedrive.net/Models/Common/CustomFields/DateCustomField.cs index 62e9c684..ca66e4d5 100644 --- a/src/Pipedrive.net/Models/Common/CustomFields/DateCustomField.cs +++ b/src/Pipedrive.net/Models/Common/CustomFields/DateCustomField.cs @@ -10,5 +10,10 @@ public DateCustomField(DateTime value) { Value = value; } + + public override string ToString() + { + return Value.ToString(); + } } } diff --git a/src/Pipedrive.net/Models/Common/CustomFields/DateRangeCustomField.cs b/src/Pipedrive.net/Models/Common/CustomFields/DateRangeCustomField.cs index 8e7f59e8..0aadbd3e 100644 --- a/src/Pipedrive.net/Models/Common/CustomFields/DateRangeCustomField.cs +++ b/src/Pipedrive.net/Models/Common/CustomFields/DateRangeCustomField.cs @@ -13,5 +13,12 @@ public DateRangeCustomField(DateTime? startDate, DateTime? endDate) StartDate = startDate; EndDate = endDate; } + + public override string ToString() + { + string startDateString = StartDate.HasValue ? StartDate.Value.ToString() : "-"; + string endDateString = EndDate.HasValue ? EndDate.Value.ToString() : "-"; + return $"{startDateString} to {endDateString}"; + } } } diff --git a/src/Pipedrive.net/Models/Common/CustomFields/DecimalCustomField.cs b/src/Pipedrive.net/Models/Common/CustomFields/DecimalCustomField.cs index 3fd5bdb4..e0da9f43 100644 --- a/src/Pipedrive.net/Models/Common/CustomFields/DecimalCustomField.cs +++ b/src/Pipedrive.net/Models/Common/CustomFields/DecimalCustomField.cs @@ -8,5 +8,10 @@ public DecimalCustomField(decimal value) { Value = value; } + + public override string ToString() + { + return Value.ToString(); + } } } diff --git a/src/Pipedrive.net/Models/Common/CustomFields/ICustomField.cs b/src/Pipedrive.net/Models/Common/CustomFields/ICustomField.cs index ef57b579..19615e33 100644 --- a/src/Pipedrive.net/Models/Common/CustomFields/ICustomField.cs +++ b/src/Pipedrive.net/Models/Common/CustomFields/ICustomField.cs @@ -2,5 +2,6 @@ { public interface ICustomField { + string ToString(); } } diff --git a/src/Pipedrive.net/Models/Common/CustomFields/LongCustomField.cs b/src/Pipedrive.net/Models/Common/CustomFields/LongCustomField.cs index 07c3986a..bdcee047 100644 --- a/src/Pipedrive.net/Models/Common/CustomFields/LongCustomField.cs +++ b/src/Pipedrive.net/Models/Common/CustomFields/LongCustomField.cs @@ -9,5 +9,10 @@ public LongCustomField(long value) { Value = value; } + + public override string ToString() + { + return Value.ToString(); + } } } diff --git a/src/Pipedrive.net/Models/Common/CustomFields/MonetaryCustomField.cs b/src/Pipedrive.net/Models/Common/CustomFields/MonetaryCustomField.cs index 94c139df..85a36dad 100644 --- a/src/Pipedrive.net/Models/Common/CustomFields/MonetaryCustomField.cs +++ b/src/Pipedrive.net/Models/Common/CustomFields/MonetaryCustomField.cs @@ -11,5 +11,10 @@ public MonetaryCustomField(decimal value, string currency) Value = value; Currency = currency; } + + public override string ToString() + { + return $"{Currency} {Value}"; + } } } diff --git a/src/Pipedrive.net/Models/Common/CustomFields/OrganizationCustomField.cs b/src/Pipedrive.net/Models/Common/CustomFields/OrganizationCustomField.cs index 72567795..374a1505 100644 --- a/src/Pipedrive.net/Models/Common/CustomFields/OrganizationCustomField.cs +++ b/src/Pipedrive.net/Models/Common/CustomFields/OrganizationCustomField.cs @@ -21,5 +21,10 @@ public class OrganizationCustomField : ICustomField [JsonProperty("value")] public long Value { get; set; } + + public override string ToString() + { + return Name; + } } } diff --git a/src/Pipedrive.net/Models/Common/CustomFields/PersonCustomField.cs b/src/Pipedrive.net/Models/Common/CustomFields/PersonCustomField.cs index 9e04740c..f60db001 100644 --- a/src/Pipedrive.net/Models/Common/CustomFields/PersonCustomField.cs +++ b/src/Pipedrive.net/Models/Common/CustomFields/PersonCustomField.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using Newtonsoft.Json; namespace Pipedrive.CustomFields @@ -16,5 +17,10 @@ public class PersonCustomField : ICustomField [JsonProperty("value")] public long Value { get; set; } + + public override string ToString() + { + return $"{Name}, <{string.Join(", ", Email.Select(e => e.Value))}>"; + } } } diff --git a/src/Pipedrive.net/Models/Common/CustomFields/StringCustomField.cs b/src/Pipedrive.net/Models/Common/CustomFields/StringCustomField.cs index 1594694e..0ad61c9b 100644 --- a/src/Pipedrive.net/Models/Common/CustomFields/StringCustomField.cs +++ b/src/Pipedrive.net/Models/Common/CustomFields/StringCustomField.cs @@ -9,5 +9,10 @@ public StringCustomField(string value) { Value = value; } + + public override string ToString() + { + return Value; + } } } diff --git a/src/Pipedrive.net/Models/Common/CustomFields/TimeCustomField.cs b/src/Pipedrive.net/Models/Common/CustomFields/TimeCustomField.cs index f9f0ea5e..3f5a4787 100644 --- a/src/Pipedrive.net/Models/Common/CustomFields/TimeCustomField.cs +++ b/src/Pipedrive.net/Models/Common/CustomFields/TimeCustomField.cs @@ -13,5 +13,10 @@ public TimeCustomField(TimeSpan value, int timezoneId) Value = value; TimezoneId = timezoneId; } + + public override string ToString() + { + return Value.ToString(); + } } } diff --git a/src/Pipedrive.net/Models/Common/CustomFields/TimeRangeCustomField.cs b/src/Pipedrive.net/Models/Common/CustomFields/TimeRangeCustomField.cs index bdfca8db..35a3df51 100644 --- a/src/Pipedrive.net/Models/Common/CustomFields/TimeRangeCustomField.cs +++ b/src/Pipedrive.net/Models/Common/CustomFields/TimeRangeCustomField.cs @@ -16,5 +16,10 @@ public TimeRangeCustomField(TimeSpan startTime, TimeSpan endTime, int timezoneId EndTime = endTime; TimezoneId = timezoneId; } + + public override string ToString() + { + return $"{StartTime} to {EndTime}"; + } } } diff --git a/src/Pipedrive.net/Models/Common/CustomFields/UserCustomField.cs b/src/Pipedrive.net/Models/Common/CustomFields/UserCustomField.cs index 7335264d..d2480f32 100644 --- a/src/Pipedrive.net/Models/Common/CustomFields/UserCustomField.cs +++ b/src/Pipedrive.net/Models/Common/CustomFields/UserCustomField.cs @@ -24,5 +24,10 @@ public class UserCustomField : ICustomField [JsonProperty("value")] public long Value { get; set; } + + public override string ToString() + { + return $"{Name}, <{Email}>"; + } } } diff --git a/src/Pipedrive.net/Models/Request/Files/NewFile.cs b/src/Pipedrive.net/Models/Request/Files/NewFile.cs index cfc98e36..ac6763a9 100644 --- a/src/Pipedrive.net/Models/Request/Files/NewFile.cs +++ b/src/Pipedrive.net/Models/Request/Files/NewFile.cs @@ -25,6 +25,9 @@ public class NewFile [JsonProperty("note_id")] public long? NoteId { get; set; } + [JsonProperty("lead_id")] + public string LeadId { get; set; } + public NewFile(RawFile file) { this.File = file; diff --git a/src/Pipedrive.net/Models/Request/Notes/NewNote.cs b/src/Pipedrive.net/Models/Request/Notes/NewNote.cs index f9a11881..95aba047 100644 --- a/src/Pipedrive.net/Models/Request/Notes/NewNote.cs +++ b/src/Pipedrive.net/Models/Request/Notes/NewNote.cs @@ -25,6 +25,9 @@ public class NewNote [JsonProperty("pinned_to_person_flag")] public bool PinnedToPersonFlag { get; set; } + [JsonProperty("lead_id")] + public string LeadId { get; set; } + public NewNote(string content) { Content = content; diff --git a/src/Pipedrive.net/Models/Request/Persons/PersonUpdate.cs b/src/Pipedrive.net/Models/Request/Persons/PersonUpdate.cs index 8d87baf0..0f83cf26 100644 --- a/src/Pipedrive.net/Models/Request/Persons/PersonUpdate.cs +++ b/src/Pipedrive.net/Models/Request/Persons/PersonUpdate.cs @@ -25,6 +25,9 @@ public class PersonUpdate : IEntityWithCustomFields [JsonProperty("visible_to")] public Visibility VisibleTo { get; set; } + [JsonProperty("marketing_status")] + public string MarketingStatus { get; set; } + [JsonIgnore] public IDictionary CustomFields { get; set; } } diff --git a/src/Pipedrive.net/Models/Response/Leads/NewLead.cs b/src/Pipedrive.net/Models/Response/Leads/NewLead.cs new file mode 100644 index 00000000..d67eb538 --- /dev/null +++ b/src/Pipedrive.net/Models/Response/Leads/NewLead.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Newtonsoft.Json; + +namespace Pipedrive.Models.Response.Leads +{ + /// + /// https://developers.pipedrive.com/docs/api/v1/Leads#addLead + /// + /* + { + "title": "", + "owner_id": "", + "label_ids": [ + "", + "" + ], + "person_id": "", + "organization_id": "", + "value": { + "amount": "", + "currency": "" + }, + "expected_close_date": "", + "visible_to": "", + "was_seen": "" + } + */ + public class NewLead + { + [JsonProperty("title")] + public string Title { get; set; } + + [JsonProperty("owner_id")] + public long OwnerId { get; set; } + + [JsonIgnore] + [JsonProperty("creator_id")] + public long CreatorId { get; set; } + + [JsonProperty("label_ids")] + public List LabelIds { get; set; } + + [JsonIgnore] + [JsonProperty("value")] + public CurrencyAmount Value { get; set; } + + [JsonIgnore] + [JsonProperty("expected_close_date")] + public DateTime? ExpectedCloseDate { get; set; } + + [JsonIgnore] + [JsonProperty("note")] + public string Note { get; set; } + + [JsonProperty("person_id")] + public long PersonId { get; set; } + + [JsonProperty("organization_id")] + public long? OrganizationId { get; set; } + + [JsonIgnore] + [JsonProperty("is_archived")] + public bool IsArchived { get; set; } + + [JsonIgnore] + [JsonProperty("source_name")] + public string SourceName { get; set; } + + [JsonIgnore] + [JsonProperty("was_seen")] + public bool WasSeen { get; set; } + + [JsonIgnore] + [JsonProperty("next_activity_id")] + public long? NextActivityId { get; set; } + + [JsonIgnore] + [JsonProperty("add_time")] + public DateTime? AddTime { get; set; } + + [JsonIgnore] + [JsonProperty("update_time")] + public DateTime? UpdateTime { get; set; } + } +} diff --git a/src/Pipedrive.net/Models/Response/Persons/AbstractPerson.cs b/src/Pipedrive.net/Models/Response/Persons/AbstractPerson.cs index 463fcb95..c45b9d2a 100644 --- a/src/Pipedrive.net/Models/Response/Persons/AbstractPerson.cs +++ b/src/Pipedrive.net/Models/Response/Persons/AbstractPerson.cs @@ -142,5 +142,8 @@ public abstract class AbstractPerson [JsonProperty("cc_email")] public string CcEmail { get; set; } + + [JsonProperty("marketing_status")] + public string MarketingStatus { get; set; } } } diff --git a/src/Pipedrive.net/Models/Response/Persons/Person.cs b/src/Pipedrive.net/Models/Response/Persons/Person.cs index fe6c8be8..905057b5 100644 --- a/src/Pipedrive.net/Models/Response/Persons/Person.cs +++ b/src/Pipedrive.net/Models/Response/Persons/Person.cs @@ -21,7 +21,8 @@ public PersonUpdate ToUpdate() OrgId = OrgId?.Value, OwnerId = OwnerId?.Value, VisibleTo = VisibleTo, - CustomFields = CustomFields + CustomFields = CustomFields, + MarketingStatus = MarketingStatus }; } } diff --git a/src/Pipedrive.net/Pipedrive.csproj b/src/Pipedrive.net/Pipedrive.csproj index 1d352843..bf92b858 100644 --- a/src/Pipedrive.net/Pipedrive.csproj +++ b/src/Pipedrive.net/Pipedrive.csproj @@ -29,7 +29,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive