{"version":3,"sources":["widgets/module/purchase/units/main.es6.js"],"names":["create","local","bus","deficit","units","defaultPreferred","defaultLessRequiredAmount","defaultAutoDetected","historyLastPurchased","historyLastSubscribed","userTags","hasNonSubscriptionTransactionLast","thereWasSubscription","DEFAULT_STORE","LAST_PURCHASE_PREFFER_FEATURE","DUTE_TYPE_FILTER","HISTORY_OPERATIONS_COUNT","HISTORY_SORTING_DIRECTION","isMembershipRenew","unit","sku","indexOf","isMembershipPack","isThreepack","includes","isPurchasepack","isPayingUser","isVisibleMembershipPackages","container","packages","find","toArray","map","node","dataset","filter","el","undefined","some","filterUnits","config","purchase","availablePackages","length","amount","unAvailableDeficitPackage","threepack","foundPackage","deficits","index","deficitItem","existByTag","isExistByTag","p","tags","pack","packageByTag","getUnitByAmount","found","info","i","nextUnit","diff1","diff2","list","template","selectUnit","selected","parents","hasClass","data","emit","toggleClass","removeProp","removeAttr","end","prop","attr","getPreferredUnit","callback","currentSubscriptionPromise","mall","settings","get","me","id","err","preferred","chargebackAmount","chargebackreductionapplied","historyLast","p1","Promise","resolve","reject","api","credits","subscriptions","next","domains","intercept","selectedAmount","parseInt","match","then","catch","console","log","getBestPriceUnit","perCredit","best","forEach","bestPrice","isBestpriceUnitVisible","size","removeUnit","removeClass","price","toString","split","join","remove","filterUnsuitablePackages","existAsDeficit","allowedByTags","availablePack","x","packByTag","every","requiredTag","detectPurchaseOrSubscribePackagesReceived","addClass","decorateUnits","bestPriceUnit","historyPromise","historyResolve","lastTokens","purchased","subscribed","features","foundLastPurchase","foundLastSubscribe","store","errTP","threePackPackages","accounts","history","duetypes","select","sortingdirection","TPAmounts","TPPack","Object","values","item","Tokens","lst","closest","showPackages","isUnitForSubscribeOnPackage","subscribe","isUnitForPurchaseCredits","purchasepack","render","innerHTML","dom","append","on","currency","calculateDefaultPreferred","vip","defaultVipPackage","defaultPackage","res","isVip","isPayingGross","Math","round","discountLabelSuffix","originPrice","vatConverter","convert","start","silentMode","saveClass","p2","once","async","parallel","destroy","restoreClass","empty","deficitChanged","templates","tpl","sync"],"mappings":"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","file":"widgets/module/purchase/units/main.js","sourceRoot":"/source/","sourcesContent":["/*\r\n * Публикует события:\r\n * package.selected to purchase\r\n * credits.received to purchase\r\n * command.purchase.promo-header.show\r\n *\r\n * Слушает события:\r\n * event.application.purchase.start\r\n * event.application.purchase.stop\r\n * event.purchase.credits.deficit\r\n */\r\n\r\nimport bus from 'bus';\r\nimport async from 'async';\r\nimport domains from 'modules/domains';\r\nimport templates from 'modules/templates';\r\nimport dom from 'modules/env/dom';\r\nimport me from 'modules/me';\r\nimport curry from 'modules/utils/curry';\r\nimport config from 'config';\r\nimport mall from 'repositories/credits/mall';\r\nimport tags from 'repositories/users/tags';\r\nimport subscription from 'repositories/credits/subscriptions';\r\nimport resolveExperiment from 'modules/purchase/no-purchase-experiment';\r\nimport api from 'api';\r\nimport features from 'modules/features/server';\r\nimport vatConverter from 'modules/purchase/vat-converter';\r\nimport originPrice from 'modules/purchase/originPrice';\r\n\r\n\r\nlet local = bus.create('purchase'),\r\n deficit = 0,\r\n units,\r\n defaultPreferred,\r\n defaultLessRequiredAmount = false,\r\n defaultAutoDetected = 0,\r\n historyLastPurchased = 0,\r\n historyLastSubscribed = 0,\r\n userTags = [],\r\n hasNonSubscriptionTransactionLast = false,\r\n thereWasSubscription = false;\r\n\r\nconst DEFAULT_STORE = 'moto',\r\n LAST_PURCHASE_PREFFER_FEATURE = 'last-purchase-preffer',\r\n DUTE_TYPE_FILTER = 'PurchaseCredits',\r\n HISTORY_OPERATIONS_COUNT = 50,\r\n HISTORY_SORTING_DIRECTION = 'desc';\r\n\r\nconst isMembershipRenew = (unit) =>\r\n unit.sku &&\r\n unit.sku.indexOf('membership') !== -1 &&\r\n unit.sku.indexOf('membershippack') === -1;\r\n\r\nfunction isMembershipPack(unit) {\r\n return unit.sku && unit.sku.indexOf('membershippack') !== -1;\r\n}\r\n\r\nconst isThreepack = (unit) =>\r\n unit && unit.sku && unit.sku.includes('threepack');\r\nconst isPurchasepack = (unit) =>\r\n unit && unit.sku && unit.sku.includes('creditpack');\r\n/**\r\n * Функция возвращает truе, если:\r\n * - была повторная регистрация с \"грязными\" куками ИЛИ\r\n * - была отмена купленной подписки (например, из-за проблем с картой, закончился срок действия или закончились деньги и т.п.)\r\n */\r\nconst isPayingUser = () =>\r\n userTags.includes('membership') && userTags.includes('customer');\r\n\r\nconst isVisibleMembershipPackages = (container) => {\r\n const packages = container.find('.package label input').toArray();\r\n const units = packages\r\n .map((node) => node.dataset['sku'])\r\n .filter((el) => el !== undefined);\r\n return units.some((unit) => unit.indexOf('membershippack') > -1);\r\n};\r\n\r\n/**\r\n * Функция фильтрует полученные от API пакеты по списку пакетов из конфига\r\n */\r\nfunction filterUnits(units) {\r\n if (\r\n !config.purchase ||\r\n !config.purchase.availablePackages ||\r\n !config.purchase.availablePackages.length\r\n ) {\r\n return units;\r\n }\r\n\r\n return units.filter((unit) =>\r\n config.purchase.availablePackages.includes(unit.amount)\r\n );\r\n}\r\n\r\nfunction unAvailableDeficitPackage(amount, deficit, threepack) {\r\n let foundPackage = null;\r\n\r\n if (config.purchase && config.purchase.deficits) {\r\n for (var index = 0; index < config.purchase.deficits.length; index++) {\r\n var deficitItem = config.purchase.deficits[index];\r\n if (deficitItem['package-amount'] === amount) {\r\n foundPackage = deficitItem;\r\n break;\r\n }\r\n }\r\n }\r\n \r\n if (!foundPackage) return false;\r\n const existByTag = isExistByTag(foundPackage['package-amount']);\r\n\r\n if (existByTag) {\r\n if (userTags.includes('vip')) {\r\n return !config.purchase['package-by-tag'].filter((p) => {\r\n if( p['package-amount'] === foundPackage['package-amount'] && p.tags.includes('vip')) return p['package-amount']\r\n }).length\r\n }\r\n }\r\n\r\n return foundPackage && (deficit <= foundPackage[`deficit${threepack?'-threepack':''}`]);\r\n}\r\n\r\nfunction isExistByTag(pack) {\r\n if (!config.purchase['package-by-tag']) return false;\r\n \r\n return config.purchase['package-by-tag']\r\n .map((packageByTag) => packageByTag['package-amount'])\r\n .includes(pack)\r\n} \r\n\r\nfunction getUnitByAmount(amount) {\r\n var found;\r\n units.some(function (info, i) {\r\n if (\r\n amount === info.amount ||\r\n i + 1 === units.length ||\r\n (!i && amount < info.amount)\r\n ) {\r\n found = info;\r\n return true;\r\n }\r\n let nextUnit = i+1 <= units.length? units[i + 1] : info;\r\n if (amount > info.amount && amount <= nextUnit.amount) {\r\n const diff1 = amount - info.amount;\r\n const diff2 = nextUnit.amount - amount;\r\n if (diff1 <= diff2) {\r\n found = info\r\n } else {\r\n found = nextUnit;\r\n }\r\n return true;\r\n }\r\n });\r\n return found;\r\n}\r\n\r\nexport function create(container) {\r\n var list = container.find('.packages'),\r\n template;\r\n\r\n function selectUnit(el) {\r\n var selected;\r\n\r\n if (!el.length) {\r\n el = list.find('[data-sku]:last');\r\n if (!el.length) {\r\n return;\r\n }\r\n } else if (el.parents('.package').hasClass('active')) {\r\n return;\r\n }\r\n\r\n units.some(function (unit) {\r\n if (unit.sku === el.data('sku')) {\r\n selected = unit;\r\n return true;\r\n }\r\n });\r\n\r\n local.emit('package.selected', selected);\r\n\r\n list\r\n .find('.package.active')\r\n .toggleClass('active', false)\r\n .find('input[type=\"radio\"]')\r\n .removeProp('checked')\r\n .removeAttr('checked')\r\n .end()\r\n .end()\r\n .find('.creditpack' + selected.amount)\r\n .toggleClass('active', true)\r\n .find('input[type=\"radio\"]')\r\n .prop('attr', true)\r\n .attr('checked', 'checked');\r\n }\r\n\r\n function getPreferredUnit(callback) {\r\n let currentSubscriptionPromise;\r\n mall.settings.get(me.id, function (err, data) {\r\n var preferred,\r\n selected,\r\n chargebackAmount = 0;\r\n\r\n bus.emit(\r\n data && data.chargebackreductionapplied\r\n ? 'event.purchase.chargeback-reduction.enabled'\r\n : 'event.purchase.chargeback-reduction.disabled'\r\n );\r\n if (!err && data.amount && data.chargebackreductionapplied) {\r\n chargebackAmount = data.amount;\r\n }\r\n\r\n /*\r\n * Пакет кредитов по умолчанию после покупки подписки\r\n * 1. No purchase credits history (just threepack subscription)\r\n * 2. Get next amount but not more 1000\r\n * */\r\n if (!hasNonSubscriptionTransactionLast) {\r\n if (historyLastPurchased > 1000) {\r\n historyLastPurchased = 1000;\r\n defaultPreferred = 1000;\r\n }\r\n }\r\n let historyLast = historyLastPurchased === 0 ? historyLastSubscribed : historyLastPurchased;\r\n defaultPreferred = getUnitByAmount(historyLast)\r\n\r\n const p1 = new Promise((resolve, reject) => {\r\n api.credits.subscriptions.next.get(\r\n me.id,\r\n domains.api.intercept((data) => {\r\n if (defaultPreferred) {\r\n var selectedAmount;\r\n\r\n if (chargebackAmount > 0) {\r\n //включен чарджбэк\r\n if (\r\n defaultLessRequiredAmount &&\r\n defaultAutoDetected !== 0 &&\r\n chargebackAmount < defaultAutoDetected\r\n ) {\r\n //сумма чарджбэка недостаточного размера\r\n selectedAmount = defaultAutoDetected;\r\n } else {\r\n //сумма чарджбэка достаточного размера\r\n selectedAmount = chargebackAmount;\r\n }\r\n } else {\r\n //выключен чарджбэк\r\n if (historyLastPurchased === 0 && historyLastSubscribed === 0) {\r\n // нет истории покупок и подписок\r\n if (defaultLessRequiredAmount && defaultAutoDetected !== 0) {\r\n //выбираем пакет достаточного размера\r\n selectedAmount = defaultAutoDetected;\r\n } else {\r\n //выбираем дефолтный пакет\r\n selectedAmount = defaultPreferred.amount;\r\n }\r\n } else {\r\n // в истории есть покупки ИЛИ подписки\r\n // вот тут нужно доработать логику:\r\n // если открыта форма подписки - берем последний подписочный пакет (в sku присутствует текст \"membershippack\")\r\n // если открыта форма покупки - берем последний покупной пакет\r\n if (units.some(isMembershipPack)) {\r\n // если открыта форма ПОДПИСКИ\r\n if (thereWasSubscription) {\r\n // то проверяем, была ли подписка до этого\r\n \r\n // если в data пришел sku не null, значит была смена подписки и нужно использовать тот пакет, на который была смена\r\n // если в data пришел sku === null, это значит, что смены подписки не было и нужно просто дальше использовать последний подписочный пакет из истории\r\n if (!data.sku) {\r\n if (\r\n defaultAutoDetected !== 0 &&\r\n historyLastSubscribed <= defaultAutoDetected\r\n ) {\r\n //в истории пакет недостаточного размера\r\n selectedAmount = defaultAutoDetected;\r\n } else {\r\n //в истории есть последний подписочный пакет достаточного размера\r\n selectedAmount = historyLastSubscribed;\r\n }\r\n } else {\r\n selectedAmount = parseInt(data.sku.match(/\\.membershippack(\\d{3,5})/)[1],10);\r\n }\r\n } else {\r\n if (historyLastSubscribed === 0) {\r\n selectedAmount = defaultAutoDetected;\r\n } else {\r\n if (\r\n defaultLessRequiredAmount &&\r\n defaultAutoDetected !== 0 &&\r\n historyLastPurchased < defaultAutoDetected\r\n ) {\r\n //в истории пакет недостаточного размера\r\n selectedAmount = defaultAutoDetected;\r\n } else {\r\n //в истории пакет достаточного размера\r\n selectedAmount = historyLastPurchased;\r\n }\r\n }\r\n }\r\n } else {\r\n // если открыта форма ПОКУПКИ, то мы подсвечиваем последний купленный пакет или дефолтны, если покупок не было\r\n if (historyLastPurchased === 0) {\r\n selectedAmount = defaultPreferred.amount;\r\n } else {\r\n selectedAmount = historyLastPurchased;\r\n }\r\n }\r\n }\r\n }\r\n preferred = getUnitByAmount(selectedAmount);\r\n if (preferred && preferred.amount > deficit) {\r\n callback(preferred);\r\n reject();\r\n } else {\r\n resolve(preferred)\r\n }\r\n }\r\n })\r\n );\r\n })\r\n\r\n p1.then(data => {\r\n preferred = !err && data.amount\r\n ? getUnitByAmount(data.amount)\r\n : units[units.length - 1];\r\n \r\n units.some(function (unit, i) {\r\n if (deficit) {\r\n if (preferred.amount >= deficit) {\r\n selected = preferred;\r\n return true;\r\n }\r\n \r\n if (unit.amount >= deficit) {\r\n selected = unit;\r\n return true;\r\n }\r\n } else if (\r\n preferred.amount >= unit.amount &&\r\n (units.length === i + 1 || preferred.amount < units[i + 1].amount)\r\n ) {\r\n selected = unit;\r\n }\r\n });\r\n \r\n if (!selected) {\r\n if (\r\n !deficit ||\r\n !units.some(function (unit) {\r\n if (unit.amount >= deficit) {\r\n selected = unit;\r\n return true;\r\n }\r\n })\r\n ) {\r\n selected = units[0];\r\n }\r\n }\r\n \r\n callback(selected);\r\n })\r\n .catch(err=>{\r\n console.log(err);\r\n })\r\n });\r\n }\r\n\r\n function getBestPriceUnit() {\r\n var perCredit = units && units[0] && units[0]['per-credit'],\r\n best = units && units[0];\r\n\r\n units.forEach(function (unit) {\r\n if (perCredit >= unit['per-credit']) {\r\n perCredit = unit['per-credit'];\r\n best = unit;\r\n }\r\n });\r\n\r\n best.bestPrice = true;\r\n return best;\r\n }\r\n\r\n const isBestpriceUnitVisible = (list, unit) =>\r\n !!list.find(`.creditpack${unit.amount}`).size();\r\n\r\n const removeUnit = (unit) =>\r\n container\r\n .removeClass('price-' + unit.price.toString().split('.').join('-'))\r\n .removeClass('creditpack-' + unit.amount.toString())\r\n .find('input[data-sku=\"' + unit.sku + '\"]')\r\n .parents('.package')\r\n .remove();\r\n\r\n\r\n /*\r\n * Фильтруем полученные пакеты с целью оствить только те, которые больше возникшего дифицита или которые необходимо\r\n * показывать в соответствии с настройками в config\r\n */ \r\n function filterUnsuitablePackages() {\r\n units.forEach(function (unit) {\r\n if (!isMembershipRenew(unit)) {\r\n const amount = unit.amount;\r\n\r\n if (deficit > 0) {\r\n if (amount < deficit || unAvailableDeficitPackage(amount, deficit, unit.threepack)) {\r\n if (amount === defaultPreferred) {\r\n defaultLessRequiredAmount = true;\r\n }\r\n removeUnit(unit);\r\n } else if (defaultAutoDetected === 0) {\r\n defaultAutoDetected = amount;\r\n if (unit.threepack) {\r\n defaultLessRequiredAmount = true;\r\n }\r\n }\r\n } else {\r\n var existAsDeficit = false,\r\n existByTag = false,\r\n allowedByTags = true,\r\n availablePack = amount;\r\n\r\n if (config.purchase.deficits) {\r\n existAsDeficit = config.purchase.deficits\r\n .map((x) => x['package-amount'])\r\n .includes(availablePack);\r\n }\r\n if (config.purchase['package-by-tag']) {\r\n existByTag = isExistByTag(availablePack);\r\n\r\n if (existByTag) {\r\n var packByTag = config.purchase['package-by-tag'].find(\r\n (packageByTag) =>\r\n packageByTag['package-amount'] === availablePack\r\n );\r\n if (unit.threepack) {\r\n allowedByTags = packByTag.tags.every(\r\n (requiredTag) =>\r\n userTags.includes(requiredTag) && !isPayingUser()\r\n );\r\n } else {\r\n allowedByTags = packByTag.tags.every((requiredTag) =>\r\n userTags.includes(requiredTag)\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (existByTag) {\r\n if (!allowedByTags) {\r\n removeUnit(unit);\r\n } else if (defaultAutoDetected === 0) {\r\n defaultAutoDetected = amount;\r\n }\r\n } else {\r\n if (existAsDeficit) {\r\n removeUnit(unit);\r\n } else if (defaultAutoDetected === 0) {\r\n defaultAutoDetected = amount;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n \r\n /*\r\n * Среди доступных пакетов могут быть или только пакеты подписки или пакеты покупки\r\n * удалим класс .purchase в первом случае и класс .free-membership во втором случае\r\n * из обертки .purchase-form\r\n */\r\n function detectPurchaseOrSubscribePackagesReceived() {\r\n if (!isVisibleMembershipPackages(container)) {\r\n container.removeClass('free-membership');\r\n container.addClass('purchase');\r\n } else {\r\n container.removeClass('purchase');\r\n }\r\n }\r\n\r\n /*\r\n * Учет в визуальном представлении пакетов контекст -- текущий дефицит пакетов, предпочтительный пакет\r\n * и маркер лучшей цены.\r\n */\r\n function decorateUnits(callback) {\r\n var bestPriceUnit, historyPromise;\r\n\r\n defaultLessRequiredAmount = false;\r\n defaultAutoDetected = 0;\r\n historyLastPurchased = 0;\r\n historyLastSubscribed = 0;\r\n \r\n filterUnsuitablePackages();\r\n\r\n detectPurchaseOrSubscribePackagesReceived();\r\n\r\n // purchase section works fine and we need add section\r\n\r\n historyPromise = new Promise(function (historyResolve) {\r\n let lastTokens = {\r\n purchased: 0,\r\n subscribed: 0,\r\n };\r\n\r\n if (config.features[LAST_PURCHASE_PREFFER_FEATURE]) {\r\n let foundLastPurchase = false,\r\n foundLastSubscribe = false;\r\n api.credits.mall.subscriptions.get(\r\n me.id,\r\n { store: 'moto' },\r\n function (errTP, threePackPackages) {\r\n api.credits.accounts.history.get(\r\n me.id,\r\n {\r\n duetypes: DUTE_TYPE_FILTER,\r\n select: HISTORY_OPERATIONS_COUNT,\r\n sortingdirection: HISTORY_SORTING_DIRECTION,\r\n },\r\n function (err, data) {\r\n // check if has one not subscription transaction\r\n let TPAmounts = {};\r\n for (let TPPack of threePackPackages) {\r\n TPAmounts[TPPack.amount] = +TPPack.amount;\r\n }\r\n TPAmounts = Object.values(TPAmounts);\r\n for (let item of data) {\r\n if (\r\n !foundLastPurchase &&\r\n TPAmounts.indexOf(+item.Tokens) === -1\r\n ) {\r\n foundLastPurchase = true;\r\n hasNonSubscriptionTransactionLast = true;\r\n lastTokens.purchased = +item.Tokens;\r\n }\r\n\r\n if (\r\n !foundLastSubscribe &&\r\n TPAmounts.indexOf(+item.Tokens) > -1\r\n ) {\r\n foundLastSubscribe = true;\r\n thereWasSubscription = true;\r\n lastTokens.subscribed = +item.Tokens;\r\n }\r\n\r\n if (foundLastPurchase && foundLastSubscribe) break;\r\n }\r\n\r\n historyResolve(lastTokens);\r\n }\r\n );\r\n }\r\n );\r\n } else {\r\n historyResolve(lastTokens);\r\n }\r\n });\r\n\r\n historyPromise\r\n .then(lastTokens => {\r\n historyLastPurchased = lastTokens.purchased;\r\n historyLastSubscribed = lastTokens.subscribed;\r\n\r\n getPreferredUnit((unit) => {\r\n selectUnit(list.find('[data-sku=\"' + unit.sku + '\"]'));\r\n \r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n\r\n bestPriceUnit = getBestPriceUnit();\r\n if (isBestpriceUnitVisible(list, bestPriceUnit)) {\r\n let lst = features('threepack') ? list.closest('.purchase-form') : list;\r\n lst\r\n .removeClass('creditpack*best')\r\n .addClass(\r\n bestPriceUnit && bestPriceUnit.amount\r\n ? 'creditpack' + bestPriceUnit.amount + 'best'\r\n : ''\r\n );\r\n }\r\n });\r\n }\r\n\r\n function showPackages () {\r\n list.toggleClass('loading', false);\r\n container.toggleClass('loading', false);\r\n }\r\n\r\n /**\r\n * Проверка, относится ли пакет к покупке кредитов или к подписке на пакет\r\n */\r\n function isUnitForSubscribeOnPackage(unit) {\r\n if ((unit.subscribe || unit['free-membership']) && unit.price) {\r\n container.addClass('price-' + unit.price.toString().split('.').join('-'));\r\n }\r\n\r\n return unit.subscribe;\r\n }\r\n\r\n /**\r\n * Проверка, относится ли пакет к покупке недостающих кредитов\r\n */\r\n function isUnitForPurchaseCredits(unit) {\r\n if (isPurchasepack(unit)) {\r\n container.addClass('purchasepack-' + unit.amount.toString());\r\n }\r\n\r\n return unit.purchasepack;\r\n }\r\n\r\n /**\r\n * Отрисовка пакетов.\r\n */\r\n function render(callback) {\r\n list[0].innerHTML = '';\r\n\r\n dom.append(\r\n list,\r\n template.render({\r\n packages: units,\r\n threepack: true,\r\n }),\r\n function () {\r\n container\r\n .find('.package')\r\n .on('click', function () {\r\n selectUnit(list.find(this).find('[type=\"radio\"]'));\r\n })\r\n .end()\r\n .toggleClass('currency-euro', units[0].currency === 'eur');\r\n\r\n if (units.some(isUnitForPurchaseCredits)) {\r\n container.addClass('purchasepack');\r\n }\r\n if (units.some(isUnitForSubscribeOnPackage)) {\r\n container.addClass('subscribe');\r\n } else if (\r\n units.some(function (unit) {\r\n return unit['free-membership'];\r\n })\r\n ) {\r\n container.addClass('free-membership');\r\n } else {\r\n if (!features('threepack')) {\r\n container.addClass('purchase');\r\n }\r\n }\r\n\r\n decorateUnits(callback);\r\n }\r\n );\r\n }\r\n\r\n /*\r\n * Вычисление предпочитаемого пакета по умолчанию. Он будет установлен, если другая логика\r\n * в getPreferredUnit не определит другой предпочитаемый пакет.\r\n * @param {boolean} vip Является ли пользователь VIP-клиентом\r\n * @param {function} callback\r\n * @returns {*}\r\n */\r\n function calculateDefaultPreferred(vip, callback) {\r\n resolveExperiment(me, function (err, amount) {\r\n if (!err) {\r\n return callback(null, amount);\r\n }\r\n\r\n if (vip && config.purchase && config.purchase.defaultVipPackage) {\r\n return callback(null, config.purchase.defaultVipPackage);\r\n }\r\n\r\n if (config.purchase && config.purchase.defaultPackage) {\r\n return callback(null, config.purchase.defaultPackage);\r\n }\r\n\r\n callback(true);\r\n });\r\n }\r\n\r\n function create(res) {\r\n const isVip = res.tags.includes('vip');\r\n const isPayingGross = res.tags.includes('pay-gross');\r\n userTags = res.tags || [];\r\n\r\n calculateDefaultPreferred(isVip, function (err, preferred) {\r\n defaultPreferred = !err && preferred;\r\n units = filterUnits(res.credits);\r\n\r\n units.forEach(function (unit, i) {\r\n units[i]['per-credit'] = Math.round((unit.price / unit.amount) * 100);\r\n\r\n units[i].discountLabelSuffix = isPayingGross ? '60' : units[i].currency;\r\n\r\n if (isMembershipRenew(unit)) {\r\n units[i].subscribe = true;\r\n }\r\n\r\n if (isThreepack(unit)) {\r\n units[i].threepack = true;\r\n }\r\n\r\n if (isPurchasepack(unit)) {\r\n units[i].purchasepack = true;\r\n }\r\n\r\n if (isMembershipPack(unit)) {\r\n units[i]['free-membership'] = true;\r\n }\r\n\r\n if (unit.tags && unit.tags.indexOf('vip') !== -1) {\r\n units[i].vip = true;\r\n }\r\n\r\n if (unit.sku && unit.sku.indexOf('freetrial') !== -1) {\r\n units[i]['freetrial'] = true;\r\n units[i].originPrice = originPrice.get(units[i].currency);\r\n }\r\n\r\n units[i] = vatConverter.convert(units[i]);\r\n\r\n units[i]['per-credit'] = Math.round(\r\n (units[i].price / unit.amount) * 100\r\n );\r\n });\r\n\r\n // удаление всех пакетов, кроме подписки, если в списке пакетов есть один пакет-membership\r\n if (units.some(isMembershipRenew)) {\r\n units = units.filter(isMembershipRenew);\r\n }\r\n\r\n bus.emit('command.purchase.vat.price.update', units);\r\n bus.emit('command.purchase.vat.currency.update', units[0].currency);\r\n\r\n render(function () {\r\n bus.emit('credits.received', units);\r\n local.emit('credits.received', units);\r\n });\r\n });\r\n }\r\n\r\n function start(data) {\r\n if (data.silentMode) {\r\n return;\r\n }\r\n\r\n list.saveClass();\r\n container.saveClass();\r\n\r\n if (me.id){\r\n p2();\r\n }else{\r\n bus.once('authorized', ()=>{\r\n p2();\r\n });\r\n }\r\n\r\n function p2(){\r\n async.parallel(\r\n {\r\n credits: curry(mall.credits.get, { store: DEFAULT_STORE }),\r\n tags: function (next) {\r\n tags.list(me.id, curry(next, null));\r\n },\r\n },\r\n domains.api.intercept(create)\r\n );\r\n }\r\n }\r\n\r\n function destroy() {\r\n list.restoreClass().empty();\r\n container.restoreClass();\r\n }\r\n\r\n function deficitChanged(amount) {\r\n deficit = +amount;\r\n units && decorateUnits();\r\n }\r\n\r\n templates.get(\r\n 'packages-list',\r\n domains.templates.intercept(function (tpl) {\r\n template = tpl;\r\n })\r\n );\r\n\r\n bus\r\n .sync('event.application.purchase.start', start)\r\n .sync('event.application.purchase.stop', destroy)\r\n .sync('event.purchase.credits.deficit', deficitChanged);\r\n\r\n local.sync('credits.received', showPackages);\r\n}\r\n"]}