<?php

	/**
	 * Model für einen Kunden
	 */
	class wpsg_customer extends wpsg_model
	{
		
		/**
		 * Lädt die Kundendaten aus der Datenbank
		 */
		public function load($customer_id)
		{
			
			parent::load($customer_id);
			
			$this->data = $this->db->fetchRow("SELECT K.* FROM `".WPSG_TBL_KU."` AS K WHERE K.`id` = '".wpsg_q($customer_id)."' ");
			
			return true;
			
		} // public function load($id)
		
		/**
		 * Gibt das Geschlecht des Kunden zurück
		 * m = male (männlich)
		 * f = female (weiblich)
		 */
		public function getGender()
		{
			
			if (preg_match('/Frau/i', $this->title))
			{
				
				return 'f';
				
			}
			else
			{
				
				return 'm';
				
			}
			
		} // public function getGender()
		
		/**
		 * Gibt den Vornamen des Kunden zurück
		 * @return String Vorname des Kunden
		 */
		public function getFirstname()
		{
			
			return $this->vname;
			
		} // public function getFirstname()
		
		/**
		 * Gibt den Namen des Kunden zurück
		 * @return String Name des Kunden
		 */
		public function getName()
		{
			
			return $this->name;
			
		} // public function getName()
		
		/**
		 * Versucht die Hausnummer von der Straße abzutrennen und nur die Straße zurückzugeben
		 * @return String der Reine Straßenname der Rechnungsadresse
		 */
		public function getStreetClear()
		{
			
			return preg_replace('/\040+\d+$/', '', $this->strasse);
			
		} // public function getStreetClear() 	
		
		/**
		 * Gibt die Straße des Kunden zurück
		 * @return String Straße des Kunden
		 */
		public function getStreet()
		{
			
			return $this->strasse;
			
		} // public function getStreet()
		
		/**
		 * Gibt die Hausnummer des Kunden zurück
		 * @return String Hausnummer des Kunden
		 */
		public function getStreetNr()
		{
			
			return preg_replace('/(.*)\040/', '', $this->strasse);
			
		} // public function getStreetNr()
		
		/**
		 * Gibt die Postleitzahl des Kunden zurück
		 * @return String Postleitzahl des Kunden
		 */
		public function getZip()
		{
			
			return $this->plz;
			
		} // public function getZip()
		
		/**
		 * Gibt den Order des Kunden zurück
		 * @return String Wohnort des Kunden
		 */
		public function getCity()
		{
			
			return $this->ort;
			
		} // public function getCity()
		
		/**
		 * Gibt das Geburtsdatum zurück
		 * @param Mixed $format false = Standard, timestamp = Timestamp
		 */
		public function getBirthdate($format = false)
		{
			
			if ($format !== false)
			{
				
				if ($format === "timestamp") return strtotime($this->geb);
				else return wpsg_date($format, strtotime($this->geb));	
				
			}
			else 
			{
			
				return wpsg_formatTimestamp(strtotime($this->geb), true);
				
			}
			
		} // public function getBirthdate()

		/**
		 * Gibt die Telefonnummer zurück
		 */
		public function getPhone()
		{
			
			return $this->tel;
			
		} // public function getPhone()
		
		/**
		 * Gibt die Fax Nummer zurück
		 */
		public function getFax()
		{
			
			return $this->fax;
			
		} // public function getFax()
		
		/**
		 * Gibt die EMail des Kunden zurück 
		 */
		public function getEMail()
		{
			
			return $this->email;
			
		} // public function getEMail()
		
		/**
		 * Gibt den Umsatz eines Kunden mit Bestellungen $order_status oder über alle Bestellungen zurück
		 * @param unknown $order_status
		 */
		public function getOrderAmount($order_status = false)
		{
			
			$arOrderFilter = array(
				'k_id' => $this->id					
			);
			
			if (wpsg_isSizedInt($order_status) || wpsg_isSizedArray($order_status))
			{
				
				$arOrderFilter['status'] = $order_status;
				
			}
			
			$arOrder = wpsg_order::find($arOrderFilter);
			$amount = 0;
			
			foreach ($arOrder as $oOrder)
			{
				
				$amount += $oOrder->getAmount();
				
			} // foreach ($arOrder as $oOrder)
			
			return $amount;
			
		} // public function getOrderAmount($order_status = false)
		
		/**
		 * Gibt die ID des Landes zurück
		 * @return \Integer ID des Landes
		 */
		public function getCountryID()
		{
			
			return $this->land;
			
		} // public function getCountryID()
		
		/**
		 * Gibt das Kürzel des Landes zurück
		 * In der Regel sollte es dem ISO Code entsprechen
		 */
		public function getCountryKuerzel()
		{
			
			return $this->db->fetchOne("SELECT `kuerzel` FROM `".WPSG_TBL_LAND."` WHERE `id` = '".wpsg_q($this->getCountryID())."' ");
			
		} // public function getCountryKuerzel()
		
		/**
		 * Gibt den Namen des Landes zurück
		 */
		public function getCountryName()
		{
			
			return $this->db->fetchOne("SELECT `name` FROM `".WPSG_TBL_LAND."` WHERE `id` = '".wpsg_q($this->getCountryID())."' ");
			
		} // public function getCountryName()
 
		public static function find($arFilter = array())
		{
			
			list($strQueryWHERE, $strQueryHAVING, $strQueryORDER) = self::getQueryParts($arFilter);
			
			$strQuery = "
				SELECT
					K.`id`
				FROM
					`".WPSG_TBL_KU."` AS K
				WHERE
					1
					".$strQueryWHERE."
				HAVING
					1
					".$strQueryHAVING."
				ORDER BY
					".$strQueryORDER."		
			";	
			 
			$arCustomerID = $GLOBALS['wpsg_db']->fetchAssocField($strQuery);
			$arReturn = array();
			
			foreach ($arCustomerID as $customer_id)
			{
				 
				$arReturn[$customer_id] = self::getInstance($customer_id);
				
			}
			
			return $arReturn;
			
		} // public function find($arQuery = array())
		
		public static function getQueryParts($arFilter = array())
		{
				
			$strQueryWHERE = "";
			$strQueryHAVING = "";
			$strQueryORDER = " K.`id` ASC ";
			 
			if (wpsg_isSizedString($arFilter['email']))
			{
				
				$strQueryWHERE .= " AND K.`email` = '".wpsg_q($arFilter['email'])."' ";
				
			}
				
			return array($strQueryWHERE, $strQueryHAVING, $strQueryORDER);
				
		} // public function getQueryParts($arFilter = array())
		
	} // class wpsg_order extends wpsg_model
	
?>