<?php

/**
 * 
 * Copyright (C) Die Randgruppe GmbH
 * 
 * http://www.randshop.com
 * http://www.dierandgruppe.com
 * 
 * Unter der Lizenz von Die Randgruppe GmbH:
 * http://www.randshop.com/Lizenz
 *  
 * $Author$
 * $Date$
 * $Revision$
 * 
 */

	if(RECHNUNGSWESEN) {
		include_once("../../includes/functions.mod.bestellungen.inc.php");
	} else {
		include_once("../../includes/functions.bestellungen.inc.php");
	}

function ParseZahlungenCSVFile($filename)
{
	$file = fopen($filename, 'r');
	if(!$file)
		return false;

	$columns = fgetcsv($file, 2000, ';');
	foreach($columns as $index=>$column)
	{
		switch($column)
		{
			case 'Betrag':
				$betragIndex = $index;			
				break;
			case 'Betrag - Währung':
				$waehrungIndex = $index;
				break;
			case 'Buchungstag':
				$buchungstagIndex = $index;
				break;
			case 'Empfänger/Absender - Name':
				$absenderIndex = $index;
				break;
			case 'Laufende Nummer';
				$idIndex = $index;
				break;
			case 'Verwendungszweckzeile 1':
				$verwendungszweckIndices[0] = $index;
				break;
			case 'Verwendungszweckzeile 2':
				$verwendungszweckIndices[1] = $index;
				break;
			case 'Verwendungszweckzeile 3':
				$verwendungszweckIndices[2] = $index;
				break;
			case 'Verwendungszweckzeile 4':
				$verwendungszweckIndices[3] = $index;
				break;
			case 'Verwendungszweckzeile 5':
				$verwendungszweckIndices[4] = $index;
				break;
			case 'Verwendungszweckzeile 6':
				$verwendungszweckIndices[5] = $index;
				break;
			case 'Verwendungszweckzeile 7':
				$verwendungszweckIndices[6] = $index;
				break;
			case 'Verwendungszweckzeile 8':
				$verwendungszweckIndices[7] = $index;
				break;
			case 'Verwendungszweckzeile 9':
				$verwendungszweckIndices[8] = $index;
				break;
			case 'Verwendungszweckzeile 10':
				$verwendungszweckIndices[9] = $index;
				break;
			case 'Verwendungszweckzeile 11':
				$verwendungszweckIndices[10] = $index;
				break;
			case 'Verwendungszweckzeile 12':
				$verwendungszweckIndices[11] = $index;
				break;
			case 'Verwendungszweckzeile 13':
				$verwendungszweckIndices[12] = $index;
				break;
			case 'Verwendungszweckzeile 14':
				$verwendungszweckIndices[13] = $index;
				break;
		}
	}
	
	$retIndex = 0;
	while($fields = fgetcsv($file, 2000, ';'))
	{
		$betrag = floatval(str_replace(',','.',$fields[$betragIndex])); 

		if($betrag > 0)
		{
			$retArray[$retIndex]['betrag'] = $betrag;
			$retArray[$retIndex]['waehrung'] = $fields[$waehrungIndex];
			$retArray[$retIndex]['buchungstag'] = strtotime($fields[$buchungstagIndex]);
			$retArray[$retIndex]['absender_name'] = $fields[$absenderIndex];
			$retArray[$retIndex]['id'] = $fields[$idIndex];
			$retArray[$retIndex]['verwendungszweck'] = '';
			foreach($verwendungszweckIndices as $index)
				$retArray[$retIndex]['verwendungszweck'] .= $fields[$index];
			$retIndex++;
		}
	}
	return $retArray;
}

