Advertisement
Guest User

Untitled

a guest
Mar 7th, 2025
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.79 KB | None | 0 0
  1. function updateInventoryManually() {
  2. var ss = SpreadsheetApp.getActiveSpreadsheet();
  3. var inventorySheet = ss.getSheetByName('Inventory');
  4. var servicesSheet = ss.getSheetByName('Services & Products');
  5. var transactionsSheet = ss.getSheetByName('Daily Transactions');
  6. var replenishmentSheet = ss.getSheetByName('Replenishment Rules');
  7.  
  8. Logger.log("Script started successfully.");
  9.  
  10. if (!inventorySheet || !servicesSheet || !transactionsSheet || !replenishmentSheet) {
  11. Logger.log("Error: One or more sheets are missing.");
  12. return;
  13. }
  14.  
  15. var today = new Date();
  16. var transactionsData = transactionsSheet.getDataRange().getValues();
  17. var dateHeader = Utilities.formatDate(today, Session.getScriptTimeZone(), 'yyyy-MM-dd');
  18.  
  19. var lastColumn = inventorySheet.getLastColumn();
  20. var previousColumn = lastColumn;
  21. lastColumn++;
  22.  
  23. inventorySheet.setColumnWidth(lastColumn, 100);
  24. inventorySheet.getRange(1, lastColumn).setValue(dateHeader);
  25.  
  26. var headerRow = transactionsData[0];
  27. var processedColumnIndex = headerRow.indexOf("Processed");
  28.  
  29. if (processedColumnIndex === -1) {
  30. processedColumnIndex = headerRow.length;
  31. transactionsSheet.getRange(1, processedColumnIndex + 1).setValue("Processed");
  32. }
  33.  
  34. var productTransactionCount = {};
  35.  
  36. // Collect transaction data
  37. for (var i = 1; i < transactionsData.length; i++) {
  38. var serviceName = transactionsData[i][1];
  39. var isProcessed = transactionsData[i][processedColumnIndex];
  40.  
  41. if (!isProcessed) {
  42. productTransactionCount[serviceName] = (productTransactionCount[serviceName] || 0) + 1;
  43. transactionsSheet.getRange(i + 1, processedColumnIndex + 1).setValue("Yes");
  44. Logger.log("Processing transaction for: " + serviceName + ", Count: " + productTransactionCount[serviceName]);
  45. }
  46. }
  47.  
  48. // Deduct inventory based on transactions
  49. for (var serviceName in productTransactionCount) {
  50. var count = productTransactionCount[serviceName];
  51. var consumablesList = getConsumablesForService(serviceName, servicesSheet);
  52.  
  53. Logger.log("Checking consumables for service: " + serviceName + " -> " + consumablesList.join(", "));
  54.  
  55. if (consumablesList.length > 0) {
  56. for (var j = 0; j < consumablesList.length; j++) {
  57. var consumable = consumablesList[j].trim();
  58. updateInventory(consumable, inventorySheet, lastColumn, previousColumn, count, replenishmentSheet, 'A2:A19', 2);
  59. }
  60. }
  61.  
  62. updateInventory(serviceName, inventorySheet, lastColumn, previousColumn, count, replenishmentSheet, 'A21:A53', 21);
  63. }
  64.  
  65. carryOverBalance(inventorySheet, lastColumn, previousColumn);
  66.  
  67. Logger.log("Inventory update process completed.");
  68. }
  69.  
  70. // Retrieve consumables linked to a service
  71. function getConsumablesForService(serviceName, servicesSheet) {
  72. var data = servicesSheet.getDataRange().getValues();
  73. for (var i = 1; i < data.length; i++) {
  74. if (data[i][0] == serviceName) {
  75. return data[i].slice(4, 13).filter(Boolean); // Extract non-empty consumables from columns E to M
  76. }
  77. }
  78. return [];
  79. }
  80.  
  81. // Retrieve replenishment settings
  82. function getReplenishmentDetails(itemName, replenishmentSheet) {
  83. var replenishmentData = replenishmentSheet.getDataRange().getValues();
  84. for (var i = 1; i < replenishmentData.length; i++) {
  85. if (replenishmentData[i][0] === itemName) {
  86. Logger.log("Replenishment rules for " + itemName + ": Threshold = " + replenishmentData[i][1] + ", Replenishment Amount = " + replenishmentData[i][2]);
  87. return {
  88. threshold: replenishmentData[i][1] || 0,
  89. replenishmentAmount: replenishmentData[i][2] || 0
  90. };
  91. }
  92. }
  93. Logger.log("No replenishment rules found for " + itemName);
  94. return { threshold: 0, replenishmentAmount: 0 };
  95. }
  96.  
  97. // Deduct inventory and replenish if needed
  98. function updateInventory(itemName, inventorySheet, lastColumn, previousColumn, count, replenishmentSheet, range, startRow) {
  99. var itemRange = inventorySheet.getRange(range).getValues();
  100. var replenishmentDetails = getReplenishmentDetails(itemName, replenishmentSheet);
  101. var threshold = replenishmentDetails.threshold;
  102. var replenishmentAmount = replenishmentDetails.replenishmentAmount;
  103.  
  104. Logger.log("Updating inventory for: " + itemName);
  105.  
  106. for (var i = 0; i < itemRange.length; i++) {
  107. if (itemRange[i][0] === itemName) {
  108. var previousBalance = inventorySheet.getRange(i + startRow, previousColumn).getValue() || inventorySheet.getRange(i + startRow, 2).getValue();
  109. var newBalance = previousBalance - count;
  110. var balanceCell = inventorySheet.getRange(i + startRow, lastColumn);
  111.  
  112. Logger.log("Previous Balance: " + previousBalance + ", New Balance: " + newBalance);
  113.  
  114. if (newBalance <= threshold && replenishmentAmount > 0) {
  115. newBalance += replenishmentAmount;
  116. balanceCell.setBackground("#EE82EE"); // Violet for replenishment
  117. Logger.log(itemName + " reached threshold, replenishing " + replenishmentAmount + " units.");
  118. } else if (newBalance !== previousBalance) {
  119. balanceCell.setBackground("#FFFF00"); // Yellow for deduction change
  120. }
  121.  
  122. balanceCell.setValue(newBalance);
  123. return;
  124. }
  125. }
  126.  
  127. Logger.log("Item not found in inventory: " + itemName);
  128. }
  129.  
  130. // Carry over balances
  131. function carryOverBalance(inventorySheet, lastColumn, previousColumn) {
  132. var allItemsRange = inventorySheet.getRange('A2:A53').getValues();
  133.  
  134. for (var i = 0; i < allItemsRange.length; i++) {
  135. var currentBalanceCell = inventorySheet.getRange(i + 2, lastColumn);
  136. var previousBalance = inventorySheet.getRange(i + 2, previousColumn).getValue();
  137.  
  138. if (!currentBalanceCell.getValue()) {
  139. currentBalanceCell.setValue(previousBalance || 0);
  140. Logger.log("Carrying over balance for row " + (i + 2) + ": " + previousBalance);
  141. }
  142. }
  143. }
  144.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement