<cfcomponent extends="components.common.formObject">
	<cfset variables.idPaymentRequestDetails=0>
	<cfset variables.idPaymentRequest=0>
	<cfset variables.paymentRequest="">
	<cfset variables.idProjectActivity=0>
	<cfset variables.projectActivity="">
	<cfset variables.idProjectTask=0>
	<cfset variables.projectTask="">
	<cfset variables.idProjectParcel=0>
	<cfset variables.projectParcel="">
	<cfset variables.idProjectSubParcel=0>
	<cfset variables.projectSubParcel="">
	<cfset variables.amount=0>
	<cfset module.list.orderBy="idPaymentRequestDetails">

	<cffunction name="init" access="public" output="false">
		<cfset variables.idPaymentRequestDetails=0>
		<cfset variables.idPaymentRequest=0>
		<cfset variables.paymentRequest="">
		<cfset variables.idProjectActivity=0>
		<cfset variables.projectActivity="">
		<cfset variables.idProjectTask=0>
		<cfset variables.projectTask="">
		<cfset variables.idProjectParcel=0>
		<cfset variables.projectParcel="">
		<cfset variables.idProjectSubParcel=0>
		<cfset variables.projectSubParcel="">
		<cfset variables.amount=0>
	</cffunction>
	
	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdPaymentRequestDetails()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdPaymentRequestDetails(arguments.objectId)>
	</cffunction>

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

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

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

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

	<cffunction name="getProjectSubParcel" access="remote" returntype="components.corporate.projectSubParcel" output="false">
		<cfif not IsObject("variables.projectSubParcel")><cfset variables.projectSubParcel=CreateObject("component", "components.corporate.projectSubParcel")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.projectSubParcel.isRetrievedFromDB()) or variables.projectSubParcel.getIdProjectSubParcel() neq variables.idProjectSubParcel>
			<cfset variables.projectSubParcel=CreateObject("component", "components.corporate.projectSubParcel")>
			<cfset variables.projectSubParcel.setIdProjectSubParcel(variables.idProjectSubParcel)>
			<cfset variables.projectSubParcel.get()>
		</cfif>
		<cfreturn variables.projectSubParcel>
	</cffunction>

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

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

	<cffunction name="getPaymentRequest" access="remote" returntype="components.corporate.paymentRequest" output="false">
		<cfif not IsObject("variables.paymentRequest")><cfset variables.paymentRequest=CreateObject("component", "components.corporate.paymentRequest")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.paymentRequest.isRetrievedFromDB()) or variables.paymentRequest.getIdProject() neq variables.idProject>
			<cfset variables.paymentRequest=CreateObject("component", "components.corporate.paymentRequest")>
			<cfset variables.paymentRequest.setIdProject(variables.idPaymentRequest)>
			<cfset variables.paymentRequest.get()>
		</cfif>
		<cfreturn variables.paymentRequest>
	</cffunction>

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

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

	<cffunction name="getProjectParcel" access="remote" returntype="components.corporate.projectParcel" output="false">
		<cfif not IsObject("variables.projectParcel")><cfset variables.projectParcel=CreateObject("component", "components.corporate.projectParcel")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.projectParcel.isRetrievedFromDB()) or variables.projectParcel.getIdProjectParcel() neq variables.idProjectParcel>
			<cfset variables.projectParcel=CreateObject("component", "components.corporate.projectParcel")>
			<cfset variables.projectParcel.setIdProjectParcel(variables.idProjectParcel)>
			<cfset variables.projectParcel.get()>
		</cfif>
		<cfreturn variables.projectParcel>
	</cffunction>

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

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

	<cffunction name="getProjectTask" access="remote" returntype="components.corporate.projectTask" output="false">
		<cfif not IsObject("variables.projectTask")><cfset variables.projectTask=CreateObject("component", "components.corporate.projectTask")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.projectTask.isRetrievedFromDB()) or variables.projectTask.getIdProjectTask() neq variables.idProjectTask>
			<cfset variables.projectTask=CreateObject("component", "components.corporate.projectTask")>
			<cfset variables.projectTask.setIdProjectTask(variables.idProjectTask)>
			<cfset variables.projectTask.get()>
		</cfif>
		<cfreturn variables.projectTask>
	</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="remote" returntype="components.corporate.projectActivity" output="false">
		<cfif not IsObject("variables.projectActivity")><cfset variables.projectActivity=CreateObject("component", "components.corporate.projectActivity")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.projectActivity.isRetrievedFromDB()) or variables.projectActivity.getIdProjectActivity() neq variables.idProjectActivity>
			<cfset variables.projectActivity=CreateObject("component", "components.corporate.projectActivity")>
			<cfset variables.projectActivity.setIdProjectActivity(variables.idProjectActivity)>
			<cfset variables.projectActivity.get()>
		</cfif>
		<cfreturn variables.projectActivity>
	</cffunction>

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

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

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idPaymentRequestDetails=getQuery.idPaymentRequestDetails>
			<cfset variables.idPaymentRequest=getQuery.idPaymentRequest>
			<cfif Len(getQuery.idProjectActivity)><cfset variables.idProjectActivity=getQuery.idProjectActivity><cfelse><cfset variables.idProjectActivity=0></cfif>
			<cfif Len(getQuery.idProjectTask)><cfset variables.idProjectTask=getQuery.idProjectTask><cfelse><cfset variables.idProjectTask=0></cfif>
			<cfif Len(getQuery.idProjectParcel)><cfset variables.idProjectParcel=getQuery.idProjectParcel><cfelse><cfset variables.idProjectParcel=0></cfif>
			<cfif Len(getQuery.idProjectSubParcel)><cfset variables.idProjectSubParcel=getQuery.idProjectSubParcel><cfelse><cfset variables.idProjectSubParcel=0></cfif>
			<cfset variables.amount=getQuery.amount>
		</cfif>
	</cffunction>

	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				paymentRequestDetails.idPaymentRequestDetails=<cfqueryparam value="#variables.idPaymentRequestDetails#" 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
				paymentRequestDetails.idPaymentRequest=<cfqueryparam value="#variables.idPaymentRequest#" cfsqltype="cf_sql_integer">
			ORDER BY <cfif Len(arguments.orderBy)>#URLDecode(arguments.orderBy)#<cfelse>#URLDecode(module.list.orderBy)#</cfif>
		</cfquery>
		<cfreturn getListQuery>
	</cffunction>

	<cffunction name="getAmountTotal" access="public" output="false" returntype="numeric">
		<cfset var result=0>
		<cfquery name="getAmountTotalQuery" datasource="#application.datasource#">
			SELECT 
				SUM(paymentRequestDetails.amount) AS amountTotal
			FROM 
				paymentRequestDetails
			WHERE
				paymentRequestDetails.idPaymentRequest=<cfqueryparam value="#variables.idPaymentRequest#" cfsqltype="cf_sql_integer">
		</cfquery>
		<cfif getAmountTotalQuery.recordcount gt 0 and Len(getAmountTotalQuery.amountTotal)>
			<cfset result=getAmountTotalQuery.amountTotal>
		</cfif>
		<cfreturn result>
	</cffunction>
	
	<cffunction name="getQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				paymentRequestDetails.idPaymentRequestDetails,
				paymentRequestDetails.idPaymentRequest, 
				paymentRequestDetails.idProjectActivity, projectActivity.name AS projectActivity,
				paymentRequestDetails.idProjectTask, projectTask.name AS projectTask, 
				paymentRequestDetails.idProjectParcel, projectParcel.name AS projectParcel, 
				paymentRequestDetails.idProjectSubParcel, projectSubParcel.name AS projectSubParcel,
				paymentRequestDetails.amount
			FROM 
				paymentRequestDetails
			LEFT JOIN paymentRequest ON paymentRequestDetails.idPaymentRequest=paymentRequest.idPaymentRequest
			LEFT JOIN projectActivity ON paymentRequestDetails.idProjectActivity=projectActivity.idProjectActivity
			LEFT JOIN projectTask ON paymentRequestDetails.idProjectTask=projectTask.idProjectTask
			LEFT JOIN projectParcel ON paymentRequestDetails.idProjectParcel=projectParcel.idProjectParcel
			LEFT JOIN projectSubParcel ON paymentRequestDetails.idProjectSubParcel=projectSubParcel.idProjectSubParcel
			">
		<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 
				idPaymentRequestDetails 
			FROM 
				paymentRequestDetails 
			WHERE 
				paymentRequestDetails.idPaymentRequest=<cfqueryparam value="#variables.idPaymentRequest#" cfsqltype="cf_sql_integer">
				AND paymentRequestDetails.idProjectActivity<cfif variables.idProjectActivity gt 0>=<cfqueryparam value="#variables.idProjectActivity#" cfsqltype="cf_sql_integer"><cfelse> IS NULL</cfif>
				AND paymentRequestDetails.idProjectTask<cfif variables.idProjectTask gt 0>=<cfqueryparam value="#variables.idProjectTask#" cfsqltype="cf_sql_integer"><cfelse> IS NULL</cfif>
				AND paymentRequestDetails.idProjectParcel<cfif variables.idProjectParcel gt 0>=<cfqueryparam value="#variables.idProjectParcel#" cfsqltype="cf_sql_integer"><cfelse> IS NULL</cfif>
				AND paymentRequestDetails.idProjectSubParcel<cfif variables.idProjectSubParcel gt 0>=<cfqueryparam value="#variables.idProjectSubParcel#" cfsqltype="cf_sql_integer"><cfelse> IS NULL</cfif>
				<cfif variables.idPaymentRequestDetails gt 0>
				AND idPaymentRequestDetails != <cfqueryparam value="#variables.idPaymentRequestDetails#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getIdQuery.recordcount gt 0>
			<cfset result.id=getIdQuery.idPaymentRequestDetails>
		</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 --->
		<cfif variables.idProjectActivity lt 1>
			<cfset result.id=0>
			<cfset result.message="Usted debe seleccionar actividad, tarea, partida, sub-partida a que pertenece esa requisicion">
			<cfreturn result>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Detalles con esos datos ya existen">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO paymentRequestDetails
					(
					idPaymentRequest, 
					idProjectActivity, 
					idProjectTask, 
					idProjectParcel, 
					idProjectSubParcel, 
					amount
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idPaymentRequest#" cfsqltype="cf_sql_integer">, 
					<cfif variables.idProjectActivity gt 0><cfqueryparam value="#variables.idProjectActivity#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif variables.idProjectTask gt 0><cfqueryparam value="#variables.idProjectTask#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif variables.idProjectParcel gt 0><cfqueryparam value="#variables.idProjectParcel#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif variables.idProjectSubParcel gt 0><cfqueryparam value="#variables.idProjectSubParcel#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfqueryparam value="#parseCurrency(variables.amount)#" cfsqltype="cf_sql_double">
					)
			</cfquery>
			<cfset result=getId()>
			<cfset variables.idPaymentRequestDetails=result.id>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [paymentRequestDetails.create()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</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="Detalles con esos datos ya existen">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="updateQuery" datasource="#application.datasource#">
				UPDATE paymentRequestDetails
				SET 
					amount=<cfqueryparam value="#parseCurrency(variables.amount)#" cfsqltype="cf_sql_double">,
					idProjectActivity=<cfif variables.idProjectActivity gt 0><cfqueryparam value="#variables.idProjectActivity#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>,
					idProjectTask=<cfif variables.idProjectTask gt 0><cfqueryparam value="#variables.idProjectTask#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>,
					idProjectParcel=<cfif variables.idProjectParcel gt 0><cfqueryparam value="#variables.idProjectParcel#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>,
					idProjectSubParcel=<cfif variables.idProjectSubParcel gt 0><cfqueryparam value="#variables.idProjectSubParcel#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>
				WHERE 
					idPaymentRequestDetails=<cfqueryparam value="#variables.idPaymentRequestDetails#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfset result.id=variables.idPaymentRequestDetails>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [paymentRequestDetails.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="">
		<!--- check parameters --->
		<cftry>
			<cfquery name="deleteQuery" datasource="#application.datasource#">
				DELETE FROM paymentRequestDetails
				WHERE 
					idPaymentRequestDetails=<cfqueryparam value="#variables.idPaymentRequestDetails#" 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 [paymentRequestDetails.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
</cfcomponent>