Advertisement
Guest User

paypal tax calculator georgia by @zerohaste

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