DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`parking_add`(vFromColumn INT, vToColumn INT, vFromRow INT, vToRow INT, vSectorFk INT, vIsLetterMode BOOLEAN)
BEGIN

	DECLARE vColumn INT;
    DECLARE vRow INT;
    DECLARE vLetters VARCHAR(26) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    DECLARE vMaxId INT;
    DECLARE vCode VARCHAR(8);
    
    SET vColumn = vFromColumn;
    SET vRow = vFromRow;
    SET vCode = CONCAT(LPAD(vColumn,3,'0'),'-',IF(vIsLetterMode, MID(vLetters, vRow, 1), LPAD(vRow, 2,'0')));
     
	SELECT MAX(id) INTO vMaxId
		FROM vn.parking;

	WHILE vColumn <= vToColumn DO
    
		WHILE vRow <= vToRow DO
    
			INSERT IGNORE INTO vn.parking(`column`, `row`, sectorFk, `code`, pickingOrder)
				VALUES (vColumn, vRow, vSectorFk, vCode, vColumn * 100 + vRow )
                ON DUPLICATE KEY UPDATE `code` = vCode;
			
			SET vRow = vRow + 1;
            SET vCode = CONCAT(LPAD(vColumn,3,'0'),'-',IF(vIsLetterMode, MID(vLetters, vRow, 1), LPAD(vRow, 2,'0')));
            
		END WHILE;
        
        SET vRow = vFromRow;
        SET vColumn = vColumn + 1;
        
		SET vCode = CONCAT(LPAD(vColumn,3,'0'),'-',IF(vIsLetterMode, MID(vLetters, vRow, 1), LPAD(vRow, 2,'0')));
     
    END WHILE;
    
    SELECT * FROM vn.parking WHERE `column` BETWEEN vFromColumn AND vToColumn;

END$$
DELIMITER ;