Advertisement
DaniDori

Untitled

Apr 15th, 2024
571
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function () {
  2.   "use strict";
  3.  
  4.   let phonePrice = 23000;
  5.  
  6.   const igraBtn = document.createElement("button");
  7.   const igraPercentageBtn = document.createElement("button");
  8.   const igraDisplayBtn = document.createElement("button");
  9.   const igraInput = document.createElement("input");
  10.   const promoInput = document.createElement("input");
  11.  
  12.  
  13.  
  14.   igraDisplayBtn.classList.add("igra-btn-display");
  15.   igraDisplayBtn.textContent = "X";
  16.  
  17.   //обработка кнопки крестик
  18.   igraDisplayBtn.addEventListener("click", () => {
  19.     igraBtn.classList.toggle('d-n');
  20.     igraPercentageBtn.classList.toggle('d-n');
  21.     igraInput.classList.toggle('d-n');
  22.     promoInput.classList.toggle('d-n');
  23.   });
  24.  //обработка кнопки Посчитать
  25.   igraBtn.textContent = "Посчитать";
  26.   igraBtn.classList.add("igra-btn");
  27.   igraBtn.addEventListener("click", () => {
  28.     phonePrice = Number(igraInput.value);
  29.     igraSortCatalog();
  30.   });
  31.    //обработка кнопки сортировать
  32.   igraPercentageBtn.textContent = "Сортировать";
  33.   igraPercentageBtn.classList.add("igra-btn-percent");
  34.   igraPercentageBtn.addEventListener("click", () => {
  35.     phonePrice = Number(igraInput.value);
  36.     igraSortPercentage();
  37.   });
  38.  
  39.  
  40.  //обработка поля ввода цены
  41.   igraInput.type = "number";
  42.   igraInput.classList.add("igra-input");
  43.   igraInput.value = phonePrice;
  44.   igraInput.addEventListener("input", () => {
  45.     igraInput.value = igraInput.value.replace(/[^0-9]/g, "");
  46.     phonePrice = Number(igraInput.value);
  47.   });
  48.  
  49.  
  50.   let igraPromoString = ''
  51.   let promoArr = [];
  52.    //обработка поля ввода промокода
  53.   //promoInput.type = "string";
  54.   promoInput.classList.add("promo-input");
  55.   promoInput.value = `cats  20000  70000  7000
  56.   dogs  7000  60000  6000
  57.   cows  3000  15000  5500
  58.   eagles  21000  105000  7500`;
  59.   promoInput.addEventListener("input", () => {
  60.    // очищаем массив перед каждым новым заполнением
  61.    igraPromoString=promoInput.value.split(/\s+/)
  62.         for (let i=0; i<igraPromoString.length; i+=4) {
  63.           let promoName = igraPromoString[i];
  64.           let discont = +igraPromoString[i+1];
  65.           let minSum = +igraPromoString[i+2]
  66.           let promoPrice = +igraPromoString[i+3]
  67.           promoArr.push([promoName, discont, minSum, promoPrice])
  68.         }
  69. });
  70.  
  71.  
  72.  
  73.   setTimeout(() => {
  74.     const igraBody = document.body;
  75.     igraBody.appendChild(igraDisplayBtn);
  76.     igraBody.appendChild(igraPercentageBtn);
  77.     igraBody.appendChild(igraBtn);
  78.     igraBody.appendChild(igraInput);
  79.     igraBody.appendChild(promoInput);
  80.   }, 1000);
  81.  
  82.   let igraCards = [];
  83.  
  84.   function getIgraCards() {
  85.     return (igraCards = Array.from(document.querySelectorAll(".catalog-item")));
  86.   }
  87.  
  88.   function mapIgraCards() {
  89.     igraCards = getIgraCards();
  90.     igraCards.forEach((card) => {
  91.       if (card.querySelector(".item-price")) {
  92.         const igraItemPrice = igraConvertToNumber(
  93.           card.querySelector(".item-price").textContent
  94.         );
  95.         const igraItemBonus = igraConvertToNumber(
  96.           card.querySelector(".bonus-amount").textContent
  97.         );
  98.         const igraItemMoney = card.querySelector(".item-money");
  99.  
  100.         const igraItemProfit = document.createElement("div");
  101.         igraItemProfit.classList.add("item-profit");
  102.         igraItemProfit.textContent = igraGetProfitPrice(
  103.           igraItemPrice,
  104.           igraItemBonus
  105.         ) + '\n' + promoWorkHard(igraItemPrice, igraItemBonus, promoArr, phonePrice);
  106.        
  107.         if (igraItemMoney.querySelector(".item-profit")) {
  108.           igraItemMoney.querySelector(".item-profit").remove();
  109.         }
  110.         igraItemMoney.append(igraItemProfit);
  111.       }
  112.     });
  113.   }
  114.  
  115.   function igraConvertToNumber(str) {
  116.     // Удаляем все пробелы из строки
  117.     let stringWithoutSpaces = str.replace(/ /g, "");
  118.  
  119.     // Удаляем знак рубля, если есть
  120.     let stringWithoutCurrencySign = stringWithoutSpaces.replace("₽", "");
  121.  
  122.     // Преобразуем строку в число
  123.     let number = parseFloat(stringWithoutCurrencySign);
  124.  
  125.     // Возвращаем число
  126.     return number;
  127.   }
  128.  
  129.   function igraGetProfitPrice(price, bonus) {
  130.     let a = price - bonus;
  131.     let b = phonePrice - a;
  132.     let c = (phonePrice - price + 0.8 * bonus) * 100 / price
  133.     return c.toFixed(2);
  134.   }
  135.  
  136.   function igraSortCatalog() {
  137.     mapIgraCards();
  138.     let igraSortedCards = sortDivByPrice(getIgraCards());
  139.  
  140.     const igraCatalogItems = document.querySelector(".catalog-listing__items");
  141.     igraCatalogItems.innerHTML = "";
  142.     igraSortedCards.map((card) => {
  143.       igraCatalogItems.append(card);
  144.     });
  145.   }
  146.  
  147.   function igraSortPercentage() {
  148.     mapIgraCards();
  149.     let igraSortedCards = sortDivByPricePercentage(getIgraCards());
  150.     console.log(igraSortedCards)
  151.  
  152.     const igraCatalogItems = document.querySelector(".catalog-items-list");
  153.     igraCatalogItems.innerHTML = "";
  154.     igraSortedCards.map((card) => {
  155.       igraCatalogItems.append(card);
  156.     });
  157.   }
  158.    
  159.     //функция подсчета промокода
  160.     function promoWorkHard(phonePrice, bonusNum, promoArr, igraPrice){
  161.         let bestRoi = 0, bestPromoName = "";
  162.         let RoiMin = 0, RoiMax = 0
  163.         let bestPhoneCount = 0, totalPriceMin = 0, totalPriceMax = 0, bonusPercent = 0;
  164.         let totalBonus = 0;
  165.         for (let i = 0; i < promoArr.length; i++){
  166.             let promoName = promoArr[i][0], discont = promoArr[i][1];
  167.             let minSum = promoArr[i][2], promoPrice= promoArr[i][3];
  168.            
  169.           let kMax = Math.ceil(minSum / phonePrice);
  170.           let kMin = Math.floor(minSum / phonePrice);
  171.          
  172.           let totalPriceMax = phonePrice * kMax;
  173.           let totalPriceMin = phonePrice * kMin;
  174.           bonusPercent = bonusNum / phonePrice;
  175.           let totalBonusMax = (totalPriceMax - discont) * bonusPercent * 0.8
  176.           let totalBonusMin = (totalPriceMin - discont) * bonusPercent * 0.8
  177.          
  178.           RoiMax = (igraPrice * kMax - totalPriceMax + totalBonusMax + promoPrice) / (totalPriceMax + promoPrice)
  179.           RoiMin = (igraPrice * kMin - totalPriceMin + totalBonusMin + promoPrice) / (totalPriceMin + promoPrice)
  180.          
  181.           if(RoiMin > bestRoi){
  182.             bestRoi = RoiMin
  183.             bestPhoneCount = kMin
  184.             bestPromoName = promoName
  185.           }
  186.           if(RoiMax > bestRoi){
  187.             bestRoi = RoiMax
  188.             bestPhoneCount = kMax
  189.             bestPromoName = promoName
  190.           }
  191.         }
  192.          return `${bestPromoName}, ${bestPhoneCount}, ${bestRoi.toFixed(2)}`;
  193.     }
  194.    
  195.   function sortPrices(arr) {
  196.     const prices = arr.map((div) => {
  197.       const itemProfit = div.querySelector(".item-profit");
  198.       const price = itemProfit.textContent;
  199.       return parseInt(price);
  200.     });
  201.     prices.sort((a, b) => b - a);
  202.     return prices;
  203.   }
  204.   function sortDivByPrice(arr) {
  205.     const sortedArr = arr.sort((a, b) => {
  206.       if (a.querySelector(".item-profit")) {
  207.         const priceA = Number(a.querySelector(".item-profit").textContent);
  208.         const priceB = Number(b.querySelector(".item-profit").textContent);
  209. return priceB - priceA;
  210.       }
  211.     });
  212.     return sortedArr;
  213.   }
  214.  
  215.     function sortDivByPricePercentage(arr) {
  216.     const sortedArr = arr.sort((a, b) => {
  217.       if (a.querySelector(".bonus-percent")) {
  218.         const priceA = Number(igraMyGeeks(a.querySelector(".bonus-percent").textContent));
  219.         const priceB = Number(igraMyGeeks(b.querySelector(".bonus-percent").textContent));
  220.  
  221.         return priceB - priceA;
  222.       }
  223.     });
  224.  
  225.     return sortedArr;
  226.   }
  227.  
  228.   function igraMyGeeks(string) {
  229.  
  230.     // Input string
  231.     let str = string;
  232.  
  233.     // Using match with regEx
  234.     let matches = str.match(/(\d+)/);
  235.      
  236.     // Display output if number extracted
  237.     if (matches) {
  238.         return matches[0];
  239.     }
  240. }
  241. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement