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  }