<cfcomponent extends="components.common.formObject">
	<cfset variables.idSalesClientUnit=0>
	<cfset variables.salesClientUnit="">
	<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.dateDelivery="">

	<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.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.dateDelivery="">
	
		<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="components.corporate.salesClientUnit" output="false">
		<cfif not IsObject("variables.salesClientUnit")><cfset variables.salesClientUnit=CreateObject("component", "components.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", "components.corporate.salesClientUnit")>
			<cfset variables.salesClientUnit.setIdSalesClientUnit(variables.idSalesClientUnit)>
			<cfset variables.salesClientUnit.get()>
		</cfif>
		<cfreturn variables.salesClientUnit>
	</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=arguments.final1>
	</cffunction>

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

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

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

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

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

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

	<cffunction name="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="setDateDelivery" access="public" output="false">
		<cfargument name="dateDelivery" type="string" required="yes" default="">
		<cfset variables.dateDelivery=arguments.dateDelivery>
	</cffunction>

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

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idSalesClientUnit=getQuery.idSalesClientUnit>
			<cfset variables.booking=getQuery.booking>
			<cfif Len(getQuery.dateBooking)><cfset variables.dateBooking=LSDateFormat(getQuery.dateBooking, "dd/mm/yyyy")><cfelse><cfset variables.dateBooking=""></cfif>
			<cfset variables.hook=getQuery.hook>
			<cfif Len(getQuery.dateHook)><cfset variables.dateHook=LSDateFormat(getQuery.dateHook, "dd/mm/yyyy")><cfelse><cfset variables.dateHook=""></cfif>
			<cfset variables.monthly=getQuery.monthly>
			<cfset variables.monthes=getQuery.monthes>
			<cfif Len(getQuery.dateMonthlyPaymentStart)><cfset variables.dateMonthlyPaymentStart=LSDateFormat(getQuery.dateMonthlyPaymentStart, "dd/mm/yyyy")><cfelse><cfset variables.dateMonthlyPaymentStart=""></cfif>
			<cfset variables.lastMonthlyPaymentDay=getQuery.lastMonthlyPaymentDay>
			<cfset variables.final1=getQuery.final1>
			<cfset variables.final2=getQuery.final2>
			<cfif Len(getQuery.dateFinal1)><cfset variables.dateFinal1=LSDateFormat(getQuery.dateFinal1, "dd/mm/yyyy")><cfelse><cfset variables.dateFinal1=""></cfif>
			<cfif Len(getQuery.dateFinal2)><cfset variables.dateFinal2=LSDateFormat(getQuery.dateFinal2, "dd/mm/yyyy")><cfelse><cfset variables.dateFinal2=""></cfif>
			<cfset variables.penalty=getQuery.penalty>
			<cfif Len(getQuery.dateDelivery)><cfset variables.dateDelivery=LSDateFormat(getQuery.dateDelivery, "dd/mm/yyyy")><cfelse><cfset variables.dateDelivery=""></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>
		<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
				<cfif session.employee.getEmployeeAccessProfile().getIdAccessProfile() eq application.accessProfile.projectLeader or variables.idProject gt 0>
				AND salesClientUnit.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				</cfif>
				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.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.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.dateDelivery
			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="public" output="false">
		<!--- borramos el registro de pagos que no tienen pagos registrados --->
		<cfquery name="deleteEmptyPayments" 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="public" 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>
	</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,
					booking,
					dateBooking,
					hook,
					dateHook,
					monthly,
					monthes,
					dateMonthlyPaymentStart,
					lastMonthlyPaymentDay,
					final1,
					final2,
					dateFinal1,
					dateFinal2,
					penalty,
					dateDelivery
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idSalesClientUnit#" 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">,
					<cfif Len(variables.dateDelivery)><cfqueryparam value="#parseDate(variables.dateDelivery)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>
					)
				ON DUPLICATE KEY UPDATE 
					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">,
					dateDelivery=<cfif Len(variables.dateDelivery)><cfqueryparam value="#parseDate(variables.dateDelivery)#" 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="components.corporate.employee" output="false">
		<cfif not IsObject("variables.seller")><cfset variables.seller=CreateObject("component", "components.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", "components.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="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="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="components.corporate.salesClientState" output="false">
		<cfif not IsObject("variables.salesClientState")><cfset variables.salesClientState=CreateObject("component", "components.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", "components.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>