/**
  *
  *@return SQLQuery
  **/
 public function apply(DataQuery $query)
 {
     $this->model = $query->applyRelation($this->relation);
     $value = $this->getValue();
     $billingAddressesIDs = array(-1 => -1);
     $billingAddresses = BillingAddress::get()->where("\r\n\t\t\t\"FirstName\" LIKE '%{$value}%' OR\r\n\t\t\t\"Surname\" LIKE '%{$value}%' OR\r\n\t\t\t\"Email\" LIKE '%{$value}%' OR\r\n\t\t\t\"Address\" LIKE '%{$value}%' OR\r\n\t\t\t\"Address2\" LIKE '%{$value}%' OR\r\n\t\t\t\"City\" LIKE '%{$value}%' OR\r\n\t\t\t\"PostalCode\" LIKE '%{$value}%' OR\r\n\t\t\t\"Phone\" LIKE '%{$value}%'\r\n\t\t");
     if ($billingAddresses->count()) {
         $billingAddressesIDs = $billingAddresses->map("ID", "ID")->toArray();
     }
     $where[] = "\"BillingAddressID\" IN (" . implode(",", $billingAddressesIDs) . ")";
     $shippingAddressesIDs = array(-1 => -1);
     $shippingAddresses = ShippingAddress::get()->where("\r\n\t\t\t\"ShippingFirstName\" LIKE '%{$value}%' OR\r\n\t\t\t\"ShippingSurname\" LIKE '%{$value}%' OR\r\n\t\t\t\"ShippingAddress\" LIKE '%{$value}%' OR\r\n\t\t\t\"ShippingAddress2\" LIKE '%{$value}%' OR\r\n\t\t\t\"ShippingCity\" LIKE '%{$value}%' OR\r\n\t\t\t\"ShippingPostalCode\" LIKE '%{$value}%' OR\r\n\t\t\t\"ShippingPhone\" LIKE '%{$value}%'\r\n\t\t");
     if ($shippingAddresses->count()) {
         $shippingAddressesIDs = $shippingAddresses->map("ID", "ID")->toArray();
     }
     $where[] = "\"ShippingAddressID\" IN (" . implode(",", $shippingAddressesIDs) . ")";
     $memberIDs = array(-1 => -1);
     $members = Member::get()->where("\r\n\t\t\t\"FirstName\" LIKE '%{$value}%' OR\r\n\t\t\t\"Surname\" LIKE '%{$value}%' OR\r\n\t\t\t\"Email\" LIKE '%{$value}%'\r\n\t\t");
     if ($members->count()) {
         $memberIDs = $members->map("ID", "ID")->toArray();
     }
     $where[] = "\"MemberID\" IN (" . implode(",", $memberIDs) . ")";
     $query = $query->where("(" . implode(") OR (", $where) . ")");
     return $query;
 }
 /**
  * Standard SS method
  * @param Member $member
  * @return Boolean
  */
 function canDelete($member = null)
 {
     if (ShippingAddress::get()->filter(array("ShippingCountry" => $this->Code))->count()) {
         return false;
     }
     if (BillingAddress::get()->filter(array("Country" => $this->Code))->count()) {
         return false;
     }
     if (Permission::checkMember($member, Config::inst()->get("EcommerceRole", "admin_permission_code"))) {
         return true;
     }
     return parent::canEdit($member);
 }
 public function getCountry()
 {
     $countryCodes = array("Billing" => "", "Shipping" => "");
     if ($this->BillingAddressID) {
         $billingAddress = BillingAddress::get()->byID($this->BillingAddressID);
         if ($billingAddress) {
             if ($billingAddress->Country) {
                 $countryCodes["Billing"] = $billingAddress->Country;
             }
         }
     }
     if ($this->ShippingAddressID && $this->UseShippingAddress) {
         $shippingAddress = BillingAddress::get()->byID($this->ShippingAddressID);
         if ($shippingAddress) {
             if ($shippingAddress->ShippingCountry) {
                 $countryCodes["Shipping"] = $shippingAddress->ShippingCountry;
             }
         }
     }
     if (EcommerceConfig::get("OrderAddress", "use_shipping_address_for_main_region_and_country") && $countryCodes["Shipping"] || !$countryCodes["Billing"] && $countryCodes["Shipping"]) {
         return $countryCodes["Shipping"];
     } elseif ($countryCodes["Billing"]) {
         return $countryCodes["Billing"];
     } else {
         return EcommerceCountry::get_country_from_ip();
     }
 }
 /**
  * Ensures member unique id stays unique and other basic stuff...
  * @param array $data = Form Data
  * @return Boolean
  */
 function php($data)
 {
     $valid = parent::php($data);
     $checkoutPage = CheckoutPage::get()->First();
     if ($checkoutPage && $checkoutPage->TermsAndConditionsMessage) {
         if (isset($data["ReadTermsAndConditions"])) {
             if (!$data["ReadTermsAndConditions"]) {
                 $this->validationError("ReadTermsAndConditions", $checkoutPage->TermsAndConditionsMessage, "required");
                 $valid = false;
             }
         }
     }
     $order = ShoppingCart::current_order();
     if (!$order) {
         $this->validationError("Order", _t("OrderForm.ORDERNOTFOUND", "There was an error in processing your order, please try again or contact the administrator."), "required");
         $valid = false;
     }
     $billingAddress = BillingAddress::get()->byID($order->BillingAddressID);
     if (!$billingAddress) {
         $this->validationError("BillingAddress", _t("OrderForm.MUSTHAVEBILLINGADDRESS", "All orders must have a billing address, please go back and add your details."), "required");
         $valid = false;
     }
     return $valid;
 }