function SaveZahlungen($zahlungenArray)
{
	$numVorhanden = 0;
	$numVorhandenAbsenderUpdate = 0;
	$numImportiert = 0;
	foreach($zahlungenArray as $zahlung)
	{
		$SQLString = "INSERT INTO " . TABLE_ZAHLUNGEN . " SET ";
		$SQLString .= TABLE_ZAHLUNGEN . ".id = '" . $zahlung['id'] . "', ";
		$SQLString .= TABLE_ZAHLUNGEN . ".absender_name = '" . $zahlung['absender_name'] . "', ";
		$SQLString .= TABLE_ZAHLUNGEN . ".betrag = '" . $zahlung['betrag'] ."', ";
		$SQLString .= TABLE_ZAHLUNGEN . ".waehrung = '" . $zahlung['waehrung'] . "', ";
		$SQLString .= TABLE_ZAHLUNGEN . ".buchungstag = '" . date('Y-m-d H:i:s', $zahlung['buchungstag']) ."', ";
		$SQLString .= TABLE_ZAHLUNGEN . ".verwendungszweck = '" . $zahlung['verwendungszweck'] . "'";
//		echo $SQLString;
		$result = errorlogged_mysql_query($SQLString);
		if(!$result) 
		{
			// checken ob die Zahlung in der DB absender_name leer hat, dann updaten wir sie
			$SQLString = "SELECT " . TABLE_ZAHLUNGEN . ".absender_name ";
			$SQLString .= "FROM " . TABLE_ZAHLUNGEN;
			$SQLString .= " WHERE " . TABLE_ZAHLUNGEN . ".id = " . $zahlung['id'];
			
			$row = mysql_fetch_row(errorlogged_mysql_query($SQLString));
			if($row[0] === '' && $zahlung['absender_name'] !== '')
			{
				$SQLString = "UPDATE " . TABLE_ZAHLUNGEN . " SET ";
				$SQLString .= TABLE_ZAHLUNGEN . ".absender_name = '" . $zahlung['absender_name'] . "'";
				$SQLString .= " WHERE " . TABLE_ZAHLUNGEN . ".id = '" . $zahlung['id'] . "'";
				errorlogged_mysql_query($SQLString);
				$numVorhandenAbsenderUpdate++;
			}
			$numVorhanden++;
		}
		else
		{
			$numImportiert++;
		}
	}
	return array($numImportiert, $numVorhanden, $numVorhandenAbsenderUpdate);
}

/**
 * 
 * @param $params
 * 		m�gliche Keys: 
 * 		sortField
 * 		sortOrder
 * 		verarbeitete
 * 		filterField
 * 		filterValue
 * 		searchLike
 * 		fromDate
 * 		toDate
 * 		dataOffset
 * 		dataCount
 * 		
 * @return assoziatives Array mit den Zahlungen$
 */
function GetZahlungenArray($params = array())
{
// Parameter: 
	extract($params);

	$SQLString = "SELECT ";
	$SQLString .= TABLE_ZAHLUNGEN . ".id, ";
	$SQLString .= TABLE_ZAHLUNGEN . ".absender_name, ";
	$SQLString .= TABLE_ZAHLUNGEN . ".betrag, ";
	$SQLString .= TABLE_ZAHLUNGEN . ".waehrung, ";
	$SQLString .= "DATE_FORMAT(" . TABLE_ZAHLUNGEN . ".buchungstag, '%d.%m.%Y') as buchungstag, ";
	$SQLString .= TABLE_ZAHLUNGEN . ".verwendungszweck, ";
	$SQLString .= TABLE_ZAHLUNGEN . ".bestell_id, ";
	$SQLString .= TABLE_ZAHLUNGEN . ".matchscore, ";
	$SQLString .= "DATE_FORMAT(" . TABLE_BESTELLEN . ".auftragsdatum, '%d.%m.%Y') as auftragsdatum_format, ";
	$SQLString .= TABLE_BESTELLEN . ".auftragsnummer, ";
	$SQLString .= "DATE_FORMAT(" . TABLE_BESTELLEN . ".rechnungsdatum, '%d.%m.%Y') as rechnungsdatum_format, ";
	$SQLString .= TABLE_BESTELLEN . ".rechnungsnummer, ";
	$SQLString .= TABLE_BESTELLEN . ".kunden_id, ";
	$SQLString .= TABLE_BESTELLEN . ".anrede, ";
	$SQLString .= TABLE_BESTELLEN . ".vorname, ";
	$SQLString .= TABLE_BESTELLEN . ".nachname, ";
	$SQLString .= TABLE_BESTELLEN . ".firma, ";
	$SQLString .= TABLE_BESTELLEN . ".gesamtsumme_brutto, ";
	$SQLString .= TABLE_BESTELLEN . ".session ";
	$SQLString .= "FROM " . TABLE_ZAHLUNGEN;
	$SQLString .= " LEFT JOIN " . TABLE_BESTELLEN . " ON " . TABLE_ZAHLUNGEN . ".bestell_id = " . TABLE_BESTELLEN . ".id";
	$SQLString .= " WHERE " . TABLE_ZAHLUNGEN . ".verarbeitet = " . ($verarbeitete?'1':'0');
	if($filterField && $filterValue)
	{
		if($searchLike)
			$SQLString .= " AND " . $filterField . " LIKE '%" . $filterValue . "%'";
		else
			$SQLString .= " AND " . $filterField . " = " . $filterValue . "";
	}
	if($fromDate)
		$SQLString .= " AND " . TABLE_ZAHLUNGEN . ".buchungstag >= '" . date('Y-m-d 00:00:00', $fromDate) . "'";
	if($toDate)
		$SQLString .= " AND " . TABLE_ZAHLUNGEN . ".buchungstag < '" . date('Y-m-d 00:00:00', $toDate+24*60*60) . "'";
	
	if($sortField)
	{
		$SQLString .= " ORDER BY " . $sortField . " " . $sortOrder;
	}
	if($dataCount || $dataOffset)
	{
		$SQLString .= " LIMIT " . $dataOffset . ", " . $dataCount;
	}
//	echo $SQLString;
	$result = errorlogged_mysql_query($SQLString);
	while($row = mysql_fetch_assoc($result))
	{
		$zahlungenArray[] = $row;	
	}
	return $zahlungenArray;	
}	

