<cfcomponent extends="components.common.formObject">
	<cfset variables.idProjectSalesPlan=0>
	<cfset variables.idProject=0>
	<cfset variables.project="">
	<cfset variables.idCurrency=0>
	<cfset variables.currency="">
	<cfset variables.datePeriod="">
	<cfset variables.numberOfUnits="0">
	<cfset variables.amount="0">
	
	<cfset variables.monthPart="01">
	<cfset variables.yearPart="2005">
	<cfset module.list.orderBy="datePeriod">
	
	<cffunction name="init" access="public" output="false">
		<cfset variables.idProjectSalesPlan=0>
		<cfset variables.idProject=0>
		<cfset variables.project="">
		<cfset variables.idCurrency=0>
		<cfset variables.currency="">
		<cfset variables.datePeriod="">
		<cfset variables.numberOfUnits="0">
		<cfset variables.amount="0">

		<cfset variables.monthPart="01">
		<cfset variables.yearPart="2005">
	</cffunction>

	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdProjectSalesPlan()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdProjectSalesPlan(arguments.objectId)>
	</cffunction>
	
	<cffunction name="setIdProjectSalesPlan" access="public" output="false">
		<cfargument name="idProjectSalesPlan" type="numeric" required="yes" default="0">
		<cfset variables.idProjectSalesPlan=arguments.idProjectSalesPlan>
	</cffunction>
	
	<cffunction name="getIdProjectSalesPlan" access="public" returntype="numeric" output="false">
		<cfreturn variables.idProjectSalesPlan>
	</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="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="public" returntype="components.corporate.currency" output="false">
		<cfif not IsObject("variables.salesUnitState")><cfset variables.currency=CreateObject("component", "components.corporate.currency")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.currency.isRetrievedFromDB()) or variables.currency.getIdCurrency() neq variables.idCurrency>
			<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="setDatePeriod" access="public" output="false">
		<cfargument name="datePeriod" type="string" required="yes" default="">
		<cfset variables.datePeriod=arguments.datePeriod>
	</cffunction>

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

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

	<cffunction name="getNumberOfUnits" access="public" returntype="numeric" output="false">
		<cfreturn variables.numberOfUnits>
	</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="numeric" output="false">
		<cfreturn parseCurrency(variables.amount)>
	</cffunction>
	
	<cffunction name="setMonthPart" access="public" output="false">
		<cfargument name="monthPart" type="string" required="yes" default="01">
		<cfset variables.monthPart=arguments.monthPart>
	</cffunction>
	
	<cffunction name="getMonthPart" access="public" output="false">
		<cfreturn variables.monthPart>
	</cffunction>
	
	<cffunction name="getMonthOptions" access="public" output="true">
		<cfloop from="1" to="12" index="_monthIdx">
			<cfif not Compare(LSNumberFormat(_monthIdx, "00"), variables.monthPart)><cfset _selected=" selected"><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#LSNumberFormat(_monthIdx, "00")#"#_selected#>#LSNumberFormat(_monthIdx, "00")#</option></cfoutput>
		</cfloop>
	</cffunction>

	<cffunction name="getYearOptions" access="public" output="true">
		<cfloop from="2004" to="2010" index="_yearIdx">
			<cfif not Compare(_yearIdx, variables.yearPart)><cfset _selected=" selected"><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#_yearIdx#"#_selected#>#_yearIdx#</option></cfoutput>
		</cfloop>
	</cffunction>

	<cffunction name="setYearPart" access="public" output="false">
		<cfargument name="yearPart" type="string" required="yes" default="2005">
		<cfset variables.yearPart=arguments.yearPart>
	</cffunction>
	
	<cffunction name="getYearPart" access="public" output="false">
		<cfreturn variables.yearPart>
	</cffunction>

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idProject=getQuery.idProject>
			<cfset variables.idCurrency=getQuery.idCurrency>
			<cfset variables.datePeriod=LSDateFormat(getQuery.datePeriod, "dd/mm/yyyy")>
			<cfset variables.monthPart=LSDateFormat(getQuery.datePeriod, "mm")>
			<cfset variables.yearPart=LSDateFormat(getQuery.datePeriod, "yyyy")>
			<cfset variables.numberOfUnits=getQuery.numberOfUnits>
			<cfset variables.amount=getQuery.amount>
		</cfif>
	</cffunction>
	
	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				projectSalesPlan.idProjectSalesPlan=<cfqueryparam value="#variables.idProjectSalesPlan#" 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 
				projectSalesPlan.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
			ORDER BY <cfif Len(arguments.orderBy)>#arguments.orderBy#<cfelse>#module.list.orderBy#</cfif>
		</cfquery>
		<cfreturn getListQuery>
	</cffunction>

	<cffunction name="getQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				projectSalesPlan.idProjectSalesPlan,
				projectSalesPlan.idProject, project.name AS project,
				projectSalesPlan.idCurrency, currency.name AS currency,
				projectSalesPlan.datePeriod,
				projectSalesPlan.numberOfUnits,
				projectSalesPlan.amount
			FROM 
				projectSalesPlan 
			LEFT JOIN project ON projectSalesPlan.idProject=project.idProject
			LEFT JOIN currency ON projectSalesPlan.idCurrency=currency.idCurrency
			">
		<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 
				idProjectSalesPlan 
			FROM 
				projectSalesPlan 
			WHERE 
				idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_varchar" maxlength="255">
				AND datePeriod=<cfqueryparam value="#parseDate(variables.datePeriod)#" cfsqltype="cf_sql_date">
				<cfif variables.idProjectSalesPlan gt 0>
				AND idProjectSalesPlan != <cfqueryparam value="#variables.idProjectSalesPlan#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getIdQuery.recordcount gt 0>
			<cfset result.id=getIdQuery.idProjectSalesPlan>
		</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.idProject lt 1>
			<cfset result.message="Proyecto es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfif not Len(variables.datePeriod)>
			<cfset result.message="Periodo es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Plan de evntas para ese periodo ya existe">
			<cfreturn result>
		</cfif>
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO projectSalesPlan
					(
					idProjectSalesPlan,
					idProject, 
					idCurrency,
					datePeriod,
					numberOfUnits,
					amount
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idProjectSalesPlan#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idCurrency#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#parseDate(variables.datePeriod)#" cfsqltype="cf_sql_date">,
					<cfqueryparam value="#variables.numberOfUnits#" cfsqltype="cf_sql_integer">,
					<cfqueryparam value="#parseCurrency(variables.amount)#" cfsqltype="cf_sql_double">
					)
				ON DUPLICATE KEY UPDATE 
					idCurrency=<cfqueryparam value="#variables.idCurrency#" cfsqltype="cf_sql_integer">, 
					numberOfUnits=<cfqueryparam value="#variables.numberOfUnits#" cfsqltype="cf_sql_integer">,
					amount=<cfqueryparam value="#parseCurrency(variables.amount)#" cfsqltype="cf_sql_double">
			</cfquery>
			<cfif variables.idProjectSalesPlan lt 1>
				<cfset result=getId()>
				<cfset variables.idProjectSalesPlan=result.id>
			</cfif>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [projectSalesPlan.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.number)>
			<cfset result.message="Numero es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Unidad con esos parametros ya existe">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="updateQuery" datasource="#application.datasource#">
				UPDATE projectSalesPlan
				SET 
					idCurrency=<cfqueryparam value="#variables.idCurrency#" cfsqltype="cf_sql_integer">, 
					datePeriod=<cfqueryparam value="#parseDate(variables.datePeriod)#" cfsqltype="cf_sql_date">,
					numberOfUnits=<cfqueryparam value="#variables.numberOfUnits#" cfsqltype="cf_sql_integer">,
					amount=<cfqueryparam value="#parseCurrency(variables.amount)#" cfsqltype="cf_sql_double">
				WHERE 
					idProjectSalesPlan=<cfqueryparam value="#variables.idProjectSalesPlan#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfset result.id=variables.idProjectSalesPlan>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [projectSalesPlan.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 projectSalesPlan
				WHERE 
					idProjectSalesPlan=<cfqueryparam value="#variables.idProjectSalesPlan#" 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 [projectSalesPlan.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<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("salesUnit.datePeriod")>
		<cfset var result=0>
		<cfif list.idProjectSalesPlan gt 0><cfset result=list.idProjectSalesPlan></cfif>
		<cfloop query="list">
			<cfif list.idSalesUnit eq arguments.selected><cfset _selected=" selected"><cfset result=list.idProjectSalesPlan><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#list.idProjectSalesPlan#"#_selected#>#UCase(LSDateFormat(list.datePeriod, "MMM"))# #LSDateFormat(list.datePeriod, "yyyy")#</option></cfoutput>
		</cfloop>
		<cfreturn result>
	</cffunction>
</cfcomponent>