<?php
	require_once("../includes/bootstrap2.php");
	$sesion=new sesion();
	$academia=bootstrap::initBd($sesion->get('anio'));
	/** Error reporting */
	error_reporting(E_ALL);
	ini_set('display_errors', true);
	ini_set('display_startup_errors', true);
	date_default_timezone_set('Europe/London');
	
	if (PHP_SAPI == 'cli')
		die('This example should only be run from a Web Browser');
	
	/** Include PHPExcel */
	require_once("../includes/phpExcel/PHPExcel.php");
	// Create new PHPExcel object
	$objPHPExcel = new PHPExcel(); 
	
	// Set document properties
	$objPHPExcel->getProperties()->setCreator("Academia Web")
								 ->setLastModifiedBy(date('Y-m-d H:m:s'))
								 ->setDescription("Planilla de notas")
								 ->setKeywords("Academia 2013")
								 ->setCategory("Reportes Academia");
	// Add some data
	$iduser=$sesion->get('ac_userid');
	
	$iduser=$sesion->get('ac_userid');
	$configuracion=$sesion->get('configuracion');
	$nombre_grupo=$configuracion['nombres_grupos'];
	$periodo=$academia->escapar($_GET['periodo']); 
	$materia=$academia->escapar($_GET['mat']);
	$cdmateria=$academia->escapar($_GET['idmat']); 
	$grado=$academia->escapar($_GET['grado']); 
	$docente=$academia->escapar($_GET['doc']);
	$jornada=$academia->escapar($_GET['jorn']);
	$notMin=(float)$academia->escapar($_GET['nmin']);
	$notMax=(float)$academia->escapar($_GET['nmax']);
	$sede=$academia->escapar(ucwords($_GET['sede'])); 
	
	switch ($periodo) {
	case 1:
		$periodon= "Primero";
	break;
	case 2:
		$periodon= "Segundo";
	break;
	case 3:
		$periodon= "Tercero";
	break;
	case 4:
		$periodon= "Cuarto";
	break;
	case 5:
		$periodon= "Quinto";
	break;
	case 6:
		$periodon= "Sexto";
	break;
	case 7:
		$periodon= "Séptimo";
	break;
	case 8:
		$periodon= "Octavo";
	break;
	case 9:
		$periodon= "Noveno";
	break;
	case 10:
		$periodon= "Décimo";
	break;
	case 11:
		$periodon= "Décimo Primero";
	break;
	case 12:
		$periodon= "Décimo Segundo";
	break;
	} 
	
	//echo $sql;
	$i=0;
	$cmps="";
	//$idSede=$_GET['id'];
	
	
	
	$hojaActiva=$objPHPExcel->getActiveSheet();
	$hojaActiva->getDefaultColumnDimension()->setWidth(8);
	
	$objWorksheet1 = $objPHPExcel->createSheet();
	$objWorksheet1->setTitle('configNotas');
	
	$objWorksheet1->getProtection()->setSheet(TRUE);
	$objWorksheet1->getProtection()->setPassword('C*w3b+AC420&1?P');
	$objWorksheet1->getProtection()->setSheet(TRUE);
	$objWorksheet1->getProtection()->setSort(TRUE);
	$objWorksheet1->getProtection()->setInsertRows(TRUE);
	$objWorksheet1->getProtection()->setFormatCells(TRUE);
	//Oculto la hoja de codigos
	//$objWorksheet1->setSheetState(PHPExcel_Worksheet::SHEETSTATE_HIDDEN);
	
	//protejo el libro
	$objPHPExcel->getSecurity()->setLockWindows(true);
	$objPHPExcel->getSecurity()->setLockStructure(false);
	$objPHPExcel->getSecurity()->setWorkbookPassword("*w(1+2)bAC420&1?");

	//Protejo la hoja activa
	$hojaActiva->getProtection()->setSheet(TRUE);
	$hojaActiva->getProtection()->setPassword('*w3b+AC420&1?');
	$hojaActiva->getProtection()->setSheet(TRUE);
	$hojaActiva->getProtection()->setSort(TRUE);
	$hojaActiva->getProtection()->setInsertRows(TRUE);
	$hojaActiva->getProtection()->setFormatCells(TRUE);
		
	$dtsColegio=$sesion->get('info_colegio');
	$hojaActiva->setCellValue('A1', $dtsColegio['nombre']);
	$hojaActiva->setCellValue('A2', "NIT. ".  $dtsColegio['nit']);
	$hojaActiva->setCellValue('A3',  empty($dtsColegio['resolucion']) ? $dtsColegio['decreto'] : $dtsColegio['resolucion'] );
	$hojaActiva->setCellValue('A4', 'Sede: '. $sede ." Jornada: ". $jornada ." Grupo: ". $grado  );
	$hojaActiva->setCellValue('A5', 'Planilla de notas de : '. $materia. " Periodo : ". $periodo);
	
	//DATOS HOJA CONFIGURACION
	$objWorksheet1->setCellValue('A1', $sede);
	$objWorksheet1->setCellValue('B1', $jornada);
	$objWorksheet1->setCellValue('C1', $grado);
	$objWorksheet1->setCellValue('D1', $materia);
	$objWorksheet1->setCellValue('E1', $periodon);

	$sql="CALL SP_NOTASXESTUDIANTES_EXPORT_XLS($cdmateria,$periodo,'1')"; 
	$academia->instruccion($sql,0,1); 
		
	$reg=$academia->extraer_registro();

	$cant_est=$academia->filas_afectadas(); 
	$can_fil=$cant_est;
	
	
	$dtsCols=split(">", substr($reg["datacols"],1));
	$cabeceras=array_keys($reg);
	$tam=count($cabeceras)-1;

	$filOrg=6;
	$colOrg=2;
	$col=$colOrg;
	$fil=$filOrg;

	$fil++;
	
	$hojaActiva->setCellValueByColumnAndRow(0, $fil, 'N°');
	$hojaActiva->setCellValueByColumnAndRow(1, $fil, 'Nombres y apellidos');
	
	$mayus_nom=$sesion->getVar('configuracion.format_nom');
	$mayus_mat=$sesion->getVar('configuracion.format_mat');
	$fil=$fil+1;
	$xy=1;
	$band=0;
	
	$objValidation = $hojaActiva->getCell($dtsLang['mod_forma_nom_cel'][$colOrg].$fil)->getDataValidation();
	$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_DECIMAL );
	$objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_STOP );
	$objValidation->setAllowBlank(true);
	$objValidation->setShowInputMessage(true);
	$objValidation->setShowErrorMessage(true);
	$objValidation->setErrorTitle('Nota Invalida');
	$objValidation->setError("Solamente los números entre $notMin y $notMax son admitidos.");
	$objValidation->setPromptTitle('Datos Validos');
	$objValidation->setPrompt("Solamente los números entre $notMin y $notMax son admitidos.");
	$objValidation->setFormula1($notMin);
	$objValidation->setFormula2($notMax);
	
	$hojaActiva->getStyle('B1')->getProtection()->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);
	$contFil=3;
	$objWorksheet1->setCellValueByColumnAndRow(0, 2,$tam-3); //establesco el numero de calificaciones por estudiante
	$objWorksheet1->setCellValueByColumnAndRow(1, 2,$cant_est); //establesco el numero de estudiante

	$notasEqals=$sesion->getVar('configuracion.notas_iguales');
	
	do{
		$contCol=1;
		$col=$colOrg;
		$hojaActiva->setCellValue('A'.$fil, $xy);
		$hojaActiva->setCellValue('B'.$fil,formatoPalabras($reg['nom_estudiante'], $mayus_nom));
		
		$dt_nota_def = $reg['nota_def']; //make remaining items html entries.
		$dt_nota_def = str_replace(chr(10), " ", $dt_nota_def); //remove carriage returns
		$dt_nota_def = str_replace(chr(13), " ", $dt_nota_def); //remove carriage returns
		
		$dt_nota_def=parseString($dt_nota_def); 
		$dt_nota_def=json_decode($dt_nota_def,true);
		$ndef=number_format($dt_nota_def['def_numeros'],1,'.','');
		
		$objWorksheet1->setCellValue('A'.$contFil,$dt_nota_def['cod_n_desem']);
		
		$formula="0";
		for($u=3;$u<$tam;$u++){
			$dt_nota=str_replace("^","\"",$reg[$cabeceras[$u]]);
			$dt_nota=parseString($dt_nota);
			$dt_nota=json_decode($dt_nota,true);
			$nota=($dt_nota['nota_numeros']==9999) ? '' : number_format($dt_nota['nota_numeros'],1,'.','');
			$hojaActiva->setCellValueByColumnAndRow($col, $fil, $nota);
			$objWorksheet1->setCellValueByColumnAndRow($contCol, $contFil, (float)$dt_nota['cod_calxasixest']);
			
			$hojaActiva->getCell($dtsLang['mod_forma_nom_cel'][$col].$fil)->setDataValidation(clone $objValidation);
			$hojaActiva->getStyle($dtsLang['mod_forma_nom_cel'][$col].$fil)->getProtection()->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);
			$hojaActiva->getStyle($dtsLang['mod_forma_nom_cel'][$col].$fil)->getProtection()->setHidden(PHPExcel_Style_Protection::PROTECTION_PROTECTED);
			if($notasEqals==0){
				$formula.='+'.$dtsLang['mod_forma_nom_cel'][$col].$fil."*".($dt_nota['por_nota']/100)."*".($dt_nota['por_saber']/100);
			}else{//no se tiene en cuenta porcentajes
				$formula.='+'.$dtsLang['mod_forma_nom_cel'][$col].$fil;
			}
			
			if($band==0){
				$nota_pierde=$dt_nota['pierde'];
				$dtsSab[$dt_nota['cod_saber']]['ns']=$dt_nota['nombre_saber'];
				$dtsSab[$dt_nota['cod_saber']]['ps']=$dt_nota['por_saber'];
				$dtsSab[$dt_nota['cod_saber']]['dtn'][]=array('fc'=>$dt_nota['fecha_calif'], 'pc'=>$dt_nota['por_nota'], 'nm'=>$dt_nota['nombre_nota']);
			}
			$col++;
			$contCol++;
		}
		//$hojaActiva->setCellValueByColumnAndRow($col,$fil,'=suma('.$rango.')');		
		if($notasEqals!=0){
			$rango=$dtsLang['mod_forma_nom_cel'][$colOrg].$fil.":".$dtsLang['mod_forma_nom_cel'][$col-1].$fil;
			$formula='AVERAGE('.$rango.')';
		}

		$hojaActiva->setCellValue($dtsLang['mod_forma_nom_cel'][$col].$fil,"=$formula");

		$band=1;
		$fil++;
		$xy++;
		$contFil++;
	}while($reg=$academia->extraer_registro());
	
	$ultimaFila=$fil;
	$colAux=$colOrg;
	$aux=$colOrg;
	for($i=$colOrg;$i<=$col;$i++){
		$rango=$dtsLang['mod_forma_nom_cel'][$i].$filOrg.":".$dtsLang['mod_forma_nom_cel'][$i].($fil-1);
		$formula='AVERAGE('.$rango.')';
		$hojaActiva->setCellValue($dtsLang['mod_forma_nom_cel'][$col].$fil,"=$formula");
	}
	
	$rango=$dtsLang['mod_forma_nom_cel'][$colOrg].($filOrg+1).':'.$dtsLang['mod_forma_nom_cel'][$col].$ultimaFila;
	$hojaActiva->getStyle($rango)->getNumberFormat()->setFormatCode('#,#0.0'); 

	
	foreach($dtsSab as $dts){
		$hojaActiva->setCellValueByColumnAndRow($colAux, $filOrg, $dts['ns']);
		$newcol=$colAux+(count($dts['dtn'])-1);
		$rango=$dtsLang['mod_forma_nom_cel'][$colAux].$filOrg.':'.$dtsLang['mod_forma_nom_cel'][$newcol].$filOrg;
		$hojaActiva->mergeCells($rango);
		$colAux=$newcol+1;
		foreach($dts['dtn'] as $dtsnots){
			$hojaActiva->setCellValueByColumnAndRow($aux,($filOrg+1), $dtsnots['nm']);
			$aux++;
		}
	}
	
	//Formato condicional de las nota rojo nota menor que la nota minima
	$objConditional1 = new PHPExcel_Style_Conditional();
	$objConditional1->setConditionType(PHPExcel_Style_Conditional::CONDITION_CELLIS);
	$objConditional1->setOperatorType(PHPExcel_Style_Conditional::OPERATOR_LESSTHAN);
	$objConditional1->addCondition($nota_pierde);
	$objConditional1->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);

	
	$objConditional2 = new PHPExcel_Style_Conditional();
	$objConditional2->setConditionType(PHPExcel_Style_Conditional::CONDITION_CELLIS);
	$objConditional2->setOperatorType(PHPExcel_Style_Conditional::OPERATOR_GREATERTHANOREQUAL);
	$objConditional2->addCondition('0');
	$objConditional2->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLACK);
	
	$conditionalStyles = $objPHPExcel->getActiveSheet()->getStyle('B2')->getConditionalStyles();
	array_push($conditionalStyles, $objConditional1);
	array_push($conditionalStyles, $objConditional2);
	
	$rango=$dtsLang['mod_forma_nom_cel'][$colOrg].($filOrg+2).':'.$dtsLang['mod_forma_nom_cel'][$col].$ultimaFila;
	
	$hojaActiva->getStyle($rango)->setConditionalStyles($conditionalStyles);
	$objPHPExcel->getActiveSheet()->duplicateStyle($hojaActiva->getStyle('B2'), 'B3:B7' );
	
	//FOrmateando encabezado colegio
	$hojaActiva->mergeCells('A1:'.$dtsLang['mod_forma_nom_cel'][$col-1].'1');
	$hojaActiva->mergeCells('A2:'.$dtsLang['mod_forma_nom_cel'][$col-1].'2');
	$hojaActiva->mergeCells('A3:'.$dtsLang['mod_forma_nom_cel'][$col-1].'3');
	$hojaActiva->mergeCells('A4:'.$dtsLang['mod_forma_nom_cel'][$col-1].'4');
	$hojaActiva->mergeCells('A5:'.$dtsLang['mod_forma_nom_cel'][$col-1].'5');
	
	$hojaActiva->getStyle('A1:'.$dtsLang['mod_forma_nom_cel'][$col-1].'5')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
	$hojaActiva->getStyle('A1:'.$dtsLang['mod_forma_nom_cel'][$col-1].'5')->getFont()->setBold(true);
	
	$styleArrayMat=array(
		'alignment' => array(
			'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
			'rotation' => 90,
			'wrap'=>TRUE,
		),
		"font"=>array(
			"bold"=>TRUE,
		)
	);
	
	$styleArrayEnc2=array(
		'alignment' => array(
			'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
		),
		"font"=>array(
			"bold"=>TRUE,
		)
	);
	$styleArrayBorders = array(
		'borders' => array(
			'allborders' => array(
				'style' => PHPExcel_Style_Border:: 	BORDER_THIN  ,
				'color' => array('argb' => '0000'),
			),
		),
	);
	
	$rango=$dtsLang['mod_forma_nom_cel'][0].$filOrg.':'.$dtsLang['mod_forma_nom_cel'][$col-1].$fil;
	$hojaActiva->getStyle($rango)->applyFromArray($styleArrayBorders);
	
	$rango=$dtsLang['mod_forma_nom_cel'][$colOrg].($filOrg+1).':'.$dtsLang['mod_forma_nom_cel'][$col].($filOrg+1);
	$hojaActiva->getStyle($rango)->applyFromArray($styleArrayMat);
	
	$rango=$dtsLang['mod_forma_nom_cel'][0].($filOrg+1).':'.$dtsLang['mod_forma_nom_cel'][$col].($filOrg+1);
	$hojaActiva->getStyle($rango)->applyFromArray($styleArrayEnc2);
	
	$hojaActiva->getRowDimension($filOrg+1)->setRowHeight(129);
	$hojaActiva->getColumnDimension('B')->setAutoSize(true);
	
	// Rename worksheet
	$hojaActiva->setTitle('Planilla Notas');

	// Set active sheet index to the first sheet, so Excel opens this as the first sheet
	$objPHPExcel->setActiveSheetIndex(0);
	
	$nomdoc="Planilla notas $materia $grado.xlsx";
	// Redirect output to a client’s web browser (Excel5)
	header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
	header('Content-Disposition: attachment;filename="'.$nomdoc.'"');
	header('Cache-Control: max-age=0');

	$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
	$objWriter->save('php://output');
	unset($objPHPExcel);
	unset($objWriter);
	unset($objConditional1);
	unset($objConditional2);
	unset($objValidation);
	unset($objWorksheet1);
	
	exit;
?>