Source of file EcommerceTaskOrderItemsPerCustomer.php
Size: 4,695 Bytes - Last Modified: 2021-12-23T10:39:35+00:00
/var/www/docs.ssmods.com/process/src/src/Tasks/EcommerceTaskOrderItemsPerCustomer.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 | <?php namespace Sunnysideup\Ecommerce\Tasks; use SilverStripe\Control\HTTPRequest; use SilverStripe\Dev\BuildTask; use Sunnysideup\Ecommerce\Config\EcommerceConfig; use Sunnysideup\Ecommerce\Model\Order; use Sunnysideup\Ecommerce\Model\OrderItem; use Sunnysideup\Ecommerce\Model\Process\OrderStatusLog; /** * set the order id number. * * @authors: Nicolaas [at] Sunny Side Up .co.nz * @package: ecommerce * @sub-package: tasks */ class EcommerceTaskOrderItemsPerCustomer extends BuildTask { protected $title = 'Export all order items to CSV per customer'; protected $description = 'Allows download of all sales items with all details as CSV. Excludes sales made by Admins'; public function run($request) { //reset time limit set_time_limit(1200); //file data $now = date('d-m-Y-H-i'); $fileName = "export-{$now}.csv"; //data object variables $orderStatusSubmissionLog = EcommerceConfig::get(OrderStatusLog::class, 'order_status_log_class_used_for_submitting_order'); $orderStatusSubmissionLogTableName = $orderStatusSubmissionLog::getSchema()->tableName($orderStatusSubmissionLog); $fileData = ''; $offset = 0; $count = 50; $orders = Order::get() ->sort('"Order"."ID" ASC') ->innerJoin('OrderStatusLog', '"Order"."ID" = "OrderStatusLog"."OrderID"') ->innerJoin($orderStatusSubmissionLogTableName, "\"{$orderStatusSubmissionLogTableName}\".\"ID\" = \"OrderStatusLog\".\"ID\"") ->leftJoin('Member', '"Member"."ID" = "Order"."MemberID"') ->limit($count, $offset) ; $ordersCountExists = $orders->exists(); $sanityCheck = 0; while ($ordersCountExists && $sanityCheck < 1000) { ++$sanityCheck; $offset += $count; foreach ($orders as $order) { if ($order->IsSubmitted()) { $memberIsOK = false; $member = $order->Member(); if ($member && $member->exists()) { $memberIsOK = true; if ($member->IsShopAssistant()) { $memberIsOK = false; } } else { $memberIsOK = true; } if ($memberIsOK) { $items = OrderItem::get()->filter(['OrderID' => $order->ID]); if ($items->exists()) { $fileData .= $this->generateExportFileData($order->getOrderEmail(), $order->SubmissionLog()->Created, $items); } } } } $orders = Order::get() ->sort('"Order"."ID" ASC') ->innerJoin('OrderStatusLog', '"Order"."ID" = "OrderStatusLog"."OrderID"') ->innerJoin($orderStatusSubmissionLogTableName, "\"{$orderStatusSubmissionLogTableName}\".\"ID\" = \"OrderStatusLog\".\"ID\"") ->leftJoin('Member', '"Member"."ID" = "Order"."MemberID"') ->limit($count, $offset) ; $ordersCountExists = $orders->exists(); } unset($orders); if ($fileData) { HTTPRequest::send_file($fileData, $fileName, 'text/csv'); } else { user_error('No records found', E_USER_ERROR); } } public function generateExportFileData($email, $date, $orderItems) { $separator = ','; $fileData = ''; $columnData = []; $exportFields = [ 'OrderID', 'InternalItemID', 'TableTitle', 'TableSubTitleNOHTML', 'UnitPrice', 'Quantity', 'CalculatedTotal', ]; if ($orderItems) { foreach ($orderItems as $item) { $columnData = []; $columnData[] = '"' . $email . '"'; $columnData[] = '"' . $date . '"'; foreach ($exportFields as $field) { $value = $item->{$field}; $value = preg_replace('#\s+#', ' ', $value); $value = str_replace(["\r", "\n"], "\n", $value); $tmpColumnData = '"' . str_replace('"', '\"', $value) . '"'; $columnData[] = $tmpColumnData; } $fileData .= implode($separator, $columnData); $fileData .= "\n"; $item->destroy(); unset($item, $columnData); } return $fileData; } return ''; } } |