/**
 * 
 * @param $params
 * 		m�gliche Keys: 
 * 		sortfield
 * 		sortorder
 * 		verarbeitete
 * 		filterField
 * 		filterValue
 * 		searchLike
 * 		fromDate
 * 		toDate
 * 		
 * @return assoziatives Array mit den Zahlungen$
 */
function GetZahlungenCount($params)
{
	extract($params);
	
	$SQLString = "SELECT COUNT(*) ";
	$SQLString .= "FROM " . TABLE_ZAHLUNGEN;
	$SQLString .= " LEFT JOIN " . TABLE_BESTELLEN . " ON " . TABLE_ZAHLUNGEN . ".bestell_id = " . TABLE_BESTELLEN . ".id";
	$SQLString .= " WHERE " . TABLE_ZAHLUNGEN . ".verarbeitet = " . ($verarbeitete?'1':'0');
	if($fromDate)
		$SQLString .= " AND " . TABLE_ZAHLUNGEN . ".buchungstag >= '" . date('Y-m-d 00:00:00', $fromDate) . "'";
	if($toDate)
		$SQLString .= " AND " . TABLE_ZAHLUNGEN . ".buchungstag < '" . date('Y-m-d 00:00:00', $toDate+24*60*60) . "'";
	if($filterField && $filterValue)
	{
		if($searchLike)
			$SQLString .= " AND " . $filterField . " LIKE '%" . $filterValue . "%'";
		else
			$SQLString .= " AND " . $filterField . " = '" . $filterValue . "'";
	}
	
	$row = mysql_fetch_row(errorlogged_mysql_query($SQLString));
	return $row[0];
}

