
<?php


function GetLuokat($dataarray){
	foreach( $dataarray as $competitor ){
			//print_r($competitor);
			//echo $competitor->tablerow();
			//echo $competitor->matka;
			$luokat[] = $competitor->sarja;
	}
	return array_unique ($luokat);
}
function Genders($dataarray){
	foreach( $dataarray as $competitor ){
			//echo $competitor->tablerow();
			$luokat[] = $competitor->gender;
	}
	return array_unique ($luokat);
}

function generateBarcode($viivakoodi){
	require_once('./tcpdf/tcpdf_barcodes_1d.php');

	$style = array(
		'position' => '',
		'align' => 'C',
		'stretch' => true,
		'fitwidth' => true,
		'cellfitalign' => '',
		'border' => false,
		'hpadding' => 'auto',
		'vpadding' => 'auto',
		'fgcolor' => array(0,0,0),
		'bgcolor' => false,
		'text' => false,
		'font' => 'helvetica',
		'fontsize' => 8,
		'stretchtext' => 4
		);
	$barcodeobj = new TCPDFBarcode($viivakoodi, 'C128C',20, 284, 105, 11, 0.24, $style, 'N');
	return '<br><br><img src="data:image/png;base64,'.base64_encode($barcodeobj->getBarcodePngData(1, 50, array(0,0,0))).'" alt="'.$viivakoodi.'" />';
}

function virtuaaliviivakoodi ($tilinumero,$euro,$sentit,$viite,$duedate){
	/*
	4 tyyppi
	5854190140028998 tilinumero
	000050 eurot
	00 sentit
	000 varalla
	00000000000000002215 viite
	150313 p&auml;iv&auml;m&auml;&auml;r&auml;
	*/

	return sprintf("4%s%06d%02d000%020d%s", $tilinumero,$euro,$sentit,$viite,$duedate);

}

function br2nl ( $string )
{
	return preg_replace('/\<br(\s*)?\/?\>/i', PHP_EOL, $string);
}

function CalculateViite($seed,$substract){
	$kertoimet = array(7,3,1);
	$viite = $seed - $substract;
	$final_viite = 0;
	$divider = 1;
	$k_index = 0;
	$str_viite = "";
	for($i=0;$i<strlen(strval($seed));$i++){
		if($k_index >= 3)
			$k_index = 0;
		//echo (($viite/$divider)%10)."/".$divider."*".$kertoimet[$k_index]."=".($viite/$divider)%10*$kertoimet[$k_index]."<br>";
		$final_viite += ($viite/$divider)%10*$kertoimet[$k_index];
		$divider *=10;
		$k_index++;
	}
	//echo $final_viite."<br>";
	//echo (($final_viite/10%$divider+1)*10)-$final_viite."<br>";
	$tarkistusluku = (($final_viite/10%$divider+1)*10)-$final_viite;
	if($tarkistusluku == 10)
		$tarkistusluku = $tarkistusluku-10;
	$str_viite = $seed."".$tarkistusluku;
	//echo $str_viite;
	return $str_viite;
}

function GetClassByInvoicenumber(&$items, $invoicenumber){
	foreach( $items as $item ){
			if($item->invoicenumber == strval($invoicenumber)){
				//print_r($item);
				return $item;
			}
	}

}

function printmenucomponents($array,$gender,$group){
	if(calcpart($array,$gender,$group) != 0){
		echo '<a href="#'.$gender.''.$group.'">'.$gender.' '.$group.'</a> ';
	}
}

function calcpart($array,$gender,$group){
	$amount = 0;
	foreach( $array as $item ){
		if($gender == utf8_decode($item[4]) && $group == utf8_decode($item[5])){
			$amount++;
		}
	}
	return $amount;
}


function array_sort($array, $on, $order=SORT_ASC)
{
    $new_array = array();
    $sortable_array = array();

    if (count($array) > 0) {
        foreach ($array as $k => $v) {
            if (is_array($v)) {
                foreach ($v as $k2 => $v2) {
                    if ($k2 == $on) {
                        $sortable_array[$k] = $v2;
                    }
                }
            } else {
                $sortable_array[$k] = $v;
            }
        }

        switch ($order) {
            case SORT_ASC:
                asort($sortable_array);
            break;
            case SORT_DESC:
                arsort($sortable_array);
            break;
        }

        foreach ($sortable_array as $k => $v) {
            $new_array[$k] = $array[$k];
        }
    }

    return $new_array;
}

