DROP PROCEDURE IF EXISTS vn.clientCreate;

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`client_create`(
	vFirstname VARCHAR(50),
	vSurnames VARCHAR(50), 
	vFi VARCHAR(9), 
	vAddress TEXT, 
	vPostcode CHAR(5),
	vCity VARCHAR(25),
	vProvinceFk SMALLINT(5),
	vCompanyFk SMALLINT(5),
	vPhone VARCHAR(11),
	vEmail VARCHAR(255),
	vUserFk INT
)
BEGIN
/**
 * Create new client
 *
 * @params vFirstname firstName
 * @params vSurnames surnames
 * @params vFi company code from accounting transactions
 * @params vAddress address
 * @params vPostcode postCode
 * @params vCity city
 * @params vProvinceFk province
 * @params vCompanyFk company in which he has become a client
 * @params vPhone telephone number
 * @params vEmail email address
 * @params vUserFk user id
 */
	DECLARE vPayMethodFk INT;
	DECLARE vDueDay INT;
	DECLARE vDefaultCredit DECIMAL(10, 2);
	DECLARE vIsTaxDataChecked TINYINT(1);
	DECLARE vHasCoreVnl BOOLEAN;
	DECLARE vMandateTypeFk INT;

	SELECT defaultPayMethodFk,
			defaultDueDay,
			defaultCredit,
			defaultIsTaxDataChecked,
			defaultHasCoreVnl,
			defaultMandateTypeFk
		INTO vPayMethodFk,
			vDueDay,
			vDefaultCredit,
			vIsTaxDataChecked,
			vHasCoreVnl,
			vMandateTypeFk
		FROM clientConfig;

	INSERT INTO `client`
			SET id = vUserFk,
				name = CONCAT(vFirstname, ' ', vSurnames),
				street = vAddress,
				fi = TRIM(vFi),
				phone = vPhone,
				email = vEmail,
				provinceFk = vProvinceFk,
				city = vCity,
				postcode = vPostcode,
				socialName = CONCAT(vSurnames, ' ', vFirstname), 
				payMethodFk = vPayMethodFk,
				dueDay = vDueDay,
				credit = vDefaultCredit,
				isTaxDataChecked = vIsTaxDataChecked,
				hasCoreVnl = vHasCoreVnl,
				isEqualizated = FALSE
		ON duplicate KEY UPDATE
			payMethodFk = vPayMethodFk,
			dueDay = vDueDay,
			credit = vDefaultCredit,
			isTaxDataChecked = vIsTaxDataChecked,
			hasCoreVnl = vHasCoreVnl,
			isActive = TRUE;
	
	IF (SELECT COUNT(*) 
    		FROM mandate 
    		WHERE clientFk = vUserFk 
    			AND companyFk = vCompanyFk 
    			AND mandateTypeFk = vMandateTypeFk) = 0 THEN
		INSERT INTO mandate (clientFk, companyFk, mandateTypeFk)
			VALUES (vUserFk, vCompanyFk, vMandateTypeFk);
END$$
DELIMITER ;
