<cfcomponent extends="components.common.formObject">
	<cfset variables.idCapitalMovementPayback=0>
	<cfset variables.idCapitalMovement=0>
	<cfset variables.capitalMovement="">
	<cfset variables.idCapitalMovementType=0>
	<cfset variables.capitalMovementType="">
	<cfset variables.dateExpected="">
	<cfset variables.amount=0>
	<cfset variables.description="">
	<cfset module.list.orderBy="dateExpected">

	<cfset variables.dateStart="">
	<cfset variables.dateEnd="">
	
	<cffunction name="init" access="public" output="false">
		<cfset variables.idCapitalMovementPayback=0>
		<cfset variables.idCapitalMovement=0>
		<cfset variables.capitalMovement="">
		<cfset variables.idCapitalMovementType=0>
		<cfset variables.capitalMovementType="">
		<cfset variables.dateExpected="">
		<cfset variables.amount=0>
		<cfset variables.description="">
	</cffunction>
	
	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdCapitalMovementPayback()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdCapitalMovementPayback(arguments.objectId)>
	</cffunction>

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

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

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

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

	<cffunction name="getCapitalMovement" access="public" returntype="components.corporate.capitalMovement" output="false">
		<cfif not IsObject("variables.capitalMovement")><cfset variables.capitalMovement=CreateObject("component", "components.corporate.capitalMovement")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.capitalMovement.isRetrievedFromDB()) or variables.capitalMovement.getIdCapitalMovement() neq variables.idCapitalMovement>
			<cfset variables.capitalMovement=CreateObject("component", "components.corporate.capitalMovement")>
			<cfset variables.capitalMovement.setIdCapitalMovement(variables.idCapitalMovement)>
			<cfset variables.capitalMovement.get()>
		</cfif>
		<cfreturn variables.capitalMovement>
	</cffunction>

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

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

	<cffunction name="getCapitalMovementType" access="remote" returntype="components.corporate.capitalMovementType" output="false">
		<cfif not IsObject("variables.capitalMovementType")><cfset variables.capitalMovementType=CreateObject("component", "components.corporate.capitalMovementType")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.capitalMovementType.isRetrievedFromDB()) or variables.capitalMovementType.getIdCapitalMovementType() neq variables.idCapitalMovementType>
			<cfset variables.capitalMovementType=CreateObject("component", "components.corporate.capitalMovementType")>
			<cfset variables.capitalMovementType.setIdCapitalMovementType(variables.idCapitalMovementType)>
			<cfset variables.capitalMovementType.get()>
		</cfif>
		<cfreturn variables.capitalMovementType>
	</cffunction>

	<cffunction name="setDateExpected" access="remote" output="false">
		<cfargument name="dateExpected" type="string" required="yes" default="">
		<cfset variables.dateExpected=arguments.dateExpected>
	</cffunction>

	<cffunction name="getDateExpected" access="remote" returntype="string" output="false">
		<cfreturn variables.dateExpected>
	</cffunction>

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

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

	<cffunction name="setDescription" access="remote" output="false">
		<cfargument name="description" type="string" required="yes" default="">
		<cfset variables.description=arguments.description>
	</cffunction>

	<cffunction name="getDescription" access="remote" returntype="string" output="false">
		<cfreturn variables.description>
	</cffunction>

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

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

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

	<cffunction name="getDateEnd" access="remote" returntype="string" output="false">
		<cfreturn variables.dateEnd>
	</cffunction>
	<!--- /additional --->

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idCapitalMovementPayback=getQuery.idCapitalMovementPayback>
			<cfset variables.idCapitalMovement=getQuery.idCapitalMovement>
			<cfset variables.idCapitalMovementType=getQuery.idCapitalMovementType>
			<cfset variables.dateExpected=LSDateFormat(getQuery.dateExpected, "dd/mm/yyyy")>
			<cfset variables.amount=getQuery.amount>
			<cfset variables.description=getQuery.description>
		</cfif>
	</cffunction>

	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				capitalMovementPayback.idCapitalMovementPayback=<cfqueryparam value="#variables.idCapitalMovementPayback#" 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 
				1=1
				<cfif variables.idCapitalMovement gt 0>
					AND capitalMovementPayback.idCapitalMovement=<cfqueryparam value="#variables.idCapitalMovement#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif variables.idCapitalMovementType gt 0>
					AND capitalMovementPayback.idCapitalMovementType=<cfqueryparam value="#variables.idCapitalMovementType#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif Len(variables.dateStart)>
					AND CAST(capitalMovementPayback.dateExpected AS DATE) >= <cfqueryparam value="#parseDate(variables.dateStart)#" cfsqltype="cf_sql_date">
				</cfif>
				<cfif Len(variables.dateEnd)>
					AND CAST(capitalMovementPayback.dateExpected AS DATE) <= <cfqueryparam value="#parseDate(variables.dateEnd)#" cfsqltype="cf_sql_date">
				</cfif>
			ORDER BY <cfif Len(arguments.orderBy)>#URLDecode(arguments.orderBy)#<cfelse>#URLDecode(module.list.orderBy)#</cfif>
		</cfquery>
		<cfreturn getListQuery>
	</cffunction>
	
	<cffunction name="getQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				capitalMovementPayback.idCapitalMovementPayback,
				capitalMovementPayback.idCapitalMovement, 
				capitalMovement.idCapitalParticipantFrom, capitalParticipantFrom.name AS capitalParticipantFrom,
				capitalMovement.idCapitalParticipantTo, capitalParticipantTo.name AS capitalParticipantTo,
				capitalMovementPayback.idCapitalMovementType, capitalMovementType.name AS capitalMovementType,
				capitalMovementPayback.dateExpected,
				capitalMovementPayback.amount,
				capitalMovement.idCurrency, currency.name AS currency,
				capitalMovementPayback.description,
				capitalMovementPayed.idCapitalMovement AS idCapitalMovementPayed
			FROM 
				capitalMovementPayback
			LEFT JOIN capitalMovement ON capitalMovementPayback.idCapitalMovement=capitalMovement.idCapitalMovement
			LEFT JOIN capitalParticipant AS capitalParticipantFrom ON capitalMovement.idCapitalParticipantFrom=capitalParticipantFrom.idCapitalParticipant
			LEFT JOIN capitalParticipant AS capitalParticipantTo ON capitalMovement.idCapitalParticipantTo=capitalParticipantTo.idCapitalParticipant
			LEFT JOIN capitalMovementType ON capitalMovementPayback.idCapitalMovementType=capitalMovementType.idCapitalMovementType
			LEFT JOIN currency ON capitalMovement.idCurrency=currency.idCurrency
			LEFT JOIN capitalMovement AS capitalMovementPayed ON capitalMovementPayback.idCapitalMovementPayback=capitalMovementPayed.idCapitalMovementPayback
			">
		<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("capitalMovementPayback.dateExpected")>
		<cfset var result=0>
		<cfif list.idCapitalMovement gt 0><cfset result=list.idCapitalMovement></cfif>
		<cfloop query="list">
			<cfif list.idCapitalMovement eq arguments.selected><cfset _selected=" selected"><cfset result=list.idCapitalMovement><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#list.idCapitalMovement#"#_selected#>[#LSDateFormat(list.dateExpected, "dd/mm/yyy")#] #list.capitalParticipantFrom# -> #list.capitalParticipantTo# (#list.amount#)</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 
				idCapitalMovementPayback
			FROM 
				capitalMovementPayback
			WHERE 
				idCapitalMovement=<cfqueryparam value="#variables.idCapitalMovement#" cfsqltype="cf_sql_integer">
				AND idCapitalMovementType=<cfqueryparam value="#variables.idCapitalMovementType#" cfsqltype="cf_sql_integer">
				AND dateExpected=<cfqueryparam value="#parseDate(variables.dateExpected)#" cfsqltype="cf_sql_timestamp">
				AND amount=<cfqueryparam value="#parseCurrency(variables.amount)#" cfsqltype="cf_sql_double">
				<cfif variables.idCapitalMovementPayback gt 0>
				AND idCapitalMovementPayback != <cfqueryparam value="#variables.idCapitalMovementPayback#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getIdQuery.recordcount gt 0>
			<cfset result.id=getIdQuery.idCapitalMovementPayback>
		</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.idCapitalMovement lt 1>
			<cfset result.message="Movimiento de origen son campos obligatorios">
			<cfreturn result>
		</cfif>
		<cfif not Len(variables.dateExpected)>
			<cfset variables.dateExpected=LSDateFormat(Now(), "dd/mm/yyyy")>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Movimiento de capital con esos datos ya existe">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO capitalMovementPayback
					(
						idCapitalMovement, 
						idCapitalMovementType,
						dateExpected, 
						amount, 
						description
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idCapitalMovement#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idCapitalMovementType#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#parseDate(variables.dateExpected)#" cfsqltype="cf_sql_date">,
					<cfqueryparam value="#parseCurrency(variables.amount)#" cfsqltype="cf_sql_double">,
					<cfqueryparam value="#variables.description#" cfsqltype="cf_sql_clob">
					)
			</cfquery>
			<cfset result=getId()>
			<cfset variables.idCapitalMovementPayback=result.id>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [capitalMovementPayback.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 --->
		<cfif variables.idCapitalMovement lt 1>
			<cfset result.message="Movimiento de origen son campos obligatorios">
			<cfreturn result>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Movimiento de capital con esos datos ya existe">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="updateQuery" datasource="#application.datasource#">
				UPDATE capitalMovementPayback
				SET 
					idCapitalMovementType=<cfqueryparam value="#variables.idCapitalMovementType#" cfsqltype="cf_sql_integer">, 
					dateExpected=<cfqueryparam value="#parseDate(variables.dateExpected)#" cfsqltype="cf_sql_date">,
					amount=<cfqueryparam value="#parseCurrency(variables.amount)#" cfsqltype="cf_sql_double">,
					description=<cfqueryparam value="#variables.description#" cfsqltype="cf_sql_clob">
				WHERE 
					idCapitalMovementPayback=<cfqueryparam value="#variables.idCapitalMovementPayback#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfset result.id=variables.idCapitalMovementPayback>
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [capitalMovementPayback.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>
			<cfset get()>
			<cfquery name="deleteQuery" datasource="#application.datasource#">
				DELETE FROM capitalMovementPayback
				WHERE 
					idCapitalMovementPayback=<cfqueryparam value="#variables.idCapitalMovementPayback#" 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 [capitalMovementPayback.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
</cfcomponent>