function plaintext($val)
{
		$temp = explode(":",$val);
		$temp2 = substr($temp[1],1);
		return $temp2;
}
function printClass($dataarray,$class,$gender){
	foreach( $dataarray as $competitor ){
		if($gender == "-"){
			if($competitor->sarja == $class)
				echo $competitor->tablerow();
		}
		else{
			if($competitor->sarja == $class && $competitor->gender == $gender)
				echo $competitor->tablerow();
		}
	}
}

function PrintInvoice($dataarray,$date){

	foreach( $dataarray as $competitor ){
		if(floatval($date) == $competitor->date){
			echo $competitor->invoice2();
		}
	}

}


class Competitor
{
	private $pattern = '/([0-9]*).([0-9]*).([0-9]*) [a-zA-Z]+ ([0-9]*).([0-9]*).([0-9]*)/i';
	private $replacement = '${3}-${2}-${1} ${4}:${5}:${6}';
	private $pp1 = 0;
	private $pp2 = 0;

	public $date; //0
	public $etunimi; //1
	public $sukunimi; // 2
	public $email; // 3
	public $phone1; // 4
	public $phone2; // 5
	public $gender; // 6
	public $matka; // 7
	public $sarja;  // 8
	public $tunniste; // 9
	public $alennus; // 10
	public $price; // 10
	public $price_beforediscount; // 10
	/*
	[0] => Aikaleima
	[1] => Etunimi
	[2] => Sukunimi
	[3] => Seura/Yritys/Muu tunniste
	[4] => Sähköposti
	[5] => Puhelinnumero
	[6] => Huoltajan/Omaisen puhelinnumero
	[7] => Sukupuoli
	[8] => Matka
	[9] => Sarja
	[10] => Vakuutan tiedot oikeiksi ja hyväksyn järjestäjän ehdot.
	*/
	public function __construct($date,$Etunimi,$Sukunimi,$Seura,$email,$Puhelinnumero,$Puhelinnumero2,$Sukupuoli,$Matka,$Sarja,$ok){
			$this->date=strtotime (preg_replace($this->pattern, $this->replacement, $date));
			$this->etunimi=$Etunimi;//utf8_decode($val1);
			$this->sukunimi=$Sukunimi;//utf8_decode($val2);
			$this->email=$email;//utf8_decode($val4);
			$this->phone1=$Puhelinnumero;//utf8_decode($val5);
			$this->phone2=$Puhelinnumero2;//utf8_decode($val6);
			$this->gender=$Sukupuoli;//utf8_decode($val7);
			$this->matka=$Matka;//utf8_decode($val8);
			$this->sarja=$Sarja;//utf8_decode($val9);
			//$this->invoicenumber=CalculateViite(mktime(0, 0, 0, 7, 19, 2015)-$this->date,0);
			if(strlen($this->sarja) == 0)
				$this->sarja = "-";
			$this->tunniste=$Seura;//utf8_decode($val3);
			if(strlen($this->tunniste) == 0)
				$this->tunniste = "-";
			//$this->alennus=utf8_decode($val10);


			if($this->matka == "MARATON"){
					$this->price = 40;
			}
			else if($this->matka == "MINIMARATON"){
					$this->price = 15;
			}
			else{
					$this->price = 30;
			}

			if($this->matka == "MINIMARATON"){
				$gendercorrection = explode("/", $this->gender);
				$this->gender = $gendercorrection[1];
			}
			else{
				$gendercorrection = explode("/", $this->gender);
				$this->gender = $gendercorrection[0];
			}
			/*echo "<pre>";
			print_r($this);
			echo "</pre>";*/
			/*$this->price_beforediscount = $this->price;
			if($this->price != 0 && strlen($this->alennus) >3){
				$this->price = $this->price-2;
			}*/


	}

	public function getalennus() {
		if(strlen($this->alennus) > 3){
			if($this->alennus =="Juoksijakortti")
				return "<span class=\"label label-primary\">".$this->alennus."</span>";
			else if($this->alennus =="S-Kortti")
				return "<span class=\"label label-success\">".$this->alennus."</span>";

		}
		else
			return "";
	}

	public function getgender() {
			if($this->gender =="Poika" || $this->gender =="Mies")
				return "<span class=\"label label-primary\">".$this->gender."</span>";
			else if($this->gender =="Nainen" || $this->gender =="Tytt&ouml;")
				return "<span class=\"label label-danger\">".$this->gender."</span>";
	}

	public function getmaksuporras(){
		if($this->pp1 == 1 && $this->pp2 == 1){
			return "<span class=\"label label-default\">28.2.</span>";
		}
		else if($this->pp1 == 0 && $this->pp2 == 1)
			return "<span class=\"label label-warning\">4.5.</span>";
	}

	public function getDuedate(){
		//return strftime ("%e.%m.%Y",$this->date+ ( 24 * 60 * 60*14));
		return strftime ("%e.%m.%Y",mktime(0, 0, 0, 7, 14, 2016));
	}

