// Code generated by go-swagger; DO NOT EDIT.

// All Code Copyright(c) 2018-2020 by Taxnexus, Inc.
// All rights reserved worldwide.
// Proprietary product; unlicensed use is not allowed

package sf_gate_models

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

import (
	"github.com/go-openapi/errors"
	"github.com/go-openapi/strfmt"
	"github.com/go-openapi/swag"
)

// Account account
//
// swagger:model Account
type Account struct {

	// Account Number
	Accountnumber string `json:"accountnumber,omitempty"`

	// The marketing orgin of this account
	Accountsource string `json:"accountsource,omitempty"`

	// Active
	Active bool `json:"active,omitempty"`

	// For tax authorities, this account's administrative level, e.g. Local, County, State or Federal
	Administrativelevel string `json:"administrativelevel,omitempty"`

	// Rollup Tax Amount
	Amount float64 `json:"amount,omitempty"`

	// Amount Invoiced
	Amountinvoiced float64 `json:"amountinvoiced,omitempty"`

	// Amount Paid
	Amountpaid float64 `json:"amountpaid,omitempty"`

	// Annual Revenue Estimate
	Annualrevenue float64 `json:"annualrevenue,omitempty"`

	// Account Balance
	Balance float64 `json:"balance,omitempty"`

	// billingaddress
	Billingaddress *Address `json:"billingaddress,omitempty"`

	// Contact ID
	Billingcontactid string `json:"billingcontactid,omitempty"`

	// Billing Preference
	Billingpreference string `json:"billingpreference,omitempty"`

	// businessaddress
	Businessaddress *Address `json:"businessaddress,omitempty"`

	// Is this a cannabis customer?
	Cannabiscustomer bool `json:"cannabiscustomer,omitempty"`

	// Channel Program Level Name
	Channelprogramlevelname string `json:"channelprogramlevelname,omitempty"`

	// Channel Program Name
	Channelprogramname string `json:"channelprogramname,omitempty"`

	// Client End Date
	Clientenddate string `json:"clientenddate,omitempty"`

	// Client Start Date
	Clientstartdate string `json:"clientstartdate,omitempty"`

	// The Company ID of this Account
	Companyid string `json:"companyid,omitempty"`

	// The Id of the geo coordinates of this account
	Coordinateid string `json:"coordinateid,omitempty"`

	// Created By User ID
	Createdbyid string `json:"createdbyid,omitempty"`

	// Created Date
	Createddate string `json:"createddate,omitempty"`

	// Customer ID from source system
	Customerid string `json:"customerid,omitempty"`

	// Customer Priority
	Customerpriority string `json:"customerpriority,omitempty"`

	// D-n-B Company
	Dandbcompanyid string `json:"dandbcompanyid,omitempty"`

	// This Account's 'Doing Business As' name
	Dba string `json:"dba,omitempty"`

	// defaultaddress
	Defaultaddress *Address `json:"defaultaddress,omitempty"`

	// Default Backend ID
	Defaultbackendid string `json:"defaultbackendid,omitempty"`

	// Default Delivery Address Contact ID
	Defaultdeliverycontactid string `json:"defaultdeliverycontactid,omitempty"`

	// Default End User Contact ID
	Defaultenduserid string `json:"defaultenduserid,omitempty"`

	// Description
	Description string `json:"description,omitempty"`

	// D-U-N-S Number
	Dunsnumber string `json:"dunsnumber,omitempty"`

	// EIN
	Ein string `json:"ein,omitempty"`

	// Main Account Email
	Email string `json:"email,omitempty"`

	// Enrollment Status
	Enrollmentstatus string `json:"enrollmentstatus,omitempty"`

	// Fax
	Fax string `json:"fax,omitempty"`

	// Taxnexus Account Id
	ID string `json:"id,omitempty"`

	// Industry
	Industry string `json:"industry,omitempty"`

	// Customer Portal Account
	Iscustomerportal bool `json:"iscustomerportal,omitempty"`

	// Partner Account
	Ispartner bool `json:"ispartner,omitempty"`

	// ISP Customer?
	Ispcustomer bool `json:"ispcustomer,omitempty"`

	// Data.com Key
	Jigsaw string `json:"jigsaw,omitempty"`

	// Last Modified By User ID
	Lastmodifiedbyid string `json:"lastmodifiedbyid,omitempty"`

	// Last Modified Date
	Lastmodifieddate string `json:"lastmodifieddate,omitempty"`

	// MSP Customer?
	Mspcustomer bool `json:"mspcustomer,omitempty"`

	// NAICS Code
	Naicscode string `json:"naicscode,omitempty"`

	// NAICS Description
	Naicsdesc string `json:"naicsdesc,omitempty"`

	// Account Name
	Name string `json:"name,omitempty"`

	// Employee Count Estimate
	Numberofemployees int64 `json:"numberofemployees,omitempty"`

	// Number of Locations Estimate
	Numberoflocations int64 `json:"numberoflocations,omitempty"`

	// Open Charges
	Opencharges float64 `json:"opencharges,omitempty"`

	// Vendor Order Contact ID
	Ordercontactid string `json:"ordercontactid,omitempty"`

	// Order Email
	Orderemail string `json:"orderemail,omitempty"`

	// Account Owner User ID
	Ownerid string `json:"ownerid,omitempty"`

	// Ownership
	Ownership string `json:"ownership,omitempty"`

	// Parent Foreign Key
	Parentfk string `json:"parentfk,omitempty"`

	// Parent Account
	Parentid string `json:"parentid,omitempty"`

	// Phone
	Phone string `json:"phone,omitempty"`

	// The ID of the Place situs record that applies to this Account
	Placeid string `json:"placeid,omitempty"`

	// Tax Preparer Contact ID
	Preparerid string `json:"preparerid,omitempty"`

	// Rating
	Rating string `json:"rating,omitempty"`

	// Rating Engine identifier
	Ratingengineid string `json:"ratingengineid,omitempty"`

	// External Reference ID
	Ref string `json:"ref,omitempty"`

	// Rollup Revenue Base
	Revenuebase float64 `json:"revenuebase,omitempty"`

	// Rollup Revenue Net
	Revenuenet float64 `json:"revenuenet,omitempty"`

	// Rollup Revenue Not Taxable
	Revenuenottaxable float64 `json:"revenuenottaxable,omitempty"`

	// shippingaddress
	Shippingaddress *Address `json:"shippingaddress,omitempty"`

	// Shipping Census Tract
	Shippingcensustract string `json:"shippingcensustract,omitempty"`

	// Shipping Contact ID
	Shippingcontactid string `json:"shippingcontactid,omitempty"`

	// Shipping County
	Shippingcounty string `json:"shippingcounty,omitempty"`

	// SIC Code
	Sic string `json:"sic,omitempty"`

	// SIC Description
	Sicdesc string `json:"sicdesc,omitempty"`

	// Account Site
	Site string `json:"site,omitempty"`

	// Account Status
	Status string `json:"status,omitempty"`

	// Tax Exemption
	Taxexemption string `json:"taxexemption,omitempty"`

	// Rollup Tax On Tax
	Taxontax float64 `json:"taxontax,omitempty"`

	// Telecom Customer?
	Telecomcustomer bool `json:"telecomcustomer,omitempty"`

	// tenant identifier
	Tenantid string `json:"tenantid,omitempty"`

	// Ticker Symbol
	Tickersymbol string `json:"tickersymbol,omitempty"`

	// Tradestyle
	Tradestyle string `json:"tradestyle,omitempty"`

	// Type
	Type string `json:"type,omitempty"`

	// Unapplied Payments
	Unappliedpayments float64 `json:"unappliedpayments,omitempty"`

	// Rollup Unit Base
	Unitbase float64 `json:"unitbase,omitempty"`

	// Upsell Opportunity
	Upsellopportunity string `json:"upsellopportunity,omitempty"`

	// Website
	Website string `json:"website,omitempty"`

	// WHMCS Client ID
	Whmcsclientid int64 `json:"whmcsclientid,omitempty"`

	// Xero Contact ID
	Xerocontactid string `json:"xerocontactid,omitempty"`

	// Year Started
	Yearstarted string `json:"yearstarted,omitempty"`
}

