<cfcomponent extends="components.common.formObject">
	<cfset variables.idSalesPayment=0>
	<cfset variables.dateRegistration=LSDateFormat(Now(), "dd/mm/yyyy") & " " & LSTimeFormat(Now(), "HH:mm:ss")>
	<cfset variables.idSalesPaymentType=0>
	<cfset variables.salesPaymentType="">
	<cfset variables.idSalesClientUnit=0>
	<cfset variables.salesClientUnit="">
	<cfset variables.idEmployee=0>
	<cfset variables.employee="">
	<cfset variables.datePaymentExpected="">
	<cfset variables.datePayment="">
	<cfset variables.amountExpected=0>
	<cfset variables.amount=0>

	<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 variables.monthlyIdx=0>
	
	<cfset module.list.orderBy="idSalesPayment">
	
	<cffunction name="init" access="public" output="false">
		<cfset variables.idSalesPayment=0>
		<cfset variables.dateRegistration=LSDateFormat(Now(), "dd/mm/yyyy") & " " & LSTimeFormat(Now(), "HH:mm:ss")>
		<cfset variables.idSalesPaymentType=0>
		<cfset variables.salesPaymentType="">
		<cfset variables.idSalesClientUnit=0>
		<cfset variables.salesClientUnit="">
		<cfset variables.idEmployee=0>
		<cfset variables.employee="">
		<cfset variables.datePaymentExpected="">
		<cfset variables.datePayment="">
		<cfset variables.amountExpected=0>
		<cfset variables.amount=0>

		<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 variables.monthlyIdx=0>
	</cffunction>
	
	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdSalesPayment()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdSalesPayment(arguments.objectId)>
	</cffunction>

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

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

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

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

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

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

	<cffunction name="getSalesPaymentType" access="public" returntype="components.corporate.salesPaymentType" output="false">
		<cfif not IsObject("variables.salesPaymentType")><cfset variables.salesPaymentType=CreateObject("component", "components.corporate.salesPaymentType")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.salesPaymentType.isRetrievedFromDB()) or variables.salesPaymentType.getIdSalesPaymentType() neq variables.idSalesPaymentType>
			<cfset variables.salesPaymentType=CreateObject("component", "components.corporate.salesPaymentType")>
			<cfset variables.salesPaymentType.setIdSalesPaymentType(variables.idSalesPaymentType)>
			<cfset variables.salesPaymentType.get()>
		</cfif>
		<cfreturn variables.salesPaymentType>
	</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="setIdEmployee" access="public" output="false">
		<cfargument name="idEmployee" type="numeric" required="yes" default="0">
		<cfset variables.idEmployee=arguments.idEmployee>
	</cffunction>

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

	<cffunction name="getEmployee" access="public" returntype="components.corporate.employee" output="false">
		<cfif not IsObject("variables.employee")><cfset variables.employee=CreateObject("component", "components.corporate.employee")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.employee.isRetrievedFromDB()) 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="setDatePaymentExpected" access="public" output="false">
		<cfargument name="datePaymentExpected" type="string" required="yes" default="">
		<cfset variables.datePaymentExpected=arguments.datePaymentExpected>
	</cffunction>

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

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

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

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

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

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

	<cffunction name="getAmount" access="public" returntype="numeric" output="false">
		<cfreturn parseCurrency(variables.amount)>
	</cffunction>
	
	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idSalesPayment=getQuery.idSalesPayment>
			<cfif Len(getQuery.dateRegistration)><cfset variables.dateRegistration=LSDateFormat(getQuery.dateRegistration, "dd/mm/yyyy") & " " & LSTimeFormat(getQuery.dateRegistration, "HH:mm:ss")><cfelse><cfset variables.dateRegistration=""></cfif>
			<cfset variables.idSalesPaymentType=getQuery.idSalesPaymentType>
			<cfset variables.idSalesClientUnit=getQuery.idSalesClientUnit>
			<cfset variables.idEmployee=getQuery.idEmployee>
			<cfif Len(getQuery.datePaymentExpected)><cfset variables.datePaymentExpected=LSDateFormat(getQuery.datePaymentExpected, "dd/mm/yyyy")><cfelse><cfset variables.datePaymentExpected=""></cfif>
			<cfif Len(getQuery.datePayment)><cfset variables.datePayment=LSDateFormat(getQuery.datePayment, "dd/mm/yyyy")><cfelse><cfset variables.datePayment=""></cfif>
			<cfset variables.amount=getQuery.amount>
		</cfif>
	</cffunction>
	
	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				salesPayment.idSalesPayment=<cfqueryparam value="#variables.idSalesPayment#" 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
				salesPayment.idSalesClientUnit=<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">
				<cfif variables.idSalesPaymentType gt 0>
				AND salesPayment.idSalesPaymentType=<cfqueryparam value="#variables.idSalesPaymentType#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif Len(variables.datePayment)>
				AND (
						MONTH(salesPayment.datePayment)=<cfqueryparam value="#Month(parseDate(variables.datePayment))#" cfsqltype="cf_sql_integer">
						AND YEAR(salesPayment.datePayment)=<cfqueryparam value="#Year(parseDate(variables.datePayment))#" cfsqltype="cf_sql_integer">
					)
				</cfif>
			ORDER BY <cfif Len(arguments.orderBy)>#arguments.orderBy#<cfelse>#module.list.orderBy#</cfif>
		</cfquery>
		<cfreturn getListQuery>
	</cffunction>

	<cffunction name="getListClients" access="public" output="false" returntype="query">
		<cfargument name="orderBy" required="no" type="string" default="idSalesClient">
		<cfquery name="getListClientsQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE 
				1=1
				<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>
			GROUP BY salesPayment.idSalesClientUnit
			ORDER BY <cfif Len(arguments.orderBy)>#arguments.orderBy#<cfelse>#module.list.orderBy#</cfif>
		</cfquery>
		<cfreturn getListClientsQuery>
	</cffunction>
	
	<cffunction name="getReportList" access="public" output="false" returntype="query">
		<cfquery name="getReportListQuery" datasource="#application.datasource#">
			SELECT 
				salesPayment.idSalesPayment,
				salesUnit.number,
				salesUnit.quantity, 
				salesClientUnit.idSalesClient, 
				CONCAT(TRIM(CONCAT(salesClient.nameFirst, ' ', salesClient.nameFirst1)), ' ', TRIM(CONCAT(salesClient.nameLast, ' ', salesClient.nameLast1))) AS nameFull,
				SUM(salesPayment.amountExpected) AS amountExpected, SUM(salesPayment.amount) AS amount,
				salesClientUnitPaymentSchema.dateDelivery
			FROM 
				salesPayment 
			LEFT JOIN salesClientUnit ON salesPayment.idSalesClientUnit=salesClientUnit.idSalesClientUnit
			LEFT JOIN salesUnit ON salesClientUnit.idSalesUnit=salesUnit.idSalesUnit 
			LEFT JOIN salesClient ON salesClientUnit.idSalesClient=salesClient.idSalesClient
			LEFT JOIN salesClientUnitPaymentSchema ON salesPayment.idSalesClientUnit=salesClientUnitPaymentSchema.idSalesClientUnit
			WHERE 
				1=1
				<cfif variables.idProject gt 0>
				AND salesClientUnit.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				</cfif>
			GROUP BY salesPayment.idSalesClientUnit
			ORDER BY salesUnit.number
		</cfquery>
		<cfreturn getReportListQuery>
	</cffunction>

	<cffunction name="getQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				salesPayment.idSalesPayment,
				salesPayment.dateRegistration, 
				salesPayment.idSalesPaymentType, salesPaymentType.name as salesPaymentType,
				salesPayment.idSalesClientUnit, 
				salesUnit.number as number, 
				salesClientUnit.idProject, project.name AS project,
				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.idEmployee AS idSeller, CONCAT(TRIM(CONCAT(seller.nameFirst, ' ', seller.nameFirst1)), ' ', TRIM(CONCAT(seller.nameLast, ' ', seller.nameLast1))) AS seller,
				salesPayment.idEmployee, CONCAT(TRIM(employee.nameFirst),' ', TRIM(employee.nameFirst1),' ',TRIM(employee.nameLast),' ',TRIM(employee.nameLast1)) as employee,
				salesPayment.datePaymentExpected,
				salesPayment.datePayment, 
				salesPayment.amountExpected,
				salesPayment.amount 
			FROM 
				salesPayment 
			LEFT JOIN salesPaymentType ON salesPayment.idSalesPaymentType=salesPaymentType.idSalesPaymentType
			LEFT JOIN salesClientUnit ON salesPayment.idSalesClientUnit=salesClientUnit.idSalesClientUnit
			LEFT JOIN employee AS seller ON salesClientUnit.idEmployee=seller.idEmployee
			LEFT JOIN salesUnit ON salesClientUnit.idSalesUnit=salesUnit.idSalesUnit 
			LEFT JOIN project ON salesClientUnit.idProject=project.idProject
			LEFT JOIN salesClient ON salesClientUnit.idSalesClient=salesClient.idSalesClient
			LEFT JOIN employee ON salesPayment.idEmployee=employee.idEmployee
			">
		<cfreturn result>
	</cffunction>

	<cffunction name="getId" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<cfquery name="getIdQuery" datasource="#application.datasource#">
			SELECT 
				idSalesPayment
			FROM 
				salesPayment 
			WHERE 
				salesPayment.idSalesClientUnit=<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer"> 
				AND	salesPayment.idSalesPaymentType=<cfqueryparam value="#variables.idSalesPaymentType#" cfsqltype="cf_sql_integer">
				AND salesPayment.datePayment=<cfqueryparam value="#parseDate(variables.datePayment)#" cfsqltype="cf_sql_date">
				AND salesPayment.amount=<cfqueryparam value="#parseCurrency(variables.amount)#" cfsqltype="cf_sql_double">
				<cfif variables.idSalesPayment gt 0>
				AND salesPayment.idSalesPayment != <cfqueryparam value="#variables.idSalesPayment#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getIdQuery.recordcount gt 0>
			<cfset result.id=getIdQuery.idSalesPayment>
		</cfif>
		<cfreturn result>
	</cffunction>
	
	<cffunction name="getAmountPayedWithoutDelay" access="public" returntype="numeric">
		<cfset var result=0>
		<cfquery name="getAmountPayedWithoutDelayQuery" datasource="#application.datasource#">
			SELECT SUM(amount) AS amountPayed
			FROM salesPayment
			WHERE
				salesPayment.idSalesClientUnit=<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">
				AND salesPayment.idSalesPaymentType=<cfqueryparam value="#variables.idSalesPaymentType#" cfsqltype="cf_sql_integer">
				AND datePaymentExpected <cfif Len(variables.datePaymentExpected)>=<cfqueryparam value="#parseDate(variables.datePaymentExpected)#" cfsqltype="cf_sql_date"><cfelse> IS NULL</cfif>
				AND CAST(datePayment AS DATE) <= <cfqueryparam value="#parseDate(variables.datePayment)#" cfsqltype="cf_sql_date">
		</cfquery>
		<cfif getAmountPayedWithoutDelayQuery.recordcount gt 0 and Len(getAmountPayedWithoutDelayQuery.amountPayed)>
			<cfset result=getAmountPayedWithoutDelayQuery.amountPayed>
		</cfif>
		<cfreturn result>
	</cffunction>

	<cffunction name="getNumberOfPayments" access="public" returntype="numeric">
		<cfset var result=0>
		<cfquery name="getNumberOfPaymentsQuery" datasource="#application.datasource#">
			SELECT COUNT(idSalesPayment) AS numberOfPayments
			FROM salesPayment
			WHERE
				salesPayment.idSalesClientUnit=<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">
				AND salesPayment.idSalesPaymentType=<cfqueryparam value="#variables.idSalesPaymentType#" cfsqltype="cf_sql_integer">
				AND datePaymentExpected <cfif Len(variables.datePaymentExpected)>=<cfqueryparam value="#parseDate(variables.datePaymentExpected)#" cfsqltype="cf_sql_date"><cfelse> IS NULL</cfif>
		</cfquery>
		<cfif getNumberOfPaymentsQuery.recordcount gt 0 and Len(getNumberOfPaymentsQuery.numberOfPayments)>
			<cfset result=getNumberOfPaymentsQuery.numberOfPayments>
		</cfif>
		<cfreturn result>
	</cffunction>

	<cffunction name="create" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<cfset result=getId()>
		<!--- check parameters --->
		<cfif not Len(variables.datePayment)><cfset result.message="Fecha de pago es un campo obligatorio"><cfreturn result></cfif>
		<cfif result.id gt 0>
			<cfset result.message="Pago con esos datos ya existe">
			<cfreturn result>
		</cfif>
		<cftry>
			<!--- borramos el pago con fecha de pago en NULL --->
			<cfquery name="deleteDatePaymentNullQuery" datasource="#application.datasource#">
				DELETE FROM salesPayment 
				WHERE 
					idSalesPaymentType=<cfqueryparam value="#variables.idSalesPaymentType#" cfsqltype="cf_sql_integer">
					AND idSalesClientUnit=<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">
					AND datePaymentExpected<cfif Len(variables.datePaymentExpected)>=<cfqueryparam value="#parseDate(variables.datePaymentExpected)#" cfsqltype="cf_sql_date"><cfelse> IS NULL</cfif>
					AND datePayment IS NULL
			</cfquery>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO salesPayment
					(
					dateRegistration,
					idSalesPaymentType,
					idSalesClientUnit,
					idEmployee,
					datePaymentExpected,
					datePayment,
					amountExpected,
					amount
					) 
				VALUES 
					(
					<cfqueryparam value="#Now()#" cfsqltype="cf_sql_timestamp">,
					<cfqueryparam value="#variables.idSalesPaymentType#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">, 
					<cfif Len(variables.datePaymentExpected)><cfqueryparam value="#parseDate(variables.datePaymentExpected)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					<cfqueryparam value="#parseDate(variables.datePayment)#" cfsqltype="cf_sql_date">,
					<cfqueryparam value="#parseCurrency(variables.amountExpected)#" cfsqltype="cf_sql_double">,
					<cfqueryparam value="#parseCurrency(variables.amount)#" cfsqltype="cf_sql_double">
					)
				ON DUPLICATE KEY UPDATE 
					dateRegistration=<cfqueryparam value="#Now()#" cfsqltype="cf_sql_timestamp">,
					idEmployee=<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">, 
					datePayment=<cfqueryparam value="#parseDate(variables.datePayment)#" cfsqltype="cf_sql_date">,
					amount=<cfqueryparam value="#parseCurrency(variables.amount)#" cfsqltype="cf_sql_double">
			</cfquery>
			<cfset result=getId()>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [salesClientPayment.create()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>

	<cffunction name="update" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<!--- check parameters --->
		<cfif not Len(variables.datePayment)><cfset result.message="Fecha de pago es un campo obligatorio"><cfreturn result></cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Pago con esos datos ya existe">
			<cfreturn result>
		</cfif>
		<cftry>
			<cfquery name="updateQuery" datasource="#application.datasource#">
				UPDATE salesPayment SET
					dateRegistration=<cfqueryparam value="#Now()#" cfsqltype="cf_sql_timestamp">,
					idSalesPaymentType=<cfqueryparam value="#variables.idSalesPaymentType#" cfsqltype="cf_sql_integer">, 
					idSalesClientUnit=<cfqueryparam value="#variables.idSalesClientUnit#" cfsqltype="cf_sql_integer">, 
					idEmployee=<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">, 
					datePaymentExpected=<cfif Len(variables.datePaymentExpected)><cfqueryparam value="#parseDate(variables.datePaymentExpected)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					datePayment=<cfqueryparam value="#parseDate(variables.datePayment)#" cfsqltype="cf_sql_date">,
					amount=<cfqueryparam value="#parseCurrency(variables.amount)#" cfsqltype="cf_sql_double">
				WHERE
					salesPayment.idSalesPayment=<cfqueryparam value="#variables.idSalesPayment#" cfsqltype="cf_sql_integer"> 
			</cfquery>
			<cfset result.id=variables.idSalesPayment>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [salesClientPayment.update()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>

	<cffunction name="delete" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<!--- check parameters --->
		<cftry>
			<cfquery name="deleteQuery" datasource="#application.datasource#">
				DELETE FROM salesPayment
				WHERE 
					salesPayment.idSalesPayment=<cfqueryparam value="#variables.idSalesPayment#" 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 [salesClientPayment.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="setMonthlyIdx" access="public" output="false">
		<cfargument name="monthlyIdx" type="numeric" required="yes" default="0">
		<cfset variables.monthlyIdx=arguments.monthlyIdx>
	</cffunction>

	<cffunction name="getMonthlyIdx" access="public" returntype="numeric" output="false">
		<cfreturn variables.monthlyIdx>
	</cffunction>
	<!--- /additional --->

</cfcomponent>