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

package models

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

import (
	"encoding/json"
	"strconv"

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

// Customer customer
//
// swagger:model Customer
type Customer struct {

	// abacus code
	AbacusCode string `json:"AbacusCode,omitempty" gorm:"default:''"`

	// address
	Address string `json:"Address,omitempty"`

	// Api link
	APILink string `json:"ApiLink,omitempty" gorm:"-"`

	// bill contact
	BillContact string `json:"BillContact,omitempty" gorm:"default:''"`

	// ISO-4217 currency code
	// Enum: [AED AFN ALL AMD ANG AOA ARS AUD AWG AZN BAM BBD BDT BGN BHD BIF BMD BND BOB BOV BRL BSD BTN BWP BYN BZD CAD CDF CHE CHF CHW CLF CLP CNY COP COU CRC CUC CUP CVE CZK DJF DKK DOP DZD EGP ERN ETB EUR FJD FKP GBP GEL GHS GIP GMD GNF GTQ GYD HKD HNL HRK HTG HUF IDR ILS INR IQD IRR ISK JMD JOD JPY KES KGS KHR KMF KPW KRW KWD KYD KZT LAK LBP LKR LRD LSL LYD MAD MDL MGA MKD MMK MNT MOP MRU MUR MVR MWK MXN MXV MYR MZN NAD NGN NIO NOK NPR NZD OMR PAB PEN PGK PHP PKR PLN PYG QAR RON RSD RUB RWF SAR SBD SCR SDG SEK SGD SHP SLL SOS SRD SSP STN SVC SYP SZL THB TJS TMT TND TOP TRY TTD TWD TZS UAH UGX USD USN UYI UYU UYW UZS VES VND VUV WST XAF XAG XAU XBA XBB XBC XBD XCD XDR XOF XPD XPF XPT XSU XTS XUA XXX YER ZAR ZMW ZWL]
	BillCurrency *string `json:"BillCurrency,omitempty" gorm:"default:CHF"`

	// bill period
	// Enum: [daily weekly bi-weekly monthly bi-monthly quarterly semi-annually annually]
	BillPeriod *string `json:"BillPeriod,omitempty" gorm:"default:monthly"`

	// billable
	Billable *bool `json:"Billable,omitempty" gorm:"default:true"`

	// billing code
	BillingCode string `json:"BillingCode,omitempty" gorm:"default:''"`

	// cancel date
	// Format: date
	CancelDate strfmt.Date `json:"CancelDate,omitempty" gorm:"type:date;default:2100-12-31"`

	// contract end
	// Format: date
	ContractEnd strfmt.Date `json:"ContractEnd,omitempty" gorm:"type:date;default:2030-12-31"`

	// contract start
	// Format: date
	ContractStart strfmt.Date `json:"ContractStart,omitempty" gorm:"type:date;default:2019-01-01"`

	// customer Id
	CustomerID string `json:"CustomerId,omitempty" gorm:"primary_key;unique;default:md5(random()::text || clock_timestamp()::text)::uuid"`

	// deleted at
	// Format: datetime
	DeletedAt *strfmt.DateTime `json:"DeletedAt,omitempty" gorm:"type:timestamptz"`

	// discount
	Discount float64 `json:"Discount,omitempty" gorm:"type:numeric(23,13);default:0.0"`

	// email bcc
	// Format: email
	EmailBcc strfmt.Email `json:"EmailBcc,omitempty" gorm:"default:''"`

	// email cc
	// Format: email
	EmailCc strfmt.Email `json:"EmailCc,omitempty" gorm:"default:''"`

	// email to
	// Format: email
	EmailTo strfmt.Email `json:"EmailTo,omitempty" gorm:"default:''"`

	// invoice mode
	// Enum: [email post]
	InvoiceMode *string `json:"InvoiceMode,omitempty" gorm:"default:email"`

	// is active
	IsActive *bool `json:"IsActive,omitempty" gorm:"default:true"`

	// ISO-369-1 alpha-2 language codes
	// Enum: [AA AB AE AF AK AM AN AR AS AV AY AZ BA BE BG BH BI BM BN BO BR BS CA CE CH CO CR CS CU CV CY DA DE DV DZ EE EL EN EO ES ET EU FA FF FI FJ FO FR FY GA GD GL GN GU GV HA HE HI HO HR HT HU HY HZ IA ID IE IG II IK IO IS IT IU JA JV KA KG KI KJ KK KL KM KN KO KR KS KU KV KW KY LA LB LG LI LN LO LT LU LV MG MH MI MK ML MN MR MS MT MY NA NB ND NE NG NL NN NO NR NV NY OC OJ OM OR OS PA PI PL PS PT QU RM RN RO RU RW SA SC SD SE SG SI SK SL SM SN SO SQ SR SS ST SU SV SW TA TE TG TH TI TK TL TN TO TR TS TT TW TY UG UK UR UZ VE VI VO WA WO XH YI YO ZA ZH ZU]
	Language *string `json:"Language,omitempty" gorm:"default:DE"`

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

	// parent customer Id
	ParentCustomerID string `json:"ParentCustomerId,omitempty"`

	// plan Id
	PlanID string `json:"PlanId,omitempty" gorm:"default:'DEFAULT'"`

	// products
	Products []*Product `json:"Products" gorm:"-"`

	// reseller Id
	ResellerID string `json:"ResellerId,omitempty"`
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

var customerTypeBillCurrencyPropEnum []interface{}

func init() {
	var res []string
	if err := json.Unmarshal([]byte(`["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VES","VND","VUV","WST","XAF","XAG","XAU","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMW","ZWL"]`), &res); err != nil {
		panic(err)
	}
	for _, v := range res {
		customerTypeBillCurrencyPropEnum = append(customerTypeBillCurrencyPropEnum, v)
	}
}

const (

	// CustomerBillCurrencyAED captures enum value "AED"
	CustomerBillCurrencyAED string = "AED"

	// CustomerBillCurrencyAFN captures enum value "AFN"
	CustomerBillCurrencyAFN string = "AFN"

	// CustomerBillCurrencyALL captures enum value "ALL"
	CustomerBillCurrencyALL string = "ALL"

	// CustomerBillCurrencyAMD captures enum value "AMD"
	CustomerBillCurrencyAMD string = "AMD"

	// CustomerBillCurrencyANG captures enum value "ANG"
	CustomerBillCurrencyANG string = "ANG"

	// CustomerBillCurrencyAOA captures enum value "AOA"
	CustomerBillCurrencyAOA string = "AOA"

	// CustomerBillCurrencyARS captures enum value "ARS"
	CustomerBillCurrencyARS string = "ARS"

	// CustomerBillCurrencyAUD captures enum value "AUD"
	CustomerBillCurrencyAUD string = "AUD"

	// CustomerBillCurrencyAWG captures enum value "AWG"
	CustomerBillCurrencyAWG string = "AWG"

	// CustomerBillCurrencyAZN captures enum value "AZN"
	CustomerBillCurrencyAZN string = "AZN"

	// CustomerBillCurrencyBAM captures enum value "BAM"
	CustomerBillCurrencyBAM string = "BAM"

	// CustomerBillCurrencyBBD captures enum value "BBD"
	CustomerBillCurrencyBBD string = "BBD"

	// CustomerBillCurrencyBDT captures enum value "BDT"
	CustomerBillCurrencyBDT string = "BDT"

	// CustomerBillCurrencyBGN captures enum value "BGN"
	CustomerBillCurrencyBGN string = "BGN"

	// CustomerBillCurrencyBHD captures enum value "BHD"
	CustomerBillCurrencyBHD string = "BHD"

	// CustomerBillCurrencyBIF captures enum value "BIF"
	CustomerBillCurrencyBIF string = "BIF"

	// CustomerBillCurrencyBMD captures enum value "BMD"
	CustomerBillCurrencyBMD string = "BMD"

	// CustomerBillCurrencyBND captures enum value "BND"
	CustomerBillCurrencyBND string = "BND"

	// CustomerBillCurrencyBOB captures enum value "BOB"
	CustomerBillCurrencyBOB string = "BOB"

	// CustomerBillCurrencyBOV captures enum value "BOV"
	CustomerBillCurrencyBOV string = "BOV"

	// CustomerBillCurrencyBRL captures enum value "BRL"
	CustomerBillCurrencyBRL string = "BRL"

	// CustomerBillCurrencyBSD captures enum value "BSD"
	CustomerBillCurrencyBSD string = "BSD"

	// CustomerBillCurrencyBTN captures enum value "BTN"
	CustomerBillCurrencyBTN string = "BTN"

	// CustomerBillCurrencyBWP captures enum value "BWP"
	CustomerBillCurrencyBWP string = "BWP"

	// CustomerBillCurrencyBYN captures enum value "BYN"
	CustomerBillCurrencyBYN string = "BYN"

	// CustomerBillCurrencyBZD captures enum value "BZD"
	CustomerBillCurrencyBZD string = "BZD"

	// CustomerBillCurrencyCAD captures enum value "CAD"
	CustomerBillCurrencyCAD string = "CAD"

	// CustomerBillCurrencyCDF captures enum value "CDF"
	CustomerBillCurrencyCDF string = "CDF"

	// CustomerBillCurrencyCHE captures enum value "CHE"
	CustomerBillCurrencyCHE string = "CHE"

	// CustomerBillCurrencyCHF captures enum value "CHF"
	CustomerBillCurrencyCHF string = "CHF"

	// CustomerBillCurrencyCHW captures enum value "CHW"
	CustomerBillCurrencyCHW string = "CHW"

	// CustomerBillCurrencyCLF captures enum value "CLF"
	CustomerBillCurrencyCLF string = "CLF"

	// CustomerBillCurrencyCLP captures enum value "CLP"
	CustomerBillCurrencyCLP string = "CLP"

	// CustomerBillCurrencyCNY captures enum value "CNY"
	CustomerBillCurrencyCNY string = "CNY"

	// CustomerBillCurrencyCOP captures enum value "COP"
	CustomerBillCurrencyCOP string = "COP"

	// CustomerBillCurrencyCOU captures enum value "COU"
	CustomerBillCurrencyCOU string = "COU"

	// CustomerBillCurrencyCRC captures enum value "CRC"
	CustomerBillCurrencyCRC string = "CRC"

	// CustomerBillCurrencyCUC captures enum value "CUC"
	CustomerBillCurrencyCUC string = "CUC"

	// CustomerBillCurrencyCUP captures enum value "CUP"
	CustomerBillCurrencyCUP string = "CUP"

	// CustomerBillCurrencyCVE captures enum value "CVE"
	CustomerBillCurrencyCVE string = "CVE"

	// CustomerBillCurrencyCZK captures enum value "CZK"
	CustomerBillCurrencyCZK string = "CZK"

	// CustomerBillCurrencyDJF captures enum value "DJF"
	CustomerBillCurrencyDJF string = "DJF"

	// CustomerBillCurrencyDKK captures enum value "DKK"
	CustomerBillCurrencyDKK string = "DKK"

	// CustomerBillCurrencyDOP captures enum value "DOP"
	CustomerBillCurrencyDOP string = "DOP"

	// CustomerBillCurrencyDZD captures enum value "DZD"
	CustomerBillCurrencyDZD string = "DZD"

	// CustomerBillCurrencyEGP captures enum value "EGP"
	CustomerBillCurrencyEGP string = "EGP"

	// CustomerBillCurrencyERN captures enum value "ERN"
	CustomerBillCurrencyERN string = "ERN"

	// CustomerBillCurrencyETB captures enum value "ETB"
	CustomerBillCurrencyETB string = "ETB"

	// CustomerBillCurrencyEUR captures enum value "EUR"
	CustomerBillCurrencyEUR string = "EUR"

	// CustomerBillCurrencyFJD captures enum value "FJD"
	CustomerBillCurrencyFJD string = "FJD"

	// CustomerBillCurrencyFKP captures enum value "FKP"
	CustomerBillCurrencyFKP string = "FKP"

	// CustomerBillCurrencyGBP captures enum value "GBP"
	CustomerBillCurrencyGBP string = "GBP"

	// CustomerBillCurrencyGEL captures enum value "GEL"
	CustomerBillCurrencyGEL string = "GEL"

	// CustomerBillCurrencyGHS captures enum value "GHS"
	CustomerBillCurrencyGHS string = "GHS"

	// CustomerBillCurrencyGIP captures enum value "GIP"
	CustomerBillCurrencyGIP string = "GIP"

	// CustomerBillCurrencyGMD captures enum value "GMD"
	CustomerBillCurrencyGMD string = "GMD"

	// CustomerBillCurrencyGNF captures enum value "GNF"
	CustomerBillCurrencyGNF string = "GNF"

	// CustomerBillCurrencyGTQ captures enum value "GTQ"
	CustomerBillCurrencyGTQ string = "GTQ"

	// CustomerBillCurrencyGYD captures enum value "GYD"
	CustomerBillCurrencyGYD string = "GYD"

	// CustomerBillCurrencyHKD captures enum value "HKD"
	CustomerBillCurrencyHKD string = "HKD"

	// CustomerBillCurrencyHNL captures enum value "HNL"
	CustomerBillCurrencyHNL string = "HNL"

	// CustomerBillCurrencyHRK captures enum value "HRK"
	CustomerBillCurrencyHRK string = "HRK"

	// CustomerBillCurrencyHTG captures enum value "HTG"
	CustomerBillCurrencyHTG string = "HTG"

	// CustomerBillCurrencyHUF captures enum value "HUF"
	CustomerBillCurrencyHUF string = "HUF"

	// CustomerBillCurrencyIDR captures enum value "IDR"
	CustomerBillCurrencyIDR string = "IDR"

	// CustomerBillCurrencyILS captures enum value "ILS"
	CustomerBillCurrencyILS string = "ILS"

	// CustomerBillCurrencyINR captures enum value "INR"
	CustomerBillCurrencyINR string = "INR"

	// CustomerBillCurrencyIQD captures enum value "IQD"
	CustomerBillCurrencyIQD string = "IQD"

	// CustomerBillCurrencyIRR captures enum value "IRR"
	CustomerBillCurrencyIRR string = "IRR"

	// CustomerBillCurrencyISK captures enum value "ISK"
	CustomerBillCurrencyISK string = "ISK"

	// CustomerBillCurrencyJMD captures enum value "JMD"
	CustomerBillCurrencyJMD string = "JMD"

	// CustomerBillCurrencyJOD captures enum value "JOD"
	CustomerBillCurrencyJOD string = "JOD"

	// CustomerBillCurrencyJPY captures enum value "JPY"
	CustomerBillCurrencyJPY string = "JPY"

	// CustomerBillCurrencyKES captures enum value "KES"
	CustomerBillCurrencyKES string = "KES"

	// CustomerBillCurrencyKGS captures enum value "KGS"
	CustomerBillCurrencyKGS string = "KGS"

	// CustomerBillCurrencyKHR captures enum value "KHR"
	CustomerBillCurrencyKHR string = "KHR"

	// CustomerBillCurrencyKMF captures enum value "KMF"
	CustomerBillCurrencyKMF string = "KMF"

	// CustomerBillCurrencyKPW captures enum value "KPW"
	CustomerBillCurrencyKPW string = "KPW"

	// CustomerBillCurrencyKRW captures enum value "KRW"
	CustomerBillCurrencyKRW string = "KRW"

	// CustomerBillCurrencyKWD captures enum value "KWD"
	CustomerBillCurrencyKWD string = "KWD"

	// CustomerBillCurrencyKYD captures enum value "KYD"
	CustomerBillCurrencyKYD string = "KYD"

	// CustomerBillCurrencyKZT captures enum value "KZT"
	CustomerBillCurrencyKZT string = "KZT"

	// CustomerBillCurrencyLAK captures enum value "LAK"
	CustomerBillCurrencyLAK string = "LAK"

	// CustomerBillCurrencyLBP captures enum value "LBP"
	CustomerBillCurrencyLBP string = "LBP"

	// CustomerBillCurrencyLKR captures enum value "LKR"
	CustomerBillCurrencyLKR string = "LKR"

	// CustomerBillCurrencyLRD captures enum value "LRD"
	CustomerBillCurrencyLRD string = "LRD"

	// CustomerBillCurrencyLSL captures enum value "LSL"
	CustomerBillCurrencyLSL string = "LSL"

	// CustomerBillCurrencyLYD captures enum value "LYD"
	CustomerBillCurrencyLYD string = "LYD"

	// CustomerBillCurrencyMAD captures enum value "MAD"
	CustomerBillCurrencyMAD string = "MAD"

	// CustomerBillCurrencyMDL captures enum value "MDL"
	CustomerBillCurrencyMDL string = "MDL"

	// CustomerBillCurrencyMGA captures enum value "MGA"
	CustomerBillCurrencyMGA string = "MGA"

	// CustomerBillCurrencyMKD captures enum value "MKD"
	CustomerBillCurrencyMKD string = "MKD"

	// CustomerBillCurrencyMMK captures enum value "MMK"
	CustomerBillCurrencyMMK string = "MMK"

	// CustomerBillCurrencyMNT captures enum value "MNT"
	CustomerBillCurrencyMNT string = "MNT"

	// CustomerBillCurrencyMOP captures enum value "MOP"
	CustomerBillCurrencyMOP string = "MOP"

	// CustomerBillCurrencyMRU captures enum value "MRU"
	CustomerBillCurrencyMRU string = "MRU"

	// CustomerBillCurrencyMUR captures enum value "MUR"
	CustomerBillCurrencyMUR string = "MUR"

	// CustomerBillCurrencyMVR captures enum value "MVR"
	CustomerBillCurrencyMVR string = "MVR"

	// CustomerBillCurrencyMWK captures enum value "MWK"
	CustomerBillCurrencyMWK string = "MWK"

	// CustomerBillCurrencyMXN captures enum value "MXN"
	CustomerBillCurrencyMXN string = "MXN"

	// CustomerBillCurrencyMXV captures enum value "MXV"
	CustomerBillCurrencyMXV string = "MXV"

	// CustomerBillCurrencyMYR captures enum value "MYR"
	CustomerBillCurrencyMYR string = "MYR"

	// CustomerBillCurrencyMZN captures enum value "MZN"
	CustomerBillCurrencyMZN string = "MZN"

	// CustomerBillCurrencyNAD captures enum value "NAD"
	CustomerBillCurrencyNAD string = "NAD"

	// CustomerBillCurrencyNGN captures enum value "NGN"
	CustomerBillCurrencyNGN string = "NGN"

	// CustomerBillCurrencyNIO captures enum value "NIO"
	CustomerBillCurrencyNIO string = "NIO"

	// CustomerBillCurrencyNOK captures enum value "NOK"
	CustomerBillCurrencyNOK string = "NOK"

	// CustomerBillCurrencyNPR captures enum value "NPR"
	CustomerBillCurrencyNPR string = "NPR"

	// CustomerBillCurrencyNZD captures enum value "NZD"
	CustomerBillCurrencyNZD string = "NZD"

	// CustomerBillCurrencyOMR captures enum value "OMR"
	CustomerBillCurrencyOMR string = "OMR"

	// CustomerBillCurrencyPAB captures enum value "PAB"
	CustomerBillCurrencyPAB string = "PAB"

	// CustomerBillCurrencyPEN captures enum value "PEN"
	CustomerBillCurrencyPEN string = "PEN"

	// CustomerBillCurrencyPGK captures enum value "PGK"
	CustomerBillCurrencyPGK string = "PGK"

	// CustomerBillCurrencyPHP captures enum value "PHP"
	CustomerBillCurrencyPHP string = "PHP"

	// CustomerBillCurrencyPKR captures enum value "PKR"
	CustomerBillCurrencyPKR string = "PKR"

	// CustomerBillCurrencyPLN captures enum value "PLN"
	CustomerBillCurrencyPLN string = "PLN"

	// CustomerBillCurrencyPYG captures enum value "PYG"
	CustomerBillCurrencyPYG string = "PYG"

	// CustomerBillCurrencyQAR captures enum value "QAR"
	CustomerBillCurrencyQAR string = "QAR"

	// CustomerBillCurrencyRON captures enum value "RON"
	CustomerBillCurrencyRON string = "RON"

	// CustomerBillCurrencyRSD captures enum value "RSD"
	CustomerBillCurrencyRSD string = "RSD"

	// CustomerBillCurrencyRUB captures enum value "RUB"
	CustomerBillCurrencyRUB string = "RUB"

	// CustomerBillCurrencyRWF captures enum value "RWF"
	CustomerBillCurrencyRWF string = "RWF"

	// CustomerBillCurrencySAR captures enum value "SAR"
	CustomerBillCurrencySAR string = "SAR"

	// CustomerBillCurrencySBD captures enum value "SBD"
	CustomerBillCurrencySBD string = "SBD"

	// CustomerBillCurrencySCR captures enum value "SCR"
	CustomerBillCurrencySCR string = "SCR"

	// CustomerBillCurrencySDG captures enum value "SDG"
	CustomerBillCurrencySDG string = "SDG"

	// CustomerBillCurrencySEK captures enum value "SEK"
	CustomerBillCurrencySEK string = "SEK"

	// CustomerBillCurrencySGD captures enum value "SGD"
	CustomerBillCurrencySGD string = "SGD"

	// CustomerBillCurrencySHP captures enum value "SHP"
	CustomerBillCurrencySHP string = "SHP"

	// CustomerBillCurrencySLL captures enum value "SLL"
	CustomerBillCurrencySLL string = "SLL"

	// CustomerBillCurrencySOS captures enum value "SOS"
	CustomerBillCurrencySOS string = "SOS"

	// CustomerBillCurrencySRD captures enum value "SRD"
	CustomerBillCurrencySRD string = "SRD"

	// CustomerBillCurrencySSP captures enum value "SSP"
	CustomerBillCurrencySSP string = "SSP"

	// CustomerBillCurrencySTN captures enum value "STN"
	CustomerBillCurrencySTN string = "STN"

	// CustomerBillCurrencySVC captures enum value "SVC"
	CustomerBillCurrencySVC string = "SVC"

	// CustomerBillCurrencySYP captures enum value "SYP"
	CustomerBillCurrencySYP string = "SYP"

	// CustomerBillCurrencySZL captures enum value "SZL"
	CustomerBillCurrencySZL string = "SZL"

	// CustomerBillCurrencyTHB captures enum value "THB"
	CustomerBillCurrencyTHB string = "THB"

	// CustomerBillCurrencyTJS captures enum value "TJS"
	CustomerBillCurrencyTJS string = "TJS"

	// CustomerBillCurrencyTMT captures enum value "TMT"
	CustomerBillCurrencyTMT string = "TMT"

	// CustomerBillCurrencyTND captures enum value "TND"
	CustomerBillCurrencyTND string = "TND"

	// CustomerBillCurrencyTOP captures enum value "TOP"
	CustomerBillCurrencyTOP string = "TOP"

	// CustomerBillCurrencyTRY captures enum value "TRY"
	CustomerBillCurrencyTRY string = "TRY"

	// CustomerBillCurrencyTTD captures enum value "TTD"
	CustomerBillCurrencyTTD string = "TTD"

	// CustomerBillCurrencyTWD captures enum value "TWD"
	CustomerBillCurrencyTWD string = "TWD"

	// CustomerBillCurrencyTZS captures enum value "TZS"
	CustomerBillCurrencyTZS string = "TZS"

	// CustomerBillCurrencyUAH captures enum value "UAH"
	CustomerBillCurrencyUAH string = "UAH"

	// CustomerBillCurrencyUGX captures enum value "UGX"
	CustomerBillCurrencyUGX string = "UGX"

	// CustomerBillCurrencyUSD captures enum value "USD"
	CustomerBillCurrencyUSD string = "USD"

	// CustomerBillCurrencyUSN captures enum value "USN"
	CustomerBillCurrencyUSN string = "USN"

	// CustomerBillCurrencyUYI captures enum value "UYI"
	CustomerBillCurrencyUYI string = "UYI"

	// CustomerBillCurrencyUYU captures enum value "UYU"
	CustomerBillCurrencyUYU string = "UYU"

	// CustomerBillCurrencyUYW captures enum value "UYW"
	CustomerBillCurrencyUYW string = "UYW"

	// CustomerBillCurrencyUZS captures enum value "UZS"
	CustomerBillCurrencyUZS string = "UZS"

	// CustomerBillCurrencyVES captures enum value "VES"
	CustomerBillCurrencyVES string = "VES"

	// CustomerBillCurrencyVND captures enum value "VND"
	CustomerBillCurrencyVND string = "VND"

	// CustomerBillCurrencyVUV captures enum value "VUV"
	CustomerBillCurrencyVUV string = "VUV"

	// CustomerBillCurrencyWST captures enum value "WST"
	CustomerBillCurrencyWST string = "WST"

	// CustomerBillCurrencyXAF captures enum value "XAF"
	CustomerBillCurrencyXAF string = "XAF"

	// CustomerBillCurrencyXAG captures enum value "XAG"
	CustomerBillCurrencyXAG string = "XAG"

	// CustomerBillCurrencyXAU captures enum value "XAU"
	CustomerBillCurrencyXAU string = "XAU"

	// CustomerBillCurrencyXBA captures enum value "XBA"
	CustomerBillCurrencyXBA string = "XBA"

	// CustomerBillCurrencyXBB captures enum value "XBB"
	CustomerBillCurrencyXBB string = "XBB"

	// CustomerBillCurrencyXBC captures enum value "XBC"
	CustomerBillCurrencyXBC string = "XBC"

	// CustomerBillCurrencyXBD captures enum value "XBD"
	CustomerBillCurrencyXBD string = "XBD"

	// CustomerBillCurrencyXCD captures enum value "XCD"
	CustomerBillCurrencyXCD string = "XCD"

	// CustomerBillCurrencyXDR captures enum value "XDR"
	CustomerBillCurrencyXDR string = "XDR"

	// CustomerBillCurrencyXOF captures enum value "XOF"
	CustomerBillCurrencyXOF string = "XOF"

	// CustomerBillCurrencyXPD captures enum value "XPD"
	CustomerBillCurrencyXPD string = "XPD"

	// CustomerBillCurrencyXPF captures enum value "XPF"
	CustomerBillCurrencyXPF string = "XPF"

	// CustomerBillCurrencyXPT captures enum value "XPT"
	CustomerBillCurrencyXPT string = "XPT"

	// CustomerBillCurrencyXSU captures enum value "XSU"
	CustomerBillCurrencyXSU string = "XSU"

	// CustomerBillCurrencyXTS captures enum value "XTS"
	CustomerBillCurrencyXTS string = "XTS"

	// CustomerBillCurrencyXUA captures enum value "XUA"
	CustomerBillCurrencyXUA string = "XUA"

	// CustomerBillCurrencyXXX captures enum value "XXX"
	CustomerBillCurrencyXXX string = "XXX"

	// CustomerBillCurrencyYER captures enum value "YER"
	CustomerBillCurrencyYER string = "YER"

	// CustomerBillCurrencyZAR captures enum value "ZAR"
	CustomerBillCurrencyZAR string = "ZAR"

	// CustomerBillCurrencyZMW captures enum value "ZMW"
	CustomerBillCurrencyZMW string = "ZMW"

	// CustomerBillCurrencyZWL captures enum value "ZWL"
	CustomerBillCurrencyZWL string = "ZWL"
)

// prop value enum
func (m *Customer) validateBillCurrencyEnum(path, location string, value string) error {
	if err := validate.EnumCase(path, location, value, customerTypeBillCurrencyPropEnum, true); err != nil {
		return err
	}
	return nil
}

func (m *Customer) validateBillCurrency(formats strfmt.Registry) error {

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

	// value enum
	if err := m.validateBillCurrencyEnum("BillCurrency", "body", *m.BillCurrency); err != nil {
		return err
	}

	return nil
}

var customerTypeBillPeriodPropEnum []interface{}

func init() {
	var res []string
	if err := json.Unmarshal([]byte(`["daily","weekly","bi-weekly","monthly","bi-monthly","quarterly","semi-annually","annually"]`), &res); err != nil {
		panic(err)
	}
	for _, v := range res {
		customerTypeBillPeriodPropEnum = append(customerTypeBillPeriodPropEnum, v)
	}
}

const (

	// CustomerBillPeriodDaily captures enum value "daily"
	CustomerBillPeriodDaily string = "daily"

	// CustomerBillPeriodWeekly captures enum value "weekly"
	CustomerBillPeriodWeekly string = "weekly"

	// CustomerBillPeriodBiWeekly captures enum value "bi-weekly"
	CustomerBillPeriodBiWeekly string = "bi-weekly"

	// CustomerBillPeriodMonthly captures enum value "monthly"
	CustomerBillPeriodMonthly string = "monthly"

	// CustomerBillPeriodBiMonthly captures enum value "bi-monthly"
	CustomerBillPeriodBiMonthly string = "bi-monthly"

	// CustomerBillPeriodQuarterly captures enum value "quarterly"
	CustomerBillPeriodQuarterly string = "quarterly"

	// CustomerBillPeriodSemiAnnually captures enum value "semi-annually"
	CustomerBillPeriodSemiAnnually string = "semi-annually"

	// CustomerBillPeriodAnnually captures enum value "annually"
	CustomerBillPeriodAnnually string = "annually"
)

// prop value enum
func (m *Customer) validateBillPeriodEnum(path, location string, value string) error {
	if err := validate.EnumCase(path, location, value, customerTypeBillPeriodPropEnum, true); err != nil {
		return err
	}
	return nil
}

func (m *Customer) validateBillPeriod(formats strfmt.Registry) error {

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

	// value enum
	if err := m.validateBillPeriodEnum("BillPeriod", "body", *m.BillPeriod); err != nil {
		return err
	}

	return nil
}

func (m *Customer) validateCancelDate(formats strfmt.Registry) error {

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

	if err := validate.FormatOf("CancelDate", "body", "date", m.CancelDate.String(), formats); err != nil {
		return err
	}

	return nil
}

func (m *Customer) validateContractEnd(formats strfmt.Registry) error {

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

	if err := validate.FormatOf("ContractEnd", "body", "date", m.ContractEnd.String(), formats); err != nil {
		return err
	}

	return nil
}

func (m *Customer) validateContractStart(formats strfmt.Registry) error {

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

	if err := validate.FormatOf("ContractStart", "body", "date", m.ContractStart.String(), formats); err != nil {
		return err
	}

	return nil
}

func (m *Customer) validateDeletedAt(formats strfmt.Registry) error {

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

	if err := validate.FormatOf("DeletedAt", "body", "datetime", m.DeletedAt.String(), formats); err != nil {
		return err
	}

	return nil
}

func (m *Customer) validateEmailBcc(formats strfmt.Registry) error {

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

	if err := validate.FormatOf("EmailBcc", "body", "email", m.EmailBcc.String(), formats); err != nil {
		return err
	}

	return nil
}

func (m *Customer) validateEmailCc(formats strfmt.Registry) error {

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

	if err := validate.FormatOf("EmailCc", "body", "email", m.EmailCc.String(), formats); err != nil {
		return err
	}

	return nil
}

func (m *Customer) validateEmailTo(formats strfmt.Registry) error {

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

	if err := validate.FormatOf("EmailTo", "body", "email", m.EmailTo.String(), formats); err != nil {
		return err
	}

	return nil
}

var customerTypeInvoiceModePropEnum []interface{}

func init() {
	var res []string
	if err := json.Unmarshal([]byte(`["email","post"]`), &res); err != nil {
		panic(err)
	}
	for _, v := range res {
		customerTypeInvoiceModePropEnum = append(customerTypeInvoiceModePropEnum, v)
	}
}

const (

	// CustomerInvoiceModeEmail captures enum value "email"
	CustomerInvoiceModeEmail string = "email"

	// CustomerInvoiceModePost captures enum value "post"
	CustomerInvoiceModePost string = "post"
)

// prop value enum
func (m *Customer) validateInvoiceModeEnum(path, location string, value string) error {
	if err := validate.EnumCase(path, location, value, customerTypeInvoiceModePropEnum, true); err != nil {
		return err
	}
	return nil
}

func (m *Customer) validateInvoiceMode(formats strfmt.Registry) error {

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

	// value enum
	if err := m.validateInvoiceModeEnum("InvoiceMode", "body", *m.InvoiceMode); err != nil {
		return err
	}

	return nil
}

var customerTypeLanguagePropEnum []interface{}

func init() {
	var res []string
	if err := json.Unmarshal([]byte(`["AA","AB","AE","AF","AK","AM","AN","AR","AS","AV","AY","AZ","BA","BE","BG","BH","BI","BM","BN","BO","BR","BS","CA","CE","CH","CO","CR","CS","CU","CV","CY","DA","DE","DV","DZ","EE","EL","EN","EO","ES","ET","EU","FA","FF","FI","FJ","FO","FR","FY","GA","GD","GL","GN","GU","GV","HA","HE","HI","HO","HR","HT","HU","HY","HZ","IA","ID","IE","IG","II","IK","IO","IS","IT","IU","JA","JV","KA","KG","KI","KJ","KK","KL","KM","KN","KO","KR","KS","KU","KV","KW","KY","LA","LB","LG","LI","LN","LO","LT","LU","LV","MG","MH","MI","MK","ML","MN","MR","MS","MT","MY","NA","NB","ND","NE","NG","NL","NN","NO","NR","NV","NY","OC","OJ","OM","OR","OS","PA","PI","PL","PS","PT","QU","RM","RN","RO","RU","RW","SA","SC","SD","SE","SG","SI","SK","SL","SM","SN","SO","SQ","SR","SS","ST","SU","SV","SW","TA","TE","TG","TH","TI","TK","TL","TN","TO","TR","TS","TT","TW","TY","UG","UK","UR","UZ","VE","VI","VO","WA","WO","XH","YI","YO","ZA","ZH","ZU"]`), &res); err != nil {
		panic(err)
	}
	for _, v := range res {
		customerTypeLanguagePropEnum = append(customerTypeLanguagePropEnum, v)
	}
}

const (

	// CustomerLanguageAA captures enum value "AA"
	CustomerLanguageAA string = "AA"

	// CustomerLanguageAB captures enum value "AB"
	CustomerLanguageAB string = "AB"

	// CustomerLanguageAE captures enum value "AE"
	CustomerLanguageAE string = "AE"

	// CustomerLanguageAF captures enum value "AF"
	CustomerLanguageAF string = "AF"

	// CustomerLanguageAK captures enum value "AK"
	CustomerLanguageAK string = "AK"

	// CustomerLanguageAM captures enum value "AM"
	CustomerLanguageAM string = "AM"

	// CustomerLanguageAN captures enum value "AN"
	CustomerLanguageAN string = "AN"

	// CustomerLanguageAR captures enum value "AR"
	CustomerLanguageAR string = "AR"

	// CustomerLanguageAS captures enum value "AS"
	CustomerLanguageAS string = "AS"

	// CustomerLanguageAV captures enum value "AV"
	CustomerLanguageAV string = "AV"

	// CustomerLanguageAY captures enum value "AY"
	CustomerLanguageAY string = "AY"

	// CustomerLanguageAZ captures enum value "AZ"
	CustomerLanguageAZ string = "AZ"

	// CustomerLanguageBA captures enum value "BA"
	CustomerLanguageBA string = "BA"

	// CustomerLanguageBE captures enum value "BE"
	CustomerLanguageBE string = "BE"

	// CustomerLanguageBG captures enum value "BG"
	CustomerLanguageBG string = "BG"

	// CustomerLanguageBH captures enum value "BH"
	CustomerLanguageBH string = "BH"

	// CustomerLanguageBI captures enum value "BI"
	CustomerLanguageBI string = "BI"

	// CustomerLanguageBM captures enum value "BM"
	CustomerLanguageBM string = "BM"

	// CustomerLanguageBN captures enum value "BN"
	CustomerLanguageBN string = "BN"

	// CustomerLanguageBO captures enum value "BO"
	CustomerLanguageBO string = "BO"

	// CustomerLanguageBR captures enum value "BR"
	CustomerLanguageBR string = "BR"

	// CustomerLanguageBS captures enum value "BS"
	CustomerLanguageBS string = "BS"

	// CustomerLanguageCA captures enum value "CA"
	CustomerLanguageCA string = "CA"

	// CustomerLanguageCE captures enum value "CE"
	CustomerLanguageCE string = "CE"

	// CustomerLanguageCH captures enum value "CH"
	CustomerLanguageCH string = "CH"

	// CustomerLanguageCO captures enum value "CO"
	CustomerLanguageCO string = "CO"

	// CustomerLanguageCR captures enum value "CR"
	CustomerLanguageCR string = "CR"

	// CustomerLanguageCS captures enum value "CS"
	CustomerLanguageCS string = "CS"

	// CustomerLanguageCU captures enum value "CU"
	CustomerLanguageCU string = "CU"

	// CustomerLanguageCV captures enum value "CV"
	CustomerLanguageCV string = "CV"

	// CustomerLanguageCY captures enum value "CY"
	CustomerLanguageCY string = "CY"

	// CustomerLanguageDA captures enum value "DA"
	CustomerLanguageDA string = "DA"

	// CustomerLanguageDE captures enum value "DE"
	CustomerLanguageDE string = "DE"

	// CustomerLanguageDV captures enum value "DV"
	CustomerLanguageDV string = "DV"

	// CustomerLanguageDZ captures enum value "DZ"
	CustomerLanguageDZ string = "DZ"

	// CustomerLanguageEE captures enum value "EE"
	CustomerLanguageEE string = "EE"

	// CustomerLanguageEL captures enum value "EL"
	CustomerLanguageEL string = "EL"

	// CustomerLanguageEN captures enum value "EN"
	CustomerLanguageEN string = "EN"

	// CustomerLanguageEO captures enum value "EO"
	CustomerLanguageEO string = "EO"

	// CustomerLanguageES captures enum value "ES"
	CustomerLanguageES string = "ES"

	// CustomerLanguageET captures enum value "ET"
	CustomerLanguageET string = "ET"

	// CustomerLanguageEU captures enum value "EU"
	CustomerLanguageEU string = "EU"

	// CustomerLanguageFA captures enum value "FA"
	CustomerLanguageFA string = "FA"

	// CustomerLanguageFF captures enum value "FF"
	CustomerLanguageFF string = "FF"

	// CustomerLanguageFI captures enum value "FI"
	CustomerLanguageFI string = "FI"

	// CustomerLanguageFJ captures enum value "FJ"
	CustomerLanguageFJ string = "FJ"

	// CustomerLanguageFO captures enum value "FO"
	CustomerLanguageFO string = "FO"

	// CustomerLanguageFR captures enum value "FR"
	CustomerLanguageFR string = "FR"

	// CustomerLanguageFY captures enum value "FY"
	CustomerLanguageFY string = "FY"

	// CustomerLanguageGA captures enum value "GA"
	CustomerLanguageGA string = "GA"

	// CustomerLanguageGD captures enum value "GD"
	CustomerLanguageGD string = "GD"

	// CustomerLanguageGL captures enum value "GL"
	CustomerLanguageGL string = "GL"

	// CustomerLanguageGN captures enum value "GN"
	CustomerLanguageGN string = "GN"

	// CustomerLanguageGU captures enum value "GU"
	CustomerLanguageGU string = "GU"

	// CustomerLanguageGV captures enum value "GV"
	CustomerLanguageGV string = "GV"

	// CustomerLanguageHA captures enum value "HA"
	CustomerLanguageHA string = "HA"

	// CustomerLanguageHE captures enum value "HE"
	CustomerLanguageHE string = "HE"

	// CustomerLanguageHI captures enum value "HI"
	CustomerLanguageHI string = "HI"

	// CustomerLanguageHO captures enum value "HO"
	CustomerLanguageHO string = "HO"

	// CustomerLanguageHR captures enum value "HR"
	CustomerLanguageHR string = "HR"

	// CustomerLanguageHT captures enum value "HT"
	CustomerLanguageHT string = "HT"

	// CustomerLanguageHU captures enum value "HU"
	CustomerLanguageHU string = "HU"

	// CustomerLanguageHY captures enum value "HY"
	CustomerLanguageHY string = "HY"

	// CustomerLanguageHZ captures enum value "HZ"
	CustomerLanguageHZ string = "HZ"

	// CustomerLanguageIA captures enum value "IA"
	CustomerLanguageIA string = "IA"

	// CustomerLanguageID captures enum value "ID"
	CustomerLanguageID string = "ID"

	// CustomerLanguageIE captures enum value "IE"
	CustomerLanguageIE string = "IE"

	// CustomerLanguageIG captures enum value "IG"
	CustomerLanguageIG string = "IG"

	// CustomerLanguageII captures enum value "II"
	CustomerLanguageII string = "II"

	// CustomerLanguageIK captures enum value "IK"
	CustomerLanguageIK string = "IK"

	// CustomerLanguageIO captures enum value "IO"
	CustomerLanguageIO string = "IO"

	// CustomerLanguageIS captures enum value "IS"
	CustomerLanguageIS string = "IS"

	// CustomerLanguageIT captures enum value "IT"
	CustomerLanguageIT string = "IT"

	// CustomerLanguageIU captures enum value "IU"
	CustomerLanguageIU string = "IU"

	// CustomerLanguageJA captures enum value "JA"
	CustomerLanguageJA string = "JA"

	// CustomerLanguageJV captures enum value "JV"
	CustomerLanguageJV string = "JV"

	// CustomerLanguageKA captures enum value "KA"
	CustomerLanguageKA string = "KA"

	// CustomerLanguageKG captures enum value "KG"
	CustomerLanguageKG string = "KG"

	// CustomerLanguageKI captures enum value "KI"
	CustomerLanguageKI string = "KI"

	// CustomerLanguageKJ captures enum value "KJ"
	CustomerLanguageKJ string = "KJ"

	// CustomerLanguageKK captures enum value "KK"
	CustomerLanguageKK string = "KK"

	// CustomerLanguageKL captures enum value "KL"
	CustomerLanguageKL string = "KL"

	// CustomerLanguageKM captures enum value "KM"
	CustomerLanguageKM string = "KM"

	// CustomerLanguageKN captures enum value "KN"
	CustomerLanguageKN string = "KN"

	// CustomerLanguageKO captures enum value "KO"
	CustomerLanguageKO string = "KO"

	// CustomerLanguageKR captures enum value "KR"
	CustomerLanguageKR string = "KR"

	// CustomerLanguageKS captures enum value "KS"
	CustomerLanguageKS string = "KS"

	// CustomerLanguageKU captures enum value "KU"
	CustomerLanguageKU string = "KU"

	// CustomerLanguageKV captures enum value "KV"
	CustomerLanguageKV string = "KV"

	// CustomerLanguageKW captures enum value "KW"
	CustomerLanguageKW string = "KW"

	// CustomerLanguageKY captures enum value "KY"
	CustomerLanguageKY string = "KY"

	// CustomerLanguageLA captures enum value "LA"
	CustomerLanguageLA string = "LA"

	// CustomerLanguageLB captures enum value "LB"
	CustomerLanguageLB string = "LB"

	// CustomerLanguageLG captures enum value "LG"
	CustomerLanguageLG string = "LG"

	// CustomerLanguageLI captures enum value "LI"
	CustomerLanguageLI string = "LI"

	// CustomerLanguageLN captures enum value "LN"
	CustomerLanguageLN string = "LN"

	// CustomerLanguageLO captures enum value "LO"
	CustomerLanguageLO string = "LO"

	// CustomerLanguageLT captures enum value "LT"
	CustomerLanguageLT string = "LT"

	// CustomerLanguageLU captures enum value "LU"
	CustomerLanguageLU string = "LU"

	// CustomerLanguageLV captures enum value "LV"
	CustomerLanguageLV string = "LV"

	// CustomerLanguageMG captures enum value "MG"
	CustomerLanguageMG string = "MG"

	// CustomerLanguageMH captures enum value "MH"
	CustomerLanguageMH string = "MH"

	// CustomerLanguageMI captures enum value "MI"
	CustomerLanguageMI string = "MI"

	// CustomerLanguageMK captures enum value "MK"
	CustomerLanguageMK string = "MK"

	// CustomerLanguageML captures enum value "ML"
	CustomerLanguageML string = "ML"

	// CustomerLanguageMN captures enum value "MN"
	CustomerLanguageMN string = "MN"

	// CustomerLanguageMR captures enum value "MR"
	CustomerLanguageMR string = "MR"

	// CustomerLanguageMS captures enum value "MS"
	CustomerLanguageMS string = "MS"

	// CustomerLanguageMT captures enum value "MT"
	CustomerLanguageMT string = "MT"

	// CustomerLanguageMY captures enum value "MY"
	CustomerLanguageMY string = "MY"

	// CustomerLanguageNA captures enum value "NA"
	CustomerLanguageNA string = "NA"

	// CustomerLanguageNB captures enum value "NB"
	CustomerLanguageNB string = "NB"

	// CustomerLanguageND captures enum value "ND"
	CustomerLanguageND string = "ND"

	// CustomerLanguageNE captures enum value "NE"
	CustomerLanguageNE string = "NE"

	// CustomerLanguageNG captures enum value "NG"
	CustomerLanguageNG string = "NG"

	// CustomerLanguageNL captures enum value "NL"
	CustomerLanguageNL string = "NL"

	// CustomerLanguageNN captures enum value "NN"
	CustomerLanguageNN string = "NN"

	// CustomerLanguageNO captures enum value "NO"
	CustomerLanguageNO string = "NO"

	// CustomerLanguageNR captures enum value "NR"
	CustomerLanguageNR string = "NR"

	// CustomerLanguageNV captures enum value "NV"
	CustomerLanguageNV string = "NV"

	// CustomerLanguageNY captures enum value "NY"
	CustomerLanguageNY string = "NY"

	// CustomerLanguageOC captures enum value "OC"
	CustomerLanguageOC string = "OC"

	// CustomerLanguageOJ captures enum value "OJ"
	CustomerLanguageOJ string = "OJ"

	// CustomerLanguageOM captures enum value "OM"
	CustomerLanguageOM string = "OM"

	// CustomerLanguageOR captures enum value "OR"
	CustomerLanguageOR string = "OR"

	// CustomerLanguageOS captures enum value "OS"
	CustomerLanguageOS string = "OS"

	// CustomerLanguagePA captures enum value "PA"
	CustomerLanguagePA string = "PA"

	// CustomerLanguagePI captures enum value "PI"
	CustomerLanguagePI string = "PI"

	// CustomerLanguagePL captures enum value "PL"
	CustomerLanguagePL string = "PL"

	// CustomerLanguagePS captures enum value "PS"
	CustomerLanguagePS string = "PS"

	// CustomerLanguagePT captures enum value "PT"
	CustomerLanguagePT string = "PT"

	// CustomerLanguageQU captures enum value "QU"
	CustomerLanguageQU string = "QU"

	// CustomerLanguageRM captures enum value "RM"
	CustomerLanguageRM string = "RM"

	// CustomerLanguageRN captures enum value "RN"
	CustomerLanguageRN string = "RN"

	// CustomerLanguageRO captures enum value "RO"
	CustomerLanguageRO string = "RO"

	// CustomerLanguageRU captures enum value "RU"
	CustomerLanguageRU string = "RU"

	// CustomerLanguageRW captures enum value "RW"
	CustomerLanguageRW string = "RW"

	// CustomerLanguageSA captures enum value "SA"
	CustomerLanguageSA string = "SA"

	// CustomerLanguageSC captures enum value "SC"
	CustomerLanguageSC string = "SC"

	// CustomerLanguageSD captures enum value "SD"
	CustomerLanguageSD string = "SD"

	// CustomerLanguageSE captures enum value "SE"
	CustomerLanguageSE string = "SE"

	// CustomerLanguageSG captures enum value "SG"
	CustomerLanguageSG string = "SG"

	// CustomerLanguageSI captures enum value "SI"
	CustomerLanguageSI string = "SI"

	// CustomerLanguageSK captures enum value "SK"
	CustomerLanguageSK string = "SK"

	// CustomerLanguageSL captures enum value "SL"
	CustomerLanguageSL string = "SL"

	// CustomerLanguageSM captures enum value "SM"
	CustomerLanguageSM string = "SM"

	// CustomerLanguageSN captures enum value "SN"
	CustomerLanguageSN string = "SN"

	// CustomerLanguageSO captures enum value "SO"
	CustomerLanguageSO string = "SO"

	// CustomerLanguageSQ captures enum value "SQ"
	CustomerLanguageSQ string = "SQ"

	// CustomerLanguageSR captures enum value "SR"
	CustomerLanguageSR string = "SR"

	// CustomerLanguageSS captures enum value "SS"
	CustomerLanguageSS string = "SS"

	// CustomerLanguageST captures enum value "ST"
	CustomerLanguageST string = "ST"

	// CustomerLanguageSU captures enum value "SU"
	CustomerLanguageSU string = "SU"

	// CustomerLanguageSV captures enum value "SV"
	CustomerLanguageSV string = "SV"

	// CustomerLanguageSW captures enum value "SW"
	CustomerLanguageSW string = "SW"

	// CustomerLanguageTA captures enum value "TA"
	CustomerLanguageTA string = "TA"

	// CustomerLanguageTE captures enum value "TE"
	CustomerLanguageTE string = "TE"

	// CustomerLanguageTG captures enum value "TG"
	CustomerLanguageTG string = "TG"

	// CustomerLanguageTH captures enum value "TH"
	CustomerLanguageTH string = "TH"

	// CustomerLanguageTI captures enum value "TI"
	CustomerLanguageTI string = "TI"

	// CustomerLanguageTK captures enum value "TK"
	CustomerLanguageTK string = "TK"

	// CustomerLanguageTL captures enum value "TL"
	CustomerLanguageTL string = "TL"

	// CustomerLanguageTN captures enum value "TN"
	CustomerLanguageTN string = "TN"

	// CustomerLanguageTO captures enum value "TO"
	CustomerLanguageTO string = "TO"

	// CustomerLanguageTR captures enum value "TR"
	CustomerLanguageTR string = "TR"

	// CustomerLanguageTS captures enum value "TS"
	CustomerLanguageTS string = "TS"

	// CustomerLanguageTT captures enum value "TT"
	CustomerLanguageTT string = "TT"

	// CustomerLanguageTW captures enum value "TW"
	CustomerLanguageTW string = "TW"

	// CustomerLanguageTY captures enum value "TY"
	CustomerLanguageTY string = "TY"

	// CustomerLanguageUG captures enum value "UG"
	CustomerLanguageUG string = "UG"

	// CustomerLanguageUK captures enum value "UK"
	CustomerLanguageUK string = "UK"

	// CustomerLanguageUR captures enum value "UR"
	CustomerLanguageUR string = "UR"

	// CustomerLanguageUZ captures enum value "UZ"
	CustomerLanguageUZ string = "UZ"

	// CustomerLanguageVE captures enum value "VE"
	CustomerLanguageVE string = "VE"

	// CustomerLanguageVI captures enum value "VI"
	CustomerLanguageVI string = "VI"

	// CustomerLanguageVO captures enum value "VO"
	CustomerLanguageVO string = "VO"

	// CustomerLanguageWA captures enum value "WA"
	CustomerLanguageWA string = "WA"

	// CustomerLanguageWO captures enum value "WO"
	CustomerLanguageWO string = "WO"

	// CustomerLanguageXH captures enum value "XH"
	CustomerLanguageXH string = "XH"

	// CustomerLanguageYI captures enum value "YI"
	CustomerLanguageYI string = "YI"

	// CustomerLanguageYO captures enum value "YO"
	CustomerLanguageYO string = "YO"

	// CustomerLanguageZA captures enum value "ZA"
	CustomerLanguageZA string = "ZA"

	// CustomerLanguageZH captures enum value "ZH"
	CustomerLanguageZH string = "ZH"

	// CustomerLanguageZU captures enum value "ZU"
	CustomerLanguageZU string = "ZU"
)

// prop value enum
func (m *Customer) validateLanguageEnum(path, location string, value string) error {
	if err := validate.EnumCase(path, location, value, customerTypeLanguagePropEnum, true); err != nil {
		return err
	}
	return nil
}

func (m *Customer) validateLanguage(formats strfmt.Registry) error {

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

	// value enum
	if err := m.validateLanguageEnum("Language", "body", *m.Language); err != nil {
		return err
	}

	return nil
}

func (m *Customer) validateProducts(formats strfmt.Registry) error {

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

	for i := 0; i < len(m.Products); i++ {
		if swag.IsZero(m.Products[i]) { // not required
			continue
		}

		if m.Products[i] != nil {
			if err := m.Products[i].Validate(formats); err != nil {
				if ve, ok := err.(*errors.Validation); ok {
					return ve.ValidateName("Products" + "." + strconv.Itoa(i))
				}
				return err
			}
		}

	}

	return nil
}

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

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