github.com/schmorrison/Zoho@v1.1.4/invoice/create_contact.go (about) 1 package invoice 2 3 import ( 4 "fmt" 5 6 zoho "github.com/schmorrison/Zoho" 7 ) 8 9 //https://www.zoho.com/invoice/api/v3/#Contacts_Create_a_Contact 10 //func (c *API) CreateContact(request interface{}, OrganizationID string, params map[string]zoho.Parameter) (data ListContactsResponse, err error) { 11 func (c *API) CreateContact( 12 request interface{}, 13 enablePortal bool, 14 ) (data CreateContactResponse, err error) { 15 16 endpoint := zoho.Endpoint{ 17 Name: ContactsModule, 18 URL: fmt.Sprintf("https://invoice.zoho.%s/api/v3/%s", c.ZohoTLD, ContactsModule), 19 Method: zoho.HTTPPost, 20 ResponseData: &CreateContactResponse{}, 21 URLParameters: map[string]zoho.Parameter{ 22 "filter_by": "", 23 }, 24 RequestBody: &request, 25 BodyFormat: zoho.JSON_STRING, 26 Headers: map[string]string{ 27 InvoiceAPIEndpointHeader: c.OrganizationID, 28 }, 29 } 30 31 /*for k, v := range params { 32 endpoint.URLParameters[k] = v 33 }*/ 34 35 err = c.Zoho.HTTPRequest(&endpoint) 36 if err != nil { 37 return CreateContactResponse{}, fmt.Errorf("Failed to create contact: %s", err) 38 } 39 40 if v, ok := endpoint.ResponseData.(*CreateContactResponse); ok { 41 // Check if the request succeeded 42 if v.Contact.ContactID == "" { 43 return *v, fmt.Errorf("Failed to create contact: %s", v.Message) 44 } 45 // Enable portal if requested 46 if enablePortal { 47 endpoint := zoho.Endpoint{ 48 Name: ContactsModule, 49 URL: fmt.Sprintf( 50 "https://invoice.zoho.%s/api/v3/%s/%s/portal/enable", 51 c.ZohoTLD, 52 ContactsModule, 53 v.Contact.ContactID, 54 ), 55 Method: zoho.HTTPPost, 56 ResponseData: &EnableContactDashboardResponse{}, 57 URLParameters: map[string]zoho.Parameter{ 58 "filter_by": "", 59 }, 60 RequestBody: &EnableContactDashboardRequest{ 61 ContactPersons: []EnableContactDashboardRequestPersonID{{ 62 ContactPersonID: v.Contact.ContactPersons[0].ContactPersonID, 63 }}}, 64 BodyFormat: zoho.JSON_STRING, 65 Headers: map[string]string{ 66 InvoiceAPIEndpointHeader: c.OrganizationID, 67 }, 68 } 69 err = c.Zoho.HTTPRequest(&endpoint) 70 if err != nil { 71 return CreateContactResponse{}, fmt.Errorf( 72 "Failed to enable main person portal: %s", 73 err, 74 ) 75 } 76 } 77 return *v, nil 78 } 79 return CreateContactResponse{}, fmt.Errorf("Data retrieved was not 'CreateContactResponse'") 80 } 81 82 type EnableContactDashboardRequest struct { 83 ContactPersons []EnableContactDashboardRequestPersonID `json:"contact_persons"` 84 } 85 86 type EnableContactDashboardRequestPersonID struct { 87 ContactPersonID string `json:"contact_person_id"` 88 } 89 90 type EnableContactDashboardResponse struct { 91 Code int `json:"code"` 92 Message string `json:"message"` 93 } 94 95 type CreateContactRequest struct { 96 ContactName string `json:"contact_name"` 97 CompanyName string `json:"company_name"` 98 CustomerSubType string `json:"customer_sub_type,omitempty"` 99 PaymentTerms int64 `json:"payment_terms,omitempty"` 100 CurrencyID string `json:"currency_id,omitempty"` 101 Website string `json:"website,omitempty"` 102 CustomFields []CustomFieldRequest `json:"custom_fields"` 103 BillingAddress ContactAddress `json:"billing_address"` 104 ShippingAddress ContactAddress `json:"shipping_address"` 105 ContactPersons []ContactPerson `json:"contact_persons"` 106 DefaultTemplates ContactDefaultTemplates `json:"default_templates,omitempty"` 107 LanguageCode string `json:"language_code"` 108 Notes string `json:"notes,omitempty"` 109 PlaceOfContact string `json:"place_of_contact,omitempty"` 110 GSTNo string `json:"gst_no,omitempty"` 111 GSTTreatment string `json:"gst_treatment,omitempty"` 112 TaxExemptionID string `json:"tax_exemption_id,omitempty"` 113 TaxAuthorityID string `json:"tax_authority_id,omitempty"` 114 TaxID string `json:"tax_id,omitempty"` 115 IsTaxable string `json:"is_taxable,omitempty"` 116 Facebook string `json:"facebook,omitempty"` 117 Twitter string `json:"twitter,omitempty"` 118 } 119 120 type CreateContactResponse struct { 121 Code int `json:"code"` 122 Message string `json:"message"` 123 Contact struct { 124 ContactID string `json:"contact_id"` 125 ContactName string `json:"contact_name"` 126 CompanyName string `json:"company_name"` 127 HasTransaction bool `json:"has_transaction"` 128 ContactType string `json:"contact_type"` 129 IsTaxable bool `json:"is_taxable"` 130 TaxID string `json:"tax_id"` 131 TaxName string `json:"tax_name"` 132 TaxPercentage float64 `json:"tax_percentage"` 133 TaxExemptionID string `json:"tax_exemption_id"` 134 TaxAuthorityID string `json:"tax_authority_id"` 135 GSTNo string `json:"gst_no"` 136 GSTTreatment string `json:"gst_treatment"` 137 IsLinkedWithZohocrm bool `json:"is_linked_with_zohocrm"` 138 Website string `json:"website"` 139 PrimaryContactID string `json:"primary_contact_id"` 140 PaymentTerms int64 `json:"payment_terms"` 141 PaymentTermsLabel string `json:"payment_terms_label"` 142 CurrencyID string `json:"currency_id"` 143 CurrencyCode string `json:"currency_code"` 144 CurrencySymbol string `json:"currency_symbol"` 145 LanguageCode string `json:"language_code"` 146 OutstandingReceivableAmount float64 `json:"outstanding_receivable_amount"` 147 OutstandingReceivableAmountBcy float64 `json:"outstanding_receivable_amount_bcy"` 148 UnusedCreditsReceivableAmount float64 `json:"unused_credits_receivable_amount"` 149 UnusedCreditsReceivableAmountBcy float64 `json:"unused_credits_receivable_amount_bcy"` 150 Status string `json:"status"` 151 PaymentReminderEnabled bool `json:"payment_reminder_enabled"` 152 CustomFields []struct { 153 Value string `json:"value"` 154 Index int64 `json:"index"` 155 Label string `json:"label"` 156 } `json:"custom_fields"` 157 BillingAddress ContactAddress `json:"billing_address"` 158 ShippingAddress ContactAddress `json:"shipping_address"` 159 Facebook string `json:"facebook"` 160 Twitter string `json:"twitter"` 161 ContactPersons []ContactPerson `json:"contact_persons"` 162 DefaultTemplates ContactDefaultTemplates `json:"default_templates"` 163 Notes string `json:"notes"` 164 CreatedTime string `json:"created_time"` 165 LastModifiedTime string `json:"last_modified_time"` 166 } `json:"contact"` 167 } 168 169 type ContactPerson struct { 170 ContactPersonID string `json:"contact_person_id,omitempty"` 171 Salutation string `json:"salutation,omitempty"` 172 FirstName string `json:"first_name"` 173 LastName string `json:"last_name"` 174 Email string `json:"email"` 175 Phone string `json:"phone"` 176 Mobile string `json:"mobile,omitempty"` 177 IsPrimaryContact bool `json:"is_primary_contact,omitempty"` 178 } 179 180 type ContactAddress struct { 181 Attention string `json:"attention,omitempty"` 182 Address string `json:"address,omitempty"` 183 Street2 string `json:"street2,omitempty"` 184 StateCode string `json:"state_code,omitempty"` 185 City string `json:"city,omitempty"` 186 State string `json:"state,omitempty"` 187 Zip string `json:"zip,omitempty"` 188 Country string `json:"country,omitempty"` 189 Fax string `json:"fax,omitempty"` 190 Phone string `json:"phone,omitempty"` 191 } 192 193 type ContactDefaultTemplates struct { 194 InvoiceTemplateID string `json:"invoice_template_id,omitempty"` 195 InvoiceTemplateName string `json:"invoice_template_name,omitempty"` 196 EstimateTemplateID string `json:"estimate_template_id,omitempty"` 197 EstimateTemplateName string `json:"estimate_template_name,omitempty"` 198 CreditnoteTemplateID string `json:"creditnote_template_id,omitempty"` 199 CreditnoteTemplateName string `json:"creditnote_template_name,omitempty"` 200 InvoiceEmailTemplateID string `json:"invoice_email_template_id,omitempty"` 201 InvoiceEmailTemplateName string `json:"invoice_email_template_name,omitempty"` 202 EstimateEmailTemplateID string `json:"estimate_email_template_id,omitempty"` 203 EstimateEmailTemplateName string `json:"estimate_email_template_name,omitempty"` 204 CreditnoteEmailTemplateID string `json:"creditnote_email_template_id,omitempty"` 205 CreditnoteEmailTemplateName string `json:"creditnote_email_template_name,omitempty"` 206 }