fetchData.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. window.fetchData = function(from, to, callback){
  2. retrieveDates = [];
  3. //Compares dates to dates already stored and makes a list of those needed
  4. let fromCopy = new Date(from);
  5. for(let i = 0; i < data.dates.length; i+=2){
  6. if(to <= new Date(data.dates[0]) || fromCopy >= new Date(data.dates[data.dates.length - 1])){
  7. retrieveDates.push(fromCopy);
  8. retrieveDates.push(to);
  9. break;
  10. }
  11. let date0 = new Date(data.dates[i]);
  12. let date1 = new Date(data.dates[i+1]);
  13. if(fromCopy < date0){
  14. retrieveDates.push(fromCopy);
  15. retrieveDates.push(date0);
  16. fromCopy = date1;
  17. }else if(fromCopy > date0 && fromCopy < date1){
  18. fromCopy = date1;
  19. }
  20. }
  21. if(retrieveDates.length > 0){
  22. axios.post("/getData", {dates: retrieveDates})
  23. .then((response)=>{
  24. if(typeof(response.data) === "string"){
  25. banner.createError(response.data);
  26. }else{
  27. let mergedDates = [];
  28. let oldIndex = 0;
  29. let newIndex = 0;
  30. while(oldIndex + newIndex < retrieveDates.length + data.dates.length){
  31. let oldDateOne = new Date(data.dates[oldIndex]);
  32. let oldDateTwo = new Date(data.dates[oldIndex+1]);
  33. if(oldDateOne < retrieveDates[newIndex] || newIndex >= retrieveDates.length){
  34. if(mergedDates.length > 0 && oldDateOne.getTime() === mergedDates[mergedDates.length-1].getTime()){
  35. mergedDates[mergedDates.length-1] = oldDateTwo;
  36. }else{
  37. mergedDates.push(oldDateOne);
  38. mergedDates.push(oldDateTwo);
  39. }
  40. oldIndex += 2;
  41. }else{
  42. if(mergedDates.length > 0 && retrieveDates[newIndex].getTime() === mergedDates[mergedDates.length-1].getTime()){
  43. mergedDates[mergedDates.length-1] = retrieveDates[newIndex+1];
  44. }else{
  45. mergedDates.push(retrieveDates[newIndex]);
  46. mergedDates.push(retrieveDates[newIndex+1]);
  47. }
  48. newIndex += 2;
  49. }
  50. }
  51. data.dates = mergedDates;
  52. for(let set of response.data){
  53. for(let transaction of set.transactions){
  54. transaction.date = new Date(transaction.date);
  55. transaction.date.setMinutes(transaction.date.getMinutes() + transaction.date.getTimezoneOffset());
  56. }
  57. if(set.transactions[0].date < data.transactions[0].date){
  58. data.transactions = set.transactions.concat(data.transactions);
  59. }else if(set.transactions[set.transactions.length-1].date > data.transactions[data.transactions.length-1].date){
  60. data.transactions = data.transactions.concat(set.transactions);
  61. }else{
  62. for(let i = 0; i < data.transactions.length; i++){
  63. if(set.transactions[0].date > data.transactions[i].date){
  64. data.transactions = data.transactions.slice(0, i).concat(set.transactions).concat(data.transactions.slice(i, data.transactions.length - 1));
  65. break;
  66. }
  67. }
  68. }
  69. for(let purchase of set.purchases){
  70. purchase.date = new Date();
  71. purchase.date.setMinutes(purchase.date.getMinutes() + purchase.date.getTimezoneOffset());
  72. }
  73. if(set.purchases.length > 0){
  74. if(data.purchases.length === 0){
  75. data.purchases = set.purchases;
  76. }else if(set.purchases[0].date < data.purchases[0].date){
  77. data.purchases = set.purchases.concat(data.purchases);
  78. }else if(set.purchases[set.purchases.length-1].date > data.purchases[data.purchases.length-1].date){
  79. data.purchases = data.purchases.concat(set.purchases);
  80. }else{
  81. for(let i = 0; i < data.purchases.length; i++){
  82. if(set.purchases[0].date > data.purchases[i].date){
  83. data.purchases = data.purchases.slice(0, i).concat(set.purchases).concat(data.purchases.slice(i, data.purchases.length - 1));
  84. break;
  85. }
  86. }
  87. }
  88. }
  89. }
  90. callback();
  91. }
  92. })
  93. .catch((err)=>{});
  94. }else{
  95. callback();
  96. }
  97. }
  98. window.getInputDates = function(name){
  99. let from = document.querySelector(`#${name}From`).valueAsDate;
  100. let to = document.querySelector(`#${name}To`).valueAsDate;
  101. from.setMinutes(from.getMinutes() + from.getTimezoneOffset());
  102. to.setMinutes(to.getMinutes() + to.getTimezoneOffset());
  103. to.setDate(to.getDate() + 1);
  104. return [from, to];
  105. }