<cfcomponent extends="proventas31.common.formObject">
	<cfset variables.idSalesClient=0>
	<cfset variables.salesClient="">
	<cfset variables.idEmployee=0>
	<cfset variables.employee="">
	<cfset variables.idProject=0>
	<cfset variables.project="">
	<cfset variables.dateRegistration=LSDateFormat(Now(), "dd/mm/yyyy") & " " & LSTimeFormat(Now(), "HH:mm:ss")>
	<cfset module.list.orderBy="idSalesClient">
	
	<cffunction name="init" access="public" output="false">
		<cfset variables.idSalesClient=0>
		<cfset variables.salesClient="">
		<cfset variables.idEmployee=0>
		<cfset variables.employee="">
		<cfset variables.idProject=0>
		<cfset variables.project="">
		<cfset variables.dateRegistration=LSDateFormat(Now(), "dd/mm/yyyy") & " " & LSTimeFormat(Now(), "HH:mm:ss")>
	</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="setIdEmployee" access="public" output="false">
		<cfargument name="idEmployee" type="numeric" required="yes" default="0">
		<cfset variables.idEmployee=arguments.idEmployee>
	</cffunction>

	<cffunction name="getIdEmployee" access="public" returntype="numeric" output="false">
		<cfreturn variables.idEmployee>
	</cffunction>
	
	<cffunction name="getEmployee" access="public" returntype="proventas31.corporate.employee" output="false">
		<cfif not IsObject("variables.employee")><cfset variables.employee=CreateObject("component", "proventas31.corporate.employee")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.employee.isRetrievedFromDB()) or variables.employee.getIdEmployee() neq variables.idEmployee>
			<cfset variables.employee=CreateObject("component", "proventas31.corporate.employee")>
			<cfset variables.employee.setIdEmployee(variables.idEmployee)>
			<cfset variables.employee.get()>
		</cfif>
		<cfreturn variables.employee>
	</cffunction>
	
	<cffunction name="setIdProject" access="public" output="false">
		<cfargument name="idProject" type="numeric" required="yes" default="0">
		<cfset variables.idProject=arguments.idProject>
	</cffunction>

	<cffunction name="getIdProject" access="public" returntype="numeric" output="false">
		<cfreturn variables.idProject>
	</cffunction>
	
	<cffunction name="getProject" access="public" returntype="proventas31.corporate.project" output="false">
		<cfif not IsObject("variables.project")><cfset variables.project=CreateObject("component", "proventas31.corporate.project")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.project.isRetrievedFromDB()) or variables.project.getIdProject() neq variables.idProject>
			<cfset variables.project=CreateObject("component", "proventas31.corporate.project")>
			<cfset variables.project.setIdProject(variables.idProject)>
			<cfset variables.project.get()>
		</cfif>
		<cfreturn variables.project>
	</cffunction>
	
	<cffunction name="setDateRegistration" access="public" output="false">
		<cfargument name="dateRegistration" type="string" required="yes" default="">
		<cfset variables.dateRegistration=arguments.dateRegistration>
	</cffunction>

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

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idSalesClient=getQuery.idSalesClient>
			<cfif Len(getQuery.idEmployee)><cfset variables.idEmployee=getQuery.idEmployee><cfelse><cfset variables.idEmployee=0></cfif>
			<cfif Len(getQuery.idProject)><cfset variables.idProject=getQuery.idProject><cfelse><cfset variables.idProject=0></cfif>
			<cfif Len(getQuery.dateRegistration)>
				<cfset variables.dateRegistration=LSDateFormat(getQuery.dateRegistration, "dd/mm/yyyy") & " " & LSTimeFormat(getQuery.dateRegistration, "HH:mm:ss")>
			<cfelse>
				<cfset variables.dateRegistration="">
			</cfif>
		</cfif>
	</cffunction>

	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				sellerClientProject.idSalesClient=<cfqueryparam value="#variables.idSalesClient#" cfsqltype="cf_sql_integer">
				AND sellerClientProject.idProject<cfif variables.idProject gt 0>=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer"><cfelse> IS NULL</cfif>
		</cfquery>
		<cfif getQuery.recordcount gt 0>
			<cfset setVariablesFromQuery(getQuery)>
		</cfif>
		<cfset module.retrievedFromDB=true>
	</cffunction>

	<cffunction name="getBySeller" access="public" output="false">
		<cfquery name="getBySellerQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				sellerClientProject.idSalesClient=<cfqueryparam value="#variables.idSalesClient#" cfsqltype="cf_sql_integer">
				AND sellerClientProject.idEmployee<cfif variables.idEmployee gt 0>=<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer"><cfelse> IS NULL</cfif>
		</cfquery>
		<cfset init()>
		<cfif getBySellerQuery.recordcount gt 0>
			<cfset setVariablesFromQuery(getBySellerQuery)>
		</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()#
			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="
				sellerClientProject.idEmployee, CONCAT(TRIM(CONCAT(employee.nameFirst, ' ', employee.nameFirst1)), ' ', TRIM(CONCAT(employee.nameLast, ' ', employee.nameLast1))) AS employee,
				sellerClientProject.idSalesClient, CONCAT(TRIM(CONCAT(salesClient.nameFirst, ' ', salesClient.nameFirst1)), ' ', TRIM(CONCAT(salesClient.nameLast, ' ', salesClient.nameLast1))) AS salesClient,
				sellerClientProject.idProject, project.name AS project,
				sellerClientProject.dateRegistration
			FROM 
				sellerClientProject
			LEFT JOIN employee ON sellerClientProject.idEmployee=employee.idEmployee
			LEFT JOIN salesClient ON sellerClientProject.idSalesClient=salesClient.idSalesClient
			LEFT JOIN project ON sellerClientProject.idProject=project.idProject
			">
		<cfreturn result>
	</cffunction>

	<cffunction name="createOptions" access="public" returntype="numeric" output="true">
		<cfargument name="selected" required="yes" type="numeric" default="0">
		<cfset var list=getList("sellerClientProject.documentNumber")>
		<cfset var result=0>
		<cfif list.idSalesClient gt 0><cfset result=list.idSalesClient></cfif>
		<cfloop query="list">
			<cfif list.idSalesClient eq arguments.selected><cfset _selected=" selected"><cfset result=list.idSalesClient><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#list.idSalesClient#"#_selected#>#list.documentNumber#</option></cfoutput>
		</cfloop>
		<cfreturn result>
	</cffunction>
	
	<cffunction name="getId" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<cfquery name="getIdQuery" datasource="#application.datasource#">
			SELECT 
				idEmployee 
			FROM 
				sellerClientProject 
			WHERE 
				sellerClientProject.idSalesClient=<cfqueryparam value="#variables.idSalesClient#" cfsqltype="cf_sql_integer">
				AND sellerClientProject.idProject<cfif variables.idProject gt 0>=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer"><cfelse> IS NULL</cfif>
		</cfquery>
		<cfif getIdQuery.recordcount gt 0 and Len(getIdQuery.idEmployee)>
			<cfset result.id=getIdQuery.idEmployee>
		</cfif>
		<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 --->
		<!--- variables ok --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO sellerClientProject
					(
					idEmployee,
					idSalesClient,
					idProject, 
					dateRegistration
					) 
				VALUES 
					(
					<cfif variables.idEmployee gt 0><cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfqueryparam value="#variables.idSalesClient#" cfsqltype="cf_sql_integer">, 
					<cfif variables.idProject gt 0><cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif Len(variables.dateRegistration)><cfqueryparam value="#parseDate(variables.dateRegistration)#" cfsqltype="cf_sql_timestamp"><cfelse>NULL</cfif>
					)
				ON DUPLICATE KEY UPDATE 
					idEmployee=<cfif variables.idEmployee gt 0><cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					dateRegistration=<cfif Len(variables.dateRegistration)><cfqueryparam value="#parseDate(variables.dateRegistration)#" cfsqltype="cf_sql_timestamp"><cfelse>NULL</cfif>
			</cfquery>
			<cfif variables.idProject gt 0>
				<!--- clean null project assignation --->
				<cfquery name="cleanNullProjectQuery" datasource="#application.datasource#">
					DELETE FROM sellerClientProject WHERE 
						idSalesClient=<cfqueryparam value="#variables.idSalesClient#" cfsqltype="cf_sql_integer">
						AND idEmployee=<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">
						AND idProject IS NULL
				</cfquery>
			</cfif>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [sellerClientProject.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 sellerClientProject
				WHERE 
					sellerClientProject.idSalesClient=<cfqueryparam value="#variables.idSalesClient#" cfsqltype="cf_sql_integer">
					AND sellerClientProject.idProject<cfif variables.idProject gt 0>=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer"><cfelse> IS NULL</cfif>
			</cfquery>
			<cfset result.id=0>
			<cfset init()>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [sellerClientProject.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
</cfcomponent>