	public function GetDate(){
		return strftime ("%e.%m.%Y",$this->date);
	}

	public function invoice(){
		$lasku ="Maksutiedot
Saaja: Nurmon Jymy / Sein&auml;maraton
BIC: POP Pankit (POP) HELSFIHH
IBAN: FI76 4747 0010 0168 06
Viesti: Sein&auml;maraton, ".$this->etunimi." ".$this->sukunimi.", ".$this->matka.", ".$this->sarja."\nSUMMA:".$this->price." EUR\n";
		$lasku = $lasku."Er&auml;p&auml;iv&auml;: ".$this->getDuedate()."\n";

		if($this->pp1 == 1 && $this->pp2 == 1){
			$lasku = $lasku."\n\nHINNASSA HUOMIOIDUT ALENNUKSET:\nIlmoittautuminen tapahtunut ennen 28.2.\n";
		}
		else if($this->pp1 == 0 && $this->pp2 == 1)
			$lasku = $lasku."Ilmoittautuminen tapahtunut ennen 4.5., mutta 28.2. j&auml;lkeen\n";
		else
			$lasku = $lasku;

		if(strlen($this->alennus) > 3){
			if($this->alennus =="Juoksijakortti")
				$lasku = $lasku."Muu alennus:".$this->alennus;
			else if($this->alennus =="S-Kortti")
				$lasku = $lasku."Muu alennus:".$this->alennus;

		}
		else
			$lasku = $lasku;


		return $lasku;
	}

	public function __toString()  {

	}


	public function invoice2(){
		$lasku = $lasku.'<div class="row">
		<div class="col-md-8"><h3><img src="logo.png" alt="LOGO">  Sein&auml;joen Py&ouml;r&auml;pojat -56 ry</h3></div>
		<div class="col-md-4"><h3>LASKU</h3>
		Laskun p&auml;iv&auml;m&auml;&auml;r&auml;: '.$this->GetDate().'<br>
		<div class="alert alert-danger" role="alert"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
		Er&auml;p&auml;iv&auml;: '.$this->getDuedate().'<br>
		</div>
		Maksuehdot: '.intval(((mktime(0, 0, 0, 7, 14, 2016)-$this->date)/60/60/24)).'pv netto<br>
		Huomautusaika: 7 p&auml;iv&auml;&auml;<br>
		Etunimi: '.$this->etunimi.'<br>
		Sukunimi: '.$this->sukunimi.'<br>
		</div>
		</div>';
		$lasku = $lasku."<br>";
		$lasku = $lasku.'<table id="" class="table"  width="100%"><thead>
		<tr>
		<th>Nimike</th>
		<th>Pvm</th>
		<th>Hinta</th>
		<th>M&auml;&auml;r&auml;</th>
		<th>Yhteens&auml;</th>
		</tr></thead>';


		$maksuporras = "";
		if($this->pp1 == 1 && $this->pp2 == 1){
			$maksuporras ="<br>Maksuporras 1, ennen 1.3.";//$lasku."Ilmoittautuminen tapahtunut ennen 28.2.<br>\n";
		}
		else if($this->pp1 == 0 && $this->pp2 == 1)
			$maksuporras ="<br>Maksuporras 2, ennen 5.5.";//$lasku."Ilmoittautuminen tapahtunut ennen 28.2.<br>\n";
		else
			$maksuporras = "";

		$lasku = $lasku."<tr><td>".$this->matka."<br> Sarja:".$this->gender." ".$this->sarja." ".$maksuporras."</td><td>".$this->GetDate()."</td><td>".$this->price.",00 EUR</td><td>1 kpl</td><td>".$this->price.",00 EUR</td></tr>";


		/*if(strlen($this->alennus) > 3){
			if($this->alennus =="Juoksijakortti")
				$lasku = $lasku."<tr><td>Juoksijakortti</td><td></td><td></td><td>1 kpl</td><td>-".($this->price_beforediscount-$this->price).",00EUR</td></tr>";//$lasku."Ilmoittautuminen tapahtunut ennen 28.2.<br>\n";
			else if($this->alennus =="S-Kortti")
				$lasku = $lasku."<tr><td>S-Kortti</td><td></td><td></td><td>1 kpl</td><td>-".($this->price_beforediscount-$this->price).",00EUR</td></tr>";//$lasku."Ilmoittautuminen tapahtunut ennen 28.2.<br>\n";

		}
		else
			$lasku = $lasku;*/

		$lasku = $lasku."<tr><td><strong>Yhteens&auml;</strong></td><td></td><td> </td><td></td><td><strong>".$this->price.",00 EUR</strong></td></tr>";

		$lasku = $lasku."</table>";



		$lasku = $lasku.'<div class="row">
					<div class="col-md-2">Saajan tilinumero</div>
					<div class="col-md-6">IBAN: Osuuspankki <strong>FI58 5419 0140 0289 98</strong></div>
					<div class="col-md-4">BIC: OKOYFIHH</div>
					<div class="col-md-2">Viite: </div><div class="col-md-4">'.$this->invoicenumber.'</div>
					</div>';

		$lasku = $lasku.'<div class="row">
					<div class="col-md-2">Saaja</div>
					<div class="col-md-4"><strong>Sein&auml;joen Py&ouml;r&auml;pojat -56</strong></div>
					</div>';

		$lasku = $lasku."Virtuaaliviivakoodi: ";
		$lasku = $lasku.virtuaaliviivakoodi("5854190140028998",$this->price,0,$this->invoicenumber,"150313");
		$lasku = "<br>".$lasku.generateBarcode(virtuaaliviivakoodi("5854190140028998",$this->price,0,$this->invoicenumber,"150715"));

		/*$lasku = $lasku.'<div class="row">
		<div class="col-md-2">Viesti:</div>
		<div class="col-md-4"> Sein&auml;maraton, '.$this->etunimi.' '.$this->sukunimi.', '.$this->matka.', '.$this->sarja.'
		</div></div>';*/




		return $lasku;

	}

