Guest User

Untitled

a guest
Feb 21st, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.97 KB | None | 0 0
  1. // console.log('<insertRecomendationItem>');
  2. function insertRecomendationItem() {
  3. // Проверка на мультикорзину
  4. if ($('.bCartTotal .eCartTotal_summButton, .bCartPaymentContainer .submitBtn').length > 1)
  5. return false;
  6.  
  7. var cartStorage = Core.Namespace.imp('storages/cart_page/cart_page_storage'),
  8. cartModel = cartStorage.getModelInstance(),
  9. cartOzonModel,
  10. isShowProgressBar = false,
  11. mainTitle = '${title}',
  12. itemID = '141827520',
  13. priceTargetSum = parseInt('3500'),
  14. areaId = OzonShop.Storages.LocationStorage.model.get('areaId'),
  15. minSumForProgressBar = 0,
  16. startCheckoutRecommendation,
  17. $targetElement = $('.eCartTotal_DYcheckoutRecommendation');
  18.  
  19. var getDYRecommendations = function (widgetId) {
  20. var deferred = DYO.Q.defer();
  21.  
  22. DYO.recommendationWidgetData(widgetId, {
  23. context: {
  24. type: "CART",
  25. data: [].map.call(document.querySelectorAll('.eCartSplitItems [data-id]'), function (el) {
  26. return el.getAttribute("data-id")
  27. })
  28. }
  29. },
  30. function (err, data) {
  31.  
  32. if (err || data.slots.length === 0) {
  33. deferred.reject(err);
  34. } else {
  35. deferred.resolve(data.slots.map(function (slot) {
  36. return slot.item.sku
  37. }));
  38. }
  39. });
  40.  
  41. return deferred.promise;
  42. };
  43.  
  44. var popupModel = new OzonShop.Modules.Banners.CheckoutRecommendation.CheckoutRecommendationModel();
  45.  
  46. var CheckoutRecommendationClass = OzonShop.Modules.Banners.CheckoutRecommendation.CheckoutRecommendation.extend({
  47. _addToCart() {
  48. cartStorage.actions.dispatch(cartStorage.actions.CART.ADD_RECOMMENDATION_ITEM, {
  49. itemId: itemID
  50. });
  51. },
  52.  
  53. _close() {
  54. this.$element.remove();
  55. // Отправить событие о закрытии
  56. },
  57.  
  58. progressBarUpdate() {
  59. cartOzonModel = Core.Namespace.imp('storages/cart_page/cart_page_storage').getModelInstance().nestedModels.carts.get('ozon');
  60. var total = cartOzonModel.splits[0],
  61. price = total && total.price,
  62. isShowProgressBar = (price < priceTargetSum) && (price > minSumForProgressBar);
  63.  
  64. this.model.set('meta.isShowProgressBar', isShowProgressBar);
  65.  
  66. if (!isShowProgressBar)
  67. return;
  68.  
  69. // Для прогрессбара
  70. var deltaToFreeDelivery = priceTargetSum - price;
  71. var progress = 100 - deltaToFreeDelivery / ((priceTargetSum - minSumForProgressBar) / 100);
  72.  
  73. this.model.set('meta.priceDifference', deltaToFreeDelivery);
  74. this.model.set('meta.progress', progress);
  75. },
  76.  
  77. initialize() {
  78. var self = this;
  79. cartOzonModel = cartModel.nestedModels.carts.get('ozon');
  80.  
  81. // Смена города из корзины
  82. cartStorage.actions.bind(cartStorage.actions.CART.CHANGE_CITY, (result) => { result.then(function() {self.progressBarUpdate({}, cartOzonModel); self.render()});});
  83. // Сохрании информации о том, что город определн корректно
  84. cartStorage.actions.bind(cartStorage.actions.CART.SET_EXACT_CITY, (result) => { result.then(function() {self.progressBarUpdate({}, cartOzonModel); self.render()});});
  85. // Добавление товара из рекоммендаций
  86. cartStorage.actions.bind(cartStorage.actions.CART.ADD_RECOMMENDATION_ITEM, (result) => { result.then(function() {self.$element.remove(); startCheckoutRecommendation()});});
  87. // Включение кодового слова
  88. cartStorage.actions.bind(cartStorage.actions.CART.ACTIVATE_MAGIC_CODE, (result) => { result.then(function() {self.progressBarUpdate({}, cartOzonModel); self.render()});});
  89. // Изменение количества товаров
  90. cartStorage.actions.bind(cartStorage.actions.CART.CHANGE_QUANTITY, (result) => { result.then(function() {self.progressBarUpdate({}, cartOzonModel); self.render()});});
  91. // Удаление товара из корзины
  92. cartStorage.actions.bind(cartStorage.actions.CART.REMOVE_CART_ITEM, (result) => { result.then(function() {self.progressBarUpdate({}, cartOzonModel); self.render()});});
  93. // Восстановление товара в корзине
  94. cartStorage.actions.bind(cartStorage.actions.CART.RESTORE_CART_ITEM, (result) => { result.then(function() {self.progressBarUpdate({}, cartOzonModel); self.render()});});
  95. // Удалание всех товаров в корзине
  96. cartStorage.actions.bind(cartStorage.actions.CART.REMOVE_ALL_CART_ITEMS, (result) => { result.then(function() {self.progressBarUpdate({}, cartOzonModel); self.render()});});
  97. // Восстановление всех товаров в корзине
  98. cartStorage.actions.bind(cartStorage.actions.CART.RESTORE_ALL_CART_ITEMS, (result) => { result.then(function() {self.progressBarUpdate({}, cartOzonModel); self.render()});});
  99.  
  100. self.progressBarUpdate({}, cartOzonModel);
  101. },
  102.  
  103. model: popupModel
  104. });
  105.  
  106. var popupView = new CheckoutRecommendationClass();
  107.  
  108. startCheckoutRecommendation = function () {
  109. var defer = $.Deferred();
  110.  
  111. getDYRecommendations(27765).then(function (SKU) {
  112. console.log('>recived SKUs>: ', SKU);
  113. itemID = SKU[0];
  114.  
  115. OzonShop.Services.ItemServiceV5.getItemsData({
  116. items: [{item: itemID}],
  117. fields: ['Name', 'Availability', 'CoverImage', 'Images', 'Description', 'Price', 'PriceCurrency'],
  118. areaId: areaId,
  119. currency: ['USD', 'EUR']
  120. }).then(function (data) {
  121. defer.resolve(data[0]);
  122. }, function (error) {
  123. }
  124. );
  125. });
  126.  
  127. $.when(defer).then(function (data) {
  128. // Показываем только товары в наличии
  129. if (data.availability &&
  130. data.availability[0] &&
  131. data.availability[0].availabilityType !== 'InStock')
  132. return;
  133.  
  134. popupView.model.set('', data);
  135. popupView.model.set('meta.priceTargetSum', priceTargetSum);
  136. popupView.model.set('meta.priceDifference', priceTargetSum - data.price.price);
  137. popupView.progressBarUpdate();
  138.  
  139. popupView.render();
  140.  
  141. $targetElement.html(popupView.element);
  142. $targetElement.append('<style>.eDYRecomendPopup_arrowTop::after {left: -3px; top: -6px;}</style>');
  143. });
  144. };
  145.  
  146. startCheckoutRecommendation();
  147. }
  148. DY.API('callback', insertRecomendationItem);
Add Comment
Please, Sign In to add comment