code: protected function createSaleContext(SaleInterface $sale): ContextInterface
      {
          $context = $this->createContext();
  
          if (null !== $group = $sale->getCustomerGroup()) {
              $context
                  ->setCustomerGroup($group)
                  ->setBusiness($group->isBusiness());
          }
          if (null !== $address = $sale->getInvoiceAddress()) {
              $context->setInvoiceCountry($address->getCountry());
          }
          $address = $sale->isSameAddress() ? $sale->getInvoiceAddress() : $sale->getDeliveryAddress();
          if (null !== $address) {
              $context->setDeliveryCountry($address->getCountry());
          }
          if (null !== $currency = $sale->getCurrency()) {
              $context->setCurrency($currency);
          }
          if (null !== $mode = $sale->getVatDisplayMode()) {
              $context->setVatDisplayMode($mode);
          }
          if ($sale instanceof OrderInterface && null !== $date = $sale->getCreatedAt()) {
              $context->setDate($date);
          }
  
          $context->setTaxExempt($sale->isTaxExempt());
  
          if (null !== $customer = $sale->getCustomer()) {
              $this->fillFromCustomer($context, $customer);
          } elseif ($this->customerProvider->hasCustomer()) {
              $this->fillFromCustomer($context, $this->customerProvider->getCustomer());
          }
  
          $this->finalize($context);
  
          $sale->setContext($context);
  
          return $context;
      }
docs: Creates and sets the sale context.
  
  @param SaleInterface $sale The sale
  
  @return ContextInterface