/** * @return \Magento\Framework\Controller\ResultInterface * @throws GenericException */ public function execute() { $result = $this->resultFactory->create(ResultFactory::TYPE_JSON); $invoices = []; try { $json = file_get_contents('php://input'); $json = json_decode($json); if (!property_exists($json, 'customers')) { throw new GenericException('Invalid JSON input'); } foreach ($json->customers as $customer) { if (!property_exists($customer, 'email')) { continue; } $mageOrders = $this->getOrderCollectionFactory()->create()->addFieldToSelect('*')->addFieldToFilter('customer_email', $customer->email)->setOrder('created_at', 'desc'); $invoice = new \Expressly\Entity\Invoice(); $invoice->setEmail($customer->email); foreach ($mageOrders as $mageOrder) { $total = $mageOrder->getData('base_grand_total'); $tax = $mageOrder->getData('base_tax_amount'); $order = new \Expressly\Entity\Order(); $order->setId($mageOrder->getData('increment_id'))->setDate(new \DateTime($mageOrder->getData('created_at')))->setCurrency($mageOrder->getData('base_currency_code'))->setTotal((double) $total - (double) $tax, (double) $tax)->setItemCount((int) $mageOrder->getData('total_qty_ordered'))->setCoupon($mageOrder->getData('coupon_code')); $invoice->addOrder($order); } $invoices[] = $invoice; } $presenter = new BatchInvoicePresenter($invoices); $result->setData($presenter->toArray()); } catch (\Exception $e) { // log error $result->setData(['error' => $e->getMessage()]); } return $result; }
/** * */ public function batchInvoice() { $json = file_get_contents('php://input'); $json = json_decode($json); $invoices = array(); try { if (!property_exists($json, 'customers')) { throw new \Expressly\Exception\GenericException('Invalid JSON request'); } foreach ($json->customers as $customer) { if (!property_exists($customer, 'email')) { continue; } $user = ExpresslyHelper::get_user_by_email($customer->email); if (null !== $user) { $vmOrders = VmModel::getModel('orders')->getOrdersList($user->id); $invoice = new \Expressly\Entity\Invoice(); $invoice->setEmail($customer->email); foreach ($vmOrders as $vmOrder) { $vmOrderDetails = VmModel::getModel('orders')->getOrder($vmOrder->virtuemart_order_id); if ($vmOrderDetails['details']['BT']->created_on > $customer->from && $vmOrderDetails['details']['BT']->created_on < $customer->to) { // TODO: Need to review this values $total = $vmOrderDetails['details']['BT']->order_subtotal; $tax = $vmOrderDetails['details']['BT']->order_tax; // ==== $count = count($vmOrderDetails['items']); $order = new \Expressly\Entity\Order(); $order->setId($vmOrderDetails['details']['BT']->virtuemart_order_id)->setDate(new \DateTime($vmOrderDetails['details']['BT']->created_on))->setItemCount($count)->setTotal($total, $tax); if (!empty($vmOrderDetails['details']['BT']->coupon_code)) { $order->setCoupon($vmOrderDetails['details']['BT']->coupon_code); } $invoice->addOrder($order); } } $invoices[] = $invoice; } } $presenter = new \Expressly\Presenter\BatchInvoicePresenter($invoices); ExpresslyHelper::send_json($presenter->toArray()); } catch (\Expressly\Exception\GenericException $e) { $this->app['logger']->error($e); ExpresslyHelper::send_json(array()); } }