Контрольні нотатки для сертифікаційного екзамену Мадженто-розробника – ч.9

Продажі – частка в екзамені: 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.');  }  

Цей код проводить валідацію того, що адреса має ім’я клієнта, пов’язане з нею.



 

 

Адміністрування замовлень

Щоб створити замовлення в інтерфейсі адміністратора, слід дотримуватися наступних кроків:

  1. Продажі > Замовлення > Створити нове замовлення (Sales > Orders > Create New Order)
  2. Обрати клієнта
  3. Обрати магазин та ввести подробиці:
    1. Товари
    2. Платіжна адреса
    3. Адреса доставки
    4. Метод доставки
    5. Метод оплати
  4. Розмістити замовлення

 

 

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/*

Тут цікаве наступне:

  • Позиція: Містить логіку для кожного окремого елемента в рахунку-фактурі
  • Коментар: Коментар, який можна застосовувати до рахунку-фактури
  • Усього: Містить підсумки, пов’язані з рахунком-фактурою. Це такі речі, як проміжна сума, податок, загальна сума тощо
  • API: Доступ до рахунків-фактур по API з можливістю створення нових рахунків-фактур, обробки рахунків-фактур, скасування рахунків-фактур тощо

 

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) використовуються для копіювання даних клієнта з Цитати до Замовлення, тому їх слід враховувати при додаванні користувацького атрибута.

Клієнти можуть належати лише до однієї групи.

 

 

 

Джерело: http://magecert.com/sales.html

Переклад українською: SebWeo