/** * @param Cart $cart * @param Customer $customer * @param CartValuesTransformer $cartValuesTransformer * @param CartItemValuesTransformer $cartItemValuesTransformer * @param array $params * @return Order */ public function fromCart(Cart $cart, Customer $customer, CartValuesTransformer $cartValuesTransformer, CartItemValuesTransformer $cartItemValuesTransformer, $params) { if (isset($params['shippingaddressId']) && $params['shippingaddressId'] > 0) { $shippingAddress = $customer->getAddressFromAddressId($params['shippingaddressId']); } else { $data = ['address1' => $params['shippingaddress1'], 'address2' => $params['shippingaddress2'], 'address3' => $params['shippingaddress3'], 'city' => $params['shippingcity'], 'state' => $params['shippingstate'], 'postcode' => $params['shippingpostcode'], 'countryId' => $params['shippingcountryId']]; $shippingAddress = new Address($data); } if (isset($params['billingAddressSameAsShipping']) && $params['billingAddressSameAsShipping']) { $billingAddress = $shippingAddress; } else { if (isset($params['billingaddressId']) && $params['billingaddressId'] > 0) { $billingAddress = $customer->getAddressFromAddressId($params['billingaddressId']); } else { $data = ['address1' => $params['billingaddress1'], 'address2' => $params['billingaddress2'], 'address3' => $params['billingaddress3'], 'city' => $params['billingcity'], 'state' => $params['billingstate'], 'postcode' => $params['billingpostcode'], 'countryId' => $params['billingcountryId']]; $billingAddress = new Address($data); } } if (isset($params['billingAddressSameAsShipping'])) { $data['billing_address_same_as_shipping'] = true; } $items = []; foreach ($cart->getItems() as $item) { /* @var $item CartItem */ $sku = $item->getSku(); $cartItemValues = $item->getValues($cartItemValuesTransformer); $items[] = new OrderItem(NULL, $item->getVariationId(), $item->getTaxRate(), $cartItemValues['totalBeforeTax'], $item->getQuantity(), $item->getProductName(), $sku, 0, 0); } // add order item for shipping $cartValues = $cart->getValues($cartValuesTransformer); if ($cartValues['shipping'] > 0) { $items[] = new OrderItem(NULL, NULL, $cart->getDefaultTaxRate(), $cartValues['shipping'] - $cartValues['shippingTax'], 1, $cart->getShippingType(), 'SHIPPING', 1, 0); } $order = new Order($customer, $billingAddress, $shippingAddress, $items, $cart->getShippingType()); return $order; }
/** * @param Cart $cart */ public function updateShippingAndTax(Cart $cart) { $this->countryId = $cart->getCountryId(); $this->shippingType = $cart->getShippingType(); }
/** * @param Cart $cart * @return array */ public static function orderShippingCharge(Cart $cart) { $shippingCharge = null; $suppliers = []; if (count($cart->getItems()) == 0) { return $shippingCharge; } foreach ($cart->getItems() as $cartItem) { /* @var $cartItem CartItem */ $product = $cartItem->getProduct(); if (count($product->getShipping())) { foreach ($product->getShipping() as $sh) { /* @var $sh ProductShippingOption */ if ($sh->getMatch($cart->getCountryId(), $cart->getShippingType())) { if ($sh->getSupplierId()) { $suppliers[$sh->getSupplierId()] = $sh->getOrderPrice(); } else { $suppliers[0] = $sh->getOrderPrice(); } } } } } $shippingCharge = false; foreach ($suppliers as $supplierId => $value) { $shippingCharge += $value; } // return null if no shipping charge applies return $shippingCharge !== false ? $shippingCharge : NULL; }