Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
setItemRounding example
$page
->
setChangedPayment
(
(bool)
$request
->
get
(
'changedPayment', false
)
)
;
$page
->
setPaymentFailed
(
(bool)
$request
->
get
(
'paymentFailed', false
)
)
;
$this
->eventDispatcher->
dispatch
(
new
CheckoutFinishPageLoadedEvent
(
$page
,
$salesChannelContext
,
$request
)
)
;
if
(
$page
->
getOrder
(
)
->
getItemRounding
(
)
)
{
$salesChannelContext
->
setItemRounding
(
$page
->
getOrder
(
)
->
getItemRounding
(
)
)
;
$salesChannelContext
->
getContext
(
)
->
setRounding
(
$page
->
getOrder
(
)
->
getItemRounding
(
)
)
;
}
if
(
$page
->
getOrder
(
)
->
getTotalRounding
(
)
)
{
$salesChannelContext
->
setTotalRounding
(
$page
->
getOrder
(
)
->
getTotalRounding
(
)
)
;
}
return
$page
;
}
/** * @throws CustomerNotLoggedInException * @throws InconsistentCriteriaIdsException * @throws RoutingException * @throws OrderException */
$options
)
;
$salesChannelContext
->
getContext
(
)
->
addExtensions
(
$context
->
getExtensions
(
)
)
;
$salesChannelContext
->
addState
(
...
$context
->
getStates
(
)
)
;
if
(
$context
->
hasState
(
Context::SKIP_TRIGGER_FLOW
)
)
{
$salesChannelContext
->
getContext
(
)
->
addState
(
Context::SKIP_TRIGGER_FLOW
)
;
}
if
(
$order
->
getItemRounding
(
)
!== null
)
{
$salesChannelContext
->
setItemRounding
(
$order
->
getItemRounding
(
)
)
;
}
if
(
$order
->
getTotalRounding
(
)
!== null
)
{
$salesChannelContext
->
setTotalRounding
(
$order
->
getTotalRounding
(
)
)
;
}
$cart
=
$this
->orderConverter->
convertToCart
(
$order
,
$salesChannelContext
->
getContext
(
)
)
;
$this
->cartRuleLoader->
loadByCart
(
$salesChannelContext
,
$cart
,
new
CartBehavior
(
$salesChannelContext
->
getPermissions
(
)
)
,
$actual
=
$taxes
->
get
(
(string)
$tax
->
getTaxRate
(
)
)
;
static
::
assertInstanceOf
(
CalculatedTax::
class
,
$actual
,
sprintf
(
'Missing tax for rate %f',
$tax
->
getTaxRate
(
)
)
)
;
static
::
assertEquals
(
$tax
->
getTax
(
)
,
$actual
->
getTax
(
)
)
;
}
}
public
static
function
processorProvider
(
)
: \Generator
{
$context
= Generator::
createSalesChannelContext
(
)
;
$context
->
setTaxState
(
CartPrice::TAX_STATE_GROSS
)
;
$context
->
setItemRounding
(
new
CashRoundingConfig
(
2, 0.01, true
)
)
;
yield
'Remove discounts when cart is empty' =>
[
[
new
PercentageItem
(
10, self::DISCOUNT_ID
)
]
,
null,
]
;
yield
'Remove discount when cart gets negative' =>
[
[
new
CalculatedItem
(
10,
new
HighTaxes
(
)
,
$context
)
,
new
AbsoluteItem
(
-20, self::DISCOUNT_ID
)
,
]
,
$salesChannelContext
=
$this
->salesChannelContextFactory->
create
(
Uuid::
randomHex
(
)
,
$order
->
getSalesChannelId
(
)
,
$options
)
;
$salesChannelContext
->
getContext
(
)
->
addExtensions
(
$context
->
getExtensions
(
)
)
;
$salesChannelContext
->
addState
(
...
$context
->
getStates
(
)
)
;
$salesChannelContext
->
setTaxState
(
$order
->
getTaxStatus
(
)
)
;
if
(
$context
->
hasState
(
Context::SKIP_TRIGGER_FLOW
)
)
{
$salesChannelContext
->
getContext
(
)
->
addState
(
Context::SKIP_TRIGGER_FLOW
)
;
}
if
(
$order
->
getItemRounding
(
)
!== null
)
{
$salesChannelContext
->
setItemRounding
(
$order
->
getItemRounding
(
)
)
;
}
if
(
$order
->
getTotalRounding
(
)
!== null
)
{
$salesChannelContext
->
setTotalRounding
(
$order
->
getTotalRounding
(
)
)
;
}
if
(
$order
->
getRuleIds
(
)
!== null
)
{
$salesChannelContext
->
setRuleIds
(
$order
->
getRuleIds
(
)
)
;
}
$event
=
new
SalesChannelContextAssembledEvent
(
$order
,
$salesChannelContext
)
;
QuantityPriceDefinition
$priceDefinition
)
: void
{
$taxCalculator
=
new
TaxCalculator
(
)
;
$priceDefinition
->
setIsCalculated
(
false
)
;
$calculator
=
new
QuantityPriceCalculator
(
new
GrossPriceCalculator
(
$taxCalculator
,
new
CashRounding
(
)
)
,
new
NetPriceCalculator
(
$taxCalculator
,
new
CashRounding
(
)
)
)
;
$context
= Generator::
createSalesChannelContext
(
)
;
$context
->
setItemRounding
(
$config
)
;
$lineItemPrice
=
$calculator
->
calculate
(
$priceDefinition
,
$context
)
;
static
::
assertEquals
(
$expected
,
$lineItemPrice
)
;
}
/** * @dataProvider netPrices */
public
function
testNetPrices
(
CalculatedPrice
$expected
,
->
willReturn
(
$customer
)
;
return
$context
;
}
private
function
getOrderRouteWithValidOrder
(
string
$orderId
, ?CashRoundingConfig
$itemRounding
= null, ?CashRoundingConfig
$totalRounding
= null
)
: OrderRoute
{
$order
=
new
OrderEntity
(
)
;
$order
->
setId
(
$orderId
)
;
if
(
$itemRounding
instanceof CashRoundingConfig
)
{
$order
->
setItemRounding
(
$itemRounding
)
;
}
if
(
$totalRounding
instanceof CashRoundingConfig
)
{
$order
->
setTotalRounding
(
$totalRounding
)
;
}
$searchResult
=
new
EntitySearchResult
(
OrderDefinition::ENTITY_NAME,
1,
new
EntityCollection
(
[
$order
]
)
,
null,
$salesChannelEntity
=
new
SalesChannelEntity
(
)
;
$salesChannelEntity
->
setUniqueIdentifier
(
TestDefaults::SALES_CHANNEL
)
;
$salesChannelEntity
->
setCustomerGroupId
(
$customerGroupId
)
;
$salesChannelEntity
->
setPaymentMethodId
(
$paymentMethodId
)
;
$salesChannelEntity
->
setShippingMethodId
(
$shippingMethodId
)
;
$currency
=
new
CurrencyEntity
(
)
;
$rounding
=
new
CashRoundingConfig
(
1, 1, true
)
;
$currency
->
setUniqueIdentifier
(
$currencyId
)
;
$currency
->
setTotalRounding
(
$rounding
)
;
$currency
->
setItemRounding
(
$rounding
)
;
$currency
->
setId
(
$currencyId
)
;
$currency
->
setFactor
(
1
)
;
$country
=
new
CountryEntity
(
)
;
$country
->
setUniqueIdentifier
(
$countryId
)
;
$country
->
setId
(
$countryId
)
;
$paymentMethod
=
new
PaymentMethodEntity
(
)
;
$paymentMethod
->
setUniqueIdentifier
(
$paymentMethodId
)
;
$shippingMethod
=
new
ShippingMethodEntity
(
)
;
$cartPrice
=
new
CartPrice
(
19.5, 19.5, 19.5,
new
CalculatedTaxCollection
(
)
,
new
TaxRuleCollection
(
)
, CartPrice::TAX_STATE_FREE
)
;
// Order entity
$order
=
new
OrderEntity
(
)
;
$order
->
setPrice
(
$cartPrice
)
;
$order
->
setId
(
Uuid::
randomHex
(
)
)
;
$order
->
setBillingAddressId
(
'order-address-id'
)
;
$order
->
setCurrencyId
(
'order-currency-id'
)
;
$order
->
setLanguageId
(
'order-language-id'
)
;
$order
->
setSalesChannelId
(
TestDefaults::SALES_CHANNEL
)
;
$order
->
setTotalRounding
(
$this
->cashRoundingConfig
)
;
$order
->
setItemRounding
(
$this
->cashRoundingConfig
)
;
$order
->
setRuleIds
(
[
'order-rule-id-1', 'order-rule-id-2'
]
)
;
$order
->
setTaxStatus
(
CartPrice::TAX_STATE_FREE
)
;
if
(
$toManipulate
!== 'order-no-order-customer'
)
{
$order
->
setOrderCustomer
(
$this
->
getOrderCustomer
(
)
)
;
}
if
(
$toManipulate
!== 'order-no-transactions'
)
{
$order
->
setTransactions
(
$orderTransactionCollection
)
;
}
if
(
$toManipulate
!== 'order-no-line-items'
)
{
$order
->
setLineItems
(
$orderLineItemCollection
)
;
}