<cfcomponent extends="components.common.formObject">
	<cfset variables.idProject=0>
	<cfset variables.project="">
	<cfset variables.idSalesUnitState=0>
	<cfset variables.salesUnitState="">

	<cfset variables.dateStart="">
	<cfset variables.dateEnd="">
	<cfset module.list.orderBy="idProject">
	
	<cffunction name="init" access="public" output="false">
		<cfset variables.idProject=0>
		<cfset variables.project="">
		<cfset variables.idSalesUnitState=0>
		<cfset variables.salesUnitState="">

		<cfset variables.dateStart="">
		<cfset variables.dateEnd="">
	</cffunction>

	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdProject()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdProject(arguments.objectId)>
	</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="setIdSalesUnitState" access="public" output="false">
		<cfargument name="idSalesUnitState" type="numeric" required="yes" default="0">
		<cfset variables.idSalesUnitState=arguments.idSalesUnitState>
	</cffunction>

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

	<cffunction name="getSalesUnitState" access="public" returntype="components.corporate.salesUnitState" output="false">
		<cfif not IsObject("variables.salesUnitState")><cfset variables.salesUnitState=CreateObject("component", "components.corporate.salesUnitState")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.salesUnitState.isRetrievedFromDB()) or variables.salesUnitState.getIdSalesUnitState() neq variables.idSalesUnitState>
			<cfset variables.salesUnitState=CreateObject("component", "components.corporate.salesUnitState")>
			<cfset variables.salesUnitState.setIdSalesUnitState(variables.idSalesUnitState)>
			<cfset variables.salesUnitState.get()>
		</cfif>
		<cfreturn variables.salesUnitState>
	</cffunction>

	<cffunction name="getNumberOfUnits" access="public" returntype="numeric" hint="Funcion para obtener la cantidad de las unidades en proyecto">
		<cfset var result=0>
		<cfquery name="getNumberOfUnitsQuery" datasource="#application.datasource#">
			SELECT 
				COUNT(idSalesUnit) AS numberOfUnits 
			FROM 
				salesUnit 
			WHERE 
				idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				<cfif variables.idSalesUnitState gt 0>
				AND salesUnit.idSalesUnitState=<cfqueryparam value="#variables.idSalesUnitState#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getNumberOfUnitsQuery.recordcount gt 0>
			<cfset result=getNumberOfUnitsQuery.numberOfUnits>
		</cfif>
		<cfreturn result>
	</cffunction>

	<cffunction name="getValueOfUnits" access="public" returntype="numeric" hint="Funcion para obtener la cantidad de las unidades en proyecto">
		<cfset var result=0>
		<cfquery name="getValueOfUnitsQuery" datasource="#application.datasource#">
			SELECT 
				SUM(salesUnit.price) AS valueOfUnits 
			FROM 
				salesUnit 
			WHERE 
				idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				<cfif variables.idSalesUnitState gt 0>
				AND salesUnit.idSalesUnitState=<cfqueryparam value="#variables.idSalesUnitState#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getValueOfUnitsQuery.recordcount gt 0 and Len(getValueOfUnitsQuery.valueOfUnits)>
			<cfset result=getValueOfUnitsQuery.valueOfUnits>
		</cfif>
		<cfreturn result>
	</cffunction>
	
	<cffunction name="getSellValueOfUnits" access="public" returntype="numeric">
		<cfset var result=0>
		<cfquery name="getSellValueOfUnitsQuery" datasource="#application.datasource#">
			SELECT 
				SUM(salesClientUnit.sellPrice) AS valueOfUnits 
			FROM salesUnit
			LEFT JOIN salesClientUnit ON salesUnit.idSalesUnit=salesClientUnit.idSalesUnit 
			<cfif variables.idSalesUnitState eq 4>
			AND salesClientUnit.idSalesClientState=<cfqueryparam value="#application.salesClientState.booked#" cfsqltype="cf_sql_integer">
			<cfelse>
			AND (
				salesClientUnit.idSalesClientState=<cfqueryparam value="#application.salesClientState.client#" cfsqltype="cf_sql_integer">
				OR 
				salesClientUnit.idSalesClientState=<cfqueryparam value="#application.salesClientState.signed#" cfsqltype="cf_sql_integer">
				)
			</cfif>
			WHERE 
				salesUnit.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				<cfif variables.idSalesUnitState gt 0>
				AND salesUnit.idSalesUnitState=<cfqueryparam value="#variables.idSalesUnitState#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getSellValueOfUnitsQuery.recordcount gt 0 and Len(getSellValueOfUnitsQuery.valueOfUnits)>
			<cfset result=getSellValueOfUnitsQuery.valueOfUnits>
		</cfif>
		<cfreturn result>
	</cffunction>
	
	<cffunction name="getConstructionTaskList" access="public" output="false" returntype="query">
		<cfargument name="orderBy" required="no" type="string" default="projectTask.idProjectTask">

		<cfquery name="getConstructionTaskListQuery" datasource="#application.datasource#">
			SELECT 
				projectTask.idProjectTask,
				projectTask.idParent, parent.name AS parent,
				projectTask.idProjectActivity, projectActivity.name AS projectActivity,
				projectTask.idProject, project.name AS project, 
				projectTask.idCurrency, currency.name AS currency,
				projectTask.idEmployee, CONCAT(TRIM(CONCAT(employee.nameFirst, ' ', employee.nameFirst1)), ' ', TRIM(CONCAT(employee.nameLast, ' ', employee.nameLast1))) AS employee,
				projectTask.name,
				projectTask.amountAuthorized,
				projectTask.amountUsed, 
				(projectTask.amountAuthorized-projectTask.amountUsed) AS amountAvailable,
				projectTask.dateStart,
				projectTask.dateEnd,
				projectTask.dateEndReal
			FROM 
				projectTask
			LEFT JOIN projectTask AS parent ON projectTask.idParent=parent.idProjectTask
			LEFT JOIN projectActivity ON projectTask.idProjectActivity=projectActivity.idProjectActivity
			LEFT JOIN project ON projectTask.idProject=project.idProject
			LEFT JOIN currency ON projectTask.idCurrency=currency.idCurrency
			LEFT JOIN employee ON projectTask.idEmployee=employee.idEmployee
			WHERE
				projectTask.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				AND projectActivity.name LIKE "%construccion%"
			ORDER BY <cfif Len(arguments.orderBy)>#URLDecode(arguments.orderBy)#<cfelse>#URLDecode(module.list.orderBy)#</cfif>
		</cfquery>
		<cfreturn getConstructionTaskListQuery>
	</cffunction>

	<cffunction name="getConstructionActivityList" access="public" output="false" returntype="query">
		<cfargument name="orderBy" required="no" type="string" default="projectActivity.idProjectActivity">

		<cfquery name="getConstructionActivityListQuery" datasource="#application.datasource#">
			SELECT 
				projectActivity.idProjectActivity,
				projectActivity.idParent, parent.name AS parent,
				projectActivity.idProject, project.name AS project, 
				projectActivity.idCurrency, currency.name AS currency,
				projectActivity.idEmployee, CONCAT(TRIM(CONCAT(employee.nameFirst, ' ', employee.nameFirst1)), ' ', TRIM(CONCAT(employee.nameLast, ' ', employee.nameLast1))) AS employee,
				projectActivity.name,
				projectActivity.amountAuthorized,
				projectActivity.amountUsed, 
				(projectActivity.amountAuthorized-projectActivity.amountUsed) AS amountAvailable,
				projectActivity.dateStart,
				projectActivity.dateEnd,
				projectActivity.dateEndReal
			FROM 
				projectActivity
			LEFT JOIN projectActivity AS parent ON projectActivity.idParent=parent.idProjectActivity
			LEFT JOIN project ON projectActivity.idProject=project.idProject
			LEFT JOIN currency ON projectActivity.idCurrency=currency.idCurrency
			LEFT JOIN employee ON projectActivity.idEmployee=employee.idEmployee
			WHERE
				projectActivity.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
			ORDER BY <cfif Len(arguments.orderBy)>#URLDecode(arguments.orderBy)#<cfelse>#URLDecode(module.list.orderBy)#</cfif>
		</cfquery>
		<cfreturn getConstructionActivityListQuery>
	</cffunction>
	

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

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

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

	<cffunction name="getDateEnd" access="public" returntype="string" output="false">
		<cfreturn variables.dateEnd>
	</cffunction>
</cfcomponent>