function CalcMatchScoreZahlung($zahlung, $bestellung)
{
	// Matching des Absendernamens
	$vornamescore = 0;
	$nachnamescore = array();
	$firmascore = 0;
	$bestellvorname = $bestellung['vorname'];
	$bestellnachname = $bestellung['nachname'];
	$firmenname = $bestellung['firma'];
//	echo "Bestellvorname: " . $bestellvorname;
//	echo "Bestellnachname: " . $bestellnachname;
//	echo "firma: " . $firmenname;
//	var_dump($words);
	foreach($zahlung['absender_words'] as $word)
	{
		if($bestellvorname)
		{
//			echo " levenvor: " . levenshtein($bestellvorname, $word);
			$score = max(0, 1 - 1.5 * levenshtein($bestellvorname, $word) / strlen($bestellvorname));
			if($score > $vornamescore)
				$vornamescore = $score; 	
		}
		
			
		foreach($bestellnachname as $index => $nachname_word)
		{
			if($nachname_word)
			{
//			echo " levennach: " . levenshtein($bestellnachname, $word);
				$score = max (0, 1 - 1.5 * levenshtein($nachname_word, $word) / strlen($nachname_word));
				if(!$nachnamescore[$index] || $score > $nachnamescore[$index])
					$nachnamescore[$index] = $score;
			}
		} 	
		
		if($firmenname)
		{
			$score = max (0, 1 - 1.5 * levenshtein($firmenname, $word) / strlen($firmenname));
			if($score > $firmascore)
				$firmascore = $score; 	
		}
	}
	
//	echo "Scores: " . $vornamescore . ", ".  $nachnamescore. ", ". $firmascore; 
	$sum = 0;
	$count = 0;
	if($bestellvorname)
	{
		$sum += $vornamescore;
		$count++;
	}
	if($bestellnachname[0])
	{
		$nachnamescore = array_sum($nachnamescore) / count($nachnamescore);
		$sum += $nachnamescore * 2;
		$count += 2;	
	}
	if($firmenname)
	{
		$sum += $firmascore * 2;
		$count += 2;	
	}
	
	$name_score = $sum / $count;
	
	// Bruttopreis Matching
	$preis_score = max(0, 1 - abs($zahlung['betrag'] - $bestellung['gesamtsumme_brutto']) * 33); // ab +/- 3 Cent Unterschied f�llt der Preis-Score auf 0%
	
	$kundennr_score = 0;
	$auftragsnr_score = 0;
	$rechnungsnr_score = 0;
	
	// Kundennummer und Auftragsnummer Matching
	foreach($zahlung['verwendungszweck_nummern'] as $nummer)
	{
//		var_dump($nummer);
//		var_dump($bestellung['kundennr']);
//		var_dump($bestellung['auftragsnr']);
//		echo '<br>';
		if($bestellung['kundennr'] == $nummer)
		{
			$kundennr_score = 1;
		}	
		if($bestellung['auftragsnr'] == $nummer)
		{
			$auftragsnr_score = 1;
		}
		if($bestellung['rechnungsnr'])
		{
			if($bestellung['rechnungsnr'] == $nummer)
				$rechnungsnr_score = 1;
		}
	}
	$count = 3;
	$sum = $kundennr_score + 2*$auftragsnr_score;
	if($bestellung['rechnungsnr'])
	{
		$count +=2;
		$sum += 2*$rechnungsnr_score;
	}
	$nummern_score = $sum / $count;
	
	return 0.30*$name_score + 0.30*$preis_score + 0.4*$nummern_score;
}

function ZuordnungenBerechnen()
{
	global $server, $user, $passwort, $datenbankname;	
	
	$zahlungenArray = GetZahlungenArray();
	$csvZahlungsarten = GetZahlungsImportZahlungsarten();
	$bestellArray = array();
	foreach($csvZahlungsarten as $csvZahlungsart)
	{
		$bestellArray = array_merge($bestellArray, GetBestellDataArray("zahlungsart_id", $csvZahlungsart['id'], "", "", "", "", $csvZahlungsart['match_status']));
	}
			
//	CalcMatchScoreZahlung($tpl_zahlungen[0], $bestellArray[0]);

//	echo (microtime(true)) . "<br>";
	
	// beide Arrays f�r den Vergleich vorbereiten
	foreach($zahlungenArray as $zahlung)
	{
		$nummern_int = array();
		preg_match_all('/\d+/', $zahlung['verwendungszweck'], $nummern);
		foreach($nummern[0] as $nummer)
			$nummern_int[] = intval($nummer);
			
		// suche nach Namen im Verwendungszweck erstmal auskommentiert wegen performance (2s ohne vs. 5s mit pr�fung des verwendungszwecks)
		preg_match_all('/\w+/', strtolower($zahlung['verwendungszweck']), $verwendungszweck_words);

		$zahlungen_prepared[] = 
			array(	'id' => $zahlung['id'],
					'absender_words' => 
					array_merge(
						explode(' ', str_replace(array(',', '/'), ' ', strtolower($zahlung['absender_name'])))
						, $verwendungszweck_words[0])
					,
					'betrag' => floatval($zahlung['betrag']),
					'verwendungszweck_nummern' => $nummern_int
			);
	}

	foreach($bestellArray as $bestellung)
	{
		$bestellungen_prepared[] = 
			array( 	'id' => $bestellung['id'],
					'nachname' => explode(' ', str_replace(array('�', '�', '�', '�'), array('a', 'o', 'u', 'sz'), strtolower($bestellung['nachname']))),
					'vorname' => str_replace(array('�', '�', '�', '�'), array('a', 'o', 'u', 'sz'), strtolower($bestellung['vorname'])),
					'firma' => str_replace(array('�', '�', '�', '�'), array('a', 'o', 'u', 'sz'), strtolower($bestellung['firma'])),
					'gesamtsumme_brutto' => floatval($bestellung['gesamtsumme_brutto']),
					'kundennr' => intval($bestellung['kunden_id']),
					'auftragsnr' => intval($bestellung['auftragsnummer']), 
					'rechnungsnr' => intval($bestellung['rechnungsnummer'])
			);
	}

	$bestell_id = null;
	$best_matchscore = 0;
	$zahlung_id = null;
	
	$SQLString = "UPDATE " . TABLE_ZAHLUNGEN . " SET ";
	$SQLString .= TABLE_ZAHLUNGEN . ".bestell_id = ?, ";
	$SQLString .= TABLE_ZAHLUNGEN . ".matchscore = ? ";
	$SQLString .= "WHERE " . TABLE_ZAHLUNGEN . ".id = ?";

	$mysqli = new MySQLi($server, $user, $passwort, $datenbankname);
	$statement = $mysqli->prepare($SQLString);
	$statement->bind_param('iii', $bestell_id, $best_matchscore, $zahlung_id);
	
	foreach($zahlungen_prepared as $zahlung)
	{
		$best_matchscore = 0;
		$bestell_id = null;
		$zahlung_id = $zahlung['id'];
		foreach($bestellungen_prepared as $bestellung)
		{
			$matchScore = CalcMatchScoreZahlung($zahlung, $bestellung);
			if($best_matchscore < $matchScore)
			{
				$best_matchscore = $matchScore;
				$bestell_id = $bestellung['id'];
//				echo $matchScore . ", ";
			}
		}
		$best_matchscore *= 100;
		if($best_matchscore < 50)
		{
			$best_matchscore = null;
			$bestell_id = null;
		}
		$statement->execute();
	}	
	
	$statement->close();
	$mysqli->close();
	
//	echo (microtime(true));
}

