function populateDefaults() { parent::populateDefaults(); $this->Title = "Update Member with points from Order."; $this->Note = "Records the points before, the points added and subtracted and the points after."; $this->InternalUseOnly = 1; }
/** * adding a sequential order number. */ function onBeforeWrite() { parent::onBeforeWrite(); if ($order = $this->Order()) { if (!$this->Total) { $this->Total = $order->Total(); $this->SubTotal = $order->SubTotal(); } } if (!intval($this->SequentialOrderNumber)) { $this->SequentialOrderNumber = 1; $min = intval(EcommerceConfig::get("Order", "order_id_start_number")) - 0; if (isset($this->ID)) { $id = intval($this->ID); } else { $id = 0; } $lastOne = OrderStatusLog_Submitted::get()->Exclude(array("ID" => $id))->Sort("SequentialOrderNumber", "DESC")->First(); if ($lastOne) { $this->SequentialOrderNumber = intval($lastOne->SequentialOrderNumber) + 1; } if (intval($min) && $this->SequentialOrderNumber < $min) { $this->SequentialOrderNumber = $min; } } }
function populateDefaults() { parent::populateDefaults(); $this->Title = "Calculate Points from Order."; $this->Note = "Works out the points gained and points used for an Order."; $this->InternalUseOnly = 1; }
public function getCMSFields() { $fields = parent::getCMSFields(); $fields->removeByName("Title"); $fields->removeByName("Note"); $fields->addFieldToTab('Root.Main', new CheckboxField("PaymentConfirmed", _t("OrderStatusLog.CONFIRMED", "Payment is confirmed"))); return $fields; }
protected function updateWithLastInfo() { if ($this->OrderID) { if ($latestLog = OrderStatusLog::get()->filter('OrderID', $this->OrderID)->sort('Created', 'DESC')->first()) { $this->DispatchedBy = $latestLog->DispatchedBy; $this->DispatchedOn = $latestLog->DispatchedOn; $this->DispatchTicket = $latestLog->DispatchTicket; $this->PaymentCode = $latestLog->PaymentCode; $this->PaymentOK = $latestLog->PaymentOK; } } }
/** * Add a member to the order - in case he / she is not a shop admin. * * @param Order object * @return Boolean - true if run correctly. **/ public function doStep(Order $order) { if (!$order->IsSubmitted()) { $className = $this->getRelevantLogEntryClassName(); if (class_exists($className)) { //add currency if needed. $order->getHasAlternativeCurrency(); $obj = $className::create(); if (is_a($obj, Object::getCustomClass("OrderStatusLog"))) { $obj->OrderID = $order->ID; $obj->Title = $this->Name; //it is important we add this here so that we can save the 'submitted' version. //this is particular important for the Order Item Links. //order write will also update all the OrderAttributes! $obj->write(); $obj = OrderStatusLog::get()->byID($obj->ID); $saved = false; if ($this->SaveOrderAsSerializedObject) { $obj->OrderAsString = $order->ConvertToString(); $saved = true; } if ($this->SaveOrderAsHTML || !$saved) { $obj->OrderAsHTML = Convert::raw2sql($order->ConvertToHTML()); } $obj->write(); } else { user_error('EcommerceConfig::get("OrderStatusLog", "order_status_log_class_used_for_submitting_order") refers to a class that is NOT an instance of OrderStatusLog'); } } else { user_error('EcommerceConfig::get("OrderStatusLog", "order_status_log_class_used_for_submitting_order") refers to a non-existing class'); } $order->LastEdited = "'" . SS_Datetime::now()->Rfc2822() . "'"; //add member if needed... if (!$order->MemberID) { //lets see if we can find a member $memberOrderID = Session::get("Ecommerce_Member_For_Order"); Session::clear("Ecommerce_Member_For_Order"); Session::set("Ecommerce_Member_For_Order", 0); Session::save(); if ($memberOrderID) { $order->MemberID = $memberOrderID; } } $order->write($showDebug = false, $forceInsert = false, $forceWrite = true); } return true; }
/** * Send a message to the client containing the latest * note of {@link OrderStatusLog} and the current status. * * Used in {@link OrderReport}. * * @param string $note Optional note-content (instead of using the OrderStatusLog) */ public function sendStatusChange($title, $note = null) { if (!$note) { $latestLog = OrderStatusLog::get()->filter("OrderID", $this->order->ID)->filter("SentToCustomer", 1)->first(); if ($latestLog) { $note = $latestLog->Note; $title = $latestLog->Title; } } $member = $this->order->Member(); if (Config::inst()->get('OrderProcessor', 'receipt_email')) { $adminEmail = Config::inst()->get('OrderProcessor', 'receipt_email'); } else { $adminEmail = Email::config()->admin_email; } $e = new Order_statusEmail(); $e->populateTemplate(array("Order" => $this->order, "Member" => $member, "Note" => $note)); $e->setFrom($adminEmail); $e->setSubject($title); $e->setTo($member->Email); $e->send(); }
/** * Standard SS method * Deletes the files in the download folder, * and the actual download folder itself. */ function onBeforeDelete() { parent::onBeforeDelete(); if ($this->FolderName && !$this->Completed) { $this->deleteFolderContents(); } }
public function onAfterWrite() { parent::onAfterWrite(); //create an OrderStatusLog if ($this->flagOrderStatusWrite) { $this->flagOrderStatusWrite = false; $log = OrderStatusLog::create(); // populate OrderStatusLog $log->Title = _t('ShopEmail.StatusChanged', 'Status for order #{OrderNo} changed to "{OrderStatus}"', '', array('OrderNo' => $this->Reference, 'OrderStatus' => $this->getStatusI18N())); $log->Note = _t('ShopEmail.StatusChange' . $this->Status . 'Note'); $log->OrderID = $this->ID; OrderEmailNotifier::create($this)->sendStatusChange($log->Title, $log->Note); $log->SentToCustomer = true; $this->extend('updateOrderStatusLog', $log); $log->write(); } }
public function testDelete() { Config::inst()->update('FlatTaxModifier', 'rate', 0.25); Config::inst()->update('Order', 'modifiers', array('FlatTaxModifier')); $order = Order::create(); $shirt = $this->objFromFixture("Product", "tshirt"); $mp3player = $this->objFromFixture("Product", "mp3player"); $order->Items()->add($shirt->createItem(3)); $order->Items()->add($mp3player->createItem(1)); $order->write(); $order->calculate(); $statusLogId = OrderStatusLog::create(array('Title' => 'Test status log', 'OrderID' => $order->ID))->write(); $paymentId = Payment::create(array('OrderID' => $order->ID))->init('Manual', 343.75, 'NZD')->write(); $this->assertEquals(4, $order->Items()->Quantity()); $this->assertEquals(1, $order->Modifiers()->count()); $this->assertEquals(1, $order->OrderStatusLogs()->count()); $this->assertEquals(1, $order->Payments()->count()); $itemIds = Product_OrderItem::get()->filter('OrderID', $order->ID)->column('ID'); $modifierIds = OrderModifier::get()->filter('OrderID', $order->ID)->column('ID'); $order->delete(); // Items should no longer be linked to order $this->assertEquals(0, $order->Items()->count()); $this->assertEquals(0, $order->Modifiers()->count()); $this->assertEquals(0, $order->OrderStatusLogs()->count()); $this->assertEquals(0, $order->Payments()->count()); // Ensure the order items have been deleted! $this->assertEquals(0, Product_OrderItem::get()->filter('ID', $itemIds)->count()); $this->assertEquals(0, OrderModifier::get()->filter('ID', $modifierIds)->count()); $this->assertEquals(0, OrderStatusLog::get()->filter('ID', $statusLogId)->count()); // Keep the payment… it might be relevant for book keeping $this->assertEquals(1, Payment::get()->filter('ID', $paymentId)->count()); }
public function requireDefaultRecords() { parent::requireDefaultRecords(); if ($this->config()->dont_upgrade_on_build) { return; } // Perform migrations DB::query(sprintf('UPDATE "%s" SET "%s" = \'%s\'', 'OrderStatusLog', 'ClassName', 'OrderLog')); if (DB::get_schema()->hasField('OrderStatusLog', 'Changes')) { $fields = '"' . implode('", "', array_intersect(array_keys(DB::get_schema()->fieldList('OrderLog')), array_keys(DB::get_schema()->fieldList('OrderStatusLog')))) . '"'; DB::query(sprintf('INSERT INTO "%s" (%s) SELECT %s FROM "%s" ON DUPLICATE KEY UPDATE ID=VALUES(ID)', 'OrderLog', $fields, $fields, 'OrderStatusLog')); } DB::alteration_message('Migrated order status logs', 'changed'); }
function mergeUncompletedOrderForOneMember_170() { $explanation = "\r\n\t\t\t<h1>170. Merge uncompleted orders into one.</h1>\r\n\t\t\t<p>Merges uncompleted orders by the same user into one.</p>\r\n\t\t"; if ($this->retrieveInfoOnly) { return $explanation; } else { echo $explanation; } $orders = Order::get()->filter(array("MemberID:GreaterThan" => 0))->sort(array("MemberID" => "ASC", "\"Order\".\"Created\"" => "DESC"))->innerJoin("Member", "\"Order\".\"MemberID\" = \"Member\".\"ID\"")->limit($this->limit, $this->start); $count = 0; $previousOrderMemberID = 0; $lastOrderFromMember = null; if ($orders->count()) { foreach ($orders as $order) { //crucial ONLY for non-submitted orders... if ($order->IsSubmitted()) { //do nothing! $count++; } else { $memberID = $order->MemberID; //recurring member if ($previousOrderMemberID == $memberID && $lastOrderFromMember) { $this->DBAlterationMessageNow("We have a duplicate order for a member: " . $order->Member()->Email, "created"); $orderAttributes = OrderAttribute::get()->filter(array("OrderID" => $order->ID)); if ($orderAttributes->count()) { foreach ($orderAttributes as $orderAttribute) { $this->DBAlterationMessageNow("Moving attribute #" . $orderAttribute->ID, "created"); DB::query("UPDATE \"OrderAttribute\" SET \"OrderID\" = " . $lastOrderFromMember->ID . " WHERE \"ID\" = " . $orderAttribute->ID); } } else { $this->DBAlterationMessageNow("There are no attributes for this order"); } $orderStatusLogs = OrderStatusLog::get()->filter(array("OrderID" => $order->ID)); if ($orderStatusLogs->count()) { foreach ($orderStatusLogs as $orderStatusLog) { $this->DBAlterationMessageNow("Moving order status log #" . $orderStatusLog->ID, "created"); DB::query("UPDATE \"OrderStatusLog\" SET \"OrderID\" = " . $lastOrderFromMember->ID . " WHERE \"ID\" = " . $orderStatusLog->ID); } } else { $this->DBAlterationMessageNow("There are no order status logs for this order"); } $orderEmailRecords = OrderEmailRecord::get()->filter(array("OrderID" => $order->ID)); if ($orderEmailRecords->count()) { foreach ($orderEmailRecords as $orderEmailRecord) { DB::query("UPDATE \"OrderEmailRecord\" SET \"OrderID\" = " . $lastOrderFromMember->ID . " WHERE \"ID\" = " . $orderEmailRecord->ID); $this->DBAlterationMessageNow("Moving email #" . $orderEmailRecord->ID, "created"); } } else { $this->DBAlterationMessageNow("There are no emails for this order."); } } else { $previousOrderMemberID = $order->MemberID; $lastOrderFromMember = $order; $this->DBAlterationMessageNow("Found last order from member."); } if ($order->BillingAddressID && !$lastOrderFromMember->BillingAddressID) { $this->DBAlterationMessageNow("Moving Billing Address."); DB::query("UPDATE \"Order\" SET \"BillingAddressID\" = " . $order->BillingAddressID . " WHERE \"ID\" = " . $lastOrderFromMember->ID); DB::query("UPDATE \"BillingAddress\" SET \"OrderID\" = " . $lastOrderFromMember->ID . " WHERE \"ID\" = " . $order->BillingAddressID); } if ($order->ShippingAddressID && !$lastOrderFromMember->ShippingAddressID) { $this->DBAlterationMessageNow("Moving Shipping Address."); DB::query("UPDATE \"Order\" SET \"ShippingAddressID\" = " . $order->ShippingAddressID . " WHERE \"ID\" = " . $lastOrderFromMember->ID); DB::query("UPDATE \"ShippingAddress\" SET \"OrderID\" = " . $lastOrderFromMember->ID . " WHERE \"ID\" = " . $order->ShippingAddressID); } $order->delete(); } } $this->DBAlterationMessageNow("Ignored {$count} Orders that have already been submitted."); return $this->start + $this->limit; } else { $this->DBAlterationMessageNow("There were no orders at all to work through."); } return 0; }
/** * *@return FieldSet **/ function getCMSFields() { $fields = parent::getCMSFields(); return $fields; }
function onBeforeWrite() { parent::onBeforeWrite(); }
public function testOrderPlacedByGuest() { // start a new order $order = $this->objFromFixture("Order", "cart1"); $order->FirstName = "Edmund"; $order->Surname = "Hillary"; $order->Email = "*****@*****.**"; $order->Status = "Unpaid"; $order->write(); $no_log_generated_with_order_status_unpaid = OrderStatusLog::get()->sort('ID')->last(); $this->assertNull($no_log_generated_with_order_status_unpaid, "no log generated with Status of 'Unpaid'"); $processor_guest = OrderProcessor::create($order); $response = $processor_guest->makePayment("Manual", array()); $order->Status = "Paid"; $order->write(); $log_order_status_paid = OrderStatusLog::get()->sort('ID')->last(); $this->assertNull($log_order_status_paid, "no log generated with Status of 'Unpaid'"); $order->Status = "Processing"; $order->write(); $log_order_status_processing = OrderStatusLog::get()->sort('ID')->last(); $this->assertEquals(OrderStatusLog::get()->count(), '1', "One items in the OrderStatusLog"); $this->assertNotNull($log_order_status_processing, "a log when changing to 'Processing' status (and PaymentMethod is 'Manual')"); $this->assertSame($log_order_status_processing->Order()->ID, $order->ID, "Log conatins an Order"); $this->assertContains("Processing", $log_order_status_processing->Note, "Processing note is recorded"); $this->assertContains(' changed to "Processing"', $log_order_status_processing->Title, "Processing title is recorded"); $this->assertEmailSent("*****@*****.**", "*****@*****.**", _t('ShopEmail.StatusChangeSubject') . $log_order_status_processing->Title); }
/** * standard SS method */ function populateDefaults() { parent::populateDefaults(); $this->AuthorID = Member::currentUserID(); $this->InternalUseOnly = false; }
/** * Will update payment status to "Paid if there is no outstanding amount". */ function updatePaymentStatus() { if ($this->Total() > 0 && $this->TotalOutstanding() <= 0) { //TODO: only run this if it is setting to Paid, and not cancelled or similar $this->Status = 'Paid'; $this->write(); $logEntry = new OrderStatusLog(); $logEntry->OrderID = $this->ID; $logEntry->Status = 'Paid'; $logEntry->write(); } }