<?php

namespace Types;

class MitgliedBuchung {
  
  

  
  

    // --- Statische Methoden ---
  
  public static function validate($x) { 
    
    
    // --- BLOCK: main ---
    
		if (\FOP\Database::query('SELECT 1 FROM '.qi('mitgliedBuchung').' WHERE (((CASE WHEN '.\FOP\Database::quote(\FOP\User::getBuchhaltung()).' THEN TRUE ELSE NOT (('.qi('mitgliedBuchung').'.'.qi('mitglied').') <> ('.\FOP\Database::sessionVarSQL('user').')) END) AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getGruppe()).' THEN TRUE ELSE NOT (('.qi('yUWnI5KL').'.'.qi('ID').') <> ('.\FOP\Database::sessionVarSQL('user').')) END) FROM '.qi('mitglied').' '.qi('yUWnI5KL').' WHERE '.qi('yUWnI5KL').'.'.qi('ID').' = '.qi('mitgliedBuchung').'.'.qi('mitglied').' LIMIT 1), FALSE)) AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getMitglied()).' THEN TRUE ELSE NOT ((('.qi('Ws9vyVdf').'.'.qi('ID').') <> ('.\FOP\Database::sessionVarSQL('user').')) AND (NOT (EXISTS (SELECT (TRUE) FROM '.qi('gruppeItem').' '.qi('7sncgH3z').' WHERE '.qi('7sncgH3z').'.'.qi('item').' = '.qi('Ws9vyVdf').'.'.qi('ID').' AND (EXISTS (SELECT (TRUE) FROM '.qi('gruppeVerantwortlich').' '.qi('eHueOsQC').' WHERE '.qi('eHueOsQC').'.'.qi('gruppe').' = '.qi('7sncgH3z').'.'.qi('list').' AND (('.qi('eHueOsQC').'.'.qi('mitglied').') = ('.\FOP\Database::sessionVarSQL('user').')) LIMIT 1)) LIMIT 1)))) END) FROM '.qi('mitglied').' '.qi('Ws9vyVdf').' WHERE '.qi('Ws9vyVdf').'.'.qi('ID').' = '.qi('mitgliedBuchung').'.'.qi('mitglied').' LIMIT 1), FALSE)) AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getSuperadmin()).' THEN TRUE ELSE NOT ('.qi('rU4UdBzA').'.'.qi('superadmin').') END) FROM '.qi('mitglied').' '.qi('rU4UdBzA').' WHERE '.qi('rU4UdBzA').'.'.qi('ID').' = '.qi('mitgliedBuchung').'.'.qi('mitglied').' LIMIT 1), FALSE)))) AND '.qi('ID').' = ' . intval($x))->fetchColumn() != 1) {
			throw new \FOP\AccessDeniedException(_('invalidinput'));
		}
	
    
  }

  public static function parse($x) { 
    
    
    // --- BLOCK: main ---
    
		
		$result = \FOP\Database::query('SELECT '.qi('ID').' FROM '.qi('mitgliedBuchung').' WHERE (CONCAT('.(\FOP\Database::getDriver() == 'mysql' ? 'DATE_FORMAT(FROM_UNIXTIME' : 'to_char(to_timestamp') . '('.qi('mitgliedBuchung').'.'.qi('date').')'.(\FOP\Database::getDriver() == 'mysql' ? '' : '::date') . ', '.\FOP\Database::sessionVarSQL('dateformat').'), \' - \', CONCAT(CONVERT('.qi('mitgliedBuchung').'.'.qi('betrag').', DECIMAL(13, 2)), \' €\'))) = ' . \FOP\Database::quote($x))->fetchColumn();
		if ($result) return $result;
		$result = \FOP\Database::query('SELECT '.qi('ID').' FROM '.qi('mitgliedBuchung').' WHERE '.qi('ID').' = ' . \FOP\Database::quote($x))->fetchColumn();
		if ($result) return $result;
		return null;
	
    
  }

  public static function getItems($deps, $value = null , $search = '' , $conditionSQL = '' ) { 
    
    
    // --- BLOCK: main ---
    
		
		$limit = 200;
		$sqlbase = 'SELECT '.qi('ID').' AS '.qi('ID').', CONCAT('.(\FOP\Database::getDriver() == 'mysql' ? 'DATE_FORMAT(FROM_UNIXTIME' : 'to_char(to_timestamp') . '('.qi('mitgliedBuchung').'.'.qi('date').')'.(\FOP\Database::getDriver() == 'mysql' ? '' : '::date') . ', '.\FOP\Database::sessionVarSQL('dateformat').'), \' - \', CONCAT(CONVERT('.qi('mitgliedBuchung').'.'.qi('betrag').', DECIMAL(13, 2)), \' €\')) AS description, 0 AS priority FROM '.qi('mitgliedBuchung').' WHERE ' . ($conditionSQL ?: '((CASE WHEN '.\FOP\Database::quote(\FOP\User::getBuchhaltung()).' THEN TRUE ELSE NOT (('.qi('mitgliedBuchung').'.'.qi('mitglied').') <> ('.\FOP\Database::sessionVarSQL('user').')) END) AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getGruppe()).' THEN TRUE ELSE NOT (('.qi('yUWnI5KL').'.'.qi('ID').') <> ('.\FOP\Database::sessionVarSQL('user').')) END) FROM '.qi('mitglied').' '.qi('yUWnI5KL').' WHERE '.qi('yUWnI5KL').'.'.qi('ID').' = '.qi('mitgliedBuchung').'.'.qi('mitglied').' LIMIT 1), FALSE)) AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getMitglied()).' THEN TRUE ELSE NOT ((('.qi('Ws9vyVdf').'.'.qi('ID').') <> ('.\FOP\Database::sessionVarSQL('user').')) AND (NOT (EXISTS (SELECT (TRUE) FROM '.qi('gruppeItem').' '.qi('7sncgH3z').' WHERE '.qi('7sncgH3z').'.'.qi('item').' = '.qi('Ws9vyVdf').'.'.qi('ID').' AND (EXISTS (SELECT (TRUE) FROM '.qi('gruppeVerantwortlich').' '.qi('eHueOsQC').' WHERE '.qi('eHueOsQC').'.'.qi('gruppe').' = '.qi('7sncgH3z').'.'.qi('list').' AND (('.qi('eHueOsQC').'.'.qi('mitglied').') = ('.\FOP\Database::sessionVarSQL('user').')) LIMIT 1)) LIMIT 1)))) END) FROM '.qi('mitglied').' '.qi('Ws9vyVdf').' WHERE '.qi('Ws9vyVdf').'.'.qi('ID').' = '.qi('mitgliedBuchung').'.'.qi('mitglied').' LIMIT 1), FALSE)) AND (COALESCE((SELECT (CASE WHEN '.\FOP\Database::quote(\FOP\User::getSuperadmin()).' THEN TRUE ELSE NOT ('.qi('rU4UdBzA').'.'.qi('superadmin').') END) FROM '.qi('mitglied').' '.qi('rU4UdBzA').' WHERE '.qi('rU4UdBzA').'.'.qi('ID').' = '.qi('mitgliedBuchung').'.'.qi('mitglied').' LIMIT 1), FALSE)))');
		$sqladdon = '';
		if (!is_null($deps)) {
			// bei Filtern werden die Conditions außen vor gelassen (TODO: abhängig davon machen, ob eine ver-AND-ete Condition ein deps:: enthält)
			$sqlbase .= ' AND (true)';
			$sqladdon .= ' AND (true)';
		}
		$sqladdon .= ' ORDER BY '.qi('mitgliedBuchung').'.'.qi('date').' DESC';
		$result = \FOP\Database::query($sqlbase . $sqladdon . ' LIMIT ' . intval($limit))->fetchAll(\PDO::FETCH_ASSOC);
		
		$values = [];
		foreach ($result AS $item) {
			$values[$item['ID']] = true; // build up a lookup list
		}
		if (count($result) == $limit) {
			// render '...' when limit is reached
			array_push($result, ['ID' => '_more', 'description' => '...', 'description1' => '...', 'description2' => '...', 'priority' => -1]);
		}
		if ($search) {
			// add searched items
			$addons = \FOP\Database::query($sqlbase . ' AND (CONCAT('.(\FOP\Database::getDriver() == 'mysql' ? 'DATE_FORMAT(FROM_UNIXTIME' : 'to_char(to_timestamp') . '('.qi('mitgliedBuchung').'.'.qi('date').')'.(\FOP\Database::getDriver() == 'mysql' ? '' : '::date') . ', '.\FOP\Database::sessionVarSQL('dateformat').'), \' - \', CONCAT(CONVERT('.qi('mitgliedBuchung').'.'.qi('betrag').', DECIMAL(13, 2)), \' €\')) '.(\FOP\Database::getDriver() == 'pgsql' ? 'ILIKE' : 'LIKE').' '.\FOP\Database::quote('%'.$search.'%').')' . $sqladdon . ' LIMIT ' . intval($limit))->fetchAll(\PDO::FETCH_ASSOC);
			foreach ($addons AS $item) {
				if (!isset($values[$item['ID']])) {
					array_push($result, $item);
				}
			}
		}
		if ($value != -1 && !isset($values[$value])) {
			// $value was not in list: prepend
			$ownValue = \FOP\Database::query($sqlbase . ' AND '.qi('ID').' = ' . \FOP\Database::quote($value ?: 0))->fetch(\PDO::FETCH_ASSOC);
			
			if (!$ownValue) {
				// eigener Wert ist verboten, wird aber zur Speicherung mit hinzugefügt
				$ownValue = [
					'ID' => $value,
					'description' => (_('pSelect')),
					'description1' => (_('pSelect')),
					'description2' => (_('pSelect')),'priority' => -1,
					'forbidden' => true
				];
			}
			
			if ($ownValue) {
				array_unshift($result, $ownValue);
			}
		}
		return $result;
	
    
  }


  
  

  
  
}



