<cfcomponent extends="components.common.formObject">
	<cfset variables.idProjectActivity=0>
	<cfset variables.idProject=0>
	<cfset variables.project="">
	<cfset variables.idCurrency=1>
	<cfset variables.currency="">
	<cfset variables.idEmployee=0>
	<cfset variables.employee=0>
	<cfset module.list.orderBy="project.name, projectActivity.name">

	<cffunction name="init" access="public" output="false">
		<cfset variables.idProjectActivity=0>
		<cfset variables.idProject=0>
		<cfset variables.project="">
		<cfset variables.idCurrency=1>
		<cfset variables.currency="">
		<cfset variables.idEmployee=0>
		<cfset variables.employee=0>
	</cffunction>
	
	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdProjectActivity()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdProjectActivity(arguments.objectId)>
	</cffunction>

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

	<cffunction name="getIdProjectActivity" access="public" returntype="numeric" output="false">
		<cfreturn variables.idProjectActivity>
	</cffunction>
	
	<cffunction name="getProjectActivity" access="public" returntype="components.corporate.projectActivity" output="false">
		<cfreturn CreateObject("component", "components.corporate.projectActivity")>
	</cffunction>

	<cffunction name="setIdProject" access="remote" output="false">
		<cfargument name="idProject" type="numeric" required="yes" default="0">
		<cfset variables.idProject=arguments.idProject>
	</cffunction>

	<cffunction name="getIdProject" access="remote" returntype="numeric" output="false">
		<cfreturn variables.idProject>
	</cffunction>

	<cffunction name="getProject" access="remote" 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="remote" 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()>
			<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="setIdEmployee" access="remote" output="false">
		<cfargument name="idEmployee" type="numeric" required="yes" default="0">
		<cfset variables.idEmployee=arguments.idEmployee>
	</cffunction>

	<cffunction name="getIdEmployee" access="remote" returntype="numeric" output="false">
		<cfreturn variables.idEmployee>
	</cffunction>

	<cffunction name="getEmployee" access="remote" 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()>
			<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="getProjectActivityList" access="public" output="false" returntype="query">
		<cfargument name="orderBy" required="no" type="string" default="">

		<cfquery name="getProjectActivityListQuery" datasource="#application.datasource#">
			SELECT DISTINCT
				#getProjectActivityListQueryString()#
			LEFT JOIN employeeAccessProfile ON projectActivity.idProject=employeeAccessProfile.idProject
			WHERE
				employeeAccessProfile.idEmployee=<cfqueryparam value="#session.employee.getIdEmployee()#" cfsqltype="cf_sql_integer">
				AND (
					(projectActivity.dateEnd < <cfqueryparam value="#Now()#" cfsqltype="cf_sql_date"> OR projectActivity.dateEnd IS NULL) 
					AND 
					(projectActivity.dateEndReal >= projectActivity.dateEnd+5 OR projectActivity.dateEndReal IS NULL)
				)
				<cfif variables.idProject gt 0>
				AND projectActivity.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				</cfif>
			ORDER BY <cfif Len(arguments.orderBy)>#URLDecode(arguments.orderBy)#<cfelse>#URLDecode(module.list.orderBy)#</cfif>
		</cfquery>
		<cfreturn getProjectActivityListQuery>
	</cffunction>
	
	<cffunction name="getProjectActivityListQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				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
			">
		<cfreturn result>
	</cffunction>

	<cffunction name="getPaymentRequestList" access="public" output="false" returntype="query">
		<cfargument name="orderBy" required="no" type="string" default="">

		<cfquery name="getPaymentRequestListQuery" datasource="#application.datasource#">
			SELECT 
				#getPaymentRequestQueryString()#
			LEFT JOIN employeeAccessProfile ON projectActivity.idProject=employeeAccessProfile.idProject
			WHERE
				employeeAccessProfile.idEmployee=<cfqueryparam value="#session.employee.getIdEmployee()#" cfsqltype="cf_sql_integer">
				<cfif variables.idProject>
					AND paymentRequest.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif variables.idPaymentRequestState gt 0>
					AND paymentRequest.idPaymentRequestState=<cfqueryparam value="#variables.idPaymentRequestState#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif variables.idCompany>
					AND paymentRequest.idCompany=<cfqueryparam value="#variables.idCompany#" cfsqltype="cf_sql_integer">
				</cfif>
			GROUP BY paymentRequest.idPaymentRequest
			ORDER BY <cfif Len(arguments.orderBy)>#URLDecode(arguments.orderBy)#<cfelse>#URLDecode(module.list.orderBy)#</cfif>
		</cfquery>
		<cfreturn getPaymentRequestListQuery>
	</cffunction>
	
	<cffunction name="getPaymentRequestQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				paymentRequest.idPaymentRequest,
				paymentRequest.idPaymentRequestState, paymentRequestState.name AS paymentRequestState,
				paymentRequest.idEmployee, CONCAT(TRIM(CONCAT(employee.nameFirst, ' ', employee.nameFirst1)), ' ', TRIM(CONCAT(employee.nameLast, ' ', employee.nameLast1))) AS employee,
				paymentRequest.idProject, project.name AS project, 
				paymentRequest.idProvider, provider.name AS provider, 
				paymentRequest.idServerFile, serverFile.serverFileName AS serverFileName,
				paymentRequest.idPaymentType, paymentType.name AS paymentType, 
				paymentRequest.idCurrency, currency.name AS currency,
				paymentRequest.idCompany, company.name AS company,
				paymentRequest.dateRegistered,
				paymentRequest.billNumber,
				paymentRequest.billConcept,
				paymentRequest.billDate,
				paymentRequest.amountNoTax,
				paymentRequest.amountTaxToPay, 
				paymentRequest.amountTaxToHold1, 
				paymentRequest.amountTaxToHold2, 
				paymentRequest.amount, 
				paymentRequest.paymentTypeInfo,
				paymentRequest.comment,
				COUNT(paymentRequestDetails.idPaymentRequestDetails) AS numberOfDetails,
				GROUP_CONCAT(projectActivity.name SEPARATOR '<br>') AS projectActivity
			FROM 
				paymentRequest
			LEFT JOIN paymentRequestState ON paymentRequest.idPaymentRequestState=paymentRequestState.idPaymentRequestState
			LEFT JOIN employee ON paymentRequest.idEmployee=employee.idEmployee
			LEFT JOIN project ON paymentRequest.idProject=project.idProject
			LEFT JOIN provider ON paymentRequest.idProvider=provider.idProvider
			LEFT JOIN serverFile ON paymentRequest.idServerFile=serverFile.idServerFile
			LEFT JOIN paymentType ON paymentRequest.idPaymentType=paymentType.idPaymentType
			LEFT JOIN currency ON paymentRequest.idCurrency=currency.idCurrency
			LEFT JOIN company ON paymentRequest.idCompany=company.idCompany
			LEFT JOIN paymentRequestDetails ON paymentRequest.idPaymentRequest=paymentRequestDetails.idPaymentRequest
			LEFT JOIN projectActivity ON paymentRequestDetails.idProjectActivity=projectActivity.idProjectActivity
			">
		<cfreturn result>
	</cffunction>

</cfcomponent>