// Validate validates this account
func (m *Account) Validate(formats strfmt.Registry) error {
	var res []error

	if err := m.validateBillingaddress(formats); err != nil {
		res = append(res, err)
	}

	if err := m.validateBusinessaddress(formats); err != nil {
		res = append(res, err)
	}

	if err := m.validateDefaultaddress(formats); err != nil {
		res = append(res, err)
	}

	if err := m.validateShippingaddress(formats); err != nil {
		res = append(res, err)
	}

	if len(res) > 0 {
		return errors.CompositeValidationError(res...)
	}
	return nil
}

func (m *Account) validateBillingaddress(formats strfmt.Registry) error {

	if swag.IsZero(m.Billingaddress) { // not required
		return nil
	}

	if m.Billingaddress != nil {
		if err := m.Billingaddress.Validate(formats); err != nil {
			if ve, ok := err.(*errors.Validation); ok {
				return ve.ValidateName("billingaddress")
			}
			return err
		}
	}

	return nil
}

func (m *Account) validateBusinessaddress(formats strfmt.Registry) error {

	if swag.IsZero(m.Businessaddress) { // not required
		return nil
	}

	if m.Businessaddress != nil {
		if err := m.Businessaddress.Validate(formats); err != nil {
			if ve, ok := err.(*errors.Validation); ok {
				return ve.ValidateName("businessaddress")
			}
			return err
		}
	}

	return nil
}

func (m *Account) validateDefaultaddress(formats strfmt.Registry) error {

	if swag.IsZero(m.Defaultaddress) { // not required
		return nil
	}

	if m.Defaultaddress != nil {
		if err := m.Defaultaddress.Validate(formats); err != nil {
			if ve, ok := err.(*errors.Validation); ok {
				return ve.ValidateName("defaultaddress")
			}
			return err
		}
	}

	return nil
}

func (m *Account) validateShippingaddress(formats strfmt.Registry) error {

	if swag.IsZero(m.Shippingaddress) { // not required
		return nil
	}

	if m.Shippingaddress != nil {
		if err := m.Shippingaddress.Validate(formats); err != nil {
			if ve, ok := err.(*errors.Validation); ok {
				return ve.ValidateName("shippingaddress")
			}
			return err
		}
	}

	return nil
}

// MarshalBinary interface implementation
func (m *Account) MarshalBinary() ([]byte, error) {
	if m == nil {
		return nil, nil
	}
	return swag.WriteJSON(m)
}

// UnmarshalBinary interface implementation
func (m *Account) UnmarshalBinary(b []byte) error {
	var res Account
	if err := swag.ReadJSON(b, &res); err != nil {
		return err
	}
	*m = res
	return nil
}
