<?php 
/* Безналичная оплата от юридического лица */
class system_of_pay_handler
{
	/**
	 * Метод, запускающий выполнение обработчика
	 *
	 */
	function Execute()
	{
		/* Обработчик формы оплаты "Оплата при получении" */
		$shop_id = to_int($GLOBALS['shop_id']);

		/* Получаем id текущего пользователя сайта */
		if (class_exists('SiteUsers'))
		{
			/* Получаем id текущего пользователя сайта */
			$SiteUsers = & singleton('SiteUsers');
			$site_users_id = $SiteUsers->GetCurrentSiteUser();
		}
		else
		{
			$site_users_id = false;
		}

		/* ID платежной системы берем из сессии */
		$system_of_pay_id = to_int($_SESSION['system_of_pay_id']);

		// статус платежа, по умолчанию 0
		$order_row['status_of_pay'] = 0 ;

		// дата платежа, по умолчанию пустая строка
		$order_row['date_of_pay'] = '';

		// описание и системная информация, по умолчанию пустая строка
		if (to_str($_SESSION['shop_coupon_text']) != '')
		{
			$order_row['description'] = "Купон на скидку: ".to_str($_SESSION['shop_coupon_text'])."\n";
		}
		else
		{
			$order_row['description'] = '';
		}

		$shop = & singleton('shop');

		/* Оформляем заказ */
		$order_id = $shop->ProcessOrder($shop_id, $site_users_id, $system_of_pay_id, $order_row);

		if ($order_id > 0)
		{
			if (!class_exists('SiteUsers'))
			{
				/* Класс пользователей сайта не существует, дописываем информацию о заказчике
				в поле shop_order_description из текущей сессии */
				if ($order_row)
				{
					/* E-Mail заказчика */
					$user_email = trim(to_str($_SESSION['site_users_email']));

					/* Описание заказчика */
					$order_row['description'] .= "Информация о заказчике:\n"
					."Имя: ".to_str($_SESSION['site_users_name'])."\n"
					."Фамилия: ".to_str($_SESSION['site_users_surname'])."\n"
					."Отчество: ".to_str($_SESSION['site_users_patronymic'])."\n"
					."E-Mail: ".to_str($_SESSION['site_users_email'])."\n"
					."Телефон: ".to_str($_SESSION['site_users_phone'])."\n"
					."Факс: ".to_str($_SESSION['site_users_fax'])."\n"
					."Адрес: ".to_str($_SESSION['site_users_address'])."\n";

					/* Обязательно добавляем идентификатор! */
					$order_row['id'] = $order_id;

					$shop->InsertOrder($order_row);
				}
			}
			else
			{
				$user_email = false;
			}

			/* Формируем XML */
			$xmlData = '<?xml version="1.0" encoding="'.SITE_CODING.'"?>'."\n";
			$xmlData .= '<document_list>'."\n";

			/* Ссылака на версию для печати */
			$shop_row = $shop->GetShop($shop_id);
			if ($shop_row)
			{
				/* Получаем путь к магазину */
				$Structure = & singleton('Structure');
				$shop_path = "/".$Structure->GetStructurePath($shop_row['structure_id'], 0);
				$shop_path .= "cart/print/$order_id/";
				$xmlData .= "<print_link>".$shop_path."</print_link>";
			}

			$xmlData .= $shop->GetXmlForOrder($order_id, false, true);
			$xmlData .= $shop->GetXmlForItemsOrder($order_id);
			$xmlData .= '</document_list>'."\n";

			$xsl = new xsl();
			echo $xsl->build($xmlData, 'ОплатаБезналичнаяОтЮрЛица');

			$structure = & singleton('Structure');
			$structure_row = $structure->GetStructureItem(to_int($shop_row['structure_id']));

			$lib = new lib();
			$LA = $lib->LoadLibPropertiesValue(to_int($structure_row['lib_id']), to_int($structure_row['structure_id']));

			$date_str = date("d.m.Y H:i:s");

			/* Отправляем письмо заказчику */
			$shop->SendMailAboutOrder($shop_id,
			$order_id,
			$site_users_id,
			to_str($LA['xsl_letter_to_admin']),
			to_str($LA['xsl_letter_to_user']),
			$user_email,
			array('admin-content-type' => 'html',
			'user-content-type' => 'html',
			'admin-subject' => sprintf($GLOBALS['MSG_shops']['shop_order_admin_subject'], $order_id, $shop_row['shop_shops_name'], $date_str),
			'user-subject' => sprintf($GLOBALS['MSG_shops']['shop_order_user_subject'], $order_id, $shop_row['shop_shops_name'], $date_str)));

			$this->MailOrder($order_id);

		}
		else
		{
			switch ($order_id)
			{
				case -1:
					{
						echo "Ошибка вставки заказа в базу данных. Обратитесь к администратору.";
						break;
					}
				case -2:
					{
						echo "Ошибка - не найден магазин. Обратитесь к администратору.";
						break;
					}
			}
		}
	}

