<cfcomponent extends="components.common.formObject">
	<cfset variables.idPaymentRequest=0>
	<cfset variables.idPaymentRequestState=0><cfset variables.paymentRequestState="">
	<cfset variables.idEmployee=0><cfset variables.employee=0>
	<cfset variables.idProject=0><cfset variables.project="">
	<cfset variables.idProvider=0><cfset variables.provider="">
	<cfset variables.idServerFile=0><cfset variables.serverFile=CreateObject("component", "components.corporate.serverFile")>
	<cfset variables.idPaymentType=0><cfset variables.paymentType="">
	<cfset variables.idCurrency=1><cfset variables.currency="">
	<cfset variables.idCompany=0><cfset variables.company="">
	<cfset variables.dateRegistered=LSDateFormat(Now(), "dd/mm/yyyy") & " " & LSTimeFormat(Now(), "HH:mm:ss")>
	<cfset variables.billNumber="">
	<cfset variables.billConcept="">
	<cfset variables.billDate="">
	<cfset variables.amountNoTax=0>
	<cfset variables.amountTaxToPay=0>
	<cfset variables.amountTaxToHold1=0>
	<cfset variables.amountTaxToHold2=0>
	<cfset variables.amount=0>
	<cfset variables.paymentTypeInfo="">
	<cfset variables.comment="">
	<cfset module.list.orderBy="paymentRequest.dateRegistered DESC">
	
	<cfset variables.dateStart="">
	<cfset variables.dateEnd="">
	<cfset variables.idProjectActivity=0>
	<cfset variables.projectActivity="">

	<cffunction name="init" access="public" output="false">
		<cfset variables.idPaymentRequest=0>
		<cfset variables.idPaymentRequestState=0><cfset variables.paymentRequestState="">
		<cfset variables.idEmployee=0><cfset variables.employee=0>
		<cfset variables.idProject=0><cfset variables.project="">
		<cfset variables.idProvider=0><cfset variables.provider="">
		<cfset variables.idServerFile=0><cfset variables.serverFile=CreateObject("component", "components.corporate.serverFile")>
		<cfset variables.idPaymentType=0><cfset variables.paymentType="">
		<cfset variables.idCurrency=1><cfset variables.currency="">
		<cfset variables.idCompany=0><cfset variables.company="">
		<cfset variables.dateRegistered=LSDateFormat(Now(), "dd/mm/yyyy") & " " & LSTimeFormat(Now(), "HH:mm:ss")>
		<cfset variables.billNumber="">
		<cfset variables.billConcept="">
		<cfset variables.billDate="">
		<cfset variables.amountNoTax=0>
		<cfset variables.amountTaxToPay=0>
		<cfset variables.amountTaxToHold1=0>
		<cfset variables.amountTaxToHold2=0>
		<cfset variables.amount=0>
		<cfset variables.paymentTypeInfo="">
		<cfset variables.comment="">

		<cfset variables.idProjectActivity=0>
		<cfset variables.projectActivity="">
	</cffunction>

	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdPaymentRequest()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdPaymentRequest(arguments.objectId)>
	</cffunction>

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

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

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

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

	<cffunction name="getPaymentRequestState" access="remote" returntype="components.corporate.paymentRequestState" output="false">
		<cfif not IsObject("variables.paymentRequestState")><cfset variables.paymentRequestState=CreateObject("component", "components.corporate.paymentRequestState")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.paymentRequestState.isRetrievedFromDB()) or variables.paymentRequestState.getIdPaymentRequestState() neq variables.idPaymentRequestState>
			<cfset variables.paymentRequestState=CreateObject("component", "components.corporate.paymentRequestState")>
			<cfset variables.paymentRequestState.setIdPaymentRequestState(variables.idPaymentRequestState)>
			<cfset variables.paymentRequestState.get()>
		</cfif>
		<cfreturn variables.paymentRequestState>
	</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="true">
		<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()) or variables.employee.getIdEmployee() neq variables.idEmployee>
			<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="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="setIdProvider" access="public" output="false">
		<cfargument name="idProvider" type="numeric" required="yes" default="0">
		<cfset variables.idProvider=arguments.idProvider>
	</cffunction>

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

	<cffunction name="getProvider" access="remote" returntype="components.corporate.provider" output="false">
		<cfif not IsObject("variables.provider")><cfset variables.provider=CreateObject("component", "components.corporate.provider")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.provider.isRetrievedFromDB()) or variables.provider.getIdProvider() neq variables.idProvider>
			<cfset variables.provider=CreateObject("component", "components.corporate.provider")>
			<cfset variables.provider.setIdProvider(variables.idProvider)>
			<cfset variables.provider.get()>
		</cfif>
		<cfreturn variables.provider>
	</cffunction>

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

	<cffunction name="getIdServerFile" access="public" returntype="numeric" output="false">
		<cfreturn variables.idServerFile>
	</cffunction>
	
	<cffunction name="getServerFile" access="public" returntype="components.corporate.serverFile" output="false">
		<cfif (Compare(module.form.pageAction, "add") and not variables.serverFile.isRetrievedFromDB()) or variables.serverFile.getIdServerFile() neq variables.idServerFile>
			<cfset variables.serverFile=CreateObject("component", "components.corporate.serverFile")>
			<cfset variables.serverFile.setIdServerFile(variables.idServerFile)>
			<cfset variables.serverFile.get()>
		</cfif>
		<cfreturn variables.serverFile>
	</cffunction>
	
	<cffunction name="setIdPaymentType" access="public" output="false">
		<cfargument name="idPaymentType" type="numeric" required="yes" default="0">
		<cfset variables.idPaymentType=arguments.idPaymentType>
	</cffunction>

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

	<cffunction name="getPaymentType" access="remote" returntype="components.corporate.paymentType" output="false">
		<cfif not IsObject("variables.paymentType")><cfset variables.paymentType=CreateObject("component", "components.corporate.paymentType")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.paymentType.isRetrievedFromDB()) or variables.paymentType.getIdPaymentType() neq variables.idPaymentType>
			<cfset variables.paymentType=CreateObject("component", "components.corporate.paymentType")>
			<cfset variables.paymentType.setIdPaymentType(variables.idPaymentType)>
			<cfset variables.paymentType.get()>
		</cfif>
		<cfreturn variables.paymentType>
	</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="setIdCompany" access="public" output="false">
		<cfargument name="idCompany" type="numeric" required="yes" default="0">
		<cfset variables.idCompany=arguments.idCompany>
	</cffunction>

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

	<cffunction name="getCompany" access="public" returntype="components.corporate.company" output="false">
		<cfif not IsObject("variables.company")><cfset variables.company=CreateObject("component", "components.corporate.company")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.company.isRetrievedFromDB()) or variables.company.getIdCompany() neq variables.idCompany>
			<cfset variables.company=CreateObject("component", "components.corporate.company")>
			<cfset variables.company.setIdCompany(variables.idCompany)>
			<cfset variables.company.get()>
		</cfif>
		<cfreturn variables.company>
	</cffunction>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	<cffunction name="getAmountTaxToHold2" access="public" returntype="string" output="false">
		<cfreturn parseCurrency(variables.amountTaxToHold2)>
	</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="setPaymentTypeInfo" access="remote" output="false">
		<cfargument name="paymentTypeInfo" type="string" required="yes" default="">
		<cfset variables.paymentTypeInfo=arguments.paymentTypeInfo>
	</cffunction>

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

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

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

	<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>

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

	<cffunction name="getIdProjectActivity" access="remote" 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="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idPaymentRequest=getQuery.idPaymentRequest>
			<cfset variables.idPaymentRequestState=getQuery.idPaymentRequestState>
			<cfif Len(getQuery.idEmployee)><cfset variables.idEmployee=getQuery.idEmployee><cfelse><cfset variables.idEmployee=0></cfif>
			<cfset variables.idProject=getQuery.idProject>
			<cfset variables.idProvider=getQuery.idProvider>
			<cfif Len(getQuery.idServerFile)><cfset variables.idServerFile=getQuery.idServerFile><cfelse><cfset variables.idServerFile=0></cfif>
			<cfif Len(getQuery.idPaymentType)><cfset variables.idPaymentType=getQuery.idPaymentType><cfelse><cfset variables.idPaymentType=0></cfif>
			<cfif Len(getQuery.idCurrency)><cfset variables.idCurrency=getQuery.idCurrency><cfelse><cfset variables.idCurrency=0></cfif>
			<cfif Len(getQuery.idCompany)><cfset variables.idCompany=getQuery.idCompany><cfelse><cfset variables.idCompany=0></cfif>
			<cfif Len(getQuery.dateRegistered)><cfset variables.dateRegistered=LSDateFormat(getQuery.dateRegistered, "dd/mm/yyyy") & " " & LSTimeFormat(getQuery.dateRegistered, "HH:mm:ss")><cfelse><cfset variables.dateRegistered=""></cfif>
			<cfset variables.billNumber=getQuery.billNumber>
			<cfset variables.billConcept=getQuery.billConcept>
			<cfif Len(getQuery.billDate)><cfset variables.billDate=LSDateFormat(getQuery.billDate, "dd/mm/yyyy") & " " & LSTimeFormat(getQuery.billDate, "HH:mm:ss")><cfelse><cfset variables.billDate=""></cfif>
			<cfset variables.amountNoTax=getQuery.amountNoTax>
			<cfset variables.amountTaxToPay=getQuery.amountTaxToPay>
			<cfset variables.amountTaxToHold1=getQuery.amountTaxToHold1>
			<cfset variables.amountTaxToHold2=getQuery.amountTaxToHold2>
			<cfset variables.amount=getQuery.amount>
			<cfset variables.paymentTypeInfo=ToString(getQuery.paymentTypeInfo)>
			<cfset variables.comment=ToString(getQuery.comment)>
		</cfif>
	</cffunction>

	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				paymentRequest.idPaymentRequest=<cfqueryparam value="#variables.idPaymentRequest#" cfsqltype="cf_sql_integer">
			GROUP BY paymentRequest.idPaymentRequest
		</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
				paymentRequest.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				<cfif variables.idPaymentRequestState gt 0>
					AND paymentRequest.idPaymentRequestState=<cfqueryparam value="#variables.idPaymentRequestState#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif variables.idProvider>
					AND paymentRequest.idProvider=<cfqueryparam value="#variables.idProvider#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif variables.idCompany>
					AND paymentRequest.idCompany=<cfqueryparam value="#variables.idCompany#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif variables.idEmployee>
					AND paymentRequest.idEmployee=<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif variables.idProjectActivity gt 0>
					AND projectActivity.idProjectActivity=<cfqueryparam value="#variables.idProjectActivity#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif Len(variables.dateStart)>
					AND CAST(paymentRequest.dateRegistered AS DATE) >= <cfqueryparam value="#parseDate(variables.dateStart)#" cfsqltype="cf_sql_date">
				</cfif>
				<cfif Len(variables.dateEnd)>
					AND CAST(paymentRequest.dateRegistered AS DATE) <= <cfqueryparam value="#parseDate(variables.dateEnd)#" cfsqltype="cf_sql_date">
				</cfif>
			GROUP BY paymentRequest.idPaymentRequest
			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="
				paymentRequest.idPaymentRequest,
				paymentRequest.idPaymentRequestState, paymentRequestState.name AS paymentRequestState,
				paymentRequest.idEmployee, CONCAT(TRIM(CONCAT(employee.nameFirst, ' ', employee.nameFirst1)), ' ', TRIM(CONCAT(employee.nameLast, ' ', employee.nameLast1))) AS employee,
				paymentRequest.idProject, project.name AS project, 
				paymentRequest.idProvider, provider.name AS provider, 
				paymentRequest.idServerFile, serverFile.serverFileName AS serverFileName,
				paymentRequest.idPaymentType, paymentType.name AS paymentType, 
				paymentRequest.idCurrency, currency.name AS currency,
				paymentRequest.idCompany, company.name AS company,
				paymentRequest.dateRegistered,
				paymentRequest.billNumber,
				paymentRequest.billConcept,
				paymentRequest.billDate,
				paymentRequest.amountNoTax,
				paymentRequest.amountTaxToPay, 
				paymentRequest.amountTaxToHold1, 
				paymentRequest.amountTaxToHold2, 
				paymentRequest.amount, 
				paymentRequest.paymentTypeInfo,
				paymentRequest.comment,
				COUNT(paymentRequestDetails.idPaymentRequestDetails) AS numberOfDetails,
				GROUP_CONCAT(projectActivity.name SEPARATOR '<br>') AS projectActivity
			FROM 
				paymentRequest
			LEFT JOIN paymentRequestState ON paymentRequest.idPaymentRequestState=paymentRequestState.idPaymentRequestState
			LEFT JOIN employee ON paymentRequest.idEmployee=employee.idEmployee
			LEFT JOIN project ON paymentRequest.idProject=project.idProject
			LEFT JOIN provider ON paymentRequest.idProvider=provider.idProvider
			LEFT JOIN serverFile ON paymentRequest.idServerFile=serverFile.idServerFile
			LEFT JOIN paymentType ON paymentRequest.idPaymentType=paymentType.idPaymentType
			LEFT JOIN currency ON paymentRequest.idCurrency=currency.idCurrency
			LEFT JOIN company ON paymentRequest.idCompany=company.idCompany
			LEFT JOIN paymentRequestDetails ON paymentRequest.idPaymentRequest=paymentRequestDetails.idPaymentRequest
			LEFT JOIN projectActivity ON paymentRequestDetails.idProjectActivity=projectActivity.idProjectActivity
			">
		<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 
				idPaymentRequest 
			FROM 
				paymentRequest 
			WHERE 
				idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				AND idProvider=<cfqueryparam value="#variables.idProvider#" cfsqltype="cf_sql_integer">
				AND billNumber=<cfqueryparam value="#variables.billNumber#" cfsqltype="cf_sql_varchar" maxlength="255">
				AND billConcept=<cfqueryparam value="#variables.billConcept#" cfsqltype="cf_sql_varchar" maxlength="255">
				<cfif variables.idPaymentRequest gt 0>
				AND idPaymentRequest != <cfqueryparam value="#variables.idPaymentRequest#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getIdQuery.recordcount gt 0>
			<cfset result.id=getIdQuery.idPaymentRequest>
		</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 variables.idProvider lt 1>
			<cfset result.message="Provedor es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfif not Len(variables.billNumber)>
			<cfset result.message="Numero de la factura es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfif not Len(variables.billConcept)>
			<cfset result.message="Concepto de la factura es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Requisicion de pago con esos datos ya existe">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO paymentRequest
					(
					idPaymentRequest, 
					idPaymentRequestState, 
					idEmployee, 
					idProject, 
					idProvider, 
					idServerFile, 
					idPaymentType,
					idCurrency,
					idCompany,
					dateRegistered, 
					billNumber,
					billConcept, 
					billDate, 
					amountNoTax, 
					amountTaxToPay, 
					amountTaxToHold1,
					amountTaxToHold2,
					amount,
					paymentTypeInfo, 
					comment
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idPaymentRequest#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#application.paymentRequestState.created#" cfsqltype="cf_sql_integer">, 
					<cfif variables.idEmployee gt 0><cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idProvider#" cfsqltype="cf_sql_integer">, 
					<cfif variables.idServerFile gt 0><cfqueryparam value="#variables.idServerFile#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif variables.idPaymentType gt 0><cfqueryparam value="#variables.idPaymentType#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif variables.idCurrency gt 0><cfqueryparam value="#variables.idCurrency#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif variables.idCompany gt 0><cfqueryparam value="#variables.idCompany#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfqueryparam value="#Now()#" cfsqltype="cf_sql_timestamp">,
					<cfqueryparam value="#variables.billNumber#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#variables.billConcept#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfif variables.billDate gt 0><cfqueryparam value="#parseDate(variables.billDate)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>, 
					<cfqueryparam value="#parseCurrency(variables.amountNoTax)#" cfsqltype="cf_sql_double">,
					<cfqueryparam value="#parseCurrency(variables.amountTaxToPay)#" cfsqltype="cf_sql_double">,
					<cfqueryparam value="#parseCurrency(variables.amountTaxToHold1)#" cfsqltype="cf_sql_double">,
					<cfqueryparam value="#parseCurrency(variables.amountTaxToHold2)#" cfsqltype="cf_sql_double">,
					<cfqueryparam value="#parseCurrency(variables.amount)#" cfsqltype="cf_sql_double">,
					<cfqueryparam value="#encode(variables.paymentTypeInfo)#" cfsqltype="cf_sql_clob">,
					<cfqueryparam value="#encode(variables.comment)#" cfsqltype="cf_sql_clob">
					)
			</cfquery>
			<cfset result=getId()>
			<cfset variables.idPaymentRequest=result.id>
			<!--- create a hsitory record --->
			<cfset _paymentRequestStateHistory=application.objectManager.getAppObject("paymentRequestStateHistory")>
			<cfset _paymentRequestStateHistory.setIdPaymentRequest(variables.idPaymentRequest)>
			<cfset _paymentRequestStateHistory.setIdPaymentRequestState(variables.idPaymentRequestState)>
			<cfset _paymentRequestStateHistory.setIdEmployee(variables.idEmployee)>
			<cfset _paymentRequestStateHistory.create()>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [paymentRequest.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.idProject lt 1>
			<cfset result.message="Proyecto es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfif variables.idProvider lt 1>
			<cfset result.message="Provedor es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfif not Len(variables.billNumber)>
			<cfset result.message="Numero de la factura es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfif not Len(variables.billConcept)>
			<cfset result.message="Concepto de la factura es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Requisicion de pago con esos datos ya existe">
			<cfreturn result>
		</cfif>
		<cftry>
			<cfquery name="updateQuery" datasource="#application.datasource#">
				UPDATE paymentRequest
				SET 
					idPaymentRequestState=<cfqueryparam value="#variables.idPaymentRequestState#" cfsqltype="cf_sql_integer">, 
					idEmployee=<cfif variables.idEmployee gt 0><cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">, 
					idProvider=<cfqueryparam value="#variables.idProvider#" cfsqltype="cf_sql_integer">, 
					idServerFile=<cfif variables.idServerFile gt 0><cfqueryparam value="#variables.idServerFile#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					idPaymentType=<cfif variables.idPaymentType gt 0><cfqueryparam value="#variables.idPaymentType#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					idCurrency=<cfif variables.idCurrency gt 0><cfqueryparam value="#variables.idCurrency#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					idCompany=<cfif variables.idCompany gt 0><cfqueryparam value="#variables.idCompany#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					billNumber=<cfqueryparam value="#variables.billNumber#" cfsqltype="cf_sql_varchar" maxlength="255">,
					billConcept=<cfqueryparam value="#variables.billConcept#" cfsqltype="cf_sql_varchar" maxlength="255">,
					billDate=<cfif variables.billDate gt 0><cfqueryparam value="#parseDate(variables.billDate)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>, 
					amountNoTax=<cfqueryparam value="#parseCurrency(variables.amountNoTax)#" cfsqltype="cf_sql_double">,
					amountTaxToPay=<cfqueryparam value="#parseCurrency(variables.amountTaxToPay)#" cfsqltype="cf_sql_double">,
					amountTaxToHold1=<cfqueryparam value="#parseCurrency(variables.amountTaxToHold1)#" cfsqltype="cf_sql_double">,
					amountTaxToHold2=<cfqueryparam value="#parseCurrency(variables.amountTaxToHold2)#" cfsqltype="cf_sql_double">,
					amount=<cfqueryparam value="#parseCurrency(variables.amount)#" cfsqltype="cf_sql_double">,
					paymentTypeInfo=<cfqueryparam value="#encode(variables.paymentTypeInfo)#" cfsqltype="cf_sql_clob">,
					comment=<cfqueryparam value="#encode(variables.comment)#" cfsqltype="cf_sql_clob">
				WHERE 
					idPaymentRequest=<cfqueryparam value="#variables.idPaymentRequest#" cfsqltype="cf_sql_integer">
			</cfquery>
			<!--- check state --->
			<!--- LINK WITH PAYMENT REQUEST
			<cfif variables.idPaymentRequestState eq application.paymentRequestState.approvedDirector>
				<cfset _changeRateMatrix=application.objectManager.getAppObject("currencyChangeRate").getChangeRateMatrix()>
				<cfset _capital=application.objectManager.getAppObject("capital")>
				<cfset _capital.init()>
				<cfset _capital.setIdProject(variables.idProject)>
				<cfset _capital.setIdCapital(_capital.getId().id)>
				<cfset _capital.get()>
				<cfif _capital.getIdCurrency() neq variables.idCurrency>
					<cfset _changeRate=_changeRateMatrix[variables.idCurrency][_capital.getIdCurrency()]>
					<cfset _amount=variables.amount*_changeRate>
				<cfelse>
					<cfset _amount=variables.amount>
				</cfif>
				<cfset _capital.setAmountOutProject(_capital.getAmountOutProject()+_amount)>
				<cfset _capital.setAmount(_capital.getAmount()-_amount)>
				<cfset _capital.update()>
			</cfif>
			---->
			<cfif variables.idPaymentRequestState eq application.paymentRequestState.payed>
				<!--- aprobado por director - sacar el monto de plata --->
				<cfset _paymentRequestDetails=CreateObject("component", "components.corporate.paymentRequestDetails")>
				<cfset _paymentRequestDetails.setIdPaymentRequest(variables.idPaymentRequest)>
				<cfset _list=_paymentRequestDetails.getList()>
				<cfloop query="_list">
					<cfset _paymentRequestDetails.init()>
					<cfset _paymentRequestDetails.setIdPaymentRequestDetails(_list.idPaymentRequestDetails)>
					<cfset _paymentRequestDetails.get()>
					<cfif _paymentRequestDetails.getIdProjectActivity() gt 0>
						<cfset _projectActivity=_paymentRequestDetails.getProjectActivity()>
						<cfset _projectActivity.setAmountUsed(parseCurrency(_projectActivity.getAmountUsed())+parseCurrency(_paymentRequestDetails.getAmount()))>
						<cfset _projectActivity.update()>
					</cfif>
					<cfif _paymentRequestDetails.getIdProjectTask() gt 0>
						<cfset _projectTask=_paymentRequestDetails.getProjectTask()>
						<cfset _projectTask.setAmountUsed(parseCurrency(_projectTask.getAmountUsed())+parseCurrency(_paymentRequestDetails.getAmount()))>
						<cfset _projectTask.update()>
					</cfif>
					<cfif _paymentRequestDetails.getIdProjectParcel() gt 0>
						<cfset _projectParcel=_paymentRequestDetails.getProjectParcel()>
						<cfset _projectParcel.setAmountUsed(parseCurrency(_projectParcel.getAmountUsed())+parseCurrency(_paymentRequestDetails.getAmount()))>
						<cfset _projectParcel.update()>
					</cfif>
					<cfif _paymentRequestDetails.getIdProjectSubParcel() gt 0>
						<cfset _projectSubParcel=_paymentRequestDetails.getProjectSubParcel()>
						<cfset _projectSubParcel.setAmountUsed(parseCurrency(_projectSubParcel.getAmountUsed())+parseCurrency(_paymentRequestDetails.getAmount()))>
						<cfset _projectSubParcel.update()>
					</cfif>
				</cfloop>
			</cfif>
			<cfset result.id=variables.idPaymentRequest>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [paymentRequest.update()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>

	<cffunction name="updateState" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<!--- check parameters --->
		<cftry>
			<cfquery name="updateStateQuery" datasource="#application.datasource#">
				UPDATE paymentRequest
				SET 
					idPaymentRequestState=<cfqueryparam value="#variables.idPaymentRequestState#" cfsqltype="cf_sql_integer">, 
				WHERE 
					idPaymentRequest=<cfqueryparam value="#variables.idPaymentRequest#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfset result.id=variables.idPaymentRequest>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [paymentRequest.updateState()]: " & 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 paymentRequest
				WHERE 
					idPaymentRequest=<cfqueryparam value="#variables.idPaymentRequest#" 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 [paymentRequest.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("paymentRequest.idPaymentRequest")>
		<cfset var result=0>
		<cfif list.idPaymentRequest gt 0><cfset result=list.idPaymentRequest></cfif>
		<cfloop query="list">
			<cfif list.idPaymentRequest eq arguments.selected><cfset _selected=" selected"><cfset result=list.idPaymentRequest><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#list.idPaymentRequest#"#_selected#>#list.billConcept#</option></cfoutput>
		</cfloop>
		<cfreturn result>
	</cffunction>
	
	<cffunction name="numberToLetter" access="public" returntype="string" output="false">
		<cfargument name="number" required="yes" type="numeric" default="0">
		<cfset var result="">
		<cfset var char="">
		<cfset var _number="">
		<cfif arguments.number gt 999999999>
			<cfset result="el numero es muy grande">
		<cfelse>
			<cfset _number=NumberFormat(arguments.number, "000000000.00")>
			<!-- millones --->
			<cfset char1=Mid(_number, 1, 1)>
			<cfset char2=Mid(_number, 2, 1)>
			<cfset char3=Mid(_number, 3, 1)>
			<cfset char4=Mid(_number, 4, 1)>
			<cfset char5=Mid(_number, 5, 1)>
			<cfset char6=Mid(_number, 6, 1)>
			<cfset char7=Mid(_number, 7, 1)>
			<cfset char8=Mid(_number, 8, 1)>
			<cfset char9=Mid(_number, 9, 1)>
				<cfif not Compare(char1, "0")></cfif>
				<cfif not Compare(char1, "1")><cfif not Compare(char2, "0") and not Compare(char3, "0")><cfset result=result & "Cien "><cfelse><cfset result=result & "Ciento "></cfif></cfif>
				<cfif not Compare(char1, "2")><cfset result=result & "Doscientos "></cfif>
				<cfif not Compare(char1, "3")><cfset result=result & "Trescientos "></cfif>
				<cfif not Compare(char1, "4")><cfset result=result & "Cuatrocientos "></cfif>
				<cfif not Compare(char1, "5")><cfset result=result & "Quinientos "></cfif>
				<cfif not Compare(char1, "6")><cfset result=result & "Seiscientos "></cfif>
				<cfif not Compare(char1, "7")><cfset result=result & "Setecientos "></cfif>
				<cfif not Compare(char1, "8")><cfset result=result & "Ochocientos "></cfif>
				<cfif not Compare(char1, "9")><cfset result=result & "Novecientos "></cfif>
				<cfif not Compare(char2, "0")></cfif>
				<cfif not Compare(char2, "1")>
					<cfif not Compare(char3, "0")><cfset result=result & "Diez ">
					<cfelseif not Compare(char3, "1")><cfset result=result & "Once ">
					<cfelseif not Compare(char3, "2")><cfset result=result & "Doce ">
					<cfelseif not Compare(char3, "3")><cfset result=result & "Trece ">
					<cfelseif not Compare(char3, "4")><cfset result=result & "Catorce ">
					<cfelseif not Compare(char3, "5")><cfset result=result & "Quince ">
					<cfelseif not Compare(char3, "6")><cfset result=result & "Dieciséis ">
					<cfelseif not Compare(char3, "7")><cfset result=result & "Diecisiete ">
					<cfelseif not Compare(char3, "8")><cfset result=result & "Dieciocho ">
					<cfelseif not Compare(char3, "9")><cfset result=result & "Diecinueve ">
					</cfif>
				</cfif>
				<cfif not Compare(char2, "2")>
					<cfif not Compare(char3, "0")><cfset result=result & "Vente ">
					<cfelseif not Compare(char3, "1")><cfset result=result & "Veintiun ">
					<cfelseif not Compare(char3, "2")><cfset result=result & "Veintid&oacute;s ">
					<cfelseif not Compare(char3, "3")><cfset result=result & "Veintitrés ">
					<cfelseif not Compare(char3, "4")><cfset result=result & "Veinticuatro ">
					<cfelseif not Compare(char3, "5")><cfset result=result & "Veinticinco ">
					<cfelseif not Compare(char3, "6")><cfset result=result & "Veintiséis ">
					<cfelseif not Compare(char3, "7")><cfset result=result & "Veintisiete ">
					<cfelseif not Compare(char3, "8")><cfset result=result & "Veintiocho ">
					<cfelseif not Compare(char3, "9")><cfset result=result & "Veintinueve ">
					</cfif>
				</cfif>
				<cfif not Compare(char2, "3")><cfset result=result & "Treinta "></cfif>
				<cfif not Compare(char2, "4")><cfset result=result & "Cuarenta "></cfif>
				<cfif not Compare(char2, "5")><cfset result=result & "Cincuenta "></cfif>
				<cfif not Compare(char2, "6")><cfset result=result & "Sesenta "></cfif>
				<cfif not Compare(char2, "7")><cfset result=result & "Setenta "></cfif>
				<cfif not Compare(char2, "8")><cfset result=result & "Ochenta "></cfif>
				<cfif not Compare(char2, "9")><cfset result=result & "Noventa "></cfif>
			<cfif char2 neq "1" and char2 neq "2">
				<cfif Len(result) and char3 neq "0">
					<cfset result=result & "y ">
				</cfif>
				<cfif not Compare(char3, "0")></cfif>
				<cfif not Compare(char3, "1")>
					<cfif not Compare(char1, "0") and not Compare(char2, "0")>
						<cfset result=result & "Un millon ">
					<cfelseif char2 neq "1" and char2 neq "2">
						<cfset result=result & "Un millones ">
					</cfif>
				</cfif>
				<cfif not Compare(char3, "2") and char2 neq "1" and char2 neq "2"><cfset result=result & "Dos millones "></cfif>
				<cfif not Compare(char3, "3") and char2 neq "1" and char2 neq "2"><cfset result=result & "Tres millones "></cfif>
				<cfif not Compare(char3, "4") and char2 neq "1" and char2 neq "2"><cfset result=result & "Cuatro millones "></cfif>
				<cfif not Compare(char3, "5") and char2 neq "1" and char2 neq "2"><cfset result=result & "Cinco millones "></cfif>
				<cfif not Compare(char3, "6") and char2 neq "1" and char2 neq "2"><cfset result=result & "Seis millones "></cfif>
				<cfif not Compare(char3, "7") and char2 neq "1" and char2 neq "2"><cfset result=result & "Siete millones "></cfif>
				<cfif not Compare(char3, "8") and char2 neq "1" and char2 neq "2"><cfset result=result & "Ocho millones "></cfif>
				<cfif not Compare(char3, "9") and char2 neq "1" and char2 neq "2"><cfset result=result & "Nueve millones "></cfif>
			</cfif>


			<!-- miles --->
				<cfif not Compare(char4, "0")></cfif>
				<cfif not Compare(char4, "1")>
					<cfif not Compare(char5, "0") and not Compare(char6, "0")>
						<cfset result=result & "Cien ">
					<cfelse>
						<cfset result=result & "Ciento ">
					</cfif>
				</cfif>
				<cfif not Compare(char4, "2")><cfset result=result & "Doscientos "></cfif>
				<cfif not Compare(char4, "3")><cfset result=result & "Trescientos "></cfif>
				<cfif not Compare(char4, "4")><cfset result=result & "Cuatrocientos "></cfif>
				<cfif not Compare(char4, "5")><cfset result=result & "Quinientos "></cfif>
				<cfif not Compare(char4, "6")><cfset result=result & "Seiscientos "></cfif>
				<cfif not Compare(char4, "7")><cfset result=result & "Setecientos "></cfif>
				<cfif not Compare(char4, "8")><cfset result=result & "Ochocientos "></cfif>
				<cfif not Compare(char4, "9")><cfset result=result & "Novecientos "></cfif>
				<cfif not Compare(char5, "0")></cfif>
				<cfif not Compare(char5, "1")>
					<cfif not Compare(char6, "0")><cfset result=result & "Diez ">
					<cfelseif not Compare(char6, "1")><cfset result=result & "Once ">
					<cfelseif not Compare(char6, "2")><cfset result=result & "Doce ">
					<cfelseif not Compare(char6, "3")><cfset result=result & "Trece ">
					<cfelseif not Compare(char6, "4")><cfset result=result & "Catorce ">
					<cfelseif not Compare(char6, "5")><cfset result=result & "Quince ">
					<cfelseif not Compare(char6, "6")><cfset result=result & "Dieciséis ">
					<cfelseif not Compare(char6, "7")><cfset result=result & "Diecisiete ">
					<cfelseif not Compare(char6, "8")><cfset result=result & "Dieciocho ">
					<cfelseif not Compare(char6, "9")><cfset result=result & "Diecinueve ">
					</cfif>
				</cfif>
				<cfif not Compare(char5, "2")>
					<cfif not Compare(char6, "0")><cfset result=result & "Vente ">
					<cfelseif not Compare(char6, "1")><cfset result=result & "Veintiun ">
					<cfelseif not Compare(char6, "2")><cfset result=result & "Veintid&oacute;s ">
					<cfelseif not Compare(char6, "3")><cfset result=result & "Veintitrés ">
					<cfelseif not Compare(char6, "4")><cfset result=result & "Veinticuatro ">
					<cfelseif not Compare(char6, "5")><cfset result=result & "Veinticinco ">
					<cfelseif not Compare(char6, "6")><cfset result=result & "Veintiséis ">
					<cfelseif not Compare(char6, "7")><cfset result=result & "Veintisiete ">
					<cfelseif not Compare(char6, "8")><cfset result=result & "Veintiocho ">
					<cfelseif not Compare(char6, "9")><cfset result=result & "Veintinueve ">
					</cfif>
				</cfif>
				<cfif not Compare(char5, "3")><cfset result=result & "Treinta "></cfif>
				<cfif not Compare(char5, "4")><cfset result=result & "Cuarenta "></cfif>
				<cfif not Compare(char5, "5")><cfset result=result & "Cincuenta "></cfif>
				<cfif not Compare(char5, "6")><cfset result=result & "Sesenta "></cfif>
				<cfif not Compare(char5, "7")><cfset result=result & "Setenta "></cfif>
				<cfif not Compare(char5, "8")><cfset result=result & "Ochenta "></cfif>
				<cfif not Compare(char5, "9")><cfset result=result & "Noventa "></cfif>
				<cfif char5 neq "1" and char5 neq "2">
					<cfif (char4 neq "0" or char5 neq "0") and (char5 neq "1" or char5 neq "2") and char6 neq "0">
						<cfset result=result & "y ">
					</cfif>
					<cfif not Compare(char6, "0")>
						<cfif Compare(char4, "0") or Compare(char5, "0")>
							<cfset result=result & "mil ">
						</cfif>
					</cfif>
					<cfif not Compare(char6, "1")>
						<cfif not Compare(char4, "0") and not Compare(char5, "0")>
							<cfset result=result & "mil ">
						<cfelseif char4 neq "1" and char5 neq "2">
							<cfset result=result & "Un mil ">
						<cfelse>
							<cfset result=result & "Un mil ">
						</cfif>
					</cfif>
					<cfif not Compare(char6, "2") and char5 neq "1" and char5 neq "2"><cfset result=result & "Dos mil "></cfif>
					<cfif not Compare(char6, "3") and char5 neq "1" and char5 neq "2"><cfset result=result & "Tres mil "></cfif>
					<cfif not Compare(char6, "4") and char5 neq "1" and char5 neq "2"><cfset result=result & "Cuatro mil "></cfif>
					<cfif not Compare(char6, "5") and char5 neq "1" and char5 neq "2"><cfset result=result & "Cinco mil "></cfif>
					<cfif not Compare(char6, "6") and char5 neq "1" and char5 neq "2"><cfset result=result & "Seis mil "></cfif>
					<cfif not Compare(char6, "7") and char5 neq "1" and char5 neq "2"><cfset result=result & "Siete mil "></cfif>
					<cfif not Compare(char6, "8") and char5 neq "1" and char5 neq "2"><cfset result=result & "Ocho mil "></cfif>
					<cfif not Compare(char6, "9") and char5 neq "1" and char5 neq "2"><cfset result=result & "Nueve mil "></cfif>
				<cfelse> <cfset result=result & "mil ">
				</cfif>


			<!-- cienes --->
				<cfif not Compare(char7, "0")></cfif>
				<cfif not Compare(char7, "1")><cfif not Compare(char8, "0") and not Compare(char9, "0")><cfset result=result & "Cien "><cfelse><cfset result=result & "Ciento "></cfif></cfif>
				<cfif not Compare(char7, "2")><cfset result=result & "Doscientos "></cfif>
				<cfif not Compare(char7, "3")><cfset result=result & "Trescientos "></cfif>
				<cfif not Compare(char7, "4")><cfset result=result & "Cuatrocientos "></cfif>
				<cfif not Compare(char7, "5")><cfset result=result & "Quinientos "></cfif>
				<cfif not Compare(char7, "6")><cfset result=result & "Seiscientos "></cfif>
				<cfif not Compare(char7, "7")><cfset result=result & "Setecientos "></cfif>
				<cfif not Compare(char7, "8")><cfset result=result & "Ochocientos "></cfif>
				<cfif not Compare(char7, "9")><cfset result=result & "Novecientos "></cfif>
				<cfif not Compare(char8, "0")></cfif>
				<cfif not Compare(char8, "1")>
					<cfif not Compare(char9, "0")><cfset result=result & "Diez ">
					<cfelseif not Compare(char9, "1")><cfset result=result & "Once ">
					<cfelseif not Compare(char9, "2")><cfset result=result & "Doce ">
					<cfelseif not Compare(char9, "3")><cfset result=result & "Trece ">
					<cfelseif not Compare(char9, "4")><cfset result=result & "Catorce ">
					<cfelseif not Compare(char9, "5")><cfset result=result & "Quince ">
					<cfelseif not Compare(char9, "6")><cfset result=result & "Dieciséis ">
					<cfelseif not Compare(char9, "7")><cfset result=result & "Diecisiete ">
					<cfelseif not Compare(char9, "8")><cfset result=result & "Dieciocho ">
					<cfelseif not Compare(char9, "9")><cfset result=result & "Diecinueve ">
					</cfif>
				</cfif>
				<cfif not Compare(char8, "2")>
					<cfif not Compare(char9, "0")><cfset result=result & "Vente ">
					<cfelseif not Compare(char9, "1")><cfset result=result & "Veintiun ">
					<cfelseif not Compare(char9, "2")><cfset result=result & "Veintid&oacute;s ">
					<cfelseif not Compare(char9, "3")><cfset result=result & "Veintitrés ">
					<cfelseif not Compare(char9, "4")><cfset result=result & "Veinticuatro ">
					<cfelseif not Compare(char9, "5")><cfset result=result & "Veinticinco ">
					<cfelseif not Compare(char9, "6")><cfset result=result & "Veintiséis ">
					<cfelseif not Compare(char9, "7")><cfset result=result & "Veintisiete ">
					<cfelseif not Compare(char9, "8")><cfset result=result & "Veintiocho ">
					<cfelseif not Compare(char9, "9")><cfset result=result & "Veintinueve ">
					</cfif>
				</cfif>
				<cfif not Compare(char8, "3")><cfset result=result & "Treinta "></cfif>
				<cfif not Compare(char8, "4")><cfset result=result & "Cuarenta "></cfif>
				<cfif not Compare(char8, "5")><cfset result=result & "Cincuenta "></cfif>
				<cfif not Compare(char8, "6")><cfset result=result & "Sesenta "></cfif>
				<cfif not Compare(char8, "7")><cfset result=result & "Setenta "></cfif>
				<cfif not Compare(char8, "8")><cfset result=result & "Ochenta "></cfif>
				<cfif not Compare(char8, "9")><cfset result=result & "Noventa "></cfif>
			<cfif char8 neq "1" and char8 neq "2">
				<cfif (char7 neq "0" or char8 neq "0") and (char8 neq "1" or char8 neq "2") and char9 neq "0">
					<cfset result=result & "y ">
				</cfif>
				<cfif not Compare(char9, "0")></cfif>
				<cfif not Compare(char9, "1") and char8 neq "1" and char8 neq "2"><cfset result=result & "Un "></cfif>
				<cfif not Compare(char9, "2") and char8 neq "1" and char8 neq "2"><cfset result=result & "Dos "></cfif>
				<cfif not Compare(char9, "3") and char8 neq "1" and char8 neq "2"><cfset result=result & "Tres "></cfif>
				<cfif not Compare(char9, "4") and char8 neq "1" and char8 neq "2"><cfset result=result & "Cuatro "></cfif>
				<cfif not Compare(char9, "5") and char8 neq "1" and char8 neq "2"><cfset result=result & "Cinco "></cfif>
				<cfif not Compare(char9, "6") and char8 neq "1" and char8 neq "2"><cfset result=result & "Seis "></cfif>
				<cfif not Compare(char9, "7") and char8 neq "1" and char8 neq "2"><cfset result=result & "Siete "></cfif>
				<cfif not Compare(char9, "8") and char8 neq "1" and char8 neq "2"><cfset result=result & "Ocho "></cfif>
				<cfif not Compare(char9, "9") and char8 neq "1" and char8 neq "2"><cfset result=result & "Nueve "></cfif>
			</cfif>
		</cfif>
		<cfreturn LCase(result)>
	</cffunction>
</cfcomponent>