Описание требуемого взаимодействия Взаимодействие сайта и FO происходит посредством веб-службы, входящей в состав модуля FO по интеграции с сайтом. Необходимые для реализации принципы работы сайта с веб-службой: 1. Со стороны сайта необходимо реализовать автоматический импорт на сайт справочников городов, улиц и метро (только наименования). Импорт должен производиться специальной командой через страницу администрирования сайта. Для получения необходимых для импорта актуальных данных из базы FO необходимо воспользоваться соответствующими методами веб-службы. 2. Со стороны сайта необходимо реализовать автоматический импорт на сайт справочника меню, включая при необходимости иерархию категорий (разделов) меню. Импорт должен производиться специальной командой через страницу администрирования сайта. Для получения необходимых для импорта актуальных данных из базы FO необходимо воспользоваться соответствующим методом вебслужбы. 3. При авторизации пользователя на сайте необходимо запрашивать у веб-службы актуальный профиль пользователя. В профиле содержится следующая информация по клиенту: ФИО, e-mail, тип (юр./физ.), скидка, кол-во заказов, дата последнего заказа, адреса и телефоны. 4. При изменении пользователем на сайте своего профиля необходимо отсылать на веб-службу актуализированный профиль. 5. При просмотре пользователем на сайте списка своих заказов необходимо запрашивать у веб-службы актуальный список заказов со следующими полями: номер заказа, дата создания, статус, сумма к оплате, скидка, телефон, примечание к заказу, адрес, список заказанной продукции (кол-во, цена). 6. При оформлении пользователем на сайте нового заказа необходимо отсылать на веб-службу информацию о новом заказе. Если при оформлении заказа запрос к вебслужбе завершился ошибкой (нет связи, или по какой-то причине недоступен sqlсервер), то пользователю выдается сообщение, с предложением позвонить по телефону, но сам заказ кладется сайтом в некоторую буферную таблицу и в течение часа пытается все-таки установить соединение с веб-службой. Краткое описание методов веб-службы Методы работы с адресными справочниками: function GetCities: String; - возвращает список городов <Cities> <Item Name="" /> <Item Name="" /> </Cities> Комментарии к тегам и атрибутам: - Item Name – название города. function GetStreets(City: String): String; - возвращает улицы все или конкретного города: <Streets> <Item Name="" City="" /> <Item Name="" City="" /> </Streets> Комментарии к тегам и атрибутам: - Item Name – название улицы; - City – название города. function GetMetro(City: String): String; - возвращает станции метро все или конкреного города <Metro> <Item Name="" /> <Item Name="" /> </Metro> Комментарии к тегам и атрибутам: - Item Name – название станции метро. Методы для работы с профилями клиентов: function EditCustomer(XML: String): Boolean; - редактирует профиль клиента в БД FO. Пример профиля пользователя в XML: <Customer Login ="" Pwd ="" FIO = "" PersonType = ""> <Addresses> <Address CityName = "" StationName = "" StreetName = "" House = "" Corpus = "" Building = "" Flat = "" Porch = "" Floor = "" DoorCode = "" Room = "" Office = ""> <Remark><![CDATA[]]></Remark> </Address> <Address CityName = "" StationName = "" StreetName = "" House = "" Corpus = "" Building = "" Flat = "" Porch = "" Floor = "" DoorCode = "" Room = "" Office = ""> </Addresses> <Phones> <Phone Code = "" Number = ""> <Remark><![CDATA[]]></Remark> </Phone> <Phone Code = "" Number = ""/> <Phone Code = "" Number = ""/> </Phones> </Customer> function EditCustomerPassword(Login,Pwd: String): Boolean; - меняет пароль клиента в БД FO. function GetCustomers: String; - возвращает список клиентов (для первоначальной загрузки существующих клиентов в базу сайта): <Customers> <Customer Login="" FIO=""> <Phones> <Phone Code="" Number="" /> <Phone Code="" Number="" /> </Phones> </Customer> <Customer Login="" FIO=""> <Phones> <Phone Code="" Number="" /> <Phone Code="" Number="" /> </Phones> </Customer> </Customers> function GetLoginExists(Login: String): Boolean; - проверяет, есть ли уже клиент с таким логином (e-mail). function GetCustomer(Login: String): String; - возвращает профиль клиента по его логину: <Customer Login="" Pwd="" FIO="" PersonType="" OrderCount="" OrderAmount="" LastOrder="" OrdersDiscount="" GroupDiscount="" CardsDiscount=""> <Addresses> <Address CityName="" StationName="" StreetName="" House="" Corpus="" Building="" Flat="" Porch="" Floor="" DoorCode="" Room="" Office="15"> <Remark><![CDATA[]]></Remark> </Address> <Address CityName="" StationName="" StreetName="" House="" Corpus="" Building="" Flat="" Porch="" Floor="" DoorCode="" Room="" Office=""> <Remark><![CDATA[]]></Remark> </Address> </Addresses> <Phones> <Phone Code="" Number=""> <Remark><![CDATA[]]></Remark> </Phone> <Phone Code="" Number=""> <Remark><![CDATA[]]></Remark> </Phone> <Phone Code="" Number=""> <Remark></Remark> </Phone> </Phones> </Customer> Комментарии к тегам и атрибутам: - Customer Login – логин пользователя, в качестве логина используется e-mail; - Pwd – пароль пользователя; - FIO – ФИО клиента; - PersonType – тип клиента «Физ. лицо/Юр. лицо»; - OrderCount – общее (накопительное) кол-во исполненных Заказов данного клиента в БД FO; - OrderAmount – общая (накопительная) сумма исполненных Заказов данного клиента в БД FO; - LastOrder – дата последнего Заказа данного клиента в БД FO; - OrdersDiscount – процент скидки клиента, установленный по накопительной сумме и количеству Заказов; - GroupDiscount – процент скидки клиента, установленный по категории клиента; - CardsDiscount – процент скидки клиента, установленный по дисконтной карте; - CityName – название города; - StationName – название станции метро; - StreetName – название улицы; - House – номер дома; - Corpus – номер корпуса; - Building – номер строения; - Flat – номер квартиры; - Porch – номер подъезда; - Floor – этаж; DoorCode – код домофона; Room – номер комнаты; Office – номер офиса; Code – код номера телефона; Number – номер телефона; <Remark> - комментарии к адресам и телефонам клиента. Методы работы с меню, скидки, бонусные позиции: function GetMenu: String; - возвращает меню, с учетом иерархии категорий: <Menu> <Category Code="" ParentCode="" Level="" Name="" Sort="" Color=""> <Items></Items> <Category Code="" ParentCode="" Level="" Name="" Sort="" Color=""> <Items> <Item Code="" Name="" Price="" ></Item> <Item Code="" Name="" Price="" ></Item> </Items> </Category> <Category Code="" ParentCode="" Level="" Name="" Sort="" Color=""> <Items> <Item Code="" Name="" Price="" ></Item> <Item Code="" Name="" Price="" ></Item> </Items> </Category> </Category> </Menu> Комментарии к тегам и атрибутам: - Category Code – код категории (раздела) меню; - ParentCode – код вышестоящей категории (раздела) в иерархической структуре категорий (разделов) меню; - Level – уровень категории в иерархической структуре категорий (разделов) меню; - Name – наименование категории (раздела) меню; - Sort – порядковый номер отображения категории (раздела) меню, для задания необходимого порядка сортировки не категорий (разделов) (не по кодам и не по алфавиту). - Color – цвет отображения категории; - Item Code – код (артикул) позиции меню (блюда); - Name – наименование позиции меню (блюда); - Price – цена позиции меню (блюда). function GetBonuses: String; - возвращает информацию по бонусам <Bonuses> <Item Amount ="" Code="" Qty="" /> <Item Amount="" Code="" Qty="" /> </Bonuses> Комментарии к тегам и атрибутам: - Amount – величина суммы Заказа; - Code – код (артикул) позиции меню (блюда), добавляемой в качестве бонусных позиций в состав Заказа, при сумме Заказа свыше, указанной в Item Amount; - Qty – количество добавляемых бонусных позиций. function GetDiscounts: String; - возвращает информацию по скидкам <Discounts> <Item OrdersAmount="" OrdersCount="" DiscountPercent="" /> <Item OrdersAmount="" OrdersCount="" DiscountPercent="" /> </Discounts> Комментарии к тегам и атрибутам: - OrdersAmount – величина общей (накопительной) суммы Заказов в БД FO; - OrdersCount – величина общего (накопительного) количества Заказов в БД FO; - DiscountPercent – процент скидки, применяемый к сумме Заказа, при условии общей (накопительной) суммы Заказов клиента и/или их общего (накопительного) количества в БД FO. Методы обработки Заказов: function GetOrders(Login,Сode: String): String; - возвращает список заказов (или конкретный заказ) данного клиента: <Orders> <Order Code="" DateCreate="" Status="" Amount="" DiscountPercent="" AmountNight="" TotalClearAmount=""> <Customer Login="" Pwd=""> <Remark><![CDATA[]]></Remark> </Customer> <Phone Code="" Number=""> <Remark><![CDATA[]]></Remark> </Phone> <Address CityName="" StationName="" StreetName="" House="" Corpus="" Building="" Flat="" Porch="" Floor="" DoorCode="" Room="" Office=""> <Remark><![CDATA[]]></Remark> </Address> <Products> <Product Code="" Qty="" Price=""> <Modificator Code=""/> <Remark><![CDATA[]]></Remark> </Product> <Product Code="" Qty="" Price=""> <Modificator Code=""/> <Remark><![CDATA[]]></Remark> </Product> <Bonus Code="" Qty="" /> </Products> <Remark><![CDATA[]]></Remark> </Order> </Orders> function AddOrder(Order,OrderText: String): String; - добавляет новый заказ <Order DiscountPercent="" PayMethod = "" QtyPerson="" ChangeAmount=""> <Customer Login="" FIO=""/> <Address StationName="" StreetName="" House="" Corpus="" Building="" Flat="" Porch="" Floor="" DoorCode=""/> <Phone Code="" Number="" /> <Products> <Product Code="" Qty="" > <Modificator Code=""/> <Modificator Code=""/> <Remark><![CDATA[]]></Remark> </Product> <Product Code="" Qty="" /> <Bonus Code="" Qty="" /> </Products> <Remark><![CDATA[]]></Remark> </Order> Комментарии к тегам и атрибутам: - Order Code – Номер Заказа; - DateCreate – дата создания Заказа; - Status – состояние исполнения Заказа; - Amount – сумма Заказа; - DiscountPercent – процент скидки; - AmountNight – сумма за доставку (если доставка платная); - TotalClearAmount – сумма Заказа к оплате (с учетом скидки и суммы доставки); - PayMethod – метод оплаты (наличные, безнал., web-money и т.д. и т.п.); - QtyPerson – количество персон; - ChangeAmount – сумма с которой надо сдать сдачу (например, если клиент будет расплачиваться купюрой в 5000 руб., то у курьера должны быть с собой разменные деньги на сдачу с указанной суммы); - OrdersCount – величина общего (накопительного) количества Заказов в БД FO; - DiscountPercent – процент скидки, применяемый к сумме Заказа, при условии общей (накопительной) суммы Заказов клиента и/или их общего (накопительного) количества в БД FO; - Product Code – код (артикул) позиции меню (блюда), включенного в состав Заказа; - Bonus Code – код (артикул) позиции меню (блюда), включенного в состав Заказа в качестве бонусной позиции; - Qty – количество позиции состава Заказа; - Price – цена позиции меню (блюда), включенного в состав Заказа; - Modificator Code – код модификатора; Служебные методы: function GetVersion: String; - возвращает текущую версию базы (вспомогательный метод) procedure SendTestMail(EMail: String); - отсылает тестовое письмо для проверки возможности отсылки логов с ошибками (вспомогательный метод).