Продажи – доля в экзамене: 11%.
Mage_Sales_Model_Order
Модель заказа в Magento. Она обрабатывает все, что связано с самим заказом, некоторые из важнейших из которых – цены, адреса доставки и оплаты, способ доставки, скидки, статус, клиент и другие. Длина файла составляет 2000+ строк, поэтому вы можете представить себе, какова другая магия в нем.
Mage_Sales_Model_Quote
Это то, чем является заказ, прежде чем он превращается в полноценный заказ. Квота создается клиентом во время сеанса, и когда она сохраняется, то превращается в заказ с использованием метода Mage_Sales_Model_Service_Quote::submitAll()
. Этот метод использует модель Mage_Sales_Model_Convert_Quote
для облегчения этого процесса.
Mage_Sales_Model_Service_Order
Эта модель используется для преобразования Mage_Sales_Model_Order
в такие вещи, как модели доставки, модели счетов-фактур или возврата к квотам позиций. Mage_Sales_Model_Convert_Quote
используется для конвертирования квот, используя наборы полей (fieldsets).
Наборы полей (fieldsets)
Определяются в Mage/Sales/etc/config.xml
и решают, какие данные копируются между заказами и квотами, когда они конвертируются. Например, при создании заказа с квоты, позиции, адреса, методы доставки и способы оплаты должны быть перенесены из квоты в заказ.
Mage_Sales_Model_Order_Address
Эта модель представляет собой адрес. Основная ее роль заключается в том, чтобы хранить все данные, которые могут присутствовать в адресе, например, название, улица, регион и тому подобное. Она также проводит валидацию этих данных, например:
if (!Zend_Validate::is($this->getFirstname(), 'NotEmpty')) { $errors[] = Mage::helper('customer')->__('Please enter the first name.'); }
Этот код проводит валидацию того, что адрес имеет имя клиента, связанное с ним.
Чтобы создать заказ в интерфейсе администратора, следует придерживаться следующих шагов:
Mage_Adminhtml_controllers_Sales_Order_CreateController
Это место, где запускается запрос формы администратора. Ее задача состоит в том, чтобы создать объект Mage_Adminhtml_Model_Sales_Order_Create
из данных, которые вводятся в форму администрирования.
Этот контроллер позволяет добавлять любые элементы в заказ (а не только товары, подлежащие продаже).
Основным действием этого контроллера является loadBlockAction
. Оно попадает через AJAX каждый раз, когда поле в области администратора становится не активным.
Mage_Adminhtml_Model_Sales_Order_Create
Это эквивалент модели Mage_Sales_Model_Order
для администратора. Он обрабатывает позиции, адреса, доставку, платежную информацию и создает новые квоты с заказов.
Расчет стоимости заказа для администратора
Виджет используется для добавления товаров к заказу. Затем он размещается в бэкенде, который прилагается к модели заказа через Mage_Adminhtml_controllers_Sales_Order_CreateController
if ($this->getRequest()->has('item') && !$this->getRequest()->getPost('update_items') && !($action == 'save')) { $items = $this->getRequest()->getPost('item'); $items = $this->_processFiles($items); $this->_getOrderCreateModel()->addProducts($items); }
Функция addProducts()
добавит каждый из этих товаров к объекту Mage_Sales_Model_Quote
и установит флажок, который означает, что итоги нужно запомнить. Затем, когда сохраняете квоту, этот флажок проверяется, а итоговые данные коллекционируются.
public function saveQuote() { if (!$this->getQuote()->getId()) { return $this; } // Здесь проверяется флажок и собираются итоговые данные, если они установлены if ($this->_needCollect) { $this->getQuote()->collectTotals(); } $this->getQuote()->save(); return $this; }
Редактирование заказов
Заказ невозможно отредактировать, хотя можно создать новый заказ с необходимыми изменениями. Поэтому редактирование заказов обрабатывается почти так же, как создание заказов. Контроллер изменения на самом деле расширяет контроллер создания. Поля формы заполняются сохраненными данными с сохраненного заказа, и он работает точно так же, как и при создании.
Заказ можно перезаказать, при этом копируется информация из существующего заказа в новую квоту.
Состояния и статусы заказа
Magento использует состояния заказа, чтобы определить состояние, в котором находится заказ. Администраторы магазина могут использовать статусы заказа, чтобы предоставить больше информации о состоянии (например, есть ли заказ на условиях «Новый» по предоплате или наличными при доставке).
Статус может иметь только одно состояние. Например, состояние pending_review
имеет статусы fraud
(мошенничество) и payment_review
(проверка платежа). Новые статусы можно добавить в интерфейсе администратора и назначить состоянию.
Это классы и методы, которые отвечают за такие платежные операции как, например, авторизация и обработка кредитных карточек.
Обработка манипулирует средствами со счет-фактуры исходя из конкретного способа оплаты. А платеж (Pay) – это метод, по которому общие данные обновляются для счета-фактуры.
Mage_Sales_Model_Order_Invoice
Это модель, которая содержит все детали заказа. Это место, где начинается обработка и оплата. Однако основная часть логики содержится в Mage_Sales_Model_Order_Payment
.
Mage_Sales_Model_Order_Invoice/*
Здесь интересное следующее:
Mage_Sales_Model_Order_Payment
Здесь происходит основа операций обработки и оплаты. Обработка – это место, где обрабатываются средства по заказу, и оплата обновляет заказ, чтобы отразить это.
Mage_Payment_Model_Info
Модель информации о платеже. Она наследуется от Mage_Sale_Model_Order_Payment
.
Mage_Payment_Model_Method_Abstract
Все способы оплаты наследуют эту модель. По умолчанию они включают Cc (кредитная карта), Checkmo (чек / денежный перевод), Free (бесплатно) и несколько других. Здесь проводится проверка, которая может быть специфической для способа оплаты, например, Cc или обрабатывается абстрактным методом, например Checkmo.
Счета-фактуры
Информация о счете-фактуре сохраняется в нескольких таблицах базы данных. Дополнительная информация используется для хранения конкретной информации о способе оплаты.
Доставка и отслеживание
Доставку можно создать из админки. Она контролируется контроллером Mage_Adminhtml_Sales_Order_ShipmentController
. Модели, которые используются для контроля – это Mage_Sales_Model_Order_Shipment
и Mage_Sales_Model_Order_Shipment_Track
.
Данные хранятся в sales_flat_shipment
и других связанных таблицах.
Для заказа могут быть созданы несколько поставок и они могут быть направлены на несколько адресов, но только для заказов с мульти-доставкой.
Возврат денежных средств
Возврат заказов осуществляется в Mage_Adminhtml_Sales_Order_CreditmemoController
, который использует Mage_Sales_Model_Order_Creditmemo
для обработки возмещения. Возврат средств сохраняется в sales_flat_creditmemo
и связанных таблицах.
Каждый способ оплаты должен указать, может ли он осуществить возмещение, и предоставить способ это сделать. Если метод позволяет вернуть средства в режиме он-лайн, возмещение будет автоматизировано и обработано с помощью метода. Для возмещения заказ в режиме офлайн нужно учесть, что после возврата необходимо будет принять меры вне системы Magento.
Возмещение объединяет сумму, которая возвращается за каждую часть заказа (позиции, налог, доставка, общая сумма и т.п.). Из этого складывается общая сумма заказа.
Налоги для возмещения обрабатываются по настройке в админке, то есть по происхождению, счету или адресу доставки.
Операции с частичным заказом
В заказах Magento существует три вида частичных операций: счет-фактура, доставка и возмещение. Частично означает, что они могут повлиять только на часть заказа (например, на две из пяти позиций, которые отправляются). Все эти операции устанавливают порядок для обработки с помощью метода setIsInProcess()
.
Перед сохранением заказ проверяет свое состояние. Если все операции выполнены полностью, это означает, что он завершен. В противном случае, если установлен флажок is_in_process
, он перемещается в состояние обработки.
Каждая из частных операций имеет собственные модели и таблицы для хранения данных, связывая их с заказом через order_id
и манипулируя блоком итогов заказов.
Отмена заказа
Заказы в Magento могут быть отменены, пока не будут выставлены счета за все позиции, например во время ожидания и состояния обработки. Это автоматически отменяет пункты оплаты и заказ (которые просто устанавливают отмененные суммы налога на позицию). Счета-фактуры могут быть отменены, возвращая итоги заказа в состояние предварительного счета-фактуры. То же касается и возвратов. Нельзя отменить только доставки (отправки).
В большинстве случаев, когда операции отменяются, суммы налогов возвращаются так, как они были до операции (как и другие данные о ценах). В случае заказа все отмененные суммы устанавливаются для совокупных счетов-фактур (все, что еще не было выставлено по счету, отменяется).
Счета и возмещения не могут быть отменены из фронтенда, даже если такая функциональность была реализована.
Редактирования заказа
При редактировании заказа в Magento создается новый заказ с большинством значений, предварительно заполненных из оригинального заказа, за исключением информации о кредитной карте и способе доставки. После создания нового заказа оригинальный заказ отменяется. Номер заказа будет таким же, как и в заказе до редактирования, но с дефисом (или тире) и номером версии. Например, если исходный номер заказа был #1000000001
, то измененный заказ будет иметь номер #100000001-1
.
Клиенты
Модуль Mage_Customer
контролирует обработку информации о клиентах магазина и интерфейс клиентов, в котором информацию можно обновлять и клиенты могут просматривать свои заказы.
Клиенты также могут сохранять свои адреса в свой аккаунт, чтобы их можно было быстро использовать, не вводя эти данные каждый раз при заказе.
Клиенты хранятся как EAV модели с EAV структурой таблицы. Это означает, что клиентам можно легко добавить новые атрибуты, хотя в Community Edition для этого не существует интерфейса.
Клиентские сущности используют модель ресурса Mage_Customer_Model_Resource_Customer
. Данные клиента проверяются с помощью метода validate()
для объекта перед его сохранением. Атрибуты используют стандартные правила проверки подлинности своих данных.
Большинство электронных писем, направляемых клиентам, руководствуются транзакционными электронными письмами Magento. Есть бэкенд интерфейс для создания новых шаблонов электронной почты (из уже существующих, если это необходимо), и они могут быть назначены для электронной переписки в конфигурации системы.
С точки зрения клиента, нет разницы между адресом выставления счетов и адресами доставки. Значение по умолчанию можно установить для обоих случаев, чтобы избежать дальнейшего выбора. Сохраненные адреса отображаются в окне выбора при оформлении заказа.
Правила каталогов, правила корзины и налоги можно настроить для групп клиентов (например, клиентам в группе лояльности можно предоставлять дополнительную скидку).
Адреса клиентов также являются EAV сущностями, что обеспечивает простой способ добавления собственных атрибутов. Наборы полей (fieldsets) используются для копирования данных клиента с Цитаты в Заказ, поэтому их следует учитывать при добавлении пользовательского атрибута.
Клиенты могут принадлежать только к одной группе.
Перевод: SebWeo
Учеба за границей уже давно ассоциируется с качественным образованием, новыми возможностями и множеством перспектив. Но…
Выбор мастера для ремонта и перетяжки мебели — задача, которая требует вдумчивого подхода. Ведь от…
Выбор идеального хостинга под свой сайт может быть довольно запутанным делом, особенно когда существует так…
Чтобы избегать ошибок, нужно набираться опыта; чтобы набираться опыта, надо делать ошибки Лоуренс Питер
Краткое определение Черного SEO Черное СЕО (или Черная оптимизация) — это любая практика, целью которой…
Получение водительских прав категории C открывает двери к профессиональной деятельности, связанной с управлением грузовыми автомобилями.…