function testNiceFormatting() { // Test a bunch of different data values and results in Nice() and Whole() $tests = array( // Test basic operation '$50.00' => array('$50.00', '$50'), // Test removal of junk text 'this is -50.29 dollars' => array('($50.29)', '($50)'), 'this is -50.79 dollars' => array('($50.79)', '($51)'), 'this is 50.79 dollars' => array('$50.79', '$51'), // Test negative numbers '-1000' => array('($1,000.00)','($1,000)'), '-$2,000' => array('($2,000.00)', '($2,000)'), // Test thousands comma '5000' => array('$5,000.00', '$5,000'), // Test scientific notation '5.68434188608E-14' => array('$0.00', '$0'), '5.68434188608E7' => array('$56,843,418.86', '$56,843,419'), "Sometimes Es are still bad: 51 dollars, even though they\'re used in scientific notation" => array('$51.00', '$51'), "What about 5.68434188608E7 in the middle of a string" => array('$56,843,418.86', '$56,843,419'), ); foreach($tests as $value => $niceValues) { $c = new Currency('MyField'); $c->setValue($value); $this->assertEquals($niceValues[0], $c->Nice()); $this->assertEquals($niceValues[1], $c->Whole()); } }
public function Nice() { if ($this->value == 0) { return _t("ShopCurrency.Free", "<span class=\"free\">FREE</span>"); } return parent::Nice(); }
public function __construct($controller, $name = "PostagePaymentForm") { // Get delivery data and postage areas from session $delivery_data = Session::get("Commerce.DeliveryDetailsForm.data"); $country = $delivery_data['DeliveryCountry']; $postcode = $delivery_data['DeliveryPostCode']; $postage_areas = $controller->getPostageAreas($country, $postcode); // Loop through all postage areas and generate a new list $postage_array = array(); foreach ($postage_areas as $area) { $area_currency = new Currency("Cost"); $area_currency->setValue($area->Cost); $postage_array[$area->ID] = $area->Title . " (" . $area_currency->Nice() . ")"; } $postage_id = Session::get('Commerce.PostageID') ? Session::get('Commerce.PostageID') : 0; // Setup postage fields $postage_field = CompositeField::create(HeaderField::create("PostageHeader", _t('Commerce.Postage', "Postage")), OptionsetField::create("PostageID", _t('Commerce.PostageSelection', 'Please select your prefered postage'), $postage_array)->setValue($postage_id))->setName("PostageFields")->addExtraClass("unit")->addExtraClass("size1of2")->addExtraClass("unit-50"); // Get available payment methods and setup payment $payment_methods = SiteConfig::current_site_config()->PaymentMethods(); // Deal with payment methods if ($payment_methods->exists()) { $payment_map = $payment_methods->map('ID', 'Label'); $payment_value = $payment_methods->filter('Default', 1)->first()->ID; } else { $payment_map = array(); $payment_value = 0; } $payment_field = CompositeField::create(HeaderField::create('PaymentHeading', _t('Commerce.Payment', 'Payment'), 2), OptionsetField::create('PaymentMethodID', _t('Commerce.PaymentSelection', 'Please choose how you would like to pay'), $payment_map, $payment_value))->setName("PaymentFields")->addExtraClass("unit")->addExtraClass("size1of2")->addExtraClass("unit-50"); $fields = FieldList::create(CompositeField::create($postage_field, $payment_field)->setName("PostagePaymentFields")->addExtraClass("units-row")->addExtraClass("line")); $back_url = $controller->Link("billing"); $actions = FieldList::create(LiteralField::create('BackButton', '<a href="' . $back_url . '" class="btn btn-red commerce-action-back">' . _t('Commerce.Back', 'Back') . '</a>'), FormAction::create('doContinue', _t('Commerce.PaymentDetails', 'Enter Payment Details'))->addExtraClass('btn')->addExtraClass('commerce-action-next')->addExtraClass('btn-green')); $validator = RequiredFields::create(array("PostageID", "PaymentMethod")); parent::__construct($controller, $name, $fields, $actions, $validator); }
/** * Form responsible for estimating shipping based on location and * postal code * * @return Form */ public function PostageForm() { $available_postage = Session::get("Commerce.AvailablePostage"); // Setup default postage fields $country_select = CompositeField::create(CountryDropdownField::create('Country', _t('Commerce.Country', 'Country'))->setAttribute("class", 'countrydropdown dropdown btn'), TextField::create("ZipCode", _t('Commerce.ZipCode', "Zip/Postal Code")))->addExtraClass("size1of2")->addExtraClass("unit")->addExtraClass("unit-50"); // If we have stipulated a search, then see if we have any results // otherwise load empty fieldsets if ($available_postage) { $search_text = _t('Commerce.Update', "Update"); // Loop through all postage areas and generate a new list $postage_array = array(); foreach ($available_postage as $area) { $area_currency = new Currency("Cost"); $area_currency->setValue($area->Cost); $postage_array[$area->ID] = $area->Title . " (" . $area_currency->Nice() . ")"; } $postage_select = CompositeField::create(OptionsetField::create("PostageID", _t('Commerce.SelectPostage', "Select Postage"), $postage_array))->addExtraClass("size1of2")->addExtraClass("unit")->addExtraClass("unit-50"); $confirm_action = CompositeField::create(FormAction::create("doSavePostage", _t('Commerce.Confirm', "Confirm"))->addExtraClass('btn')->addExtraClass('btn-green'))->addExtraClass("size1of2")->addExtraClass("unit")->addExtraClass("unit-50"); } else { $search_text = _t('Commerce.Search', "Search"); $postage_select = CompositeField::create()->addExtraClass("size1of2")->addExtraClass("unit")->addExtraClass("unit-50"); $confirm_action = CompositeField::create()->addExtraClass("size1of2")->addExtraClass("unit")->addExtraClass("unit-50"); } // Set search field $search_action = CompositeField::create(FormAction::create("doGetPostage", $search_text)->addExtraClass('btn'))->addExtraClass("size1of2")->addExtraClass("unit")->addExtraClass("unit-50"); // Setup fields and actions $fields = new FieldList(CompositeField::create($country_select, $postage_select)->addExtraClass("line")->addExtraClass("units-row-end")); $actions = new FieldList(CompositeField::create($search_action, $confirm_action)->addExtraClass("line")->addExtraClass("units-row-end")); $required = RequiredFields::create(array("Country", "ZipCode")); $form = Form::create($this, 'PostageForm', $fields, $actions, $required)->addExtraClass('forms')->addExtraClass('forms-columnar'); // Check if the form has been re-posted and load data $data = Session::get("Form.{$form->FormName()}.data"); if (is_array($data)) { $form->loadDataFrom($data); } // Check if the postage area has been set, if so, Set Postage ID $data = array(); $data["PostageID"] = Session::get("Commerce.PostageID"); if (is_array($data)) { $form->loadDataFrom($data); } // Extension call $this->extend("updatePostageForm", $form); return $form; }
protected function parseFloat($floatString) { //hack to clean up currency symbols, etc.... $LocaleInfo = localeconv(); $floatString = str_replace($LocaleInfo["mon_decimal_point"], ".", $floatString); $titleDescriptor = new Currency("titleDescriptor"); $titleDescriptor->setValue(1111111); $titleDescriptorString = $titleDescriptor->Nice(); $titleDescriptorString = str_replace("1", "", $titleDescriptorString); //HACK! $titleDescriptorString = str_replace(".00", "", $titleDescriptorString); for ($i = 0; $i < strlen($titleDescriptorString); $i++) { $char = substr($titleDescriptorString, $i, 1); if ($char != $LocaleInfo["mon_decimal_point"]) { $floatString = str_replace($char, "", $floatString); } } return round(floatval($floatString - 0), 2); }
/** * Form responsible for estimating shipping based on location and * postal code * * @return Form */ public function PostageForm() { if (!Checkout::config()->simple_checkout) { $available_postage = Session::get("Checkout.AvailablePostage"); // Setup form $form = Form::create($this, 'PostageForm', $fields = new FieldList(CountryDropdownField::create('Country', _t('Checkout.Country', 'Country')), TextField::create("ZipCode", _t('Checkout.ZipCode', "Zip/Postal Code"))), $actions = new FieldList(FormAction::create("doSetPostage", _t('Checkout.Search', "Search"))->addExtraClass('btn')->addExtraClass('btn btn-green btn-success')), $required = RequiredFields::create(array("Country", "ZipCode")))->addExtraClass('forms')->addExtraClass('forms-inline')->setLegend(_t("Checkout.EstimateShipping", "Estimate Shipping")); // If we have stipulated a search, then see if we have any results // otherwise load empty fieldsets if ($available_postage && $available_postage->exists()) { // Loop through all postage areas and generate a new list $postage_array = array(); foreach ($available_postage as $area) { $area_currency = new Currency("Cost"); $area_currency->setValue($area->Cost); $postage_array[$area->ID] = $area->Title . " (" . $area_currency->Nice() . ")"; } $fields->add(OptionsetField::create("PostageID", _t('Checkout.SelectPostage', "Select Postage"), $postage_array)); $actions->dataFieldByName("action_doSetPostage")->setTitle(_t('Checkout.Update', "Update")); } // Check if the form has been re-posted and load data $data = Session::get("Form.{$form->FormName()}.data"); if (is_array($data)) { $form->loadDataFrom($data); } // Check if the postage area has been set, if so, Set Postage ID $data = array(); $data["PostageID"] = Session::get("Checkout.PostageID"); if (is_array($data)) { $form->loadDataFrom($data); } // Extension call $this->extend("updatePostageForm", $form); return $form; } }
public function __construct($controller, $name = "PostagePaymentForm") { if (!Checkout::config()->simple_checkout && !ShoppingCart::get()->isCollection()) { // Get delivery data and postage areas from session $delivery_data = Session::get("Checkout.DeliveryDetailsForm.data"); $country = $delivery_data['DeliveryCountry']; $postcode = $delivery_data['DeliveryPostCode']; $cart = ShoppingCart::get(); $postage_areas = new ShippingCalculator($postcode, $country); $postage_areas->setCost($cart->SubTotalCost)->setWeight($cart->TotalWeight)->setItems($cart->TotalItems); $postage_areas = $postage_areas->getPostageAreas(); // Loop through all postage areas and generate a new list $postage_array = array(); foreach ($postage_areas as $area) { $area_currency = new Currency("Cost"); $area_currency->setValue($area->Cost); $postage_array[$area->ID] = $area->Title . " (" . $area_currency->Nice() . ")"; } if (Session::get('Checkout.PostageID')) { $postage_id = Session::get('Checkout.PostageID'); } elseif ($postage_areas->exists()) { $postage_id = $postage_areas->first()->ID; } else { $postage_id = 0; } if (count($postage_array)) { $select_postage_field = OptionsetField::create("PostageID", _t('Checkout.PostageSelection', 'Please select your preferred postage'), $postage_array)->setValue($postage_id); } else { $select_postage_field = ReadonlyField::create("NoPostage", "", _t('Checkout.NoPostageSelection', 'Unfortunately we cannot deliver to your address'))->addExtraClass("label")->addExtraClass("label-red"); } // Setup postage fields $postage_field = CompositeField::create(HeaderField::create("PostageHeader", _t('Checkout.Postage', "Postage")), $select_postage_field)->setName("PostageFields")->addExtraClass("unit")->addExtraClass("size1of2")->addExtraClass("unit-50"); } elseif (ShoppingCart::get()->isCollection()) { $postage_field = CompositeField::create(HeaderField::create("PostageHeader", _t('Checkout.CollectionOnly', "Collection Only")), ReadonlyField::create("CollectionText", "", _t("Checkout.ItemsReservedInstore", "Your items will be held instore until you collect them")))->setName("CollectionFields")->addExtraClass("unit")->addExtraClass("size1of2")->addExtraClass("unit-50"); } else { $postage_field = null; } // Get available payment methods and setup payment $payment_methods = ArrayList::create(); foreach (SiteConfig::current_site_config()->PaymentMethods() as $payment_method) { if ($payment_method->canView()) { $payment_methods->add($payment_method); } } // Deal with payment methods if ($payment_methods->exists()) { $payment_field = OptionsetField::create('PaymentMethodID', _t('Checkout.PaymentSelection', 'Please choose how you would like to pay'), $payment_methods->map('ID', 'Label'), $payment_methods->filter('Default', 1)->first()->ID); } else { $payment_field = ReadonlyField::create("PaymentMethodID", _t('Checkout.PaymentSelection', 'Please choose how you would like to pay'), _t('Checkout.NoPaymentMethods', 'You cannot pay at this time, if you feel there has been an error please contact us.')); } $payment_field = CompositeField::create(HeaderField::create('PaymentHeading', _t('Checkout.Payment', 'Payment'), 2), $payment_field)->setName("PaymentFields")->addExtraClass("unit")->addExtraClass("size1of2")->addExtraClass("unit-50"); $fields = FieldList::create(CompositeField::create($postage_field, $payment_field)->setName("PostagePaymentFields")->addExtraClass("units-row")->addExtraClass("line")); $back_url = $controller->Link("billing"); if ($payment_methods->exists()) { $actions = FieldList::create(LiteralField::create('BackButton', '<a href="' . $back_url . '" class="btn btn-red checkout-action-back">' . _t('Checkout.Back', 'Back') . '</a>'), FormAction::create('doContinue', _t('Checkout.PaymentDetails', 'Enter Payment Details'))->addExtraClass('btn')->addExtraClass('checkout-action-next')->addExtraClass('btn-green')); } else { $actions = FieldList::create(); } $validator = RequiredFields::create(array("PostageID", "PaymentMethod")); parent::__construct($controller, $name, $fields, $actions, $validator); }