	public function tablerow()  {
		//return $this->etunimi.",".$this->sukunimi.",".$this->tunniste.",".$this->matka.",".$this->gender.",".$this->sarja.",".$this->price."EUR";
		//return "<tr>\n\t<td><a href=\"#\" id=\"".$this->date."\">".$this->etunimi." ".$this->sukunimi."</a></td>\n\t<td>".$this->tunniste."</td>\n\t<td>".$this->getgender()." ".$this->matka."</td>\n\t<td>".$this->sarja."</td>\n\t<td>".$this->price."EUR ".$this->getmaksuporras()."".$this->getalennus()."</td></tr>\n";
		return "<tr>\n\t<td><a href=\"#\" id=\"".$this->date."\">".$this->etunimi." ".$this->sukunimi."</a></td>\n\t<td>".$this->tunniste."</td>\n\t<td>".$this->getgender()." ".$this->matka."</td>\n\t<td>".$this->sarja."</td>\n\t</tr>\n";

	}
}

$feedURL = "https://docs.google.com/spreadsheets/d/1iAjCK3p1na-9ouXoMZ1F0Zvgw2WzNfLSZGgSOe59Jbc/export?format=csv&id=1iAjCK3p1na-9ouXoMZ1F0Zvgw2WzNfLSZGgSOe59Jbc";
// https://docs.google.com/spreadsheets/d/1loxu5oIRDcHcUS6iUF_G6IKevzNGDhGbWYiVgZccIPg/edit?usp=sharing


$csv = array_map('str_getcsv', file($feedURL));
//unset($csv[0]);
$csv = array_sort($csv, 2, SORT_ASC);
//echo "<pre>";
//print_r($csv);
//echo "</pre>";
$competitors = array();


/*
[0] => Aikaleima
[1] => Etunimi
[2] => Sukunimi
[3] => Seura/Yritys/Muu tunniste
[4] => Sähköposti
[5] => Puhelinnumero
[6] => Huoltajan/Omaisen puhelinnumero
[7] => Sukupuoli
[8] => Matka
[9] => Sarja
[10] => Vakuutan tiedot oikeiksi ja hyväksyn järjestäjän ehdot.
*/



foreach( $csv as $item ) {
	$competitors[] = new Competitor($item[0],$item[1],$item[2],$item[3],$item[4],$item[5],$item[6],$item[7],$item[8],$item[9],$item[10]);
}


//echo "<pre>";
//print_r($competitors);
//echo "</pre>";
$luokat = GetLuokat($competitors);

if(!isset($_GET["print"])){
	echo '<table id="lista" width="100%"><thead>
				<tr>
				<th width="150px">Nimi</th>
				<th width="150px">Seura</th>
				<th width="150px">Sukupuoli</th>
				<th width="150px">Matka</th>
				<th width="150px">Sarja</th>
				</tr></thead>';

				foreach ($luokat as $key => $value) {
					printClass($competitors,$value,"Mies");
					printClass($competitors,$value,"Nainen");
					printClass($competitors,$value,"Poika");
					printClass($competitors,$value,"Tyttö");
				}
	echo "</table>";
}
else{
	printInvoice($competitors,$_GET["print"]);
}
?>
