예제 #1
0
 function complete()
 {
     $this->setCheckoutStep(0);
     $session = ShopOrder::orderSession();
     $this->OrderIsPlaced = false;
     if ($session->isComplete()) {
         if ($session->Status == "Ordered") {
             //order already placed
             Director::redirect($this->dataRecord->Link() . "already_placed");
             return array();
         }
         $session->Status = "Ordered";
         $session->OrderKey = $session->generateOrderKey();
         $session->PlacedOrderOn = time();
         //remove all items from order, where quantity not > 0
         if ($items = $session->Items()) {
             foreach ($items as $item) {
                 if (!($item->Quantity > 0)) {
                     $item->delete();
                 }
             }
         }
         $session->Payment()->Price = $session->Total;
         $session->Payment()->write();
         if ($session->Items()) {
             foreach ($session->Items() as $item) {
                 if ($orgItem = $item->OriginalItem()) {
                     //if quantity in stock is 0 -> leave 0 and don't decrement
                     $orgItem->StockQuantity = $orgItem->StockQuantity - $item->Quantity;
                     $orgItem->OrderCount++;
                     $orgItem->writeToStage('Stage');
                     $orgItem->publish('Stage', 'Live');
                 }
             }
         }
         $session->calculateAndWrite();
         $session->write();
         //create invoice
         $invoice = new ShopInvoice();
         $invoice->PublicURL = ShopInvoice::generatePublicURL();
         $invoice->OrderID = $session->ID;
         $invoice->DateOfDelivery = null;
         $invoice->DateOfInvoice = time();
         //increment invoicekey if exists, otherwise use the id
         if ($lastInvoice = DataObject::get_one("ShopInvoice", null, null, "ID DESC")) {
             $invoice->InvoiceKey = (int) preg_replace('/\\D+/', '', $lastInvoice->InvoiceKey) + 1;
         } else {
             $invoice->InvoiceKey = $invoice->ID;
         }
         $invoice->write();
         $session->InvoiceID = $invoice->ID;
         $session->write();
         $this->OrderIsPlaced = true;
         $this->Order = $session;
         $session->sendOrderConfirmation();
         //to customer
         $session->sendOrderConfirmation(ShopOrder::getEmailFor("OrderConfirmation"));
         //to shop admin
         //send email with invoice link?!
         return array();
     } else {
         Director::redirect($this->dataRecord->Link() . "incomplete");
         return array();
     }
 }
예제 #2
0
 function sendOrderConfirmationTo($emailAddr)
 {
     if ($from = ShopOrder::getEmailFor("OrderConfirmation")) {
         $email = new Email();
         $email->from = $from;
         $email->to = $emailAddr;
         $email->subject = _t("Shop.Order.EmailSubject", "%Thanks for your order%");
         $email->ss_template = 'EmailOrderConfirmation';
         $email->populateTemplate($this);
         $email->send();
     }
 }