Категории: Magento - как сделать

Контрольные заметки для сертификационного экзамена Мадженто-разработчика – ч.8

Оформление заказа – доля в экзамене: 16%.

 

Квоты

Magento использует модель квот для хранения информации о заказе, прежде чем клиент завершит его. Сюда входит:

  • Информация о потребителе
  • Позиции для заказа
  • Платежный адрес
  • Адрес доставки
  • Метод доставки
  • Способы оплаты
  • Общая цена

 

Платежный адрес и адрес для доставки используют одну модель Mage_Sales_Model_Quote_Address. Тип адреса устанавливается в качестве поля в модели.

Адрес доставки (или платежный адрес, если продукт является виртуальным или загружаемым) используется для расчета общей суммы заказа и доступных способов доставки.

В конце процесса оформления заказа выполняется полное квотирование и превращается в заказ.

 

Добавление квот

Модель Корзины используется для манипулирования (добавление, удаление и обновление) элементов в квотах. Она выполняет дополнительную проверку, например установка минимального количества заказов для позиции, когда она добавляется в корзину.

Когда товар добавляется в корзину, вызывается метод _prepareProduct(), чтобы подготовить данные товара для хранения в квоте. Для простых товаров загружаются все данные товара в модель (включая варианты товара, которые хранятся в таблице sales_flat_quote_item_option). Сгруппированный товар, например, загружает данные всех связанных товаров.

Для получения информации о товаре, например, специальных и настраиваемых параметров, он превращается в объект Mage_Sales_Quote_Item_Option и сохраняется в базе данных в таблице sales_flat_quote_item_option.

 

Квоты в базе данных

Квоты сохраняются в базе данных. Большинство хранится в таблице sales_flat_quote, но более сложная информация сохраняется в дополнительных таблицах, которые ссылаются на начальную квоту.

 

Оформление заказа

Параметры потока оформления заказа

По умолчанию предусмотрено два варианта оформления заказа: одностраничный и с мульти-доставкой. В мульти-доставке товарные позиции добавляются к каждому адресу доставки (хотя виртуальные элементы добавляются к адресу оплаты), а не в конце оформления заказа для каждого адреса. Это отражается в базе данных, где эти позиции сохраняются в таблице sales_flat_quote_address_item, тогда как квоты одностраничного заказа в таблице sales_flat_quote_item.

Мульти-доставка использует отдельный контроллер Mage_Checkout_MultishippingController и индивидуальный тип оформления заказа Mage_Checkout_Model_Type_Mulitishipping. Кроме того, она повторно использует много тех же моделей, и обычный заказ. Чтобы настроить или расширить мульти-доставку, эти два класса должны быть расширены и изменены.

В мульти-доставке виртуальные элементы добавляются к платежному адресу (вместо одного из адресов доставки), поскольку виртуальная квота будет содержать позиции только для платежного адреса. Квоты с виртуальными позициями создают дополнительный заказ с платежным адресом, который содержит эти элементы.

Сгруппированные товары добавляются в корзину как несколько отдельных товаров, поэтому их можно выбирать для доставки на различные адреса, используя регулярный процесс мульти-доставки. Однако связанные товары (bundled) нельзя разделить между несколькими адресами.

 

Итоги (totals)
Квоты позиций, ценовые правила корзины и расходы на доставку составляют общую стоимость квоты.
Платежные адреса и адреса доставки также влияют на общую сумму, так как они используются для определения налоговых ставок, способов доставки и способов оплаты.
В моделях итога отслеживается стоимость заказа или квоты. Каждый из итогов имеет код, который связан с ним, который может быть использован для его получения и обработки. Модели итога обрабатывают адрес, чтобы добавить в коллекцию итоги для него. С помощью адреса модели получают доступ к квоте и квотам позиций.

Эти модели можно перезаписать или можно добавить новые модели итога, расширив модель Mage_Sales_Quote_Address_Total_Abstract и зарегистрировав ее в config.xml.

<config>
 <global>
  <sales>
   <quote>
    <totals>
     <{code}>
      <class>{grouped_class_name}</class>
      <before>{csv_other_totals}</before>
      <after>{csv_other_totals}</after>
     </{code}>
    </totals>
   </quote>
  </sales>
 </global>
</config>

 

Приоритет выполнения модели итога можно настроить с помощью элементов <before> и <after> в определении итога (totals). Однако порядок выполнения заказа по умолчанию таков:

  1. По позициям
  2. Суммарно
  3. Доставка
  4. Налог
  5. Общий итог

 

Этот процесс управляется моделью Mage_Sales_Model_Quote_Address_Total_Collector, которая вызывается из адреса, используя метод collectTotals(). Этот метод вызывается каждый раз, когда квота обновляется, например, на каждом этапе оформления заказа. Этот метод также направляет события _collect_totals_before и _collect_totals_after.

 

Авторизация и зачисление платежей

Авторизация карты и зачисление происходят при размещении заказа ($order->place()), возникающего при сохранении заказа. В зависимости от способа оплаты, авторизация может быть зарезервирована в настоящее время, а затем происходит зачисление после создания счета-фактуры.

 

Снижение количества позиций на складе

Для одностраничного заказа (onepage checkout) количество на складе уменьшается с помощью наблюдателя Mage_CatalogInventory для события sales_model_service_quote_submit_before. Это событие отправляется непосредственно перед заказом и событием checkout_submit_all_after, которое срабатывает в конце одностраничного заказа (наблюдатель имеет определенные проверки, чтобы предотвратить двукратное уменьшение), а также после того, как все заказы были созданы в мульти-доставке.

 

Ценовые правила корзины

Ценовые правила для корзины применяют скидки, и они могут принимать набор условий, при которых они срабатывают. Эта функциональность обеспечивается модулем Mage_SalesRule.