function GetZahlung($zahlungsId)
{
	$SQLString = "SELECT ";
	$SQLString .= TABLE_ZAHLUNGEN . ".id, ";
	$SQLString .= TABLE_ZAHLUNGEN . ".absender_name, ";
	$SQLString .= TABLE_ZAHLUNGEN . ".betrag, ";
	$SQLString .= TABLE_ZAHLUNGEN . ".waehrung, ";
	$SQLString .= "DATE_FORMAT(" . TABLE_ZAHLUNGEN . ".buchungstag, '%d.%m.%Y') as buchungstag, ";
	$SQLString .= TABLE_ZAHLUNGEN . ".verwendungszweck, ";
	$SQLString .= TABLE_ZAHLUNGEN . ".bestell_id, ";
	$SQLString .= TABLE_ZAHLUNGEN . ".matchscore ";
	$SQLString .= "FROM " . TABLE_ZAHLUNGEN;
	$SQLString .= " WHERE " . TABLE_ZAHLUNGEN . ".id = " . $zahlungsId;
	
//	echo $SQLString;
	$result = errorlogged_mysql_query($SQLString);
	return mysql_fetch_assoc($result);
}

function GetBestellungenFuerZahlung($zahlung, $ohneStatusFilter = false, $seitDatum = "")
{
	global $server, $user, $passwort, $datenbankname;	
	
	$zahlungenArray = GetZahlungenArray();
	if($ohneStatusFilter)
	{
		$bestellArray = GetBestellDataArray("", "", "", "", "", "", "", 1, 0, 0, 0, $seitDatum);
	}
	else
	{
		$csvZahlungsarten = GetZahlungsImportZahlungsarten();
		$bestellArray = array();
		foreach($csvZahlungsarten as $csvZahlungsart)
		{
			$bestellArray = array_merge($bestellArray, GetBestellDataArray("zahlungsart_id", $csvZahlungsart['id'], "", "", "", "", $csvZahlungsart['match_status']));
		}
	}	
//	$bestellArray = GetBestellDataArray("", "", "auftragsdatum", "desc", 0, 1000);
//	CalcMatchScoreZahlung($tpl_zahlungen[0], $bestellArray[0]);

	// Vergleich vorbereiten
	$nummern_int = array();
	preg_match_all('/\d+/', $zahlung['verwendungszweck'], $nummern);
	foreach($nummern[0] as $nummer)
		$nummern_int[] = intval($nummer);
			
		// suche nach Namen im Verwendungszweck erstmal auskommentiert wegen performance (2s ohne vs. 5s mit pr�fung des verwendungszwecks)
		preg_match_all('/\w+/', strtolower($zahlung['verwendungszweck']), $verwendungszweck_words);

	$zahlung_prepared = 
		array(	'id' => $zahlung['id'],
				'absender_words' => 
					array_merge(
					explode(' ', str_replace(array(',', '/'), ' ', strtolower($zahlung['absender_name'])))
						, $verwendungszweck_words[0])
				,
				'betrag' => floatval($zahlung['betrag']),
				'verwendungszweck_nummern' => $nummern_int
		);

	$bestellungen_prepared = array();
	foreach($bestellArray as $bestellung)
	{
		$bestellungen_prepared[] = 
			array( 	'id' => $bestellung['id'],
					'nachname' => explode(' ', str_replace(array('�', '�', '�', '�'), array('a', 'o', 'u', 'sz'), strtolower($bestellung['nachname']))),
					'vorname' => str_replace(array('�', '�', '�', '�'), array('a', 'o', 'u', 'sz'), strtolower($bestellung['vorname'])),
					'firma' => str_replace(array('�', '�', '�', '�'), array('a', 'o', 'u', 'sz'), strtolower($bestellung['firma'])),
					'gesamtsumme_brutto' => floatval($bestellung['gesamtsumme_brutto']),
					'kundennr' => intval($bestellung['kunden_id']),
					'auftragsnr' => intval($bestellung['auftragsnummer']),
					'rechnungsnr' => intval($bestellung['rechnungsnummer'])
			);
	}

	foreach($bestellungen_prepared as $index=>$bestellung)
	{
		$bestellArray[$index]['matchscore'] = floor(CalcMatchScoreZahlung($zahlung_prepared, $bestellung) * 100);
	}
	
	function Compare($bestellung1, $bestellung2)
	{
		if($bestellung1['matchscore'] < $bestellung2['matchscore'])
			return 1;
		else if($bestellung1['matchscore'] > $bestellung2['matchscore'])
			return -1;
		else 
			return 0;
	}
	
	usort($bestellArray, 'Compare');
	return array_slice($bestellArray, 0, 50);
}

