<cfcomponent extends="components.common.formObject">
	<cfset variables.idSalesClientUnit=0>
	<cfset variables.idSalesClient=0>
	<cfset variables.idSalesUnit=0>
	<cfset variables.salesUnit="">
	<cfset variables.idEmployee=0>
	<cfset variables.employee="">
	<cfset variables.idSalesPaymentPlan=0>
	<cfset variables.salesPaymentPlan="">
	<cfset variables.idSalesClientState=application.salesClientState.registered>
	<cfset variables.salesClientState="">
	<cfset variables.idSalesContact=0>
	<cfset variables.salesContact="">
	<cfset variables.idSalesContactMedia=0>
	<cfset variables.salesContactMedia="">
	<cfset variables.idProject=0>
	<cfset variables.project="">
	<cfset variables.idCurrency=0>
	<cfset variables.currency="">
	<cfset variables.dateRegistration=LSDateFormat(Now(), "dd/mm/yyyy") & " " & LSTimeFormat(Now(), "HH:mm:ss")>
	<cfset variables.sellPrice=0>
	<cfset variables.price=0>
	<cfset module.list.orderBy="dateRegistration">
	
	<cffunction name="init" access="public" output="false">
		<cfset variables.idSalesClientUnit=0>
		<cfset variables.idSalesClient=0>
		<cfset variables.idSalesUnit=0>
		<cfset variables.salesUnit="">
		<cfset variables.idEmployee=0>
		<cfset variables.employee="">
		<cfset variables.idSalesPaymentPlan=0>
		<cfset variables.salesPaymentPlan="">
		<cfset variables.idSalesClientState=application.salesClientState.registered>
		<cfset variables.salesClientState="">
		<cfset variables.idSalesContact=0>
		<cfset variables.salesContact="">
		<cfset variables.idSalesContactMedia=0>
		<cfset variables.salesContactMedia="">
		<cfset variables.idProject=0>
		<cfset variables.project="">
		<cfset variables.idCurrency=0>
		<cfset variables.currency="">
		<cfset variables.dateRegistration=LSDateFormat(Now(), "dd/mm/yyyy") & " " & LSTimeFormat(Now(), "HH:mm:ss")>
		<cfset variables.sellPrice=0>
		<cfset variables.price=0>
		<cfset module.list.orderBy="dateRegistration">
	</cffunction>
	
	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdSalesClientUnit()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdSalesClientUnit(arguments.objectId)>
	</cffunction>

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

	<cffunction name="getIdSalesClientUnit" access="public" returntype="numeric" output="false">
		<cfreturn variables.idSalesClientUnit>
	</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="components.corporate.salesClient" output="false">
		<cfif not IsObject("variables.salesClient")><cfset variables.salesClient=CreateObject("component", "components.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", "components.corporate.salesClient")>
			<cfset variables.salesClient.setIdSalesClient(variables.idSalesClient)>
			<cfset variables.salesClient.get()>
		</cfif>
		<cfreturn variables.salesClient>
	</cffunction>

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

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

	<cffunction name="getSalesUnit" access="public" returntype="components.corporate.salesUnit" output="false">
		<cfif not IsObject("variables.salesUnit")><cfset variables.salesUnit=CreateObject("component", "components.corporate.salesUnit")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.salesUnit.isRetrievedFromDB()) or variables.salesUnit.getIdSalesUnit() neq variables.idSalesUnit>
			<cfset variables.salesUnit=CreateObject("component", "components.corporate.salesUnit")>
			<cfset variables.salesUnit.setIdSalesUnit(variables.idSalesUnit)>
			<cfset variables.salesUnit.get()>
		</cfif>
		<cfreturn variables.salesUnit>
	</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="components.corporate.employee" output="false">
		<cfif not IsObject("variables.employee")><cfset variables.employee=CreateObject("component", "components.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", "components.corporate.employee")>
			<cfset variables.employee.setIdEmployee(variables.idEmployee)>
			<cfset variables.employee.get()>
		</cfif>
		<cfreturn variables.employee>
	</cffunction>

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

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

	<cffunction name="getSalesPaymentPlan" access="public" returntype="components.corporate.salesPaymentPlan" output="false">
		<cfif not IsObject("variables.salesPaymentPlan")><cfset variables.salesPaymentPlan=CreateObject("component", "components.corporate.salesPaymentPlan")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.salesPaymentPlan.isRetrievedFromDB()) or variables.salesPaymentPlan.getIdSalesPaymentPlan() neq variables.idSalesPaymentPlan>
			<cfset variables.salesPaymentPlan=CreateObject("component", "components.corporate.salesPaymentPlan")>
			<cfset variables.salesPaymentPlan.setIdSalesPaymentPlan(variables.idSalesPaymentPlan)>
			<cfset variables.salesPaymentPlan.get()>
		</cfif>
		<cfreturn variables.salesPaymentPlan>
	</cffunction>

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

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

	<cffunction name="getSalesClientState" access="public" returntype="components.corporate.salesClientState" output="false">
		<cfif not IsObject("variables.salesClientState")><cfset variables.salesClientState=CreateObject("component", "components.corporate.salesClientState")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.salesClientState.isRetrievedFromDB()) or variables.salesClientState.getIdSalesClientState() neq variables.idSalesClientState>
			<cfset variables.salesClientState=CreateObject("component", "components.corporate.salesClientState")>
			<cfset variables.salesClientState.setIdSalesClientState(variables.idSalesClientState)>
			<cfset variables.salesClientState.get()>
		</cfif>
		<cfreturn variables.salesClientState>
	</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="components.corporate.salesContact" output="false">
		<cfif not IsObject("variables.salesContact")><cfset variables.salesContact=CreateObject("component", "components.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", "components.corporate.salesContact")>
			<cfset variables.salesContact.setIdSalesContact(variables.idSalesContact)>
			<cfset variables.salesContact.get()>
		</cfif>
		<cfreturn variables.salesContact>
	</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="components.corporate.salesContactMedia" output="false">
		<cfif not IsObject("variables.salesContactMedia")><cfset variables.salesContactMedia=CreateObject("component", "components.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", "components.corporate.salesContactMedia")>
			<cfset variables.salesContactMedia.setIdSalesContactMedia(variables.idSalesContactMedia)>
			<cfset variables.salesContactMedia.get()>
		</cfif>
		<cfreturn variables.salesContactMedia>
	</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="components.corporate.project" output="false">
		<cfif not IsObject("variables.project")><cfset variables.project=CreateObject("component", "components.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", "components.corporate.project")>
			<cfset variables.project.setIdProject(variables.idProject)>
			<cfset variables.project.get()>
		</cfif>
		<cfreturn variables.project>
	</cffunction>

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

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

	<cffunction name="getCurrency" access="public" returntype="components.corporate.currency" output="false">
		<cfif not IsObject("variables.currency")><cfset variables.currency=CreateObject("component", "components.corporate.currency")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.currency.isRetrievedFromDB()) or variables.currency.getIdCurrency() neq variables.idCurrency>
			<cfset variables.currency=CreateObject("component", "components.corporate.currency")>
			<cfset variables.currency.setIdCurrency(variables.idCurrency)>
			<cfset variables.currency.get()>
		</cfif>
		<cfreturn variables.currency>
	</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="setSellPrice" access="public" output="false">
		<cfargument name="sellPrice" type="string" required="yes" default="0">
		<cfset variables.sellPrice=parseCurrency(arguments.sellPrice)>
	</cffunction>

	<cffunction name="getSellPrice" access="public" returntype="string" output="false">
		<cfreturn parseCurrency(variables.sellPrice)>
	</cffunction>

	<cffunction name="setPrice" access="public" output="false">
		<cfargument name="price" type="string" required="yes" default="0">
		<cfset variables.price=parseCurrency(arguments.price)>
	</cffunction>

	<cffunction name="getPrice" access="public" returntype="string" output="false">
		<cfreturn parseCurrency(variables.price)>
	</cffunction>

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idSalesClientUnit=getQuery.idSalesClientUnit>
			<cfset variables.idSalesClient=getQuery.idSalesClient>
			<cfif Len(getQuery.idSalesUnit)><cfset variables.idSalesUnit=getQuery.idSalesUnit></cfif>
			<cfset variables.idEmployee=getQuery.idEmployee>
			<cfif len(getQuery.idSalesPaymentPlan)><cfset variables.idSalesPaymentPlan=getQuery.idSalesPaymentPlan><cfelse><cfset variables.idSalesPaymentPlan=0></cfif>
			<cfif len(getQuery.idSalesClientState)><cfset variables.idSalesClientState=getQuery.idSalesClientState><cfelse><cfset variables.idSalesClientState=0></cfif>
			<cfif len(getQuery.idSalesContact)><cfset variables.idSalesContact=getQuery.idSalesContact><cfelse><cfset variables.idSalesContact=0></cfif>
			<cfif len(getQuery.idSalesContactMedia)><cfset variables.idSalesContactMedia=getQuery.idSalesContactMedia><cfelse><cfset variables.idSalesContactMedia=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 len(getQuery.sellPrice)><cfset variables.sellPrice=getQuery.sellPrice><cfelse><cfset variables.sellPrice=0></cfif>
			<cfif len(getQuery.price)><cfset variables.price=getQuery.price><cfelse><cfset variables.price=0></cfif>
			<cfif len(getQuery.idCurrency)><cfset variables.idCurrency=getQuery.idCurrency><cfelse><cfset variables.idCurrency=0></cfif>
		</cfif>
	</cffunction>
	
	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				salesClientUnit.idSalesClientUnit=<cfqueryparam value="#variables.idSalesClientUnit#" 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="idSalesClient">
		<cfquery name="getListQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				1=1
				<cfif variables.idSalesClient gt 0>
				AND salesClientUnit.idSalesClient=<cfqueryparam value="#variables.idSalesClient#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif variables.idSalesUnit gt 0>
				AND salesClientUnit.idSalesUnit=<cfqueryparam value="#variables.idSalesUnit#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif variables.idEmployee gt 0>
				AND salesClientUnit.idEmployee=<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">
				</cfif>
			ORDER BY <cfif Len(arguments.orderBy)>#arguments.orderBy#<cfelse>#module.list.orderBy#</cfif>
		</cfquery>
		<cfreturn getListQuery>
	</cffunction>

	<cffunction name="getOptList" access="public" output="false" returntype="query">
		<cfargument name="orderBy" required="no" type="string" default="idSalesClient">
		<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="
				salesClientUnit.idSalesClientUnit,
				salesClientUnit.idSalesClient,
				CONCAT(TRIM(CONCAT(salesClient.nameFirst, ' ', salesClient.nameFirst1)), ' ', TRIM(CONCAT(salesClient.nameLast, ' ', salesClient.nameLast1))) as salesClient,
				salesClientUnit.idSalesUnit, salesUnit.number as salesUnit,
				salesClientUnit.idProject, project.name AS project,
				salesClientUnit.idEmployee, 
				CONCAT(TRIM(CONCAT(employee.nameFirst, ' ', employee.nameFirst1)), ' ', TRIM(CONCAT(employee.nameLast, ' ', employee.nameLast1))) AS employee,
				salesClientUnit.idSalesPaymentPlan, salesPaymentPlan.name as salesPaymentPlan,
				salesClientUnit.idSalesClientState, salesClientState.name as salesClientState,
				salesClientUnit.idSalesContact, salesContact.name as salesContact,
				salesClientUnit.idSalesContactMedia, salesContactMedia.name as salesContactMedia,
				salesClientUnit.dateRegistration, 
				salesClientUnit.sellPrice, salesClientUnit.price,
				salesClientUnit.idCurrency, currency.name AS currency
			FROM 
				salesClientUnit 
			LEFT JOIN salesClient ON salesClientUnit.idSalesClient=salesClient.idSalesClient
			LEFT JOIN salesUnit ON salesClientUnit.idSalesUnit=salesUnit.idSalesUnit
			LEFT JOIN project ON salesClientUnit.idProject=project.idProject
			LEFT JOIN employee ON salesClientUnit.idEmployee=employee.idEmployee
			LEFT JOIN salesPaymentPlan ON salesClientUnit.idSalesPaymentPlan=salesPaymentPlan.idSalesPaymentPlan
			LEFT JOIN salesClientState ON salesClientUnit.idSalesClientState=salesClientState.idSalesClientState
			LEFT JOIN salesContact ON salesClientUnit.idSalesContact=salesContact.idSalesContact
			LEFT JOIN salesContactMedia ON salesClientUnit.idSalesContactMedia=salesContactMedia.idSalesContactMedia
			LEFT JOIN currency ON salesClientUnit.idCurrency=currency.idCurrency
			">
		<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 
				idSalesClientUnit
			FROM 
				salesClientUnit 
			WHERE 
				salesClientUnit.idSalesClient=<cfqueryparam value="#variables.idSalesClient#" cfsqltype="cf_sql_integer">
				AND salesClientUnit.idSalesUnit=<cfqueryparam value="#variables.idSalesUnit#" cfsqltype="cf_sql_integer">
				<cfif variables.idSalesClientUnit gt 0>
				AND idSalesClientUnit != <cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getIdQuery.recordcount gt 0>
			<cfset result.id=getIdQuery.idSalesClientUnit>
		</cfif>
		<cfreturn result>
	</cffunction>

	<cffunction name="create" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<cfset result=getId()>
		<!--- check parameters --->
		<cfif result.id gt 0>
			<cfset result.message="Asignacion con esos datos ya existe">
			<cfreturn result>
		</cfif>
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO salesClientUnit
					(
					idSalesClientUnit,
					idSalesClient, 
					idSalesUnit,
					idEmployee,
					idSalesPaymentPlan,
					idSalesClientState,
					idSalesContact,
					idSalesContactMedia,
					idProject,
					idCurrency,
					dateRegistration,
					sellPrice,
					price
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idSalesClient#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idSalesUnit#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">, 
					<cfif variables.idSalesPaymentPlan gt 0><cfqueryparam value="#variables.idSalesPaymentPlan#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif variables.idSalesClientState gt 0><cfqueryparam value="#variables.idSalesClientState#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif variables.idSalesContact gt 0><cfqueryparam value="#variables.idSalesContact#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif variables.idSalesContactMedia gt 0><cfqueryparam value="#variables.idSalesContactMedia#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif variables.idProject gt 0><cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif variables.idCurrency gt 0><cfqueryparam value="#variables.idCurrency#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif Len(variables.dateRegistration)><cfqueryparam value="#parseDate(variables.dateRegistration)#" cfsqltype="cf_sql_timestamp"><cfelse><cfqueryparam value="#Now()#" cfsqltype="cf_sql_timestamp"></cfif>,
					<cfqueryparam value="#parseCurrency(variables.sellPrice)#" cfsqltype="cf_sql_double">,
					<cfqueryparam value="#parseCurrency(variables.price)#" cfsqltype="cf_sql_double">
					)
			</cfquery>
			<cfif variables.idSalesClientUnit lt 1>
				<cfset result=getId()>
				<cfset variables.idSalesClientUnit=result.id>
			<cfelse>
				<cfset result.id=variables.idSalesClientUnit>
			</cfif>
			<!--- check unit state --->
			<cfset checkUnitState()>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [salesClientUnit.create()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
	
	<cffunction name="checkUnitState" access="public" output="false">
		<!--- get the unit info --->
		<cfset var _salesUnit=getSalesUnit()>
		<!--- check the status of client state and dependance of unit state --->
		<cfif variables.idSalesClientState eq application.salesClientState.registered>
			<cfif _salesUnit.getIdSalesUnitState() eq application.salesUnitState.available>
				<cfset _salesUnit.setIdSalesUnitState(application.salesUnitState.availableWithInteres)>
				<cfset _salesUnit.update()>
			</cfif>
		<cfelseif variables.idSalesClientState eq application.salesClientState.booked>
			<cfif _salesUnit.getIdSalesUnitState() lte application.salesUnitState.availableWithInteres>
				<cfset _salesUnit.setIdSalesUnitState(application.salesUnitState.booked)>
				<cfset _salesUnit.update()>
			</cfif>
		<cfelseif variables.idSalesClientState eq application.salesClientState.client>
			<cfif _salesUnit.getIdSalesUnitState() lte application.salesUnitState.booked>
				<cfset _salesUnit.setIdSalesUnitState(application.salesUnitState.sold)>
				<cfset _salesUnit.update()>
			</cfif>
		<cfelseif variables.idSalesClientState eq application.salesClientState.signed>
			<!--- TODO: put state here --->
			<cfif _salesUnit.getIdSalesUnitState() lte application.salesUnitState.booked>
				<cfset _salesUnit.setIdSalesUnitState(application.salesUnitState.sold)>
				<cfset _salesUnit.update()>
			</cfif>
		<cfelseif variables.idSalesClientState eq application.salesClientState.reject>
			<!--- TODO: put state here --->
		<cfelseif variables.idSalesClientState eq application.salesClientState.timeOut>
			<!--- TODO: put state here --->
		</cfif>
	</cffunction>

	<cffunction name="update" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<!--- check parameters --->
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Departamento cone esos datos ya existe">
			<cfreturn result>
		</cfif>
		<cftry>
			<cfquery name="updateQuery" datasource="#application.datasource#">
				UPDATE salesClientUnit SET
					idEmployee=<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">, 
					idSalesPaymentPlan=<cfif variables.idSalesPaymentPlan gt 0><cfqueryparam value="#variables.idSalesPaymentPlan#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					idSalesClientState=<cfif variables.idSalesClientState gt 0><cfqueryparam value="#variables.idSalesClientState#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					idSalesContact=<cfif variables.idSalesContact gt 0><cfqueryparam value="#variables.idSalesContact#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					idSalesContactMedia=<cfif variables.idSalesContactMedia gt 0><cfqueryparam value="#variables.idSalesContactMedia#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					idProject=<cfif variables.idProject gt 0><cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					idCurrency=<cfif variables.idCurrency gt 0><cfqueryparam value="#variables.idCurrency#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					sellPrice=<cfqueryparam value="#parseCurrency(variables.sellPrice)#" cfsqltype="cf_sql_double">,
					price=<cfqueryparam value="#parseCurrency(variables.price)#" cfsqltype="cf_sql_double">
				WHERE
					salesClientUnit.idSalesClientUnit=<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfset result.id=variables.idSalesClient>
			<!--- check unit state --->
			<cfset checkUnitState()>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [salesClientUnit.update()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>

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

	<cffunction name="deleteCheck" access="public" output="false">
		<!--- get the unit info --->
		<cfset var _salesUnit="">
		<cfset var _numberOfAsignations=0>
		<cfset get()>
		<cfquery name="getNumberOfAsignationsByUnitQuery" datasource="#application.datasource#">
			SELECT COUNT(idSalesClientUnit) AS numAssignations FROM salesClientUnit
			WHERE idSalesUnit=<cfqueryparam value="#variables.idSalesUnit#" cfsqltype="cf_sql_integer">
		</cfquery>
		<cfset _numberOfAsignations=getNumberOfAsignationsByUnitQuery.numAssignations>
		<cfset _salesUnit=getSalesUnit()>
		<!--- check the status of the sales unit --->
		<cfif variables.idSalesClientState eq application.salesClientState.registered>
			<!--- was a register of interes without further processing --->
			<cfif _salesUnit.getIdSalesUnitState() eq application.salesUnitState.availableWithInteres and _numberOfAsignations lt 1>
				<!--- if unit is avaliable - check the number of persons assigned to this unit. And if no one assigned - free the unit --->
				<cfset _salesUnit.setIdSalesUnitState(application.salesUnitState.available)>
				<cfset _salesUnit.update()>
			</cfif>
		<cfelseif variables.idSalesClientState eq application.salesClientState.booked>
			<!--- unit was booked --->
			<cfif _salesUnit.getIdSalesUnitState() lte application.salesUnitState.booked>
				<!--- check how many asignations do we have --->
				<cfif _numberOfAsignations lt 1>
					<cfset _salesUnit.setIdSalesUnitState(application.salesUnitState.available)>
				<cfelse>
					<cfset _salesUnit.setIdSalesUnitState(application.salesUnitState.availableWithInteres)>
				</cfif>
				<cfset _salesUnit.update()>
			</cfif>
		<cfelseif variables.idSalesClientState eq application.salesClientState.client>
			<!--- unit was sold [TODO] --->
			<cfif _salesUnit.getIdSalesUnitState() lte application.salesUnitState.sold>
				<!--- check the number of asignations --->
				<cfif _numberOfAsignations lt 1>
					<cfset _salesUnit.setIdSalesUnitState(application.salesUnitState.available)>
				<cfelse>
					<cfset _salesUnit.setIdSalesUnitState(application.salesUnitState.availableWithInteres)>
				</cfif>
				<cfset _salesUnit.update()>
			</cfif>
		<cfelseif variables.idSalesClientState eq application.salesClientState.signed>
			<!--- TODO: put state here --->
			<cfif _salesUnit.getIdSalesUnitState() lte application.salesUnitState.booked>
				<!--- check the number of asignations --->
				<cfif _numberOfAsignations lt 1>
					<cfset _salesUnit.setIdSalesUnitState(application.salesUnitState.available)>
				<cfelse>
					<cfset _salesUnit.setIdSalesUnitState(application.salesUnitState.availableWithInteres)>
				</cfif>
				<cfset _salesUnit.update()>
			</cfif>
		<cfelseif variables.idSalesClientState eq application.salesClientState.reject>
			<!--- TODO: put state here --->
			<!--- check the number of asignations --->
			<cfif _numberOfAsignations lt 1>
				<cfset _salesUnit.setIdSalesUnitState(application.salesUnitState.available)>
			<cfelse>
				<cfset _salesUnit.setIdSalesUnitState(application.salesUnitState.availableWithInteres)>
			</cfif>
			<cfset _salesUnit.update()>
		<cfelseif variables.idSalesClientState eq application.salesClientState.timeOut>
			<!--- TODO: put state here --->
			<!--- check the number of asignations --->
			<cfif _numberOfAsignations lt 1>
				<cfset _salesUnit.setIdSalesUnitState(application.salesUnitState.available)>
			<cfelse>
				<cfset _salesUnit.setIdSalesUnitState(application.salesUnitState.availableWithInteres)>
			</cfif>
			<cfset _salesUnit.update()>
		</cfif>
	</cffunction>

	<cffunction name="createOptions" access="public" returntype="numeric" output="true">
		<cfargument name="selected" required="yes" type="numeric" default="0">
		<cfset var list=getOptList("salesClientUnit.idSalesClientUnit")>
		<cfset var result=0>
		<cfif list.idSalesClientUnit gt 0><cfset result=list.idSalesClientUnit></cfif>
		<cfloop query="list">
			<cfif list.idSalesClientUnit eq arguments.selected><cfset _selected=" selected"><cfset result=list.idSalesClientUnit><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#list.idSalesClientUnit#"#_selected#>#list.salesUnit#</option></cfoutput>
		</cfloop>
		<cfreturn result>
	</cffunction>
	
</cfcomponent>