Коварная война россии против Украины. Ориентировочные потери врага
(по состоянию на 22.04.2024)
460260
солдат
348
самолетов
325
вертолетов
7236
танков
13904
ББМ
11736
артиллерия
768
ПВО
1046
РСЗО
15812
машин
26
корабли и катера
Контрольные заметки для сертификационного экзамена Мадженто-разработчика – ч.8
Опубликовано Обновлено: 09.02.2024

Контрольные заметки для сертификационного экзамена Мадженто-разработчика – ч.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

 

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *