<cfcomponent extends="components.common.formObject">
	<cfset variables.idProjectActivity=0>
	<cfset variables.idParent=0>
	<cfset variables.parent="">
	<cfset variables.idProject=0>
	<cfset variables.project="">
	<cfset variables.idCurrency=0>
	<cfset variables.currency="">
	<cfset variables.idEmployee=0>
	<cfset variables.employee=0>
	<cfset variables.name="">
	<cfset variables.amountAuthorized=0>
	<cfset variables.amountUsed=0>
	<cfset variables.dateStart="">
	<cfset variables.dateEnd="">
	<cfset variables.dateEndReal="">

	<cfset variables.projectActivityHistory="">
	<cfset variables.comment="">
	<cfset module.list.orderBy="projectActivity.name">

	<cffunction name="init" access="public" output="false">
		<cfset variables.idProjectActivity=0>
		<cfset variables.idParent=0>
		<cfset variables.parent="">
		<cfset variables.idProject=0>
		<cfset variables.project="">
		<cfset variables.idCurrency=0>
		<cfset variables.currency="">
		<cfset variables.idEmployee=0>
		<cfset variables.employee=0>
		<cfset variables.name="">
		<cfset variables.amountAuthorized=0>
		<cfset variables.amountUsed=0>
		<cfset variables.dateStart="">
		<cfset variables.dateEnd="">
		<cfset variables.dateEndReal="">

		<cfset variables.projectActivityHistory="">
		<cfset variables.comment="">
	</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="setIdParent" access="remote" output="false">
		<cfargument name="idParent" type="numeric" required="yes" default="0">
		<cfset variables.idParent=arguments.idParent>
	</cffunction>

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

	<cffunction name="getParent" access="remote" returntype="components.corporate.projectActivity" output="false">
		<cfif not IsObject("variables.parent")><cfset variables.parent=CreateObject("component", "components.corporate.projectActivity")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.parent.isRetrievedFromDB()) or variables.parent.getIdProjectActivity() neq variables.idParent>
			<cfset variables.parent=CreateObject("component", "components.corporate.projectActivity")>
			<cfset variables.parent.setIdProjectActivity(variables.idParent)>
			<cfset variables.parent.get()>
		</cfif>
		<cfreturn variables.parent>
	</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="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="setAmountAuthorized" access="public" output="false">
		<cfargument name="amountAuthorized" type="string" required="yes" default="0">
		<cfset variables.amountAuthorized=parseCurrency(arguments.amountAuthorized)>
	</cffunction>

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

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

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

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

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

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

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

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

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

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idProjectActivity=getQuery.idProjectActivity>
			<cfif Len(getQuery.idParent)><cfset variables.idParent=getQuery.idParent><cfelse><cfset variables.idParent=0></cfif>
			<cfset variables.idProject=getQuery.idProject>
			<cfif Len(getQuery.idCurrency)><cfset variables.idCurrency=getQuery.idCurrency><cfelse><cfset variables.idCurrency=0></cfif>
			<cfif Len(getQuery.idEmployee)><cfset variables.idEmployee=getQuery.idEmployee><cfelse><cfset variables.idEmployee=0></cfif>
			<cfset variables.name=getQuery.name>
			<cfset variables.amountAuthorized=getQuery.amountAuthorized>
			<cfset variables.amountUsed=getQuery.amountUsed>
			<cfif Len(getQuery.dateStart)><cfset variables.dateStart=LSDateFormat(getQuery.dateStart, "dd/mm/yyyy")><cfelse><cfset variables.dateStart=""></cfif>
			<cfif Len(getQuery.dateEnd)><cfset variables.dateEnd=LSDateFormat(getQuery.dateEnd, "dd/mm/yyyy")><cfelse><cfset variables.dateEnd=""></cfif>
			<cfif Len(getQuery.dateEndReal)><cfset variables.dateEndReal=LSDateFormat(getQuery.dateEndReal, "dd/mm/yyyy")><cfelse><cfset variables.dateEndReal=""></cfif>
		</cfif>
	</cffunction>

	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				projectActivity.idProjectActivity=<cfqueryparam value="#variables.idProjectActivity#" 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
				projectActivity.idProject=<cfqueryparam value="#variables.idProject#" 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="getQueryString" 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="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 
				idProjectActivity 
			FROM 
				projectActivity 
			WHERE 
				name=<cfqueryparam value="#variables.name#" cfsqltype="cf_sql_varchar" maxlength="255">
				AND idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				<cfif variables.idProjectActivity gt 0>
				AND idProjectActivity != <cfqueryparam value="#variables.idProjectActivity#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getIdQuery.recordcount gt 0>
			<cfset result.id=getIdQuery.idProjectActivity>
		</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.name)>
			<cfset result.message="Nombre de la actividad es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Actividad con ese nombre ya existe">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO projectActivity
					(
					idProjectActivity, 
					idParent, 
					idProject, 
					idCurrency, 
					idEmployee, 
					name, 
					amountAuthorized,
					amountUsed,
					dateStart, 
					dateEnd,
					dateEndReal
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idProjectActivity#" cfsqltype="cf_sql_integer">, 
					<cfif variables.idParent gt 0><cfqueryparam value="#variables.idParent#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">, 
					<cfif variables.idCurrency gt 0><cfqueryparam value="#variables.idCurrency#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif variables.idEmployee gt 0><cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfqueryparam value="#variables.name#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#parseCurrency(variables.amountAuthorized)#" cfsqltype="cf_sql_double">,
					<cfqueryparam value="#parseCurrency(variables.amountUsed)#" cfsqltype="cf_sql_double">,
					<cfif variables.dateStart gt 0><cfqueryparam value="#parseDate(variables.dateStart)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>, 
					<cfif variables.dateEnd gt 0><cfqueryparam value="#parseDate(variables.dateEnd)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>, 
					<cfif variables.dateEndReal gt 0><cfqueryparam value="#parseDate(variables.dateEndReal)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>
					)
			</cfquery>
			<cfset result=getId()>
			<cfset variables.idProjectActivity=result.id>
			<cfset createHistoryRecord()>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [projectActivity.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 tipo de empleado es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Tipo de empleado con ese nombre ya existe">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="updateQuery" datasource="#application.datasource#">
				UPDATE projectActivity
				SET 
					idParent=<cfif variables.idParent gt 0><cfqueryparam value="#variables.idParent#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">, 
					idCurrency=<cfif variables.idCurrency gt 0><cfqueryparam value="#variables.idCurrency#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					idEmployee=<cfif variables.idEmployee gt 0><cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					name=<cfqueryparam value="#variables.name#" cfsqltype="cf_sql_varchar" maxlength="255">,
					amountAuthorized=<cfqueryparam value="#parseCurrency(variables.amountAuthorized)#" cfsqltype="cf_sql_double">,
					amountUsed=<cfqueryparam value="#parseCurrency(variables.amountUsed)#" cfsqltype="cf_sql_double">,
					dateStart=<cfif variables.dateStart gt 0><cfqueryparam value="#parseDate(variables.dateStart)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>, 
					dateEnd=<cfif variables.dateEnd gt 0><cfqueryparam value="#parseDate(variables.dateEnd)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>, 
					dateEndReal=<cfif variables.dateEndReal gt 0><cfqueryparam value="#parseDate(variables.dateEndReal)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>
				WHERE 
					idProjectActivity=<cfqueryparam value="#variables.idProjectActivity#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfset result.id=variables.idProjectActivity>
			<cfset createHistoryRecord()>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [projectActivity.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 projectActivity
				WHERE 
					idProjectActivity=<cfqueryparam value="#variables.idProjectActivity#" 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 [projectActivity.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("projectActivity.idProjectActivity")>
		<cfset var result=0>
		<cfif list.idProjectActivity gt 0><cfset result=list.idProjectActivity></cfif>
		<cfloop query="list">
			<cfif list.idProjectActivity eq arguments.selected><cfset _selected=" selected"><cfset result=list.idProjectActivity><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#list.idProjectActivity#"#_selected#>#list.name#</option></cfoutput>
		</cfloop>
		<cfreturn result>
	</cffunction>
	
	<cffunction name="getProjectActivityHistory" access="remote" returntype="components.corporate.projectActivityHistory" output="false">
		<cfif not IsObject("variables.projectActivityHistory")>
			<cfset variables.projectActivityHistory=CreateObject("component", "components.corporate.projectActivityHistory")>
		<cfelse>
			<cfset variables.projectActivityHistory.init()>
		</cfif>
		<cfset variables.projectActivityHistory.setIdProjectActivity(variables.idProjectActivity)>
		<cfset variables.projectActivityHistory.setIdParent(variables.idParent)>
		<cfset variables.projectActivityHistory.setIdProject(variables.idProject)>
		<cfreturn variables.projectActivityHistory>
	</cffunction>

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

	<cffunction name="getComment" access="public" returntype="string" output="false">
		<cfreturn variables.comment>
	</cffunction>
	
	<cffunction name="createHistoryRecord" access="private" output="false">
		<cfset getProjectActivityHistory()>
		<cfset variables.projectActivityHistory.setIdRegistrant(session.employee.getIdEmployee())>
		<cfset variables.projectActivityHistory.setIdEmployee(variables.idEmployee)>
		<cfset variables.projectActivityHistory.setName(variables.name)>
		<cfset variables.projectActivityHistory.setIdCurrency(variables.idCurrency)>
		<cfset variables.projectActivityHistory.setAmountAuthorized(variables.amountAuthorized)>
		<cfset variables.projectActivityHistory.setAmountUsed(variables.amountUsed)>
		<cfset variables.projectActivityHistory.setDateStart(variables.dateStart)>
		<cfset variables.projectActivityHistory.setDateEnd(variables.dateEnd)>
		<cfset variables.projectActivityHistory.setDateEndReal(variables.dateEndReal)>
		<cfset variables.projectActivityHistory.setComment(variables.comment)>
		<cfset variables.projectActivityHistory.create()>
	</cffunction>
</cfcomponent>