Source of file SalesAdminExtras.php
Size: 5,973 Bytes - Last Modified: 2021-12-23T10:39:35+00:00
/var/www/docs.ssmods.com/process/src/src/Cms/SalesAdminExtras.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 | <?php namespace Sunnysideup\Ecommerce\Cms; use SilverStripe\Admin\ModelAdmin; use SilverStripe\Core\Convert; use SilverStripe\Forms\GridField\GridField; use SilverStripe\ORM\DataList; use SilverStripe\View\Requirements; use Sunnysideup\Ecommerce\Config\EcommerceConfig; use Sunnysideup\Ecommerce\Forms\Gridfield\GridFieldExportSalesButton; use Sunnysideup\Ecommerce\Forms\Gridfield\GridFieldPrintAllInvoicesButton; use Sunnysideup\Ecommerce\Forms\Gridfield\GridFieldPrintAllPackingSlipsButton; use Sunnysideup\Ecommerce\Forms\Gridfield\GridFieldPrintInvoiceButton; use Sunnysideup\Ecommerce\Model\Address\BillingAddress; use Sunnysideup\Ecommerce\Model\Address\ShippingAddress; use Sunnysideup\Ecommerce\Model\Money\EcommercePayment; use Sunnysideup\Ecommerce\Model\Order; use Sunnysideup\Ecommerce\Model\OrderItem; use Sunnysideup\Ecommerce\Model\OrderModifier; use Sunnysideup\Ecommerce\Model\Process\OrderEmailRecord; use Sunnysideup\Ecommerce\Model\Process\OrderStatusLog; use Sunnysideup\Ecommerce\Traits\EcommerceModelAdminTrait; /** * @description: CMS management for everything you have sold and all related data (e.g. logs, payments) * * @authors: Nicolaas [at] Sunny Side Up .co.nz * @package: ecommerce * @sub-package: cms */ class SalesAdminExtras extends ModelAdmin { use EcommerceModelAdminTrait; /** * Change this variable if you don't want the Import from CSV form to appear. * This variable can be a boolean or an array. * If array, you can list className you want the form to appear on. i.e. array('myClassOne','myClasstwo'). */ public $showImportForm = false; /** * standard SS variable. * * @var string */ private static $url_segment = 'sales-advanced'; /** * standard SS variable. * * @var string */ private static $menu_title = 'Sales Details'; /** * standard SS variable. * * @var array */ private static $managed_models = [ Order::class, OrderStatusLog::class, OrderItem::class, OrderModifier::class, OrderEmailRecord::class, BillingAddress::class, ShippingAddress::class, EcommercePayment::class, ]; /** * standard SS variable. * * @var float */ private static $menu_priority = 3.11; /** * standard SS variable. * * @var string */ private static $required_permission_codes = 'CMS_ACCESS_SalesAdminExtras'; /** * standard SS variable. * * @var string */ private static $menu_icon = 'vendor/sunnysideup/ecommerce/client/images/icons/money-file.gif'; /** * @return array Map of class name to an array of 'title' (see {@link $managed_models}) * we make sure that the Order Admin is FIRST */ public function getManagedModels() { $models = parent::getManagedModels(); $orderModelManagement = isset($models[Order::class]) ? $models[Order::class] : null; if ($orderModelManagement) { unset($models[Order::class]); return [Order::class => $orderModelManagement] + $models; } return $models; } /** * @return \SilverStripe\ORM\DataList */ public function getList() { $list = parent::getList(); if (is_subclass_of($this->modelClass, Order::class) || Order::class === $this->modelClass) { $submittedOrderStatusLogClassName = EcommerceConfig::get(OrderStatusLog::class, 'order_status_log_class_used_for_submitting_order'); $submittedOrderStatusLogTableName = OrderStatusLog::getSchema()->tableName($submittedOrderStatusLogClassName); $list = $list ->LeftJoin('OrderStatusLog', '"Order"."ID" = "OrderStatusLog"."OrderID"') ->LeftJoin($submittedOrderStatusLogTableName, '"OrderStatusLog"."ID" = "' . $submittedOrderStatusLogTableName . '"."ID"') ->where('"OrderStatusLog"."ClassName" = ' . Convert::raw2sql($submittedOrderStatusLogClassName, true)) ; } $newLists = $this->extend('updateGetList', $list); if (is_array($newLists) && count($newLists)) { foreach ($newLists as $newList) { if ($newList instanceof DataList) { $list = $newList; } } } return $list; } public function getEditForm($id = null, $fields = null) { $form = parent::getEditForm($id, $fields); if (is_subclass_of($this->modelClass, Order::class) || Order::class === $this->modelClass) { $gridField = $form->Fields()->dataFieldByName($this->sanitiseClassName($this->modelClass)); if ($gridField) { if ($gridField instanceof GridField) { $config = $gridField->getConfig(); $exportButton = new GridFieldExportSalesButton('buttons-before-left'); $exportButton->setExportColumns($this->getExportFields()); $config->addComponent($exportButton); $printAllInvoices = new GridFieldPrintAllInvoicesButton('buttons-before-left'); $config->addComponent($printAllInvoices); $printAllPackingSlips = new GridFieldPrintAllPackingSlipsButton('buttons-before-left'); $config->addComponent($printAllPackingSlips); //per row ... $config->addComponent(new GridFieldPrintInvoiceButton()); // $config->addComponent(new GridFieldPrintPackingSlipButton()); } } } return $form; } protected function init() { parent::init(); Requirements::javascript('sunnysideup/ecommerce: client/javascript/EcomBuyableSelectField.js'); Requirements::css('sunnysideup/ecommerce: client/css/OrderStepField.css'); } } |