<cfcomponent extends="components.common.formObject">
	<cfset variables.idSalesPaymentPlan=0>
	<cfset variables.idProject=0>
	<cfset variables.project="">
	<cfset variables.name="">
	<cfset variables.increment=0>
	<cfset variables.booking=0>
	<cfset variables.hook=0>
	<cfset variables.monthly=0>
	<cfset variables.dateMonthlyEnd="">
	<cfset variables.final1=0>
	<cfset variables.final2=0>
	<cfset variables.dateFinal1="">
	<cfset variables.dateFinal2="">
	<cfset variables.description="">
	<cfset module.list.orderBy="name">

	<cffunction name="init" access="public" output="false">
		<cfset variables.idSalesPaymentPlan=0>
		<cfset variables.idProject=0>
		<cfset variables.project="">
		<cfset variables.name="">
		<cfset variables.increment=0>
		<cfset variables.booking=0>
		<cfset variables.hook=0>
		<cfset variables.monthly=0>
		<cfset variables.dateMonthlyEnd="">
		<cfset variables.final1=0>
		<cfset variables.final2=0>
		<cfset variables.dateFinal1="">
		<cfset variables.dateFinal2="">
		<cfset variables.description="">
	</cffunction>
	
	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getidSalesPaymentPlan()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setidSalesPaymentPlan(arguments.objectId)>
	</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="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="setName" access="public" output="false">
		<cfargument name="name" type="string" required="yes" default="">
		<cfset variables.name=arguments.name>
	</cffunction>

	<cffunction name="getName" access="public" returntype="string" output="false">
		<cfreturn variables.name>
	</cffunction>
	
	<cffunction name="setIncrement" access="public" output="false">
		<cfargument name="increment" type="numeric" required="yes" default="0">
		<cfset variables.increment=arguments.increment>
	</cffunction>
	
	<cffunction name="getIncrement" access="public" returntype="numeric" output="false">
		<cfreturn variables.increment>
	</cffunction>

	<cffunction name="setBooking" access="public" output="false">
		<cfargument name="booking" type="numeric" required="yes" default="0">
		<cfset variables.booking=parseCurrency(arguments.booking)>
	</cffunction>
	
	<cffunction name="getBooking" access="public" returntype="numeric" output="false">
		<cfreturn parseCurrency(variables.booking)>
	</cffunction>

	<cffunction name="setHook" access="public" output="false">
		<cfargument name="hook" type="numeric" required="yes" default="0">
		<cfset variables.hook=arguments.hook>
	</cffunction>
	
	<cffunction name="getHook" access="public" returntype="numeric" output="false">
		<cfreturn variables.hook>
	</cffunction>

	<cffunction name="setMonthly" access="public" output="false">
		<cfargument name="monthly" type="numeric" required="yes" default="0">
		<cfset variables.monthly=arguments.monthly>
	</cffunction>
	
	<cffunction name="getMonthly" access="public" returntype="numeric" output="false">
		<cfreturn variables.monthly>
	</cffunction>

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

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

	<cffunction name="setFinal1" access="public" output="false">
		<cfargument name="final1" type="numeric" required="yes" default="0">
		<cfset variables.final1=arguments.final1>
	</cffunction>
	
	<cffunction name="getFinal1" access="public" returntype="numeric" output="false">
		<cfreturn variables.final1>
	</cffunction>

	<cffunction name="setFinal2" access="public" output="false">
		<cfargument name="final2" type="numeric" required="yes" default="0">
		<cfset variables.final2=arguments.final2>
	</cffunction>
	
	<cffunction name="getFinal2" access="public" returntype="numeric" output="false">
		<cfreturn variables.final2>
	</cffunction>

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

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

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

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

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

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

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idSalesPaymentPlan=getQuery.idSalesPaymentPlan>
			<cfset variables.idProject=getQuery.idProject>
			<cfset variables.name=getQuery.name>
			<cfset variables.increment=getQuery.increment>
			<cfset variables.booking=getQuery.booking>
			<cfset variables.hook=getQuery.hook>
			<cfset variables.monthly=getQuery.monthly>
			<cfif Len(getQuery.dateMonthlyEnd)><cfset variables.dateMonthlyEnd=LSDateFormat(getQuery.dateMonthlyEnd, "dd/mm/yyyy")><cfelse><cfset variables.dateMonthlyEnd=""></cfif>
			<cfset variables.final1=getQuery.final1>
			<cfset variables.final2=getQuery.final2>
			<cfif Len(getQuery.dateFinal1)><cfset variables.dateFinal1=LSDateFormat(getQuery.dateFinal1, "dd/mm/yyyy")><cfelse><cfset variables.dateFinal1=""></cfif>
			<cfif Len(getQuery.dateFinal2)><cfset variables.dateFinal2=LSDateFormat(getQuery.dateFinal2, "dd/mm/yyyy")><cfelse><cfset variables.dateFinal2=""></cfif>
			<cfset variables.description=ToString(getQuery.description)>
		</cfif>
	</cffunction>

	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				salesPaymentPlan.idSalesPaymentPlan=<cfqueryparam value="#variables.idSalesPaymentPlan#" 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 
				salesPaymentPlan.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
			<!--- ORDER BY <cfif Len(arguments.orderBy)>#arguments.orderBy#<cfelse>#module.list.orderBy#</cfif> --->
			ORDER BY salesPaymentPlan.idSalesPaymentPlan DESC
		</cfquery>
		<cfreturn getListQuery>
	</cffunction>
	
	<cffunction name="getQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				salesPaymentPlan.idSalesPaymentPlan,
				salesPaymentPlan.idProject, project.name AS project,
				salesPaymentPlan.name,
				salesPaymentPlan.increment,
				salesPaymentPlan.booking,
				salesPaymentPlan.hook,
				salesPaymentPlan.monthly,
				salesPaymentPlan.dateMonthlyEnd,
				salesPaymentPlan.final1,
				salesPaymentPlan.final2,
				salesPaymentPlan.dateFinal1,
				salesPaymentPlan.dateFinal2,
				salesPaymentPlan.description
			FROM 
				salesPaymentPlan
			LEFT JOIN project ON salesPaymentPlan.idProject=project.idProject
			">
		<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("salesPaymentPlan.idSalesPaymentPlan")>
		<cfset var result=0>
		<cfif list.idSalesPaymentPlan gt 0><cfset result=list.idSalesPaymentPlan></cfif>
		<cfloop query="list">
			<cfif list.idSalesPaymentPlan eq arguments.selected><cfset _selected=" selected"><cfset result=list.idSalesPaymentPlan><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#list.idSalesPaymentPlan#"#_selected#>#list.name#</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 
				idSalesPaymentPlan 
			FROM 
				salesPaymentPlan 
			WHERE 
				name=<cfqueryparam value="#variables.name#" cfsqltype="cf_sql_varchar" maxlength="255">
				<cfif variables.idProject gt 0>
				AND idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif variables.idSalesPaymentPlan gt 0>
				AND idSalesPaymentPlan != <cfqueryparam value="#variables.idSalesPaymentPlan#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getIdQuery.recordcount gt 0>
			<cfset result.id=getIdQuery.idSalesPaymentPlan>
		</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 not Len(variables.name)>
			<cfset result.message="Nombre de provedor es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Provedor con ese nombre ya existe">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO salesPaymentPlan
					(
						idProject, 
						name, 
						increment, 
						booking, 
						hook, 
						monthly, 
						dateMonthlyEnd, 
						final1, 
						final2, 
						dateFinal1,
						dateFinal2,
						description
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.name#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#variables.increment#" cfsqltype="cf_sql_double">, 
					<cfqueryparam value="#parseCurrency(variables.booking)#" cfsqltype="cf_sql_double">, 
					<cfqueryparam value="#variables.hook#" cfsqltype="cf_sql_double">, 
					<cfqueryparam value="#variables.monthly#" cfsqltype="cf_sql_double">,
					<cfif Len(variables.dateMonthlyEnd)><cfqueryparam value="#parseDate(variables.dateMonthlyEnd)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					<cfqueryparam value="#variables.final1#" cfsqltype="cf_sql_double">, 
					<cfqueryparam value="#variables.final2#" cfsqltype="cf_sql_double">, 
					<cfif Len(variables.dateFinal1)><cfqueryparam value="#parseDate(variables.dateFinal1)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					<cfif Len(variables.dateFinal2)><cfqueryparam value="#parseDate(variables.dateFinal2)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					<cfqueryparam value="#variables.description#" cfsqltype="cf_sql_clob">
					)
			</cfquery>
			<cfset result=getId()>
			<cfset variables.idSalesPaymentPlan=result.id>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [salesPaymentPlan.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 not Len(variables.name)>
			<cfset result.message="Nombre de plan de pago es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfif not idProject>
			<cfset result.message="idProject es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Plan de pago con ese nombre ya existe">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="updateQuery" datasource="#application.datasource#">
				UPDATE salesPaymentPlan
				SET 
					idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">,
					name=<cfqueryparam value="#variables.name#" cfsqltype="cf_sql_varchar" maxlength="255">,
					increment=<cfqueryparam value="#variables.increment#" cfsqltype="cf_sql_double">, 
					booking=<cfqueryparam value="#parseCurrency(variables.booking)#" cfsqltype="cf_sql_double">, 
					hook=<cfqueryparam value="#variables.hook#" cfsqltype="cf_sql_double">, 
					monthly=<cfqueryparam value="#variables.monthly#" cfsqltype="cf_sql_double">, 
					dateMonthlyEnd=<cfif Len(variables.dateMonthlyEnd)><cfqueryparam value="#parseDate(variables.dateMonthlyEnd)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					final1=<cfqueryparam value="#variables.final1#" cfsqltype="cf_sql_double">, 
					final2=<cfqueryparam value="#variables.final2#" cfsqltype="cf_sql_double">, 
					dateFinal1=<cfif Len(variables.dateFinal1)><cfqueryparam value="#parseDate(variables.dateFinal1)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					dateFinal2=<cfif Len(variables.dateFinal2)><cfqueryparam value="#parseDate(variables.dateFinal2)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					description=<cfqueryparam value="#variables.description#" cfsqltype="cf_sql_clob">
				WHERE 
					idSalesPaymentPlan=<cfqueryparam value="#variables.idSalesPaymentPlan#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfset result.id=variables.idSalesPaymentPlan>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [salesPaymentPlan.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 salesPaymentPlan
				WHERE 
					idSalesPaymentPlan=<cfqueryparam value="#variables.idSalesPaymentPlan#" 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 [salesPaymentPlan.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>

	<cffunction name="getMonthOptions" access="public" output="true">
		<cfargument name="selected" required="yes" type="numeric" default="0">
		<cfloop from="1" to="12" index="_monthIdx">
			<cfif _monthIdx eq arguments.selected><cfset _selected=" selected"><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#_monthIdx#"#_selected#>#MonthAsString(_monthIdx)#</option></cfoutput>
		</cfloop>
	</cffunction>

	<cffunction name="getYearOptions" access="public" output="true">
		<cfargument name="selected" required="yes" type="numeric" default="0">
		<cfloop from="2003" to="2010" index="_yearIdx">
			<cfif _yearIdx eq arguments.selected><cfset _selected=" selected"><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#_yearIdx#"#_selected#>#_yearIdx#</option></cfoutput>
		</cfloop>
	</cffunction>
</cfcomponent>