zippomode

Пейпал Грузия подсчёт налогов от mapi.ge

Jul 1st, 2023
1,827
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  2. var lastRow = sheet.getLastRow();
  3. var reportCurrency = "";
  4.  
  5. // @zerohaste вместе с нейросетью написал это. Благодарности мне, критика нейросети.
  6. // Удаление моей всратой рекламы преследуется кармически.
  7. // Гайд и актуальная версия скрипта лежит на https://mapi.ge/paypal-script
  8. // Вопросы жалобы предложения пишите по контактам.
  9.  
  10. function onOpen() {
  11.   var ui = SpreadsheetApp.getUi();
  12.   ui.createMenu('Paypal Ge Taxes')
  13.     .addItem('Calculate USD', 'calculateUSD')
  14.     .addItem('Calculate EUR', 'calculateEUR')
  15.     .addToUi();
  16. }
  17.  
  18. function calculateUSD() {
  19.   executeAllScripts("USD");
  20. }
  21.  
  22. function calculateEUR() {
  23.   executeAllScripts("EUR");
  24. }
  25.  
  26. function executeAllScripts(currency) {
  27.   reportCurrency = currency;
  28.   sheet.getRange("G1").setValue(currency);
  29.   setHeaders();
  30.   getExchangeRate();
  31.   multiplyColumns();
  32. }
  33.  
  34.  
  35. function setHeaders() {
  36.   sheet.getRange("D2:D" + lastRow).clearContent();
  37.   sheet.getRange("E2:E" + lastRow).clearContent();
  38.   sheet.getRange("F2:F" + lastRow).clearContent();
  39.   sheet.getRange("G2:G" + lastRow).clearContent();
  40.  
  41.   sheet.getRange("D1").setValue("Rate " + reportCurrency);
  42.   sheet.getRange("E1").setValue("In Lari");
  43.   sheet.getRange("F1").setValue("Api Date");
  44.   sheet.getRange("H1").setFormula('=HYPERLINK("https://mapi.ge")');
  45.   sheet.getRange("I1").setValue("Exchange rates for online/offline");
  46.   sheet.getRange("D" + lastRow).setValue("Sum in Lari");
  47.   sheet.getRange("A" + lastRow).setValue("Mapi.ge - exchange rates Tbilisi/Batumi");
  48. }
  49.  
  50.  
  51. function getExchangeRate() {
  52.   var rangeA = sheet.getRange("A2:A" + lastRow);
  53.   var dates = rangeA.getValues();
  54.     // esli vi vidite etot script bez ukazania avtorstva znachit ukraden u @zerohaste
  55.   for (var i = 0; i < dates.length; i++) {
  56.     var dateString = dates[i][0];
  57.    
  58.     if (!isValidDate(dateString)) {
  59.       continue;
  60.     }
  61.    
  62.     var formattedDate = formatDate(dateString);
  63.     var apiUrl = getApiUrl(reportCurrency, formattedDate);
  64.    
  65.     sheet.getRange("G" + (i + 2)).setValue(apiUrl);
  66.  
  67.     var response = UrlFetchApp.fetch(apiUrl);
  68.     var data = JSON.parse(response.getContentText());
  69.  
  70.     try {
  71.       var rate = data[0].currencies[0].rate;
  72.       sheet.getRange("D" + (i + 2)).setValue(rate);
  73.     } catch (error) {
  74.       sheet.getRange("D" + (i + 2)).setValue("N/A");
  75.     }
  76.  
  77.     writeApiDate(sheet, formattedDate, i + 2);
  78.  
  79.     Utilities.sleep(10);
  80.   }
  81. }
  82.  
  83. function isValidDate(dateString) {
  84.   return /^\d{1,2}\/\d{1,2}\/\d{4}$/.test(dateString);
  85. }
  86.  
  87. function formatDate(dateString) {
  88.   var parts = dateString.split("/");
  89.   return parts[2] + "-" + parts[1] + "-" + parts[0];
  90. }
  91.  
  92. function getApiUrl(reportCurrency, date) {
  93.   return "https://nbg.gov.ge/gw/api/ct/monetarypolicy/currencies/en/json/?currencies=" + reportCurrency + "&date=" + date;
  94. }
  95.  
  96. function writeApiDate(sheet, date, row) {
  97.   var formattedDate = Utilities.formatDate(new Date(date), sheet.getParent().getSpreadsheetTimeZone(), "dd/MM/yyyy");
  98.   sheet.getRange("F" + row).setValue(formattedDate);
  99. }
  100.  
  101. function multiplyColumns() {
  102.   var rangeC = sheet.getRange("C2:C" + lastRow);
  103.   var rangeD = sheet.getRange("D2:D" + lastRow);
  104.   var rangeE = sheet.getRange("E2:E" + (lastRow - 1));
  105.  
  106.   var valuesC = rangeC.getValues();
  107.   var valuesD = rangeD.getValues();
  108.  
  109.   for (var i = 0; i < valuesC.length; i++) {
  110.     var amount = valuesC[i][0];
  111.     var rate = valuesD[i][0];
  112.    
  113.     // Заменяем запятую на точку в значениях столбцов C и D
  114.     amount = parseFloat(amount.toString().replace(",", "."));
  115.     rate = parseFloat(rate.toString().replace(",", "."));
  116.    
  117.     var result = amount * rate;
  118.    
  119.     // Проверка, является ли результат умножения NaN или равен 0
  120.     if (isNaN(result) || result === 0) {
  121.       continue; // Пропустить запись значения, если результат NaN или равен 0
  122.     }
  123.    
  124.     rangeE.getCell(i + 1, 1).setValue(result);
  125.   }
  126.  
  127.   // Получение суммы столбца E
  128.   var sumE = "=SUM(E2:E" + (lastRow - 1) + ")";
  129.   sheet.getRange("E" + lastRow).setValue(sumE);
  130. }
  131.  
  132.  
Advertisement
Add Comment
Please, Sign In to add comment