<cfcomponent extends="proventas31.common.formObject">
	<cfset variables.idSalesClientUnit=0>
	<cfset variables.salesClientUnit="">
	<cfset variables.idCurrency=0>
	<cfset variables.booking=0>
	<cfset variables.dateBooking="">
	<cfset variables.hook=0>
	<cfset variables.dateHook="">
	<cfset variables.monthly=0>
	<cfset variables.monthes=0>
	<cfset variables.dateMonthlyPaymentStart="">
	<cfset variables.lastMonthlyPaymentDay=0>
	<cfset variables.final1=0>
	<cfset variables.final2=0>
	<cfset variables.dateFinal1="">
	<cfset variables.dateFinal2="">
	<cfset variables.penalty=0>
	<cfset variables.extra1=0>
	<cfset variables.extra2=0>
	<cfset variables.extra3=0>
	<cfset variables.extra4=0>
	<cfset variables.dateExtra1="">
	<cfset variables.dateExtra2="">
	<cfset variables.dateExtra3="">
	<cfset variables.dateExtra4="">

	<cfset variables.nameFirst="">
	<cfset variables.nameFirst1="">
	<cfset variables.nameLast="">
	<cfset variables.nameLast1="">

	<cfset variables.idSeller=0>
	<cfset variables.seller="">
	<cfset variables.idProject=0>
	<cfset variables.project="">
	<cfset variables.idSalesClientState=0>
	<cfset variables.salesClientState="">
	<cfset module.list.orderBy="idSalesClientUnit">
	
	<cffunction name="init" access="public" output="false">
		<cfset variables.idSalesClientUnit=0>
		<cfset variables.salesClientUnit="">
		<cfset variables.idCurrency=0>
		<cfset variables.booking=0>
		<cfset variables.dateBooking="">
		<cfset variables.hook=0>
		<cfset variables.dateHook="">
		<cfset variables.monthly=0>
		<cfset variables.monthes=0>
		<cfset variables.dateMonthlyPaymentStart="">
		<cfset variables.lastMonthlyPaymentDay=0>
		<cfset variables.final1=0>
		<cfset variables.final2=0>
		<cfset variables.dateFinal1="">
		<cfset variables.dateFinal2="">
		<cfset variables.penalty=0>
		<cfset variables.extra1=0>
		<cfset variables.extra2=0>
		<cfset variables.extra3=0>
		<cfset variables.extra4=0>
		<cfset variables.dateExtra1="">
		<cfset variables.dateExtra2="">
		<cfset variables.dateExtra3="">
		<cfset variables.dateExtra4="">
	
		<cfset variables.nameFirst="">
		<cfset variables.nameFirst1="">
		<cfset variables.nameLast="">
		<cfset variables.nameLast1="">
	
		<cfset variables.idSeller=0>
		<cfset variables.seller="">
		<cfset variables.idProject=0>
		<cfset variables.project="">
		<cfset variables.idSalesClientState=0>
		<cfset variables.salesClientState="">
	</cffunction>
	
	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdSalesClientUnit()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdSalesClientUnit(arguments.objectId)>
	</cffunction>

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

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

	<cffunction name="getSalesClientUnit" access="public" returntype="proventas31.corporate.salesClientUnit" output="false">
		<cfif not IsObject("variables.salesClientUnit")><cfset variables.salesClientUnit=CreateObject("component", "proventas31.corporate.salesClientUnit")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.salesClientUnit.isRetrievedFromDB()) or variables.salesClientUnit.getIdSalesClientUnit() neq variables.idSalesClientUnit>
			<cfset variables.salesClientUnit=CreateObject("component", "proventas31.corporate.salesClientUnit")>
			<cfset variables.salesClientUnit.setIdSalesClientUnit(variables.idSalesClientUnit)>
			<cfset variables.salesClientUnit.get()>
		</cfif>
		<cfreturn variables.salesClientUnit>
	</cffunction>
	
	<cffunction name="setIdCurrency" access="public" output="false">
		<cfargument name="idCurrency" type="numeric" required="yes" default="1">
		<cfset variables.idCurrency=arguments.idCurrency>
	</cffunction>

	<cffunction name="getIdCurrency" access="public" returntype="numeric" output="false">
		<cfreturn variables.idCurrency>
	</cffunction>
	
	<cffunction name="setBooking" access="public" output="false">
		<cfargument name="booking" type="string" 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="setDateBooking" access="public" output="false">
		<cfargument name="dateBooking" type="string" required="yes" default="">
		<cfset variables.dateBooking=arguments.dateBooking>
	</cffunction>

	<cffunction name="getDateBooking" access="public" returntype="string" output="false">
		<cfreturn variables.dateBooking>
	</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="setDateHook" access="public" output="false">
		<cfargument name="dateHook" type="string" required="yes" default="">
		<cfset variables.dateHook=arguments.dateHook>
	</cffunction>

	<cffunction name="getDateHook" access="public" returntype="string" output="false">
		<cfreturn variables.dateHook>
	</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="setMonthes" access="public" output="false">
		<cfargument name="monthes" type="numeric" required="yes" default="0">
		<cfset variables.monthes=arguments.monthes>
	</cffunction>

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

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

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

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

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

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

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

	<cffunction name="setFinal2" access="public" output="false">
		<cfargument name="final2" type="numeric" required="yes" default="0">
		<cfset variables.final2=parseCurrency(arguments.final2)>
	</cffunction>
	
	<cffunction name="getFinal2" access="public" returntype="numeric" output="false">
		<cfreturn parseCurrency(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="setPenalty" access="public" output="false">
		<cfargument name="penalty" type="numeric" required="yes" default="0">
		<cfset variables.penalty=arguments.penalty>
	</cffunction>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="query" type="query" required="yes">
		<cfif query.recordcount gt 0>
			<cfset variables.idSalesClientUnit=query.idSalesClientUnit>
			<cfif Len(query.idCurrency)><cfset variables.idCurrency=query.idCurrency><cfelse><cfset variables.idCurrency=1></cfif>
			<cfset variables.booking=query.booking>
			<cfif Len(query.dateBooking)><cfset variables.dateBooking=LSDateFormat(query.dateBooking, "dd/mm/yyyy")><cfelse><cfset variables.dateBooking=""></cfif>
			<cfset variables.hook=query.hook>
			<cfif Len(query.dateHook)><cfset variables.dateHook=LSDateFormat(query.dateHook, "dd/mm/yyyy")><cfelse><cfset variables.dateHook=""></cfif>
			<cfset variables.monthly=query.monthly>
			<cfset variables.monthes=query.monthes>
			<cfif Len(query.dateMonthlyPaymentStart)><cfset variables.dateMonthlyPaymentStart=LSDateFormat(query.dateMonthlyPaymentStart, "dd/mm/yyyy")><cfelse><cfset variables.dateMonthlyPaymentStart=""></cfif>
			<cfset variables.lastMonthlyPaymentDay=query.lastMonthlyPaymentDay>
			<cfset variables.final1=query.final1>
			<cfset variables.final2=query.final2>
			<cfif Len(query.dateFinal1)><cfset variables.dateFinal1=LSDateFormat(query.dateFinal1, "dd/mm/yyyy")><cfelse><cfset variables.dateFinal1=""></cfif>
			<cfif Len(query.dateFinal2)><cfset variables.dateFinal2=LSDateFormat(query.dateFinal2, "dd/mm/yyyy")><cfelse><cfset variables.dateFinal2=""></cfif>
			<cfset variables.penalty=query.penalty>
			<cfif Len(query.extra1)><cfset variables.extra1=query.extra1><cfelse><cfset variables.extra1=0></cfif>
			<cfif Len(query.extra2)><cfset variables.extra2=query.extra2><cfelse><cfset variables.extra2=0></cfif>
			<cfif Len(query.extra3)><cfset variables.extra3=query.extra3><cfelse><cfset variables.extra3=0></cfif>
			<cfif Len(query.extra4)><cfset variables.extra4=query.extra4><cfelse><cfset variables.extra4=0></cfif>
			<cfif Len(query.dateExtra1)><cfset variables.dateExtra1=LSDateFormat(query.dateExtra1, "dd/mm/yyyy")><cfelse><cfset variables.dateExtra1=""></cfif>
			<cfif Len(query.dateExtra2)><cfset variables.dateExtra2=LSDateFormat(query.dateExtra2, "dd/mm/yyyy")><cfelse><cfset variables.dateExtra2=""></cfif>
			<cfif Len(query.dateExtra3)><cfset variables.dateExtra3=LSDateFormat(query.dateExtra3, "dd/mm/yyyy")><cfelse><cfset variables.dateExtra3=""></cfif>
			<cfif Len(query.dateExtra4)><cfset variables.dateExtra4=LSDateFormat(query.dateExtra4, "dd/mm/yyyy")><cfelse><cfset variables.dateExtra4=""></cfif>
		</cfif>
	</cffunction>
	
	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				salesClientUnitPaymentSchema.idSalesClientUnit=<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">
		</cfquery>
		<cfset init()>
		<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="idSalesClient">
		<cfquery name="getListQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				1=1
				AND salesClientUnit.idSalesClientState IN (<cfqueryparam value="#application.salesClientState.client#" cfsqltype="cf_sql_integer">,<cfqueryparam value="#application.salesClientState.booked#" cfsqltype="cf_sql_integer">,<cfqueryparam value="#application.salesClientState.signed#" cfsqltype="cf_sql_integer">)
				<cfif Len(variables.nameFirst)>
				AND (
					salesClient.nameFirst LIKE <cfqueryparam value="%#variables.nameFirst#%" cfsqltype="cf_sql_varchar" maxlength="255">
					OR 
					salesClient.nameFirst1 LIKE <cfqueryparam value="%#variables.nameFirst#%" cfsqltype="cf_sql_varchar" maxlength="255">
				)
				</cfif>
				<cfif Len(variables.nameLast)>
				AND (
					salesClient.nameLast LIKE <cfqueryparam value="%#variables.nameLast#%" cfsqltype="cf_sql_varchar" maxlength="255">
					OR 
					salesClient.nameLast1 LIKE <cfqueryparam value="%#variables.nameLast#%" cfsqltype="cf_sql_varchar" maxlength="255">
				)
				</cfif>
				<cfif variables.idProject gt 0>
				AND salesClientUnit.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif variables.idSeller gt 0>
				AND salesClientUnit.idEmployee=<cfqueryparam value="#variables.idSeller#" cfsqltype="cf_sql_integer">
				</cfif>
			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="
				salesClientUnitPaymentSchema.idSalesClientUnit,
				salesClientUnit.idSalesClient, 
					salesClient.nameFirst, salesClient.nameFirst1, TRIM(CONCAT(salesClient.nameFirst, ' ', salesClient.nameFirst1)) AS namesFirst,
					salesClient.nameLast, salesClient.nameLast1, TRIM(CONCAT(salesClient.nameLast, ' ', salesClient.nameLast1)) AS namesLast,
					CONCAT(TRIM(CONCAT(salesClient.nameFirst, ' ', salesClient.nameFirst1)), ' ', TRIM(CONCAT(salesClient.nameLast, ' ', salesClient.nameLast1))) AS nameFull,
				salesClientUnit.idSalesClientState, salesClientState.name AS salesClientState,
				salesClientUnit.idSalesUnit, salesUnit.number AS number,
				salesClientUnit.idProject, project.name AS project,
				salesClientUnit.idEmployee AS idSeller, CONCAT(TRIM(CONCAT(seller.nameFirst, ' ', seller.nameFirst1)), ' ', TRIM(CONCAT(seller.nameLast, ' ', seller.nameLast1))) AS seller,
				salesClientUnitPaymentSchema.idCurrency, 
				salesClientUnitPaymentSchema.booking, 
				salesClientUnitPaymentSchema.dateBooking, 
				salesClientUnitPaymentSchema.hook, 
				salesClientUnitPaymentSchema.dateHook, 
				salesClientUnitPaymentSchema.monthly, 
				salesClientUnitPaymentSchema.monthes, 
				salesClientUnitPaymentSchema.dateMonthlyPaymentStart, 
				salesClientUnitPaymentSchema.lastMonthlyPaymentDay, 
				salesClientUnitPaymentSchema.final1, 
				salesClientUnitPaymentSchema.final2, 
				salesClientUnitPaymentSchema.dateFinal1, 
				salesClientUnitPaymentSchema.dateFinal2, 
				salesClientUnitPaymentSchema.penalty,
				salesClientUnitPaymentSchema.extra1,
				salesClientUnitPaymentSchema.extra2,
				salesClientUnitPaymentSchema.extra3,
				salesClientUnitPaymentSchema.extra4,
				salesClientUnitPaymentSchema.dateExtra1, 
				salesClientUnitPaymentSchema.dateExtra2, 
				salesClientUnitPaymentSchema.dateExtra3, 
				salesClientUnitPaymentSchema.dateExtra4 
			FROM 
				salesClientUnitPaymentSchema 
			LEFT JOIN salesClientUnit ON salesClientUnitPaymentSchema.idSalesClientUnit=salesClientUnit.idSalesClientUnit
			LEFT JOIN salesClientState ON salesClientUnit.idSalesClientState=salesClientState.idSalesClientState
			LEFT JOIN salesClient ON salesClientUnit.idSalesClient=salesClient.idSalesClient
			LEFT JOIN salesUnit ON salesClientUnit.idSalesUnit=salesUnit.idSalesUnit 
			LEFT JOIN employee AS seller ON salesClientUnit.idEmployee=seller.idEmployee
			LEFT JOIN project ON salesClientUnit.idProject=project.idProject
			">
		<cfreturn result>
	</cffunction>
	
	<cffunction name="deleteEmptyPayments" access="private" output="false">
		<!--- borramos el registro de pagos que no tienen pagos registrados --->
		<cfquery name="deleteEmptyPaymentsQuery" datasource="#application.datasource#">
			DELETE FROM salesPayment 
			WHERE 
				idSalesClientUnit=<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">
				AND amount=0
		</cfquery>
	</cffunction>
	
	<cffunction name="createPayments" access="private" output="false">
		<cfset var _salesClientUnit=getSalesClientUnit()>
		<cfset var _sellPrice=parseCurrency(_salesClientUnit.getSellPrice())>
		<cfset deleteEmptyPayments()>
		<cfif parseCurrency(variables.booking) gt 0>
			<cfquery name="createBooking" datasource="#application.datasource#">
					INSERT IGNORE INTO salesPayment
						(
						idSalesPaymentType,
						idSalesClientUnit,
						datePaymentExpected,
						amountExpected
						) 
					VALUES 
						(
						<cfqueryparam value="#application.salesPaymentType.book#" cfsqltype="cf_sql_integer">, 
						<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">, 
						<cfif Len(variables.dateBooking)><cfqueryparam value="#parseDate(variables.dateBooking)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
						<cfqueryparam value="#parseCurrency(variables.booking)#" cfsqltype="cf_sql_double">
						)
			</cfquery>
		</cfif>
		<cfif variables.hook gt 0>
			<cfquery name="createHook" datasource="#application.datasource#">
					INSERT IGNORE INTO salesPayment
						(
						idSalesPaymentType,
						idSalesClientUnit,
						datePaymentExpected,
						amountExpected
						) 
					VALUES 
						(
						<cfqueryparam value="#application.salesPaymentType.hook#" cfsqltype="cf_sql_integer">, 
						<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">, 
						<cfif Len(variables.dateHook)><cfqueryparam value="#parseDate(variables.dateHook)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
						<cfqueryparam value="#(_sellPrice*variables.hook/100)-parseCurrency(variables.booking)#" cfsqltype="cf_sql_double">
						)
			</cfquery>
		</cfif>
		<cfif variables.monthes gt 0 and variables.monthly gt 0>
			<cfset _monthlyPaymentStart=parseDate(variables.dateMonthlyPaymentStart)>
			<cfset _monthlyValue=(_sellPrice*variables.monthly/100)/monthes>
			<cfloop from="1" to="#variables.monthes#" index="month">
				<cfquery name="createMonthly" datasource="#application.datasource#">
						INSERT IGNORE INTO salesPayment
							(
							idSalesPaymentType,
							idSalesClientUnit,
							datePaymentExpected,
							amountExpected
							) 
						VALUES 
							(
							<cfqueryparam value="#application.salesPaymentType.monthly#" cfsqltype="cf_sql_integer">, 
							<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">, 
							<cfqueryparam value="#parseDate('01/' & LSDateFormat(DateAdd('m', month-1, _monthlyPaymentStart), 'mm/yyyy'))#" cfsqltype="cf_sql_date">,
							<cfqueryparam value="#_monthlyValue#" cfsqltype="cf_sql_double">
							)
				</cfquery>
			</cfloop>
		</cfif>
		<cfif variables.final1 gt 0>
			<cfquery name="createFinal1" datasource="#application.datasource#">
					INSERT IGNORE INTO salesPayment
						(
						idSalesPaymentType,
						idSalesClientUnit,
						datePaymentExpected,
						amountExpected
						) 
					VALUES 
						(
						<cfqueryparam value="#application.salesPaymentType.final1#" cfsqltype="cf_sql_integer">, 
						<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">, 
						<cfif Len(variables.dateFinal1)><cfqueryparam value="#parseDate(variables.dateFinal1)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
						<cfqueryparam value="#(_sellPrice*variables.final1/100)#" cfsqltype="cf_sql_double">
						)
			</cfquery>
		</cfif>
		<cfif variables.final2 gt 0>
			<cfquery name="createFinal2" datasource="#application.datasource#">
					INSERT IGNORE INTO salesPayment
						(
						idSalesPaymentType,
						idSalesClientUnit,
						datePaymentExpected,
						amountExpected
						) 
					VALUES 
						(
						<cfqueryparam value="#application.salesPaymentType.final2#" cfsqltype="cf_sql_integer">, 
						<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">, 
						<cfif Len(variables.dateFinal2)><cfqueryparam value="#parseDate(variables.dateFinal2)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
						<cfqueryparam value="#(_sellPrice*variables.final2/100)#" cfsqltype="cf_sql_double">
						)
			</cfquery>
		</cfif>
		<cfif parseCurrency(variables.extra1) gt 0>
			<cfquery name="createExtra1" datasource="#application.datasource#">
					INSERT IGNORE INTO salesPayment
						(
						idSalesPaymentType,
						idSalesClientUnit,
						datePaymentExpected,
						amountExpected
						) 
					VALUES 
						(
						<cfqueryparam value="#application.salesPaymentType.extra1#" cfsqltype="cf_sql_integer">, 
						<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">, 
						<cfif Len(variables.dateExtra1)><cfqueryparam value="#parseDate(variables.dateExtra1)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
						<cfqueryparam value="#parseCurrency(variables.extra1)#" cfsqltype="cf_sql_double">
						)
			</cfquery>
		</cfif>
		<cfif parseCurrency(variables.extra2) gt 0>
			<cfquery name="createExtra2" datasource="#application.datasource#">
					INSERT IGNORE INTO salesPayment
						(
						idSalesPaymentType,
						idSalesClientUnit,
						datePaymentExpected,
						amountExpected
						) 
					VALUES 
						(
						<cfqueryparam value="#application.salesPaymentType.extra2#" cfsqltype="cf_sql_integer">, 
						<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">, 
						<cfif Len(variables.dateExtra2)><cfqueryparam value="#parseDate(variables.dateExtra2)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
						<cfqueryparam value="#parseCurrency(variables.extra2)#" cfsqltype="cf_sql_double">
						)
			</cfquery>
		</cfif>
		<cfif parseCurrency(variables.extra3) gt 0>
			<cfquery name="createExtra3" datasource="#application.datasource#">
					INSERT IGNORE INTO salesPayment
						(
						idSalesPaymentType,
						idSalesClientUnit,
						datePaymentExpected,
						amountExpected
						) 
					VALUES 
						(
						<cfqueryparam value="#application.salesPaymentType.extra3#" cfsqltype="cf_sql_integer">, 
						<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">, 
						<cfif Len(variables.dateExtra3)><cfqueryparam value="#parseDate(variables.dateExtra3)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
						<cfqueryparam value="#parseCurrency(variables.extra3)#" cfsqltype="cf_sql_double">
						)
			</cfquery>
		</cfif>
		<cfif parseCurrency(variables.extra4) gt 0>
			<cfquery name="createExtra4" datasource="#application.datasource#">
					INSERT IGNORE INTO salesPayment
						(
						idSalesPaymentType,
						idSalesClientUnit,
						datePaymentExpected,
						amountExpected
						) 
					VALUES 
						(
						<cfqueryparam value="#application.salesPaymentType.extra4#" cfsqltype="cf_sql_integer">, 
						<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">, 
						<cfif Len(variables.dateExtra4)><cfqueryparam value="#parseDate(variables.dateExtra4)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
						<cfqueryparam value="#parseCurrency(variables.extra4)#" cfsqltype="cf_sql_double">
						)
			</cfquery>
		</cfif>
	</cffunction>

	<cffunction name="create" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<!--- check parameters --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO salesClientUnitPaymentSchema
					(
					idSalesClientUnit,
					idCurrency,
					booking,
					dateBooking,
					hook,
					dateHook,
					monthly,
					monthes,
					dateMonthlyPaymentStart,
					lastMonthlyPaymentDay,
					final1,
					final2,
					dateFinal1,
					dateFinal2,
					penalty,
					extra1,
					extra2,
					extra3,
					extra4,
					dateExtra1,
					dateExtra2,
					dateExtra3,
					dateExtra4
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idCurrency#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#parseCurrency(variables.booking)#" cfsqltype="cf_sql_double">, 
					<cfif Len(variables.dateBooking)><cfqueryparam value="#parseDate(variables.dateBooking)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					<cfqueryparam value="#variables.hook#" cfsqltype="cf_sql_double">, 
					<cfif Len(variables.dateHook)><cfqueryparam value="#parseDate(variables.dateHook)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					<cfqueryparam value="#variables.monthly#" cfsqltype="cf_sql_double">, 
					<cfqueryparam value="#variables.monthes#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#parseDate(variables.dateMonthlyPaymentStart)#" cfsqltype="cf_sql_date">,
					<cfqueryparam value="#variables.lastMonthlyPaymentDay#" cfsqltype="cf_sql_integer">, 
					<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.penalty#" cfsqltype="cf_sql_double">,
					<cfqueryparam value="#parseCurrency(variables.extra1)#" cfsqltype="cf_sql_double">, 
					<cfqueryparam value="#parseCurrency(variables.extra2)#" cfsqltype="cf_sql_double">, 
					<cfqueryparam value="#parseCurrency(variables.extra3)#" cfsqltype="cf_sql_double">, 
					<cfqueryparam value="#parseCurrency(variables.extra4)#" cfsqltype="cf_sql_double">, 
					<cfif Len(variables.dateExtra1)><cfqueryparam value="#parseDate(variables.dateExtra1)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					<cfif Len(variables.dateExtra2)><cfqueryparam value="#parseDate(variables.dateExtra2)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					<cfif Len(variables.dateExtra3)><cfqueryparam value="#parseDate(variables.dateExtra3)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					<cfif Len(variables.dateExtra4)><cfqueryparam value="#parseDate(variables.dateExtra4)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>
					)
				ON DUPLICATE KEY UPDATE 
					idCurrency=<cfqueryparam value="#variables.idCurrency#" cfsqltype="cf_sql_integer">,
					booking=<cfqueryparam value="#parseCurrency(variables.booking)#" cfsqltype="cf_sql_double">, 
					dateBooking=<cfif Len(variables.dateBooking)><cfqueryparam value="#parseDate(variables.dateBooking)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					hook=<cfqueryparam value="#variables.hook#" cfsqltype="cf_sql_double">, 
					dateHook=<cfif Len(variables.dateHook)><cfqueryparam value="#parseDate(variables.dateHook)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					monthly=<cfqueryparam value="#variables.monthly#" cfsqltype="cf_sql_double">, 
					monthes=<cfqueryparam value="#variables.monthes#" cfsqltype="cf_sql_integer">, 
					dateMonthlyPaymentStart=<cfqueryparam value="#parseDate(variables.dateMonthlyPaymentStart)#" cfsqltype="cf_sql_date">,
					lastMonthlyPaymentDay=<cfqueryparam value="#variables.lastMonthlyPaymentDay#" cfsqltype="cf_sql_integer">, 
					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>,
					penalty=<cfqueryparam value="#variables.penalty#" cfsqltype="cf_sql_double">,
					extra1=<cfqueryparam value="#parseCurrency(variables.extra1)#" cfsqltype="cf_sql_double">, 
					extra2=<cfqueryparam value="#parseCurrency(variables.extra2)#" cfsqltype="cf_sql_double">, 
					extra3=<cfqueryparam value="#parseCurrency(variables.extra3)#" cfsqltype="cf_sql_double">, 
					extra4=<cfqueryparam value="#parseCurrency(variables.extra4)#" cfsqltype="cf_sql_double">, 
					dateExtra1=<cfif Len(variables.dateExtra1)><cfqueryparam value="#parseDate(variables.dateExtra1)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					dateExtra2=<cfif Len(variables.dateExtra2)><cfqueryparam value="#parseDate(variables.dateExtra2)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					dateExtra3=<cfif Len(variables.dateExtra3)><cfqueryparam value="#parseDate(variables.dateExtra3)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					dateExtra4=<cfif Len(variables.dateExtra4)><cfqueryparam value="#parseDate(variables.dateExtra4)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>
			</cfquery>
			<cfset result.id=variables.idSalesClientUnit>
			<cfset createPayments()>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [salesClientUnitPaymentSchema.create()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>

	<cffunction name="update" access="public" returntype="struct" output="false">
		<cfreturn create()>
	</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 salesClientUnitPaymentSchema
				WHERE 
					salesClientUnitPaymentSchema.idSalesClientUnit=<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfquery name="deletePayments" datasource="#application.datasource#">
				DELETE FROM salesPayment
				WHERE 
					salesPayment.idSalesClientUnit=<cfqueryparam value="#variables.idSalesClientUnit#" 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 [salesClientUnitPaymentSchema.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
	
	<!--- additional --->
	<cffunction name="setNameFirst" access="public" output="false">
		<cfargument name="nameFirst" type="string" required="yes" default="">
		<cfset variables.nameFirst=arguments.nameFirst>
	</cffunction>

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

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

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

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

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

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

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

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

	<cffunction name="getIdSeller" access="public" returntype="numeric" output="false">
		<cfreturn variables.idSeller>
	</cffunction>
	
	<cffunction name="getSeller" access="public" returntype="proventas31.corporate.employee" output="false">
		<cfif not IsObject("variables.seller")><cfset variables.seller=CreateObject("component", "proventas31.corporate.employee")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.seller.isRetrievedFromDB()) or variables.seller.getIdEmployee() neq variables.idSeller>
			<cfset variables.seller=CreateObject("component", "proventas31.corporate.employee")>
			<cfset variables.seller.setIdEmployee(variables.idSeller)>
			<cfset variables.seller.get()>
		</cfif>
		<cfreturn variables.seller>
	</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="proventas31.corporate.project" output="false">
		<cfif not IsObject("variables.project")><cfset variables.project=CreateObject("component", "proventas31.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", "proventas31.corporate.project")>
			<cfset variables.project.setIdProject(variables.idProject)>
			<cfset variables.project.get()>
		</cfif>
		<cfreturn variables.project>
	</cffunction>

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

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

	<cffunction name="getSalesClientState" access="public" returntype="proventas31.corporate.salesClientState" output="false">
		<cfif not IsObject("variables.salesClientState")><cfset variables.salesClientState=CreateObject("component", "proventas31.corporate.salesClientState")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.salesClientState.isRetrievedFromDB()) or variables.salesClientState.getIdSalesClientState() neq variables.idSalesClientState>
			<cfset variables.salesClientState=CreateObject("component", "proventas31.corporate.salesClientState")>
			<cfset variables.salesClientState.setIdSalesClientState(variables.idSalesClientState)>
			<cfset variables.salesClientState.get()>
		</cfif>
		<cfreturn variables.salesClientState>
	</cffunction>

	<cffunction name="createMonthlyIdxOptions" access="public" returntype="numeric" output="true">
		<cfargument name="selected" required="yes" type="numeric" default="0">
		<cfargument name="maxMonthes" required="yes" type="numeric" default="1">
		<cfset var result=1>
		<cfloop from="1" to="#arguments.maxMonthes#" index="_idx">			
			<cfif _idx eq arguments.selected><cfset _selected=" selected"><cfset result=_idx><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#_idx#"#_selected#>#_idx#</option></cfoutput>
		</cfloop>
		<cfreturn result>
	</cffunction>
	<!--- /additional --->
</cfcomponent>