	/**
	 * Метод для отправки письма со счетом.
	 *
	 * @param int $order_id идентификатор заказа
	 */
	function MailOrder($order_id)
	{
		$shop = & singleton('shop');

		/* Информация о заказе */
		$order_row = $shop->GetOrder($order_id);
		if (!$order_row)
		{
			return false;
		}

		/* Информация о магазине */
		$shop_row = $shop->GetShop($order_row['shop_shops_id']);
		if (!$shop_row)
		{
			return false;
		}

		/* Формируем XML */
		$xmlData = '<?xml version="1.0" encoding="'.SITE_CODING.'"?>'."\n";
		$xmlData .= "<print_version>\n";
		$xmlData .= $shop->GenXml4Company($shop_row['shop_company_id']);
		$xmlData .= $shop->GetXmlForOrder(0, $order_row, true);
		$xmlData .= "</print_version>\n";

		$xsl = new xsl();
		$blank = $xsl->build($xmlData, 'БанковскийСчет');

		// Добавляем переводы строк после тегов.
		$blank = str_replace(">", ">\n", $blank);
		
		$order_row = $shop->GetOrder($order_id);

		$subject = 'Банковский счет';

		$kernel = & singleton('kernel');
		$kernel->SendMailWithFile(trim(to_str($order_row['shop_order_users_email'])), EMAIL_TO, $subject, $blank, array(), 'text/html');
	}

	/**
	 * Метод для отображения формы заказа для печати.
	 *
	 * @param int $order_id идентификатор заказа
	 */
	function PrintOrder($order_id)
	{
		$shop = & singleton('shop');

		/* Информация о заказе */
		$order_row = $shop->GetOrder($order_id);
		if (!$order_row)
		{
			return false;
		}

		/* Информация о магазине */
		$shop_row = $shop->GetShop($order_row['shop_shops_id']);
		if (!$shop_row)
		{
			return false;
		}

		/* Формируем XML */
		$xmlData = '<?xml version="1.0" encoding="'.SITE_CODING.'"?>'."\n";
		$xmlData .= "<print_version>\n";
		$xmlData .= $shop->GenXml4Company($shop_row['shop_company_id']);
		$xmlData .= $shop->GetXmlForOrder(0, $order_row, true);
		$xmlData .= "</print_version>\n";

		$xsl = new xsl();
		$blank = $xsl->build($xmlData, 'БанковскийСчет');
		echo $blank;
	}
	
	/**
	 * Изменение статуса заказа. Позволяет пользователю внедрять собственные
	 * обработчики при изменении статуса.
	 * 
	 * @param array $param массив атрибутов
	 * - $param['shop_order_id'] идентификатор заказа
	 * - $param['action'] выполняемое действие над заказом, может принимать
	 * значения: edit (редактирование товара), cancel (отмена заказ),
	 * status (изменение статуса заказа), delete (удаление заказа)
	 */
	function ChangeStatus($param = array())
	{
		
	}
}
?>