function SetZahlungBestellung($zahlungId, $bestellId, $matchScore)
{
	$SQLString = "UPDATE " . TABLE_ZAHLUNGEN . " SET ";
	$SQLString .= TABLE_ZAHLUNGEN . ".bestell_id = " . $bestellId . ", ";
	$SQLString .= TABLE_ZAHLUNGEN . ".matchscore = " . $matchScore. " ";
	$SQLString .= "WHERE " . TABLE_ZAHLUNGEN . ".id = " . $zahlungId;
	
	errorlogged_mysql_query($SQLString);
}

function SetZahlungenVerarbeitet($zahlungIdsArray, $zuordnung_loeschen = false)
{
	$SQLString = "UPDATE " . TABLE_ZAHLUNGEN . " SET ";
	$SQLString .= TABLE_ZAHLUNGEN . ".verarbeitet = 1 ";
	if($zuordnung_loeschen)
	{
		$SQLString .= ", " . TABLE_ZAHLUNGEN . ".bestell_id = NULL ";
		$SQLString .= ", " . TABLE_ZAHLUNGEN . ".matchscore = NULL ";
	}
	$SQLString .= "WHERE " . TABLE_ZAHLUNGEN . ".id IN (" . implode(', ', $zahlungIdsArray) . ")";
//	echo $SQLString;
	errorlogged_mysql_query($SQLString);
}

