Điểm:0

Điều chỉnh tổng giá trong thanh toán thương mại

lá cờ in

Tôi có một thiết lập cửa hàng với 2 sản phẩm. Các tour du lịch công cộng và tư nhân. Các tour du lịch công cộng là 10 cho mỗi đơn vị.

Mặt khác, các tour du lịch tư nhân chỉ nhằm mục đích thu tiền đặt cọc. Tôi cần tổng số tiền là 50 đô la bất kể số lượng đã chọn và phần còn lại được thanh toán tại chỗ.

Tôi đã thử tạo Khuyến mại tùy chỉnh như bên dưới. Tôi có thể tạo khuyến mãi nhưng có vẻ như nó không áp dụng trong giỏ hàng/thanh toán. Tôi thậm chí đã thử biến nó thành một phiếu giảm giá và khi tôi áp dụng phiếu giảm giá, nó báo rằng nó không hợp lệ, có thể đã hết hạn hoặc đã được sử dụng. Tôi đặt ra một điều kiện và đó là họ có một chuyến tham quan riêng trong giỏ hàng của họ.

<?php

không gian tên Drupal\tour_reservation\Plugin\Commerce\PromotionOffer;

sử dụng Drupal\commerce_order\Adjustment;
sử dụng Drupal\commerce_price\Price;
sử dụng Drupal\commerce_promotion\Entity\PromotionInterface;
sử dụng Drupal\commerce_promotion\Plugin\Commerce\PromotionOffer\PromotionOfferBase;
sử dụng Drupal\Core\Entity\EntityInterface;
sử dụng Drupal\Core\Form\FormStateInterface;

/**
 * Giảm giá một giỏ hàng đến một số tiền cố định.
 *
 * @C CommercePromotionOffer(
 * id = "tour_reservation_discount_to_fixed",
 * label = @Translation("Đặt tổng số giỏ hàng thành một số tiền cố định"),
 * entity_type = "thương_mại_đơn_hàng_mặt_hàng",
 * )
 */
lớp OrderFixedPrice mở rộng PromotionOfferBase {

  /**
   * {@inheritdoc}
   */
  hàm công khai defaultConfiguration() {
    trở lại [
      'số tiền' => NULL,
    ] + cha mẹ::defaultConfiguration();
  }

  /**
   * {@inheritdoc}
   */
  chức năng công khai buildConfigurationForm(mảng $form, FormStateInterface $form_state) {
    $form += parent::buildConfigurationForm($form, $form_state);

    $amount = $this->configuration['amount'];
    // Một lỗi trong phần tử biểu mẫu plugin_select khiến $amount không đầy đủ.
    if (isset($amount) && !isset($amount['number'], $amount['currency_code'])) {
      số tiền $ = NULL;
    }

    $form['số tiền'] = [
      '#type' => 'commerce_price',
      '#title' => $this->t('Số tiền'),
      '#default_value' => $amount,
      '#required' => ĐÚNG,
      '#description' => $this->t('Đặt giá giỏ hàng. Định dạng: 9,99'),
    ];

    trả về biểu mẫu $;
  }

  /**
   * {@inheritdoc}
   */
  hàm công khai validateConfigurationForm(mảng &$form, FormStateInterface $form_state) {
    $values ​​= $form_state->getValue($form['#parents']);
    if ($values['amount']['number'] < 0) {
      $form_state->setError($form, $this->t('Số tiền không được âm.'));
    }
  }

  /**
   * {@inheritdoc}
   */
  hàm công khai submitConfigurationForm(mảng &$form, FormStateInterface $form_state) {
    cha mẹ::submitConfigurationForm($form, $form_state);

    $values ​​= $form_state->getValue($form['#parents']);
    $this->configuration['amount'] = $values['amount'];
  }

  /**
   * {@inheritdoc}
   */
  áp dụng hàm công khai(EntityInterface $entity, PromotionInterface $promotion) {
    $this->assertEntity($entity);
    /** @var \Drupal\commerce_order\Entity\OrderItemInterface $order_item */
    $order_item = $entity;
    $target_amount = $this->getAmount();
    $order_item->addAdjustment(Điều chỉnh mới([
      'loại' => 'khuyến mãi',
      'nhãn' => t('Giảm giá'),
      'số tiền' => $ target_amount,
      'source_id' => $promotion->id(),
    ]));
  }

  /**
   * Nhận số tiền cung cấp.
   *
   * @return \Drupal\commerce_price\Price|null
   * Số tiền, hoặc NULL nếu không biết.
   */
  chức năng được bảo vệ getAmount() {
    if (!empty($this->configuration['amount'])) {
      $amount = $this->configuration['amount'];
      trả lại Giá mới($amount['number'], $amount['currency_code']);
    }
  }

}

Lý tưởng nhất là tôi không muốn sử dụng các chương trình khuyến mãi và thay vào đó chỉ cần điều chỉnh giá trong giỏ hàng. Bất kỳ ý tưởng?

lá cờ cn
Đây có phải là những loại sản phẩm khác nhau không? Tôi sẽ tạo ra hai loại sản phẩm, công khai với bất kỳ mức giá nào và riêng tư miễn phí. Sau đó, thêm một số logic để đảm bảo bạn không có cả hai loại trong giỏ hàng cùng một lúc. Sau đó thêm tiền đặt cọc dưới dạng phí "vận chuyển" cho các sản phẩm riêng tư.
lá cờ in
Điều đó cũng có thể làm việc. Tôi nghĩ mình sẽ chỉ giới hạn số lượng tour riêng xuống còn 1 nhưng vẫn tiết kiệm được số lượng khách. Tôi đã sử dụng giải pháp này https://drupal.stackexchange.com/a/271556/26823

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.