В отличие от ценовых правил каталога, ценовые правила корзины применяют изменения цены (скидки) на основе информации в квоте, например, группы клиентов, промо-кода, а не на основе товара или категории.

Ограничение ценовых правил корзины включают:

  • Хотя для одной корзины может применяться несколько правил, одновременно может применяться только один промо-код.
  • Правила работают независимо друг от друга, поэтому правило не может быть указано как активное на основе других правил.
  • В панели администратора при просмотре заказов ценовые правила корзины могут быть отключены для определенных элементов, но они всегда применяются ко всем элементам во фронтэнде.

 

Способы доставки

В Magento способы доставки расширяют модель Mage_Shipping_Model_Carrier_Abstract и зарегистрированы в конфигурации магазина со значениями по умолчанию (и статической конфигурацией типа названий моделей), установленные в файле config.xml.

<config>
 <default>
  <carriers>
   <{code}>
    <active>{0|1}</active>
    <sallowspecific>{0|1}</sallowspecific>
    <model>{grouped_class_name}</model>
    <name>{name}</name>
    <title>{title}</title>
    ...
   </{code}>
  </carriers>
 </default>
</config>

 

Методы доставки называются перевозчиками (carriers), поскольку они определяют способ доставки, например, как Royal Mail или FedEx, и могут предложить несколько ставок в рамках этого метода, например, Стандартная или Доставка на следующий день.

Существующие способы доставки, которые предоставлены Magento, могут быть настроены путем перезаписи их модели.

 

Расчет стоимости доставки

Расчет стоимости доставки осуществляется в квоте Адреса (requestShippingRates()), которая создает запрос, содержащий все соответствующие данные, такие как пункт назначения и вес упаковки и вызывает метод Mage_Shipping_Model_Shipping::collectRates($request). Он обрабатывает через цикл всех доступных перевозчиков, проверяет запрос и вызывает метод collectRates($request) для каждого из них, чтобы получить имеющиеся ставки.

 

Таблица ставок (TableRates)

Метод доставки TableRate позволяет создавать набор правил, указанных в формате csv, для установления цены доставки, которая зависит от места назначения и стоимости заказа, веса или количества позиций. Используемый коэффициент устанавливается на уровне магазина и должен задействоваться для магазина, например, правила цены и веса нельзя смешивать на уровне магазина.

 

Способы доставки в США

Некоторые перевозчики обращаются с запросом к посторонним службам, чтобы получить предлагаемые тарифы. FedEX, IPS и USPS расширяют модель Mage_Usa_Model_Shipping_Carrier_Abstract и получают свои тарифы с помощью HTTP или SOAP-запросов.

 

Методы оплаты

Методы оплаты в Magento расширяют модель Mage_Payment_Model_Method_Abstract, и, как и способы доставки регистрируются с помощью конфигурации магазина со значениями по умолчанию (и дополнительной конфигурацией), установленными в config.xml.

<config>
 <default>
  <payment>
   <{name}>
    <active>{0|1}</active>
    <model>{grouped_class_name}</model>
    <order_status>{order_state}</order_status>
    <title>{title}</title>
    <allowspecific>{0|1}</allowspecific>
    <sort_order>{sort_order}</sort_order>
    <group>{group}</group>
    <payment_action>{action}</payment_action>
    ...
   </{name}>
  </payment>
 </default>
</config>

 

Большинство параметров способа оплаты, как правило, можно настроить в Конфигурации системы или манипулируя значениями по умолчанию в config.xml. Например, действие платежа по умолчанию, как правило, определяется в поле <payment_action>. Если нужно более глубокая настройка, могут быть перезаписаны модели метода оплаты.

Информация о платеже добавляется к методам с использованием метода Mage_Sales_Model_Quote_Payment::importData($data) и вызывается методом savePayment() в одностраничном заказе. Он посылает событие sales_quote_payment_import_data_before перед вызовом метода assignData($data) в модели метода оплаты. Наблюдая это событие, данные могут быть изменены, прежде чем они будут сохранены в методе.

Методы оплаты реализуют логику конкретного способа оплаты, например, с помощью кредитных карт. Между тем, платежные модели управляют методами оплаты через квоту или заказ и обрабатывают операции, связанные с оплатой, такие как зачисление или возмещение.

Модули методов оплаты обычно содержат несколько блоков для отображения платежных форм на странице оформления заказа, например, формы для кредитных карт, а также контроллеры для обработки переадресации на любые платежные шлюзы.

Платежные соглашения встроены в движке Magento. Методы оплаты устанавливают идентификатор платежного соглашения для объекта оплаты с помощью:

$order->getPayment()->setBillingAgreementData($data);

 

Перевод: SebWeo

 

Share

Последние посты

Самые красивые и впечатляющие мосты со всего мира (ТОП-10)

Мост — это нечто большее, чем просто сооружение, соединяющее два берега. Для того, чтобы появился… Читать далее

19/04/2024

Соломон

Жизнь нас учит, что свою пару мы познаем, когда разводимся, своих братьев мы познаем, когда… Читать далее

18/04/2024

Чак Паланик

Кто может — тот делает. Кто не может — тот критикует Чак Паланик   Читать далее

17/04/2024

Ричард Бах

Ни одно желание не дается тебе отдельно от силы, позволяющей его осуществить. Хотя, возможно, для… Читать далее

16/04/2024

Стивен Кинг

Жизнь – это непрерывный опыт, и даже самые плохие моменты занимают свое место в пазле… Читать далее

15/04/2024

неизвестный автор

Люди, которые любят одиночество, дорого заплатили за дружбу с кем-то... неизвестный автор   Читать далее

14/04/2024