function SetZahlungenBestellungBezahlt($zahlungsIdsArray)
{
	$importZahlungsarten = GetZahlungsImportZahlungsarten();
	foreach($zahlungsIdsArray as $zahlung_id)
	{
		$SQLString = "SELECT " . TABLE_ZAHLUNGEN . ".bestell_id";
		$SQLString .= ", " . TABLE_BESTELLEN . ".status";
		$SQLString .= ", " . TABLE_BESTELLEN . ".zahlungsart_id";
		$SQLString .= " FROM " . TABLE_ZAHLUNGEN;
		$SQLString .= " INNER JOIN " . TABLE_BESTELLEN . " ON " . TABLE_ZAHLUNGEN . ".bestell_id = " . TABLE_BESTELLEN . ".id";
		$SQLString .= " WHERE " . TABLE_ZAHLUNGEN . ".id = " . $zahlung_id;
		
		$bestelldaten = mysql_fetch_assoc(errorlogged_mysql_query($SQLString));
		
		if($bestelldaten)
		{
			BestellStatusWechseln($bestelldaten['bestell_id'], $importZahlungsarten[$bestelldaten['zahlungsart_id']]['bezahlt_status']);
			
			$verarbeitete_zahlungen[] = $zahlung_id;
			
			// wenn andere zahlungen dieser bestellung zugeordnet wurden diese zuordnungen jetzt löschen
			$SQLString = "UPDATE " . TABLE_ZAHLUNGEN;
			$SQLString .= " SET " . TABLE_ZAHLUNGEN . ".bestell_id = NULL, ";
			$SQLString .= TABLE_ZAHLUNGEN . ".matchscore = NULL";
			$SQLString .= " WHERE " . TABLE_ZAHLUNGEN . ".bestell_id = " . $bestelldaten['bestell_id'];
			$SQLString .= " AND " . TABLE_ZAHLUNGEN . ".id <> " . $zahlung_id;
			errorlogged_mysql_query($SQLString);
		}
	}
	
	SetZahlungenVerarbeitet($verarbeitete_zahlungen);
}

function GetZahlungsImportZahlungsarten()
{
	$SQLString = "SELECT ";
	$SQLString .= TABLE_ZAHLUNGSIMPORT_ZAHLUNGSARTEN . ".zahlungsart_id as id, ";
	$SQLString .= TABLE_ZAHLUNGSART_LANGU . ".name, ";
	$SQLString .= TABLE_ZAHLUNGSIMPORT_ZAHLUNGSARTEN . ".match_status, ";
	$SQLString .= TABLE_ZAHLUNGSIMPORT_ZAHLUNGSARTEN . ".bezahlt_status";
	$SQLString .= " FROM " . TABLE_ZAHLUNGSIMPORT_ZAHLUNGSARTEN;
	$SQLString .= " LEFT JOIN " . TABLE_ZAHLUNGSART_LANGU . " ON " . TABLE_ZAHLUNGSIMPORT_ZAHLUNGSARTEN . ".zahlungsart_id = " . TABLE_ZAHLUNGSART_LANGU . ".zahlungsart_id";
	$SQLString .= " WHERE " . TABLE_ZAHLUNGSART_LANGU . ".language_id = " . GetDefaultLanguageID();
	
	//echo $SQLString;
	
	$queryResult = errorlogged_mysql_query($SQLString);

	$returnArray = array();
	while($row = mysql_fetch_assoc($queryResult))
		$returnArray[$row['id']] = $row;
	 
	return $returnArray;
}

function AddZahlungsImportZahlungsart($zahlungsart_id)
{
	$SQLString = "INSERT INTO ";
	$SQLString .= TABLE_ZAHLUNGSIMPORT_ZAHLUNGSARTEN . " SET ";
	$SQLString .= TABLE_ZAHLUNGSIMPORT_ZAHLUNGSARTEN . ".zahlungsart_id = " . $zahlungsart_id . " ";
	
	$queryResult = errorlogged_mysql_query($SQLString);
}

function RemoveZahlungsImportZahlungsart($zahlungsart_id)
{
	$SQLString = "DELETE FROM ";
	$SQLString .= TABLE_ZAHLUNGSIMPORT_ZAHLUNGSARTEN;
	$SQLString .= " WHERE " . TABLE_ZAHLUNGSIMPORT_ZAHLUNGSARTEN . ".zahlungsart_id = " . $zahlungsart_id . " ";
	
	$queryResult = errorlogged_mysql_query($SQLString);
}

function UpdateZahlungsImportZahlungsart($zahlungsart_id, $match_status, $bezahlt_status)
{
	$SQLString = "UPDATE " . TABLE_ZAHLUNGSIMPORT_ZAHLUNGSARTEN;
	$SQLString .= " SET " .  TABLE_ZAHLUNGSIMPORT_ZAHLUNGSARTEN . ".match_status = " . $match_status . ", ";
	$SQLString .= TABLE_ZAHLUNGSIMPORT_ZAHLUNGSARTEN . ".bezahlt_status = " . $bezahlt_status . " ";
	$SQLString .= "WHERE " . TABLE_ZAHLUNGSIMPORT_ZAHLUNGSARTEN . ".zahlungsart_id = " . $zahlungsart_id . " ";
	
	errorlogged_mysql_query($SQLString);
}
