<?php

/**
 * Base static class for performing query and update operations on the 'katao_supplier_invoice' table.
 *
 * 
 *
 * @package    lib.model.om
 */
abstract class BaseKataoSupplierInvoicePeer {

	/** the default database name for this class */
	const DATABASE_NAME = 'propel';

	/** the table name for this class */
	const TABLE_NAME = 'katao_supplier_invoice';

	/** A class that can be returned by this peer. */
	const CLASS_DEFAULT = 'lib.model.KataoSupplierInvoice';

	/** The total number of columns. */
	const NUM_COLUMNS = 43;

	/** The number of lazy-loaded columns. */
	const NUM_LAZY_LOAD_COLUMNS = 0;


	/** the column name for the ID field */
	const ID = 'katao_supplier_invoice.ID';

	/** the column name for the KATAO_SUPPLIER_ID field */
	const KATAO_SUPPLIER_ID = 'katao_supplier_invoice.KATAO_SUPPLIER_ID';

	/** the column name for the KATAO_PERIOD_ID field */
	const KATAO_PERIOD_ID = 'katao_supplier_invoice.KATAO_PERIOD_ID';

	/** the column name for the STATUS field */
	const STATUS = 'katao_supplier_invoice.STATUS';

	/** the column name for the SUPPLIER_NAME field */
	const SUPPLIER_NAME = 'katao_supplier_invoice.SUPPLIER_NAME';

	/** the column name for the SUPPLIER_EMAIL field */
	const SUPPLIER_EMAIL = 'katao_supplier_invoice.SUPPLIER_EMAIL';

	/** the column name for the SUPPLIER_ADDRESS1 field */
	const SUPPLIER_ADDRESS1 = 'katao_supplier_invoice.SUPPLIER_ADDRESS1';

	/** the column name for the SUPPLIER_ADDRESS2 field */
	const SUPPLIER_ADDRESS2 = 'katao_supplier_invoice.SUPPLIER_ADDRESS2';

	/** the column name for the SUPPLIER_ZIP field */
	const SUPPLIER_ZIP = 'katao_supplier_invoice.SUPPLIER_ZIP';

	/** the column name for the SUPPLIER_CITY field */
	const SUPPLIER_CITY = 'katao_supplier_invoice.SUPPLIER_CITY';

	/** the column name for the KATAO_NAME field */
	const KATAO_NAME = 'katao_supplier_invoice.KATAO_NAME';

	/** the column name for the KATAO_ADDRESS field */
	const KATAO_ADDRESS = 'katao_supplier_invoice.KATAO_ADDRESS';

	/** the column name for the KATAO_SIRET_NUMBER field */
	const KATAO_SIRET_NUMBER = 'katao_supplier_invoice.KATAO_SIRET_NUMBER';

	/** the column name for the KATAO_RCS_NUMBER field */
	const KATAO_RCS_NUMBER = 'katao_supplier_invoice.KATAO_RCS_NUMBER';

	/** the column name for the KATAO_CAPITAL field */
	const KATAO_CAPITAL = 'katao_supplier_invoice.KATAO_CAPITAL';

	/** the column name for the REFERENCE field */
	const REFERENCE = 'katao_supplier_invoice.REFERENCE';

	/** the column name for the INVOICE_DATE field */
	const INVOICE_DATE = 'katao_supplier_invoice.INVOICE_DATE';

	/** the column name for the DUE_DATE field */
	const DUE_DATE = 'katao_supplier_invoice.DUE_DATE';

	/** the column name for the PAYMENT_DATE field */
	const PAYMENT_DATE = 'katao_supplier_invoice.PAYMENT_DATE';

	/** the column name for the PAYMENT_MODE field */
	const PAYMENT_MODE = 'katao_supplier_invoice.PAYMENT_MODE';

	/** the column name for the PAYMENT_DETAILS field */
	const PAYMENT_DETAILS = 'katao_supplier_invoice.PAYMENT_DETAILS';

	/** the column name for the PAYMENT_AMOUNT_EURO field */
	const PAYMENT_AMOUNT_EURO = 'katao_supplier_invoice.PAYMENT_AMOUNT_EURO';

	/** the column name for the PAYMENT_AMOUNT_SOL field */
	const PAYMENT_AMOUNT_SOL = 'katao_supplier_invoice.PAYMENT_AMOUNT_SOL';

	/** the column name for the TAUX0_BASES_HT field */
	const TAUX0_BASES_HT = 'katao_supplier_invoice.TAUX0_BASES_HT';

	/** the column name for the TAUX0_DISCOUNT_HT field */
	const TAUX0_DISCOUNT_HT = 'katao_supplier_invoice.TAUX0_DISCOUNT_HT';

	/** the column name for the TAUX0_AMOUNT field */
	const TAUX0_AMOUNT = 'katao_supplier_invoice.TAUX0_AMOUNT';

	/** the column name for the TAUX1_BASES_HT field */
	const TAUX1_BASES_HT = 'katao_supplier_invoice.TAUX1_BASES_HT';

	/** the column name for the TAUX1_DISCOUNT_HT field */
	const TAUX1_DISCOUNT_HT = 'katao_supplier_invoice.TAUX1_DISCOUNT_HT';

	/** the column name for the TAUX1_AMOUNT field */
	const TAUX1_AMOUNT = 'katao_supplier_invoice.TAUX1_AMOUNT';

	/** the column name for the TAUX2_BASES_HT field */
	const TAUX2_BASES_HT = 'katao_supplier_invoice.TAUX2_BASES_HT';

	/** the column name for the TAUX2_DISCOUNT_HT field */
	const TAUX2_DISCOUNT_HT = 'katao_supplier_invoice.TAUX2_DISCOUNT_HT';

	/** the column name for the TAUX2_AMOUNT field */
	const TAUX2_AMOUNT = 'katao_supplier_invoice.TAUX2_AMOUNT';

	/** the column name for the TOTAL_HT field */
	const TOTAL_HT = 'katao_supplier_invoice.TOTAL_HT';

	/** the column name for the TOTAL_TVA field */
	const TOTAL_TVA = 'katao_supplier_invoice.TOTAL_TVA';

	/** the column name for the COMMENT field */
	const COMMENT = 'katao_supplier_invoice.COMMENT';

	/** the column name for the FEES_SHIPPING_HT field */
	const FEES_SHIPPING_HT = 'katao_supplier_invoice.FEES_SHIPPING_HT';

	/** the column name for the FEES_SHIPPING_RATE field */
	const FEES_SHIPPING_RATE = 'katao_supplier_invoice.FEES_SHIPPING_RATE';

	/** the column name for the FEES_SHIPPING_TVA field */
	const FEES_SHIPPING_TVA = 'katao_supplier_invoice.FEES_SHIPPING_TVA';

	/** the column name for the FEES_BILLING_HT field */
	const FEES_BILLING_HT = 'katao_supplier_invoice.FEES_BILLING_HT';

	/** the column name for the FEES_BILLING_RATE field */
	const FEES_BILLING_RATE = 'katao_supplier_invoice.FEES_BILLING_RATE';

	/** the column name for the FEES_BILLING_TVA field */
	const FEES_BILLING_TVA = 'katao_supplier_invoice.FEES_BILLING_TVA';

	/** the column name for the CREATED_AT field */
	const CREATED_AT = 'katao_supplier_invoice.CREATED_AT';

	/** the column name for the UPDATED_AT field */
	const UPDATED_AT = 'katao_supplier_invoice.UPDATED_AT';

