<cfcomponent extends="proventas31.common.formObject">
	<cfset variables.idSalesClient=0>
	<cfset variables.salesClient="">
	<cfset variables.idSalesContactMedia=0>
	<cfset variables.salesContactMedia="">
	<cfset variables.idSalesContact=0>
	<cfset variables.salesContact="">
	<cfset variables.address="">
	<cfset variables.address1="">
	<cfset variables.address2="">
	<cfset variables.city="">
	<cfset variables.state="">
	<cfset variables.postalCode="">
	<cfset variables.phone1="">
	<cfset variables.phone2="">
	<cfset variables.phone3="">
	<cfset variables.email="">
	<cfset module.list.orderBy="idSalesClient">
	
	<cffunction name="init" access="public" output="false">
		<cfset variables.idSalesClient=0>
		<cfset variables.salesClient="">
		<cfset variables.idSalesContactMedia=0>
		<cfset variables.salesContactMedia="">
		<cfset variables.idSalesContact=0>
		<cfset variables.salesContact="">
		<cfset variables.address="">
		<cfset variables.address1="">
		<cfset variables.address2="">
		<cfset variables.city="">
		<cfset variables.state="">
		<cfset variables.postalCode="">
		<cfset variables.phone1="">
		<cfset variables.phone2="">
		<cfset variables.phone3="">
		<cfset variables.email="">
	</cffunction>

	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdSalesClient()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdSalesClient(arguments.objectId)>
	</cffunction>

	<cffunction name="setIdSalesClient" access="public" output="false">
		<cfargument name="idSalesClient" type="numeric" required="yes" default="0">
		<cfset variables.idSalesClient=arguments.idSalesClient>
	</cffunction>

	<cffunction name="getIdSalesClient" access="public" returntype="numeric" output="false">
		<cfreturn variables.idSalesClient>
	</cffunction>

	<cffunction name="getSalesClient" access="public" returntype="proventas31.corporate.salesClient" output="false">
		<cfif not IsObject("variables.salesClient")><cfset variables.salesClient=CreateObject("component", "proventas31.corporate.salesClient")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.salesClient.isRetrievedFromDB()) or variables.salesClient.getIdSalesClient() neq variables.idSalesClient>
			<cfset variables.salesClient=CreateObject("component", "proventas31.corporate.salesClient")>
			<cfset variables.salesClient.setIdSalesClient(variables.idSalesClient)>
			<cfset variables.salesClient.get()>
		</cfif>
		<cfreturn variables.salesClient>
	</cffunction>

	<cffunction name="setIdSalesContactMedia" access="public" output="false">
		<cfargument name="idSalesContactMedia" type="numeric" required="yes" default="0">
		<cfset variables.idSalesContactMedia=arguments.idSalesContactMedia>
	</cffunction>

	<cffunction name="getIdSalesContactMedia" access="public" returntype="numeric" output="false">
		<cfreturn variables.idSalesContactMedia>
	</cffunction>
	
	<cffunction name="getSalesContactMedia" access="public" returntype="proventas31.corporate.salesContactMedia" output="false">
		<cfif not IsObject("variables.salesContactMedia")><cfset variables.salesContactMedia=CreateObject("component", "proventas31.corporate.salesContactMedia")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.salesContactMedia.isRetrievedFromDB()) or variables.salesContactMedia.getIdSalesContactMedia() neq variables.idSalesContactMedia>
			<cfset variables.salesContactMedia=CreateObject("component", "proventas31.corporate.salesContactMedia")>
			<cfset variables.salesContactMedia.setIdSalesContactMedia(variables.idSalesContactMedia)>
			<cfset variables.salesContactMedia.get()>
		</cfif>
		<cfreturn variables.salesContactMedia>
	</cffunction>

	<cffunction name="setIdSalesContact" access="public" output="false">
		<cfargument name="idSalesContact" type="numeric" required="yes" default="0">
		<cfset variables.idSalesContact=arguments.idSalesContact>
	</cffunction>

	<cffunction name="getIdSalesContact" access="public" returntype="numeric" output="false">
		<cfreturn variables.idSalesContact>
	</cffunction>
	
	<cffunction name="getSalesContact" access="public" returntype="proventas31.corporate.salesContact" output="false">
		<cfif not IsObject("variables.salesContact")><cfset variables.salesContact=CreateObject("component", "proventas31.corporate.salesContact")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.salesContact.isRetrievedFromDB()) or variables.salesContact.getIdSalesContact() neq variables.idSalesContact>
			<cfset variables.salesContact=CreateObject("component", "proventas31.corporate.salesContact")>
			<cfset variables.salesContact.setIdSalesContact(variables.idSalesContact)>
			<cfset variables.salesContact.get()>
		</cfif>
		<cfreturn variables.salesContact>
	</cffunction>

	<cffunction name="setAddress" access="public" output="false">
		<cfargument name="address" type="string" required="yes" default="">
		<cfset variables.address=arguments.address>
	</cffunction>

	<cffunction name="getAddress" access="public" returntype="string" output="false">
		<cfreturn variables.address>
	</cffunction>

	<cffunction name="setAddress1" access="public" output="false">
		<cfargument name="address1" type="string" required="yes" default="">
		<cfset variables.address1=arguments.address1>
	</cffunction>

	<cffunction name="getAddress1" access="public" returntype="string" output="false">
		<cfreturn variables.address1>
	</cffunction>

	<cffunction name="setAddress2" access="public" output="false">
		<cfargument name="address2" type="string" required="yes" default="">
		<cfset variables.address2=arguments.address2>
	</cffunction>

	<cffunction name="getAddress2" access="public" returntype="string" output="false">
		<cfreturn variables.address2>
	</cffunction>

	<cffunction name="setCity" access="public" output="false">
		<cfargument name="city" type="string" required="yes" default="">
		<cfset variables.city=arguments.city>
	</cffunction>

	<cffunction name="getCity" access="public" returntype="string" output="false">
		<cfreturn variables.city>
	</cffunction>

	<cffunction name="setState" access="public" output="false">
		<cfargument name="state" type="string" required="yes" default="">
		<cfset variables.state=arguments.state>
	</cffunction>

	<cffunction name="getState" access="public" returntype="string" output="false">
		<cfreturn variables.state>
	</cffunction>

	<cffunction name="setPostalCode" access="public" output="false">
		<cfargument name="postalCode" type="string" required="yes" default="">
		<cfset variables.postalCode=arguments.postalCode>
	</cffunction>

	<cffunction name="getPostalCode" access="public" returntype="string" output="false">
		<cfreturn variables.postalCode>
	</cffunction>

	<cffunction name="setPhone1" access="public" output="false">
		<cfargument name="phone1" type="string" required="yes" default="">
		<cfset variables.phone1=arguments.phone1>
	</cffunction>

	<cffunction name="getPhone1" access="public" returntype="string" output="false">
		<cfreturn variables.phone1>
	</cffunction>

	<cffunction name="setPhone2" access="public" output="false">
		<cfargument name="phone2" type="string" required="yes" default="">
		<cfset variables.phone2=arguments.phone2>
	</cffunction>

	<cffunction name="getPhone2" access="public" returntype="string" output="false">
		<cfreturn variables.phone2>
	</cffunction>

	<cffunction name="setPhone3" access="public" output="false">
		<cfargument name="phone3" type="string" required="yes" default="">
		<cfset variables.phone3=arguments.phone3>
	</cffunction>

	<cffunction name="getPhone3" access="public" returntype="string" output="false">
		<cfreturn variables.phone3>
	</cffunction>

	<cffunction name="setEmail" access="public" output="false">
		<cfargument name="email" type="string" required="yes" default="">
		<cfset variables.email=arguments.email>
	</cffunction>

	<cffunction name="getEmail" access="public" returntype="string" output="false">
		<cfreturn variables.email>
	</cffunction>

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="query" type="query" required="yes">
		<cfif query.recordcount gt 0>
			<cfset variables.idSalesClient=query.idSalesClient>
			<cfif Len(query.idSalesContactMedia)><cfset variables.idSalesContactMedia=query.idSalesContactMedia><cfelse><cfset variables.idSalesContactMedia=0></cfif>
			<cfif Len(query.idSalesContact)><cfset variables.idSalesContact=query.idSalesContact><cfelse><cfset variables.idSalesContact=0></cfif>
			<cfset variables.address=query.address>
			<cfset variables.address1=query.address1>
			<cfset variables.address2=query.address2>
			<cfset variables.city=query.city>
			<cfset variables.state=query.state>
			<cfset variables.postalCode=query.postalCode>
			<cfset variables.phone1=query.phone1>
			<cfset variables.phone2=query.phone2>
			<cfset variables.phone3=query.phone3>
			<cfset variables.email=query.email>
		</cfif>
	</cffunction>
	
	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				salesClientData.idSalesClient=<cfqueryparam value="#variables.idSalesClient#" cfsqltype="cf_sql_integer">
		</cfquery>
		<cfif getQuery.recordcount gt 0>
			<cfset setVariablesFromQuery(getQuery)>
		</cfif>
		<cfset module.retrievedFromDB=true>
	</cffunction>

	<cffunction name="getList" access="public" output="false" returntype="query">
		<cfargument name="orderBy" required="no" type="string" default="">
		<cfquery name="getListQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE				
				1=1
				<cfif variables.idSalesContactMedia>
				AND salesClientData.idSalesContactMedia=<cfqueryparam value="#variables.idSalesContactMedia#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif variables.idSalesContact>
				AND salesClientData.idSalesContact=<cfqueryparam value="#variables.idSalesContact#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif variables.idSalesClient>
				AND salesClientData.idSalesClient=<cfqueryparam value="#variables.idSalesClient#" cfsqltype="cf_sql_integer">
				</cfif>
			ORDER BY <cfif Len(arguments.orderBy)>#arguments.orderBy#<cfelse>#module.list.orderBy#</cfif>
		</cfquery>
		<cfreturn getListQuery>
	</cffunction>
	
	<cffunction name="getQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				salesClientData.idSalesClient, 
				salesClientData.idSalesContactMedia, salesContactMedia.name as salesContactMedia,
				salesClientData.idSalesContact, salesContact.name as salesContact,
				salesClientData.address,
				salesClientData.address1,
				salesClientData.address2,
				salesClientData.city,
				salesClientData.state,
				salesClientData.postalCode,
				salesClientData.phone1,
				salesClientData.phone2,
				salesClientData.phone3,
				salesClientData.email
			FROM 
				salesClientData 
			LEFT JOIN salesContactMedia ON salesClientData.idSalesContactMedia=salesContactMedia.idSalesContactMedia
			LEFT JOIN salesContact ON salesClientData.idSalesContact=salesContact.idSalesContact
			">
		<cfreturn result>
	</cffunction>

	<cffunction name="create" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		
		<!--- check parameters --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO salesClientData
					(
					idSalesClient, 
					idSalesContactMedia,	
					idSalesContact,
					address,
					address1,
					address2, 
					city, 
					state, 
					postalCode, 
					phone1, 
					phone2, 
					phone3, 
					email 
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idSalesClient#" cfsqltype="cf_sql_integer">, 
					<cfif variables.idSalesContactMedia gt 0><cfqueryparam value="#variables.idSalesContactMedia#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif variables.idSalesContact gt 0><cfqueryparam value="#variables.idSalesContact#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfqueryparam value="#variables.address#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#variables.address1#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#variables.address2#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#variables.city#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#variables.state#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#variables.postalCode#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#variables.phone1#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#variables.phone2#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#variables.phone3#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#variables.email#" cfsqltype="cf_sql_varchar" maxlength="255">
					)
				ON DUPLICATE KEY UPDATE 
					idSalesContactMedia=<cfif variables.idSalesContactMedia gt 0><cfqueryparam value="#variables.idSalesContactMedia#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					idSalesContact=<cfif variables.idSalesContact gt 0><cfqueryparam value="#variables.idSalesContact#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					address=<cfqueryparam value="#variables.address#" cfsqltype="cf_sql_varchar" maxlength="255">,
					address1=<cfqueryparam value="#variables.address1#" cfsqltype="cf_sql_varchar" maxlength="255">,
					address2=<cfqueryparam value="#variables.address2#" cfsqltype="cf_sql_varchar" maxlength="255">,
					city=<cfqueryparam value="#variables.city#" cfsqltype="cf_sql_varchar" maxlength="255">,
					state=<cfqueryparam value="#variables.state#" cfsqltype="cf_sql_varchar" maxlength="255">,
					postalCode=<cfqueryparam value="#variables.postalCode#" cfsqltype="cf_sql_varchar" maxlength="255">,
					phone1=<cfqueryparam value="#variables.phone1#" cfsqltype="cf_sql_varchar" maxlength="255">,
					phone2=<cfqueryparam value="#variables.phone2#" cfsqltype="cf_sql_varchar" maxlength="255">,
					phone3=<cfqueryparam value="#variables.phone3#" cfsqltype="cf_sql_varchar" maxlength="255">,
					email=<cfqueryparam value="#variables.email#" cfsqltype="cf_sql_varchar" maxlength="255">
			</cfquery>
			<cfset result.id=variables.idSalesClient>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [salesClientData.create()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>

	<cffunction name="update" access="public" returntype="struct" output="false">
		<cfreturn create()>
	</cffunction>

	<cffunction name="delete" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<!--- check parameters --->
		<cftry>
			<cfquery name="deleteQuery" datasource="#application.datasource#">
				DELETE FROM salesClientData
				WHERE 
					idSalesClient=<cfqueryparam value="#variables.idSalesClient#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfset result.id=0>
			<cfset init()>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [salesClientData.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
	
</cfcomponent>