/** * Set a new/reserved ordernumber before writing and send attributed * ShopEmails. * * @return void * * @author Sebastian Diel <*****@*****.**> * @since 23.01.2014 */ protected function onBeforeWrite() { parent::onBeforeWrite(); if (empty($this->OrderNumber)) { $this->OrderNumber = SilvercartNumberRange::useReservedNumberByIdentifier('OrderNumber'); } if (!$this->didHandleOrderStatusChange && $this->ID > 0 && $this->isChanged('SilvercartOrderStatusID')) { $this->didHandleOrderStatusChange = true; $this->extend('onBeforeOrderStatusChange'); if (method_exists($this->SilvercartPaymentMethod(), 'handleOrderStatusChange')) { $this->SilvercartPaymentMethod()->handleOrderStatusChange($this); } $newOrderStatus = DataObject::get_by_id('SilvercartOrderStatus', $this->SilvercartOrderStatusID); if ($newOrderStatus) { if ($this->AmountTotalAmount > 0) { $this->AmountTotal->setAmount($this->AmountTotalAmount); $this->AmountTotal->setCurrency($this->AmountTotalCurrency); } $newOrderStatus->sendMailFor($this); } SilvercartOrderLog::addChangedLog($this, 'SilvercartOrderStatus', $this->original['SilvercartOrderStatusID'], $this->SilvercartOrderStatusID); } if (array_key_exists('sa__FirstName', $_POST) && $this->SilvercartShippingAddress()->ID > 0) { foreach ($_POST as $paramName => $paramValue) { if (strpos($paramName, 'sa__') === 0) { $addressParamName = str_replace('sa__', '', $paramName); $this->SilvercartShippingAddress()->{$addressParamName} = $paramValue; } } $this->SilvercartShippingAddress()->write(); } if (array_key_exists('ia__FirstName', $_POST) && $this->SilvercartInvoiceAddress()->ID > 0) { foreach ($_POST as $paramName => $paramValue) { if (strpos($paramName, 'ia__') === 0) { $addressParamName = str_replace('ia__', '', $paramName); $this->SilvercartInvoiceAddress()->{$addressParamName} = $paramValue; } } $this->SilvercartInvoiceAddress()->write(); } $this->extend('updateOnBeforeWrite'); }
/** * Creates the default SilvercartNumberRanges if not exists * * @return void * * @author Sebastian Diel <*****@*****.**> * @since 02.05.2012 */ public function createDefaultNumberRanges() { // create number ranges $orderNumbers = SilvercartNumberRange::get()->filter('Identifier', 'OrderNumber')->first(); if (!$orderNumbers) { $orderNumbers = new SilvercartNumberRange(); $orderNumbers->Identifier = 'OrderNumber'; $orderNumbers->Title = _t('SilvercartNumberRange.ORDERNUMBER', 'Ordernumber'); $orderNumbers->write(); } $customerNumbers = SilvercartNumberRange::get()->filter('Identifier', 'CustomerNumber')->first(); if (!$customerNumbers) { $customerNumbers = new SilvercartNumberRange(); $customerNumbers->Identifier = 'CustomerNumber'; $customerNumbers->Title = _t('SilvercartNumberRange.CUSTOMERNUMBER', 'Customernumber'); $customerNumbers->write(); } }
/** * processor method * * @return void * * @author Sebastian Diel <*****@*****.**>, * Sascha Koehler <*****@*****.**> * @since 15.11.2014 */ public function process() { $checkoutData = $this->controller->getCombinedStepData(); $member = SilvercartCustomer::currentUser(); if ($member instanceof Member) { // Vorbereitung der Parameter zur Erzeugung der Bestellung if (isset($checkoutData['Email'])) { $customerEmail = $checkoutData['Email']; } else { $customerEmail = ''; } if (isset($checkoutData['Note'])) { $customerNote = $checkoutData['Note']; } else { $customerNote = ''; } $anonymousCustomer = SilvercartCustomer::currentAnonymousCustomer(); if ($anonymousCustomer) { // add a customer number to anonymous customer when ordering $anonymousCustomer->CustomerNumber = SilvercartNumberRange::useReservedNumberByIdentifier('CustomerNumber'); $anonymousCustomer->write(); } $shippingData = SilvercartTools::extractAddressDataFrom('Shipping', $checkoutData); $invoiceData = SilvercartTools::extractAddressDataFrom('Invoice', $checkoutData); $order = $this->createOrder($customerEmail, $checkoutData, $customerNote); $this->extend('onAfterCreateOrder', $order); $order->createShippingAddress($shippingData); $order->createInvoiceAddress($invoiceData); $order->convertShoppingCartPositionsToOrderPositions(); // send order confirmation mail if ($this->sendConfirmationMail) { $order->sendConfirmationMail(); } $this->controller->setStepData(array('orderId' => $order->ID)); $this->controller->addCompletedStep(); $this->controller->NextStep(false); } return false; }
/** * returns a number range by identifier. * * @param string $identifier Identifier of the number range * * @return SilvercartNumberRange */ public static function getByIdentifier($identifier) { return SilvercartNumberRange::get()->filter('Identifier', $identifier)->first(); }
/** * If the user is not anonymous a customer number is attributed to the * Member if none is yet given. * * @return void * * @author Sascha Koehler <*****@*****.**> * @since 10.10.2011 */ public function onBeforeWrite() { parent::onBeforeWrite(); if (!self::currentAnonymousCustomer()) { if (empty($this->owner->CustomerNumber)) { $this->owner->CustomerNumber = SilvercartNumberRange::useReservedNumberByIdentifier('CustomerNumber'); } } }