	/** The PHP to DB Name Mapping */
	private static $phpNameMap = null;


	/**
	 * holds an array of fieldnames
	 *
	 * first dimension keys are the type constants
	 * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
	 */
	private static $fieldNames = array (
		BasePeer::TYPE_PHPNAME => array ('Id', 'KataoSupplierId', 'KataoPeriodId', 'Status', 'SupplierName', 'SupplierEmail', 'SupplierAddress1', 'SupplierAddress2', 'SupplierZip', 'SupplierCity', 'KataoName', 'KataoAddress', 'KataoSiretNumber', 'KataoRcsNumber', 'KataoCapital', 'Reference', 'InvoiceDate', 'DueDate', 'PaymentDate', 'PaymentMode', 'PaymentDetails', 'PaymentAmountEuro', 'PaymentAmountSol', 'Taux0BasesHt', 'Taux0DiscountHt', 'Taux0Amount', 'Taux1BasesHt', 'Taux1DiscountHt', 'Taux1Amount', 'Taux2BasesHt', 'Taux2DiscountHt', 'Taux2Amount', 'TotalHt', 'TotalTva', 'Comment', 'FeesShippingHt', 'FeesShippingRate', 'FeesShippingTva', 'FeesBillingHt', 'FeesBillingRate', 'FeesBillingTva', 'CreatedAt', 'UpdatedAt', ),
		BasePeer::TYPE_COLNAME => array (KataoSupplierInvoicePeer::ID, KataoSupplierInvoicePeer::KATAO_SUPPLIER_ID, KataoSupplierInvoicePeer::KATAO_PERIOD_ID, KataoSupplierInvoicePeer::STATUS, KataoSupplierInvoicePeer::SUPPLIER_NAME, KataoSupplierInvoicePeer::SUPPLIER_EMAIL, KataoSupplierInvoicePeer::SUPPLIER_ADDRESS1, KataoSupplierInvoicePeer::SUPPLIER_ADDRESS2, KataoSupplierInvoicePeer::SUPPLIER_ZIP, KataoSupplierInvoicePeer::SUPPLIER_CITY, KataoSupplierInvoicePeer::KATAO_NAME, KataoSupplierInvoicePeer::KATAO_ADDRESS, KataoSupplierInvoicePeer::KATAO_SIRET_NUMBER, KataoSupplierInvoicePeer::KATAO_RCS_NUMBER, KataoSupplierInvoicePeer::KATAO_CAPITAL, KataoSupplierInvoicePeer::REFERENCE, KataoSupplierInvoicePeer::INVOICE_DATE, KataoSupplierInvoicePeer::DUE_DATE, KataoSupplierInvoicePeer::PAYMENT_DATE, KataoSupplierInvoicePeer::PAYMENT_MODE, KataoSupplierInvoicePeer::PAYMENT_DETAILS, KataoSupplierInvoicePeer::PAYMENT_AMOUNT_EURO, KataoSupplierInvoicePeer::PAYMENT_AMOUNT_SOL, KataoSupplierInvoicePeer::TAUX0_BASES_HT, KataoSupplierInvoicePeer::TAUX0_DISCOUNT_HT, KataoSupplierInvoicePeer::TAUX0_AMOUNT, KataoSupplierInvoicePeer::TAUX1_BASES_HT, KataoSupplierInvoicePeer::TAUX1_DISCOUNT_HT, KataoSupplierInvoicePeer::TAUX1_AMOUNT, KataoSupplierInvoicePeer::TAUX2_BASES_HT, KataoSupplierInvoicePeer::TAUX2_DISCOUNT_HT, KataoSupplierInvoicePeer::TAUX2_AMOUNT, KataoSupplierInvoicePeer::TOTAL_HT, KataoSupplierInvoicePeer::TOTAL_TVA, KataoSupplierInvoicePeer::COMMENT, KataoSupplierInvoicePeer::FEES_SHIPPING_HT, KataoSupplierInvoicePeer::FEES_SHIPPING_RATE, KataoSupplierInvoicePeer::FEES_SHIPPING_TVA, KataoSupplierInvoicePeer::FEES_BILLING_HT, KataoSupplierInvoicePeer::FEES_BILLING_RATE, KataoSupplierInvoicePeer::FEES_BILLING_TVA, KataoSupplierInvoicePeer::CREATED_AT, KataoSupplierInvoicePeer::UPDATED_AT, ),
		BasePeer::TYPE_FIELDNAME => array ('id', 'katao_supplier_id', 'katao_period_id', 'status', 'supplier_name', 'supplier_email', 'supplier_address1', 'supplier_address2', 'supplier_zip', 'supplier_city', 'katao_name', 'katao_address', 'katao_siret_number', 'katao_rcs_number', 'katao_capital', 'reference', 'invoice_date', 'due_date', 'payment_date', 'payment_mode', 'payment_details', 'payment_amount_euro', 'payment_amount_sol', 'taux0_bases_ht', 'taux0_discount_ht', 'taux0_amount', 'taux1_bases_ht', 'taux1_discount_ht', 'taux1_amount', 'taux2_bases_ht', 'taux2_discount_ht', 'taux2_amount', 'total_ht', 'total_tva', 'comment', 'fees_shipping_ht', 'fees_shipping_rate', 'fees_shipping_tva', 'fees_billing_ht', 'fees_billing_rate', 'fees_billing_tva', 'created_at', 'updated_at', ),
		BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, )
	);

	/**
	 * holds an array of keys for quick access to the fieldnames array
	 *
	 * first dimension keys are the type constants
	 * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0
	 */
	private static $fieldKeys = array (
		BasePeer::TYPE_PHPNAME => array ('Id' => 0, 'KataoSupplierId' => 1, 'KataoPeriodId' => 2, 'Status' => 3, 'SupplierName' => 4, 'SupplierEmail' => 5, 'SupplierAddress1' => 6, 'SupplierAddress2' => 7, 'SupplierZip' => 8, 'SupplierCity' => 9, 'KataoName' => 10, 'KataoAddress' => 11, 'KataoSiretNumber' => 12, 'KataoRcsNumber' => 13, 'KataoCapital' => 14, 'Reference' => 15, 'InvoiceDate' => 16, 'DueDate' => 17, 'PaymentDate' => 18, 'PaymentMode' => 19, 'PaymentDetails' => 20, 'PaymentAmountEuro' => 21, 'PaymentAmountSol' => 22, 'Taux0BasesHt' => 23, 'Taux0DiscountHt' => 24, 'Taux0Amount' => 25, 'Taux1BasesHt' => 26, 'Taux1DiscountHt' => 27, 'Taux1Amount' => 28, 'Taux2BasesHt' => 29, 'Taux2DiscountHt' => 30, 'Taux2Amount' => 31, 'TotalHt' => 32, 'TotalTva' => 33, 'Comment' => 34, 'FeesShippingHt' => 35, 'FeesShippingRate' => 36, 'FeesShippingTva' => 37, 'FeesBillingHt' => 38, 'FeesBillingRate' => 39, 'FeesBillingTva' => 40, 'CreatedAt' => 41, 'UpdatedAt' => 42, ),
		BasePeer::TYPE_COLNAME => array (KataoSupplierInvoicePeer::ID => 0, KataoSupplierInvoicePeer::KATAO_SUPPLIER_ID => 1, KataoSupplierInvoicePeer::KATAO_PERIOD_ID => 2, KataoSupplierInvoicePeer::STATUS => 3, KataoSupplierInvoicePeer::SUPPLIER_NAME => 4, KataoSupplierInvoicePeer::SUPPLIER_EMAIL => 5, KataoSupplierInvoicePeer::SUPPLIER_ADDRESS1 => 6, KataoSupplierInvoicePeer::SUPPLIER_ADDRESS2 => 7, KataoSupplierInvoicePeer::SUPPLIER_ZIP => 8, KataoSupplierInvoicePeer::SUPPLIER_CITY => 9, KataoSupplierInvoicePeer::KATAO_NAME => 10, KataoSupplierInvoicePeer::KATAO_ADDRESS => 11, KataoSupplierInvoicePeer::KATAO_SIRET_NUMBER => 12, KataoSupplierInvoicePeer::KATAO_RCS_NUMBER => 13, KataoSupplierInvoicePeer::KATAO_CAPITAL => 14, KataoSupplierInvoicePeer::REFERENCE => 15, KataoSupplierInvoicePeer::INVOICE_DATE => 16, KataoSupplierInvoicePeer::DUE_DATE => 17, KataoSupplierInvoicePeer::PAYMENT_DATE => 18, KataoSupplierInvoicePeer::PAYMENT_MODE => 19, KataoSupplierInvoicePeer::PAYMENT_DETAILS => 20, KataoSupplierInvoicePeer::PAYMENT_AMOUNT_EURO => 21, KataoSupplierInvoicePeer::PAYMENT_AMOUNT_SOL => 22, KataoSupplierInvoicePeer::TAUX0_BASES_HT => 23, KataoSupplierInvoicePeer::TAUX0_DISCOUNT_HT => 24, KataoSupplierInvoicePeer::TAUX0_AMOUNT => 25, KataoSupplierInvoicePeer::TAUX1_BASES_HT => 26, KataoSupplierInvoicePeer::TAUX1_DISCOUNT_HT => 27, KataoSupplierInvoicePeer::TAUX1_AMOUNT => 28, KataoSupplierInvoicePeer::TAUX2_BASES_HT => 29, KataoSupplierInvoicePeer::TAUX2_DISCOUNT_HT => 30, KataoSupplierInvoicePeer::TAUX2_AMOUNT => 31, KataoSupplierInvoicePeer::TOTAL_HT => 32, KataoSupplierInvoicePeer::TOTAL_TVA => 33, KataoSupplierInvoicePeer::COMMENT => 34, KataoSupplierInvoicePeer::FEES_SHIPPING_HT => 35, KataoSupplierInvoicePeer::FEES_SHIPPING_RATE => 36, KataoSupplierInvoicePeer::FEES_SHIPPING_TVA => 37, KataoSupplierInvoicePeer::FEES_BILLING_HT => 38, KataoSupplierInvoicePeer::FEES_BILLING_RATE => 39, KataoSupplierInvoicePeer::FEES_BILLING_TVA => 40, KataoSupplierInvoicePeer::CREATED_AT => 41, KataoSupplierInvoicePeer::UPDATED_AT => 42, ),
		BasePeer::TYPE_FIELDNAME => array ('id' => 0, 'katao_supplier_id' => 1, 'katao_period_id' => 2, 'status' => 3, 'supplier_name' => 4, 'supplier_email' => 5, 'supplier_address1' => 6, 'supplier_address2' => 7, 'supplier_zip' => 8, 'supplier_city' => 9, 'katao_name' => 10, 'katao_address' => 11, 'katao_siret_number' => 12, 'katao_rcs_number' => 13, 'katao_capital' => 14, 'reference' => 15, 'invoice_date' => 16, 'due_date' => 17, 'payment_date' => 18, 'payment_mode' => 19, 'payment_details' => 20, 'payment_amount_euro' => 21, 'payment_amount_sol' => 22, 'taux0_bases_ht' => 23, 'taux0_discount_ht' => 24, 'taux0_amount' => 25, 'taux1_bases_ht' => 26, 'taux1_discount_ht' => 27, 'taux1_amount' => 28, 'taux2_bases_ht' => 29, 'taux2_discount_ht' => 30, 'taux2_amount' => 31, 'total_ht' => 32, 'total_tva' => 33, 'comment' => 34, 'fees_shipping_ht' => 35, 'fees_shipping_rate' => 36, 'fees_shipping_tva' => 37, 'fees_billing_ht' => 38, 'fees_billing_rate' => 39, 'fees_billing_tva' => 40, 'created_at' => 41, 'updated_at' => 42, ),
		BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, )
	);

	/**
	 * @return     MapBuilder the map builder for this peer
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 */
	public static function getMapBuilder()
	{
		return BasePeer::getMapBuilder('lib.model.map.KataoSupplierInvoiceMapBuilder');
	}
	/**
	 * Gets a map (hash) of PHP names to DB column names.
	 *
	 * @return     array The PHP to DB name map for this peer
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 * @deprecated Use the getFieldNames() and translateFieldName() methods instead of this.
	 */
	public static function getPhpNameMap()
	{
		if (self::$phpNameMap === null) {
			$map = KataoSupplierInvoicePeer::getTableMap();
			$columns = $map->getColumns();
			$nameMap = array();
			foreach ($columns as $column) {
				$nameMap[$column->getPhpName()] = $column->getColumnName();
			}
			self::$phpNameMap = $nameMap;
		}
		return self::$phpNameMap;
	}
	/**
	 * Translates a fieldname to another type
	 *
	 * @param      string $name field name
	 * @param      string $fromType One of the class type constants TYPE_PHPNAME,
	 *                         TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM
	 * @param      string $toType   One of the class type constants
	 * @return     string translated name of the field.
	 */
	static public function translateFieldName($name, $fromType, $toType)
	{
		$toNames = self::getFieldNames($toType);
		$key = isset(self::$fieldKeys[$fromType][$name]) ? self::$fieldKeys[$fromType][$name] : null;
		if ($key === null) {
			throw new PropelException("'$name' could not be found in the field names of type '$fromType'. These are: " . print_r(self::$fieldKeys[$fromType], true));
		}
		return $toNames[$key];
	}

	/**
	 * Returns an array of of field names.
	 *
	 * @param      string $type The type of fieldnames to return:
	 *                      One of the class type constants TYPE_PHPNAME,
	 *                      TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM
	 * @return     array A list of field names
	 */

	static public function getFieldNames($type = BasePeer::TYPE_PHPNAME)
	{
		if (!array_key_exists($type, self::$fieldNames)) {
			throw new PropelException('Method getFieldNames() expects the parameter $type to be one of the class constants TYPE_PHPNAME, TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM. ' . $type . ' was given.');
		}
		return self::$fieldNames[$type];
	}

	/**
	 * Convenience method which changes table.column to alias.column.
	 *
	 * Using this method you can maintain SQL abstraction while using column aliases.
	 * <code>
	 *		$c->addAlias("alias1", TablePeer::TABLE_NAME);
	 *		$c->addJoin(TablePeer::alias("alias1", TablePeer::PRIMARY_KEY_COLUMN), TablePeer::PRIMARY_KEY_COLUMN);
	 * </code>
	 * @param      string $alias The alias for the current table.
	 * @param      string $column The column name for current table. (i.e. KataoSupplierInvoicePeer::COLUMN_NAME).
	 * @return     string
	 */
	public static function alias($alias, $column)
	{
		return str_replace(KataoSupplierInvoicePeer::TABLE_NAME.'.', $alias.'.', $column);
	}

	/**
	 * Add all the columns needed to create a new object.
	 *
	 * Note: any columns that were marked with lazyLoad="true" in the
	 * XML schema will not be added to the select list and only loaded
	 * on demand.
	 *
	 * @param      criteria object containing the columns to add.
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 */
	public static function addSelectColumns(Criteria $criteria)
	{

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::ID);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::KATAO_SUPPLIER_ID);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::KATAO_PERIOD_ID);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::STATUS);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::SUPPLIER_NAME);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::SUPPLIER_EMAIL);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::SUPPLIER_ADDRESS1);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::SUPPLIER_ADDRESS2);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::SUPPLIER_ZIP);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::SUPPLIER_CITY);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::KATAO_NAME);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::KATAO_ADDRESS);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::KATAO_SIRET_NUMBER);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::KATAO_RCS_NUMBER);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::KATAO_CAPITAL);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::REFERENCE);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::INVOICE_DATE);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::DUE_DATE);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::PAYMENT_DATE);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::PAYMENT_MODE);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::PAYMENT_DETAILS);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::PAYMENT_AMOUNT_EURO);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::PAYMENT_AMOUNT_SOL);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::TAUX0_BASES_HT);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::TAUX0_DISCOUNT_HT);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::TAUX0_AMOUNT);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::TAUX1_BASES_HT);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::TAUX1_DISCOUNT_HT);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::TAUX1_AMOUNT);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::TAUX2_BASES_HT);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::TAUX2_DISCOUNT_HT);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::TAUX2_AMOUNT);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::TOTAL_HT);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::TOTAL_TVA);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::COMMENT);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::FEES_SHIPPING_HT);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::FEES_SHIPPING_RATE);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::FEES_SHIPPING_TVA);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::FEES_BILLING_HT);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::FEES_BILLING_RATE);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::FEES_BILLING_TVA);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::CREATED_AT);

		$criteria->addSelectColumn(KataoSupplierInvoicePeer::UPDATED_AT);

	}

	const COUNT = 'COUNT(katao_supplier_invoice.ID)';
	const COUNT_DISTINCT = 'COUNT(DISTINCT katao_supplier_invoice.ID)';

	/**
	 * Returns the number of rows matching criteria.
	 *
	 * @param      Criteria $criteria
	 * @param      boolean $distinct Whether to select only distinct columns (You can also set DISTINCT modifier in Criteria).
	 * @param      Connection $con
	 * @return     int Number of matching rows.
	 */
	public static function doCount(Criteria $criteria, $distinct = false, $con = null)
	{
		// we're going to modify criteria, so copy it first
		$criteria = clone $criteria;

		// clear out anything that might confuse the ORDER BY clause
		$criteria->clearSelectColumns()->clearOrderByColumns();
		if ($distinct || in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) {
			$criteria->addSelectColumn(KataoSupplierInvoicePeer::COUNT_DISTINCT);
		} else {
			$criteria->addSelectColumn(KataoSupplierInvoicePeer::COUNT);
		}

		// just in case we're grouping: add those columns to the select statement
		foreach($criteria->getGroupByColumns() as $column)
		{
			$criteria->addSelectColumn($column);
		}

		$rs = KataoSupplierInvoicePeer::doSelectRS($criteria, $con);
		if ($rs->next()) {
			return $rs->getInt(1);
		} else {
			// no rows returned; we infer that means 0 matches.
			return 0;
		}
	}
	/**
	 * Method to select one object from the DB.
	 *
	 * @param      Criteria $criteria object used to create the SELECT statement.
	 * @param      Connection $con
	 * @return     KataoSupplierInvoice
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 */
	public static function doSelectOne(Criteria $criteria, $con = null)
	{
		$critcopy = clone $criteria;
		$critcopy->setLimit(1);
		$objects = KataoSupplierInvoicePeer::doSelect($critcopy, $con);
		if ($objects) {
			return $objects[0];
		}
		return null;
	}
	/**
	 * Method to do selects.
	 *
	 * @param      Criteria $criteria The Criteria object used to build the SELECT statement.
	 * @param      Connection $con
	 * @return     array Array of selected Objects
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 */
	public static function doSelect(Criteria $criteria, $con = null)
	{
		return KataoSupplierInvoicePeer::populateObjects(KataoSupplierInvoicePeer::doSelectRS($criteria, $con));
	}
	/**
	 * Prepares the Criteria object and uses the parent doSelect()
	 * method to get a ResultSet.
	 *
	 * Use this method directly if you want to just get the resultset
	 * (instead of an array of objects).
	 *
	 * @param      Criteria $criteria The Criteria object used to build the SELECT statement.
	 * @param      Connection $con the connection to use
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 * @return     ResultSet The resultset object with numerically-indexed fields.
	 * @see        BasePeer::doSelect()
	 */
	public static function doSelectRS(Criteria $criteria, $con = null)
	{

    foreach (sfMixer::getCallables('BaseKataoSupplierInvoicePeer:doSelectRS:doSelectRS') as $callable)
    {
      call_user_func($callable, 'BaseKataoSupplierInvoicePeer', $criteria, $con);
    }


		if ($con === null) {
			$con = Propel::getConnection(self::DATABASE_NAME);
		}

		if (!$criteria->getSelectColumns()) {
			$criteria = clone $criteria;
			KataoSupplierInvoicePeer::addSelectColumns($criteria);
		}

		// Set the correct dbName
		$criteria->setDbName(self::DATABASE_NAME);

		// BasePeer returns a Creole ResultSet, set to return
		// rows indexed numerically.
		return BasePeer::doSelect($criteria, $con);
	}
	/**
	 * The returned array will contain objects of the default type or
	 * objects that inherit from the default.
	 *
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 */
	public static function populateObjects(ResultSet $rs)
	{
		$results = array();
	
		// set the class once to avoid overhead in the loop
		$cls = KataoSupplierInvoicePeer::getOMClass();
		$cls = sfPropel::import($cls);
		// populate the object(s)
		while($rs->next()) {
		
			$obj = new $cls();
			$obj->hydrate($rs);
			$results[] = $obj;
			
		}
		return $results;
	}

	/**
	 * Returns the number of rows matching criteria, joining the related KataoSupplier table
	 *
	 * @param      Criteria $c
	 * @param      boolean $distinct Whether to select only distinct columns (You can also set DISTINCT modifier in Criteria).
	 * @param      Connection $con
	 * @return     int Number of matching rows.
	 */
	public static function doCountJoinKataoSupplier(Criteria $criteria, $distinct = false, $con = null)
	{
		// we're going to modify criteria, so copy it first
		$criteria = clone $criteria;

		// clear out anything that might confuse the ORDER BY clause
		$criteria->clearSelectColumns()->clearOrderByColumns();
		if ($distinct || in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) {
			$criteria->addSelectColumn(KataoSupplierInvoicePeer::COUNT_DISTINCT);
		} else {
			$criteria->addSelectColumn(KataoSupplierInvoicePeer::COUNT);
		}

		// just in case we're grouping: add those columns to the select statement
		foreach($criteria->getGroupByColumns() as $column)
		{
			$criteria->addSelectColumn($column);
		}

		$criteria->addJoin(KataoSupplierInvoicePeer::KATAO_SUPPLIER_ID, KataoSupplierPeer::ID);

		$rs = KataoSupplierInvoicePeer::doSelectRS($criteria, $con);
		if ($rs->next()) {
			return $rs->getInt(1);
		} else {
			// no rows returned; we infer that means 0 matches.
			return 0;
		}
	}


	/**
	 * Returns the number of rows matching criteria, joining the related KataoPeriod table
	 *
	 * @param      Criteria $c
	 * @param      boolean $distinct Whether to select only distinct columns (You can also set DISTINCT modifier in Criteria).
	 * @param      Connection $con
	 * @return     int Number of matching rows.
	 */
	public static function doCountJoinKataoPeriod(Criteria $criteria, $distinct = false, $con = null)
	{
		// we're going to modify criteria, so copy it first
		$criteria = clone $criteria;

		// clear out anything that might confuse the ORDER BY clause
		$criteria->clearSelectColumns()->clearOrderByColumns();
		if ($distinct || in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) {
			$criteria->addSelectColumn(KataoSupplierInvoicePeer::COUNT_DISTINCT);
		} else {
			$criteria->addSelectColumn(KataoSupplierInvoicePeer::COUNT);
		}

		// just in case we're grouping: add those columns to the select statement
		foreach($criteria->getGroupByColumns() as $column)
		{
			$criteria->addSelectColumn($column);
		}

		$criteria->addJoin(KataoSupplierInvoicePeer::KATAO_PERIOD_ID, KataoPeriodPeer::ID);

		$rs = KataoSupplierInvoicePeer::doSelectRS($criteria, $con);
		if ($rs->next()) {
			return $rs->getInt(1);
		} else {
			// no rows returned; we infer that means 0 matches.
			return 0;
		}
	}


	/**
	 * Selects a collection of KataoSupplierInvoice objects pre-filled with their KataoSupplier objects.
	 *
	 * @return     array Array of KataoSupplierInvoice objects.
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 */
	public static function doSelectJoinKataoSupplier(Criteria $c, $con = null)
	{

    foreach (sfMixer::getCallables('BaseKataoSupplierInvoicePeer:doSelectJoin:doSelectJoin') as $callable)
    {
      call_user_func($callable, 'BaseKataoSupplierInvoicePeer', $c, $con);
    }


		$c = clone $c;

		// Set the correct dbName if it has not been overridden
		if ($c->getDbName() == Propel::getDefaultDB()) {
			$c->setDbName(self::DATABASE_NAME);
		}

		KataoSupplierInvoicePeer::addSelectColumns($c);
		$startcol = (KataoSupplierInvoicePeer::NUM_COLUMNS - KataoSupplierInvoicePeer::NUM_LAZY_LOAD_COLUMNS) + 1;
		KataoSupplierPeer::addSelectColumns($c);

		$c->addJoin(KataoSupplierInvoicePeer::KATAO_SUPPLIER_ID, KataoSupplierPeer::ID);
		$rs = BasePeer::doSelect($c, $con);
		$results = array();

		while($rs->next()) {

			$omClass = KataoSupplierInvoicePeer::getOMClass();

			$cls = sfPropel::import($omClass);
			$obj1 = new $cls();
			$obj1->hydrate($rs);

			$omClass = KataoSupplierPeer::getOMClass();

			$cls = sfPropel::import($omClass);
			$obj2 = new $cls();
			$obj2->hydrate($rs, $startcol);

			$newObject = true;
			foreach($results as $temp_obj1) {
				$temp_obj2 = $temp_obj1->getKataoSupplier(); //CHECKME
				if ($temp_obj2->getPrimaryKey() === $obj2->getPrimaryKey()) {
					$newObject = false;
					// e.g. $author->addBookRelatedByBookId()
					$temp_obj2->addKataoSupplierInvoice($obj1); //CHECKME
					break;
				}
			}
			if ($newObject) {
				$obj2->initKataoSupplierInvoices();
				$obj2->addKataoSupplierInvoice($obj1); //CHECKME
			}
			$results[] = $obj1;
		}
		return $results;
	}


	/**
	 * Selects a collection of KataoSupplierInvoice objects pre-filled with their KataoPeriod objects.
	 *
	 * @return     array Array of KataoSupplierInvoice objects.
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 */
	public static function doSelectJoinKataoPeriod(Criteria $c, $con = null)
	{

    foreach (sfMixer::getCallables('BaseKataoSupplierInvoicePeer:doSelectJoin:doSelectJoin') as $callable)
    {
      call_user_func($callable, 'BaseKataoSupplierInvoicePeer', $c, $con);
    }


		$c = clone $c;

		// Set the correct dbName if it has not been overridden
		if ($c->getDbName() == Propel::getDefaultDB()) {
			$c->setDbName(self::DATABASE_NAME);
		}

		KataoSupplierInvoicePeer::addSelectColumns($c);
		$startcol = (KataoSupplierInvoicePeer::NUM_COLUMNS - KataoSupplierInvoicePeer::NUM_LAZY_LOAD_COLUMNS) + 1;
		KataoPeriodPeer::addSelectColumns($c);

		$c->addJoin(KataoSupplierInvoicePeer::KATAO_PERIOD_ID, KataoPeriodPeer::ID);
		$rs = BasePeer::doSelect($c, $con);
		$results = array();

		while($rs->next()) {

			$omClass = KataoSupplierInvoicePeer::getOMClass();

			$cls = sfPropel::import($omClass);
			$obj1 = new $cls();
			$obj1->hydrate($rs);

			$omClass = KataoPeriodPeer::getOMClass();

			$cls = sfPropel::import($omClass);
			$obj2 = new $cls();
			$obj2->hydrate($rs, $startcol);

			$newObject = true;
			foreach($results as $temp_obj1) {
				$temp_obj2 = $temp_obj1->getKataoPeriod(); //CHECKME
				if ($temp_obj2->getPrimaryKey() === $obj2->getPrimaryKey()) {
					$newObject = false;
					// e.g. $author->addBookRelatedByBookId()
					$temp_obj2->addKataoSupplierInvoice($obj1); //CHECKME
					break;
				}
			}
			if ($newObject) {
				$obj2->initKataoSupplierInvoices();
				$obj2->addKataoSupplierInvoice($obj1); //CHECKME
			}
			$results[] = $obj1;
		}
		return $results;
	}


	/**
	 * Returns the number of rows matching criteria, joining all related tables
	 *
	 * @param      Criteria $c
	 * @param      boolean $distinct Whether to select only distinct columns (You can also set DISTINCT modifier in Criteria).
	 * @param      Connection $con
	 * @return     int Number of matching rows.
	 */
	public static function doCountJoinAll(Criteria $criteria, $distinct = false, $con = null)
	{
		$criteria = clone $criteria;

		// clear out anything that might confuse the ORDER BY clause
		$criteria->clearSelectColumns()->clearOrderByColumns();
		if ($distinct || in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) {
			$criteria->addSelectColumn(KataoSupplierInvoicePeer::COUNT_DISTINCT);
		} else {
			$criteria->addSelectColumn(KataoSupplierInvoicePeer::COUNT);
		}

		// just in case we're grouping: add those columns to the select statement
		foreach($criteria->getGroupByColumns() as $column)
		{
			$criteria->addSelectColumn($column);
		}

		$criteria->addJoin(KataoSupplierInvoicePeer::KATAO_SUPPLIER_ID, KataoSupplierPeer::ID);

		$criteria->addJoin(KataoSupplierInvoicePeer::KATAO_PERIOD_ID, KataoPeriodPeer::ID);

		$rs = KataoSupplierInvoicePeer::doSelectRS($criteria, $con);
		if ($rs->next()) {
			return $rs->getInt(1);
		} else {
			// no rows returned; we infer that means 0 matches.
			return 0;
		}
	}


	/**
	 * Selects a collection of KataoSupplierInvoice objects pre-filled with all related objects.
	 *
	 * @return     array Array of KataoSupplierInvoice objects.
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 */
	public static function doSelectJoinAll(Criteria $c, $con = null)
	{

    foreach (sfMixer::getCallables('BaseKataoSupplierInvoicePeer:doSelectJoinAll:doSelectJoinAll') as $callable)
    {
      call_user_func($callable, 'BaseKataoSupplierInvoicePeer', $c, $con);
    }


		$c = clone $c;

		// Set the correct dbName if it has not been overridden
		if ($c->getDbName() == Propel::getDefaultDB()) {
			$c->setDbName(self::DATABASE_NAME);
		}

		KataoSupplierInvoicePeer::addSelectColumns($c);
		$startcol2 = (KataoSupplierInvoicePeer::NUM_COLUMNS - KataoSupplierInvoicePeer::NUM_LAZY_LOAD_COLUMNS) + 1;

		KataoSupplierPeer::addSelectColumns($c);
		$startcol3 = $startcol2 + KataoSupplierPeer::NUM_COLUMNS;

		KataoPeriodPeer::addSelectColumns($c);
		$startcol4 = $startcol3 + KataoPeriodPeer::NUM_COLUMNS;

		$c->addJoin(KataoSupplierInvoicePeer::KATAO_SUPPLIER_ID, KataoSupplierPeer::ID);

		$c->addJoin(KataoSupplierInvoicePeer::KATAO_PERIOD_ID, KataoPeriodPeer::ID);

		$rs = BasePeer::doSelect($c, $con);
		$results = array();

		while($rs->next()) {

			$omClass = KataoSupplierInvoicePeer::getOMClass();


			$cls = sfPropel::import($omClass);
			$obj1 = new $cls();
			$obj1->hydrate($rs);


				// Add objects for joined KataoSupplier rows
	
			$omClass = KataoSupplierPeer::getOMClass();


			$cls = sfPropel::import($omClass);
			$obj2 = new $cls();
			$obj2->hydrate($rs, $startcol2);

			$newObject = true;
			for ($j=0, $resCount=count($results); $j < $resCount; $j++) {
				$temp_obj1 = $results[$j];
				$temp_obj2 = $temp_obj1->getKataoSupplier(); // CHECKME
				if ($temp_obj2->getPrimaryKey() === $obj2->getPrimaryKey()) {
					$newObject = false;
					$temp_obj2->addKataoSupplierInvoice($obj1); // CHECKME
					break;
				}
			}

			if ($newObject) {
				$obj2->initKataoSupplierInvoices();
				$obj2->addKataoSupplierInvoice($obj1);
			}


				// Add objects for joined KataoPeriod rows
	
			$omClass = KataoPeriodPeer::getOMClass();


			$cls = sfPropel::import($omClass);
			$obj3 = new $cls();
			$obj3->hydrate($rs, $startcol3);

			$newObject = true;
			for ($j=0, $resCount=count($results); $j < $resCount; $j++) {
				$temp_obj1 = $results[$j];
				$temp_obj3 = $temp_obj1->getKataoPeriod(); // CHECKME
				if ($temp_obj3->getPrimaryKey() === $obj3->getPrimaryKey()) {
					$newObject = false;
					$temp_obj3->addKataoSupplierInvoice($obj1); // CHECKME
					break;
				}
			}

			if ($newObject) {
				$obj3->initKataoSupplierInvoices();
				$obj3->addKataoSupplierInvoice($obj1);
			}

			$results[] = $obj1;
		}
		return $results;
	}


	/**
	 * Returns the number of rows matching criteria, joining the related KataoSupplier table
	 *
	 * @param      Criteria $c
	 * @param      boolean $distinct Whether to select only distinct columns (You can also set DISTINCT modifier in Criteria).
	 * @param      Connection $con
	 * @return     int Number of matching rows.
	 */
	public static function doCountJoinAllExceptKataoSupplier(Criteria $criteria, $distinct = false, $con = null)
	{
		// we're going to modify criteria, so copy it first
		$criteria = clone $criteria;

		// clear out anything that might confuse the ORDER BY clause
		$criteria->clearSelectColumns()->clearOrderByColumns();
		if ($distinct || in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) {
			$criteria->addSelectColumn(KataoSupplierInvoicePeer::COUNT_DISTINCT);
		} else {
			$criteria->addSelectColumn(KataoSupplierInvoicePeer::COUNT);
		}

		// just in case we're grouping: add those columns to the select statement
		foreach($criteria->getGroupByColumns() as $column)
		{
			$criteria->addSelectColumn($column);
		}

		$criteria->addJoin(KataoSupplierInvoicePeer::KATAO_PERIOD_ID, KataoPeriodPeer::ID);

		$rs = KataoSupplierInvoicePeer::doSelectRS($criteria, $con);
		if ($rs->next()) {
			return $rs->getInt(1);
		} else {
			// no rows returned; we infer that means 0 matches.
			return 0;
		}
	}


	/**
	 * Returns the number of rows matching criteria, joining the related KataoPeriod table
	 *
	 * @param      Criteria $c
	 * @param      boolean $distinct Whether to select only distinct columns (You can also set DISTINCT modifier in Criteria).
	 * @param      Connection $con
	 * @return     int Number of matching rows.
	 */
	public static function doCountJoinAllExceptKataoPeriod(Criteria $criteria, $distinct = false, $con = null)
	{
		// we're going to modify criteria, so copy it first
		$criteria = clone $criteria;

		// clear out anything that might confuse the ORDER BY clause
		$criteria->clearSelectColumns()->clearOrderByColumns();
		if ($distinct || in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) {
			$criteria->addSelectColumn(KataoSupplierInvoicePeer::COUNT_DISTINCT);
		} else {
			$criteria->addSelectColumn(KataoSupplierInvoicePeer::COUNT);
		}

		// just in case we're grouping: add those columns to the select statement
		foreach($criteria->getGroupByColumns() as $column)
		{
			$criteria->addSelectColumn($column);
		}

		$criteria->addJoin(KataoSupplierInvoicePeer::KATAO_SUPPLIER_ID, KataoSupplierPeer::ID);

		$rs = KataoSupplierInvoicePeer::doSelectRS($criteria, $con);
		if ($rs->next()) {
			return $rs->getInt(1);
		} else {
			// no rows returned; we infer that means 0 matches.
			return 0;
		}
	}


	/**
	 * Selects a collection of KataoSupplierInvoice objects pre-filled with all related objects except KataoSupplier.
	 *
	 * @return     array Array of KataoSupplierInvoice objects.
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 */
	public static function doSelectJoinAllExceptKataoSupplier(Criteria $c, $con = null)
	{

    foreach (sfMixer::getCallables('BaseKataoSupplierInvoicePeer:doSelectJoinAllExcept:doSelectJoinAllExcept') as $callable)
    {
      call_user_func($callable, 'BaseKataoSupplierInvoicePeer', $c, $con);
    }


		$c = clone $c;

		// Set the correct dbName if it has not been overridden
		// $c->getDbName() will return the same object if not set to another value
		// so == check is okay and faster
		if ($c->getDbName() == Propel::getDefaultDB()) {
			$c->setDbName(self::DATABASE_NAME);
		}

		KataoSupplierInvoicePeer::addSelectColumns($c);
		$startcol2 = (KataoSupplierInvoicePeer::NUM_COLUMNS - KataoSupplierInvoicePeer::NUM_LAZY_LOAD_COLUMNS) + 1;

		KataoPeriodPeer::addSelectColumns($c);
		$startcol3 = $startcol2 + KataoPeriodPeer::NUM_COLUMNS;

		$c->addJoin(KataoSupplierInvoicePeer::KATAO_PERIOD_ID, KataoPeriodPeer::ID);


		$rs = BasePeer::doSelect($c, $con);
		$results = array();

		while($rs->next()) {

			$omClass = KataoSupplierInvoicePeer::getOMClass();

			$cls = sfPropel::import($omClass);
			$obj1 = new $cls();
			$obj1->hydrate($rs);

			$omClass = KataoPeriodPeer::getOMClass();


			$cls = sfPropel::import($omClass);
			$obj2  = new $cls();
			$obj2->hydrate($rs, $startcol2);

			$newObject = true;
			for ($j=0, $resCount=count($results); $j < $resCount; $j++) {
				$temp_obj1 = $results[$j];
				$temp_obj2 = $temp_obj1->getKataoPeriod(); //CHECKME
				if ($temp_obj2->getPrimaryKey() === $obj2->getPrimaryKey()) {
					$newObject = false;
					$temp_obj2->addKataoSupplierInvoice($obj1);
					break;
				}
			}

			if ($newObject) {
				$obj2->initKataoSupplierInvoices();
				$obj2->addKataoSupplierInvoice($obj1);
			}

			$results[] = $obj1;
		}
		return $results;
	}


	/**
	 * Selects a collection of KataoSupplierInvoice objects pre-filled with all related objects except KataoPeriod.
	 *
	 * @return     array Array of KataoSupplierInvoice objects.
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 */
	public static function doSelectJoinAllExceptKataoPeriod(Criteria $c, $con = null)
	{

    foreach (sfMixer::getCallables('BaseKataoSupplierInvoicePeer:doSelectJoinAllExcept:doSelectJoinAllExcept') as $callable)
    {
      call_user_func($callable, 'BaseKataoSupplierInvoicePeer', $c, $con);
    }


		$c = clone $c;

		// Set the correct dbName if it has not been overridden
		// $c->getDbName() will return the same object if not set to another value
		// so == check is okay and faster
		if ($c->getDbName() == Propel::getDefaultDB()) {
			$c->setDbName(self::DATABASE_NAME);
		}

		KataoSupplierInvoicePeer::addSelectColumns($c);
		$startcol2 = (KataoSupplierInvoicePeer::NUM_COLUMNS - KataoSupplierInvoicePeer::NUM_LAZY_LOAD_COLUMNS) + 1;

		KataoSupplierPeer::addSelectColumns($c);
		$startcol3 = $startcol2 + KataoSupplierPeer::NUM_COLUMNS;

		$c->addJoin(KataoSupplierInvoicePeer::KATAO_SUPPLIER_ID, KataoSupplierPeer::ID);


		$rs = BasePeer::doSelect($c, $con);
		$results = array();

		while($rs->next()) {

			$omClass = KataoSupplierInvoicePeer::getOMClass();

			$cls = sfPropel::import($omClass);
			$obj1 = new $cls();
			$obj1->hydrate($rs);

			$omClass = KataoSupplierPeer::getOMClass();


			$cls = sfPropel::import($omClass);
			$obj2  = new $cls();
			$obj2->hydrate($rs, $startcol2);

			$newObject = true;
			for ($j=0, $resCount=count($results); $j < $resCount; $j++) {
				$temp_obj1 = $results[$j];
				$temp_obj2 = $temp_obj1->getKataoSupplier(); //CHECKME
				if ($temp_obj2->getPrimaryKey() === $obj2->getPrimaryKey()) {
					$newObject = false;
					$temp_obj2->addKataoSupplierInvoice($obj1);
					break;
				}
			}

			if ($newObject) {
				$obj2->initKataoSupplierInvoices();
				$obj2->addKataoSupplierInvoice($obj1);
			}

			$results[] = $obj1;
		}
		return $results;
	}


  static public function getUniqueColumnNames()
  {
    return array();
  }
	/**
	 * Returns the TableMap related to this peer.
	 * This method is not needed for general use but a specific application could have a need.
	 * @return     TableMap
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 */
	public static function getTableMap()
	{
		return Propel::getDatabaseMap(self::DATABASE_NAME)->getTable(self::TABLE_NAME);
	}

	/**
	 * The class that the Peer will make instances of.
	 *
	 * This uses a dot-path notation which is tranalted into a path
	 * relative to a location on the PHP include_path.
	 * (e.g. path.to.MyClass -> 'path/to/MyClass.php')
	 *
	 * @return     string path.to.ClassName
	 */
	public static function getOMClass()
	{
		return KataoSupplierInvoicePeer::CLASS_DEFAULT;
	}

	/**
	 * Method perform an INSERT on the database, given a KataoSupplierInvoice or Criteria object.
	 *
	 * @param      mixed $values Criteria or KataoSupplierInvoice object containing data that is used to create the INSERT statement.
	 * @param      Connection $con the connection to use
	 * @return     mixed The new primary key.
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 */
	public static function doInsert($values, $con = null)
	{

    foreach (sfMixer::getCallables('BaseKataoSupplierInvoicePeer:doInsert:pre') as $callable)
    {
      $ret = call_user_func($callable, 'BaseKataoSupplierInvoicePeer', $values, $con);
      if (false !== $ret)
      {
        return $ret;
      }
    }


		if ($con === null) {
			$con = Propel::getConnection(self::DATABASE_NAME);
		}

		if ($values instanceof Criteria) {
			$criteria = clone $values; // rename for clarity
		} else {
			$criteria = $values->buildCriteria(); // build Criteria from KataoSupplierInvoice object
		}

		$criteria->remove(KataoSupplierInvoicePeer::ID); // remove pkey col since this table uses auto-increment


		// Set the correct dbName
		$criteria->setDbName(self::DATABASE_NAME);

		try {
			// use transaction because $criteria could contain info
			// for more than one table (I guess, conceivably)
			$con->begin();
			$pk = BasePeer::doInsert($criteria, $con);
			$con->commit();
		} catch(PropelException $e) {
			$con->rollback();
			throw $e;
		}

		
    foreach (sfMixer::getCallables('BaseKataoSupplierInvoicePeer:doInsert:post') as $callable)
    {
      call_user_func($callable, 'BaseKataoSupplierInvoicePeer', $values, $con, $pk);
    }

    return $pk;
	}

	/**
	 * Method perform an UPDATE on the database, given a KataoSupplierInvoice or Criteria object.
	 *
	 * @param      mixed $values Criteria or KataoSupplierInvoice object containing data that is used to create the UPDATE statement.
	 * @param      Connection $con The connection to use (specify Connection object to exert more control over transactions).
	 * @return     int The number of affected rows (if supported by underlying database driver).
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 */
	public static function doUpdate($values, $con = null)
	{

    foreach (sfMixer::getCallables('BaseKataoSupplierInvoicePeer:doUpdate:pre') as $callable)
    {
      $ret = call_user_func($callable, 'BaseKataoSupplierInvoicePeer', $values, $con);
      if (false !== $ret)
      {
        return $ret;
      }
    }


		if ($con === null) {
			$con = Propel::getConnection(self::DATABASE_NAME);
		}

		$selectCriteria = new Criteria(self::DATABASE_NAME);

		if ($values instanceof Criteria) {
			$criteria = clone $values; // rename for clarity

			$comparison = $criteria->getComparison(KataoSupplierInvoicePeer::ID);
			$selectCriteria->add(KataoSupplierInvoicePeer::ID, $criteria->remove(KataoSupplierInvoicePeer::ID), $comparison);

		} else { // $values is KataoSupplierInvoice object
			$criteria = $values->buildCriteria(); // gets full criteria
			$selectCriteria = $values->buildPkeyCriteria(); // gets criteria w/ primary key(s)
		}

		// set the correct dbName
		$criteria->setDbName(self::DATABASE_NAME);

		$ret = BasePeer::doUpdate($selectCriteria, $criteria, $con);
	

    foreach (sfMixer::getCallables('BaseKataoSupplierInvoicePeer:doUpdate:post') as $callable)
    {
      call_user_func($callable, 'BaseKataoSupplierInvoicePeer', $values, $con, $ret);
    }

    return $ret;
  }

	/**
	 * Method to DELETE all rows from the katao_supplier_invoice table.
	 *
	 * @return     int The number of affected rows (if supported by underlying database driver).
	 */
	public static function doDeleteAll($con = null)
	{
		if ($con === null) {
			$con = Propel::getConnection(self::DATABASE_NAME);
		}
		$affectedRows = 0; // initialize var to track total num of affected rows
		try {
			// use transaction because $criteria could contain info
			// for more than one table or we could emulating ON DELETE CASCADE, etc.
			$con->begin();
			$affectedRows += BasePeer::doDeleteAll(KataoSupplierInvoicePeer::TABLE_NAME, $con);
			$con->commit();
			return $affectedRows;
		} catch (PropelException $e) {
			$con->rollback();
			throw $e;
		}
	}

	/**
	 * Method perform a DELETE on the database, given a KataoSupplierInvoice or Criteria object OR a primary key value.
	 *
	 * @param      mixed $values Criteria or KataoSupplierInvoice object or primary key or array of primary keys
	 *              which is used to create the DELETE statement
	 * @param      Connection $con the connection to use
	 * @return     int 	The number of affected rows (if supported by underlying database driver).  This includes CASCADE-related rows
	 *				if supported by native driver or if emulated using Propel.
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 */
	 public static function doDelete($values, $con = null)
	 {
		if ($con === null) {
			$con = Propel::getConnection(KataoSupplierInvoicePeer::DATABASE_NAME);
		}

		if ($values instanceof Criteria) {
			$criteria = clone $values; // rename for clarity
		} elseif ($values instanceof KataoSupplierInvoice) {

			$criteria = $values->buildPkeyCriteria();
		} else {
			// it must be the primary key
			$criteria = new Criteria(self::DATABASE_NAME);
			$criteria->add(KataoSupplierInvoicePeer::ID, (array) $values, Criteria::IN);
		}

		// Set the correct dbName
		$criteria->setDbName(self::DATABASE_NAME);

		$affectedRows = 0; // initialize var to track total num of affected rows

		try {
			// use transaction because $criteria could contain info
			// for more than one table or we could emulating ON DELETE CASCADE, etc.
			$con->begin();
			
			$affectedRows += BasePeer::doDelete($criteria, $con);
			$con->commit();
			return $affectedRows;
		} catch (PropelException $e) {
			$con->rollback();
			throw $e;
		}
	}

	/**
	 * Validates all modified columns of given KataoSupplierInvoice object.
	 * If parameter $columns is either a single column name or an array of column names
	 * than only those columns are validated.
	 *
	 * NOTICE: This does not apply to primary or foreign keys for now.
	 *
	 * @param      KataoSupplierInvoice $obj The object to validate.
	 * @param      mixed $cols Column name or array of column names.
	 *
	 * @return     mixed TRUE if all columns are valid or the error message of the first invalid column.
	 */
	public static function doValidate(KataoSupplierInvoice $obj, $cols = null)
	{
		$columns = array();

		if ($cols) {
			$dbMap = Propel::getDatabaseMap(KataoSupplierInvoicePeer::DATABASE_NAME);
			$tableMap = $dbMap->getTable(KataoSupplierInvoicePeer::TABLE_NAME);

			if (! is_array($cols)) {
				$cols = array($cols);
			}

			foreach($cols as $colName) {
				if ($tableMap->containsColumn($colName)) {
					$get = 'get' . $tableMap->getColumn($colName)->getPhpName();
					$columns[$colName] = $obj->$get();
				}
			}
		} else {

		}

		$res =  BasePeer::doValidate(KataoSupplierInvoicePeer::DATABASE_NAME, KataoSupplierInvoicePeer::TABLE_NAME, $columns);
    if ($res !== true) {
        $request = sfContext::getInstance()->getRequest();
        foreach ($res as $failed) {
            $col = KataoSupplierInvoicePeer::translateFieldname($failed->getColumn(), BasePeer::TYPE_COLNAME, BasePeer::TYPE_PHPNAME);
            $request->setError($col, $failed->getMessage());
        }
    }

    return $res;
	}

	/**
	 * Retrieve a single object by pkey.
	 *
	 * @param      mixed $pk the primary key.
	 * @param      Connection $con the connection to use
	 * @return     KataoSupplierInvoice
	 */
	public static function retrieveByPK($pk, $con = null)
	{
		if ($con === null) {
			$con = Propel::getConnection(self::DATABASE_NAME);
		}

		$criteria = new Criteria(KataoSupplierInvoicePeer::DATABASE_NAME);

		$criteria->add(KataoSupplierInvoicePeer::ID, $pk);


		$v = KataoSupplierInvoicePeer::doSelect($criteria, $con);

		return !empty($v) > 0 ? $v[0] : null;
	}

	/**
	 * Retrieve multiple objects by pkey.
	 *
	 * @param      array $pks List of primary keys
	 * @param      Connection $con the connection to use
	 * @throws     PropelException Any exceptions caught during processing will be
	 *		 rethrown wrapped into a PropelException.
	 */
	public static function retrieveByPKs($pks, $con = null)
	{
		if ($con === null) {
			$con = Propel::getConnection(self::DATABASE_NAME);
		}

		$objs = null;
		if (empty($pks)) {
			$objs = array();
		} else {
			$criteria = new Criteria();
			$criteria->add(KataoSupplierInvoicePeer::ID, $pks, Criteria::IN);
			$objs = KataoSupplierInvoicePeer::doSelect($criteria, $con);
		}
		return $objs;
	}

} // BaseKataoSupplierInvoicePeer

// static code to register the map builder for this Peer with the main Propel class
if (Propel::isInit()) {
	// the MapBuilder classes register themselves with Propel during initialization
	// so we need to load them here.
	try {
		BaseKataoSupplierInvoicePeer::getMapBuilder();
	} catch (Exception $e) {
		Propel::log('Could not initialize Peer: ' . $e->getMessage(), Propel::LOG_ERR);
	}
} else {
	// even if Propel is not yet initialized, the map builder class can be registered
	// now and then it will be loaded when Propel initializes.
	Propel::registerMapBuilder('lib.model.map.KataoSupplierInvoiceMapBuilder');
}
